Commit 6b376a4b authored by drigle's avatar drigle

fix: use text input for source application

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