feat: 强化打包配置与服务安全
This commit is contained in:
@@ -5,25 +5,37 @@
|
||||
<div class="config-panel">
|
||||
<h2>打包配置</h2>
|
||||
<div class="form-group">
|
||||
<label>选择 App</label>
|
||||
<select v-model="form.app_id">
|
||||
<label>选择服务器环境</label>
|
||||
<select v-model="selectedServer">
|
||||
<option value="">请选择...</option>
|
||||
<option v-for="(app, id) in apps" :key="id" :value="id">
|
||||
{{ app.server }} - {{ app.name }}
|
||||
<option v-for="server in serverEnvironments" :key="server" :value="server">
|
||||
{{ server }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>选择 App</label>
|
||||
<select v-model="form.app_id" :disabled="!selectedServer">
|
||||
<option value="">{{ selectedServer ? '请选择...' : '请先选择服务器环境' }}</option>
|
||||
<option v-for="[id, app] in filteredApps" :key="id" :value="id">
|
||||
{{ app.name }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>打包类型</label>
|
||||
<select v-model="form.build_type">
|
||||
<option value="Ad_Hoc">Ad_Hoc</option>
|
||||
<option value="App_Store">App_Store</option>
|
||||
<option value="" disabled>请选择...</option>
|
||||
<option v-for="buildType in availableBuildTypes" :key="buildType" :value="buildType">
|
||||
{{ buildType }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>选择 Scheme</label>
|
||||
<select v-model="form.scheme_id">
|
||||
<option v-for="(scheme, id) in schemes" :key="id" :value="id">
|
||||
<option value="" disabled>请选择...</option>
|
||||
<option v-for="[id, scheme] in filteredSchemes" :key="id" :value="id">
|
||||
{{ scheme.displayName || scheme.name }}
|
||||
</option>
|
||||
</select>
|
||||
@@ -138,7 +150,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted, nextTick, watch, onUnmounted, inject } from 'vue'
|
||||
import { computed, ref, onMounted, nextTick, watch, onUnmounted, inject } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const getToken = inject('getToken')
|
||||
@@ -155,10 +167,28 @@ const apps = ref({})
|
||||
const schemes = ref({})
|
||||
const branches = ref(['main'])
|
||||
const tasks = ref([])
|
||||
const selectedServer = ref('')
|
||||
const serverEnvironments = computed(() => {
|
||||
return [...new Set(Object.values(apps.value).map(app => app.server).filter(Boolean))]
|
||||
})
|
||||
const filteredApps = computed(() => {
|
||||
return Object.entries(apps.value).filter(([, app]) => app.server === selectedServer.value)
|
||||
})
|
||||
const selectedApp = computed(() => apps.value[form.value.app_id] || null)
|
||||
const availableBuildTypes = computed(() => {
|
||||
const certificates = selectedApp.value?.certificates || {}
|
||||
return ['Ad_Hoc', 'App_Store'].filter(buildType => Boolean(certificates[buildType]))
|
||||
})
|
||||
const filteredSchemes = computed(() => {
|
||||
const allowedNames = selectedApp.value?.allowed_scheme_names || []
|
||||
return Object.entries(schemes.value).filter(([, scheme]) => {
|
||||
return !allowedNames.length || allowedNames.includes(scheme.name)
|
||||
})
|
||||
})
|
||||
const form = ref({
|
||||
app_id: '',
|
||||
build_type: 'Ad_Hoc',
|
||||
scheme_id: '1',
|
||||
build_type: '',
|
||||
scheme_id: '',
|
||||
obfuscation: false,
|
||||
branch: 'main',
|
||||
})
|
||||
@@ -224,7 +254,9 @@ const connectWs = (taskId) => {
|
||||
completedTask.value = null
|
||||
|
||||
const protocol = location.protocol === 'https:' ? 'wss:' : 'ws:'
|
||||
const ws = new WebSocket(`${protocol}//${location.host}/ws/tasks/${taskId}`)
|
||||
const token = getToken()
|
||||
if (!token) return
|
||||
const ws = new WebSocket(`${protocol}//${location.host}/ws/tasks/${taskId}`, [`jwt.${token}`])
|
||||
activeWs = ws
|
||||
ws.onmessage = (event) => {
|
||||
const msg = JSON.parse(event.data)
|
||||
@@ -258,6 +290,15 @@ watch(() => currentTaskId.value, (newId) => {
|
||||
connectWs(newId)
|
||||
})
|
||||
|
||||
watch(selectedServer, () => {
|
||||
form.value.app_id = ''
|
||||
})
|
||||
|
||||
watch(() => form.value.app_id, () => {
|
||||
form.value.scheme_id = filteredSchemes.value[0]?.[0] || ''
|
||||
form.value.build_type = availableBuildTypes.value[0] || ''
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
if (activeWs) {
|
||||
activeWs.close()
|
||||
|
||||
Reference in New Issue
Block a user