Files
Situation-Awareness-Platfor…/src/views/Mobile/Repo/Merge/components/DetailCheck.vue
2025-03-12 18:41:20 +08:00

146 lines
4.3 KiB
Vue

<template>
<!-- <div class="merge-check g-card">
<merge-check
v-if="!mergeSetting.wip_passed"
key="wip"
:type="config.wip.type"
:status="config.wip.status"
class="merge-check-item"
>
</merge-check>
<merge-check
v-if="mergeSetting.need_resolve_passed"
key="comment"
:type="config.comment.type"
:status="config.comment.status"
class="merge-check-item"
>
</merge-check>
<merge-check
v-if="mergeSetting.required_reviewers_count > 0"
key="reviewer"
:type="config.reviewer.type"
:status="config.reviewer.status"
:need-pass="config.reviewer.needPass"
:has-pass="config.reviewer.hasPass"
class="merge-check-item"
>
</merge-check>
</div> -->
<DataPanel :loading="loading" :empty="checkEmpty" skeleton="true">
<merge-check
v-if="!mergeSetting.wip_passed"
key="wip"
:type="config.wip.type"
:status="config.wip.status"
class="merge-check-item"
>
</merge-check>
<merge-check
v-if="mergeSetting.need_resolve_passed"
key="comment"
:type="config.comment.type"
:status="config.comment.status"
class="merge-check-item"
>
</merge-check>
<merge-check
v-if="mergeSetting.required_reviewers_count > 0"
key="reviewer"
:type="config.reviewer.type"
:status="config.reviewer.status"
:need-pass="config.reviewer.needPass"
:has-pass="config.reviewer.hasPass"
class="merge-check-item"
>
</merge-check>
</DataPanel>
</template>
<script setup lang="ts">
import { computed, ref, toValue, watch, reactive, onMounted } from 'vue';
import { useRepoId } from '@/utils/hooks/useRepoId';
import { useRouter } from 'vue-router';
import MergeCheck from '@/components/MergeCheck/index.vue';
import { mergeableState, getReviewers } from '@/api/merge';
const router = useRouter();
const { repoId } = useRepoId();
const iid = router.currentRoute.value.params.mergeId;
const mergeSetting = reactive({
reviewers_passed: false, // 是否满足最低评审人数
resolve_passed: false, // 是否已解决所有评审问题
wip_passed: true, // wip是否通过
required_reviewers_count: 0, // 最低评审人数量
need_resolve_passed: false // 是否需要解决所有评审问题才能合并
// need_pipeline_succeeds: false // 是否需要流水线成功才能合并
});
// 检查记录是否为空
const checkEmpty = computed(() => {
return mergeSetting.wip_passed && mergeSetting.required_reviewers_count <= 0 && !mergeSetting.need_resolve_passed;
});
const config = reactive({
wip: {},
comment: {},
reviewer: {}
});
/* 根据mr状态设置显示哪些检查门禁 */
const checkConfig = () => {
if (!mergeSetting.wip_passed) {
config.wip = {
type: 'wip',
status: 'waiting'
};
}
if (mergeSetting.need_resolve_passed) {
config.comment = {
type: 'comment',
status: mergeSetting.resolve_passed ? 'success' : 'fail'
};
}
config.reviewer.type = 'reviewer';
config.reviewer.status = mergeSetting.reviewers_passed ? 'success' : 'fail';
config.reviewer.link = { name: 'repoSettingMerge' };
return config;
};
const loading = ref(false);
loading.value = true;
const getMergeSetting = () => {
const params = {
repoId: repoId.value,
iid
};
getReviewers(params).then((res) => {
const data = res.data;
config.reviewer.hasPass = data?.count?.total_reviewed_count;
});
mergeableState(params).then((res) => {
const data = res.data;
mergeSetting.reviewers_passed = data.approval_reviewers_required_passed;
mergeSetting.resolve_passed = data.resolve_discussion_passed;
mergeSetting.wip_passed = data.work_in_progress_passed;
mergeSetting.need_resolve_passed = data?.merge_request_switch?.only_allow_merge_if_all_discussions_are_resolved;
mergeSetting.required_reviewers_count = data?.merge_request_switch?.approval_required_reviewers_count;
config.reviewer.needPass = mergeSetting.required_reviewers_count;
checkConfig();
}).catch((err) => { console.error(err); }).finally(() => {
loading.value = false;
});
};
getMergeSetting();
</script>
<style lang="scss" scoped>
.merge-check {
&-item {
border-bottom: 1px solid var(--color-G300);
&:last-of-type {
border-bottom: 0;
}
}
}
</style>