Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
I
ibzwf
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
ibiz4jteam
ibzwf
提交
a2dc977f
提交
a2dc977f
编写于
5月 13, 2020
作者:
ibizdev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ibizdev提交
上级
94e033ea
变更
48
显示空白字符变更
内嵌
并排
正在显示
48 个修改的文件
包含
357 行增加
和
164 行删除
+357
-164
data-dictionary.json
app_web/public/assets/json/data-dictionary.json
+2
-0
app-register.ts
app_web/src/app-register.ts
+2
-0
app-quick-group.less
app_web/src/components/app-quick-group/app-quick-group.less
+37
-0
app-quick-group.vue
app_web/src/components/app-quick-group/app-quick-group.vue
+175
-0
md-view-engine.ts
app_web/src/engine/view/md-view-engine.ts
+26
-0
codelist.ts
app_web/src/mock/codelist/codelist.ts
+2
-0
wfgroup-grid-view-base.vue
...ges/workflow/wfgroup-grid-view/wfgroup-grid-view-base.vue
+5
-0
wfgroup-mpickup-view-base.vue
...rkflow/wfgroup-mpickup-view/wfgroup-mpickup-view-base.vue
+8
-1
wfgroup-pickup-grid-view-base.vue
...fgroup-pickup-grid-view/wfgroup-pickup-grid-view-base.vue
+1
-0
wfmember-grid-view-base.vue
...s/workflow/wfmember-grid-view/wfmember-grid-view-base.vue
+5
-0
wfprocess-definition-grid-view-base.vue
...inition-grid-view/wfprocess-definition-grid-view-base.vue
+5
-0
wfuser-grid-view-base.vue
...pages/workflow/wfuser-grid-view/wfuser-grid-view-base.vue
+5
-0
wfuser-mpickup-view-base.vue
...workflow/wfuser-mpickup-view/wfuser-mpickup-view-base.vue
+8
-1
wfuser-pickup-grid-view-base.vue
.../wfuser-pickup-grid-view/wfuser-pickup-grid-view-base.vue
+1
-0
default.less
app_web/src/styles/default.less
+6
-1
default-searchform-base.vue
...ts/wfgroup/default-searchform/default-searchform-base.vue
+2
-2
main-grid-base.vue
app_web/src/widgets/wfgroup/main-grid/main-grid-base.vue
+3
-1
main-grid.less
app_web/src/widgets/wfgroup/main-grid/main-grid.less
+6
-3
default-searchform-base.vue
...s/wfmember/default-searchform/default-searchform-base.vue
+2
-2
main-grid-base.vue
app_web/src/widgets/wfmember/main-grid/main-grid-base.vue
+3
-1
main-grid.less
app_web/src/widgets/wfmember/main-grid/main-grid.less
+6
-3
default-searchform-base.vue
...definition/default-searchform/default-searchform-base.vue
+2
-2
main-grid-base.vue
...widgets/wfprocess-definition/main-grid/main-grid-base.vue
+3
-1
main-grid.less
...src/widgets/wfprocess-definition/main-grid/main-grid.less
+6
-3
default-searchform-base.vue
...ets/wfuser/default-searchform/default-searchform-base.vue
+2
-2
main-grid-base.vue
app_web/src/widgets/wfuser/main-grid/main-grid-base.vue
+3
-1
main-grid.less
app_web/src/widgets/wfuser/main-grid/main-grid.less
+6
-3
config.xml
config.xml
+0
-5
webSecurityConfig.java
...rc/main/java/cn/ibizlab/web/config/webSecurityConfig.java
+0
-1
webApplication.java
...-app-web/src/main/java/cn/ibizlab/web/webApplication.java
+1
-0
application-web-prod.yml
...ibzwf-app-web/src/main/resources/application-web-prod.yml
+4
-0
DevBootApplication.java
ibzwf-boot/src/main/java/cn/ibizlab/DevBootApplication.java
+3
-1
DevBootSecurityConfig.java
...rc/main/java/cn/ibizlab/config/DevBootSecurityConfig.java
+0
-1
application-dev.yml
ibzwf-boot/src/main/resources/application-dev.yml
+1
-1
DEPrivs.json
ibzwf-core/src/main/resources/deprivs/DEPrivs.json
+0
-42
Dockerfile
ibzwf-provider/ibzwf-provider-api/src/main/docker/Dockerfile
+1
-1
ibzwf-provider-api.yaml
...bzwf-provider-api/src/main/docker/ibzwf-provider-api.yaml
+1
-3
apiSecurityConfig.java
...rc/main/java/cn/ibizlab/api/config/apiSecurityConfig.java
+0
-1
ibzwfapiApplication.java
...api/src/main/java/cn/ibizlab/api/ibzwfapiApplication.java
+1
-0
application-api-dev.yml
...f-provider-api/src/main/resources/application-api-dev.yml
+1
-1
application-api-prod.yml
...-provider-api/src/main/resources/application-api-prod.yml
+1
-1
PermissionSyncJob.java
.../src/main/java/cn/ibizlab/util/job/PermissionSyncJob.java
+1
-1
AuthenticationController.java
...n/java/cn/ibizlab/util/rest/AuthenticationController.java
+2
-1
AuthPermissionEvaluator.java
...ava/cn/ibizlab/util/security/AuthPermissionEvaluator.java
+1
-76
AuthorizationTokenFilter.java
...va/cn/ibizlab/util/security/AuthorizationTokenFilter.java
+1
-1
IBZUAAUserService.java
.../main/java/cn/ibizlab/util/service/IBZUAAUserService.java
+2
-0
IBZUSERServiceImpl.java
...main/java/cn/ibizlab/util/service/IBZUSERServiceImpl.java
+2
-0
SimpleUserService.java
.../main/java/cn/ibizlab/util/service/SimpleUserService.java
+2
-0
未找到文件。
app_web/public/assets/json/data-dictionary.json
浏览文件 @
a2dc977f
...
...
@@ -9,6 +9,7 @@
"label"
:
"是"
,
"text"
:
"是"
,
"data"
:
""
,
"codename"
:
"Item_1"
,
"value"
:
"1"
,
"disabled"
:
false
...
...
@@ -18,6 +19,7 @@
"label"
:
"否"
,
"text"
:
"否"
,
"data"
:
""
,
"codename"
:
"Item_0"
,
"value"
:
"0"
,
"disabled"
:
false
...
...
app_web/src/app-register.ts
浏览文件 @
a2dc977f
...
...
@@ -70,6 +70,7 @@ import AppFormatData from './components/app-format-data/app-format-data.vue'
import
AppUploadFileInfo
from
'./components/app-upload-file-info/app-upload-file-info.vue'
import
ContextMenu
from
'./components/context-menu/context-menu'
import
AppColumnFormat
from
'./components/app-column-format/app-column-format.vue'
import
AppQuickGroup
from
'./components/app-quick-group/app-quick-group.vue'
// 全局挂载UI实体服务注册中心
window
[
'uiServiceRegister'
]
=
uiServiceRegister
;
...
...
@@ -149,5 +150,6 @@ export const AppComponents = {
v
.
component
(
'app-upload-file-info'
,
AppUploadFileInfo
);
v
.
component
(
'context-menu'
,
ContextMenu
);
v
.
component
(
'app-column-format'
,
AppColumnFormat
);
v
.
component
(
'app-quick-group'
,
AppQuickGroup
);
},
};
\ No newline at end of file
app_web/src/components/app-quick-group/app-quick-group.less
0 → 100644
浏览文件 @
a2dc977f
.app-quick-group{
padding: 4px;
background-color: #F1F1F1;
.app-quick-item{
margin-right: 8px;
padding: 8px;
cursor: pointer;
.app-quick-item-label{
margin-left:4px;
}
.app-seleted-item{
display: inline-block;
font-weight: 700;
color: #0c64eb !important;
padding: 4px;
border-bottom: 2px solid;
}
.app-seleted-item:focus {
outline: none;
}
.app-quick-item-counter{
border-radius: 12px;
padding-left: 4px;
font-size: 12px;
font-weight: 400;
vertical-align: middle;
display: inline-block;
width: 18px;
height: 18px;
margin-left: 4px;
background-color: #ddd;
}
}
.app-quick-item :hover{
color: #0c64eb !important;
}
}
\ No newline at end of file
app_web/src/components/app-quick-group/app-quick-group.vue
0 → 100644
浏览文件 @
a2dc977f
<
template
>
<div
class=
"app-quick-group"
>
<span
class=
"app-quick-item"
v-for=
"item in renderArray"
:key=
"item.id"
@
click=
"handleClick(item)"
>
<span
v-if=
"!item.children"
:style=
"
{color:item.color}" :class="{'app-seleted-item':isSelectedItem(item)}">
<i
v-if=
" item.iconcls && !Object.is(item.iconcls, '')"
:class=
"item.iconcls"
></i>
<img
v-else-if=
"item.icon && !Object.is(item.icon, '')"
:src=
"item.icon"
/>
<span
class=
"app-quick-item-label"
>
{{
item
.
label
}}
</span>
<span
v-show=
"isSelectedItem(item) && counterService && counterService.counterData && counterService.counterData[item.codename]"
class=
"app-quick-item-counter"
>
{{
itemTag
(
item
)
}}
</span>
</span>
<el-dropdown
v-if=
"item.children"
style=
"outline: none !important;"
trigger=
"click"
@
command=
"handleCommand($event,item)"
>
<span
:style=
"
{color:item.color}" :class="{'app-seleted-item':isSelectedItem(item)}">
<i
v-if=
" item.iconcls && !Object.is(item.iconcls, '')"
:class=
"item.iconcls"
></i>
<img
v-else-if=
"item.icon && !Object.is(item.icon, '')"
:src=
"item.icon"
/>
<span
class=
"app-quick-item-label"
>
{{
item
.
label
}}
</span>
<span
v-show=
"isSelectedItem(item) && counterService && counterService.counterData && counterService.counterData[item.codename]"
class=
"app-quick-item-counter"
>
{{
itemTag
(
item
)
}}
</span>
</span>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
v-for=
"childitem in item.children"
:command=
"childitem"
:key=
"childitem.id"
>
<span
:style=
"
{color:childitem.color}">
<i
v-if=
" childitem.iconcls && !Object.is(childitem.iconcls, '')"
:class=
"childitem.iconcls"
></i>
<img
v-else-if=
"childitem.icon && !Object.is(childitem.icon, '')"
:src=
"childitem.icon"
/>
<span
:style=
"
{color:(childitem.label == item.label)?'#0c64eb':''}">
{{
childitem
.
label
}}
</span>
</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</span>
</div>
</
template
>
<
script
lang=
"ts"
>
import
{
Vue
,
Component
,
Prop
,
Model
,
Emit
}
from
"vue-property-decorator"
;
@
Component
({})
export
default
class
AppQuickGroup
extends
Vue
{
/**
* 传入渲染项
*
* @type {Array<any>}
* @memberof AppQuickGroup
*/
@
Prop
()
public
items
!
:
Array
<
any
>
;
/**
* 计数器服务名
*
* @type {string}
* @memberof AppQuickGroup
*/
@
Prop
()
public
counterService
?:
any
;
/**
* UI选中项
*
* @type {*}
* @memberof AppQuickGroup
*/
public
selectedUiItem
:
any
;
/**
* 传入渲染项
*
* @type {Array<any>}
* @memberof AppQuickGroup
*/
get
renderArray
(){
if
(
this
.
items
&&
this
.
items
.
length
>
0
){
this
.
selectedUiItem
=
this
.
items
[
0
];
this
.
handleClick
(
this
.
items
[
0
]);
return
this
.
handleDataSet
(
this
.
items
)
}
else
{
return
[];
}
}
public
itemTag
(
item
:
any
){
if
(
this
.
counterService
&&
this
.
counterService
.
counterData
&&
item
.
codename
){
return
this
.
counterService
.
counterData
[
item
.
codename
];
}
else
{
return
""
;
}
}
/**
* 是否选中当前项
*
* @param item 传入当前项
* @memberof AppQuickGroup
*/
public
isSelectedItem
(
item
:
any
){
if
(
this
.
selectedUiItem
&&
(
this
.
selectedUiItem
.
id
===
item
.
id
)){
return
true
;
}
else
{
return
false
;
}
}
/**
* 处理代码表返回数据(树状结构)
*
* @param result 返回数组
* @memberof AppQuickGroup
*/
public
handleDataSet
(
result
:
Array
<
any
>
){
let
list
:
Array
<
any
>
=
[];
if
(
result
.
length
===
0
){
return
list
;
}
result
.
forEach
((
codeItem
:
any
)
=>
{
if
(
!
codeItem
.
pvalue
){
let
valueField
:
string
=
codeItem
.
value
;
this
.
setChildCodeItems
(
valueField
,
result
,
codeItem
);
list
.
push
(
codeItem
);
}
})
return
list
;
}
/**
* 处理非根节点数据
*
* @param pValue 父值
* @param result 返回数组
* @param codeItem 代码项
* @memberof AppQuickGroup
*/
public
setChildCodeItems
(
pValue
:
string
,
result
:
Array
<
any
>
,
codeItem
:
any
){
result
.
forEach
((
item
:
any
)
=>
{
if
(
item
.
pvalue
==
pValue
){
let
valueField
:
string
=
item
.
value
;
this
.
setChildCodeItems
(
valueField
,
result
,
item
);
if
(
!
codeItem
.
children
){
codeItem
.
children
=
[];
}
codeItem
.
children
.
push
(
item
);
}
})
}
/**
* 处理点击事件
*
* @param $event 值
* @param isswitch 是否切换UI选中项
* @memberof AppQuickGroup
*/
public
handleClick
(
$event
:
any
,
isswitch
:
boolean
=
true
){
this
.
$emit
(
'valuechange'
,
$event
);
if
(
isswitch
){
this
.
selectedUiItem
=
$event
;
}
this
.
$forceUpdate
();
}
/**
* 处理子项点击事件
*
* @param $event 值
* @param item 父值
* @memberof AppQuickGroup
*/
public
handleCommand
(
$event
:
any
,
item
:
any
){
item
.
label
=
$event
.
label
;
item
.
codename
=
$event
.
codename
;
this
.
handleClick
(
$event
,
false
);
}
}
</
script
>
<
style
lang=
'less'
>
@import "./app-quick-group.less";
</
style
>
\ No newline at end of file
app_web/src/engine/view/md-view-engine.ts
浏览文件 @
a2dc977f
...
...
@@ -117,6 +117,9 @@ export default class MDViewEngine extends ViewEngine {
if
(
Object
.
is
(
eventName
,
'load'
))
{
this
.
onSearchFormLoad
(
args
);
}
if
(
Object
.
is
(
eventName
,
'search'
))
{
this
.
onSearchFormLoad
(
args
);
}
}
/**
...
...
@@ -157,6 +160,20 @@ export default class MDViewEngine extends ViewEngine {
this
.
isLoadDefault
=
true
;
}
/**
* 搜索表单搜索
*
* @param {*} [args={}]
* @memberof MDViewEngine
*/
public
onSearchFormSearch
(
args
:
any
=
{}):
void
{
if
(
this
.
getMDCtrl
()
&&
this
.
isLoadDefault
)
{
const
tag
=
this
.
getMDCtrl
().
name
;
this
.
setViewState2
({
tag
:
tag
,
action
:
'load'
,
viewdata
:
this
.
view
.
viewparams
});
}
this
.
isLoadDefault
=
true
;
}
/**
* 处理实体界面行为
*
...
...
@@ -372,6 +389,15 @@ export default class MDViewEngine extends ViewEngine {
if
(
this
.
view
&&
!
this
.
view
.
isExpandSearchForm
)
{
Object
.
assign
(
arg
,
{
query
:
this
.
view
.
query
});
}
// 快速分组和快速搜索栏
let
otherQueryParam
:
any
=
{};
if
(
this
.
view
&&
this
.
view
.
qucikGroupData
){
Object
.
assign
(
otherQueryParam
,
this
.
view
.
qucikGroupData
);
}
if
(
this
.
view
&&
this
.
view
.
qucikFormData
){
Object
.
assign
(
otherQueryParam
,
this
.
view
.
qucikFormData
);
}
Object
.
assign
(
arg
,{
viewparams
:
otherQueryParam
});
}
/**
...
...
app_web/src/mock/codelist/codelist.ts
浏览文件 @
a2dc977f
...
...
@@ -17,6 +17,7 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => {
label
:
'是'
,
text
:
'是'
,
"data"
:
""
,
"codename"
:
"Item_1"
,
value
:
'1'
,
disabled
:
false
,
...
...
@@ -26,6 +27,7 @@ mock.onGet('./assets/json/data-dictionary.json').reply((config: any) => {
label
:
'否'
,
text
:
'否'
,
"data"
:
""
,
"codename"
:
"Item_0"
,
value
:
'0'
,
disabled
:
false
,
...
...
app_web/src/pages/workflow/wfgroup-grid-view/wfgroup-grid-view-base.vue
浏览文件 @
a2dc977f
...
...
@@ -103,6 +103,7 @@
v-show=
"isExpandSearchForm"
loaddraftAction=
"FilterGetDraft"
loadAction=
"FilterGet"
name=
"searchform"
ref=
'searchform'
@
save=
"searchform_save($event)"
...
...
@@ -143,6 +144,7 @@
</div>
</
template
>
<
script
lang=
'tsx'
>
import
{
Vue
,
Component
,
Prop
,
Provide
,
Emit
,
Watch
}
from
'vue-property-decorator'
;
import
{
UIActionTool
,
Util
}
from
'@/utils'
;
...
...
@@ -152,6 +154,8 @@ import WFGroupService from '@/service/wfgroup/wfgroup-service';
import
GridViewEngine
from
'@engine/view/grid-view-engine'
;
import
CodeListService
from
"@service/app/codelist-service"
;
@
Component
({
components
:
{
...
...
@@ -1449,6 +1453,7 @@ export default class WFGroupGridViewBase extends Vue {
*/
public
isSingleSelect
:
boolean
=
false
;
/**
* 是否嵌入关系界面
*
...
...
app_web/src/pages/workflow/wfgroup-mpickup-view/wfgroup-mpickup-view-base.vue
浏览文件 @
a2dc977f
...
...
@@ -615,6 +615,7 @@ export default class WFGroupMPickupViewBase extends Vue {
}
const
removeSelect
:
boolean
=
this
.
viewSelections
.
some
((
selection
:
any
)
=>
selection
.
_select
);
this
.
containerModel
.
view_leftbtn
.
disabled
=
!
removeSelect
;
this
.
selectedData
=
JSON
.
stringify
(
this
.
viewSelections
);
}
/**
...
...
@@ -635,6 +636,7 @@ export default class WFGroupMPickupViewBase extends Vue {
});
const
removeSelect
:
boolean
=
this
.
viewSelections
.
some
((
selection
:
any
)
=>
selection
.
_select
);
this
.
containerModel
.
view_leftbtn
.
disabled
=
!
removeSelect
;
this
.
selectedData
=
JSON
.
stringify
(
this
.
viewSelections
);
}
/**
...
...
@@ -647,14 +649,18 @@ export default class WFGroupMPickupViewBase extends Vue {
if
(
!
Object
.
is
(
model
.
type
,
'PICKUPVIEWPANEL'
))
{
return
;
}
let
newSelections
:
any
[]
=
[];
model
.
selections
.
forEach
((
item
:
any
)
=>
{
const
index
:
number
=
this
.
viewSelections
.
findIndex
((
selection
:
any
)
=>
Object
.
is
(
item
.
srfkey
,
selection
.
srfkey
));
if
(
index
===
-
1
)
{
let
_item
:
any
=
{
...
JSON
.
parse
(
JSON
.
stringify
(
item
))
};
Object
.
assign
(
_item
,
{
_select
:
false
})
this
.
viewSelections
.
push
(
_item
);
newSelections
.
push
(
_item
);
}
else
{
newSelections
.
push
(
this
.
viewSelections
[
index
]);
}
});
this
.
viewSelections
=
newSelections
;
});
}
...
...
@@ -666,6 +672,7 @@ export default class WFGroupMPickupViewBase extends Vue {
public
onCLickAllLeft
():
void
{
this
.
viewSelections
=
[];
this
.
containerModel
.
view_leftbtn
.
disabled
=
true
;
this
.
selectedData
=
JSON
.
stringify
(
this
.
viewSelections
);
}
/**
...
...
app_web/src/pages/workflow/wfgroup-pickup-grid-view/wfgroup-pickup-grid-view-base.vue
浏览文件 @
a2dc977f
...
...
@@ -11,6 +11,7 @@
v-show=
"isExpandSearchForm"
loaddraftAction=
"FilterGetDraft"
loadAction=
"FilterGet"
name=
"searchform"
ref=
'searchform'
@
save=
"searchform_save($event)"
...
...
app_web/src/pages/workflow/wfmember-grid-view/wfmember-grid-view-base.vue
浏览文件 @
a2dc977f
...
...
@@ -103,6 +103,7 @@
v-show=
"isExpandSearchForm"
loaddraftAction=
"FilterGetDraft"
loadAction=
"FilterGet"
name=
"searchform"
ref=
'searchform'
@
save=
"searchform_save($event)"
...
...
@@ -143,6 +144,7 @@
</div>
</
template
>
<
script
lang=
'tsx'
>
import
{
Vue
,
Component
,
Prop
,
Provide
,
Emit
,
Watch
}
from
'vue-property-decorator'
;
import
{
UIActionTool
,
Util
}
from
'@/utils'
;
...
...
@@ -152,6 +154,8 @@ import WFMemberService from '@/service/wfmember/wfmember-service';
import
GridViewEngine
from
'@engine/view/grid-view-engine'
;
import
CodeListService
from
"@service/app/codelist-service"
;
@
Component
({
components
:
{
...
...
@@ -1480,6 +1484,7 @@ export default class WFMemberGridViewBase extends Vue {
*/
public
isSingleSelect
:
boolean
=
false
;
/**
* 是否嵌入关系界面
*
...
...
app_web/src/pages/workflow/wfprocess-definition-grid-view/wfprocess-definition-grid-view-base.vue
浏览文件 @
a2dc977f
...
...
@@ -103,6 +103,7 @@
v-show=
"isExpandSearchForm"
loaddraftAction=
"FilterGetDraft"
loadAction=
"FilterGet"
name=
"searchform"
ref=
'searchform'
@
save=
"searchform_save($event)"
...
...
@@ -143,6 +144,7 @@
</div>
</
template
>
<
script
lang=
'tsx'
>
import
{
Vue
,
Component
,
Prop
,
Provide
,
Emit
,
Watch
}
from
'vue-property-decorator'
;
import
{
UIActionTool
,
Util
}
from
'@/utils'
;
...
...
@@ -152,6 +154,8 @@ import WFProcessDefinitionService from '@/service/wfprocess-definition/wfprocess
import
GridViewEngine
from
'@engine/view/grid-view-engine'
;
import
CodeListService
from
"@service/app/codelist-service"
;
@
Component
({
components
:
{
...
...
@@ -1449,6 +1453,7 @@ export default class WFProcessDefinitionGridViewBase extends Vue {
*/
public
isSingleSelect
:
boolean
=
false
;
/**
* 是否嵌入关系界面
*
...
...
app_web/src/pages/workflow/wfuser-grid-view/wfuser-grid-view-base.vue
浏览文件 @
a2dc977f
...
...
@@ -103,6 +103,7 @@
v-show=
"isExpandSearchForm"
loaddraftAction=
"FilterGetDraft"
loadAction=
"FilterGet"
name=
"searchform"
ref=
'searchform'
@
save=
"searchform_save($event)"
...
...
@@ -143,6 +144,7 @@
</div>
</
template
>
<
script
lang=
'tsx'
>
import
{
Vue
,
Component
,
Prop
,
Provide
,
Emit
,
Watch
}
from
'vue-property-decorator'
;
import
{
UIActionTool
,
Util
}
from
'@/utils'
;
...
...
@@ -152,6 +154,8 @@ import WFUserService from '@/service/wfuser/wfuser-service';
import
GridViewEngine
from
'@engine/view/grid-view-engine'
;
import
CodeListService
from
"@service/app/codelist-service"
;
@
Component
({
components
:
{
...
...
@@ -1449,6 +1453,7 @@ export default class WFUserGridViewBase extends Vue {
*/
public
isSingleSelect
:
boolean
=
false
;
/**
* 是否嵌入关系界面
*
...
...
app_web/src/pages/workflow/wfuser-mpickup-view/wfuser-mpickup-view-base.vue
浏览文件 @
a2dc977f
...
...
@@ -615,6 +615,7 @@ export default class WFUserMPickupViewBase extends Vue {
}
const
removeSelect
:
boolean
=
this
.
viewSelections
.
some
((
selection
:
any
)
=>
selection
.
_select
);
this
.
containerModel
.
view_leftbtn
.
disabled
=
!
removeSelect
;
this
.
selectedData
=
JSON
.
stringify
(
this
.
viewSelections
);
}
/**
...
...
@@ -635,6 +636,7 @@ export default class WFUserMPickupViewBase extends Vue {
});
const
removeSelect
:
boolean
=
this
.
viewSelections
.
some
((
selection
:
any
)
=>
selection
.
_select
);
this
.
containerModel
.
view_leftbtn
.
disabled
=
!
removeSelect
;
this
.
selectedData
=
JSON
.
stringify
(
this
.
viewSelections
);
}
/**
...
...
@@ -647,14 +649,18 @@ export default class WFUserMPickupViewBase extends Vue {
if
(
!
Object
.
is
(
model
.
type
,
'PICKUPVIEWPANEL'
))
{
return
;
}
let
newSelections
:
any
[]
=
[];
model
.
selections
.
forEach
((
item
:
any
)
=>
{
const
index
:
number
=
this
.
viewSelections
.
findIndex
((
selection
:
any
)
=>
Object
.
is
(
item
.
srfkey
,
selection
.
srfkey
));
if
(
index
===
-
1
)
{
let
_item
:
any
=
{
...
JSON
.
parse
(
JSON
.
stringify
(
item
))
};
Object
.
assign
(
_item
,
{
_select
:
false
})
this
.
viewSelections
.
push
(
_item
);
newSelections
.
push
(
_item
);
}
else
{
newSelections
.
push
(
this
.
viewSelections
[
index
]);
}
});
this
.
viewSelections
=
newSelections
;
});
}
...
...
@@ -666,6 +672,7 @@ export default class WFUserMPickupViewBase extends Vue {
public
onCLickAllLeft
():
void
{
this
.
viewSelections
=
[];
this
.
containerModel
.
view_leftbtn
.
disabled
=
true
;
this
.
selectedData
=
JSON
.
stringify
(
this
.
viewSelections
);
}
/**
...
...
app_web/src/pages/workflow/wfuser-pickup-grid-view/wfuser-pickup-grid-view-base.vue
浏览文件 @
a2dc977f
...
...
@@ -11,6 +11,7 @@
v-show=
"isExpandSearchForm"
loaddraftAction=
"FilterGetDraft"
loadAction=
"FilterGet"
name=
"searchform"
ref=
'searchform'
@
save=
"searchform_save($event)"
...
...
app_web/src/styles/default.less
浏览文件 @
a2dc977f
...
...
@@ -216,11 +216,16 @@
>.view-card{
>.ivu-card-body{
>.content-container{
.quick-group-container,.quick-search-
container,.quick-search-
input{
.quick-group-container,.quick-search-input{
float: left;
margin-top: 6px;
margin-bottom: 6px;
}
.quick-search-container{
float: left;
margin-top: -2px;
margin-bottom: 6px;
}
}
}
}
...
...
app_web/src/widgets/wfgroup/default-searchform/default-searchform-base.vue
浏览文件 @
a2dc977f
...
...
@@ -700,7 +700,7 @@ export default class DefaultBase extends Vue implements ControlInterface {
if
(
!
this
.
formValidateStatus
())
{
return
;
}
this
.
$emit
(
'
load
'
,
this
.
data
);
this
.
$emit
(
'
search
'
,
this
.
data
);
}
/**
...
...
@@ -712,7 +712,7 @@ export default class DefaultBase extends Vue implements ControlInterface {
if
(
!
this
.
formValidateStatus
())
{
return
;
}
this
.
$emit
(
'
load
'
,
this
.
data
);
this
.
$emit
(
'
search
'
,
this
.
data
);
}
/**
...
...
app_web/src/widgets/wfgroup/main-grid/main-grid-base.vue
浏览文件 @
a2dc977f
...
...
@@ -581,7 +581,9 @@ export default class MainBase extends Vue implements ControlInterface {
const
parentdata
:
any
=
{};
this
.
$emit
(
'beforeload'
,
parentdata
);
Object
.
assign
(
arg
,
parentdata
);
Object
.
assign
(
arg
,{
viewparams
:
this
.
viewparams
});
let
tempViewParams
:
any
=
parentdata
.
viewparams
?
parentdata
.
viewparams
:{};
Object
.
assign
(
tempViewParams
,
JSON
.
parse
(
JSON
.
stringify
(
this
.
viewparams
)));
Object
.
assign
(
arg
,{
viewparams
:
tempViewParams
});
const
post
:
Promise
<
any
>
=
this
.
service
.
search
(
this
.
fetchAction
,
JSON
.
parse
(
JSON
.
stringify
(
this
.
context
)),
arg
,
this
.
showBusyIndicator
);
post
.
then
((
response
:
any
)
=>
{
if
(
!
response
.
status
||
response
.
status
!==
200
)
{
...
...
app_web/src/widgets/wfgroup/main-grid/main-grid.less
浏览文件 @
a2dc977f
...
...
@@ -31,6 +31,11 @@
.el-table {
.quick-toolbar{
display: inline-block;
button{
background: #ebf3fb;
color: #2575ca;
border: 0;
}
}
.el-tooltip{
.ivu-form-item{
...
...
@@ -72,9 +77,6 @@
.el-table__body-wrapper{
height: calc(100% - 45px) !important;
}
.el-table__empty-block{
height: auto !important;
}
}
.ivu-modal-content{
.footer{
...
...
@@ -85,4 +87,5 @@
}
// this is less
app_web/src/widgets/wfmember/default-searchform/default-searchform-base.vue
浏览文件 @
a2dc977f
...
...
@@ -700,7 +700,7 @@ export default class DefaultBase extends Vue implements ControlInterface {
if
(
!
this
.
formValidateStatus
())
{
return
;
}
this
.
$emit
(
'
load
'
,
this
.
data
);
this
.
$emit
(
'
search
'
,
this
.
data
);
}
/**
...
...
@@ -712,7 +712,7 @@ export default class DefaultBase extends Vue implements ControlInterface {
if
(
!
this
.
formValidateStatus
())
{
return
;
}
this
.
$emit
(
'
load
'
,
this
.
data
);
this
.
$emit
(
'
search
'
,
this
.
data
);
}
/**
...
...
app_web/src/widgets/wfmember/main-grid/main-grid-base.vue
浏览文件 @
a2dc977f
...
...
@@ -567,7 +567,9 @@ export default class MainBase extends Vue implements ControlInterface {
const
parentdata
:
any
=
{};
this
.
$emit
(
'beforeload'
,
parentdata
);
Object
.
assign
(
arg
,
parentdata
);
Object
.
assign
(
arg
,{
viewparams
:
this
.
viewparams
});
let
tempViewParams
:
any
=
parentdata
.
viewparams
?
parentdata
.
viewparams
:{};
Object
.
assign
(
tempViewParams
,
JSON
.
parse
(
JSON
.
stringify
(
this
.
viewparams
)));
Object
.
assign
(
arg
,{
viewparams
:
tempViewParams
});
const
post
:
Promise
<
any
>
=
this
.
service
.
search
(
this
.
fetchAction
,
JSON
.
parse
(
JSON
.
stringify
(
this
.
context
)),
arg
,
this
.
showBusyIndicator
);
post
.
then
((
response
:
any
)
=>
{
if
(
!
response
.
status
||
response
.
status
!==
200
)
{
...
...
app_web/src/widgets/wfmember/main-grid/main-grid.less
浏览文件 @
a2dc977f
...
...
@@ -31,6 +31,11 @@
.el-table {
.quick-toolbar{
display: inline-block;
button{
background: #ebf3fb;
color: #2575ca;
border: 0;
}
}
.el-tooltip{
.ivu-form-item{
...
...
@@ -72,9 +77,6 @@
.el-table__body-wrapper{
height: calc(100% - 45px) !important;
}
.el-table__empty-block{
height: auto !important;
}
}
.ivu-modal-content{
.footer{
...
...
@@ -85,4 +87,5 @@
}
// this is less
app_web/src/widgets/wfprocess-definition/default-searchform/default-searchform-base.vue
浏览文件 @
a2dc977f
...
...
@@ -728,7 +728,7 @@ export default class DefaultBase extends Vue implements ControlInterface {
if
(
!
this
.
formValidateStatus
())
{
return
;
}
this
.
$emit
(
'
load
'
,
this
.
data
);
this
.
$emit
(
'
search
'
,
this
.
data
);
}
/**
...
...
@@ -740,7 +740,7 @@ export default class DefaultBase extends Vue implements ControlInterface {
if
(
!
this
.
formValidateStatus
())
{
return
;
}
this
.
$emit
(
'
load
'
,
this
.
data
);
this
.
$emit
(
'
search
'
,
this
.
data
);
}
/**
...
...
app_web/src/widgets/wfprocess-definition/main-grid/main-grid-base.vue
浏览文件 @
a2dc977f
...
...
@@ -611,7 +611,9 @@ export default class MainBase extends Vue implements ControlInterface {
const
parentdata
:
any
=
{};
this
.
$emit
(
'beforeload'
,
parentdata
);
Object
.
assign
(
arg
,
parentdata
);
Object
.
assign
(
arg
,{
viewparams
:
this
.
viewparams
});
let
tempViewParams
:
any
=
parentdata
.
viewparams
?
parentdata
.
viewparams
:{};
Object
.
assign
(
tempViewParams
,
JSON
.
parse
(
JSON
.
stringify
(
this
.
viewparams
)));
Object
.
assign
(
arg
,{
viewparams
:
tempViewParams
});
const
post
:
Promise
<
any
>
=
this
.
service
.
search
(
this
.
fetchAction
,
JSON
.
parse
(
JSON
.
stringify
(
this
.
context
)),
arg
,
this
.
showBusyIndicator
);
post
.
then
((
response
:
any
)
=>
{
if
(
!
response
.
status
||
response
.
status
!==
200
)
{
...
...
app_web/src/widgets/wfprocess-definition/main-grid/main-grid.less
浏览文件 @
a2dc977f
...
...
@@ -31,6 +31,11 @@
.el-table {
.quick-toolbar{
display: inline-block;
button{
background: #ebf3fb;
color: #2575ca;
border: 0;
}
}
.el-tooltip{
.ivu-form-item{
...
...
@@ -72,9 +77,6 @@
.el-table__body-wrapper{
height: calc(100% - 45px) !important;
}
.el-table__empty-block{
height: auto !important;
}
}
.ivu-modal-content{
.footer{
...
...
@@ -85,4 +87,5 @@
}
// this is less
app_web/src/widgets/wfuser/default-searchform/default-searchform-base.vue
浏览文件 @
a2dc977f
...
...
@@ -700,7 +700,7 @@ export default class DefaultBase extends Vue implements ControlInterface {
if
(
!
this
.
formValidateStatus
())
{
return
;
}
this
.
$emit
(
'
load
'
,
this
.
data
);
this
.
$emit
(
'
search
'
,
this
.
data
);
}
/**
...
...
@@ -712,7 +712,7 @@ export default class DefaultBase extends Vue implements ControlInterface {
if
(
!
this
.
formValidateStatus
())
{
return
;
}
this
.
$emit
(
'
load
'
,
this
.
data
);
this
.
$emit
(
'
search
'
,
this
.
data
);
}
/**
...
...
app_web/src/widgets/wfuser/main-grid/main-grid-base.vue
浏览文件 @
a2dc977f
...
...
@@ -581,7 +581,9 @@ export default class MainBase extends Vue implements ControlInterface {
const
parentdata
:
any
=
{};
this
.
$emit
(
'beforeload'
,
parentdata
);
Object
.
assign
(
arg
,
parentdata
);
Object
.
assign
(
arg
,{
viewparams
:
this
.
viewparams
});
let
tempViewParams
:
any
=
parentdata
.
viewparams
?
parentdata
.
viewparams
:{};
Object
.
assign
(
tempViewParams
,
JSON
.
parse
(
JSON
.
stringify
(
this
.
viewparams
)));
Object
.
assign
(
arg
,{
viewparams
:
tempViewParams
});
const
post
:
Promise
<
any
>
=
this
.
service
.
search
(
this
.
fetchAction
,
JSON
.
parse
(
JSON
.
stringify
(
this
.
context
)),
arg
,
this
.
showBusyIndicator
);
post
.
then
((
response
:
any
)
=>
{
if
(
!
response
.
status
||
response
.
status
!==
200
)
{
...
...
app_web/src/widgets/wfuser/main-grid/main-grid.less
浏览文件 @
a2dc977f
...
...
@@ -31,6 +31,11 @@
.el-table {
.quick-toolbar{
display: inline-block;
button{
background: #ebf3fb;
color: #2575ca;
border: 0;
}
}
.el-tooltip{
.ivu-form-item{
...
...
@@ -72,9 +77,6 @@
.el-table__body-wrapper{
height: calc(100% - 45px) !important;
}
.el-table__empty-block{
height: auto !important;
}
}
.ivu-modal-content{
.footer{
...
...
@@ -85,4 +87,5 @@
}
// this is less
config.xml
浏览文件 @
a2dc977f
...
...
@@ -37,11 +37,6 @@
git clone -b master $para2 ibzwf/
export NODE_OPTIONS=--max-old-space-size=4096
cd ibzwf/
mvn clean package -Papi
cd ibzwf-provider/ibzwf-provider-api
mvn -Papi docker:build
mvn -Papi docker:push
docker -H $para1 stack deploy --compose-file=src/main/docker/ibzwf-provider-api.yaml ibzlab-rt --with-registry-auth
</command>
</hudson.tasks.Shell>
</builders>
...
...
ibzwf-app/ibzwf-app-web/src/main/java/cn/ibizlab/web/config/webSecurityConfig.java
浏览文件 @
a2dc977f
...
...
@@ -31,7 +31,6 @@ public class webSecurityConfig extends WebSecurityConfigurerAdapter {
private
AuthenticationEntryPoint
unauthorizedHandler
;
@Autowired
@Qualifier
(
"IBZUAAUserService"
)
private
AuthenticationUserService
userDetailsService
;
/**
...
...
ibzwf-app/ibzwf-app-web/src/main/java/cn/ibizlab/web/webApplication.java
浏览文件 @
a2dc977f
...
...
@@ -27,6 +27,7 @@ import java.util.List;
@MapperScan
(
"cn.ibizlab.*.mapper"
)
@SpringBootApplication
(
exclude
=
{
org
.
springframework
.
boot
.
autoconfigure
.
security
.
servlet
.
SecurityAutoConfiguration
.
class
,
org
.
springframework
.
boot
.
autoconfigure
.
mongo
.
MongoAutoConfiguration
.
class
,
})
public
class
webApplication
extends
WebMvcConfigurerAdapter
{
...
...
ibzwf-app/ibzwf-app-web/src/main/resources/application-web-prod.yml
浏览文件 @
a2dc977f
...
...
@@ -32,5 +32,9 @@ zuul:
path
:
/wfcore/**
serviceId
:
ibzwf-api
stripPrefix
:
true
loginv7
:
path
:
/v7/login
serviceId
:
ibzuaa-api
stripPrefix
:
false
sensitive-headers
:
-
Cookie,Set-Cookie,Authorization
ibzwf-boot/src/main/java/cn/ibizlab/DevBootApplication.java
浏览文件 @
a2dc977f
...
...
@@ -15,8 +15,10 @@ import java.util.List;
@EnableDiscoveryClient
@Configuration
@EnableTransactionManagement
@SpringBootApplication
@EnableFeignClients
(
basePackages
=
{
"cn.ibizlab"
})
@SpringBootApplication
(
exclude
=
{
org
.
springframework
.
boot
.
autoconfigure
.
mongo
.
MongoAutoConfiguration
.
class
,
})
public
class
DevBootApplication
extends
WebMvcConfigurerAdapter
{
public
static
void
main
(
String
[]
args
)
{
...
...
ibzwf-boot/src/main/java/cn/ibizlab/config/DevBootSecurityConfig.java
浏览文件 @
a2dc977f
...
...
@@ -30,7 +30,6 @@ public class DevBootSecurityConfig extends WebSecurityConfigurerAdapter {
private
AuthenticationEntryPoint
unauthorizedHandler
;
@Autowired
@Qualifier
(
"IBZUAAUserService"
)
private
AuthenticationUserService
userDetailsService
;
/**
...
...
ibzwf-boot/src/main/resources/application-dev.yml
浏览文件 @
a2dc977f
server
:
port
:
40003
port
:
8080
ibzwf-core/src/main/resources/deprivs/DEPrivs.json
浏览文件 @
a2dc977f
...
...
@@ -3,48 +3,6 @@
],
"predefineddatarange"
:[{
"id"
:
"ALL"
,
"name"
:
"全部数据"
},{
"id"
:
"CURORG"
,
"name"
:
"当前单位"
},{
"id"
:
"PORG"
,
"name"
:
"上级单位"
},{
"id"
:
"SORG"
,
"name"
:
"下级单位"
},{
"id"
:
"CURORGDEPT"
,
"name"
:
"当前部门"
},{
"id"
:
"PORGDEPT"
,
"name"
:
"上级部门"
},{
"id"
:
"SORGDEPT"
,
"name"
:
"下级部门"
}],
"entities"
:[
{
"dename"
:
"WFREModel"
,
"delogicname"
:
"流程模型"
,
"sysmoudle"
:{
"id"
:
"WORKFLOW"
,
"name"
:
"workflow"
},
"dedataset"
:[{
"id"
:
"Default"
,
"name"
:
"DEFAULT"
}],
"deaction"
:[{
"id"
:
"Update"
,
"name"
:
"Update"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Save"
,
"name"
:
"Save"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Get"
,
"name"
:
"Get"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Create"
,
"name"
:
"Create"
,
"type"
:
"BUILTIN"
},{
"id"
:
"CheckKey"
,
"name"
:
"CheckKey"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Remove"
,
"name"
:
"Remove"
,
"type"
:
"BUILTIN"
},{
"id"
:
"GetDraft"
,
"name"
:
"GetDraft"
,
"type"
:
"BUILTIN"
}]
}
,
{
"dename"
:
"WFMember"
,
"delogicname"
:
"成员"
,
"sysmoudle"
:{
"id"
:
"WORKFLOW"
,
"name"
:
"workflow"
},
"dedataset"
:[{
"id"
:
"Default"
,
"name"
:
"DEFAULT"
}],
"deaction"
:[{
"id"
:
"CheckKey"
,
"name"
:
"CheckKey"
,
"type"
:
"BUILTIN"
},{
"id"
:
"GetDraft"
,
"name"
:
"GetDraft"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Create"
,
"name"
:
"Create"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Remove"
,
"name"
:
"Remove"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Save"
,
"name"
:
"Save"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Update"
,
"name"
:
"Update"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Get"
,
"name"
:
"Get"
,
"type"
:
"BUILTIN"
}]
}
,
{
"dename"
:
"WFGroup"
,
"delogicname"
:
"角色/用户组"
,
"sysmoudle"
:{
"id"
:
"WORKFLOW"
,
"name"
:
"workflow"
},
"dedataset"
:[{
"id"
:
"Default"
,
"name"
:
"DEFAULT"
}],
"deaction"
:[{
"id"
:
"Save"
,
"name"
:
"Save"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Update"
,
"name"
:
"Update"
,
"type"
:
"BUILTIN"
},{
"id"
:
"GetDraft"
,
"name"
:
"GetDraft"
,
"type"
:
"BUILTIN"
},{
"id"
:
"CheckKey"
,
"name"
:
"CheckKey"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Create"
,
"name"
:
"Create"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Remove"
,
"name"
:
"Remove"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Get"
,
"name"
:
"Get"
,
"type"
:
"BUILTIN"
}]
}
,
{
"dename"
:
"WFUser"
,
"delogicname"
:
"用户"
,
"sysmoudle"
:{
"id"
:
"WORKFLOW"
,
"name"
:
"workflow"
},
"dedataset"
:[{
"id"
:
"Default"
,
"name"
:
"DEFAULT"
}],
"deaction"
:[{
"id"
:
"Remove"
,
"name"
:
"Remove"
,
"type"
:
"BUILTIN"
},{
"id"
:
"GetDraft"
,
"name"
:
"GetDraft"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Save"
,
"name"
:
"Save"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Update"
,
"name"
:
"Update"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Get"
,
"name"
:
"Get"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Create"
,
"name"
:
"Create"
,
"type"
:
"BUILTIN"
},{
"id"
:
"CheckKey"
,
"name"
:
"CheckKey"
,
"type"
:
"BUILTIN"
}]
}
,
{
"dename"
:
"WFProcessDefinition"
,
"delogicname"
:
"流程定义"
,
"sysmoudle"
:{
"id"
:
"WORKFLOW"
,
"name"
:
"workflow"
},
"dedataset"
:[{
"id"
:
"Default"
,
"name"
:
"DEFAULT"
}],
"deaction"
:[{
"id"
:
"Save"
,
"name"
:
"Save"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Update"
,
"name"
:
"Update"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Get"
,
"name"
:
"Get"
,
"type"
:
"BUILTIN"
},{
"id"
:
"CheckKey"
,
"name"
:
"CheckKey"
,
"type"
:
"BUILTIN"
},{
"id"
:
"GetDraft"
,
"name"
:
"GetDraft"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Create"
,
"name"
:
"Create"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Remove"
,
"name"
:
"Remove"
,
"type"
:
"BUILTIN"
}]
}
,
{
"dename"
:
"WFSystem"
,
"delogicname"
:
"系统"
,
"sysmoudle"
:{
"id"
:
"WORKFLOW"
,
"name"
:
"workflow"
},
"dedataset"
:[{
"id"
:
"Default"
,
"name"
:
"DEFAULT"
}],
"deaction"
:[{
"id"
:
"Remove"
,
"name"
:
"Remove"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Update"
,
"name"
:
"Update"
,
"type"
:
"BUILTIN"
},{
"id"
:
"GetDraft"
,
"name"
:
"GetDraft"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Save"
,
"name"
:
"Save"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Create"
,
"name"
:
"Create"
,
"type"
:
"BUILTIN"
},{
"id"
:
"CheckKey"
,
"name"
:
"CheckKey"
,
"type"
:
"BUILTIN"
},{
"id"
:
"Get"
,
"name"
:
"Get"
,
"type"
:
"BUILTIN"
}]
}
]
}
ibzwf-provider/ibzwf-provider-api/src/main/docker/Dockerfile
浏览文件 @
a2dc977f
...
...
@@ -9,6 +9,6 @@ CMD echo "The application will start in ${IBZ_SLEEP}s..." && \
sleep ${IBZ_SLEEP} && \
java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /ibzwf-provider-api.jar
EXPOSE
40003
EXPOSE
8081
ADD
ibzwf-provider-api.jar /ibzwf-provider-api.jar
ibzwf-provider/ibzwf-provider-api/src/main/docker/ibzwf-provider-api.yaml
浏览文件 @
a2dc977f
...
...
@@ -3,11 +3,9 @@ services:
ibzwf-provider-api
:
image
:
registry.cn-shanghai.aliyuncs.com/ibizsys/ibzwf-provider-api:latest
ports
:
-
"
40003:40003
"
-
"
8081:8081
"
networks
:
-
agent_network
environment
:
SPRING_CLOUD_NACOS_DISCOVERY_IP
:
172.16.180.237
deploy
:
mode
:
replicated
replicas
:
1
...
...
ibzwf-provider/ibzwf-provider-api/src/main/java/cn/ibizlab/api/config/apiSecurityConfig.java
浏览文件 @
a2dc977f
...
...
@@ -31,7 +31,6 @@ public class apiSecurityConfig extends WebSecurityConfigurerAdapter {
private
AuthenticationEntryPoint
unauthorizedHandler
;
@Autowired
@Qualifier
(
"IBZUAAUserService"
)
private
AuthenticationUserService
userDetailsService
;
/**
...
...
ibzwf-provider/ibzwf-provider-api/src/main/java/cn/ibizlab/api/ibzwfapiApplication.java
浏览文件 @
a2dc977f
...
...
@@ -23,6 +23,7 @@ import java.util.List;
@MapperScan
(
"cn.ibizlab.*.mapper"
)
@SpringBootApplication
(
exclude
=
{
org
.
springframework
.
boot
.
autoconfigure
.
security
.
servlet
.
SecurityAutoConfiguration
.
class
,
org
.
springframework
.
boot
.
autoconfigure
.
mongo
.
MongoAutoConfiguration
.
class
,
})
@EnableFeignClients
(
basePackages
=
{
"cn.ibizlab"
})
public
class
ibzwfapiApplication
extends
WebMvcConfigurerAdapter
{
...
...
ibzwf-provider/ibzwf-provider-api/src/main/resources/application-api-dev.yml
浏览文件 @
a2dc977f
server
:
port
:
40003
\ No newline at end of file
port
:
8081
\ No newline at end of file
ibzwf-provider/ibzwf-provider-api/src/main/resources/application-api-prod.yml
浏览文件 @
a2dc977f
server
:
port
:
40003
port
:
8081
ibzwf-util/src/main/java/cn/ibizlab/util/job/PermissionSyncJob.java
浏览文件 @
a2dc977f
...
...
@@ -32,7 +32,7 @@ public class PermissionSyncJob implements ApplicationRunner {
@Value
(
"${ibiz.enablePermissionValid:false}"
)
boolean
enablePermissionValid
;
//是否开启权限校验
@Value
(
"${ibiz.systemid:
2C40DFCD-0DF5-47BF-91A5-C45F810B0001
}"
)
@Value
(
"${ibiz.systemid:
ibzwf
}"
)
private
String
systemId
;
@Override
...
...
ibzwf-util/src/main/java/cn/ibizlab/util/rest/AuthenticationController.java
浏览文件 @
a2dc977f
...
...
@@ -15,9 +15,11 @@ import org.springframework.security.core.userdetails.UserDetails;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.beans.factory.annotation.Qualifier
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
@RestController
@RequestMapping
(
"/"
)
@ConditionalOnProperty
(
name
=
"ibiz.enablePermissionValid"
,
havingValue
=
"false"
)
public
class
AuthenticationController
{
...
...
@@ -28,7 +30,6 @@ public class AuthenticationController
private
AuthTokenUtil
jwtTokenUtil
;
@Autowired
@Qualifier
(
"IBZUAAUserService"
)
private
AuthenticationUserService
userDetailsService
;
@PostMapping
(
value
=
"${ibiz.auth.path:v7/login}"
)
...
...
ibzwf-util/src/main/java/cn/ibizlab/util/security/AuthPermissionEvaluator.java
浏览文件 @
a2dc977f
...
...
@@ -48,6 +48,7 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
private
String
keyFieldTag
=
"keyfield"
;
@Resource
@Lazy
private
MongoTemplate
mongoTemplate
;
/**
...
...
@@ -115,8 +116,6 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
if
(!
validDataSetHasPermission
(
permissionList
,
entityName
,
dataSetName
)){
return
false
;
}
//拼接权限条件
deDataSetFillPermissionSQLRouter
(
deStorageMode
,
searchContext
,
entity
,
dataSetName
,
permissionList
);
}
return
true
;
}
...
...
@@ -344,80 +343,6 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
}
}
/**
* 根据实体存储类型,拼接权限条件
* @param deStorageMode
* @param searchContext
* @param entity
* @param dataSetName
* @param permissionList
*/
private
void
deDataSetFillPermissionSQLRouter
(
String
deStorageMode
,
Object
searchContext
,
EntityBase
entity
,
String
dataSetName
,
JSONObject
permissionList
){
//检查是否有数据权限[单行删除]
if
(
deStorageMode
.
equalsIgnoreCase
(
"sql"
)){
sqlPermissionBuilder
(
searchContext
,
entity
,
dataSetName
,
permissionList
);
}
else
if
(
deStorageMode
.
equalsIgnoreCase
(
"nosql"
)){
noSqlPermissionBuilder
(
searchContext
,
entity
,
dataSetName
,
permissionList
);
}
else
if
(
deStorageMode
.
equalsIgnoreCase
(
"serviceapi"
)){
}
else
{
throw
new
RuntimeException
(
String
.
format
(
"未能识别[%s]实体对应存储模式[%s]"
,
entity
.
getClass
().
getSimpleName
(),
deStorageMode
));
}
}
/**
* 为NoSQL存储模式的表格查询填充权限条件
* @param searchContext
* @param entity
* @param dataSetName
* @param permissionList
*/
private
void
noSqlPermissionBuilder
(
Object
searchContext
,
EntityBase
entity
,
String
dataSetName
,
JSONObject
permissionList
)
{
if
(
searchContext
instanceof
QueryBuildContext
){
//获取权限表达式[全部数据、本单位、本部门等]
String
entityName
=
entity
.
getClass
().
getSimpleName
();
JSONObject
entityObj
=
permissionList
.
getJSONObject
(
entityName
);
JSONObject
permissionType
=
entityObj
.
getJSONObject
(
DataSetTag
);
JSONArray
dataRange
=
permissionType
.
getJSONArray
(
dataSetName
);
if
(
dataRange
.
size
()==
0
)
return
;
//根据权限表达式生成查询条件,并将查询条件设置到SearchContext中
fillNoSqlPermissionCond
(
dataRange
,
entity
,((
QueryBuildContext
)
searchContext
).
getSelectCond
());
}
}
/**
* 为SQL存储模式的表格查询填充权限条件
* @param searchContext
* @param entity
* @param dataSetName
* @param permissionList
*/
private
void
sqlPermissionBuilder
(
Object
searchContext
,
EntityBase
entity
,
String
dataSetName
,
JSONObject
permissionList
){
//获取权限表达式[全部数据、本单位、本部门等]
String
entityName
=
entity
.
getClass
().
getSimpleName
();
JSONObject
entityObj
=
permissionList
.
getJSONObject
(
entityName
);
//获取实体
JSONObject
permissionType
=
entityObj
.
getJSONObject
(
DataSetTag
);
JSONArray
dataRange
=
permissionType
.
getJSONArray
(
dataSetName
);
//获取实体数据集
if
(
dataRange
.
size
()==
0
)
return
;
//根据权限条件获取SQL
String
permissionSQL
=
getPermissionSQL
(
entity
,
dataRange
);
//将SQL拼接到SearchContext中
if
(
searchContext
instanceof
QueryWrapperContext
){
QueryWrapperContext
queryWrapperContext
=
(
QueryWrapperContext
)
searchContext
;
QueryWrapper
queryWrapper
=
queryWrapperContext
.
getSelectCond
();
queryWrapper
.
apply
(
permissionSQL
);
}
}
/**
* 为NoSQL存储模式的表格查询填充权限条件
...
...
ibzwf-util/src/main/java/cn/ibizlab/util/security/AuthorizationTokenFilter.java
浏览文件 @
a2dc977f
...
...
@@ -27,7 +27,7 @@ public class AuthorizationTokenFilter extends OncePerRequestFilter {
private
final
AuthTokenUtil
authTokenUtil
;
private
final
String
tokenHeader
;
public
AuthorizationTokenFilter
(
@Qualifier
(
"IBZUAAUserService"
)
AuthenticationUserService
userDetailsService
,
AuthTokenUtil
authTokenUtil
,
@Value
(
"${ibiz.jwt.header:Authorization}"
)
String
tokenHeader
)
{
public
AuthorizationTokenFilter
(
AuthenticationUserService
userDetailsService
,
AuthTokenUtil
authTokenUtil
,
@Value
(
"${ibiz.jwt.header:Authorization}"
)
String
tokenHeader
)
{
this
.
userDetailsService
=
userDetailsService
;
this
.
authTokenUtil
=
authTokenUtil
;
this
.
tokenHeader
=
tokenHeader
;
...
...
ibzwf-util/src/main/java/cn/ibizlab/util/service/IBZUAAUserService.java
浏览文件 @
a2dc977f
...
...
@@ -12,11 +12,13 @@ import org.springframework.context.annotation.Primary;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.DigestUtils
;
import
org.springframework.util.StringUtils
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnExpression
;
/**
* 实体[IBZUSER] 服务对象接口实现
*/
@Service
(
"IBZUAAUserService"
)
@ConditionalOnExpression
(
"${ibiz.enablePermissionValid:false}||'${ibiz.auth.service:SimpleUserService}'.equals('IBZUAAUserService')"
)
public
class
IBZUAAUserService
implements
AuthenticationUserService
{
@Autowired
...
...
ibzwf-util/src/main/java/cn/ibizlab/util/service/IBZUSERServiceImpl.java
浏览文件 @
a2dc977f
...
...
@@ -13,11 +13,13 @@ import cn.ibizlab.util.mapper.IBZUSERMapper;
import
cn.ibizlab.util.domain.IBZUSER
;
import
org.springframework.util.DigestUtils
;
import
org.springframework.util.StringUtils
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnExpression
;
/**
* 实体[IBZUSER] 服务对象接口实现
*/
@Service
(
"IBZUSERService"
)
@ConditionalOnExpression
(
"(!${ibiz.enablePermissionValid:false})&&'${ibiz.auth.service:SimpleUserService}'.equals('IBZUSERService')"
)
public
class
IBZUSERServiceImpl
extends
ServiceImpl
<
IBZUSERMapper
,
IBZUSER
>
implements
IBZUSERService
,
AuthenticationUserService
{
@Value
(
"${ibiz.auth.pwencrymode:0}"
)
...
...
ibzwf-util/src/main/java/cn/ibizlab/util/service/SimpleUserService.java
浏览文件 @
a2dc977f
...
...
@@ -11,12 +11,14 @@ import org.springframework.util.StringUtils;
import
com.alibaba.fastjson.JSONObject
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnExpression
;
/**
* 实体[IBZUSER] 服务对象接口实现
*/
@Primary
@Service
(
"SimpleUserService"
)
@ConditionalOnExpression
(
"(!${ibiz.enablePermissionValid:false})&&'${ibiz.auth.service:SimpleUserService}'.equals('SimpleUserService')"
)
public
class
SimpleUserService
implements
AuthenticationUserService
{
@Override
...
...
编辑
预览
Markdown
格式
0%
请重试
or
添加新附件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录