diff --git a/src/dashboard-front/.eslintignore b/src/dashboard-front/.eslintignore index 93591a7c7..1a3d7d028 100644 --- a/src/dashboard-front/.eslintignore +++ b/src/dashboard-front/.eslintignore @@ -11,3 +11,4 @@ src/views/permission/record/index.vue src/views/permission/apply/index.vue src/assets/** *bak* +src/views/resource/setting/detail.vue diff --git a/src/dashboard-front/.eslintrc.js b/src/dashboard-front/.eslintrc.js index 42060264f..548d6f152 100644 --- a/src/dashboard-front/.eslintrc.js +++ b/src/dashboard-front/.eslintrc.js @@ -1,10 +1,16 @@ module.exports = { root: true, extends: ['@blueking/eslint-config-bk/tsvue3'], + parser: 'vue-eslint-parser', parserOptions: { project: './tsconfig.eslint.json', tsconfigRootDir: __dirname, sourceType: 'module', + parser: '@typescript-eslint/parser', + ecmaFeatures: { + jsx: true, + }, + ecmaVersion: 13, }, rules: { 'no-param-reassign': 0, diff --git a/src/dashboard-front/index.html b/src/dashboard-front/index.html index c1006b2b9..172431a74 100644 --- a/src/dashboard-front/index.html +++ b/src/dashboard-front/index.html @@ -18,10 +18,12 @@ var BK_APIGATEWAY_VERSION = '<%= process.env.BK_APIGATEWAY_VERSION %>' || '1.1.1' var BK_DOMAIN = '<%= process.env.BK_DOMAIN %>' var BK_LOGIN_URL = '<%= process.env.BK_LOGIN_URL %>' + var BK_APP_CODE = '<%= process.env.BK_APP_CODE %>' var BK_DEFAULT_TEST_APP_CODE = '<%= process.env.BK_DEFAULT_TEST_APP_CODE %>' var BK_API_RESOURCE_URL_TMPL = '<%= process.env.BK_API_RESOURCE_URL_TMPL %>' var BK_COMPONENT_API_URL = '<%= process.env.BK_COMPONENT_API_URL %>' var BK_DOCS_URL_PREFIX = '<%= process.env.BK_DOCS_URL_PREFIX %>' + var BK_REPO_URL = '<%= process.env.BK_REPO_URL %>' var BK_DASHBOARD_FE_URL = '<%= process.env.BK_DASHBOARD_FE_URL %>' var BK_DASHBOARD_URL = '<%= process.env.BK_DASHBOARD_URL %>' var BK_DASHBOARD_CSRF_COOKIE_NAME = '<%= process.env.BK_DASHBOARD_CSRF_COOKIE_NAME %>' diff --git a/src/dashboard-front/package.json b/src/dashboard-front/package.json index af2d92d72..3346bd3f8 100644 --- a/src/dashboard-front/package.json +++ b/src/dashboard-front/package.json @@ -50,7 +50,7 @@ "request": "^2.88.2", "semver": "^7.6.0", "transliteration": "^2.3.5", - "vue": "^3.2.41", + "vue": "^3.4.27", "vue-i18n": "^9.5.0", "vue-router": "^4.1.6" }, @@ -84,7 +84,8 @@ "sass": "^1.52.3", "sass-loader": "^13.0.0", "ts-loader": "^9.5.1", - "typescript": "^4.8.4" + "typescript": "5.4.5", + "vue-eslint-parser": "^9.4.2" }, "engines": { "node": ">= 14.16.1", diff --git a/src/dashboard-front/src/components/log-details/index.vue b/src/dashboard-front/src/components/log-details/index.vue index ba46cf7b2..4456efa4f 100644 --- a/src/dashboard-front/src/components/log-details/index.vue +++ b/src/dashboard-front/src/components/log-details/index.vue @@ -175,7 +175,7 @@ const showSideslider = () => { isShow.value = true; }; -const emit = defineEmits<(e: 'release-success') => void>(); +const emit = defineEmits(['release-success', 'release-doing']); watch( () => isShow.value, @@ -183,6 +183,9 @@ watch( if (!v && logDetails.value?.status === 'success') { emit('release-success'); } + if (!v && logDetails.value?.status !== 'success') { + emit('release-doing'); + } if (!v) { clearInterval(timeId); } diff --git a/src/dashboard-front/src/components/resource-setting-top-bar.vue b/src/dashboard-front/src/components/resource-setting-top-bar.vue index e4cdc60ff..1c72191bd 100644 --- a/src/dashboard-front/src/components/resource-setting-top-bar.vue +++ b/src/dashboard-front/src/components/resource-setting-top-bar.vue @@ -1,5 +1,5 @@ -
+ + +
+ +
@@ -108,11 +112,13 @@ import { ref, watch, onMounted, onBeforeUnmount } from 'vue'; import { useRoute, useRouter } from 'vue-router'; import { createMenuData } from '@/common/menu'; -import { useGetApiList, useSidebar } from '@/hooks'; -import { useCommon, usePermission } from '@/store'; +import { useGetApiList, useSidebar, useGetStageList } from '@/hooks'; +import { useCommon, usePermission, useStage } from '@/store'; import { getPermissionApplyList, getGatewaysDetail } from '@/http'; import mitt from '@/common/event-bus'; import { cloneDeep } from 'lodash'; +import versionReleaseNote from '@/components/version-release-note.vue'; +import tipsPublishBar from '@/components/tips-publish-bar.vue'; const { initSidebarFormData, isSidebarClosed } = useSidebar(); const route = useRoute(); @@ -122,6 +128,11 @@ const common = useCommon(); const permission = usePermission(); const filterData = ref({ name: '' }); const apigwSelect = ref(); + +const stage = useStage(); +const versionReleaseNoteRef = ref(); +const { getStagesStatus } = useGetStageList(); + // 获取网关数据方法 const { getGatewaysListData, @@ -159,6 +170,13 @@ const handleSetApigwDeatail = async () => { common.setCurApigwData(curApigwDataDetail); }; +const getStages = async () => { + const res = await getStagesStatus(); + if (res?.notUpdatedStages?.length) { + versionReleaseNoteRef.value?.show(); + } +}; + const needMenu = ref(true); const menuData = ref([]); const pageName = ref(''); @@ -247,6 +265,18 @@ const handleBack = () => { router.back(); }; +watch( + () => apigwId.value, + (v) => { + if (v) { + setTimeout(() => { + getStages(); + }, 200); + } + }, + { immediate: true }, +); + onMounted(async () => { // 处理其他页面离开页面前是否会出现提示框的判断 mitt.on('on-leave-page-change', (payload: Record) => { @@ -394,6 +424,7 @@ onMounted(async () => { // box-shadow: 0 3px 4px rgba(64,112,203,0.05882); box-shadow: 0 3px 4px 0 #0000000a; height: 52px; + box-sizing: border-box; margin-right: auto; color: #313238; font-size: 16px; diff --git a/src/dashboard-front/src/views/resource/setting/comps/version-sideslider.vue b/src/dashboard-front/src/views/resource/setting/comps/version-sideslider.vue index 42f81d410..13cb969e7 100644 --- a/src/dashboard-front/src/views/resource/setting/comps/version-sideslider.vue +++ b/src/dashboard-front/src/views/resource/setting/comps/version-sideslider.vue @@ -187,15 +187,15 @@ import { resourceVersionsDiff, getStageList, } from '@/http'; +import { useGetStageList } from '@/hooks'; import versionDiff from '@/components/version-diff/index.vue'; -import CustomDialog from '@/components/custom-dialog/index.vue'; const route = useRoute(); const router = useRouter(); const apigwId = computed(() => +route.params.id); const { t } = useI18n(); - +const { getStagesStatus } = useGetStageList(); const emit = defineEmits(['done']); // const resourceVersion = computed(() => { @@ -282,6 +282,7 @@ const handleBuildVersion = async () => { dialogShow.value = true; await createResourceVersion(apigwId.value, formData); emit('done'); + getStagesStatus(); createError.value = false; } catch (e) { createError.value = true; diff --git a/src/dashboard-front/src/views/resource/setting/detail.vue b/src/dashboard-front/src/views/resource/setting/detail.vue index 7e5f0af74..0c34f72f5 100644 --- a/src/dashboard-front/src/views/resource/setting/detail.vue +++ b/src/dashboard-front/src/views/resource/setting/detail.vue @@ -66,7 +66,7 @@ + @click="copy(formData?.labels?.map((item: any) => item.name)?.join(','))">
@@ -731,6 +731,7 @@ const handleConfirmTime = () => { timeOutValue.value = ''; handleEditSave(); }; + const renderTimeOutLabel = () => { return (
diff --git a/src/dashboard-front/src/views/stage/overview/comps/release-sideslider.vue b/src/dashboard-front/src/views/stage/overview/comps/release-sideslider.vue index b5aaafef4..3e54c5b3c 100644 --- a/src/dashboard-front/src/views/stage/overview/comps/release-sideslider.vue +++ b/src/dashboard-front/src/views/stage/overview/comps/release-sideslider.vue @@ -27,9 +27,9 @@ v-else theme="info" :title=" - chooseAssets?.resource_version.version ? + chooseAssets?.resource_version?.version ? t('当前版本号: {version},于 {created_time} 发布成功; 资源更新成功后, 需发布到指定的环境, 方可生效', { - version: chooseAssets?.resource_version.version, + version: chooseAssets?.resource_version?.version, created_time: chooseAssets?.release.created_time }) : t('资源更新成功后, 需发布到指定的环境, 方可生效')" @@ -47,8 +47,8 @@

- {{ t('发布的资源版本( 当前版本:{version}', { version: chooseAssets?.resource_version.version || '--' }) }} -