搜索结果列表页面开发
This commit is contained in:
166
src/components/EventAdapter/index.vue
Normal file
166
src/components/EventAdapter/index.vue
Normal file
@@ -0,0 +1,166 @@
|
||||
<!-- 项目事件 -->
|
||||
<script setup lang="ts">
|
||||
import { toRefs } from 'vue';
|
||||
interface Event {
|
||||
eventData:any;
|
||||
};
|
||||
const visibilityMap = new Map([
|
||||
[0, '私有'],
|
||||
[20, '公开']
|
||||
]);
|
||||
const LockStatus = (state:any) => {
|
||||
return state ? '锁定' : '未锁定';
|
||||
};
|
||||
const DeleteStatus = (state:any) => {
|
||||
return state ? '已删除' : '未删除';
|
||||
};
|
||||
const switchArr = (arr:any[]) => {
|
||||
return arr[0] && !arr[1] ? '关闭' : '开启';
|
||||
};
|
||||
const props = defineProps<Event>();
|
||||
const { title } = toRefs(props.eventData);
|
||||
title.value = typeof title.value === 'string' && /^[\[\{/]/.test(title.value) ? JSON.parse(title.value) : title.value;
|
||||
</script>
|
||||
<template>
|
||||
<div class="detail">
|
||||
<div v-if="eventData.target_type==='MergeRequest'" class="merge">
|
||||
<slot name="mergeRequest" :dataRaw="eventData">
|
||||
<div class="text-xs mb-1"><span>源分支:</span><span>{{eventData.merge_request_info.source_branch}}</span></div>
|
||||
<div class="text-xs mb-1"><span>目标分支:</span><span>{{ eventData.merge_request_info.target_branch }}</span></div>
|
||||
<div class="flex items-center text-xs" v-if="eventData.target_title">
|
||||
<Icon name="gt-tooltip" size="14px" class="mr-1 my-[2px]"></Icon>
|
||||
<GLink :href="eventData._links?.action_type">
|
||||
<span class="break-all">{{ eventData.target_title }}</span>
|
||||
</GLink>
|
||||
</div>
|
||||
</slot>
|
||||
</div>
|
||||
<div v-else-if="eventData.target_type==='Issue'" class="issue">
|
||||
<slot name="Issue" :dataRaw="eventData">
|
||||
<div class="text-xs">
|
||||
<GLink :href="eventData._links?eventData._links.action_type:'#'">
|
||||
<span class="break-all">{{ eventData.target_title }}</span>
|
||||
</GLink>
|
||||
</div>
|
||||
</slot>
|
||||
</div>
|
||||
<div v-else-if="eventData.target_type==='Label'" class="label">
|
||||
<slot name="Label" :dataRaw="eventData">
|
||||
<div class="flex items-center text-xs">
|
||||
<Icon name="icon-add-label" size="14px" class="mr-1 my-[2px]"></Icon>
|
||||
<GLink :href="eventData._links?eventData._links.action_type:'#'">
|
||||
<span class="break-all">{{ eventData.target_title }}</span>
|
||||
</GLink>
|
||||
</div>
|
||||
</slot>
|
||||
</div>
|
||||
<div v-else-if="eventData.target_type==='Note'" class="comment">
|
||||
<slot name="Note" :dataRaw="eventData">
|
||||
<template v-if="eventData.note">
|
||||
<div>
|
||||
<GLink :href="eventData._links?eventData._links.action_type:'#'">
|
||||
<span>{{ eventData.note.body }}</span>
|
||||
</GLink>
|
||||
</div>
|
||||
</template>
|
||||
<div class="flex items-center text-xs">
|
||||
<Icon name="gt-tooltip" size="14px" class="mr-1 my-[2px]"></Icon>
|
||||
<span class="break-all">{{ eventData.target_title }}</span>
|
||||
</div>
|
||||
</slot>
|
||||
</div>
|
||||
<div v-else-if="eventData.target_type==='Milestone'" class="miles-stone">
|
||||
<slot name="Milestone" :dataRaw="eventData">
|
||||
<div class="flex items-center text-xs">
|
||||
<Icon name="gt-milestone" size="14px" class="mr-1 my-[2px]"></Icon>
|
||||
<GLink :href="eventData._links?.action_type"><span class="font-[600]">{{ eventData.target_title }}</span></GLink>
|
||||
</div>
|
||||
</slot>
|
||||
</div>
|
||||
<div v-else-if="eventData.target_type==='Project'" class="repo">
|
||||
<slot name="Project" :dataRaw="eventData">
|
||||
<template v-if="title">
|
||||
<div v-if="title.name" class="text-xs break-all"><span>项目名称</span><span class="mx-1">{{title.name[0]}}</span>改为<span class="mx-1">{{title.name[1]}}</span></div>
|
||||
<div v-if="title.path" class="text-xs"><span>项目路径</span><span class="mx-1">{{title.path[0]}}</span>改为<span class="mx-1">{{title.path[1]}}</span></div>
|
||||
<div v-if="title.description" class="text-xs"><span>项目描述</span><span class="mx-1">{{title.description[0]}}</span>改为<span class="mx-1">{{title.description[1]}}</span></div>
|
||||
<div v-if="title.namespace" class="text-xs"><span>项目所属</span><span class="mx-1">{{title.namespace[0]}}</span>改为<span class="mx-1">{{title.namespace[1]}}</span></div>
|
||||
<div v-if="title.archived" class="text-xs"><span>项目锁定</span><span class="mx-1">{{LockStatus(title.archived[0])}}</span>改为<span class="mx-1">{{LockStatus(title.archived[1])}}</span></div>
|
||||
<div v-if="title.pending_delete" class="text-xs"><span>删除状态</span><span class="mx-1">{{DeleteStatus(title.pending_delete[0])}}</span>改为<span class="mx-1">{{DeleteStatus(title.pending_delete[1])}}</span></div>
|
||||
<div v-if="title.visibility_level" class="text-xs">
|
||||
<span>项目权限</span>
|
||||
<span class="mx-1">{{visibilityMap.get(title.visibility_level[0])}}</span>改为
|
||||
<span class="mx-1">{{visibilityMap.get(title.visibility_level[1])}}</span>
|
||||
</div>
|
||||
<div v-if="title.lfs_enabled" class="text-xs"><span>{{ switchArr(title.lfs_enabled) }}</span><span>Git LFS</span></div>
|
||||
</template>
|
||||
</slot>
|
||||
</div>
|
||||
<div v-else-if="eventData.target_type==='Group'" class="org">
|
||||
<slot name="Group" :dataRaw="eventData">
|
||||
<div v-if="eventData.group">
|
||||
<div class="flex items-center text-xs">
|
||||
<GAvatar :src="eventData.group.avatar_url" :name="eventData.group.name" :width="24" :height="24" :is_round="false" class="cursor-pointer mr-2"></GAvatar>
|
||||
<div class="break-all">
|
||||
<GLink :href="eventData._links?.group">
|
||||
<span class="break-all">{{ eventData.group.name }}</span>
|
||||
</GLink>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="eventData.group.description" class="flex items-center text-xs mt-2">
|
||||
<span class="break-all text-CG500">{{ eventData.group.description }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</slot>
|
||||
</div>
|
||||
<div v-else-if="eventData.target_type===null" class="other">
|
||||
<template v-if="eventData.action_name ==='pushed to'">
|
||||
<div class="text-xs"><span>目标分支:</span><span class="break-all">{{eventData.push_data.ref }}</span></div>
|
||||
<div class="flex items-center text-xs">
|
||||
<Icon name="gt-tooltip" size="14px" class="mr-1 my-[2px]"></Icon>
|
||||
<span class="break-all">{{ eventData.push_data.commit_title }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="(eventData.action_name ==='pushed new'||eventData.action_name ==='deleted')&&eventData.push_data">
|
||||
<div v-if="eventData.push_data.ref_type==='branch'">
|
||||
<div class="text-xs"><span>分支名称:</span><span class="break-all">{{eventData.push_data.ref}}</span></div>
|
||||
<div class="flex items-center text-xs" v-if="eventData.push_data.commit_title">
|
||||
<Icon name="gt-tooltip" size="14px" class="mr-1 my-[2px]"></Icon>
|
||||
<span class="break-all">{{ eventData.push_data.commit_title }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="eventData.push_data.ref_type==='tag'">
|
||||
<div class="text-xs mb-1"><span>Tag名称:</span><span class="break-all">{{eventData.push_data.ref}}</span></div>
|
||||
<div class="flex items-center text-xs" v-if="eventData.push_data.commit_title">
|
||||
<Icon name="gt-tooltip" size="14px" class="mr-1 my-[2px]"></Icon>
|
||||
<span class="break-all">{{ eventData.push_data.commit_title }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="eventData.action_name ==='created'">
|
||||
<div class="text-xs">
|
||||
<span>创建了项目</span>
|
||||
<GLink :href="eventData._links?.project"><span class="break-all">{{eventData.project_name}}</span></GLink>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="eventData.action_name ==='batch delete branches'">批量删除了分支
|
||||
</template>
|
||||
<template v-if="eventData.action_name ==='imported'||eventData.action_name ==='left'||eventData.action_name ==='joined'">
|
||||
<div class="text-xs" v-if="eventData.project_name"><span>项目名称:</span><span class="break-all">{{eventData.project_name}}</span></div>
|
||||
<div class="text-xs" v-else><span>组织名称:</span><span class="break-all">{{eventData.project_name}}</span></div>
|
||||
</template>
|
||||
<template v-if="eventData.action_name ==='change member'&&eventData.title">
|
||||
<div class="text-xs"><span>操作人:</span><span>{{eventData.title.username.join(",")}}</span></div>
|
||||
<div class="flex items-center text-xs" v-if="eventData.title.change">
|
||||
<Icon name="gt-tooltip" size="14px" class="mr-1 my-[2px]"></Icon>
|
||||
<span class="break-all">{{ eventData.title.change }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="eventData.action_name ==='removed due to membership expiration from'">
|
||||
<div><span class="break-all">由于有效期到期,{{eventData.author_username}}已自动退出{{ eventData.project_name }}</span></div>
|
||||
</template>
|
||||
</div>
|
||||
<!-- 其它的类型 -->
|
||||
<slot name="expandType" :dataRaw="eventData"></slot>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user