Commit 6b376a4b authored by drigle's avatar drigle

fix: use text input for source application

parent 97b9b7d3
...@@ -89,7 +89,7 @@ ...@@ -89,7 +89,7 @@
2. 通过上传区拖拽文件或打开文件选择器;若选择的是 `ZIP` 压缩包,可进一步选择上传模式: 2. 通过上传区拖拽文件或打开文件选择器;若选择的是 `ZIP` 压缩包,可进一步选择上传模式:
- `整包上传`:将压缩包本身作为 1 份材料处理 - `整包上传`:将压缩包本身作为 1 份材料处理
- `解压后逐文件上传`:按压缩包内文件逐个建档 - `解压后逐文件上传`:按压缩包内文件逐个建档
3. 用户补充标题、所属周期/年份、来源应用、来源系统、标签、分类、提供部门、提供时间、是否涉密、是否审计部材料等信息;来源系统和材料分类必须从配置下拉中选择 3. 用户补充标题、所属周期/年份、来源应用、来源系统、标签、分类、提供部门、提供时间、是否涉密、是否审计部材料等信息;来源应用为文本输入,来源系统和材料分类必须从配置下拉中选择
4. 先调用上传接口上传二进制文件 4. 先调用上传接口上传二进制文件
5. 上传成功后,得到 `{name, type, size, url}` 文件对象 5. 上传成功后,得到 `{name, type, size, url}` 文件对象
6. 再创建 `am_material` 记录: 6. 再创建 `am_material` 记录:
...@@ -108,7 +108,7 @@ ...@@ -108,7 +108,7 @@
### 4.3 在材料中心统一查看与管理 ### 4.3 在材料中心统一查看与管理
1. 用户进入 `材料归档` 1. 用户进入 `材料归档`
2. 在“搜索材料”区域按字段填写筛选条件;文本字段支持模糊搜索,来源系统和材料分类使用配置下拉筛选: 2. 在“搜索材料”区域按字段填写筛选条件;文本字段支持模糊搜索,来源系统和材料分类使用配置下拉筛选,来源应用按文本模糊匹配:
- 材料标题:匹配 `metadata.material_title` - 材料标题:匹配 `metadata.material_title`
- 所属周期/年份:匹配 `metadata.archive_year` - 所属周期/年份:匹配 `metadata.archive_year`
- 文件名:匹配 `metadata.file_asset.name` - 文件名:匹配 `metadata.file_asset.name`
...@@ -129,7 +129,7 @@ ...@@ -129,7 +129,7 @@
10. 勾选后在浮动操作条中执行以下批量操作: 10. 勾选后在浮动操作条中执行以下批量操作:
- 批量下载/导出:勾选 1 份材料时直接下载原文件;勾选多份材料时,前端读取各材料 `metadata.file_asset.url` 并打包为 `ZIP` 压缩包下载 - 批量下载/导出:勾选 1 份材料时直接下载原文件;勾选多份材料时,前端读取各材料 `metadata.file_asset.url` 并打包为 `ZIP` 压缩包下载
- 批量修改:按字段选择是否覆盖所属周期/年份、来源应用、来源系统、分类、提供部门、提供时间、是否涉密、是否审计部材料;来源系统或材料分类启用覆盖后从对应配置下拉选择 - 批量修改:按字段选择是否覆盖所属周期/年份、来源应用、来源系统、分类、提供部门、提供时间、是否涉密、是否审计部材料;来源应用使用文本输入,来源系统或材料分类启用覆盖后从对应配置下拉选择
- 批量打标签:统一覆盖 `metadata.tag` - 批量打标签:统一覆盖 `metadata.tag`
- 批量删除:对已勾选材料执行软删除 - 批量删除:对已勾选材料执行软删除
...@@ -144,7 +144,7 @@ ...@@ -144,7 +144,7 @@
13. 创建、修改、批量操作、下载和删除成功后,以视口顶部居中的 Toast 提示结果,并在 4 秒后自动消失;失败信息保留在当前业务区域,便于用户定位和重试 13. 创建、修改、批量操作、下载和删除成功后,以视口顶部居中的 Toast 提示结果,并在 4 秒后自动消失;失败信息保留在当前业务区域,便于用户定位和重试
14. 列表或统计请求失败时保留真实错误态并展示重试提示;真实查询结果为空时展示空状态,不注入演示材料、测试数字或伪造项目记录 14. 列表或统计请求失败时保留真实错误态并展示重试提示;真实查询结果为空时展示空状态,不注入演示材料、测试数字或伪造项目记录
15. 用户点击“编辑”后进入编辑态,可修改材料标题、所属周期/年份、来源应用、来源系统、分类、标签、提供信息与合规属性;来源系统和材料分类从配置下拉选择 15. 用户点击“编辑”后进入编辑态,可修改材料标题、所属周期/年份、来源应用、来源系统、分类、标签、提供信息与合规属性;来源应用使用文本输入,来源系统和材料分类从配置下拉选择
16. 编辑态下点击“取消编辑”放弃未保存修改并恢复当前材料原值 16. 编辑态下点击“取消编辑”放弃未保存修改并恢复当前材料原值
17. 编辑态下点击“保存修改”后调用材料更新接口,保存成功后生效并回到查看态 17. 编辑态下点击“保存修改”后调用材料更新接口,保存成功后生效并回到查看态
18. 详情弹框提供单个删除入口,删除前需二次确认,确认后对当前材料执行软删除并关闭弹框 18. 详情弹框提供单个删除入口,删除前需二次确认,确认后对当前材料执行软删除并关闭弹框
......
...@@ -70,7 +70,6 @@ import { ...@@ -70,7 +70,6 @@ import {
loadMaterialSelectFieldOptions, loadMaterialSelectFieldOptions,
removeMaterialRecord, removeMaterialRecord,
UNCATEGORIZED_CATEGORY_LABEL, UNCATEGORIZED_CATEGORY_LABEL,
SOURCE_APP_SUGGESTIONS,
updateMaterialRecord, updateMaterialRecord,
} from "../materialService"; } from "../materialService";
...@@ -499,22 +498,6 @@ export default function ResourceBookingPage() { ...@@ -499,22 +498,6 @@ export default function ResourceBookingPage() {
}; };
}, [activeMaterialId, submittedMaterialSearchForm, page, pageSize]); }, [activeMaterialId, submittedMaterialSearchForm, page, pageSize]);
const sourceOptions = useMemo(() => {
const dynamicOptions = (dashboard.sourceSuggestions || []).filter(Boolean);
return [...SOURCE_APP_SUGGESTIONS, ...dynamicOptions].reduce(
(accumulator, item) => {
if (
!item?.value ||
accumulator.some((current) => current.value === item.value)
) {
return accumulator;
}
accumulator.push(item);
return accumulator;
},
[],
);
}, [dashboard.sourceSuggestions]);
const categoryTabs = useMemo( const categoryTabs = useMemo(
() => { () => {
const categorizedTabs = archiveCategoryOptions const categorizedTabs = archiveCategoryOptions
...@@ -1301,14 +1284,12 @@ export default function ResourceBookingPage() { ...@@ -1301,14 +1284,12 @@ export default function ResourceBookingPage() {
<div className="min-w-0"> <div className="min-w-0">
<FieldLabel>来源应用</FieldLabel> <FieldLabel>来源应用</FieldLabel>
<ConfiguredSelect <Input
fullWidth
variant="secondary"
value={materialSearchForm.sourceApp} value={materialSearchForm.sourceApp}
options={sourceOptions} placeholder="全部来源应用"
fieldLabel="来源应用" onChange={(event) => updateMaterialSearchField("sourceApp", event.target.value)}
emptyLabel="全部来源应用"
onChange={(event) =>
updateMaterialSearchField("sourceApp", event.target.value)
}
/> />
</div> </div>
</div> </div>
...@@ -1773,12 +1754,12 @@ export default function ResourceBookingPage() { ...@@ -1773,12 +1754,12 @@ export default function ResourceBookingPage() {
</div> </div>
<div> <div>
<FieldLabel>来源应用</FieldLabel> <FieldLabel>来源应用</FieldLabel>
<ConfiguredSelect <Input
fullWidth
variant="secondary"
value={detailForm.sourceApp} value={detailForm.sourceApp}
options={sourceOptions} placeholder="请输入来源应用"
fieldLabel="来源应用" isDisabled={saving}
emptyLabel="请选择来源应用(可选)"
disabled={saving}
onChange={(event) => onChange={(event) =>
setDetailForm((prev) => ({ setDetailForm((prev) => ({
...prev, ...prev,
...@@ -2113,12 +2094,12 @@ export default function ResourceBookingPage() { ...@@ -2113,12 +2094,12 @@ export default function ResourceBookingPage() {
</HeroCheckbox> </HeroCheckbox>
<div> <div>
<FieldLabel>来源应用</FieldLabel> <FieldLabel>来源应用</FieldLabel>
<ConfiguredSelect <Input
fullWidth
variant="secondary"
value={batchEditForm.sourceApp} value={batchEditForm.sourceApp}
options={sourceOptions} placeholder="留空以统一清除来源应用"
fieldLabel="来源应用" isDisabled={!batchEditFields.sourceApp}
emptyLabel="留空以统一清除来源应用"
disabled={!batchEditFields.sourceApp}
onChange={(event) => onChange={(event) =>
setBatchEditForm((prev) => ({ setBatchEditForm((prev) => ({
...prev, ...prev,
...@@ -2725,11 +2706,11 @@ export default function ResourceBookingPage() { ...@@ -2725,11 +2706,11 @@ export default function ResourceBookingPage() {
</div> </div>
<div> <div>
<FieldLabel>来源应用</FieldLabel> <FieldLabel>来源应用</FieldLabel>
<ConfiguredSelect <Input
fullWidth
variant="secondary"
value={uploadForm.sourceApp} value={uploadForm.sourceApp}
options={sourceOptions} placeholder="请输入来源应用"
fieldLabel="来源应用"
emptyLabel="请选择来源应用(可选)"
onChange={(event) => onChange={(event) =>
setUploadForm((prev) => ({ setUploadForm((prev) => ({
...prev, ...prev,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment