jcloud/dashboard/src2/components/marketplace/ChangeAppBranchDialog.vue
2025-04-12 17:39:38 +08:00

103 lines
2.3 KiB
Vue

<template>
<Dialog
v-if="source"
:options="{
title: '更改 ' + app + ' 的 ' + version + ' 分支',
actions: [
{
label: '更改分支',
variant: 'solid',
loading: $resources.changeBranch.loading,
onClick: () => changeBranch()
}
]
}"
v-model="show"
>
<template v-slot:body-content>
<div v-if="$resources.branches.loading" class="mt-2 flex justify-center">
<LoadingText />
</div>
<ErrorMessage
v-else-if="$resources.branches.error"
:message="$resources.branches.error"
/>
<select
v-else-if="$resources.branches.data"
class="form-select block w-full"
v-model="selectedBranch"
>
<option v-for="branch in branchList()" :key="branch">
{{ branch }}
</option>
</select>
</template>
</Dialog>
</template>
<script>
import { toast } from 'vue-sonner';
import { getToastErrorMessage } from '../../utils/toast';
import { DashboardError } from '../../utils/error';
export default {
name: 'ChangeAppBranchDialog',
data() {
return {
show: true,
selectedBranch: null
};
},
props: ['app', 'source', 'version', 'activeBranch'],
emits: ['branch-changed'],
resources: {
branches() {
return {
url: 'jcloud.api.marketplace.branches',
params: {
name: this.source
},
auto: true
};
},
changeBranch() {
return {
url: 'jcloud.api.marketplace.change_branch',
params: {
name: this.app,
source: this.source,
version: this.version,
to_branch: this.selectedBranch
},
validate() {
if (this.selectedBranch == this.app.branch) {
throw new DashboardError('请选择一个不同的分支');
}
}
};
}
},
methods: {
changeBranch() {
toast.promise(this.$resources.changeBranch.submit(), {
loading: '正在更新版本的分支...',
success: () => {
this.show = false;
this.$emit('branch-changed');
return '分支更改成功';
},
error: e => getToastErrorMessage(e)
});
},
branchList() {
if (this.$resources.branches.loading || !this.$resources.branches.data) {
return [];
}
return this.$resources.branches.data.map(d => d.name);
}
},
mounted() {
this.selectedBranch = this.activeBranch;
}
};
</script>