fix: 保存对话框预填文件名并自动补扩展名; 截图组件隐藏图像来源字段

- Properties.tsx: 输出类字段保存框按过滤器预填默认文件名(未命名.png 等), 不再是空文件名没法直接点保存; 保存结果无扩展名时自动补所选类型扩展名(Windows 保存框不会自动补)
- catalog: Image_Screenshot 的 pictureSource(图像来源) 界面隐藏, 实现默认截当前屏幕; 历史流程存有 2(指定图片文件) 仍按原逻辑生效
This commit is contained in:
yu 2026-11-02 15:01:44 +08:00
parent 88d5e61c5b
commit 29f3443110
2 changed files with 24 additions and 5 deletions

View File

@ -61895,13 +61895,13 @@
{
"key": "pictureSource",
"label": "图像来源",
"widget": "radio",
"widget": "hidden",
"type": "string",
"displayType": "buttonGroup",
"required": false,
"defaultValue": "1",
"placeholder": "",
"description": "选择要截图的图像来源,可以是当前屏幕,也可以是指定的图片文件。",
"description": "【界面已隐藏】实现默认截取当前屏幕;历史流程如存有 2(指定图片文件) 仍按原逻辑生效",
"advanced": false,
"valueTypes": [],
"options": [

View File

@ -481,6 +481,21 @@ function fileFiltersFor(componentId: string, field: CatalogField): FileFilterOpt
return filters;
}
/** 输出字段的保存框默认文件名:取第一个非「全部文件」过滤器的首个扩展名 */
function defaultSaveFilename(filters: FileFilterOption[]): string {
const ext = filters.find((f) => !f.extensions.includes("*"))?.extensions[0];
return ext ? `未命名.${ext}` : "";
}
/** 保存结果没有扩展名时补上所选类型的扩展名(Windows 保存框不会自动补) */
function ensureSaveExtension(filePath: string, filters: FileFilterOption[]): string {
const exts = filters.find((f) => !f.extensions.includes("*"))?.extensions ?? [];
if (!exts.length) return filePath;
const clean = filePath.trim();
if (/\.[A-Za-z0-9]+$/.test(clean)) return clean;
return `${clean}.${exts[0]}`;
}
function FieldControl({
field,
node,
@ -533,12 +548,16 @@ function FieldControl({
`${field.key} ${field.label ?? ""}`
);
if (isOutputField) {
const filters = fileFiltersFor(node.componentId, field);
// 预填默认文件名(按过滤器推断扩展名),避免弹出的保存框文件名为空没法直接点保存
const defaultPath = textOf(raw) || defaultSaveFilename(filters);
const selected = await window.rpa.dialog.save({
title: field.label,
defaultPath: textOf(raw) || undefined,
filters: fileFiltersFor(node.componentId, field)
defaultPath: defaultPath || undefined,
filters
});
if (selected) onChange(field.key, selected);
// Windows 保存框不会按所选类型自动补扩展名,这里补上
if (selected) onChange(field.key, ensureSaveExtension(selected, filters));
return;
}
}