|
@@ -4,12 +4,17 @@
|
|
|
<div class="flex items-start">
|
|
|
<label class="w-[65px] leading-8 text-right">地区</label>
|
|
|
<div class="flex gap-2 ml-2 flex-wrap w-57vw]">
|
|
|
- <el-tag v-for="(tag, index) in regionData" :key="index" size="large" closable
|
|
|
- :disable-transitions="false" @close="handleClose(tag, 'region')">
|
|
|
+ <el-tag
|
|
|
+ v-for="(tag, index) in regionData"
|
|
|
+ :key="index"
|
|
|
+ size="large"
|
|
|
+ closable
|
|
|
+ :disable-transitions="false"
|
|
|
+ @close="handleClose(tag, 'region')"
|
|
|
+ >
|
|
|
{{ tag == 'All' ? '全部国家' : tag }}
|
|
|
</el-tag>
|
|
|
- <ChineseRegionSelector v-if="regionInputVisible" v-model="regionData" showAll
|
|
|
- @update:modelValue="handleRegionDataUpdate" />
|
|
|
+ <ChineseRegionSelector v-if="regionInputVisible" v-model="regionData" showAll @update:modelValue="handleRegionDataUpdate" />
|
|
|
<el-button v-else class="button-new-tag" @click="showRegionInput"> 添加地区</el-button>
|
|
|
<!-- 注册隐藏的表单项以启用校验 -->
|
|
|
<el-form-item prop="region" style="display: none"></el-form-item>
|
|
@@ -53,13 +58,20 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div> -->
|
|
|
- <el-form ref="ruleFormRef" :model="formData" :rules="dataRules" label-width="90px"
|
|
|
- class="flex flex-wrap mt-4 w-1/2">
|
|
|
+ <el-form ref="ruleFormRef" :model="formData" :rules="dataRules" label-width="90px" class="flex flex-wrap mt-4 w-1/2">
|
|
|
<el-form-item label="推送应用" prop="pushApp" class="w-full">
|
|
|
- <el-select v-model="formData.pushApp" placeholder="请选择推送方式" multiple collapse-tags collapse-tags-tooltip
|
|
|
- :max-collapse-tags="4" filterable remote class="w-full">
|
|
|
- <el-option v-for="item in appOptions" :key="item.value" :label="item.label"
|
|
|
- :value="item.value" />
|
|
|
+ <el-select
|
|
|
+ v-model="formData.pushApp"
|
|
|
+ placeholder="请选择推送方式"
|
|
|
+ multiple
|
|
|
+ collapse-tags
|
|
|
+ collapse-tags-tooltip
|
|
|
+ :max-collapse-tags="4"
|
|
|
+ filterable
|
|
|
+ remote
|
|
|
+ class="w-full"
|
|
|
+ >
|
|
|
+ <el-option v-for="item in appOptions" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="主动推送" prop="autoPush" class="w-1/2">
|
|
@@ -67,8 +79,7 @@
|
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item label="推送方式" prop="action" class="w-1/2">
|
|
|
- <JDictSelect v-model:value="formData.action" placeholder="请选择推送方式" dictType="pushMode"
|
|
|
- :styleClass="'w-full'" />
|
|
|
+ <JDictSelect v-model:value="formData.action" placeholder="请选择推送方式" dictType="pushMode" :styleClass="'w-full'" />
|
|
|
</el-form-item>
|
|
|
|
|
|
<!-- <el-form-item label="推送频率" prop="pushFrequency" class="w-1/2">
|
|
@@ -92,8 +103,7 @@
|
|
|
<el-input v-model="formData.pushContent" type="text" placeholder="请输入推送内容" />
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
- <el-button type="primary" class="ml-5 mt-4 w-[80px]" @click="onSubmit"
|
|
|
- :disabled="loading">{{ t('common.saveBtn') }}</el-button>
|
|
|
+ <el-button type="primary" class="ml-5 mt-4 w-[80px]" @click="onSubmit" :disabled="loading">{{ t('common.saveBtn') }}</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -113,7 +123,7 @@ const props = defineProps({
|
|
|
},
|
|
|
rowData: {
|
|
|
type: Object,
|
|
|
- default: () => { },
|
|
|
+ default: () => {},
|
|
|
},
|
|
|
});
|
|
|
|
|
@@ -145,22 +155,22 @@ const formData = ref<any>({
|
|
|
delayPush: '',
|
|
|
autoPush: false,
|
|
|
pushApp: [],
|
|
|
- pushBundle: []
|
|
|
+ pushBundle: [],
|
|
|
});
|
|
|
const appOptions = ref<any[]>([]);
|
|
|
const getAppListData = async () => {
|
|
|
const res = await getAppList();
|
|
|
// console.log(res);
|
|
|
-
|
|
|
+
|
|
|
const data = res.data;
|
|
|
console.log(data);
|
|
|
-
|
|
|
+
|
|
|
appOptions.value = data.map((item: any, index: number) => {
|
|
|
return {
|
|
|
label: item.appName,
|
|
|
value: item.appId,
|
|
|
id: item.id,
|
|
|
- bundle: item.bundle || ''
|
|
|
+ bundle: item.bundle || '',
|
|
|
};
|
|
|
});
|
|
|
};
|
|
@@ -459,19 +469,19 @@ const handleInputConfirm = (type: string) => {
|
|
|
|
|
|
// 修改 normalizePushApp 函数
|
|
|
function normalizePushApp(input: any[]): Array<{ id: any; appId: any }> {
|
|
|
- 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) };
|
|
|
- });
|
|
|
+ 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(去重)
|
|
@@ -493,11 +503,7 @@ const handleRegionDataUpdate = (newRegionData: any[]) => {
|
|
|
.map((item: any) => {
|
|
|
if (item || item == '全部国家') {
|
|
|
return (
|
|
|
- (item?.city
|
|
|
- ? `${item.country} - ${item.state} - ${item.city}`
|
|
|
- : item?.state
|
|
|
- ? `${item.country} - ${item.state}`
|
|
|
- : item?.country) || item
|
|
|
+ (item?.city ? `${item.country} - ${item.state} - ${item.city}` : item?.state ? `${item.country} - ${item.state}` : item?.country) || item
|
|
|
);
|
|
|
}
|
|
|
return false;
|
|
@@ -551,11 +557,9 @@ const onSubmit = async () => {
|
|
|
pushContent: getpushContent(),
|
|
|
pushType: false,
|
|
|
pushFrequency: pushFrequency.toString(),
|
|
|
- pushApp: normalizePushApp(formData.value.pushApp),
|
|
|
pushBundle: derivePushBundle(normalizePushApp(formData.value.pushApp)),
|
|
|
};
|
|
|
|
|
|
-
|
|
|
if (!formData.value.pushContent) {
|
|
|
return useMessage().error(formData.value.pushType ? '推送图片不能为空' : '推送内容不能为空');
|
|
|
}
|
|
@@ -564,6 +568,7 @@ const onSubmit = async () => {
|
|
|
|
|
|
await saveRule({
|
|
|
...formData.value,
|
|
|
+ pushApp: normalizePushApp(formData.value.pushApp),
|
|
|
pushFrequency: pushFrequency.toString(),
|
|
|
});
|
|
|
useMessage().success(t('common.editSuccessText'));
|
|
@@ -586,31 +591,33 @@ const formatNum = (value: string | number = 0) => {
|
|
|
};
|
|
|
// 修改 watch 部分
|
|
|
watch(
|
|
|
- () => 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 } // 避免深度监听
|
|
|
+ () => 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>
|
|
|
<style lang="scss"></style>
|