diff --git a/deploy/nginx/nginx-pro.conf b/deploy/nginx/nginx-pro.conf index b5c753620b49ffea31274f77f6ceb7720adeb02f..1f6451bd47f9f8a2f51edfce2daca135cf9a48d1 100644 --- a/deploy/nginx/nginx-pro.conf +++ b/deploy/nginx/nginx-pro.conf @@ -1,3 +1,4 @@ +# 登录 location ^~ /api-id/ { proxy_set_header X-Forwarded-For $http_x_real_ip; add_header X-XSS-Protection "1; mode=block"; @@ -11,3 +12,17 @@ location ^~ /api-id/ { proxy_pass https://omapi.osinfra.cn/; } + +# datastat数据 +location /api-dsapi/ { + proxy_set_header X-Forwarded-For $http_x_real_ip; + add_header X-XSS-Protection "1; mode=block"; + add_header X-Frame-Options DENY; + add_header X-Content-Type-Options nosniff; + add_header Content-Security-Policy "script-src 'self'; object-src 'none'; frame-src 'none'"; + add_header Cache-Control "no-cache,no-store,must-revalidate"; + add_header Pragma no-cache; + add_header Expires 0; + + proxy_pass https://dsapi.osinfra.cn/; +} diff --git a/deploy/nginx/nginx-test.conf b/deploy/nginx/nginx-test.conf index 8a0642308f2063fe7c78c1d76ba4c584207710ef..a445a7327d764c2fc3ffa61e805bbb7390264c4c 100644 --- a/deploy/nginx/nginx-test.conf +++ b/deploy/nginx/nginx-test.conf @@ -1,3 +1,4 @@ +# 搜索 location ^~ /api-search/ { add_header X-XSS-Protection "1; mode=block"; add_header X-Frame-Options DENY; @@ -15,6 +16,7 @@ location ^~ /api-search/ { proxy_pass https://doc-search.test.osinfra.cn/; } +# 登录 location ^~ /api-id/ { proxy_set_header X-Forwarded-For $http_x_real_ip; add_header X-XSS-Protection "1; mode=block"; @@ -28,3 +30,18 @@ location ^~ /api-id/ { proxy_pass https://omapi.test.osinfra.cn/; } + +# datastat数据 +location /api-dsapi/ { + proxy_set_header X-Forwarded-For $http_x_real_ip; + add_header X-XSS-Protection "1; mode=block"; + add_header X-Frame-Options DENY; + add_header X-Content-Type-Options nosniff; + add_header Content-Security-Policy "script-src 'self'; object-src 'none'; frame-src 'none'"; + add_header Cache-Control "no-cache,no-store,must-revalidate"; + add_header Pragma no-cache; + add_header Expires 0; + + # proxy_pass https://dsapi.test.osinfra.cn/; + proxy_pass https://dsapi.osinfra.cn/; +} diff --git a/docs/.vitepress/src/App.vue b/docs/.vitepress/src/App.vue index b8c6b6a98894a518aafa2879495212ecc923b7f8..0025a43360c0ed2b7a754e324128e175dff4795f 100644 --- a/docs/.vitepress/src/App.vue +++ b/docs/.vitepress/src/App.vue @@ -10,6 +10,7 @@ import TheHome from '@/views/home/TheHome.vue'; import AppHeader from '@/components/header/AppHeader.vue'; import AppFooter from '@/components/AppFooter.vue'; import FloatingButton from '@/components/FloatingButton.vue'; +import FloatingButtonDocs from '@/components/FloatingButtonDocs.vue'; import CookieNotice from '@/components/CookieNotice.vue'; import LayoutDoc from '@/layouts/LayoutDoc.vue'; @@ -72,7 +73,8 @@ watch( - + + diff --git a/docs/.vitepress/src/api/api-feedback.ts b/docs/.vitepress/src/api/api-feedback.ts new file mode 100644 index 0000000000000000000000000000000000000000..840309acd48c6b1cecaa79d38de52d0f6ad052cf --- /dev/null +++ b/docs/.vitepress/src/api/api-feedback.ts @@ -0,0 +1,21 @@ +import { request } from '@/shared/axios'; +import type { AxiosResponse } from '@/shared/axios'; +interface FeedBackQueryT { + feedbackPageUrl: string; + feedbackText: string; + feedbackValue: number; +} +/** + * 满意度评分 + * @param {FeedBackQueryT} params + * @return {Object} + */ +export function postFeedback(params: FeedBackQueryT): Promise<{ + code: number; + data: string; + msg: string; + update_at: string; +}> { + const url = '/api-dsapi/query/nps?community=openeuler'; + return request.post(url, params).then((res: AxiosResponse) => res.data); +} diff --git a/docs/.vitepress/src/assets/category/feedback/svg-icons/icon-faq.svg b/docs/.vitepress/src/assets/category/feedback/svg-icons/icon-faq.svg new file mode 100644 index 0000000000000000000000000000000000000000..bf7bfb581fe32399d146a54d5b5bbda82a7e94a7 --- /dev/null +++ b/docs/.vitepress/src/assets/category/feedback/svg-icons/icon-faq.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/.vitepress/src/assets/category/feedback/svg-icons/icon-headset.svg b/docs/.vitepress/src/assets/category/feedback/svg-icons/icon-headset.svg new file mode 100644 index 0000000000000000000000000000000000000000..aee2698d917ff057255c16175248a2b592da1f68 --- /dev/null +++ b/docs/.vitepress/src/assets/category/feedback/svg-icons/icon-headset.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/.vitepress/src/components/FloatingButton.vue b/docs/.vitepress/src/components/FloatingButton.vue index b63a5c42abb50826b800953912474b5d8391ce8c..d6f5ccbb38b5a058d0dbd9cdb18abbd4e1ed4476 100644 --- a/docs/.vitepress/src/components/FloatingButton.vue +++ b/docs/.vitepress/src/components/FloatingButton.vue @@ -1,172 +1,24 @@ - + diff --git a/docs/.vitepress/src/components/feedback/FeedbackSlider.vue b/docs/.vitepress/src/components/feedback/FeedbackSlider.vue index def8fd96a5547cc4381f46c2cbd054023e23ac2a..352db708362091020fdde70b28d24787b93702f5 100644 --- a/docs/.vitepress/src/components/feedback/FeedbackSlider.vue +++ b/docs/.vitepress/src/components/feedback/FeedbackSlider.vue @@ -5,7 +5,7 @@ import { ElSlider } from 'element-plus'; import IconClose from '~icons/app/icon-close.svg'; -// import { postFeedback } from '@/api/api-feedback'; +import { postFeedback } from '@/api/api-feedback'; import { useLocale } from '@/composables/useLocale'; const props = defineProps({ @@ -89,23 +89,23 @@ const submitFeedback = () => { feedbackValue: score.value / 10, }; - // postFeedback(params) - // .then((res) => { - // if (res.code === 200) { - // message.success({ - // content: t('space.submitSuccess'), - // }); - // } else { - // message.warning({ - // content: t('feedback.submitBusy'), - // }); - // } - // }) - // .catch(() => { - // message.warning({ - // content: t('feedback.feedbackFailed'), - // }); - // }); + postFeedback(params) + .then((res) => { + if (res.code === 200) { + message.success({ + content: t('space.submitSuccess'), + }); + } else { + message.warning({ + content: t('feedback.submitBusy'), + }); + } + }) + .catch(() => { + message.warning({ + content: t('feedback.feedbackFailed'), + }); + }); closeFeedbackPopup(); }; diff --git a/docs/.vitepress/src/components/feedback/FloatingButtonHome.vue b/docs/.vitepress/src/components/feedback/FloatingButtonHome.vue new file mode 100644 index 0000000000000000000000000000000000000000..0faf3e607654ac2f7849c5ef66b6a8944235b996 --- /dev/null +++ b/docs/.vitepress/src/components/feedback/FloatingButtonHome.vue @@ -0,0 +1,249 @@ + + + + + diff --git a/docs/vite.config.ts b/docs/vite.config.ts index 555f42591e165552edbe8a2923331aa99fbd5dca..4e5368e9cf0d23fddae2683832f7d430f25ddb57 100644 --- a/docs/vite.config.ts +++ b/docs/vite.config.ts @@ -13,6 +13,7 @@ export default defineConfig({ app: FileSystemIconLoader(fileURLToPath(new URL('./.vitepress/src/assets/svg-icons', import.meta.url))), home: FileSystemIconLoader(fileURLToPath(new URL('./.vitepress/src/assets/category/home/svg-icons', import.meta.url))), footer: FileSystemIconLoader(fileURLToPath(new URL('./.vitepress/src/assets/category/footer/svg-icons', import.meta.url))), + feedback: FileSystemIconLoader(fileURLToPath(new URL('./.vitepress/src/assets/category/feedback/svg-icons', import.meta.url))), }, }), basicSsl(), @@ -47,7 +48,7 @@ export default defineConfig({ server: { proxy: { '/api-dsapi/': { - target: 'https://dsapi.osinfra.cn/', + target: 'https://dsapi.test.osinfra.cn/', changeOrigin: true, rewrite: (path: string) => path.replace(/^\/api-dsapi/, ''), },