优化平台参数处理逻辑,支持逗号分隔值的独立分组

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-04-20 14:54:21 +08:00
parent 71bb45f6a0
commit 9bea71e414

View File

@@ -108,7 +108,8 @@
:placeholder="setting.description" size="small" style="width:100%;" />
<a-select :placeholder="`请选择${setting.description}`"
allow-clear
v-else-if="setting.paramKey === 'platforms'" v-model:value="setting.defaultValue">
v-else-if="setting.paramKey === 'platforms'"
v-model:value="setting.defaultValue">
<a-select-option v-for="pl in getAvailablePlatforms()" :value="pl.name">{{pl.description}}</a-select-option>
</a-select>
<a-select :placeholder="`请选择${setting.description}`"
@@ -315,17 +316,46 @@ export default defineComponent({
});
// 第二步:将 Map 转换为二维数组(按 groupIndex 升序排序)
groupedParameters.value = Array.from(groupMap.entries())
// 按分组索引从小到大排序(保证分组顺序正确)
const rawGroups = Array.from(groupMap.entries())
.sort((a, b) => a[0] - b[0])
// 只保留分组后的参数数组,丢弃 key
.map(item => item[1]);
// 第三步:展开逗号分隔的 platforms 值 —— 每个平台拆成独立分组
const expandedGroups: Array<ElementParameter[]> = [];
for (const group of rawGroups) {
const platformParam = group.find(p => p.paramKey === 'platforms');
if (platformParam) {
const platformValues = String(platformParam.defaultValue ?? '')
.split(',')
.map(v => v.trim())
.filter(Boolean);
if (platformValues.length > 1) {
// 每个平台值生成独立分组,其余参数保持一致
for (const pv of platformValues) {
const newGroup = JSON.parse(JSON.stringify(group)) as ElementParameter[];
const pp = newGroup.find(p => p.paramKey === 'platforms');
if (pp) pp.defaultValue = pv;
expandedGroups.push(newGroup);
}
continue;
}
}
expandedGroups.push(group);
}
groupedParameters.value = expandedGroups;
multiableParameters.value = multiable === true && groupedParameters.value.length > 0;
};
// 获取平台Tab显示名称优先使用下属平台名称)
// 获取平台Tab显示名称优先取该分组的 platforms 参数值,其次下属平台名称)
const getPlatformTabName = (index: number): string => {
const group = groupedParameters.value[index];
if (group) {
const platformParam = group.find(p => p.paramKey === 'platforms');
if (platformParam?.defaultValue) {
return String(platformParam.defaultValue);
}
}
const sub = subPlatforms.value[index];
if (sub) {
return sub.name || sub.description || `平台 ${index + 1}`;