2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 06:47:20 +08:00
Files
panel/web/src/views/environment/PythonView.vue

93 lines
2.9 KiB
Vue

<script setup lang="ts">
import { useGettext } from 'vue3-gettext'
import pythonApi from '@/api/panel/environment/python'
const route = useRoute()
const slug = route.params.slug as string
const { $gettext } = useGettext()
const mirror = ref('')
const mirrorLoading = ref(false)
// 预设的镜像选项
const mirrorOptions = [
{ label: $gettext('Official (pypi.org)'), value: 'https://pypi.org/simple' },
{ label: $gettext('China - Tsinghua (tuna.tsinghua.edu.cn)'), value: 'https://pypi.tuna.tsinghua.edu.cn/simple' },
{ label: $gettext('China - Alibaba (mirrors.aliyun.com)'), value: 'https://mirrors.aliyun.com/pypi/simple/' },
{ label: $gettext('China - Tencent (mirrors.cloud.tencent.com)'), value: 'https://mirrors.cloud.tencent.com/pypi/simple/' },
{ label: $gettext('China - Douban (pypi.douban.com)'), value: 'https://pypi.douban.com/simple/' },
{ label: $gettext('China - USTC (pypi.mirrors.ustc.edu.cn)'), value: 'https://pypi.mirrors.ustc.edu.cn/simple/' }
]
// 获取当前镜像设置
const fetchMirror = async () => {
mirrorLoading.value = true
useRequest(pythonApi.getMirror(slug))
.onSuccess((res) => {
mirror.value = res.data
})
.onComplete(() => {
mirrorLoading.value = false
})
}
onMounted(() => {
fetchMirror()
})
const handleSetCli = async () => {
useRequest(pythonApi.setCli(slug)).onSuccess(() => {
window.$message.success($gettext('Set successfully'))
})
}
const handleSaveMirror = async () => {
useRequest(pythonApi.setMirror(slug, mirror.value)).onSuccess(() => {
window.$message.success($gettext('Saved successfully'))
})
}
</script>
<template>
<common-page show-footer>
<n-flex vertical>
<n-card>
<template #header>
Python {{ slug }}
</template>
<template #header-extra>
<n-button type="info" @click="handleSetCli">
{{ $gettext('Set as CLI Default Version') }}
</n-button>
</template>
</n-card>
<n-card :title="$gettext('Mirror Settings')">
<n-spin :show="mirrorLoading">
<n-flex vertical>
<n-alert type="info" :show-icon="false">
{{ $gettext('pip mirror is used to configure the Python package source. Using a domestic mirror can speed up package downloads.') }}
</n-alert>
<n-form-item :label="$gettext('Mirror Address')">
<n-select
v-model:value="mirror"
:options="mirrorOptions"
filterable
tag
:placeholder="$gettext('Select or enter mirror address')"
/>
</n-form-item>
<n-flex>
<n-button type="primary" @click="handleSaveMirror">
{{ $gettext('Save') }}
</n-button>
</n-flex>
</n-flex>
</n-spin>
</n-card>
</n-flex>
</common-page>
</template>