Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
T
TrainSys
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
苏州培训方案
TrainSys
提交
e1537cb0
提交
e1537cb0
编写于
9月 22, 2022
作者:
ibizdev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
zhujiamin 发布系统代码 [TrainSys,网页端]
上级
f0be851e
变更
25
展开全部
显示空白字符变更
内嵌
并排
正在显示
25 个修改的文件
包含
596 行增加
和
487 行删除
+596
-487
util.ts
app_Web/packages/ibiz-core/src/utils/util/util.ts
+20
-0
app-layout-service.ts
...-vue/src/app-service/common-service/app-layout-service.ts
+104
-104
app-custom-theme.vue
...c/components/common/app-custom-theme/app-custom-theme.vue
+2
-2
app-form-item.vue
...vue/src/components/common/app-form-item/app-form-item.vue
+4
-3
app-content.tsx
.../src/components/common/layout/app-content/app-content.tsx
+7
-7
app-header.tsx
...ue/src/components/common/layout/app-header/app-header.tsx
+3
-3
app-layout.tsx
...ue/src/components/common/layout/app-layout/app-layout.tsx
+2
-2
tab-page-exp-style2.vue
...onents/common/tab-page-exp-style2/tab-page-exp-style2.vue
+3
-5
components-register.ts
...b/packages/ibiz-vue/src/components/components-register.ts
+98
-98
app-style2-indexview-layout.tsx
...p-style2-indexview-layout/app-style2-indexview-layout.tsx
+9
-9
app-header-right-menus.less
.../src/styles/components/common/app-header-right-menus.less
+1
-0
app-header.less
...ges/ibiz-vue/src/styles/components/common/app-header.less
+29
-0
index.less
...packages/ibiz-vue/src/styles/components/common/index.less
+2
-1
tab-page-exp-style2.less
...vue/src/styles/components/common/tab-page-exp-style2.less
+95
-96
app-default-indexview-layout.less
...tyles/components/layout/app-default-indexview-layout.less
+25
-0
default.less
app_Web/public/assets/theme/default.less
+6
-0
dingdingRedirect.html
app_Web/public/assets/third/dingdingRedirect.html
+2
-1
wxWorkRedirect.html
app_Web/public/assets/third/wxWorkRedirect.html
+2
-1
login.vue
app_Web/src/components/login/login.vue
+22
-22
auth-guard.ts
app_Web/src/utils/auth-guard/auth-guard.ts
+29
-21
interceptor.ts
app_Web/src/utils/interceptor/interceptor.ts
+57
-50
app-component-service.ts
app_Web/src/utils/service/app-component-service.ts
+58
-58
h2_table.xml
trainsys-core/src/main/resources/liquibase/h2_table.xml
+2
-2
Main.json
...PSSYSAPPS/Web/PSAPPDATAENTITIES/Student/PSFORMS/Main.json
+7
-1
studentEditView.json
.../trainsys/PSSYSAPPS/Web/PSAPPDEVIEWS/studentEditView.json
+7
-1
未找到文件。
app_Web/packages/ibiz-core/src/utils/util/util.ts
浏览文件 @
e1537cb0
import
Schema
from
'async-validator'
;
import
qs
from
'qs'
;
import
{
clone
}
from
"ramda"
;
import
{
PluralizeRule
}
from
'./pluralizeRule'
;
...
...
@@ -728,6 +729,25 @@ export class Util {
})
}
/**
* 获取路由参数
*
* @param path
*/
public
static
getRouteParams
(
path
:
string
)
{
const
returnParams
=
{};
let
tempPath
:
any
=
path
.
slice
(
path
.
indexOf
(
'?'
)
+
1
,
path
.
indexOf
(
'#'
));
const
pathArray
:
Array
<
string
>
=
tempPath
.
split
(
'&'
);
if
(
pathArray
&&
pathArray
.
length
>
0
)
{
pathArray
.
forEach
((
item
:
any
)
=>
{
if
(
item
&&
item
.
indexOf
(
'='
)
!==
-
1
)
{
Object
.
assign
(
returnParams
,
qs
.
parse
(
item
));
}
});
}
return
returnParams
;
}
}
/**
* 创建 UUID
...
...
app_Web/packages/ibiz-vue/src/app-service/common-service/app-layout-service.ts
浏览文件 @
e1537cb0
此差异已折叠。
点击以展开。
app_Web/packages/ibiz-vue/src/components/common/app-custom-theme/app-custom-theme.vue
浏览文件 @
e1537cb0
...
...
@@ -335,8 +335,8 @@ export default class AppCustomTheme extends Vue {
private
getVars
():
any
{
const
select
=
this
.
defaultThemes
.
find
((
item
:
any
)
=>
item
.
codeName
===
this
.
selectTheme
);
const
vars
=
{
//
"@primary": select.color,
//
"@font-family": this.selectFont
"@primary"
:
select
.
color
,
"@font-family"
:
this
.
selectFont
};
if
(
this
.
themeOptions
&&
Object
.
keys
(
this
.
themeOptions
).
length
>
0
)
{
Object
.
keys
(
this
.
themeOptions
).
forEach
((
key
:
string
)
=>
{
...
...
app_Web/packages/ibiz-vue/src/components/common/app-form-item/app-form-item.vue
浏览文件 @
e1537cb0
...
...
@@ -378,7 +378,8 @@ export default class AppFormItem extends Vue {
* @memberof AppFormItem
*/
public getShowTip(){
if(this.caption && ((this.caption.length)*14) > this.labelWidth ){
const labelElement: any = this.$el.getElementsByClassName('app-form-item__label')[0];
if(this.caption && labelElement && labelElement.scrollWidth > labelElement.offsetWidth){
this.isShowTip = true;
}
}
...
...
app_Web/packages/ibiz-vue/src/components/common/layout/app-content/app-content.tsx
浏览文件 @
e1537cb0
...
...
@@ -31,7 +31,7 @@ export class AppContent extends Vue {
* @memberof AppContent
*/
protected
created
():
void
{
if
(
this
.
$slots
.
content_bottom
)
{
if
(
this
.
$slots
.
app_
content_bottom
)
{
this
.
$footerRenderService
.
registerRightItem
(()
=>
{
return
(
<
div
...
...
@@ -93,19 +93,19 @@ export class AppContent extends Vue {
slot=
{
isSlot
?
'right'
:
null
}
class=
{
{
'app-content-right'
:
true
,
'hidden-bottom'
:
!
this
.
$uiState
.
layoutState
.
contentBottomShow
||
!
this
.
$slots
.
content_bottom
,
'hidden-bottom'
:
!
this
.
$uiState
.
layoutState
.
contentBottomShow
||
!
this
.
$slots
.
app_
content_bottom
,
}
}
>
<
split
mode=
"vertical"
v
-
model=
{
this
.
$uiState
.
layoutState
.
contentVerticalSplit
}
max=
{
0.1
}
>
<
div
slot=
"top"
class=
"app-content-exp"
>
{
this
.
$slots
.
default
}
</
div
>
{
this
.
$slots
.
content_bottom
?
(
{
this
.
$slots
.
app_
content_bottom
?
(
<
div
slot=
"bottom"
class=
"app-content-bottom"
>
<
div
class=
"app-content-bottom-close"
on
-
click=
{
()
=>
this
.
changeBottom
(
false
)
}
>
<
icon
type=
"ios-arrow-down"
/>
</
div
>
{
this
.
$slots
.
content_bottom
}
{
this
.
$slots
.
app_
content_bottom
}
</
div
>
)
:
null
}
</
split
>
...
...
@@ -122,9 +122,9 @@ export class AppContent extends Vue {
public
render
():
VNode
{
let
content
:
any
=
null
;
if
(
this
.
$uiState
.
layoutState
.
styleMode
===
'STYLE2'
)
{
content
=
[<
div
class=
"app-content-nav"
>
{
this
.
$slots
.
content_left
}
</
div
>,
this
.
renderContent
(
false
)];
content
=
[<
div
class=
"app-content-nav"
>
{
this
.
$slots
.
app_
content_left
}
</
div
>,
this
.
renderContent
(
false
)];
}
else
{
content
=
this
.
$slots
.
content_left
?
(
content
=
this
.
$slots
.
app_
content_left
?
(
<
split
class=
{
{
'app-content-split'
:
true
,
'hidden-left'
:
!
this
.
$uiState
.
layoutState
.
leftExpContentShow
}
}
v
-
model=
{
this
.
$uiState
.
layoutState
.
contentHorizontalSplit
}
...
...
@@ -132,7 +132,7 @@ export class AppContent extends Vue {
max=
{
0.5
}
>
<
div
slot=
"left"
class=
"app-content-left"
>
{
this
.
$slots
.
content_left
}
{
this
.
$slots
.
app_
content_left
}
</
div
>
{
this
.
renderContent
(
true
)
}
</
split
>
...
...
app_Web/packages/ibiz-vue/src/components/common/layout/app-header/app-header.tsx
浏览文件 @
e1537cb0
...
...
@@ -18,15 +18,15 @@ export class AppHeader extends Vue {
*/
public
render
(
h
:
any
):
VNode
{
return
(
<
div
class=
"app-header"
>
<
div
class=
"app-
style2-
header"
>
<
div
class=
"app-header-left"
>
{
this
.
$slots
.
header_left
}
{
Object
.
is
(
this
.
$uiState
.
layoutState
.
styleMode
,
'STYLE2'
)
?
(
<
app
-
breadcrumb
></
app
-
breadcrumb
>
)
:
null
}
</
div
>
<
div
class=
"app-header-center"
>
{
this
.
$slots
.
header_content
}
</
div
>
<
div
class=
"app-header-right"
>
{
this
.
$slots
.
header_right
}
</
div
>
<
div
class=
"app-header-center"
>
{
this
.
$slots
.
app_
header_content
}
</
div
>
<
div
class=
"app-header-right"
>
{
this
.
$slots
.
app_
header_right
}
</
div
>
</
div
>
);
}
...
...
app_Web/packages/ibiz-vue/src/components/common/layout/app-layout/app-layout.tsx
浏览文件 @
e1537cb0
...
...
@@ -26,10 +26,10 @@ export class AppLayout extends Vue {
this
.
$uiState
.
layoutState
.
styleMode
!==
'DEFAULT'
,
}
}
>
<
div
class=
"app-layout-header-warp"
>
{
this
.
$slots
.
header
}
</
div
>
<
div
class=
"app-layout-header-warp"
>
{
this
.
$slots
.
app_layout_
header
}
</
div
>
<
div
class=
"app-layout-content-warp"
>
{
this
.
$slots
.
default
}
</
div
>
<
div
class=
"app-layout-footer-warp"
>
{
this
.
$slots
.
footer
}
{
this
.
$slots
.
app_layout_
footer
}
</
div
>
</
div
>
);
...
...
app_Web/packages/ibiz-vue/src/components/common/tab-page-exp-style2/tab-page-exp-style2.vue
浏览文件 @
e1537cb0
...
...
@@ -26,12 +26,10 @@
class=
"tag-caption-content"
>
<i
v-if=
"
item.meta.iconCls && !Object.is(item.meta.iconCls, '')
"
:class=
"item.meta.iconCls"
v-if=
"item.meta.iconCls && !Object.is(item.meta.iconCls, '')"
:class=
"
{[item.meta.iconCls]:true,'tag-caption-content__text-icon':true}"
>
</i>
<img
v-else
:src=
"item.meta.imgPath"
class=
"t
ext-icon
"
/>
<img
v-else
:src=
"item.meta.imgPath"
class=
"t
ag-caption-content__text-image
"
/>
{{
translate
(
item
)
}}
</div>
</div>
...
...
app_Web/packages/ibiz-vue/src/components/components-register.ts
浏览文件 @
e1537cb0
此差异已折叠。
点击以展开。
app_Web/packages/ibiz-vue/src/components/layout/app-style2-layout/app-style2-indexview-layout/app-style2-indexview-layout.tsx
浏览文件 @
e1537cb0
...
...
@@ -150,18 +150,18 @@ export class AppStyle2IndexViewLayout extends AppStyle2DefaultLayout {
}
return
(
<
app
-
layout
ref=
"appLayout"
style=
{
{
'font-family'
:
this
.
selectFont
}
}
class=
{
viewClassNames
}
>
<
template
slot=
"header"
>
<
template
slot=
"
app_layout_
header"
>
<
app
-
header
>
<
template
slot=
"header_left"
>
<
div
class=
"t
itle
"
>
{
this
.
viewInstance
.
enableAppSwitch
?
<
span
class=
"
menuicon"
style=
"cursor: pointer;
"
on
-
click=
{
()
=>
this
.
contextMenuDragVisiable
=
!
this
.
contextMenuDragVisiable
}
><
icon
type=
"md-menu"
/>
</
span
>
:
null
}
<
template
slot=
"
app_
header_left"
>
<
div
class=
"t
app_header_caption
"
>
{
this
.
viewInstance
.
enableAppSwitch
?
<
span
class=
"
app-header__caption__menuicon
"
on
-
click=
{
()
=>
this
.
contextMenuDragVisiable
=
!
this
.
contextMenuDragVisiable
}
><
icon
type=
"md-menu"
/>
</
span
>
:
null
}
{
this
.
showCaption
?
this
.
model
.
srfCaption
:
null
}
</
div
>
</
template
>
<
template
slot=
"header_right"
>
<
template
slot=
"
app_
header_right"
>
{
this
.
$slots
.
headerMenus
}
{
this
.
$topRenderService
.
rightItemsRenders
.
map
((
fun
:
any
)
=>
fun
(
h
))
}
<
app
-
lang
title=
{
this
.
model
.
srfTitle
||
this
.
model
.
srfCaption
}
style=
'font-size: 15px;padding: 0 10px;'
></
app
-
lang
>
<
app
-
lang
title=
{
this
.
model
.
srfTitle
||
this
.
model
.
srfCaption
}
></
app
-
lang
>
{
<
app
-
orgsector
/>
}
{
<
app
-
user
viewStyle=
{
this
.
viewInstance
.
viewStyle
}
/>
}
{
/* {<app-custom-theme viewStyle={this.viewInstance.viewStyle}></app-custom-theme>} */
}
...
...
@@ -172,7 +172,7 @@ export class AppStyle2IndexViewLayout extends AppStyle2DefaultLayout {
</
template
>
<
app
-
content
>
{
leftContent
?
<
template
slot=
"content_left"
>
<
template
slot=
"
app_
content_left"
>
{
leftContent
}
</
template
>
:
null
}
{
styleMode
===
'DEFAULT'
?
this
.
$slots
.
tabPageExp
:
null
}
...
...
@@ -182,11 +182,11 @@ export class AppStyle2IndexViewLayout extends AppStyle2DefaultLayout {
</
app
-
keep
-
alive
>
</
div
>
{
this
.
$slots
.
bootomExp
?
<
template
slot=
"content_bottom"
>
<
template
slot=
"
app_
content_bottom"
>
{
this
.
$slots
.
bootomExp
}
</
template
>
:
null
}
</
app
-
content
>
<
template
slot=
"footer"
>
<
template
slot=
"
app_layout_
footer"
>
{
this
.
viewInstance
.
defaultPage
?
<
app
-
footer
v
-
notification
-
signal=
{
this
.
appLoadingService
.
isLoading
}
ref=
"footer"
/>
:
<
app
-
footer
ref=
"footer"
/>
...
...
app_Web/packages/ibiz-vue/src/styles/components/common/app-header-right-menus.less
浏览文件 @
e1537cb0
.app-header-right-menus {
display: flex;
margin-right: 200px;
> .ivu-menu.ivu-menu-horizontal {
height: 35px;
...
...
app_Web/packages/ibiz-vue/src/styles/components/common/app-header.less
0 → 100644
浏览文件 @
e1537cb0
.app-style2-header {
display: flex;
justify-content: space-between;
height: 100%;
box-shadow: 1px 0 6px 0 rgba(39, 54, 78, 0.12);
padding: 0px 6px;
> .app-header-left {
.app-header__caption {
font-size: 18px;
font-weight: 700;
}
.app-header__caption__menuicon{
cursor: pointer;
}
}
> .app-header-left,
> .app-header-center,
> .app-header-right {
display: flex;
align-items: center;
.app-header-menus{
margin-right: 100px;
}
}
}
app_Web/packages/ibiz-vue/src/styles/components/common/index.less
浏览文件 @
e1537cb0
...
...
@@ -119,3 +119,4 @@
@import "./context-menu-drag.less";
@import "./app-studioaction.less";
@import "./disk-image-upload.less";
@import "./app-header.less";
\ No newline at end of file
app_Web/packages/ibiz-vue/src/styles/components/common/tab-page-exp-style2.less
浏览文件 @
e1537cb0
.view-style2{
.view-style2
{
.ibiz-page-tag {
position: relative;
box-sizing: border-box;
height: 34px;
padding: 0 60px 0 30px;
margin: 0;
}
.ibiz-page-tag__body {
position: relative;
width: 100%;
...
...
@@ -17,27 +19,28 @@
visibility: initial;
}
}
span {
.ivu-tag:last-child {
border-right: none;
}
}
}
}
.move-btn {
font-size: 18px;
width: 30px;
height: 34px;
line-height: 34px;
text-align: center;
cursor: pointer;
border-right: none;
}
.move-btn:hover {
background: #efefef;
}
.ibiz-page-tag__left,
.ibiz-page-tag__right,
.ivu-dropdown {
...
...
@@ -56,9 +59,8 @@
.ivu-dropdown {
right: 0;
}
}
.ibiz-page-tag__body__tags {
.ibiz-page-tag__body__tags {
position: absolute;
overflow: visible;
white-space: nowrap;
...
...
@@ -71,22 +73,13 @@
border: 0;
border-radius: 0;
font-size: 14px;
.ivu-tag-text {
> i::before {
vertical-align: initial;
}
}
.text-icon {
height: 16px;
margin-bottom: -3px;
}
.ivu-icon-ios-close {
visibility: hidden;
}
.tag-caption-content__text-icon::before {
vertical-align: initial;
}
.tags-transition-move {
...
...
@@ -97,14 +90,20 @@
.tags-transition-leave-to {
opacity: 0;
}
}
.body__tags__tag-text {
.tag-caption-content__text-image {
height: 16px;
margin-bottom: -3px;
}
}
.body__tags__tag-text {
cursor: pointer;
display: table-cell;
.ivu-tooltip {
display: block;
}
.ivu-tooltip-rel {
display: block;
...
...
@@ -112,7 +111,6 @@
overflow: hidden;
text-overflow: ellipsis;
}
}
.tag-caption-content {
max-width: 250px;
...
...
@@ -120,6 +118,7 @@
white-space: nowrap;
overflow: hidden;
}
}
}
.app-theme-default {
...
...
app_Web/packages/ibiz-vue/src/styles/components/layout/app-default-indexview-layout.less
浏览文件 @
e1537cb0
...
...
@@ -63,3 +63,28 @@
}
}
}
.view-style2.appindexview{
.app-header{
.app-header-left,.app-header-center,.app-header-right{
flex-grow: 1;
display: flex;
}
.app-header-right{
justify-content: end;
}
.ivu-dropdown{
position: static;
display: inline-block;
font-size: 15px;
padding: 0px 10px
}
}
.app-lang{
font-size: 15px;
padding: 0 10px;
}
.ivu-split-pane{
height: 100%;
}
}
\ No newline at end of file
app_Web/public/assets/theme/default.less
浏览文件 @
e1537cb0
...
...
@@ -2195,3 +2195,9 @@ body {
color: @color-primary-base;
}
}
.view-style2{
.app-footer{
background-color: @color-primary-base;
}
}
\ No newline at end of file
app_Web/public/assets/third/dingdingRedirect.html
浏览文件 @
e1537cb0
...
...
@@ -21,6 +21,7 @@
var
baseUrl
=
getUrlParam
(
'baseUrl'
);
var
redirectUrl
=
getUrlParam
(
'redirect_uri'
);
var
client_id
=
getUrlParam
(
'client_id'
);
var
redirect_state
=
getUrlParam
(
'redirect_state'
);
if
(
code
&&
id
&&
state
)
{
// 通过授权code请求后台
$
.
ajax
({
...
...
@@ -53,7 +54,7 @@
'Authorization'
:
`Bearer
${
data
.
token
}
`
},
success
:
function
(
data
)
{
window
.
location
.
href
=
redirectUrl
+
'?code='
+
data
;
window
.
location
.
href
=
redirectUrl
+
'?code='
+
data
+
'&state='
+
redirect_state
;
}
})
}
else
{
...
...
app_Web/public/assets/third/wxWorkRedirect.html
浏览文件 @
e1537cb0
...
...
@@ -21,6 +21,7 @@
var
baseUrl
=
getUrlParam
(
'baseUrl'
);
var
redirectUrl
=
getUrlParam
(
'redirect_uri'
);
var
client_id
=
getUrlParam
(
'client_id'
);
var
redirect_state
=
getUrlParam
(
'redirect_state'
);
if
(
code
&&
id
&&
state
)
{
// 通过授权code请求后台
$
.
ajax
({
...
...
@@ -53,7 +54,7 @@
'Authorization'
:
`Bearer
${
data
.
token
}
`
},
success
:
function
(
data
)
{
window
.
location
.
href
=
redirectUrl
+
'?code='
+
data
;
window
.
location
.
href
=
redirectUrl
+
'?code='
+
data
+
'&state='
+
redirect_state
;
}
})
}
else
{
...
...
app_Web/src/components/login/login.vue
浏览文件 @
e1537cb0
...
...
@@ -215,7 +215,7 @@ export default class Login extends Vue {
* @memberof Login
*/
public
created
()
{
this
.
curRouteParams
=
this
.
getRouteParams
(
window
.
location
.
href
);
this
.
curRouteParams
=
Util
.
getRouteParams
(
window
.
location
.
href
);
this
.
unifiedLogin
();
this
.
setRules
();
this
.
initLoginView
().
then
((
result
:
boolean
)
=>
{
...
...
@@ -247,12 +247,19 @@ export default class Login extends Vue {
// 已经登录
if
(
token
)
{
this
.
isThridLink
=
true
;
// 系统ID
let
srfdcsystem
:
string
=
''
;
const
tempViewParam
=
ViewTool
.
getDcSystemIdViewParam
();
if
(
tempViewParam
&&
tempViewParam
.
srfdcsystem
)
{
srfdcsystem
=
tempViewParam
.
srfdcsystem
;
}
const
response
=
await
Http
.
getInstance
().
get
(
'/uaa/oauth/code'
,
{
'client_id'
:
this
.
curRouteParams
.
client_id
},
false
,
{
'Authorization'
:
`Bearer
${
token
}
`
,
'srfsystemid'
:
srfdcsystem
});
const
{
status
,
data
}
=
response
;
if
(
status
==
200
)
{
window
.
location
.
href
=
`
${
this
.
curRouteParams
.
redirect_uri
}
?code=
${
data
}
`
;
window
.
location
.
href
=
`
${
this
.
curRouteParams
.
redirect_uri
}
?code=
${
data
}
&state=
${
this
.
curRouteParams
.
state
}
`
;
}
else
{
this
.
$throw
(
this
.
$t
(
'components.login.loginfailed'
)
as
string
,
'loginInit'
);
}
...
...
@@ -384,7 +391,7 @@ export default class Login extends Vue {
}).
then
((
response
:
any
)
=>
{
const
{
status
,
data
}
=
response
;
if
(
status
==
200
)
{
window
.
location
.
href
=
`
${
this
.
curRouteParams
.
redirect_uri
}
?code=
${
data
}
`
;
window
.
location
.
href
=
`
${
this
.
curRouteParams
.
redirect_uri
}
?code=
${
data
}
&state=
${
this
.
curRouteParams
.
state
}
`
;
}
else
{
this
.
$throw
(
this
.
$t
(
'components.login.loginfailed'
)
as
string
,
'loginInit'
);
}
...
...
@@ -492,6 +499,12 @@ export default class Login extends Vue {
console
.
error
(
'未传入客户端ID'
);
this
.
$throw
(
this
.
$t
(
'components.login.loginfailed'
)
as
string
,
'dingtalkHandleClick'
);
}
if
(
this
.
curRouteParams
.
state
)
{
redirect_uri
+=
`&redirect_state=
${
this
.
curRouteParams
.
state
}
`
;
}
else
{
console
.
error
(
'未传入state'
);
this
.
$throw
(
this
.
$t
(
'components.login.loginfailed'
)
as
string
,
'dingtalkHandleClick'
);
}
const
redirect_uri_encode
=
encodeURIComponent
(
redirect_uri
);
// 3.钉钉扫码url
const
url
=
...
...
@@ -545,6 +558,12 @@ export default class Login extends Vue {
console
.
error
(
'未传入客户端ID'
);
this
.
$throw
(
this
.
$t
(
'components.login.loginfailed'
)
as
string
,
'wxWorkHandleClick'
);
}
if
(
this
.
curRouteParams
.
state
)
{
redirect_uri
+=
`&redirect_state=
${
this
.
curRouteParams
.
state
}
`
;
}
else
{
console
.
error
(
'未传入state'
);
this
.
$throw
(
this
.
$t
(
'components.login.loginfailed'
)
as
string
,
'wxWorkHandleClick'
);
}
const
redirect_uri_encode
=
encodeURIComponent
(
redirect_uri
);
// 3.钉钉扫码url
const
url
=
...
...
@@ -648,25 +667,6 @@ export default class Login extends Vue {
return
baseUrl
;
}
/**
* 获取路由参数
*
* @param path
* @memberof Login
*/
private
getRouteParams
(
path
:
string
)
{
const
returnParams
=
{};
const
tempPath
:
any
=
path
.
slice
(
path
.
indexOf
(
'?'
)
+
1
);
const
pathArray
:
Array
<
string
>
=
tempPath
.
split
(
'&'
);
if
(
pathArray
&&
pathArray
.
length
>
0
)
{
pathArray
.
forEach
((
item
:
any
)
=>
{
if
(
item
&&
item
.
indexOf
(
'='
)
!==
-
1
)
{
Object
.
assign
(
returnParams
,
qs
.
parse
(
item
));
}
});
}
return
returnParams
;
}
}
</
script
>
...
...
app_Web/src/utils/auth-guard/auth-guard.ts
浏览文件 @
e1537cb0
import
qs
from
'qs'
;
import
{
GlobalHelp
,
IPSAppView
}
from
'@ibiz/dynamic-model-api'
;
import
{
clearCookie
,
getCookie
,
SyncSeriesHook
}
from
'qx-util'
;
import
{
AppServiceBase
,
Http
,
getSessionStorage
,
setSessionStorage
,
AppModelService
,
Util
,
GetModelService
,
ViewTool
,
LogUtil
}
from
'ibiz-core'
;
import
{
AppServiceBase
,
Http
,
getSessionStorage
,
setSessionStorage
,
AppModelService
,
Util
,
GetModelService
,
ViewTool
,
LogUtil
,
IParams
}
from
'ibiz-core'
;
import
{
AppCenterService
,
AppNoticeService
,
AppViewLogicService
,
NoticeHandler
}
from
'ibiz-vue'
;
import
{
Environment
}
from
'@/environments/environment'
;
import
i18n
from
'@/locale'
;
...
...
@@ -73,6 +73,11 @@ export class AuthGuard {
*/
authGuard
(
url
:
string
,
params
:
any
=
{},
router
:
any
):
any
{
return
new
Promise
((
resolve
:
any
,
reject
:
any
)
=>
{
const
routeParams
:
IParams
=
Util
.
getRouteParams
(
window
.
location
.
href
);
if
(
routeParams
&&
routeParams
.
redirect_uri
)
{
router
.
push
({
name
:
'login'
});
resolve
(
false
);
}
else
{
const
Environment
=
AppServiceBase
.
getInstance
().
getAppEnvironment
();
if
(
Environment
&&
Environment
.
SaaSMode
)
{
if
(
getSessionStorage
(
'activeOrgData'
))
{
...
...
@@ -95,6 +100,7 @@ export class AuthGuard {
result
?
resolve
(
true
)
:
reject
(
false
);
});
}
}
});
}
...
...
@@ -249,7 +255,7 @@ export class AuthGuard {
*/
public
async
initAppStyle
(
cssUrl
:
string
)
{
const
cssContent
=
await
this
.
loadAppStyle
(
cssUrl
);
if
(
!
cssContent
)
{
if
(
!
cssContent
)
{
LogUtil
.
warn
(
"暂无应用样式表"
);
return
;
}
...
...
@@ -294,8 +300,8 @@ export class AuthGuard {
*
* @param cssContent
*/
public
mountedAppStyle
(
cssContent
:
string
)
{
let
appStyleDom
:
any
;
public
mountedAppStyle
(
cssContent
:
string
)
{
let
appStyleDom
:
any
;
for
(
let
i
=
document
.
head
.
childNodes
.
length
-
1
;
i
>=
0
;
i
--
)
{
const
children
:
any
=
document
.
head
.
childNodes
[
i
]
if
(
children
.
nodeName
==
"STYLE"
&&
children
.
getAttribute
(
'title'
)
&&
children
.
getAttribute
(
'title'
)
==
'app-style-css'
)
{
...
...
@@ -461,4 +467,6 @@ export class AuthGuard {
store
.
commit
(
'addAppData'
,
{});
store
.
dispatch
(
'authresource/commitAuthData'
,
{});
}
}
\ No newline at end of file
app_Web/src/utils/interceptor/interceptor.ts
浏览文件 @
e1537cb0
...
...
@@ -2,7 +2,7 @@ import { Store } from 'vuex';
import
Router
from
'vue-router'
;
import
i18n
from
'@/locale'
;
import
{
Environment
}
from
'@/environments/environment'
;
import
{
Http
,
getSessionStorage
}
from
'ibiz-core'
;
import
{
Http
,
getSessionStorage
,
Util
,
IParams
}
from
'ibiz-core'
;
import
{
AppAuthService
,
AppLoadingService
}
from
'ibiz-vue'
;
import
{
clearCookie
,
getCookie
,
notNilEmpty
,
SyncSeriesHook
}
from
'qx-util'
;
import
{
MicroAppService
}
from
'@/micro'
;
...
...
@@ -101,8 +101,10 @@ export class Interceptors {
if
(
Environment
.
SaaSMode
)
{
let
activeOrgData
=
getSessionStorage
(
'activeOrgData'
);
config
.
headers
[
'srforgid'
]
=
activeOrgData
?.
orgid
;
if
(
!
config
.
headers
[
'srfsystemid'
])
{
config
.
headers
[
'srfsystemid'
]
=
activeOrgData
?.
systemid
;
}
}
if
(
getCookie
(
'ibzuaa-token'
))
{
config
.
headers
[
'Authorization'
]
=
`Bearer
${
getCookie
(
'ibzuaa-token'
)}
`
;
}
else
{
...
...
@@ -208,6 +210,10 @@ export class Interceptors {
this
.
clearAppData
();
if
(
MicroAppService
.
getInstance
().
getIsMicroApp
())
{
MicroAppService
.
getInstance
().
noticeBaseApp
({
action
:
'LOGOUT'
})
}
else
{
const
routeParams
:
IParams
=
Util
.
getRouteParams
(
window
.
location
.
href
);
if
(
routeParams
&&
routeParams
.
redirect_uri
)
{
this
.
router
.
push
({
name
:
'login'
});
}
else
{
if
((
Environment
as
any
).
casLoginUrl
)
{
let
pathname
=
location
.
pathname
;
...
...
@@ -229,6 +235,7 @@ export class Interceptors {
}
}
}
}
/**
* 清除应用数据
...
...
@@ -239,7 +246,7 @@ export class Interceptors {
private
clearAppData
()
{
// 清除user、token
clearCookie
(
'ibzuaa-token'
,
true
);
clearCookie
(
'ibzuaa-expired'
,
true
);
clearCookie
(
'ibzuaa-expired'
,
true
);
clearCookie
(
'ibzuaa-user'
,
true
);
// 清除应用级数据
localStorage
.
removeItem
(
'localdata'
)
...
...
app_Web/src/utils/service/app-component-service.ts
浏览文件 @
e1537cb0
...
...
@@ -104,66 +104,66 @@ export class AppComponentService {
this
.
viewMap
.
set
(
"DEPANELVIEW_DEFAULT"
,
'app-default-depanelview'
);
this
.
viewMap
.
set
(
"DEINDEXVIEW_DEFAULT"
,
'app-default-deindexview'
);
// STYLE2 样式
//
this.viewMap.set("APPINDEXVIEW_STYLE2", 'app-style2-indexview');
//
this.viewMap.set("DEEDITVIEW_STYLE2", 'app-style2-editview');
//
this.viewMap.set("DEEDITVIEW2_STYLE2", 'app-style2-editview2');
//
this.viewMap.set("DEEDITVIEW3_STYLE2", 'app-style2-editview3');
//
this.viewMap.set("DEEDITVIEW4_STYLE2", 'app-style2-editview4');
//
this.viewMap.set("DEGRIDVIEW_STYLE2", 'app-style2-gridview');
//
this.viewMap.set("DELISTVIEW_STYLE2", 'app-style2-listview');
//
this.viewMap.set("DECHARTVIEW_STYLE2", 'app-style2-chartview');
//
this.viewMap.set("DECHARTEXPVIEW_STYLE2", 'app-style2-chartexpview');
//
this.viewMap.set("DEDATAVIEW_STYLE2", 'app-style2-dataviewview');
//
this.viewMap.set("DECALENDARVIEW_STYLE2", 'app-style2-calendarview');
//
this.viewMap.set("DEKANBANVIEW_STYLE2", 'app-style2-kanbanview');
//
this.viewMap.set("DEPORTALVIEW_STYLE2", 'app-style2-deportalview');
//
this.viewMap.set("DETABEXPVIEW_STYLE2", 'app-style2-tabexpview');
//
this.viewMap.set("DETABSEARCHVIEW_STYLE2", 'app-style2-tabsearchview');
//
this.viewMap.set("DEMEDITVIEW9_STYLE2", 'app-style2-meditview');
//
this.viewMap.set("DEGANTTVIEW_STYLE2", 'app-style2-ganttview');
//
this.viewMap.set("DETREEVIEW_STYLE2", 'app-style2-treeview');
//
this.viewMap.set("DETREEGRIDEXVIEW_STYLE2", 'app-style2-treegridexview');
//
this.viewMap.set("DELISTEXPVIEW_STYLE2", 'app-style2-listexpview');
//
this.viewMap.set("DEGRIDEXPVIEW_STYLE2", 'app-style2-gridexpview');
//
this.viewMap.set("DEWFDYNAEXPGRIDVIEW_STYLE2", 'app-style2-wfdynaexpgridview');
//
this.viewMap.set("DEDATAVIEWEXPVIEW_STYLE2", 'app-style2-dataviewexpview');
//
this.viewMap.set("DEPICKUPGRIDVIEW_STYLE2", 'app-style2-pickupgridview');
//
this.viewMap.set("DEMPICKUPVIEW_STYLE2", 'app-style2-mpickupview');
//
this.viewMap.set("DEPICKUPVIEW_STYLE2", 'app-style2-pickupview');
//
this.viewMap.set("DECALENDAREXPVIEW_STYLE2", 'app-style2-calendarexpview');
//
this.viewMap.set("DETREEEXPVIEW_STYLE2", 'app-style2-treeexpview');
//
this.viewMap.set("DEPICKUPTREEVIEW_STYLE2", 'app-style2-pickuptreeview');
//
this.viewMap.set("DECUSTOMVIEW_STYLE2", 'app-style2-customview');
//
this.viewMap.set("DEOPTVIEW_STYLE2", 'app-style2-optview');
//
this.viewMap.set("DEOPTVIEW_STYLE2", 'app-style2-optview');
//
this.viewMap.set("APPPORTALVIEW_STYLE2", 'app-style2-portalview');
//
this.viewMap.set("DEWFDYNAACTIONVIEW_STYLE2", 'app-style2-wfdynaactionview');
//
this.viewMap.set("DEWFDYNASTARTVIEW_STYLE2", 'app-style2-wfdynastartview');
//
this.viewMap.set("DEWFDYNAEDITVIEW_STYLE2", 'app-style2-wfdynaeditview');
//
this.viewMap.set("DEWFDYNAEDITVIEW3_STYLE2", 'app-style2-wfdynaeditview3');
//
this.viewMap.set("DEPORTALVIEW9_STYLE2", 'app-style2-deportalview');
//
this.viewMap.set("DEEDITVIEW9_STYLE2", 'app-style2-editview');
//
this.viewMap.set("DEGRIDVIEW9_STYLE2", 'app-style2-gridview');
//
this.viewMap.set("DELISTVIEW9_STYLE2", 'app-style2-listview');
//
this.viewMap.set("DEHTMLVIEW_STYLE2", 'app-style2-htmlview');
//
this.viewMap.set("DECHARTVIEW9_STYLE2", 'app-style2-chartview');
//
this.viewMap.set("DEDATAVIEW9_STYLE2",'app-style2-dataviewview');
//
this.viewMap.set("DEFORMPICKUPDATAVIEW_STYLE2","app-style2-formpickupdataview");
//
this.viewMap.set("DEINDEXPICKUPDATAVIEW_STYLE2","app-style2-indexpickupdataview");
//
this.viewMap.set("DEWIZARDVIEW_STYLE2", 'app-style2-wizardview');
//
this.viewMap.set("DEWFACTIONVIEW_STYLE2", 'app-style2-wfactionview');
//
this.viewMap.set("DEREDIRECTVIEW_STYLE2", 'app-style2-deredirectview');
//
this.viewMap.set("APPWFSTEPTRACEVIEW_STYLE2", 'app-style2-wfsteptraceview');
//
this.viewMap.set("DEREPORTVIEW_STYLE2",'app-style2-dereportview');
//
this.viewMap.set("DEMAPEXPVIEW_STYLE2",'app-style2-mapexpview');
//
this.viewMap.set("DEPANELVIEW_STYLE2",'app-style2-depanelview');
//
this.viewMap.set("DEMAPVIEW_STYLE2", 'app-style2-mapview');
this
.
viewMap
.
set
(
"APPINDEXVIEW_STYLE2"
,
'app-style2-indexview'
);
this
.
viewMap
.
set
(
"DEEDITVIEW_STYLE2"
,
'app-style2-editview'
);
this
.
viewMap
.
set
(
"DEEDITVIEW2_STYLE2"
,
'app-style2-editview2'
);
this
.
viewMap
.
set
(
"DEEDITVIEW3_STYLE2"
,
'app-style2-editview3'
);
this
.
viewMap
.
set
(
"DEEDITVIEW4_STYLE2"
,
'app-style2-editview4'
);
this
.
viewMap
.
set
(
"DEGRIDVIEW_STYLE2"
,
'app-style2-gridview'
);
this
.
viewMap
.
set
(
"DELISTVIEW_STYLE2"
,
'app-style2-listview'
);
this
.
viewMap
.
set
(
"DECHARTVIEW_STYLE2"
,
'app-style2-chartview'
);
this
.
viewMap
.
set
(
"DECHARTEXPVIEW_STYLE2"
,
'app-style2-chartexpview'
);
this
.
viewMap
.
set
(
"DEDATAVIEW_STYLE2"
,
'app-style2-dataviewview'
);
this
.
viewMap
.
set
(
"DECALENDARVIEW_STYLE2"
,
'app-style2-calendarview'
);
this
.
viewMap
.
set
(
"DEKANBANVIEW_STYLE2"
,
'app-style2-kanbanview'
);
this
.
viewMap
.
set
(
"DEPORTALVIEW_STYLE2"
,
'app-style2-deportalview'
);
this
.
viewMap
.
set
(
"DETABEXPVIEW_STYLE2"
,
'app-style2-tabexpview'
);
this
.
viewMap
.
set
(
"DETABSEARCHVIEW_STYLE2"
,
'app-style2-tabsearchview'
);
this
.
viewMap
.
set
(
"DEMEDITVIEW9_STYLE2"
,
'app-style2-meditview'
);
this
.
viewMap
.
set
(
"DEGANTTVIEW_STYLE2"
,
'app-style2-ganttview'
);
this
.
viewMap
.
set
(
"DETREEVIEW_STYLE2"
,
'app-style2-treeview'
);
this
.
viewMap
.
set
(
"DETREEGRIDEXVIEW_STYLE2"
,
'app-style2-treegridexview'
);
this
.
viewMap
.
set
(
"DELISTEXPVIEW_STYLE2"
,
'app-style2-listexpview'
);
this
.
viewMap
.
set
(
"DEGRIDEXPVIEW_STYLE2"
,
'app-style2-gridexpview'
);
this
.
viewMap
.
set
(
"DEWFDYNAEXPGRIDVIEW_STYLE2"
,
'app-style2-wfdynaexpgridview'
);
this
.
viewMap
.
set
(
"DEDATAVIEWEXPVIEW_STYLE2"
,
'app-style2-dataviewexpview'
);
this
.
viewMap
.
set
(
"DEPICKUPGRIDVIEW_STYLE2"
,
'app-style2-pickupgridview'
);
this
.
viewMap
.
set
(
"DEMPICKUPVIEW_STYLE2"
,
'app-style2-mpickupview'
);
this
.
viewMap
.
set
(
"DEPICKUPVIEW_STYLE2"
,
'app-style2-pickupview'
);
this
.
viewMap
.
set
(
"DECALENDAREXPVIEW_STYLE2"
,
'app-style2-calendarexpview'
);
this
.
viewMap
.
set
(
"DETREEEXPVIEW_STYLE2"
,
'app-style2-treeexpview'
);
this
.
viewMap
.
set
(
"DEPICKUPTREEVIEW_STYLE2"
,
'app-style2-pickuptreeview'
);
this
.
viewMap
.
set
(
"DECUSTOMVIEW_STYLE2"
,
'app-style2-customview'
);
this
.
viewMap
.
set
(
"DEOPTVIEW_STYLE2"
,
'app-style2-optview'
);
this
.
viewMap
.
set
(
"DEOPTVIEW_STYLE2"
,
'app-style2-optview'
);
this
.
viewMap
.
set
(
"APPPORTALVIEW_STYLE2"
,
'app-style2-portalview'
);
this
.
viewMap
.
set
(
"DEWFDYNAACTIONVIEW_STYLE2"
,
'app-style2-wfdynaactionview'
);
this
.
viewMap
.
set
(
"DEWFDYNASTARTVIEW_STYLE2"
,
'app-style2-wfdynastartview'
);
this
.
viewMap
.
set
(
"DEWFDYNAEDITVIEW_STYLE2"
,
'app-style2-wfdynaeditview'
);
this
.
viewMap
.
set
(
"DEWFDYNAEDITVIEW3_STYLE2"
,
'app-style2-wfdynaeditview3'
);
this
.
viewMap
.
set
(
"DEPORTALVIEW9_STYLE2"
,
'app-style2-deportalview'
);
this
.
viewMap
.
set
(
"DEEDITVIEW9_STYLE2"
,
'app-style2-editview'
);
this
.
viewMap
.
set
(
"DEGRIDVIEW9_STYLE2"
,
'app-style2-gridview'
);
this
.
viewMap
.
set
(
"DELISTVIEW9_STYLE2"
,
'app-style2-listview'
);
this
.
viewMap
.
set
(
"DEHTMLVIEW_STYLE2"
,
'app-style2-htmlview'
);
this
.
viewMap
.
set
(
"DECHARTVIEW9_STYLE2"
,
'app-style2-chartview'
);
this
.
viewMap
.
set
(
"DEDATAVIEW9_STYLE2"
,
'app-style2-dataviewview'
);
this
.
viewMap
.
set
(
"DEFORMPICKUPDATAVIEW_STYLE2"
,
"app-style2-formpickupdataview"
);
this
.
viewMap
.
set
(
"DEINDEXPICKUPDATAVIEW_STYLE2"
,
"app-style2-indexpickupdataview"
);
this
.
viewMap
.
set
(
"DEWIZARDVIEW_STYLE2"
,
'app-style2-wizardview'
);
this
.
viewMap
.
set
(
"DEWFACTIONVIEW_STYLE2"
,
'app-style2-wfactionview'
);
this
.
viewMap
.
set
(
"DEREDIRECTVIEW_STYLE2"
,
'app-style2-deredirectview'
);
this
.
viewMap
.
set
(
"APPWFSTEPTRACEVIEW_STYLE2"
,
'app-style2-wfsteptraceview'
);
this
.
viewMap
.
set
(
"DEREPORTVIEW_STYLE2"
,
'app-style2-dereportview'
);
this
.
viewMap
.
set
(
"DEMAPEXPVIEW_STYLE2"
,
'app-style2-mapexpview'
);
this
.
viewMap
.
set
(
"DEPANELVIEW_STYLE2"
,
'app-style2-depanelview'
);
this
.
viewMap
.
set
(
"DEMAPVIEW_STYLE2"
,
'app-style2-mapview'
);
// STYLE3 样式
//
this.viewMap.set("APPINDEXVIEW_STYLE3", 'app-style2-indexview');
this
.
viewMap
.
set
(
"APPINDEXVIEW_STYLE3"
,
'app-style2-indexview'
);
// STYLE4 样式
//
this.viewMap.set("APPINDEXVIEW_STYLE4", 'app-default-indexview');
//
this.viewMap.set("APPPORTALVIEW_STYLE4", 'app-style4-portalview');
//
this.viewMap.set("DEPORTALVIEW_STYLE4", 'app-style4-deportalview');
this
.
viewMap
.
set
(
"APPINDEXVIEW_STYLE4"
,
'app-default-indexview'
);
this
.
viewMap
.
set
(
"APPPORTALVIEW_STYLE4"
,
'app-style4-portalview'
);
this
.
viewMap
.
set
(
"DEPORTALVIEW_STYLE4"
,
'app-style4-deportalview'
);
// 注册视图插件
// 注册视图样式,无插件模式
}
...
...
trainsys-core/src/main/resources/liquibase/h2_table.xml
浏览文件 @
e1537cb0
...
...
@@ -169,7 +169,7 @@
</changeSet>
<!--输出实体[PHONE]数据结构 -->
<changeSet
author=
"root"
id=
"tab-phone-
59
-6"
>
<changeSet
author=
"root"
id=
"tab-phone-
61
-6"
>
<createTable
tableName=
"T_PHONE"
>
<column
name=
"PHONEID"
remarks=
""
type=
"VARCHAR(100)"
>
<constraints
primaryKey=
"true"
primaryKeyName=
"PK_PHONE"
/>
...
...
@@ -264,7 +264,7 @@
</changeSet>
<!--输出实体[STUDENT]数据结构 -->
<changeSet
author=
"root"
id=
"tab-student-4
3
-10"
>
<changeSet
author=
"root"
id=
"tab-student-4
4
-10"
>
<createTable
tableName=
"T_STUDENT"
>
<column
name=
"CREATEMAN"
remarks=
""
type=
"VARCHAR(60)"
>
</column>
...
...
trainsys-core/src/main/resources/model/cn/ibizlab/trainsys/PSSYSAPPS/Web/PSAPPDATAENTITIES/Student/PSFORMS/Main.json
浏览文件 @
e1537cb0
...
...
@@ -175,8 +175,11 @@
"showCaption"
:
true
},
{
"codeName"
:
"druipart1"
,
"contentHeight"
:
500.0
,
"contentWidth"
:
1000.0
,
"detailStyle"
:
"DEFAULT"
,
"detailType"
:
"DRUIPART"
,
"height"
:
500.0
,
"name"
:
"druipart1"
,
"getPSAppView"
:
{
"accUserMode"
:
2
,
...
...
@@ -1771,7 +1774,9 @@
},
"getPSLayoutPos"
:
{
"colMD"
:
24
,
"layout"
:
"TABLE_24COL"
"height"
:
500
,
"layout"
:
"TABLE_24COL"
,
"width"
:
1000
},
"getPSNavigateContexts"
:
[
{
"key"
:
"CONTEXTPARAM2"
,
...
...
@@ -1803,6 +1808,7 @@
"SRFDER1NID"
:
"DER1N_REGINFO_STUDENT_STUDENTID"
},
"refreshItems"
:
"studentname;field2;"
,
"width"
:
1000.0
,
"needSave"
:
false
,
"refreshItemsSetParamOnly"
:
false
,
"showCaption"
:
true
...
...
trainsys-core/src/main/resources/model/cn/ibizlab/trainsys/PSSYSAPPS/Web/PSAPPDEVIEWS/studentEditView.json
浏览文件 @
e1537cb0
...
...
@@ -1161,8 +1161,11 @@
"showCaption"
:
true
},
{
"codeName"
:
"druipart1"
,
"contentHeight"
:
500.0
,
"contentWidth"
:
1000.0
,
"detailStyle"
:
"DEFAULT"
,
"detailType"
:
"DRUIPART"
,
"height"
:
500.0
,
"name"
:
"druipart1"
,
"getPSAppView"
:
{
"accUserMode"
:
2
,
...
...
@@ -2757,7 +2760,9 @@
},
"getPSLayoutPos"
:
{
"colMD"
:
24
,
"layout"
:
"TABLE_24COL"
"height"
:
500
,
"layout"
:
"TABLE_24COL"
,
"width"
:
1000
},
"getPSNavigateContexts"
:
[
{
"key"
:
"CONTEXTPARAM2"
,
...
...
@@ -2789,6 +2794,7 @@
"SRFDER1NID"
:
"DER1N_REGINFO_STUDENT_STUDENTID"
},
"refreshItems"
:
"studentname;field2;"
,
"width"
:
1000.0
,
"needSave"
:
false
,
"refreshItemsSetParamOnly"
:
false
,
"showCaption"
:
true
...
...
编辑
预览
Markdown
格式
0%
请重试
or
添加新附件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录