|
@@ -57,9 +57,9 @@
|
|
class="flex flex-wrap mt-4 w-1/2">
|
|
class="flex flex-wrap mt-4 w-1/2">
|
|
<el-form-item label="推送应用" prop="pushApp" class="w-full">
|
|
<el-form-item label="推送应用" prop="pushApp" class="w-full">
|
|
<el-select v-model="formData.pushApp" placeholder="请选择推送方式" multiple collapse-tags collapse-tags-tooltip
|
|
<el-select v-model="formData.pushApp" placeholder="请选择推送方式" multiple collapse-tags collapse-tags-tooltip
|
|
- :max-collapse-tags="4" filterable remote class="w-full" :value-key="'appId'">
|
|
|
|
|
|
+ :max-collapse-tags="4" filterable remote class="w-full">
|
|
<el-option v-for="item in appOptions" :key="item.value" :label="item.label"
|
|
<el-option v-for="item in appOptions" :key="item.value" :label="item.label"
|
|
- :value="{ id: item.id, appId: item.value }" />
|
|
|
|
|
|
+ :value="item.value" />
|
|
</el-select>
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="主动推送" prop="autoPush" class="w-1/2">
|
|
<el-form-item label="主动推送" prop="autoPush" class="w-1/2">
|
|
@@ -160,7 +160,7 @@ const getAppListData = async () => {
|
|
};
|
|
};
|
|
});
|
|
});
|
|
};
|
|
};
|
|
-
|
|
|
|
|
|
+getAppListData();
|
|
// // 表单校验规则
|
|
// // 表单校验规则
|
|
const dataRules = reactive({
|
|
const dataRules = reactive({
|
|
ruleName: [{ required: true, message: '规则名称不能为空', trigger: 'blur' }],
|
|
ruleName: [{ required: true, message: '规则名称不能为空', trigger: 'blur' }],
|
|
@@ -453,19 +453,21 @@ const handleInputConfirm = (type: string) => {
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
-// 规范化 pushApp 值为 { id, appId } 数组
|
|
|
|
|
|
+// 修改 normalizePushApp 函数
|
|
function normalizePushApp(input: any[]): Array<{ id: any; appId: any }> {
|
|
function normalizePushApp(input: any[]): Array<{ id: any; appId: any }> {
|
|
- if (!Array.isArray(input)) return [];
|
|
|
|
- return input
|
|
|
|
- .map((item: any) => {
|
|
|
|
- if (item && typeof item === 'object' && 'appId' in item && 'id' in item) {
|
|
|
|
- return { id: item.id, appId: item.appId };
|
|
|
|
- }
|
|
|
|
- const appId = typeof item === 'object' && 'value' in item ? item.value : item;
|
|
|
|
- const found = appOptions.value.find((opt: any) => opt.value === appId);
|
|
|
|
- return found ? { id: found.id, appId: found.value } : null;
|
|
|
|
- })
|
|
|
|
- .filter((v: any): v is { id: any; appId: any } => v !== null);
|
|
|
|
|
|
+ if (!Array.isArray(input)) return [];
|
|
|
|
+
|
|
|
|
+ // 如果输入是字符串数组(appId),转换为对象数组
|
|
|
|
+ return input.map((item: any) => {
|
|
|
|
+ if (typeof item === 'string') {
|
|
|
|
+ // 根据 appId 查找完整信息
|
|
|
|
+ const found = appOptions.value.find((opt: any) => opt.value === item);
|
|
|
|
+ return found ? { id: found.id, appId: found.value } : { id: null, appId: item };
|
|
|
|
+ } else if (item && typeof item === 'object' && 'appId' in item) {
|
|
|
|
+ return { id: item.id, appId: item.appId };
|
|
|
|
+ }
|
|
|
|
+ return { id: null, appId: String(item) };
|
|
|
|
+ });
|
|
}
|
|
}
|
|
|
|
|
|
// 根据选择的 pushApp 派生 pushBundle(去重)
|
|
// 根据选择的 pushApp 派生 pushBundle(去重)
|
|
@@ -578,25 +580,33 @@ const formatNum = (value: string | number = 0) => {
|
|
}
|
|
}
|
|
return '';
|
|
return '';
|
|
};
|
|
};
|
|
-
|
|
|
|
|
|
+// 修改 watch 部分
|
|
watch(
|
|
watch(
|
|
- () => props.rowData,
|
|
|
|
- (val) => {
|
|
|
|
- if (val) {
|
|
|
|
- formData.value = {
|
|
|
|
- ...props.rowData,
|
|
|
|
- action: props.rowData?.action || '1',
|
|
|
|
- pushFrequency: formatNum(props.rowData?.pushFrequency),
|
|
|
|
- pushApp: normalizePushApp(props.rowData.pushApp || []),
|
|
|
|
- pushBundle: props.rowData.pushBundle || [],
|
|
|
|
- };
|
|
|
|
- ipData.value = props.rowData.ip || [];
|
|
|
|
- domainData.value = props.rowData.domain || [];
|
|
|
|
- regionData.value = props.rowData.pushAddr || ['全部国家'];
|
|
|
|
- oldUrl.value = props.rowData.pushContent;
|
|
|
|
- getAppListData();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ () => props.rowData,
|
|
|
|
+ async (val) => {
|
|
|
|
+ if (val) {
|
|
|
|
+ // 确保 appOptions 已加载
|
|
|
|
+ if (appOptions.value.length === 0) {
|
|
|
|
+ await getAppListData();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ formData.value = {
|
|
|
|
+ ...val,
|
|
|
|
+ action: val?.action || '1',
|
|
|
|
+ pushFrequency: formatNum(val?.pushFrequency),
|
|
|
|
+ pushApp: val.pushApp ? val.pushApp.map((app: any) => {
|
|
|
|
+ // 如果是对象,提取 appId;如果是字符串,直接使用
|
|
|
|
+ return typeof app === 'object' ? app.appId : app;
|
|
|
|
+ }) : [],
|
|
|
|
+ pushBundle: val.pushBundle || [],
|
|
|
|
+ };
|
|
|
|
+ ipData.value = val.ip || [];
|
|
|
|
+ domainData.value = val.domain || [];
|
|
|
|
+ regionData.value = val.pushAddr || ['全部国家'];
|
|
|
|
+ oldUrl.value = val.pushContent;
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ { deep: false } // 避免深度监听
|
|
);
|
|
);
|
|
</script>
|
|
</script>
|
|
<style lang="scss"></style>
|
|
<style lang="scss"></style>
|