-
- {{ title }}
-
-
-
+
+ {{ title }}
+
+
+
+
+
+
-
- 部分欧拉镜像可能未安装config-manager 请手动执行
- dnf install dnf-command(config-manager)
+
+
软件包大小:{{ item.size }}
+
+
+
+
{{ sub.label }}
+
+
+
+
+
+
-
-
-
-
+
+
+
+
diff --git a/src/components/filter/FilterRadio.vue b/src/components/filter/FilterRadio.vue
index b8661d87f7f2131eac4916e4390b1e3f67fe16ec..8938d0542eb8f001458109ab4136696634ff6a5e 100644
--- a/src/components/filter/FilterRadio.vue
+++ b/src/components/filter/FilterRadio.vue
@@ -21,7 +21,7 @@ const actualOptions = computed(() => {
return [];
}
return props.options.map((option) => {
- if (typeof option ==='string') {
+ if (typeof option === 'string') {
return { label: option, value: option };
}
return option;
diff --git a/src/components/GlobalFeedback.vue b/src/components/globalFeedback/GlobalFeedback.vue
similarity index 76%
rename from src/components/GlobalFeedback.vue
rename to src/components/globalFeedback/GlobalFeedback.vue
index 1945f6cad777d8da2ade5efd5a37072e84e80705..e23ff06c86962b9b0e24e3a4ed5acfd845ee2c6e 100644
--- a/src/components/GlobalFeedback.vue
+++ b/src/components/globalFeedback/GlobalFeedback.vue
@@ -1,15 +1,13 @@
+
+
+
+
+
+ 历史反馈信息内容更新有延迟,请耐心等待
+
+
+
-
+
-
-
- {{ feedbackTitle }}
-
-
-
-
- 历史反馈信息内容更新有延迟,请耐心等待
-
-
+
+
+
+
+
+ 您对
+ 软件中心
+ 的整体满意度如何?
+
+ 历史反馈信息
+
-
+
- 提交反馈
+ 提交
@@ -339,7 +365,14 @@ onUnmounted(() => window.sessionStorage.removeItem(STORAGE_KEY));
-
{{ bottomLinkContent }}
+
{{ bottomLinkContent }}
+
+
+ 登录
+
+ 查看历史反馈信息
+
+
@@ -364,6 +397,7 @@ onUnmounted(() => window.sessionStorage.removeItem(STORAGE_KEY));
align-items: center;
box-shadow: var(--o-shadow-3);
z-index: 1000;
+ border-radius: 4px;
cursor: pointer;
position: fixed;
@@ -380,6 +414,11 @@ onUnmounted(() => window.sessionStorage.removeItem(STORAGE_KEY));
height: 1px;
background-color: transparent;
}
+
+ color: var(--o-color-control3);
+ @include hover {
+ color: var(--o-color-primary1);
+ }
}
.global-feedback {
@@ -393,6 +432,23 @@ onUnmounted(() => window.sessionStorage.removeItem(STORAGE_KEY));
padding-bottom: 0;
color: var(--o-color-info2);
border: none;
+ border-radius: 4px;
+
+ .help-icon {
+ margin-left: 10px;
+ font-size: 20px;
+ cursor: pointer;
+ color: var(--o-color-control3);
+
+ @include hover {
+ color: var(--o-color-primary1);
+ }
+
+ svg {
+ width: 1em;
+ height: 1em;
+ }
+ }
.title {
font-weight: 500;
@@ -400,17 +456,28 @@ onUnmounted(() => window.sessionStorage.removeItem(STORAGE_KEY));
align-items: center;
@include tip1;
- .help-icon {
- width: 16px;
- margin-left: 10px;
+ .title-name {
+ font-weight: 600;
}
}
.close-icon {
position: absolute;
- top: 12px;
+ top: 8px;
right: 12px;
cursor: pointer;
+ transition: all var(--o-duration-m1) var(--o-easing-standard-in);
+ font-size: 20px;
+
+ svg {
+ width: 1em;
+ height: 1em;
+ }
+
+ @include hover {
+ transform: rotate(180deg);
+ color: var(--o-color-primary1);
+ }
}
.bottom-link {
@@ -496,13 +563,14 @@ onUnmounted(() => window.sessionStorage.removeItem(STORAGE_KEY));
flex-shrink: 0;
@include tip1;
- :deep(.o-link-label) {
+ :deep(.o-link-main) {
display: flex;
align-items: center;
gap: 8px;
svg {
- width: 16px;
+ width: 1em;
+ height: 1em;
margin-right: 4px;
}
}
diff --git a/src/components/globalFeedback/ScoreSlider.vue b/src/components/globalFeedback/ScoreSlider.vue
new file mode 100644
index 0000000000000000000000000000000000000000..587db842fc829d42b54e4ff10f1eb5e10b4a7e07
--- /dev/null
+++ b/src/components/globalFeedback/ScoreSlider.vue
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+ 0-不满意
+ 10-非常满意
+
+
+
+
+
diff --git a/src/components/header/AppHeader.vue b/src/components/header/AppHeader.vue
index 583f4477c12ea1ac366709eef84ada2bb6609068..4077094e5c32d19e5766e6dfa291f41ecfe05b9a 100644
--- a/src/components/header/AppHeader.vue
+++ b/src/components/header/AppHeader.vue
@@ -188,7 +188,7 @@ watch(
position: fixed;
top: 0;
left: 0;
- z-index: 1010;
+ z-index: 999;
background: var(--o-color-fill2);
box-shadow: var(--o-shadow-1);
min-width: 1440px;
diff --git a/src/components/header/HeaderNav.vue b/src/components/header/HeaderNav.vue
index cfb3fe75b4d6678c1bf30af14bf141b8e33e955b..31d4d072fa01534386b58a91510643df24e7957b 100644
--- a/src/components/header/HeaderNav.vue
+++ b/src/components/header/HeaderNav.vue
@@ -40,6 +40,11 @@ const onMouseLeave = () => {
const softwareList = ['rpm', 'image', 'oepkg', 'conda'];
const selectedIndex = computed(() => {
let name = route.name?.toString();
+ // 判断是否是详情页
+ if (name?.includes('-detail')) {
+ name = name?.split('-')[0];
+ }
+
if (softwareList.includes(name)) {
name = 'list';
}
diff --git a/src/composables/useDetailPageAnalytics.ts b/src/composables/useDetailPageAnalytics.ts
index 8f2a172d5ac5ded93513f4b53b6c8055662bae8f..99e49281a0538043c823cac57371cf9d8315779b 100644
--- a/src/composables/useDetailPageAnalytics.ts
+++ b/src/composables/useDetailPageAnalytics.ts
@@ -1,8 +1,8 @@
-import type { AppInfoT, DetailItemT } from '@/@types/app';
+import type { DetailItemT } from '@/@types/app';
import { oaReport } from '@/shared/analytics';
import { computed, unref, type Directive, type MaybeRef, type Ref } from 'vue';
-const useDetailPageAnalytics = (appData: Ref
, basicInfo: Ref, tab?: MaybeRef) => {
+const useDetailPageAnalytics = (appData: Ref, basicInfo: Ref, tab?: MaybeRef) => {
const archAndOs = computed(() => ({
architecture: basicInfo.value.find((item) => item.name === '架构')?.value,
os_version: basicInfo.value.find((item) => item.name === '版本支持情况')?.value,
diff --git a/src/data/detail/index.ts b/src/data/detail/index.ts
index 2ef8fd16cac249a3540c0f0f2397756a4bca129e..b028f1ebb8bcbd3577a52a3a6f06673b98b98c70 100644
--- a/src/data/detail/index.ts
+++ b/src/data/detail/index.ts
@@ -1,7 +1,7 @@
// 应用镜像tab分类
export const tagList = [
- { lable: '概览', value: 'overview' },
- { lable: 'Tags', value: 'tags' },
+ { lable: '使用描述', value: 'overview' },
+ { lable: '版本信息', value: 'tags' },
];
// RPM更多信息表头
diff --git a/src/i18n/upstream/upstream-en.ts b/src/i18n/upstream/upstream-en.ts
index 748bb367d7232ea274a8e3471dde7da0d6027480..f13085da253651030aeb4bf6693a4cdf0cf8d8bd 100644
--- a/src/i18n/upstream/upstream-en.ts
+++ b/src/i18n/upstream/upstream-en.ts
@@ -3,4 +3,6 @@ export default {
version: '上游最新版本',
systemVersion: '兼容版本',
architecture: '状态',
+ type: '类型',
+ eulerOsVersion: 'openEuler版本',
};
diff --git a/src/i18n/upstream/upstream-zh.ts b/src/i18n/upstream/upstream-zh.ts
index 091e4ca5a0db005e4453511afebdda989c8061d9..7a9317621f8000dddd9edbb4babf36f9bb707b99 100644
--- a/src/i18n/upstream/upstream-zh.ts
+++ b/src/i18n/upstream/upstream-zh.ts
@@ -4,4 +4,6 @@ export default {
version: '上游最新版本',
compatibility: '兼容版本',
state: '状态',
+ type: '类型',
+ eulerOsVersion: 'openEuler版本',
};
diff --git a/src/router/index.ts b/src/router/index.ts
index 61eedbd72cb4bee00b43f40bbc873f2934bec819..0f11cc206f1e4b96c18b3d5ef39abe0483ac5989 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -21,6 +21,12 @@ const routes = [
path: '/en',
redirect: '/zh',
},
+ {
+ path: '/en/:path*',
+ redirect: (to) => {
+ return `/zh${to.path.replace(/^\/en/, '')}`;
+ },
+ },
{
path: '/zh',
name: 'home',
diff --git a/src/views/conda/TheCondaDetail.vue b/src/views/conda/TheCondaDetail.vue
index 6e7cd8acd368a1e6656486a58293df48b9004816..0cb7ab494289bdb57cfa6b479621e5af1aaf9efe 100644
--- a/src/views/conda/TheCondaDetail.vue
+++ b/src/views/conda/TheCondaDetail.vue
@@ -1,10 +1,9 @@
@@ -147,21 +146,18 @@ const queryVer = () => {
-
+
-
-
- {{ t('detail.number') }}:{{ appData.version }}
-
-
-
+
+
+
{{ appData.version }}
+ 最新版本
+
+
-
-
-
-
+
> {{ t('detail.more') }}
diff --git a/src/views/field/FieldContent.vue b/src/views/field/FieldContent.vue
index b11c684591375966e865d2fc8df9475b40000b33..85ae00b9dd5c42b10016b6325978304e5c3fa0db 100644
--- a/src/views/field/FieldContent.vue
+++ b/src/views/field/FieldContent.vue
@@ -66,6 +66,7 @@ const queryAllpkg = () => {
};
// 过滤空参数
const newData = getParamsRules(params);
+ console.log(newData);
getSearchAllFiled(newData)
.then((res) => {
pkgData.value = res.data.list;
@@ -224,8 +225,9 @@ const init = () => {
searchKey.value = routeKey.value;
keywordType.value = routeType.value;
tabName.value = routeName.value;
- searchOs.value = routeOs.value.length ? routeOs.value : searchOs.value;
- searchArch.value = routeArch.value.length ? routeArch.value : searchArch.value;
+ searchOs.value = routeOs.value.length ? routeOs.value.join('') : searchOs.value;
+
+ searchArch.value = routeArch.value.length ? routeArch.value.join('') : searchArch.value;
searchCategory.value = routeCategory.value.length ? routeCategory.value : searchCategory.value;
};
diff --git a/src/views/field/TheFieldDetail.vue b/src/views/field/TheFieldDetail.vue
index be4db629c2bd680dc6ffcd5f57f4e4100fa153c1..cb9c5233466ffa25ea09b3c53ee6f63129dd947f 100644
--- a/src/views/field/TheFieldDetail.vue
+++ b/src/views/field/TheFieldDetail.vue
@@ -1,21 +1,21 @@
@@ -412,52 +421,52 @@ const onCodeSuccess = () => {
{{ repeatTags(item) }}
-
+
-
-
- {{ t('detail.number') }}: {{ appData.version }}
-
-
-
+
+
+
{{ appData.version }}
+ 最新版本
+
-
-
-
+
-
> {{ t('detail.more') }}
+
+
{{ appData.version }}
+
最新版本
+
+ 软件版本
+
+ {{ item.appVer }}
+
+
+
+
-
+
-
-
-
- {{ t('detail.number') }}: {{ appData.version }}
-
-
-
-
-
-
-
-
-
+
+
+
+ > {{ t('detail.usage') }}
+
+
-
+
@@ -475,7 +484,7 @@ const onCodeSuccess = () => {
/>
-
+
diff --git a/src/views/image/ImageCard.vue b/src/views/image/ImageCard.vue
index dadb5085712055c98cd4fe10e28b51fb68d232a9..a776cfc2091ba958a3b40ce02fc2a5cc2b0450f7 100644
--- a/src/views/image/ImageCard.vue
+++ b/src/views/image/ImageCard.vue
@@ -1,12 +1,13 @@
@@ -148,23 +138,19 @@ const queryVer = () => {
-
-
+
+
-
-
- {{ t('detail.number') }}: {{ appData.version }}
-
-
-
+
+
+
{{ appData.version }}
+ 最新版本
+
-
-
-
-
+
> {{ t('detail.more') }}
@@ -182,7 +168,7 @@ const queryVer = () => {
/>
-
+
diff --git a/src/views/package/TheRpmDetail.vue b/src/views/package/TheRpmDetail.vue
index 41edad246d6fe12a62e23acb37bcf7d7857dccf1..af35ee82d1f8007e4c147bb6955d99c7975c1363 100644
--- a/src/views/package/TheRpmDetail.vue
+++ b/src/views/package/TheRpmDetail.vue
@@ -1,50 +1,32 @@
@@ -140,23 +138,20 @@ const queryVer = () => {
+
-
+
-
-
- {{ t('detail.number') }}: {{ appData.version }}
-
-
-
+
+
+
{{ appData.version }}
+ 最新版本
+
-
-
-
-
+
> {{ t('detail.more') }}
@@ -170,11 +165,11 @@ const queryVer = () => {
:version="appData.version"
type="RPM"
:maintainer="maintainer"
- :srcRepo="srcRepo"
+ :srcRepo="appData.srcRepo"
/>
-
+
diff --git a/src/views/upstream/TheUpstream.vue b/src/views/upstream/TheUpstream.vue
index 5ba9ee2e0b3c3e3d7a181698b3686c6de47c832e..803d90cc72d2848c94577bebfe8691896ea965d9 100644
--- a/src/views/upstream/TheUpstream.vue
+++ b/src/views/upstream/TheUpstream.vue
@@ -6,7 +6,7 @@ import bannerImg from '@/assets/banner/banner1.jpg';
const bannerInfo = {
title: '软件版本支持',
- desc: 'openEuler支持的软件包版本与上游软件的兼容状态列表',
+ desc: 'openEuler支持的软件版本与上游软件的兼容状态列表',
};
diff --git a/src/views/upstream/UpstreamContent.vue b/src/views/upstream/UpstreamContent.vue
index 3dc92525c3581c84a812dc965770e164f8168028..5d969ad46bf3083a07b3310ceb2196ecb64182b7 100644
--- a/src/views/upstream/UpstreamContent.vue
+++ b/src/views/upstream/UpstreamContent.vue
@@ -1,11 +1,11 @@
@@ -279,11 +332,47 @@ const clearFilterSearch = () => {
-
+
+
+
+
+ {{ item.label }}
+
+
+ {{ item.label }}
+ |
+
+
+
+
+
+ {{ appTypeListDisplayNames[row.type] }}
+ -
+
+
+
+ {{ row.upstreamVersion }}
+ {{ row.upstreamVersion }}
+ -
+
+
+ {{ row.openeulerVersion }}
+ {{ row.openeulerVersion }}
+ -
+
+
+
+ {{ row.status }}
+ -
+
+
+
+
+
@@ -292,4 +381,39 @@ const clearFilterSearch = () => {
diff --git a/vitest.config.ts b/vitest.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..99ef52505096c9bc45d56707a304a4f330bb00d0
--- /dev/null
+++ b/vitest.config.ts
@@ -0,0 +1,8 @@
+import { defineConfig } from 'vitest/config';
+
+export default defineConfig({
+ test: {
+ include: ['./tests/**/*.{test,spec}.ts'],
+ environment: 'jsdom',
+ },
+});