Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
I
integrity_risk_prevention
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
David Yang
integrity_risk_prevention
Commits
7818b2e9
Commit
7818b2e9
authored
Sep 30, 2026
by
drigle
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: respect template shortTitle in record details
parent
e207276e
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
32 additions
and
10 deletions
+32
-10
index.jsx
src/pages/RecordDetailDrawer/index.jsx
+22
-5
ControlMeasureFormPage.jsx
...ages/integrity_risk_prevention/ControlMeasureFormPage.jsx
+1
-0
integrity-risk-prevention.business-flow.md
...isk_prevention/integrity-risk-prevention.business-flow.md
+7
-3
subjectView.js
src/utils/subjectView.js
+2
-2
No files found.
src/pages/RecordDetailDrawer/index.jsx
View file @
7818b2e9
...
@@ -57,6 +57,7 @@ const RecordDetailDrawer = (props, ref) => {
...
@@ -57,6 +57,7 @@ const RecordDetailDrawer = (props, ref) => {
preferredViewName
,
preferredViewName
,
disabledFields
=
EMPTY_ARRAY
,
disabledFields
=
EMPTY_ARRAY
,
authorizationView
=
null
,
authorizationView
=
null
,
templateView
=
authorizationView
,
deriveFieldValues
,
deriveFieldValues
,
}
=
props
;
}
=
props
;
...
@@ -163,7 +164,14 @@ const RecordDetailDrawer = (props, ref) => {
...
@@ -163,7 +164,14 @@ const RecordDetailDrawer = (props, ref) => {
[
activeTabKey
],
[
activeTabKey
],
);
);
const
activeView
=
detailViews
.
find
((
view
)
=>
view
.
name
===
activeTabKey
)
||
detailViews
[
0
];
const
activeDetailView
=
detailViews
.
find
((
view
)
=>
view
.
name
===
activeTabKey
)
||
detailViews
[
0
];
const
activeView
=
useMemo
(()
=>
({
...
activeDetailView
,
settings
:
{
...
activeDetailView
?.
settings
,
shortTitle
:
shouldHideViewTitleColumn
(
activeDetailView
,
templateView
),
},
}),
[
activeDetailView
,
templateView
]);
const
hideRecordTitle
=
shouldHideViewTitleColumn
(
activeView
);
const
hideRecordTitle
=
shouldHideViewTitleColumn
(
activeView
);
const
isRecordLocked
=
remoteRecord
?.
metadata
?.
is_locked
===
true
;
const
isRecordLocked
=
remoteRecord
?.
metadata
?.
is_locked
===
true
;
const
effectiveReadonly
=
readonly
||
isRecordLocked
;
const
effectiveReadonly
=
readonly
||
isRecordLocked
;
...
@@ -196,8 +204,13 @@ const RecordDetailDrawer = (props, ref) => {
...
@@ -196,8 +204,13 @@ const RecordDetailDrawer = (props, ref) => {
!
NON_EDITABLE_FIELD_TYPES
.
has
(
field
.
fieldDef
?.
type
)
&&
!
NON_EDITABLE_FIELD_TYPES
.
has
(
field
.
fieldDef
?.
type
)
&&
!
isDrawerFieldDisabled
(
field
.
field
,
activeView
),
!
isDrawerFieldDisabled
(
field
.
field
,
activeView
),
);
);
const
hasDirtyFields
=
Object
.
keys
(
dirtyFields
).
length
>
0
;
const
changesToSave
=
Object
.
values
(
dirtyFields
).
filter
(
const
hasValidationErrors
=
Object
.
values
(
validationErrors
).
some
(
Boolean
);
(
change
)
=>
!
hideRecordTitle
||
change
.
fieldPath
!==
'title'
,
);
const
hasDirtyFields
=
changesToSave
.
length
>
0
;
const
hasValidationErrors
=
Object
.
entries
(
validationErrors
).
some
(
([
fieldPath
,
message
])
=>
Boolean
(
message
)
&&
(
!
hideRecordTitle
||
fieldPath
!==
'title'
),
);
const
displayedRecord
=
isEditing
?
draftRecord
||
editableRecord
:
editableRecord
;
const
displayedRecord
=
isEditing
?
draftRecord
||
editableRecord
:
editableRecord
;
const
resetEditSession
=
()
=>
{
const
resetEditSession
=
()
=>
{
...
@@ -229,7 +242,11 @@ const RecordDetailDrawer = (props, ref) => {
...
@@ -229,7 +242,11 @@ const RecordDetailDrawer = (props, ref) => {
};
};
const
handleDraftFieldChange
=
(
fieldPath
,
newValue
,
fieldDef
,
editSessionId
)
=>
{
const
handleDraftFieldChange
=
(
fieldPath
,
newValue
,
fieldDef
,
editSessionId
)
=>
{
if
(
!
isEditing
||
editSessionId
!==
editSessionRef
.
current
)
return
;
if
(
!
isEditing
||
editSessionId
!==
editSessionRef
.
current
||
(
hideRecordTitle
&&
fieldPath
===
'title'
)
)
return
;
setDraftRecord
((
currentRecord
)
=>
setDraftRecord
((
currentRecord
)
=>
setFieldValue
(
currentRecord
||
editableRecord
,
fieldPath
,
newValue
),
setFieldValue
(
currentRecord
||
editableRecord
,
fieldPath
,
newValue
),
...
@@ -326,7 +343,7 @@ const RecordDetailDrawer = (props, ref) => {
...
@@ -326,7 +343,7 @@ const RecordDetailDrawer = (props, ref) => {
}
}
}
}
await
handleFieldsUpdate
(
Object
.
values
(
dirtyFields
)
);
await
handleFieldsUpdate
(
changesToSave
);
setIsEditing
(
false
);
setIsEditing
(
false
);
setDirtyFields
({});
setDirtyFields
({});
setValidationErrors
({});
setValidationErrors
({});
...
...
src/pages/integrity_risk_prevention/ControlMeasureFormPage.jsx
View file @
7818b2e9
...
@@ -318,6 +318,7 @@ export default function ControlMeasureFormPage() {
...
@@ -318,6 +318,7 @@ export default function ControlMeasureFormPage() {
open=
{
open
}
open=
{
open
}
recordName=
{
recordName
}
recordName=
{
recordName
}
subjectName=
{
workspace
?.
subjectName
}
subjectName=
{
workspace
?.
subjectName
}
templateView=
{
workspace
?.
view
}
onClose=
{
onClose
}
onClose=
{
onClose
}
onDataChange=
{
onDataChange
}
onDataChange=
{
onDataChange
}
readonly=
{
!
canEdit
}
readonly=
{
!
canEdit
}
...
...
src/pages/integrity_risk_prevention/integrity-risk-prevention.business-flow.md
View file @
7818b2e9
...
@@ -35,9 +35,13 @@
...
@@ -35,9 +35,13 @@
6.
页面请求必须展示加载、成功和错误状态;删除与替换导入必须提供确认。删除确认弹窗
6.
页面请求必须展示加载、成功和错误状态;删除与替换导入必须提供确认。删除确认弹窗
仅展示选中记录数量和软删除说明,不展示记录标题列表。
仅展示选中记录数量和软删除说明,不展示记录标题列表。
7.
Grid View 的
`settings.shortTitle === true`
时隐藏列表
`title`
展示列及新建/编辑弹窗中的根级
7.
Grid View 的
`settings.shortTitle === true`
时隐藏列表
`title`
展示列及新建/编辑弹窗中的根级
“记录标题”输入框;此时不校验、不提交根级
`title`
。Detail View 的同名配置同时隐藏详情
“记录标题”输入框;此时不校验、不提交根级
`title`
。从列表或填写表打开详情弹窗时,优先读取
Header 的记录标题和字段区
`title`
。
`false`
或未配置时正常显示并保留标题必填逻辑。该配置
当前 Detail View 的显式
`settings.shortTitle`
;Detail 未配置或使用“基础信息”兜底视图时,
不删除已有标题数据,也不改变标题搜索、排序、筛选或详情身份。
沿用入口当前模板的配置,与新建记录保持一致。最终配置为
`true`
时,同时隐藏详情 Header
的记录标题、字段区
`title`
及其编辑控件;编辑按钮只计算实际可编辑的业务字段,保存时跳过
标题校验和根级
`title`
提交。编辑中切换至隐藏标题的 Detail 时,暂存的标题修改不会提交,
标题校验错误也不会阻止其他字段保存。显式
`false`
覆盖入口模板的隐藏设置;两处都未配置
时正常显示标题。该配置不删除已有标题数据,也不改变标题搜索、排序、筛选或详情身份。
8.
Subject 配置为多选的选择字段,在新建弹窗和详情编辑中使用可搜索的下拉勾选器;
8.
Subject 配置为多选的选择字段,在新建弹窗和详情编辑中使用可搜索的下拉勾选器;
已选项以标签展示并支持逐项移除或清空,保存值仍为
`settings.options`
中的 value 数组。
已选项以标签展示并支持逐项移除或清空,保存值仍为
`settings.options`
中的 value 数组。
用户字段和引用字段进入详情编辑、弹窗编辑或筛选选择器时,若当前已保存 ID 不在首屏下拉
用户字段和引用字段进入详情编辑、弹窗编辑或筛选选择器时,若当前已保存 ID 不在首屏下拉
...
...
src/utils/subjectView.js
View file @
7818b2e9
...
@@ -469,8 +469,8 @@ export function normalizeRecordLabel(value) {
...
@@ -469,8 +469,8 @@ export function normalizeRecordLabel(value) {
return
normalizeText
(
value
);
return
normalizeText
(
value
);
}
}
export
function
shouldHideViewTitleColumn
(
view
)
{
export
function
shouldHideViewTitleColumn
(
view
,
fallbackView
=
null
)
{
return
view
?.
settings
?.
shortTitle
===
true
;
return
(
view
?.
settings
?.
shortTitle
??
fallbackView
?.
settings
?.
shortTitle
)
===
true
;
}
}
export
function
buildViewColumns
(
view
,
subject
,
{
includeHidden
=
false
}
=
{})
{
export
function
buildViewColumns
(
view
,
subject
,
{
includeHidden
=
false
}
=
{})
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment