Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
A
audit_project_manager
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
audit_project_manager
Commits
60d7b42c
Commit
60d7b42c
authored
Aug 31, 2026
by
drigle
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: enable reference editing in detail drawer
parent
190e6b24
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
27 additions
and
3 deletions
+27
-3
ReferenceSearchSelect.jsx
src/components/ReferenceSearchSelect.jsx
+1
-0
XinyuanAutocomplete.jsx
src/components/XinyuanAutocomplete.jsx
+2
-0
SubjectViewContent.jsx
...ages/RecordDetailDrawer/components/SubjectViewContent.jsx
+4
-0
TailwindEditableField.jsx
...s/RecordDetailDrawer/components/TailwindEditableField.jsx
+10
-2
index.jsx
src/pages/RecordDetailDrawer/index.jsx
+6
-0
project-management.business-flow.md
...es/project_manager_xy/project-management.business-flow.md
+4
-1
No files found.
src/components/ReferenceSearchSelect.jsx
View file @
60d7b42c
...
@@ -568,6 +568,7 @@ export default function ReferenceSearchSelect({
...
@@ -568,6 +568,7 @@ export default function ReferenceSearchSelect({
<
XinyuanAutocomplete
<
XinyuanAutocomplete
{
...
selectionProps
}
{
...
selectionProps
}
aria
-
label=
{
placeholder
}
aria
-
label=
{
placeholder
}
allowsEmptyCollection
emptyText=
"无匹配结果"
emptyText=
"无匹配结果"
errorText=
{
error
}
errorText=
{
error
}
inputValue=
{
query
}
inputValue=
{
query
}
...
...
src/components/XinyuanAutocomplete.jsx
View file @
60d7b42c
...
@@ -32,6 +32,7 @@ function toSelectionKey(value) {
...
@@ -32,6 +32,7 @@ function toSelectionKey(value) {
export
default
function
XinyuanAutocomplete
({
export
default
function
XinyuanAutocomplete
({
'aria-label'
:
ariaLabel
,
'aria-label'
:
ariaLabel
,
allowsEmptyCollection
=
false
,
className
,
className
,
emptyText
=
'暂无可选项'
,
emptyText
=
'暂无可选项'
,
errorText
=
''
,
errorText
=
''
,
...
@@ -119,6 +120,7 @@ export default function XinyuanAutocomplete({
...
@@ -119,6 +120,7 @@ export default function XinyuanAutocomplete({
<
Autocomplete
<
Autocomplete
{
...
rootSelectionProps
}
{
...
rootSelectionProps
}
aria
-
label=
{
ariaLabel
||
placeholder
}
aria
-
label=
{
ariaLabel
||
placeholder
}
allowsEmptyCollection=
{
allowsEmptyCollection
}
className=
{
className
}
className=
{
className
}
fullWidth=
{
fullWidth
}
fullWidth=
{
fullWidth
}
isDisabled=
{
isDisabled
}
isDisabled=
{
isDisabled
}
...
...
src/pages/RecordDetailDrawer/components/SubjectViewContent.jsx
View file @
60d7b42c
...
@@ -40,6 +40,7 @@ export default function SubjectViewContent({
...
@@ -40,6 +40,7 @@ export default function SubjectViewContent({
editSessionId
,
editSessionId
,
mode
=
'view'
,
mode
=
'view'
,
onFieldChange
,
onFieldChange
,
onFieldUpdate
,
onPendingLocalMaterialChange
,
onPendingLocalMaterialChange
,
onFieldValidation
,
onFieldValidation
,
readonly
,
readonly
,
...
@@ -106,6 +107,9 @@ export default function SubjectViewContent({
...
@@ -106,6 +107,9 @@ export default function SubjectViewContent({
editSessionId
,
editSessionId
,
)
)
}
}
onSave=
{
onFieldUpdate
?
(
newValue
)
=>
onFieldUpdate
(
field
.
field
,
newValue
,
field
.
fieldDef
)
:
undefined
}
onValidationChange=
{
onFieldValidation
}
onValidationChange=
{
onFieldValidation
}
onPendingLocalMaterialChange=
{
onPendingLocalMaterialChange
}
onPendingLocalMaterialChange=
{
onPendingLocalMaterialChange
}
readonly=
{
readonly
}
readonly=
{
readonly
}
...
...
src/pages/RecordDetailDrawer/components/TailwindEditableField.jsx
View file @
60d7b42c
...
@@ -594,8 +594,16 @@ export default function TailwindEditableField({
...
@@ -594,8 +594,16 @@ export default function TailwindEditableField({
const
textPlaceholder
=
getTextPlaceholder
(
placeholder
,
fieldDef
);
const
textPlaceholder
=
getTextPlaceholder
(
placeholder
,
fieldDef
);
const
fieldLabel
=
String
(
fieldDef
?.
label
||
fieldDef
?.
name
||
'字段'
).
trim
();
const
fieldLabel
=
String
(
fieldDef
?.
label
||
fieldDef
?.
name
||
'字段'
).
trim
();
const
selectPlaceholder
=
`请选择
${
fieldLabel
}
`
;
const
selectPlaceholder
=
`请选择
${
fieldLabel
}
`
;
const
canInlineEditReference
=
if
(
mode
===
'view'
||
(
mode
===
'edit'
&&
(
readonly
||
disabled
)))
{
mode
===
'view'
&&
isReferenceFieldType
(
fieldType
)
&&
canEdit
&&
typeof
onSave
===
'function'
;
if
(
(
mode
===
'view'
&&
!
canInlineEditReference
)
||
(
mode
===
'edit'
&&
(
readonly
||
disabled
))
)
{
return
<
ReadonlyFieldValue
value=
{
value
}
fieldDef=
{
fieldDef
}
/>;
return
<
ReadonlyFieldValue
value=
{
value
}
fieldDef=
{
fieldDef
}
/>;
}
}
...
...
src/pages/RecordDetailDrawer/index.jsx
View file @
60d7b42c
...
@@ -458,6 +458,11 @@ const RecordDetailDrawer = (props, ref) => {
...
@@ -458,6 +458,11 @@ const RecordDetailDrawer = (props, ref) => {
}
}
};
};
const
handleInlineFieldUpdate
=
async
(
fieldPath
,
newValue
,
fieldDef
)
=>
{
await
handleFieldUpdate
(
fieldPath
,
newValue
,
fieldDef
);
onDataChange
?.(
true
);
};
return
(
return
(
<
Modal
.
Root
>
<
Modal
.
Root
>
<
Modal
.
Trigger
aria
-
hidden=
"true"
className=
"sr-only"
tabIndex=
{
-
1
}
/>
<
Modal
.
Trigger
aria
-
hidden=
"true"
className=
"sr-only"
tabIndex=
{
-
1
}
/>
...
@@ -585,6 +590,7 @@ const RecordDetailDrawer = (props, ref) => {
...
@@ -585,6 +590,7 @@ const RecordDetailDrawer = (props, ref) => {
editSessionId=
{
editSessionRef
.
current
}
editSessionId=
{
editSessionRef
.
current
}
mode=
{
isEditing
?
'edit'
:
'view'
}
mode=
{
isEditing
?
'edit'
:
'view'
}
onFieldChange=
{
handleDraftFieldChange
}
onFieldChange=
{
handleDraftFieldChange
}
onFieldUpdate=
{
handleInlineFieldUpdate
}
onFieldValidation=
{
handleFieldValidation
}
onFieldValidation=
{
handleFieldValidation
}
onPendingLocalMaterialChange=
{
handlePendingLocalMaterialChange
}
onPendingLocalMaterialChange=
{
handlePendingLocalMaterialChange
}
readonly=
{
effectiveReadonly
}
readonly=
{
effectiveReadonly
}
...
...
src/pages/project_manager_xy/project-management.business-flow.md
View file @
60d7b42c
...
@@ -37,7 +37,10 @@
...
@@ -37,7 +37,10 @@
7.
详情弹窗按符合条件的 detail 视图显示字段,并支持字段内联维护;当前 Detail View 的
7.
详情弹窗按符合条件的 detail 视图显示字段,并支持字段内联维护;当前 Detail View 的
`settings.shortTitle === true`
时隐藏记录标题和
`title`
字段,但始终保留“记录详情”功能标题和
`settings.shortTitle === true`
时隐藏记录标题和
`title`
字段,但始终保留“记录详情”功能标题和
Modal 可访问名称。标题、阶段 Tabs 和顶部业务操作固定在 Header,字段内容只在 Body 内纵向
Modal 可访问名称。标题、阶段 Tabs 和顶部业务操作固定在 Header,字段内容只在 Body 内纵向
滚动,滚动内容不得穿过或遮挡阶段 Tabs。
滚动,滚动内容不得穿过或遮挡阶段 Tabs。查看态的
`reference`
、
`document`
、
`view`
、
`template`
、
`task`
、
`tag`
、
`group`
、
`category`
字段显示关联记录表,并在字段具备编辑权限时
提供“编辑关联记录”入口;保存时只向
`metadata`
写入目标记录
`_id`
(多值字段写入
`_id[]`
)。
引用目标缺少 Subject、加载失败或保存失败时在字段附近保留可读错误反馈,不丢失当前编辑值。
8.
列表页不展示前端写死的项目总数、完成率等摘要卡片,仅展示由服务端 Subject/View 配置驱动的视图、筛选和表格内容;项目统计统一在驾驶舱查看。
8.
列表页不展示前端写死的项目总数、完成率等摘要卡片,仅展示由服务端 Subject/View 配置驱动的视图、筛选和表格内容;项目统计统一在驾驶舱查看。
9.
业务列表、动态表单数据表和关联记录表中的长文本最多展示两行,内容始终限制在所属列内;超出内容通过 HeroUI Tooltip 或项目详情查看,避免遮挡相邻列或由单条长文本过度拉高整行。弹窗内只读关联记录表按实际数据行高度收缩,不提供无业务价值的列宽拖拽。
9.
业务列表、动态表单数据表和关联记录表中的长文本最多展示两行,内容始终限制在所属列内;超出内容通过 HeroUI Tooltip 或项目详情查看,避免遮挡相邻列或由单条长文本过度拉高整行。弹窗内只读关联记录表按实际数据行高度收缩,不提供无业务价值的列宽拖拽。
...
...
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