From 91af1a7f1b6f10a6247d87977c5e8a91662444e5 Mon Sep 17 00:00:00 2001 From: ailoooong Date: Thu, 15 Aug 2024 10:52:03 +0800 Subject: [PATCH 01/17] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=8D=8F?= =?UTF-8?q?=E4=BD=9C=E5=B9=B3=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 9 +- src/@types/collaboration.ts | 14 + src/api/api-collaboration.ts | 67 ++++ src/assets/style/theme/table.scss | 4 + src/components/ExternalLink.vue | 2 +- src/components/OTableItemNew.vue | 4 - src/components/Result404.vue | 34 ++ src/components/ResultNoApp.vue | 16 +- src/components/ResultNotFound.vue | 48 +-- src/components/collaboration/CBreadcrumb.vue | 30 ++ src/components/collaboration/Indicators.vue | 192 +++++++++++ .../collaboration/StatusFeedback.vue | 184 ++++++++++ src/components/header/AppHeader.vue | 32 +- src/components/header/HeaderNav.vue | 58 +--- src/data/nav.ts | 14 +- src/data/todo/index.ts | 44 +++ src/router/index.ts | 49 ++- src/shared/axios/index.ts | 10 +- src/shared/login.ts | 2 +- src/stores/user.ts | 4 + src/views/collaboration/TheCollaboration.vue | 324 ++++++++++++++++++ src/views/package/RpmContent.vue | 2 +- src/views/todo/ApprovalTable.vue | 247 +++++++++++++ src/views/todo/TheTodo.vue | 210 ++++++++++++ src/views/todo/TheTodoDetail.vue | 138 ++++++++ 25 files changed, 1623 insertions(+), 115 deletions(-) create mode 100644 src/@types/collaboration.ts create mode 100644 src/api/api-collaboration.ts create mode 100644 src/components/Result404.vue create mode 100644 src/components/collaboration/CBreadcrumb.vue create mode 100644 src/components/collaboration/Indicators.vue create mode 100644 src/components/collaboration/StatusFeedback.vue create mode 100644 src/data/todo/index.ts create mode 100644 src/views/collaboration/TheCollaboration.vue create mode 100644 src/views/todo/ApprovalTable.vue create mode 100644 src/views/todo/TheTodo.vue create mode 100644 src/views/todo/TheTodoDetail.vue diff --git a/components.d.ts b/components.d.ts index 297264d..6559f73 100644 --- a/components.d.ts +++ b/components.d.ts @@ -17,6 +17,7 @@ declare module 'vue' { AppPagination: typeof import('./src/components/AppPagination.vue')['default'] AppSection: typeof import('./src/components/AppSection.vue')['default'] AppTableToggle: typeof import('./src/components/AppTableToggle.vue')['default'] + CBreadcrumb: typeof import('./src/components/collaboration/CBreadcrumb.vue')['default'] ContentWrapper: typeof import('./src/components/ContentWrapper.vue')['default'] DetailAside: typeof import('./src/components/detail/DetailAside.vue')['default'] DetailBasicInfo: typeof import('./src/components/detail/DetailBasicInfo.vue')['default'] @@ -34,14 +35,18 @@ declare module 'vue' { FilterItemSkeleton: typeof import('./src/components/skeleton/FilterItemSkeleton.vue')['default'] FilterOrder: typeof import('./src/components/filter/FilterOrder.vue')['default'] FilterRadio: typeof import('./src/components/filter/FilterRadio.vue')['default'] + HeaderMain: typeof import('./src/components/header/HeaderMain.vue')['default'] HeaderNav: typeof import('./src/components/header/HeaderNav.vue')['default'] HeaderTheme: typeof import('./src/components/header/HeaderTheme.vue')['default'] HomeSkeleton: typeof import('./src/components/skeleton/HomeSkeleton.vue')['default'] + Indicators: typeof import('./src/components/collaboration/Indicators.vue')['default'] + NavTab: typeof import('./src/components/NavTab.vue')['default'] OCardItem: typeof import('./src/components/OCardItem.vue')['default'] OCardItemSkeleton: typeof import('./src/components/skeleton/OCardItemSkeleton.vue')['default'] OCodeCopy: typeof import('./src/components/OCodeCopy.vue')['default'] OCodeDown: typeof import('./src/components/OCodeDown.vue')['default'] OTableItemNew: typeof import('./src/components/OTableItemNew.vue')['default'] + Result404: typeof import('./src/components/Result404.vue')['default'] ResultNoApp: typeof import('./src/components/ResultNoApp.vue')['default'] ResultNotFound: typeof import('./src/components/ResultNotFound.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] @@ -49,8 +54,6 @@ declare module 'vue' { SearchFilter: typeof import('./src/components/search/SearchFilter.vue')['default'] SearchRecommend: typeof import('./src/components/search/SearchRecommend.vue')['default'] SearchTab: typeof import('./src/components/search/SearchTab.vue')['default'] - } - export interface ComponentCustomProperties { - vLoading: typeof import('element-plus/es')['ElLoadingDirective'] + StatusFeedback: typeof import('./src/components/collaboration/StatusFeedback.vue')['default'] } } diff --git a/src/@types/collaboration.ts b/src/@types/collaboration.ts new file mode 100644 index 0000000..b0ece62 --- /dev/null +++ b/src/@types/collaboration.ts @@ -0,0 +1,14 @@ +export interface CollaborationT { + name: string; + pageSize?: number; + pageNum?: number; +} + +export interface AdminAppryT extends CollaborationT { + applyId?: number; + applyStatus?: string; + repo?: string; + metric?: string; + timeOrder?: string; +} + diff --git a/src/api/api-collaboration.ts b/src/api/api-collaboration.ts new file mode 100644 index 0000000..92ed797 --- /dev/null +++ b/src/api/api-collaboration.ts @@ -0,0 +1,67 @@ +import { request } from '@/shared/axios'; +import type { AxiosResponse } from '@/shared/axios'; +import type { AdminAppryT } from '@/@types/collaboration' + +// maintainer权限 +export function getMaintainerPermission() { + const url = `/server/collaboration/maintainer/permission`; + return request.get(url).then((res: AxiosResponse) => res?.data); +} + +// admin权限 +export function getAdminPermission() { + const url = `/server/collaboration/admin/permission`; + return request.get(url).then((res: AxiosResponse) => res?.data); +} + +// 软件维护详情 maintainer +export function getMaintainerRepos() { + const url = `/server/collaboration/maintainer/user/repos`; + return request.get(url).then((res: AxiosResponse) => res?.data); +} + +// 软件维护详情 admin +export function getAdminRepos() { + const url = `/server/collaboration/admin/user/repos`; + return request.get(url).then((res: AxiosResponse) => res?.data); +} + + +// 待我审批 +export function getAdminApply(params: AdminAppryT) { + const url = `/server/collaboration/admin/query/apply`; + return request.get(url, { params }).then((res: AxiosResponse) => res?.data); +} +// 审批 +export function getAdminRecords(id: number) { + const url = `/server/collaboration/admin/query/records?applyId=${id}`; + return request.get(url).then((res: AxiosResponse) => res?.data); +} + + + +// 我的申请 +export function getMaintainerApply(params: AdminAppryT) { + const url = `/server/collaboration/maintainer/query/apply`; + return request.get(url, { params }).then((res: AxiosResponse) => res?.data); +} + +// 申请撤销 +export function getMaintainerRevoke(id: number) { + const url = `/server/collaboration/maintainer/revoke`; + return request.post(url, { applyId: id }).then((res: AxiosResponse) => res?.data); +} + + +interface FeedbackT { + repo: string; + metric: string; + metricStatus: string; + description: string; + applyStatus: string; +} + +export function getApplyFeedback(params: FeedbackT) { + const url = `/server/collaboration/maintainer/apply`; + return request.post(url, { params }).then((res: AxiosResponse) => res?.data); +} \ No newline at end of file diff --git a/src/assets/style/theme/table.scss b/src/assets/style/theme/table.scss index 88a4cea..f624db0 100644 --- a/src/assets/style/theme/table.scss +++ b/src/assets/style/theme/table.scss @@ -1,4 +1,8 @@ .o-table { + --table-edge-padding: 32px; + --table-cell-padding: 16px 20px; + --table-head-cell-padding: 12px 20px; + --table-cell-height: 80px; --table-head-bg: var(--o-color-control3-light); --table-color: var(--o-color-info1); th { diff --git a/src/components/ExternalLink.vue b/src/components/ExternalLink.vue index 423a70b..d0f7cd2 100644 --- a/src/components/ExternalLink.vue +++ b/src/components/ExternalLink.vue @@ -29,7 +29,7 @@ const onChange = () => {