fix(push-config): 移除平台切换开关和服务状态,修复凭据保存不生效问题
- 删除"配置平台"切换 UI(Android/iOS/鸿蒙分段选择器)和推送服务开关
- 删除"服务状态"显示(页面可达即已开通,显示"未开通"逻辑有误)
- 修复厂商凭据保存:前端直接将 PushServiceConfig 作为 body,
服务端 FeatureServiceConfigRequest 期望 pushConfig 字段包裹,
导致 req.pushConfig() 始终为 null,vendors 从未实际写入。
改为发送 { pushConfig: payload } 使服务端正确解析。
- loadData 改为优先选取已启用的 PUSH 服务平台
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
父节点
963bd67bf7
当前提交
af552ad58e
@ -10,17 +10,7 @@
|
|||||||
<el-text class="mono">{{ app.appKey }}</el-text>
|
<el-text class="mono">{{ app.appKey }}</el-text>
|
||||||
<el-button link @click="copy(app.appKey)"><el-icon><CopyDocument /></el-icon></el-button>
|
<el-button link @click="copy(app.appKey)"><el-icon><CopyDocument /></el-icon></el-button>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="服务状态">
|
|
||||||
<el-tag :type="pushEnabled ? 'success' : 'info'">{{ pushEnabled ? '已开通' : '未开通' }}</el-tag>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="配置平台">
|
|
||||||
<el-segmented v-model="selectedPlatform" :options="platformOptions" @change="applySelectedPlatformConfig" />
|
|
||||||
</el-descriptions-item>
|
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
<div class="push-switch-row">
|
|
||||||
<el-switch :model-value="pushEnabled" @change="(val: boolean) => onTogglePushService(val)" />
|
|
||||||
<span class="hint">关闭后,推送注册与推送发送都不会再向该应用开放。</span>
|
|
||||||
</div>
|
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-alert
|
<el-alert
|
||||||
@ -199,10 +189,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, onBeforeUnmount, onMounted, reactive, ref } from 'vue'
|
import { onBeforeUnmount, onMounted, reactive, ref } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { CopyDocument } from '@element-plus/icons-vue'
|
import { CopyDocument } from '@element-plus/icons-vue'
|
||||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import {
|
import {
|
||||||
appApi,
|
appApi,
|
||||||
type App,
|
type App,
|
||||||
@ -262,12 +252,6 @@ const saving = ref(false)
|
|||||||
const isMobile = ref(window.innerWidth < 768)
|
const isMobile = ref(window.innerWidth < 768)
|
||||||
const selectedPlatform = ref<'ANDROID' | 'IOS' | 'HARMONY'>('ANDROID')
|
const selectedPlatform = ref<'ANDROID' | 'IOS' | 'HARMONY'>('ANDROID')
|
||||||
|
|
||||||
const platformOptions = [
|
|
||||||
{ label: 'Android', value: 'ANDROID' },
|
|
||||||
{ label: 'iOS', value: 'IOS' },
|
|
||||||
{ label: '鸿蒙', value: 'HARMONY' },
|
|
||||||
]
|
|
||||||
|
|
||||||
const vendorOptions: Array<{ label: string; value: PushVendorKey }> = [
|
const vendorOptions: Array<{ label: string; value: PushVendorKey }> = [
|
||||||
{ label: '华为', value: 'huawei' },
|
{ label: '华为', value: 'huawei' },
|
||||||
{ label: '小米', value: 'xiaomi' },
|
{ label: '小米', value: 'xiaomi' },
|
||||||
@ -389,10 +373,6 @@ const vendorDefs: VendorDef[] = [
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
const pushEnabled = computed(() => services.value.some(
|
|
||||||
s => s.serviceType === 'PUSH' && s.platform === selectedPlatform.value && s.enabled,
|
|
||||||
))
|
|
||||||
|
|
||||||
function updateViewport() {
|
function updateViewport() {
|
||||||
isMobile.value = window.innerWidth < 768
|
isMobile.value = window.innerWidth < 768
|
||||||
}
|
}
|
||||||
@ -516,9 +496,10 @@ async function loadData() {
|
|||||||
])
|
])
|
||||||
app.value = appRes.data.data
|
app.value = appRes.data.data
|
||||||
services.value = svcRes.data.data
|
services.value = svcRes.data.data
|
||||||
const firstPushService = services.value.find(s => s.serviceType === 'PUSH')
|
const activePushService = services.value.find(s => s.serviceType === 'PUSH' && s.enabled)
|
||||||
if (firstPushService && !services.value.some(s => s.serviceType === 'PUSH' && s.platform === selectedPlatform.value)) {
|
?? services.value.find(s => s.serviceType === 'PUSH')
|
||||||
selectedPlatform.value = firstPushService.platform
|
if (activePushService) {
|
||||||
|
selectedPlatform.value = activePushService.platform as 'ANDROID' | 'IOS' | 'HARMONY'
|
||||||
}
|
}
|
||||||
applySelectedPlatformConfig()
|
applySelectedPlatformConfig()
|
||||||
} finally {
|
} finally {
|
||||||
@ -551,7 +532,7 @@ async function saveConfig() {
|
|||||||
},
|
},
|
||||||
profiles: pushConfig.profiles.map(profile => normalizeProfile(profile)),
|
profiles: pushConfig.profiles.map(profile => normalizeProfile(profile)),
|
||||||
}
|
}
|
||||||
await appApi.updateServiceConfig(app.value.appKey, selectedPlatform.value, 'PUSH', payload)
|
await appApi.updateServiceConfig(app.value.appKey, selectedPlatform.value, 'PUSH', { pushConfig: payload })
|
||||||
ElMessage.success('推送配置已保存')
|
ElMessage.success('推送配置已保存')
|
||||||
await loadData()
|
await loadData()
|
||||||
} catch {
|
} catch {
|
||||||
@ -569,22 +550,6 @@ function removeProfile(index: number) {
|
|||||||
pushConfig.profiles.splice(index, 1)
|
pushConfig.profiles.splice(index, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
async function onTogglePushService(enable: boolean) {
|
|
||||||
if (enable) {
|
|
||||||
ElMessage.info('请通过服务开通流程启用推送服务')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
await ElMessageBox.confirm('确认关闭离线推送服务?', '关闭服务', {
|
|
||||||
type: 'warning',
|
|
||||||
confirmButtonText: '确认关闭',
|
|
||||||
cancelButtonText: '取消',
|
|
||||||
})
|
|
||||||
if (!app.value) return
|
|
||||||
await appApi.toggleService(app.value.appKey, selectedPlatform.value, 'PUSH', false)
|
|
||||||
ElMessage.success('已关闭')
|
|
||||||
await loadData()
|
|
||||||
}
|
|
||||||
|
|
||||||
function reloadConfig() {
|
function reloadConfig() {
|
||||||
return loadData()
|
return loadData()
|
||||||
}
|
}
|
||||||
@ -614,14 +579,6 @@ onBeforeUnmount(() => window.removeEventListener('resize', updateViewport))
|
|||||||
overflow-x: auto;
|
overflow-x: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.push-switch-row {
|
|
||||||
margin-top: 12px;
|
|
||||||
display: flex;
|
|
||||||
gap: 8px;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vendor-grid {
|
.vendor-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
|
||||||
@ -671,11 +628,6 @@ onBeforeUnmount(() => window.removeEventListener('resize', updateViewport))
|
|||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
.push-switch-row {
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: flex-start;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toolbar :deep(.el-button),
|
.toolbar :deep(.el-button),
|
||||||
.profiles-actions :deep(.el-button) {
|
.profiles-actions :deep(.el-button) {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
正在加载...
在新工单中引用
屏蔽一个用户