diff --git a/ui/src/api/config.ts b/ui/src/api/config.ts index 9cddf9f31..c755439fd 100644 --- a/ui/src/api/config.ts +++ b/ui/src/api/config.ts @@ -23,30 +23,46 @@ export const getDefaultConfigScriptData = () => ({ * 获取未命名版本的配置文件列表 * @param biz_id 空间ID * @param app_id 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param query 查询参数 * @returns */ -export const getConfigList = (biz_id: string, app_id: number, query: ICommonQuery) => +export const getConfigList = (biz_id: string, app_id: number, projectId: string, envId: string, query: ICommonQuery) => http - .post(`/config/biz/${biz_id}/apps/${app_id}/config_items`, { ...query, with_status: true }) + .post(`/config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps/${app_id}/config_items`, { ...query, with_status: true }) .then((res) => res.data); /** * 获取已发布版本的非模板配置文件列表 * @param biz_id 空间ID * @param app_id 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param release_id 版本ID * @param params 查询参数 * @returns */ -export const getReleasedConfigList = (biz_id: string, app_id: number, release_id: number, params: ICommonQuery) => - http.post(`/config/biz/${biz_id}/apps/${app_id}/releases/${release_id}/config_items`, params).then((res) => { - res.data.details.forEach((item: any) => { +export const getReleasedConfigList = ( + biz_id: string, + app_id: number, + projectId: string, + envId: string, + release_id: number, + params: ICommonQuery, +) => + http + .post( + `/config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps/${app_id}/releases/${release_id}/config_items`, + params, + ) + .then((res) => { + res.data.details.forEach((item: any) => { // 接口返回的config_item_id为实际的配置文件id,id字段没有到,统一替换 - item.id = item.config_item_id; + item.id = item.config_item_id; + }); + return res.data; }); - return res.data; - }); /** * 新增配置 @@ -83,26 +99,41 @@ export const deleteServiceConfigItem = (id: number, bizId: string, appId: number * 批量删除非模板配置 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param ids 配置项ID列表 * @returns */ -export const batchDeleteServiceConfigs = (bizId: string, appId: number, ids: number[]) => - http.post(`/config/biz/${bizId}/apps/${appId}/config_items/batch_delete`, { ids }); +export const batchDeleteServiceConfigs = ( + bizId: string, + appId: number, + projectId: string, + envId: string, + ids: number[], +) => + http.post( + `/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/config_items/batch_delete`, + { ids }, + ); /** * 获取未命名版本配置文件详情 * @param biz_id 空间ID * @param id 配置ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @returns */ -export const getConfigItemDetail = (biz_id: string, id: number, appId: number) => - http.get(`/config/biz/${biz_id}/apps/${appId}/config_items/${id}`).then((resp) => resp.data); +export const getConfigItemDetail = (biz_id: string, id: number, appId: number, projectId: string, envId: string) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps/${appId}/config_items/${id}`).then((resp) => resp.data); /** * 获取已发布版本配置文件详情 * @param biz_id 空间ID * @param app_id 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param release_id 版本ID * @param config_item_id 配置文件ID * @returns @@ -110,11 +141,13 @@ export const getConfigItemDetail = (biz_id: string, id: number, appId: number) = export const getReleasedConfigItemDetail = ( biz_id: string, app_id: number, + projectId: string, + envId: string, release_id: number, config_item_id: number, ) => http - .get(`/config/biz/${biz_id}/apps/${app_id}/releases/${release_id}/config_items/${config_item_id}`) + .get(`/config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps/${app_id}/releases/${release_id}/config_items/${config_item_id}`) .then((resp) => { resp.data.config_item.id = resp.data.config_item_id; return resp.data; @@ -211,73 +244,98 @@ export const createVersion = (bizId: string, appId: number, params: ICreateVersi * 废弃版本 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param releaseId 版本ID * @returns */ -export const deprecateVersion = (bizId: string, appId: number, releaseId: number) => - http.put(`/config/biz/${bizId}/apps/${appId}/releases/${releaseId}/deprecate`); +export const deprecateVersion = (bizId: string, appId: number, projectId: string, envId: string, releaseId: number) => + http.put(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/${releaseId}/deprecate`); /** * 恢复版本 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param releaseId 版本ID * @returns */ -export const undeprecateVersion = (bizId: string, appId: number, releaseId: number) => - http.put(`/config/biz/${bizId}/apps/${appId}/releases/${releaseId}/undeprecate`); +export const undeprecateVersion = (bizId: string, appId: number, projectId: string, envId: string, releaseId: number) => + http.put(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/${releaseId}/undeprecate`); /** * 删除版本 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param releaseId 版本ID * @returns */ -export const deleteVersion = (bizId: string, appId: number, releaseId: number) => - http.delete(`/config/biz/${bizId}/apps/${appId}/releases/${releaseId}`); +export const deleteVersion = (bizId: string, appId: number, projectId: string, envId: string, releaseId: number) => + http.delete(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/${releaseId}`); /** * 获取版本列表 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param params 查询参数 * @returns */ -export const getConfigVersionList = (bizId: string, appId: number, params: IConfigVersionQueryParams) => - http.get(`config/biz/${bizId}/apps/${appId}/releases`, { params }).then((res) => { - res.data.details.forEach((item: IConfigVersion) => { - const defaultGroup = item.status.released_groups.find((group) => group.id === 0); - if (defaultGroup) { - defaultGroup.name = localT('全部实例'); - } +export const getConfigVersionList = ( + bizId: string, + appId: number, + projectId: string, + envId: string, + params: IConfigVersionQueryParams, +) => + http + .get( + `config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases`, + { params }, + ) + .then((res) => { + res.data.details.forEach((item: IConfigVersion) => { + const defaultGroup = item.status.released_groups.find((group) => group.id === 0); + if (defaultGroup) { + defaultGroup.name = localT('全部实例'); + } + }); + return res; }); - return res; - }); /** * 发布版本 * @param bizId 业务ID * @param appId 应用ID - * @param name 版本名称 + * @param projectId 项目ID + * @param envId 环境ID + * @param releaseId 版本ID * @param data 参数 * @returns */ export const publishVersion = ( bizId: string, appId: number, + projectId: string, + envId: string, releaseId: number, data: { groups: Array; all: boolean; memo: string; }, -) => http.post(`/config/update/strategy/publish/publish/release_id/${releaseId}/app_id/${appId}/biz_id/${bizId}`, data); +) => http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/${releaseId}/publish`, data); /** * 发布版本(增加审批) * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param data 参数 * @param publish_type 上线方式 * @param publish_time 定时上线时间 @@ -287,6 +345,8 @@ export const publishVersion = ( export const publishVerSubmit = ( bizId: string, appId: number, + projectId: string, + envId: string, releaseId: number, data: { groups: Array; @@ -296,17 +356,19 @@ export const publishVerSubmit = ( publish_time: Date | string; is_compare: boolean; }, -) => http.post(`/config/biz_id/${bizId}/app_id/${appId}/release_id/${releaseId}/submit`, data); +) => http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/${releaseId}/submit`, data); /** * 获取服务下初始化脚本引用配置 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param releaseId 版本ID * @returns */ -export const getConfigScript = (bizId: string, appId: number, releaseId: number) => - http.get(`/config/biz/${bizId}/apps/${appId}/releases/${releaseId}/hooks`).then((response) => { +export const getConfigScript = (bizId: string, appId: number, projectId: string, envId: string, releaseId: number) => + http.get(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/${releaseId}/hooks`).then((response) => { const { pre_hook, post_hook } = response.data; const data = { pre_hook: getDefaultConfigScriptData(), @@ -325,27 +387,35 @@ export const getConfigScript = (bizId: string, appId: number, releaseId: number) * 更新服务下初始化脚本引用配置 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param params 配置数据 * @returns */ export const updateConfigInitScript = ( bizId: string, appId: number, + projectId: string, + envId: string, params: { pre_hook_id: number | undefined; post_hook_id: number | undefined }, -) => http.put(`/config/biz/${bizId}/apps/${appId}/config_hooks`, params); +) => http.put(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/config_hooks`, params); /** * 检测导入模板与已存在配置文件的冲突详情 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @returns */ export const checkAppTemplateBinding = ( bizId: string, appId: number, + projectId: string, + envId: string, params: { bindings: ITemplateBoundByAppData[] }, ) => - http.post(`/config/biz/${bizId}/apps/${appId}/template_bindings/conflict_check`, params).then((res) => { + http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/template_bindings/conflict_check`, params).then((res) => { const conflictData: { [key: number]: number[] } = {}; res.data.details.forEach( (item: { template_id: number; template_name: string; template_set_id: number; template_set_name: string }) => { @@ -363,19 +433,25 @@ export const checkAppTemplateBinding = ( * 新建模板配置文件和服务绑定关系 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param params 查询参数 * @returns */ export const importTemplateConfigPkgs = ( bizId: string, appId: number, + projectId: string, + envId: string, params: { bindings: ITemplateBoundByAppData[] }, -) => http.post(`/config/biz/${bizId}/apps/${appId}/template_bindings`, params); +) => http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/template_bindings`, params); /** * 更新模板配置文件和服务绑定关系 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param bindingId 模板和服务绑定关系ID * @param params 更新参数 * @returns @@ -383,38 +459,65 @@ export const importTemplateConfigPkgs = ( export const updateTemplateConfigPkgs = ( bizId: string, appId: number, + projectId: string, + envId: string, bindingId: number, params: { bindings: ITemplateBoundByAppData[] }, -) => http.put(`/config/biz/${bizId}/apps/${appId}/template_bindings/${bindingId}`, params); +) => http.put(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/template_bindings/${bindingId}`, params); /** * 获取服务下未命名版本绑定的模板配置文件列表 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param query 查询参数 * @returns */ -export const getBoundTemplates = (bizId: string, appId: number, query: ICommonQuery) => +export const getBoundTemplates = ( + bizId: string, + appId: number, + projectId: string, + envId: string, + query: ICommonQuery, +) => http - .post(`/config/biz/${bizId}/apps/${appId}/template_revisions`, { ...query, with_status: true }) + .post( + `/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/template_revisions`, + { ...query, with_status: true }, + ) .then((res) => res.data); /** * 获取服务下已命名版本绑定的模板配置文件列表 * @param bizId * @param appId + * @param projectId 项目ID + * @param envId 环境ID * @param releaseId * @returns */ -export const getBoundTemplatesByAppVersion = (bizId: string, appId: number, releaseId: number, query: ICommonQuery) => +export const getBoundTemplatesByAppVersion = ( + bizId: string, + appId: number, + projectId: string, + envId: string, + releaseId: number, + query: ICommonQuery, +) => http - .post(`/config/biz/${bizId}/apps/${appId}/releases/${releaseId}/template_revisions`, query) + .post( + `/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/${releaseId}/template_revisions`, + query, + ) .then((res) => res.data); /** * 更新服务下模板配置文件版本 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param bindingId 模板和服务绑定关系ID * @param params 更新参数 * @returns @@ -422,9 +525,11 @@ export const getBoundTemplatesByAppVersion = (bizId: string, appId: number, rele export const updateBoundTemplateVersion = ( bizId: string, appId: number, + projectId: string, + envId: string, bindingId: number, params: { bindings: ITemplateBoundByAppData[] }, -) => http.put(`/config/biz/${bizId}/apps/${appId}/template_bindings/${bindingId}/template_revisions`, params); +) => http.put(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/template_bindings/${bindingId}/template_revisions`, params); /** * 删除服务下绑定的模板套餐 @@ -443,11 +548,13 @@ export const deleteBoundPkg = (bizId: string, appId: number, bindingId: number, * 删除服务下绑定的模板套餐 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param id 配置ID * @returns */ -export const deleteCurrBoundPkg = (bizId: string, appId: number, id: number) => - http.delete(`/config/biz/${bizId}/apps/${appId}/template_set/${id}`); +export const deleteCurrBoundPkg = (bizId: string, appId: number, projectId: string, envId: string, id: number) => + http.delete(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/template_set/${id}`); /** * 导入非模板配置文件压缩包 @@ -479,36 +586,44 @@ export const importNonTemplateConfigFile = ( * 批量添加非模板配置列表 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param bindingId 模板和服务绑定关系ID * @param template_set_ids 模板套餐ID列表 * @returns */ -export const batchAddConfigList = (bizId: string, appId: number, query: any) => - http.put(`/config/biz/${bizId}/apps/${appId}/config_items`, query).then((res) => res.data); +export const batchAddConfigList = (bizId: string, appId: number, projectId: string, envId: string, query: any) => + http.put(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/config_items`, query).then((res) => res.data); /** * 创建kv * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param kv 配置键值类型 * @returns */ -export const createKv = (bizId: string, appId: number, kv: any) => - http.post(`/config/biz/${bizId}/apps/${appId}/kvs`, kv); +export const createKv = (bizId: string, appId: number, projectId: string, envId: string, kv: any) => + http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs`, kv); /** * 获取kv * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @returns */ -export const getKvList = (bizId: string, appId: number, query: ICommonQuery) => - http.post(`/config/biz/${bizId}/apps/${appId}/kvs/list`, query).then((res) => res.data); +export const getKvList = (bizId: string, appId: number, projectId: string, envId: string, query: ICommonQuery) => + http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/list`, query).then((res) => res.data); /** * 更新kv * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param key 配置键 * @param value 配置值 * @returns @@ -516,115 +631,182 @@ export const getKvList = (bizId: string, appId: number, query: ICommonQuery) => export const updateKv = ( bizId: string, appId: number, + projectId: string, + envId: string, key: string, editContent: { value: string; memo: string; secret_hidden?: boolean }, -) => http.put(`/config/biz/${bizId}/apps/${appId}/kvs/${key}`, editContent); +) => http.put(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/${key}`, editContent); /** * 删除kv * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param configId 配置项ID * @returns */ -export const deleteKv = (bizId: string, appId: number, configId: number) => - http.delete(`/config/biz/${bizId}/apps/${appId}/kvs/${configId}`); +export const deleteKv = (bizId: string, appId: number, projectId: string, envId: string, configId: number) => + http.delete(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/${configId}`); /** * 批量删除kv * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param ids 配置项ID列表 * @param exclusion_operation 是否跨页 */ -export const batchDeleteKv = (bizId: string, appId: number, ids: number[], exclusion_operation: boolean) => - http.post(`config/biz/${bizId}/apps/${appId}/kvs/batch_delete`, { ids, exclusion_operation }); +export const batchDeleteKv = ( + bizId: string, + appId: number, + projectId: string, + envId: string, + ids: number[], + exclusion_operation: boolean, +) => + http.post( + `config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/batch_delete`, + { ids, exclusion_operation }, + ); /** * 获取已发布kv * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param releaseId 版本id * @param key 配置键 * @returns */ -export const getReleaseKv = (bizId: string, appId: number, releaseId: number, key: string) => - http.get(`/config/biz/${bizId}/apps/${appId}/releases/${releaseId}/kvs/${key}`).then((res) => res.data); +export const getReleaseKv = ( + bizId: string, + appId: number, + projectId: string, + envId: string, + releaseId: number, + key: string, +) => + http + .get( + `/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/${releaseId}/kvs/${key}`, + ) + .then((res) => res.data); /** * 获取已发布kv列表 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param releaseId 版本id * @returns */ -export const getReleaseKvList = (bizId: string, appId: number, releaseId: number, query: ICommonQuery) => - http.post(`/config/biz/${bizId}/apps/${appId}/releases/${releaseId}/kvs`, query).then((res) => res.data); +export const getReleaseKvList = ( + bizId: string, + appId: number, + projectId: string, + envId: string, + releaseId: number, + query: ICommonQuery, +) => + http + .post( + `/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/${releaseId}/kvs`, + query, + ) + .then((res) => res.data); /** * 撤销删除kv * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param kv 配置键值类型 * @returns */ -export const undeleteKv = (bizId: string, appId: number, key: string) => - http.post(`/config/biz/${bizId}/apps/${appId}/kvs/${key}/undelete`); +export const undeleteKv = (bizId: string, appId: number, projectId: string, envId: string, key: string) => + http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/${key}/undelete`); /** * 恢复修改kv * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param kv 配置键值类型 * @returns */ -export const unModifyKv = (bizId: string, appId: number, key: string) => - http.post(`/config/biz/${bizId}/apps/${appId}/kvs/${key}/undo`); +export const unModifyKv = (bizId: string, appId: number, projectId: string, envId: string, key: string) => + http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/${key}/undo`); /** * 批量导入kv配置文件 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param File 配置文件 * @returns */ -export const batchImportKvFile = (bizId: string, appId: number, File: any) => - http.post(`/biz/${bizId}/apps/${appId}/kvs/import`, File); +export const batchImportKvFile = (bizId: string, appId: number, projectId: string, envId: string, File: any) => + http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/import`, File); /** * 导出kv配置文件 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param releaseId 发布版本ID * @returns */ -export const getExportKvFile = (bizId: string, appId: number, releaseId: number, format: string) => - http.get(`biz/${bizId}/apps/${appId}/releases/${releaseId}/kvs/export`, { params: { format } }); +export const getExportKvFile = ( + bizId: string, + appId: number, + projectId: string, + envId: string, + releaseId: number, + format: string, +) => + http.get( + `config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/${releaseId}/kvs/export`, + { params: { format } }, + ); /** * 撤销修改配置文件 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param id 配置文件ID * @returns */ -export const unModifyConfigItem = (bizId: string, appId: number, id: number) => - http.post(`/config/undo/config_item/config_item/config_item_id/${id}/app_id/${appId}/biz_id/${bizId}`); +export const unModifyConfigItem = (bizId: string, appId: number, projectId: string, envId: string, id: number) => + http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/config_items/${id}/undo`); /** * 恢复删除配置文件 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param id 配置文件ID * @returns */ -export const unDeleteConfigItem = (bizId: string, appId: number, id: number) => - http.post(`/config/undelete/config_item/config_item/config_item_id/${id}/app_id/${appId}/biz_id/${bizId}`); +export const unDeleteConfigItem = (bizId: string, appId: number, projectId: string, envId: string, id: number) => + http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/config_items/${id}/undelete`); /** * 从历史版本导入配置项 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param other_app_id 导入服务id * @param release_id 版本id * @returns @@ -632,13 +814,17 @@ export const unDeleteConfigItem = (bizId: string, appId: number, id: number) => export const importFromHistoryVersion = ( bizId: string, appId: number, + projectId: string, + envId: string, params: { other_app_id: number; release_id: number }, -) => http.get(`/config/biz/${bizId}/apps/${appId}/config_items/compare_conflicts`, { params }); +) => http.get(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/config_items/compare_conflicts`, { params }); /** * 从历史版本导入kv配置项 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param other_app_id 导入服务id * @param release_id 版本id * @returns @@ -646,122 +832,167 @@ export const importFromHistoryVersion = ( export const importKvFromHistoryVersion = ( bizId: string, appId: number, + projectId: string, + envId: string, params: { other_app_id: number; release_id: number }, -) => http.get(`/config/biz/${bizId}/apps/${appId}/kvs/compare_conflicts`, { params }); +) => http.get(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/compare_conflicts`, { params }); /** * 简单文本导入kv配置项 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param kvs 上传kv列表 * @returns */ -export const importKvFormText = (bizId: string, appId: number, kvs: any, replace_all: boolean) => - http.put(`/config/biz/${bizId}/apps/${appId}/kvs`, { kvs, replace_all }); +export const importKvFormText = ( + bizId: string, + appId: number, + projectId: string, + envId: string, + kvs: any, + replace_all: boolean, +) => + http.put( + `/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs`, + { kvs, replace_all }, + ); /** * json文本导入kv配置项 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param kvs 上传kv列表 * @returns */ -export const importKvFormJson = (bizId: string, appId: number, content: string) => - http.post(`/config/biz/${bizId}/apps/${appId}/kvs/json/import`, { data: content }); +export const importKvFormJson = (bizId: string, appId: number, projectId: string, envId: string, content: string) => + http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/json/import`, { data: content }); /** * yaml文本导入kv配置项 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param kvs 上传kv列表 * @returns */ -export const importKvFormYaml = (bizId: string, appId: number, content: string) => - http.post(`/config/biz/${bizId}/apps/${appId}/kvs/yaml/import`, { data: content }); +export const importKvFormYaml = (bizId: string, appId: number, projectId: string, envId: string, content: string) => + http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/yaml/import`, { data: content }); /** * 判断生成版本名称是否重名 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param kvs 上传kv列表 * @returns */ -export const createVersionNameCheck = (bizId: string, appId: number, name: string) => - http.get(`/config/biz_id/${bizId}/app_id/${appId}/release/${name}/check`); +export const createVersionNameCheck = (bizId: string, appId: number, projectId: string, envId: string, name: string) => + http.get(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/name/${name}/check`); /** * 从配置模板导入配置文件 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param bindingId 模板和服务绑定关系ID * @param params 更新参数 * @returns */ -export const importConfigFromTemplate = (bizId: string, appId: number, query: any) => - http.post(`/config/biz/${bizId}/apps/${appId}/template_bindings/import_template_set`, query); +export const importConfigFromTemplate = (bizId: string, appId: number, projectId: string, envId: string, query: any) => + http.post(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/template_bindings/import_template_set`, query); /** * 上次上线方式查询 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @returns */ -export const publishType = (bizId: string, appId: number) => - http.get(`/config/biz_id/${bizId}/app_id/${appId}/last/select`); +export const publishType = (bizId: string, appId: number, projectId: string, envId: string) => + http.get(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/last/select`); /** * 当前版本状态查询 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param releaseId 版本ID * @returns */ -export const versionStatusQuery = (bizId: string, appId: number, releaseId: number) => - http.get(`/config/biz_id/${bizId}/app_id/${appId}/release_id/${releaseId}/status`); +export const versionStatusQuery = (bizId: string, appId: number, projectId: string, envId: string, releaseId: number) => + http.get(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/releases/${releaseId}/status`); /** * 当前服务下 所有版本上线状态检查 * @param bizId 业务ID * @param appId 应用ID - * @param releaseId 版本ID + * @param projectId 项目ID + * @param envId 环境ID * @returns */ -export const versionStatusCheck = (bizId: string, appId: number) => - http.get(`/config/biz_id/${bizId}/app_id/${appId}/last/publish`); +export const versionStatusCheck = (bizId: string, appId: number, projectId: string, envId: string) => + http.get(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/last/publish`); /** * 批量恢复kv配置项 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param ids 恢复的id列表 * @returns */ -export const batchUndeleteKv = (bizId: string, appId: number, keys: string[], exclusion_operation: boolean) => - http.post(`config/biz/${bizId}/apps/${appId}/kvs/batch_undelete`, { keys, exclusion_operation }); +export const batchUndeleteKv = ( + bizId: string, + appId: number, + projectId: string, + envId: string, + keys: string[], + exclusion_operation: boolean, +) => + http.post( + `config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/batch_undelete`, + { keys, exclusion_operation }, + ); /** * 批量恢复服务型配置项 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @param ids 恢复的id列表 * @returns */ -export const batchUndeleteFile = (bizId: string, appId: number, ids: number[]) => - http.post(`config/biz_id/${bizId}/app_id/${appId}/config_items/batch_undelete`, { ids }); +export const batchUndeleteFile = (bizId: string, appId: number, projectId: string, envId: string, ids: number[]) => + http.post(`config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/config_items/batch_undelete`, { ids }); /** * 获取即将过期证书列表 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @returns */ -export const getUnExpiredCertList = (bizId: string, appId: number, params: any) => - http.get(`/config/biz/${bizId}/apps/${appId}/kvs/near_certificate`, { params }); +export const getUnExpiredCertList = (bizId: string, appId: number, projectId: string, envId: string, params: any) => + http.get(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/kvs/near_certificate`, { params }); /** * 获取所有发布版本配置项列表 * @param bizId 业务ID * @param appId 应用ID + * @param projectId 项目ID + * @param envId 环境ID */ -export const getAllReleasedConfigList = (bizId: string, appId: number) => - http.get(`/config/biz/${bizId}/apps/${appId}/published/all`); +export const getAllReleasedConfigList = (bizId: string, appId: number, projectId: string, envId: string) => + http.get(`/config/biz/${bizId}/projects/${projectId}/envs/${envId}/apps/${appId}/published/all`); diff --git a/ui/src/api/env.ts b/ui/src/api/env.ts index fc3a74ad1..f489824ed 100644 --- a/ui/src/api/env.ts +++ b/ui/src/api/env.ts @@ -5,7 +5,7 @@ import type { IUpdateEnvItem, IEnvQuery } from '../../types/env'; * 获取环境列表 */ export function getEnvList(biz_id: string, project_id: string, query: IEnvQuery) { - return http.post(`/config/biz/${biz_id}/projects/${project_id}/envs/list`, { + return http.post(`/config/biz/${biz_id}/projects/${project_id}/envs:list`, { ...query, }); } diff --git a/ui/src/api/group.ts b/ui/src/api/group.ts index 121f5d088..6facec16f 100644 --- a/ui/src/api/group.ts +++ b/ui/src/api/group.ts @@ -34,10 +34,12 @@ export const delCategory = (app_id: number, group_category_id: number) => * 获取服务下分组列表 * @param biz_id 空间ID * @param app_id 应用ID + * @param projectId 项目ID + * @param envId 环境ID * @returns */ -export const getServiceGroupList = (biz_id: string, app_id: number) => - http.get(`/config/biz/${biz_id}/apps/${app_id}/groups`).then((res) => { +export const getServiceGroupList = (biz_id: string, app_id: number, projectId: string, envId: string) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps/${app_id}/groups`).then((res) => { const defaultGroup = res.data.details.find((item: IGroupItemInService) => item.group_id === 0); if (defaultGroup) { defaultGroup.group_name = localT('全部实例'); @@ -48,63 +50,70 @@ export const getServiceGroupList = (biz_id: string, app_id: number) => /** * 获取空间下分组 * @param biz_id 空间ID + * @param projectId 项目ID * @returns */ -export const getSpaceGroupList = (biz_id: string, topId?: number) => - http.get(`/config/biz/${biz_id}/groups`, { params: { top_ids: topId } }).then((res) => res.data); +export const getSpaceGroupList = (biz_id: string, projectId?: string, topId?: number) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/groups`, { params: { top_ids: topId } }).then((res) => res.data); /** * 新增分组 - * @param app_id 应用ID + * @param biz_id 空间ID + * @param projectId 项目ID * @param params 分组编辑参数 * @returns */ -export const createGroup = (biz_id: string, params: IGroupEditArg) => - http.post(`/config/biz/${biz_id}/groups`, params).then((res) => res.data); +export const createGroup = (biz_id: string, projectId?: string, params: IGroupEditArg) => + http.post(`/config/biz/${biz_id}/projects/${projectId}/groups`, params).then((res) => res.data); /** * 编辑分组 * @param biz_id 空间ID * @param group_id 分组ID + * @param projectId 项目ID * @param params 分组编辑参数 * @returns */ -export const updateGroup = (biz_id: string, group_id: number, params: IGroupEditArg) => - http.put(`/config/biz/${biz_id}/groups/${group_id}`, params).then((res) => res.data); +export const updateGroup = (biz_id: string, group_id: number, projectId?: string, params: IGroupEditArg) => + http.put(`/config/biz/${biz_id}/projects/${projectId}/groups/${group_id}`, params).then((res) => res.data); /** * 删除分组 * @param biz_id 空间ID * @param group_id 分组ID + * @param projectId 项目ID * @returns */ -export const deleteGroup = (biz_id: string, group_id: number) => - http.delete(`/config/biz/${biz_id}/groups/${group_id}`); +export const deleteGroup = (biz_id: string, group_id: number, projectId?: string) => + http.delete(`/config/biz/${biz_id}/projects/${projectId}/groups/${group_id}`); /** * 批量删除分组 * @param biz_id 空间ID + * @param projectId 项目ID * @param ids 分组ID列表 * @returns */ -export const batchDeleteGroup = (biz_id: string, ids: number[]) => - http.post(`/config/biz/${biz_id}/groups/batch_delete`, { ids }); +export const batchDeleteGroup = (biz_id: string, projectId?: string, ids: number[]) => + http.post(`/config/biz/${biz_id}/projects/${projectId}/groups:batch_delete`, { ids }); /** * 获取分组已上线服务 * @param biz_id 空间ID * @param group_id 分组ID * @param params 查询参数 + * @param projectId 项目ID * @returns */ -export const getGroupReleasedApps = (biz_id: string, group_id: number, params: ICommonQuery) => - http.get(`/config/biz/${biz_id}/groups/${group_id}/released_apps`, { params }).then((res) => res.data); +export const getGroupReleasedApps = (biz_id: string, group_id: number, params: ICommonQuery, projectId?: string) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/groups/${group_id}/released_apps`, { params }).then((res) => res.data); /** * 获取分组选择器 * @param biz_id 空间ID * @param label_name 标签名称 + * @param projectId 项目ID * @returns */ -export const getGroupSelector = (biz_id: string, label_name: string) => - http.get(`/config/biz/${biz_id}/groups/selector/${label_name}`).then((res) => res.data); +export const getGroupSelector = (biz_id: string, label_name: string, projectId?: string) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/groups:selector/${label_name}`).then((res) => res.data); diff --git a/ui/src/api/index.ts b/ui/src/api/index.ts index d54c5e8eb..7a3c9e8e8 100644 --- a/ui/src/api/index.ts +++ b/ui/src/api/index.ts @@ -41,11 +41,13 @@ export const getSpaceFeatureFlag = (biz: string) => /** * 获取服务列表 * @param biz_id 业务ID - * @param params 查询过滤条件 + * @param projectId 项目ID + * @param envId 环境ID + * @param query 查询过滤条件 * @returns */ -export const getAppList = (biz_id: string, query: IAppListQuery = {}) => - http.post(`config/list/app/app/biz_id/${biz_id}`, query).then((resp) => { +export const getAppList = (biz_id: string, projectId: string, envId: string, query: IAppListQuery = {}) => + http.post(`config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps:list`, query).then((resp) => { resp.data.details.forEach((item: IAppItem) => { // @ts-ignore item.permissions = resp.web_annotations.perms[item.id] || {}; @@ -53,56 +55,70 @@ export const getAppList = (biz_id: string, query: IAppListQuery = {}) => return resp.data; }); -/** + /** * 获取服务下配置文件数量、更新时间等信息 + * @param biz_id 业务ID + * @param projectId 项目ID + * @param envId 环境ID + * @param app_id 服务ID数组 + * @returns */ -export const getAppsConfigData = (biz_id: string, app_id: number[]) => - http.post(`/config/config_item_count/biz_id/${biz_id}`, { biz_id, app_id }).then((resp) => resp.data); +export const getAppsConfigData = (biz_id: string, projectId: string, envId: string, app_id: number[]) => + http.post(`config/biz/${biz_id}/projects/${projectId}/envs/${envId}/config_items/count`, { biz_id, app_id }).then((resp) => resp.data); /** * 获取服务详情 * @param biz_id 业务ID + * @param projectId 项目ID + * @param envId 环境ID * @param app_id 服务ID * @returns */ -export const getAppDetail = (biz_id: string, app_id: number) => - http.get(`config/biz/${biz_id}/apps/${app_id}`).then((resp) => resp.data); +export const getAppDetail = (biz_id: string, projectId: string, envId: string, app_id: number) => + http.get(`config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps/${app_id}`).then((resp) => resp.data); /** * 删除服务 - * @param id 服务ID * @param biz_id 业务ID + * @param projectId 项目ID + * @param envId 环境ID + * @param id 服务ID * @returns */ -export const deleteApp = (id: number, biz_id: number) => - http.delete(`config/delete/app/app/app_id/${id}/biz_id/${biz_id}`); +export const deleteApp = (biz_id: string, projectId: string, envId: string, id: number) => + http.delete(`config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps/${id}`); /** * 创建服务 * @param biz_id 业务ID - * @param params + * @param projectId 项目ID + * @param envId 环境ID + * @param params 服务参数 * @returns */ -export const createApp = (biz_id: string, params: any) => - http.post(`config/create/app/app/biz_id/${biz_id}`, { biz_id, ...params }).then((resp) => resp.data); +export const createApp = (biz_id: string, projectId: string, envId: string, params: any) => + http.post(`config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps`, { ...params, biz_id }).then((resp) => resp.data); /** * 更新服务 - * @param params { id, biz_id, name?, memo?, reload_type?, reload_file_path? } + * @param params { id, biz_id, projectId, envId, name?, memo?, reload_type?, reload_file_path? } * @returns */ export const updateApp = (params: any) => { - const { id, biz_id, data } = params; - return http.put(`config/update/app/app/app_id/${id}/biz_id/${biz_id}`, data).then((resp) => resp.data); + const { biz_id, projectId, envId, id, data } = params; + return http.put(`config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps/${id}`, data).then((resp) => resp.data); }; /** * 克隆服务 + * @param biz_id 业务ID + * @param projectId 项目ID + * @param envId 环境ID * @param params { id, biz_id, name?, memo?, reload_type?, reload_file_path? } * @returns */ -export const cloneApp = (biz_id: string, params: any) => { - return http.post(`config/biz/${biz_id}/clone_app`, { biz_id, ...params }).then((resp) => resp.data); +export const cloneApp = (biz_id: string, projectId: string, envId: string, params: any) => { + return http.post(`config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps:clone`, { ...params, biz_id }).then((resp) => resp.data); }; /** diff --git a/ui/src/api/project.ts b/ui/src/api/project.ts index 69debed00..ce480e2b6 100644 --- a/ui/src/api/project.ts +++ b/ui/src/api/project.ts @@ -8,7 +8,7 @@ import { IProjectQuery, IProjectEditArg } from '../../types/project'; * @returns */ export const getProjectList = (biz_id: string, params: IProjectQuery) => - http.post(`/config/biz/${biz_id}/projects/list`, params); + http.post(`/config/biz/${biz_id}/projects:list`, params); /** * 创建项目 diff --git a/ui/src/api/script.ts b/ui/src/api/script.ts index 08ba7a9f9..9a56a7ae4 100644 --- a/ui/src/api/script.ts +++ b/ui/src/api/script.ts @@ -4,151 +4,178 @@ import { IScriptEditingForm, IScriptCiteQuery, IScriptListQuery } from '../../ty /** * 创建脚本 * @param biz_id 空间ID + * @param projectId 项目ID * @returns */ -export const createScript = (biz_id: string, params: IScriptEditingForm) => - http.post(`/config/biz/${biz_id}/hooks`, params).then((res) => res.data); +export const createScript = (biz_id: string, projectId: string, params: IScriptEditingForm) => + http.post(`/config/biz/${biz_id}/projects/${projectId}/hooks`, params).then((res) => res.data); /** * 更新脚本 * @param biz_id 空间ID + * @param projectId 项目ID * @param hook_id 脚本ID * @param params 编辑参数 * @returns */ -export const updateScript = (biz_id: string, hook_id: number, params: { memo: string; tags: string[] }) => - http.put(`/config/biz/${biz_id}/hooks/${hook_id}`, params).then((res) => res.data); +export const updateScript = ( + biz_id: string, + projectId: string, + hook_id: number, + params: { memo: string; tags: string[] }, +) => + http.put(`/config/biz/${biz_id}/projects/${projectId}/hooks/${hook_id}`, params).then((res) => res.data); /** * 获取脚本列表 * @param biz_id 空间ID + * @param projectId 项目ID * @param params 查询参数 * @returns */ - -export const getScriptList = (biz_id: string, params: IScriptListQuery) => - http.get(`/config/biz/${biz_id}/hooks`, { params }).then((res) => res.data); +export const getScriptList = (biz_id: string, projectId: string, params: IScriptListQuery) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/hooks`, { params }).then((res) => res.data); /** * 获取脚本详情 * @param biz_id 空间ID + * @param projectId 项目ID * @param id 脚本ID * @returns */ -export const getScriptDetail = (biz_id: string, id: number) => - http.get(`/config/biz/${biz_id}/hooks/${id}`).then((res) => res.data); +export const getScriptDetail = (biz_id: string, projectId: string, id: number) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/hooks/${id}`).then((res) => res.data); /** * 获取脚本某个版本下详情 * @param biz_id 空间ID + * @param projectId 项目ID * @param id 脚本ID * @param release_id 版本ID * @returns */ -export const getScriptVersionDetail = (biz_id: string, id: number, release_id: number) => - http.get(`/config/biz/${biz_id}/hooks/${id}/hook_revisions/${release_id}`).then((res) => res.data); +export const getScriptVersionDetail = (biz_id: string, projectId: string, id: number, release_id: number) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/hooks/${id}/hook_revisions/${release_id}`).then((res) => res.data); /** * 删除脚本 * @param biz_id 空间ID + * @param projectId 项目ID * @param id 脚本ID * @returns */ -export const deleteScript = (biz_id: string, id: number) => - http.delete(`/config/biz/${biz_id}/hooks/${id}`, { params: { force: true } }).then((res) => res.data); +export const deleteScript = (biz_id: string, projectId: string, id: number) => + http.delete(`/config/biz/${biz_id}/projects/${projectId}/hooks/${id}`, { params: { force: true } }).then((res) => res.data); /** * 批量删除脚本 * @param biz_id 空间ID + * @param projectId 项目ID * @param ids 脚本ID列表 * @param exclusion_operation 是否跨页 * @returns */ -export const batchDeleteScript = (biz_id: string, ids: number[], exclusion_operation: boolean) => +export const batchDeleteScript = (biz_id: string, projectId: string, ids: number[], exclusion_operation: boolean) => http - .post(`/config/biz/${biz_id}/hooks/batch_delete`, { force: false, ids, exclusion_operation }) + .post(`/config/biz/${biz_id}/projects/${projectId}/hooks:batch_delete`, { force: false, ids, exclusion_operation }) .then((res) => res.data); /** * 获取脚本标签列表 * @param biz_id 空间ID - * @param params 查询参数 + * @param projectId 项目ID * @returns */ -export const getScriptTagList = (biz_id: string) => http.get(`/config/biz/${biz_id}/hook_tags`).then((res) => res.data); +export const getScriptTagList = (biz_id: string, projectId: string) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/hooks:tags`).then((res) => res.data); /** * 获取脚本版本列表 * @param biz_id 空间ID + * @param projectId 项目ID * @param hook_id 脚本ID - * @param params 查询参数 + * @param query 查询参数 * @returns */ export const getScriptVersionList = ( biz_id: string, + projectId: string, hook_id: number, query: { start: number; limit?: number; searchKey?: string; all?: boolean }, -) => http.post(`/config/biz/${biz_id}/hooks/${hook_id}/hook_revisions/list`, query).then((res) => res.data); +) => http.post(`/config/biz/${biz_id}/projects/${projectId}/hooks/${hook_id}/hook_revisions/list`, query).then((res) => res.data); /** * 创建脚本版本 * @param biz_id 空间ID + * @param projectId 项目ID * @param hook_id 脚本ID * @param params 查询参数 * @returns */ -export const createScriptVersion = (biz_id: string, hook_id: number, params: { memo: string; content: string }) => - http.post(`/config/biz/${biz_id}/hooks/${hook_id}/hook_revisions`, params).then((res) => res.data); +export const createScriptVersion = ( + biz_id: string, + projectId: string, + hook_id: number, + params: { memo: string; content: string }, +) => + http.post(`/config/biz/${biz_id}/projects/${projectId}/hooks/${hook_id}/hook_revisions`, params).then((res) => res.data); /** * 更新脚本版本 * @param biz_id 空间ID + * @param projectId 项目ID * @param hook_id 脚本ID + * @param release_id 版本ID * @param params 查询参数 * @returns */ export const updateScriptVersion = ( biz_id: string, + projectId: string, hook_id: number, release_id: number, params: { name: string; memo: string; content: string }, -) => http.put(`/config/biz/${biz_id}/hooks/${hook_id}/hook_revisions/${release_id}`, params).then((res) => res.data); +) => http.put(`/config/biz/${biz_id}/projects/${projectId}/hooks/${hook_id}/hook_revisions/${release_id}`, params).then((res) => res.data); /** * 删除脚本版本 * @param biz_id 空间ID + * @param projectId 项目ID * @param hook_id 脚本ID * @param release_id 版本ID * @returns */ -export const deleteScriptVersion = (biz_id: string, hook_id: number, release_id: number) => +export const deleteScriptVersion = (biz_id: string, projectId: string, hook_id: number, release_id: number) => http - .delete(`/config/biz/${biz_id}/hooks/${hook_id}/hook_revisions/${release_id}`, { params: { force: true } }) + .delete(`/config/biz/${biz_id}/projects/${projectId}/hooks/${hook_id}/hook_revisions/${release_id}`, { params: { force: true } }) .then((res) => res.data); /** * 上线版本 * @param biz_id 空间ID + * @param projectId 项目ID * @param hook_id 脚本ID * @param release_id 版本ID * @returns */ -export const publishVersion = (biz_id: string, hook_id: number, release_id: number) => - http.put(`/config/biz/${biz_id}/hooks/${hook_id}/hook_revisions/${release_id}/publish`).then((res) => res.data); +export const publishVersion = (biz_id: string, projectId: string, hook_id: number, release_id: number) => + http.put(`/config/biz/${biz_id}/projects/${projectId}/hooks/${hook_id}/hook_revisions/${release_id}/publish`).then((res) => res.data); /** * 获取脚本被引用列表 * @param biz_id 空间ID + * @param projectId 项目ID * @param hook_id 脚本ID * @param params 查询参数 * @returns */ -export const getScriptCiteList = (biz_id: string, hook_id: number, params: IScriptCiteQuery) => - http.get(`/config/biz/${biz_id}/hooks/${hook_id}/references`, { params }).then((res) => res.data); +export const getScriptCiteList = (biz_id: string, projectId: string, hook_id: number, params: IScriptCiteQuery) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/hooks/${hook_id}/references`, { params }).then((res) => res.data); /** * 获取脚本某个版本被引用列表 * @param biz_id 空间ID + * @param projectId 项目ID * @param hook_id 脚本ID * @param version_id 版本ID * @param params 查询参数 @@ -156,12 +183,13 @@ export const getScriptCiteList = (biz_id: string, hook_id: number, params: IScri */ export const getScriptVersionCiteList = ( biz_id: string, + projectId: string, hook_id: number, version_id: number, params: IScriptCiteQuery, ) => http - .get(`/config/biz/${biz_id}/hooks/${hook_id}/hook_revisions/${version_id}/references`, { params }) + .get(`/config/biz/${biz_id}/projects/${projectId}/hooks/${hook_id}/hook_revisions/${version_id}/references`, { params }) .then((res) => res.data); // // 获取配置文件版本下的初始化脚本配置 diff --git a/ui/src/api/template.ts b/ui/src/api/template.ts index beb43d3c6..aa7a334f1 100644 --- a/ui/src/api/template.ts +++ b/ui/src/api/template.ts @@ -6,53 +6,64 @@ import { IConfigEditParams } from '../../types/config'; /** * 获取模板空间列表 * @param biz_id 业务ID + * @param projectId 项目ID * @param params 查询参数 * @returns */ -export const getTemplateSpaceList = (biz_id: string, params: ICommonQuery) => - http.get(`/config/biz/${biz_id}/template_spaces`, { params }).then((res) => res.data); +export const getTemplateSpaceList = (biz_id: string, projectId: string, params: ICommonQuery) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/template_spaces`, { params }).then((res) => res.data); /** * 创建模板空间 * @param biz_id 业务ID + * @param projectId 项目ID * @param params 创建模板参数 * @returns */ -export const createTemplateSpace = (biz_id: string, params: { name: string; memo: string }) => - http.post(`/config/biz/${biz_id}/template_spaces`, params).then((res) => res.data); +export const createTemplateSpace = (biz_id: string, projectId: string, params: { name: string; memo: string }) => + http.post(`/config/biz/${biz_id}/projects/${projectId}/template_spaces`, params).then((res) => res.data); /** * 更新模板空间 * @param biz_id 业务ID - * @param id 模板ID + * @param projectId 项目ID + * @param id 模板空间ID * @param params 模板参数 * @returns */ -export const updateTemplateSpace = (biz_id: string, id: number, params: { memo: string }) => - http.put(`/config/biz/${biz_id}/template_spaces/${id}`, params).then((res) => res.data); +export const updateTemplateSpace = (biz_id: string, projectId: string, id: number, params: { memo: string }) => + http.put(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${id}`, params).then((res) => res.data); /** * 删除模板空间 * @param biz_id 业务ID - * @param id 模板ID + * @param projectId 项目ID + * @param id 模板空间ID * @returns */ -export const deleteTemplateSpace = (biz_id: string, id: number) => - http.delete(`/config/biz/${biz_id}/template_spaces/${id}`); +export const deleteTemplateSpace = (biz_id: string, projectId: string, id: number) => + http.delete(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${id}`); /** * 创建模板套餐 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 模板空间ID * @param params 创建模板套餐参数 * @returns */ -export const createTemplatePackage = (biz_id: string, template_space_id: number, params: ITemplatePackageEditParams) => - http.post(`/config/biz/${biz_id}/template_spaces/${template_space_id}/template_sets`, params).then((res) => res.data); +export const createTemplatePackage = ( + biz_id: string, + projectId: string, + template_space_id: number, + params: ITemplatePackageEditParams, +) => + http.post(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/template_sets`, params).then((res) => res.data); /** * 编辑模板套餐 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 模板空间ID * @param template_set_id 模板套餐ID * @param params 编辑模板套餐参数 @@ -60,24 +71,31 @@ export const createTemplatePackage = (biz_id: string, template_space_id: number, */ export const updateTemplatePackage = ( biz_id: string, + projectId: string, template_space_id: number, template_set_id: number, params: ITemplatePackageEditParams, ) => http - .put(`/config/biz/${biz_id}/template_spaces/${template_space_id}/template_sets/${template_set_id}`, params) + .put(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/template_sets/${template_set_id}`, params) .then((res) => res.data); /** * 删除模板套餐 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 模板空间ID * @param template_set_id 模板套餐ID * @returns */ -export const deleteTemplatePackage = (biz_id: string, template_space_id: number, template_set_id: number) => +export const deleteTemplatePackage = ( + biz_id: string, + projectId: string, + template_space_id: number, + template_set_id: number, +) => http - .delete(`/config/biz/${biz_id}/template_spaces/${template_space_id}/template_sets/${template_set_id}`, { + .delete(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/template_sets/${template_set_id}`, { params: { force: true }, }) .then((res) => res.data); @@ -85,14 +103,20 @@ export const deleteTemplatePackage = (biz_id: string, template_space_id: number, /** * 导出模板套餐 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 模板空间ID * @param template_id 模板套餐ID * @returns */ -export const exportTemplatePackage = (biz_id: string, template_space_id: number, template_id: number) => +export const exportTemplatePackage = ( + biz_id: string, + projectId: string, + template_space_id: number, + template_id: number +) => http .get( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/${template_id}/export`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/${template_id}/export`, { transitional: { forcedJSONParsing: false, @@ -105,49 +129,69 @@ export const exportTemplatePackage = (biz_id: string, template_space_id: number, /** * 获取空间下的模板套餐列表 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 模板空间ID * @param params 查询参数 * @returns */ -export const getTemplatePackageList = (biz_id: string, template_space_id: string, params: ICommonQuery) => +export const getTemplatePackageList = ( + biz_id: string, + projectId: string, + template_space_id: string, + params: ICommonQuery, +) => http - .get(`/config/biz/${biz_id}/template_spaces/${template_space_id}/template_sets`, { params }) + .get(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/template_sets`, { params }) .then((res) => res.data); /** * 获取业务下所有模板套餐(按模板空间分组) * @param biz_id 业务ID + * @param projectId 项目ID * @param params 查询参数,传app_id可筛选服务下的套餐模板 * @returns */ -export const getAllPackagesGroupBySpace = (biz_id: string, params: { app_id?: number }) => - http.get(`/config/biz/${biz_id}/template_sets/list_all_of_biz`, { params }).then((res) => res.data); +export const getAllPackagesGroupBySpace = (biz_id: string, projectId: string, params: { app_id?: number }) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/template_sets/list_all_of_biz`, { params }).then((res) => res.data); /** * 获取模板空间下的全部配置文件模板列表 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 模板空间ID * @returns */ -export const getTemplatesBySpaceId = (biz_id: string, template_space_id: number, params: ICommonQuery) => +export const getTemplatesBySpaceId = ( + biz_id: string, + projectId: string, + template_space_id: number, + params: ICommonQuery, +) => http - .post(`/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/list`, params) + .post(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/list`, params) .then((res) => res.data); /** * 获取模板空间下未指定套餐的模板列表 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 模板空间ID * @returns */ -export const getTemplatesWithNoSpecifiedPackage = (biz_id: string, template_space_id: number, params: ICommonQuery) => +export const getTemplatesWithNoSpecifiedPackage = ( + biz_id: string, + projectId: string, + template_space_id: number, + params: ICommonQuery, +) => http - .post(`/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/list_not_bound`, params) + .post(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/list_not_bound`, params) .then((res) => res.data); /** * 获取当前模板套餐被未命名版本引用的服务引用列表 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 模板空间ID * @param template_set_id 模板套餐Id * @param params 查询参数 @@ -155,13 +199,14 @@ export const getTemplatesWithNoSpecifiedPackage = (biz_id: string, template_spac */ export const getUnNamedVersionAppsBoundByPackage = ( biz_id: string, + projectId: string, template_space_id: number, template_set_id: number, params: ICommonQuery, ) => http .get( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/template_sets/${template_set_id}/bound_unnamed_app_details`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/template_sets/${template_set_id}/bound_unnamed_app_details`, { params }, ) .then((res) => res.data); @@ -169,17 +214,19 @@ export const getUnNamedVersionAppsBoundByPackage = ( /** * 获取多个模板套餐被未命名版本引用的服务引用列表 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 模板空间ID * @returns */ export const getUnNamedVersionAppsBoundByPackages = ( biz_id: string, + projectId: string, template_space_id: number, template_sets: number[], params: ICommonQuery, ) => http - .get(`/config/biz/${biz_id}/template_spaces/${template_space_id}/template_sets/bound_unnamed_app_details`, { + .get(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/template_sets/bound_unnamed_app_details`, { params: { template_set_ids: template_sets.join(','), ...params }, }) .then((res) => res.data); @@ -194,6 +241,7 @@ export const getUnNamedVersionAppsBoundByPackages = ( */ export const getCheckTemplateSetReferencesApps = ( biz_id: string, + projectId: string, template_space_id: number, template_set_ids: number[], items: { @@ -203,7 +251,7 @@ export const getCheckTemplateSetReferencesApps = ( ) => http .post( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/template_sets/check_template_set_references_apps`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/template_sets/check_template_set_references_apps`, { template_set_ids, items, @@ -214,6 +262,7 @@ export const getCheckTemplateSetReferencesApps = ( /** * 获取当前模板套餐被已生成版本引用的服务引用列表 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 模板空间ID * @param template_set_id 模板套餐Id * @param params 查询参数 @@ -221,13 +270,14 @@ export const getCheckTemplateSetReferencesApps = ( */ export const getReleasedVersionAppsBoundByPackage = ( biz_id: string, + projectId: string, template_space_id: number, template_set_id: number, params: ICommonQuery, ) => http .get( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/template_sets/${template_set_id}/bound_unnamed_app_details`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/template_sets/${template_set_id}/bound_unnamed_app_details`, { params }, ) .then((res) => res.data); @@ -235,18 +285,20 @@ export const getReleasedVersionAppsBoundByPackage = ( /** * 获取模板套餐下的配置文件模板列表 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 模板空间ID * @returns */ export const getTemplatesByPackageId = ( biz_id: string, + projectId: string, template_space_id: number, template_set_id: number, params: ICommonQuery, ) => http .post( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/template_sets/${template_set_id}/templates`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/template_sets/${template_set_id}/templates`, params, ) .then((res) => res.data); @@ -254,12 +306,18 @@ export const getTemplatesByPackageId = ( /** * 创建模板 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param params 配置文件参数 * @returns */ -export const createTemplate = (biz_id: string, template_space_id: number, params: IConfigEditParams) => - http.post(`/config/biz/${biz_id}/template_spaces/${template_space_id}/templates`, params); +export const createTemplate = ( + biz_id: string, + projectId: string, + template_space_id: number, + params: IConfigEditParams, +) => + http.post(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates`, params); /** * 上传模板配置内容 @@ -336,6 +394,7 @@ export const getTemplateUploadFileIsExist = (bizId: string, templateSpaceId: num /** * 批量删除模板 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_ids 模板ID列表 * @param exclusion_operation 是否跨页全选 @@ -343,26 +402,29 @@ export const getTemplateUploadFileIsExist = (bizId: string, templateSpaceId: num */ export const deleteTemplate = ( biz_id: string, + projectId: string, template_space_id: number, template_ids: number[], exclusion_operation: boolean, ) => - http.delete(`/config/biz/${biz_id}/template_spaces/${template_space_id}/templates`, { + http.delete(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates`, { params: { template_ids: template_ids.join(','), exclusion_operation }, }); /** * 根据模板id列表查询对应模板详情 * @param biz_id 业务ID + * @param projectId 项目ID * @param ids 模板ID列表 * @returns */ -export const getTemplatesDetailByIds = (biz_id: string, ids: number[]) => - http.post(`/config/biz/${biz_id}/templates/list_by_ids`, { ids }).then((res) => res.data); +export const getTemplatesDetailByIds = (biz_id: string, projectId: string, ids: number[]) => + http.post(`/config/biz/${biz_id}/projects/${projectId}/templates/list_by_ids`, { ids }).then((res) => res.data); /** * 添加模版到模版套餐(多个模板添加到多个套餐) * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_id 模板ID * @param template_set_ids 模板套餐列表 @@ -373,6 +435,7 @@ export const getTemplatesDetailByIds = (biz_id: string, ids: number[]) => */ export const addTemplateToPackage = ( biz_id: string, + projectId: string, template_space_id: number, template_ids: number[], template_set_ids: number[], @@ -381,7 +444,7 @@ export const addTemplateToPackage = ( no_set_specified: boolean, ) => http.post( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/template_set/${template_set_id}/templates/add_to_template_sets`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/template_set/${template_set_id}/templates/add_to_template_sets`, { template_set_ids, template_ids, @@ -393,22 +456,22 @@ export const addTemplateToPackage = ( /** * 将模版移出套餐(多个模板移出多个套餐) * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_id 模板ID * @param template_set_ids 模板套餐列表 * @param exclusion_operation 是否跨页全选 - * @param template_set_id 正在操作的套餐id,全部套餐和未指定套餐传0 - * @param no_set_specified 是否未指定套餐 * @returns */ export const moveOutTemplateFromPackage = ( biz_id: string, + projectId: string, template_space_id: number, template_ids: number[], template_set_ids: number[], exclusion_operation: boolean, ) => - http.post(`/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/delete_from_template_sets`, { + http.post(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/delete_from_template_sets`, { template_ids, template_set_ids, exclusion_operation, @@ -417,6 +480,7 @@ export const moveOutTemplateFromPackage = ( /** * 查询单个模板被套餐引用详情 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_id 模板ID * @param params 列表查询参数 @@ -424,13 +488,14 @@ export const moveOutTemplateFromPackage = ( */ export const getPackagesByTemplateId = ( biz_id: string, + projectId: string, template_space_id: number, template_id: number, params: ICommonQuery, ) => http .get( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/${template_id}/bound_template_set_details`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/${template_id}/bound_template_set_details`, { params }, ) .then((res) => res.data); @@ -438,19 +503,24 @@ export const getPackagesByTemplateId = ( /** * 查询多个模板被套餐引用详情 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_ids 模板ID * @param params 列表查询参数 * @returns */ -export const getPackagesByTemplateIds = (biz_id: string, template_space_id: number, template_ids: number[]) => { +export const getPackagesByTemplateIds = ( + biz_id: string, + projectId: string, + template_space_id: number, + template_ids: number[]) => { const params = { template_ids: template_ids.join(','), start: 0, all: true, }; return http - .get(`/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/bound_template_set_details`, { params }) + .get(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/bound_template_set_details`, { params }) .then((res) => { const list: ITemplateCitedByPkgs[][] = []; template_ids.forEach((id, index) => { @@ -464,18 +534,24 @@ export const getPackagesByTemplateIds = (biz_id: string, template_space_id: numb /** * 查询模板被引用计数 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_ids 模板ID列表 * @returns */ -export const getCountsByTemplateIds = (biz_id: string, template_space_id: number, template_ids: number[]) => +export const getCountsByTemplateIds = ( + biz_id: string, + projectId: string, + template_space_id: number, + template_ids: number[]) => http - .post(`/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/bound_counts`, { template_ids }) + .post(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/bound_counts`, { template_ids }) .then((res) => res.data); /** * 查询模板被未命名版本服务引用详情 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_id 模板ID * @param params 列表查询参数 @@ -483,13 +559,14 @@ export const getCountsByTemplateIds = (biz_id: string, template_space_id: number */ export const getUnNamedVersionAppsBoundByTemplate = ( biz_id: string, + projectId: string, template_space_id: number, template_id: number, params: ICommonQuery, ) => http .get( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/${template_id}/bound_unnamed_app_details`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/${template_id}/bound_unnamed_app_details`, { params }, ) .then((res) => res.data); @@ -497,6 +574,7 @@ export const getUnNamedVersionAppsBoundByTemplate = ( /** * 创建模板版本 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_id 模板ID * @param params 模板配置参数 @@ -504,13 +582,14 @@ export const getUnNamedVersionAppsBoundByTemplate = ( */ export const createTemplateVersion = ( biz_id: string, + projectId: string, template_space_id: number, template_id: number, params: ITemplateVersionEditingData, ) => http .post( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions`, params, ) .then((res) => res.data); @@ -518,6 +597,7 @@ export const createTemplateVersion = ( /** * 获取模板版本列表 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_id 模板ID * @param params 查询参数 @@ -525,13 +605,14 @@ export const createTemplateVersion = ( */ export const getTemplateVersionList = ( biz_id: string, + projectId: string, template_space_id: number, template_id: number, params: ICommonQuery, ) => http .post( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions/list`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions/list`, params, ) .then((res) => res.data); @@ -539,15 +620,17 @@ export const getTemplateVersionList = ( /** * 根据模板版本id列表查询对应模板版本详情 * @param biz_id 业务ID + * @param projectId 项目ID * @param ids 模板版本ID列表 * @returns */ -export const getTemplateVersionsDetailByIds = (biz_id: string, ids: number[]) => - http.post(`/config/biz/${biz_id}/template_revisions/list_by_ids`, { ids }).then((res) => res.data); +export const getTemplateVersionsDetailByIds = (biz_id: string, projectId: string, ids: number[]) => + http.post(`/config/biz/${biz_id}/projects/${projectId}/template_revisions/list_by_ids`, { ids }).then((res) => res.data); /** * * @param biz_id 业务ID + * @param projectId 项目ID * @param app_id 应用ID * @param release_id 应用版本ID * @param template_revision_id 模板版本ID @@ -555,12 +638,13 @@ export const getTemplateVersionsDetailByIds = (biz_id: string, ids: number[]) => */ export const getTemplateVersionDetail = ( biz_id: string, + projectId: string, app_id: number, release_id: number, template_revision_id: number, ) => http - .get(`/config/biz/${biz_id}/apps/${app_id}/releases/${release_id}/template_revisions/${template_revision_id}`) + .get(`/config/biz/${biz_id}/projects/${projectId}/apps/${app_id}/releases/${release_id}/template_revisions/${template_revision_id}`) .then((res) => res.data); /** @@ -584,6 +668,7 @@ export const deleteTemplateVersion = ( /** * 查询模板版本被引用计数 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_id 模板ID * @param ids 版本ID列表 @@ -591,13 +676,14 @@ export const deleteTemplateVersion = ( */ export const getCountsByTemplateVersionIds = ( biz_id: string, + projectId: string, template_space_id: number, template_id: number, ids: number[], ) => http .post( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions/bound_counts`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions/bound_counts`, { template_revision_ids: ids }, ) .then((res) => res.data); @@ -605,6 +691,7 @@ export const getCountsByTemplateVersionIds = ( /** * 获取模板版本被未命名版本服务引用详情 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_id 模板ID * @param template_revision_id 版本ID @@ -612,6 +699,7 @@ export const getCountsByTemplateVersionIds = ( */ export const getUnNamedVersionAppsBoundByTemplateVersion = ( biz_id: string, + projectId: string, template_space_id: number, template_id: number, template_revision_id: number, @@ -619,7 +707,7 @@ export const getUnNamedVersionAppsBoundByTemplateVersion = ( ) => http .get( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions/${template_revision_id}/bound_unnamed_app_details`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions/${template_revision_id}/bound_unnamed_app_details`, { params }, ) .then((res) => res.data); @@ -627,19 +715,21 @@ export const getUnNamedVersionAppsBoundByTemplateVersion = ( /** * 获取模板latest版本被未命名版本服务引用详情 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_id 模板ID * @returns */ export const getUnNamedVersionAppsBoundByLatestTemplateVersion = ( biz_id: string, + projectId: string, template_space_id: number, template_id: number, params: ICommonQuery, ) => http .get( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/${template_id}/latest/bound_unnamed_app_details`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/${template_id}/latest/bound_unnamed_app_details`, { params }, ) .then((res) => res.data); @@ -647,6 +737,7 @@ export const getUnNamedVersionAppsBoundByLatestTemplateVersion = ( /** * 获取模板版被已生成版本服务引用详情 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_id 模板ID * @param template_revision_id 版本ID @@ -654,6 +745,7 @@ export const getUnNamedVersionAppsBoundByLatestTemplateVersion = ( */ export const getAppsVersionBoundByTemplateVersion = ( biz_id: string, + projectId: string, template_space_id: number, template_id: number, template_revision_id: number, @@ -661,7 +753,7 @@ export const getAppsVersionBoundByTemplateVersion = ( ) => http .get( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions/${template_revision_id}/bound_named_app_details`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions/${template_revision_id}/bound_named_app_details`, { params }, ) .then((res) => res.data); @@ -669,32 +761,37 @@ export const getAppsVersionBoundByTemplateVersion = ( /** * 查询模板套餐和服务的绑定关系 * @param biz_id 业务ID + * @param projectId 项目ID + * @param envId 环境ID * @param app_id 应用ID * @returns */ -export const getAppPkgBindingRelations = (biz_id: string, app_id: number) => - http.get(`/config/biz/${biz_id}/apps/${app_id}/template_bindings`).then((res) => res.data); +export const getAppPkgBindingRelations = (biz_id: string, projectId: string, envId: string, app_id: number) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/envs/${envId}/apps/${app_id}/template_bindings`).then((res) => res.data); /** * 批量查询模板的版本名称 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_ids 模板ID列表 * @returns */ -export const getTemplateVersionsNameByIds = (biz_id: string, template_ids: number[]) => +export const getTemplateVersionsNameByIds = (biz_id: string, projectId: string, template_ids: number[]) => http - .post(`/config/biz/${biz_id}/template_revisions/list_names_by_template_ids`, { template_ids }) + .post(`/config/biz/${biz_id}/projects/${projectId}/template_revisions/list_names_by_template_ids`, { template_ids }) .then((res) => res.data); /** * 导入配置文件压缩包 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间id - * @param fill 导入文件 + * @param file 导入文件 * @returns */ export const importTemplateFile = ( biz_id: string, + projectId: string, template_space_id: number, file: any, isDecompression: boolean, @@ -702,7 +799,7 @@ export const importTemplateFile = ( ) => http .post( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/import/${encodeURIComponent(file.name)}`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/import/${encodeURIComponent(file.name)}`, file, { headers: { @@ -719,18 +816,20 @@ export const importTemplateFile = ( /** * 模板批量新增 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间id * @param configData 配置列表 * @returns */ export const importTemplateBatchAdd = ( biz_id: string, + projectId: string, template_space_id: number, configData: any, template_set_ids: number[], ) => http - .post(`/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/batch_upsert_templates`, { + .post(`/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/batch_upsert_templates`, { items: configData, template_set_ids, }) @@ -739,32 +838,34 @@ export const importTemplateBatchAdd = ( /** * 批量修改模板权限 * @param biz_id 业务ID - * @param template_space_id 空间id - * @param configData 配置列表 + * @param projectId 项目ID + * @param query 配置列表 * @param exclusion_operation // 是否跨页 * @param template_set_id // 正在操作的套餐id,全部套餐和未指定传0 * @param no_set_specified // 是否未指定套餐 * @returns */ -export const batchEditTemplatePermission = (biz_id: string, query: any) => +export const batchEditTemplatePermission = (biz_id: string, projectId: string, query: any) => http.post( - `/config/biz/${biz_id}/template_spaces/${query.template_space_id}/template_set/${query.template_set_id}/templates/batch_update_templates_permissions`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${query.template_space_id}/template_set/${query.template_set_id}/templates/batch_update_templates_permissions`, query, ); /** * 获取配置模板配置项元信息 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_id 模板id * @param revision_name 版本名称 * @returns */ -export const getTemplateConfigMeta = (biz_id: string, template_id: number, revision_name?: string) => - http.get(`/config/biz/${biz_id}/templates/${template_id}/template_revisions`, { params: { revision_name } }); +export const getTemplateConfigMeta = (biz_id: string, projectId: string, template_id: number, revision_name?: string) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/templates/${template_id}/template_revisions`, { params: { revision_name } }); /** * 编辑模板配置文件 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_space_id 空间ID * @param template_id 模板ID * @param params 模板配置参数 @@ -772,13 +873,14 @@ export const getTemplateConfigMeta = (biz_id: string, template_id: number, revis */ export const updateTemplateConfig = ( biz_id: string, + projectId: string, template_space_id: number, template_id: number, params: ITemplateVersionEditingData, ) => http .put( - `/config/biz/${biz_id}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions`, + `/config/biz/${biz_id}/projects/${projectId}/template_spaces/${template_space_id}/templates/${template_id}/template_revisions`, params, ) .then((res) => res.data); @@ -786,8 +888,9 @@ export const updateTemplateConfig = ( /** * 根据模板套餐获取模板版本列表 * @param biz_id 业务ID + * @param projectId 项目ID * @param template_id 模板ID * @returns */ -export const getTemplateRevisionsFromPkgId = (biz_id: string, pkgId: number) => - http.get(`/config/biz/${biz_id}/template_sets/${pkgId}/template_revisions`).then((res) => res.data); +export const getTemplateRevisionsFromPkgId = (biz_id: string, projectId: string, pkgId: number) => + http.get(`/config/biz/${biz_id}/projects/${projectId}/template_sets/${pkgId}/template_revisions`).then((res) => res.data); diff --git a/ui/src/api/variable.ts b/ui/src/api/variable.ts index 33be8db23..f12c2fd02 100644 --- a/ui/src/api/variable.ts +++ b/ui/src/api/variable.ts @@ -5,156 +5,212 @@ import { IVariableEditParams, IVariableImportParams } from '../../types/variable /** * 查询变量列表 * @param biz_id 业务ID + * @param project_id 项目ID * @param params * @returns */ -export const getVariableList = (biz_id: string, params: ICommonQuery) => - http.post(`/config/biz/${biz_id}/template_variables/list`, params).then((res) => res.data); +export const getVariableList = (biz_id: string, project_id: string, params: ICommonQuery) => + http.post(`/config/biz/${biz_id}/projects/${project_id}/template_variables:list`, params).then((res) => res.data); /** * 创建变量 * @param biz_id 业务ID + * @param project_id 项目ID * @param params 创建参数 * @returns */ -export const createVariable = (biz_id: string, params: IVariableEditParams) => - http.post(`/config/biz/${biz_id}/template_variables`, params); +export const createVariable = (biz_id: string, project_id: string, params: IVariableEditParams) => + http.post(`/config/biz/${biz_id}/projects/${project_id}/template_variables`, params); /** * 编辑变量 * @param biz_id 业务ID + * @param project_id 项目ID * @param template_variable_id 变量ID * @param params 编辑参数 * @returns */ export const updateVariable = ( biz_id: string, + project_id: string, template_variable_id: number, params: { default_val: string; memo: string }, -) => http.put(`/config/biz/${biz_id}/template_variables/${template_variable_id}`, params); +) => http.put(`/config/biz/${biz_id}/projects/${project_id}/template_variables/${template_variable_id}`, params); /** * 删除变量 * @param biz_id 业务ID + * @param project_id 项目ID * @param template_variable_id 变量ID * @returns */ -export const deleteVariable = (biz_id: string, template_variable_id: number) => - http.delete(`/config/biz/${biz_id}/template_variables/${template_variable_id}`); +export const deleteVariable = (biz_id: string, project_id: string, template_variable_id: number) => + http.delete(`/config/biz/${biz_id}/projects/${project_id}/template_variables/${template_variable_id}`); /** * 批量删除变量 * @param bizId 业务ID + * @param project_id 项目ID * @param ids 变量ID列表 * @param exclusion_operation 是否跨页 */ -export const batchDeleteVariable = (biz_id: string, ids: number[], exclusion_operation: boolean) => - http.post(`/config/biz/${biz_id}/template_variables/batch_delete`, { ids, exclusion_operation }); +export const batchDeleteVariable = (biz_id: string, project_id: string, ids: number[], exclusion_operation: boolean) => + http.post(`/config/biz/${biz_id}/projects/${project_id}/template_variables:batch_delete`, { ids, exclusion_operation }); /** * 获取未命名版本服务变量列表 * @param biz_id 业务ID + * @param project_id 项目ID + * @param env_id 环境ID * @param app_id 应用ID * @returns */ -export const getUnReleasedAppVariables = (biz_id: string, app_id: number) => - http.get(`/config/biz/${biz_id}/apps/${app_id}/template_variables`).then((res) => res.data); +export const getUnReleasedAppVariables = (biz_id: string, project_id: string, env_id: string, app_id: number) => + http.get(`/config/biz/${biz_id}/projects/${project_id}/envs/${env_id}/apps/${app_id}/template_variables`).then((res) => res.data); /** * 更新未命名版本服务变量列表 * @param biz_id 业务ID + * @param project_id 项目ID + * @param env_id 环境ID * @param app_id 应用ID * @returns */ -export const updateUnReleasedAppVariables = (biz_id: string, app_id: number, variables: IVariableEditParams[]) => - http.put(`/config/biz/${biz_id}/apps/${app_id}/template_variables`, { variables }).then((res) => res.data); +export const updateUnReleasedAppVariables = ( + biz_id: string, + project_id: string, + env_id: string, + app_id: number, + variables: IVariableEditParams[] +) => + http.put(`/config/biz/${biz_id}/projects/${project_id}/envs/${env_id}/apps/${app_id}/template_variables`, { variables }).then((res) => res.data); /** * 获取服务某个版本的变量列表 * @param biz_id 业务ID + * @param project_id 项目ID + * @param env_id 环境ID * @param app_id 应用ID * @param release_id 服务版本ID * @returns */ -export const getReleasedAppVariables = (biz_id: string, app_id: number, release_id: number) => +export const getReleasedAppVariables = ( + biz_id: string, + project_id: string, + env_id: string, + app_id: number, + release_id: number) => http - .get(`/config/biz/${biz_id}/apps/${app_id}/releases/${release_id}/template_variables`, { params: {} }) + .get(`/config/biz/${biz_id}/projects/${project_id}/envs/${env_id}/apps/${app_id}/releases/${release_id}/template_variables`, { params: {} }) .then((res) => res.data); /** * 查询未命名版本服务中变量被配置文件引用详情 * @param biz_id 业务ID + * @param project_id 项目ID + * @param env_id 环境ID * @param app_id 应用ID * @returns */ -export const getUnReleasedAppVariablesCitedDetail = (biz_id: string, app_id: number) => - http.get(`/config/biz/${biz_id}/apps/${app_id}/template_variables_references`).then((res) => res.data); +export const getUnReleasedAppVariablesCitedDetail = ( + biz_id: string, + project_id: string, + env_id: string, + app_id: number) => + http.get(`/config/biz/${biz_id}/projects/${project_id}/envs/${env_id}/apps/${app_id}/template_variables_references`).then((res) => res.data); /** * 查询服务某个版本的变量被配置文件引用详情 * @param biz_id 业务ID + * @param project_id 项目ID + * @param env_id 环境ID * @param app_id 应用ID * @param release_id 服务版本ID * @returns */ -export const getReleasedAppVariablesCitedDetail = (biz_id: string, app_id: number, release_id: number) => +export const getReleasedAppVariablesCitedDetail = ( + biz_id: string, + project_id: string, + env_id: string, + app_id: number, + release_id: number) => http - .get(`/config/biz/${biz_id}/apps/${app_id}/releases/${release_id}/template_variables_references`) + .get(`/config/biz/${biz_id}/projects/${project_id}/envs/${env_id}/apps/${app_id}/releases/${release_id}/template_variables_references`) .then((res) => res.data); /** * 批量导入变量文本 * @param biz_id 业务ID - * @param release_id 服务版本ID + * @param project_id 项目ID + * @param params 导入参数 * @returns */ -export const importVariablesText = (biz_id: string, params: IVariableImportParams) => - http.post(`config/biz/${biz_id}/template_variables/import`, params); +export const importVariablesText = (biz_id: string, project_id: string, params: IVariableImportParams) => + http.post(`config/biz/${biz_id}/projects/${project_id}/template_variables:import`, params); /** * 批量导入JSON * @param biz_id 业务ID - * @param release_id 服务版本ID + * @param project_id 项目ID + * @param content JSON内容 * @returns */ -export const importVariablesJSON = (biz_id: string, content: string) => - http.post(`config/biz/${biz_id}/template_variables/json/import`, { data: content }); +export const importVariablesJSON = (biz_id: string, project_id: string, content: string) => + http.post(`config/biz/${biz_id}/projects/${project_id}/template_variables:import/json`, { data: content }); /** * 批量导入YAML * @param biz_id 业务ID - * @param release_id 服务版本ID + * @param project_id 项目ID + * @param content YAML内容 * @returns */ -export const importVariablesYaml = (biz_id: string, content: string) => - http.post(`config/biz/${biz_id}/template_variables/yaml/import`, { data: content }); +export const importVariablesYaml = (biz_id: string, project_id: string, content: string) => + http.post(`config/biz/${biz_id}/projects/${project_id}/template_variables:import/yaml`, { data: content }); /** * 导出变量 * @param biz_id 业务ID + * @param project_id 项目ID * @param type 导出格式 * @returns */ -export const exportVariables = (biz_id: string, type: string) => - http.get(`config/biz/${biz_id}/variables/export?format=${type}`); +export const exportVariables = (biz_id: string, project_id: string, type: string) => + http.get(`config/biz/${biz_id}/projects/${project_id}/variables/export?format=${type}`); /** * 导出未命名版本变量 * @param bizId 业务ID + * @param project_id 项目ID + * @param env_id 环境ID * @param appId 应用ID * @param format 导出格式 * @returns */ -export const exportUnReleasedVariables = (bizId: string, appId: number, format: string) => - http.get(`config/biz/${bizId}/apps/${appId}/variables/export`, { params: { format } }); +export const exportUnReleasedVariables = ( + bizId: string, + project_id: string, + env_id: string, + appId: number, + format: string) => + http.get(`config/biz/${bizId}/projects/${project_id}/envs/${env_id}/apps/${appId}/variables/export`, { params: { format } }); /** * 导出已发布版本变量 * @param bizId 业务ID + * @param project_id 项目ID + * @param env_id 环境ID * @param appId 应用ID * @param release_id 服务版本ID * @param format 导出格式 * @returns */ -export const exportReleasedVaribles = (bizId: string, appId: number, release_id: number, format: string) => - http.get(`config/biz/${bizId}/apps/${appId}/releases/${release_id}/variables/export`, { params: { format } }); +export const exportReleasedVaribles = ( + bizId: string, + project_id: string, + env_id: string, + appId: number, + release_id: number, + format: string +) => + http.get(`config/biz/${bizId}/projects/${project_id}/envs/${env_id}/apps/${appId}/releases/${release_id}/variables/export`, { params: { format } }); diff --git a/ui/src/components/biz-project-selector.vue b/ui/src/components/biz-project-selector.vue index 1fb0e41be..657a3812b 100644 --- a/ui/src/components/biz-project-selector.vue +++ b/ui/src/components/biz-project-selector.vue @@ -117,9 +117,8 @@ import useTemplateStore from '../store/template'; import useGlobalStore from '../store/global'; import { ISpaceDetail } from '../../types/index'; - import { getProjectList } from '../api/project'; import type { IProjectItem } from '../../types/project'; - import { hasProjectConcept, saveSpaceToProjectId } from '../utils/project'; + import { hasProjectConcept, getCachedProjectList } from '../utils/project'; const { t } = useI18n(); const route = useRoute(); @@ -159,17 +158,11 @@ // 当前正在加载项目列表的业务ID const projectLoading = ref(false); - // 获取指定业务的项目列表(公共方法,消除重复逻辑) + // 获取指定业务的项目列表(走模块级共享缓存,避免重复请求) const fetchProjectList = async (bizId: string) => { - // 如果已缓存且不为空,直接返回缓存数据 - if (bizProjectsMap.value[bizId]?.length > 0) { - return bizProjectsMap.value[bizId]; - } - projectLoading.value = true; try { - const res = await getProjectList(bizId, { all: true }); - const projects = res.data?.projects || []; + const projects = await getCachedProjectList(bizId); // 使用 Vue 3 的响应式 API 正确更新 bizProjectsMap.value = { ...bizProjectsMap.value, @@ -361,9 +354,6 @@ selectedProjectId.value = strProjectId; tempSelectedBizId.value = ''; - // 保存 spaceId 到 projectId 的映射 - saveSpaceToProjectId(selectedBizId.value, strProjectId); - const bizItem = optionList.value.find((b) => String(b.space_id) === selectedBizId.value); if (bizItem) { // 跳转到当前模块,并带上 projectId 参数 diff --git a/ui/src/components/code-editor/index.vue b/ui/src/components/code-editor/index.vue index f6d6c4bd4..43fbd6a84 100644 --- a/ui/src/components/code-editor/index.vue +++ b/ui/src/components/code-editor/index.vue @@ -72,6 +72,7 @@ alwaysConsumeMouseWheel?: boolean; contextmenu?: boolean; fileEditor?: boolean; + envId?: string }>(), { variables: () => [], @@ -88,6 +89,7 @@ alwaysConsumeMouseWheel: true, contextmenu: true, fileEditor: true, + envId: '0' }, ); @@ -100,6 +102,7 @@ const localVal = ref(props.modelValue); const route = useRoute(); const bkBizId = ref(String(route.params.spaceId)); + const projectId = ref(String(route.params.projectId || '')); const appId = ref(Number(route.params.appId)); const variableNameList = ref(['']); const privateVariableNameList = ref(['']); @@ -265,10 +268,14 @@ // 获取全局变量和私有变量列表 const handleVariableList = async () => { - const variableList = await getVariableList(bkBizId.value, { start: 0, limit: 1000 }); + const variableList = await getVariableList(bkBizId.value, projectId.value, { start: 0, limit: 1000 }); variableNameList.value = variableList.details.map((item: any) => ` .${item.spec.name} `); if (appId.value) { - const privateVariableList = await getUnReleasedAppVariables(bkBizId.value, appId.value); + const privateVariableList = await getUnReleasedAppVariables( + bkBizId.value, + projectId.value, + props.envId, + appId.value); privateVariableNameList.value = privateVariableList.details.map((item: any) => ` .${item.name} `); variableNameList.value!.filter((item) => !privateVariableNameList.value!.includes(item)); } diff --git a/ui/src/components/env-alert-bar.vue b/ui/src/components/env-alert-bar.vue new file mode 100644 index 000000000..61355ba71 --- /dev/null +++ b/ui/src/components/env-alert-bar.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/ui/src/components/env-selector.vue b/ui/src/components/env-selector.vue new file mode 100644 index 000000000..22a075ffe --- /dev/null +++ b/ui/src/components/env-selector.vue @@ -0,0 +1,393 @@ + + + + + + + diff --git a/ui/src/components/head.vue b/ui/src/components/head.vue index 32e5b008a..cb91e113f 100644 --- a/ui/src/components/head.vue +++ b/ui/src/components/head.vue @@ -260,14 +260,11 @@ if (lastAccessedServiceDetail) { const detail = JSON.parse(lastAccessedServiceDetail); if (detail.spaceId === spaceId.value) { - const targetParams: any = { spaceId: detail.spaceId, appId: detail.appId }; - // 如果目标路由有项目概念,添加 projectId - if (targetHasProjectConcept && params.projectId) { - targetParams.projectId = params.projectId; - } + const routeName = navId === 'service-all' && !showPermApplyPage.value ? 'service-config' : (navId as RouteRecordName); + const { envId, ...other } = detail; router.push({ - name: navId === 'service-all' && !showPermApplyPage.value ? 'service-config' : (navId as RouteRecordName), - params: targetParams, + name: routeName, + params: routeName === 'service-config' ? { envId, ...other} : other, }); return; } diff --git a/ui/src/components/service-selector.vue b/ui/src/components/service-selector.vue index 282d99728..29d3ceb12 100644 --- a/ui/src/components/service-selector.vue +++ b/ui/src/components/service-selector.vue @@ -56,10 +56,12 @@ const { showApplyPermDialog, permissionQuery } = storeToRefs(useGlobalStore()); const bizId = route.params.spaceId as string; + const projectId = route.params.projectId as string; const props = withDefaults( defineProps<{ value?: number; + envId: string; customTrigger?: boolean; isRecord?: boolean; }>(), @@ -118,7 +120,7 @@ start: 0, all: true, }; - const resp = await getAppList(bizId, query); + const resp = await getAppList(bizId, projectId, props.envId, query); serviceList.value = resp.details; } catch (e) { console.error(e); diff --git a/ui/src/router.ts b/ui/src/router.ts index dbab53bc3..1d6b03ea9 100644 --- a/ui/src/router.ts +++ b/ui/src/router.ts @@ -3,7 +3,7 @@ import useGlobalStore from './store/global'; import { ISpaceDetail } from '../types/index'; import { getSpaceFeatureFlag } from './api'; import { storeToRefs } from 'pinia'; -import { hasProjectConcept, getDefaultProjectId, saveSpaceToProjectId, getSpaceToProjectId } from './utils/project'; +import { hasProjectConcept, getDefaultProjectId, getSpaceToProjectId } from './utils/project'; const routes = [ { @@ -47,7 +47,7 @@ const routes = [ component: () => import('./views/space/service/list/index.vue'), }, { - path: ':appId(\\d+)', + path: ':appId(\\d+)/:envId', component: () => import('./views/space/service/detail/index.vue'), children: [ { @@ -312,7 +312,7 @@ router.afterEach(() => { router.beforeEach(async (to, _from, next) => { const globalStore = storeToRefs(useGlobalStore()); - const { spaceFeatureFlags, projectId } = globalStore; + const { spaceFeatureFlags } = globalStore; // 页面刷新后 spaceFeatureFlags会重置,重新获取权限信息 if (!spaceFeatureFlags.value.BIZ_VIEW) { @@ -331,8 +331,6 @@ router.beforeEach(async (to, _from, next) => { // 获取默认 projectId:优先 localStorage,没有则取项目列表第一个 const targetProjectId = await getDefaultProjectId(currentSpaceId); if (targetProjectId) { - projectId.value = targetProjectId; - saveSpaceToProjectId(currentSpaceId, targetProjectId); // 重定向到带 projectId 的路由 const params: Record = { ...to.params, projectId: targetProjectId }; next({ @@ -345,10 +343,6 @@ router.beforeEach(async (to, _from, next) => { } catch (error) { console.error('获取项目列表失败', error); } - } else { - // projectId 已存在,同步到全局状态并保存映射 - projectId.value = currentProjectId; - saveSpaceToProjectId(currentSpaceId, currentProjectId); } } diff --git a/ui/src/utils/env.ts b/ui/src/utils/env.ts new file mode 100644 index 000000000..7e421efc5 --- /dev/null +++ b/ui/src/utils/env.ts @@ -0,0 +1,15 @@ +import { EnvType } from '../../types/env'; + +export const getEnvObj = (envDisplay: string): { envName: string; type: EnvType } => { + if (!envDisplay) { + return { envName: '--', type: EnvType.PRODUCTION }; + } + const lastDashIndex = envDisplay.lastIndexOf('-'); + if (lastDashIndex === -1) { + return { envName: envDisplay, type: EnvType.PRODUCTION }; + } + return { + envName: envDisplay.substring(0, lastDashIndex), + type: envDisplay.substring(lastDashIndex + 1) as EnvType + }; +}; diff --git a/ui/src/utils/project.ts b/ui/src/utils/project.ts index ecfcd7d24..c993e6b39 100644 --- a/ui/src/utils/project.ts +++ b/ui/src/utils/project.ts @@ -1,6 +1,28 @@ import { getProjectList } from '../api/project'; import type { ISpaceProject, IProjectItem } from '../../types/project'; +/** + * 模块级缓存:某空间的全部项目列表 + */ +const projectListCache: Record = {}; + +/** + * 共享数据入口:所有需要"某空间全部项目"的逻辑统一走这里 + * 同一 spaceId 只发一次请求,后续直接复用缓存 + * @param spaceId 空间ID + * @returns 项目列表 + */ +export const getCachedProjectList = (spaceId: string): Promise => { + if (projectListCache[spaceId]?.length > 0) { + return Promise.resolve(projectListCache[spaceId]); + } + return getProjectList(spaceId, { all: true }).then((res) => { + const projects = res.data?.projects || []; + projectListCache[spaceId] = projects; + return projects; + }); +}; + /** * 无项目概念的模块列表 * 这些模块不需要 projectId 参数 @@ -64,9 +86,8 @@ export const getDefaultProjectId = async (spaceId: string): Promise => { // 1. 先从 localStorage 获取上次使用的 projectId const lastProjectId = getSpaceToProjectId(spaceId); - // 2. 获取项目列表 - const res = await getProjectList(spaceId, { all: true }); - const projects = res.data?.projects || []; + // 2. 获取项目列表(走共享缓存入口) + const projects = await getCachedProjectList(spaceId); // 3. 如果 localStorage 中有值,且存在于项目列表中,则使用它 if (lastProjectId) { diff --git a/ui/src/views/space/groups/batch-delete-btn.vue b/ui/src/views/space/groups/batch-delete-btn.vue index f594d8339..4acef34fd 100644 --- a/ui/src/views/space/groups/batch-delete-btn.vue +++ b/ui/src/views/space/groups/batch-delete-btn.vue @@ -27,6 +27,7 @@ const props = defineProps<{ bkBizId: string; selectedIds: number[]; + projectId?: string; }>(); const emits = defineEmits(['deleted']); @@ -36,7 +37,7 @@ const handleBatchDeleteConfirm = async () => { batchDeletePending.value = true; - await batchDeleteGroup(props.bkBizId, props.selectedIds); + await batchDeleteGroup(props.bkBizId, props.projectId, props.selectedIds); Message({ theme: 'success', message: t('批量删除分组成功'), diff --git a/ui/src/views/space/groups/components/group-edit-form.vue b/ui/src/views/space/groups/components/group-edit-form.vue index c071a0d7b..5dcd16dda 100644 --- a/ui/src/views/space/groups/components/group-edit-form.vue +++ b/ui/src/views/space/groups/components/group-edit-form.vue @@ -8,21 +8,31 @@ {{ t('公开') }} {{ t('指定服务') }} - - - +
+ + + + + + + + +
diff --git a/ui/src/views/space/service/detail/config/config-list/config-table-list/batch-operation-btn.vue b/ui/src/views/space/service/detail/config/config-list/config-table-list/batch-operation-btn.vue index e74dc6c6e..e54d631a8 100644 --- a/ui/src/views/space/service/detail/config/config-list/config-table-list/batch-operation-btn.vue +++ b/ui/src/views/space/service/detail/config/config-list/config-table-list/batch-operation-btn.vue @@ -98,6 +98,8 @@ const props = defineProps<{ bkBizId: string; + projectId: string; + envId: string; appId: number; selectedIds: number[]; selectedKeys: string[]; @@ -122,9 +124,22 @@ loading.value = true; try { if (props.isFileType) { - await batchDeleteServiceConfigs(props.bkBizId, props.appId, props.selectedIds); + await batchDeleteServiceConfigs( + props.bkBizId, + props.appId, + props.projectId, + props.envId, + props.selectedIds, + ); } else { - await batchDeleteKv(props.bkBizId, props.appId, props.selectedIds, props.isAcrossChecked); + await batchDeleteKv( + props.bkBizId, + props.appId, + props.projectId, + props.envId, + props.selectedIds, + props.isAcrossChecked, + ); } Message({ theme: 'success', @@ -145,9 +160,22 @@ loading.value = true; try { if (props.isFileType) { - await batchUndeleteFile(props.bkBizId, props.appId, props.selectedIds); + await batchUndeleteFile( + props.bkBizId, + props.appId, + props.projectId, + props.envId, + props.selectedIds, + ); } else { - await batchUndeleteKv(props.bkBizId, props.appId, props.selectedKeys, props.isAcrossChecked); + await batchUndeleteKv( + props.bkBizId, + props.appId, + props.projectId, + props.envId, + props.selectedKeys, + props.isAcrossChecked, + ); } Message({ theme: 'success', @@ -194,7 +222,7 @@ sign: commit_spec.content.signature, }; }); - await batchAddConfigList(props.bkBizId, props.appId, { items: editConfigList }); + await batchAddConfigList(props.bkBizId, props.appId, props.projectId, props.envId, { items: editConfigList }); Message({ theme: 'success', message: t('配置文件权限批量修改成功'), diff --git a/ui/src/views/space/service/detail/config/config-list/config-table-list/config-export.vue b/ui/src/views/space/service/detail/config/config-list/config-table-list/config-export.vue index a113456c6..1c9f9035d 100644 --- a/ui/src/views/space/service/detail/config/config-list/config-table-list/config-export.vue +++ b/ui/src/views/space/service/detail/config/config-list/config-table-list/config-export.vue @@ -33,13 +33,16 @@ import { storeToRefs } from 'pinia'; import useServiceStore from '../../../../../../../store/service'; import useConfigStore from '../../../../../../../store/config'; + import useGlobalStore from '../../../../../../../store/global'; const serviceStore = useServiceStore(); + const { projectId } = storeToRefs(useGlobalStore()); const configStore = useConfigStore(); const { appData, isFileType } = storeToRefs(serviceStore); const { allExistConfigCount, conflictFileCount } = storeToRefs(configStore); const props = defineProps<{ bkBizId: string; + envId: string; appId: number; versionId: number; versionName: string; @@ -60,7 +63,7 @@ ]); const handleExportKv = async (type: string) => { - const res = await getExportKvFile(props.bkBizId, props.appId, props.versionId, type); + const res = await getExportKvFile(props.bkBizId, props.appId, projectId.value, props.envId, props.versionId, type); let content: any; let mimeType: string; let extension: string; diff --git a/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form.vue b/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form.vue index 3b9fbb397..706d164e1 100644 --- a/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form.vue +++ b/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form.vue @@ -149,6 +149,7 @@ :editable="true" :variables="props.variables" :size-limit="props.fileSizeLimit" + :env-id="envId" @change="handleStringContentChange" /> @@ -207,6 +208,7 @@ content?: string | IFileConfigContentSummary; variables?: IVariableEditParams[]; bkBizId: string; + envId: string; id: number; // 服务ID或者模板空间ID fileUploading?: boolean; fileSizeLimit?: number; diff --git a/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-form-other-service.vue b/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-form-other-service.vue index e9a063c20..0e48dce50 100644 --- a/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-form-other-service.vue +++ b/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-form-other-service.vue @@ -57,6 +57,8 @@ const props = defineProps<{ bkBizId: string; + projectId: string; + envId: string; appId: number; }>(); const emits = defineEmits(['selectVersion', 'clear']); @@ -84,7 +86,7 @@ start: 0, all: true, }; - const resp = await getAppList(props.bkBizId, query); + const resp = await getAppList(props.bkBizId, props.projectId, props.envId, query); serviceList.value = resp.details.filter((app: IAppItem) => { if (isFileType.value) { return app.spec.config_type === 'file' && app.id !== props.appId; @@ -123,7 +125,7 @@ start: 0, all: true, }; - const res = await getConfigVersionList(props.bkBizId, selectAppId.value, params); + const res = await getConfigVersionList(props.bkBizId, selectAppId.value, props.projectId, props.envId, params); versionList.value = res.data.details; } catch (e) { console.error(e); diff --git a/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-from-local-file.vue b/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-from-local-file.vue index aeba498ff..8ce27cfc7 100644 --- a/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-from-local-file.vue +++ b/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-from-local-file.vue @@ -86,7 +86,7 @@ } const { t } = useI18n(); - const { spaceFeatureFlags } = storeToRefs(useGlobalStore()); + const { spaceFeatureFlags, projectId } = storeToRefs(useGlobalStore()); const props = defineProps<{ isTemplate: boolean; // 是否是配置模板导入 @@ -189,6 +189,7 @@ if (props.isTemplate) { res = await importTemplateFile( props.spaceId!, + projectId.value, props.currentTemplateSpace!, option.file, isDecompression.value, diff --git a/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-from-templates.vue b/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-from-templates.vue index 62544ec5f..e6fd7c5cb 100644 --- a/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-from-templates.vue +++ b/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-from-templates.vue @@ -72,6 +72,8 @@ import { ref, onMounted, computed, watch } from 'vue'; import { useRoute, useRouter } from 'vue-router'; import { Share } from 'bkui-vue/lib/icon'; + import { storeToRefs } from 'pinia'; + import useGlobalStore from '../../../../../../../../../store/global'; import { ITemplatePkgs, ITemplateRevision } from '../../../../../../../../../../types/config'; import { IAllPkgsGroupBySpaceInBiz } from '../../../../../../../../../../types/template'; import { importConfigFromTemplate } from '../../../../../../../../../api/config'; @@ -81,9 +83,11 @@ const route = useRoute(); const router = useRouter(); + const { projectId } = storeToRefs(useGlobalStore()); const props = defineProps<{ bkBizId: string; + envId: string; appId: number; }>(); @@ -134,14 +138,14 @@ const getPkgList = async () => { pkgListLoading.value = true; - const res = await getAllPackagesGroupBySpace(props.bkBizId, { app_id: props.appId }); + const res = await getAllPackagesGroupBySpace(props.bkBizId, projectId.value, { app_id: props.appId }); pkgList.value = res.details; pkgListLoading.value = false; }; const getImportedPkgsData = async () => { importedPkgsLoading.value = true; - const res = await getAppPkgBindingRelations(props.bkBizId, props.appId); + const res = await getAppPkgBindingRelations(props.bkBizId, projectId.value, props.envId, props.appId); if (res.details.length === 1) { bindingId.value = res.details[0].id; importedPkgs.value = res.details[0].spec.bindings; @@ -205,7 +209,7 @@ }; const handleImportConfirm = async () => { - await importConfigFromTemplate(props.bkBizId, props.appId, { + await importConfigFromTemplate(props.bkBizId, props.appId, projectId.value, props.envId, { bindings: [...selectedPkgs.value, ...importedPkgs.value], }); close(); diff --git a/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/index.vue b/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/index.vue index c42b5362d..5a504794b 100644 --- a/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/index.vue +++ b/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/index.vue @@ -34,6 +34,7 @@ @@ -56,6 +57,8 @@
@@ -171,6 +174,8 @@ const props = defineProps<{ show: boolean; bkBizId: string; + projectId: string; + envId: string; appId: number; }>(); const emits = defineEmits(['update:show', 'confirm']); @@ -310,7 +315,7 @@ replace_all: isClearDraft.value, variables: allVariables, }; - const res = await batchAddConfigList(props.bkBizId, props.appId, query); + const res = await batchAddConfigList(props.bkBizId, props.appId, props.projectId, props.envId, query); serviceStore.$patch((state) => { state.topIds = res.ids; }); @@ -336,7 +341,7 @@ start: 0, all: true, }; - const res = await getConfigVersionList(props.bkBizId, props.appId, params); + const res = await getConfigVersionList(props.bkBizId, props.appId, props.projectId, props.envId, params); versionList.value = res.data.details; } catch (e) { console.error(e); @@ -351,7 +356,7 @@ try { handleClearTable(); const params = { other_app_id, release_id }; - const res = await importFromHistoryVersion(props.bkBizId, props.appId, params); + const res = await importFromHistoryVersion(props.bkBizId, props.appId, props.projectId, props.envId, params); res.data.non_template_configs.forEach((item: any) => { const config = { ...item, diff --git a/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/pkg-templates-table.vue b/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/pkg-templates-table.vue index 735adb0a1..2bc89f831 100644 --- a/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/pkg-templates-table.vue +++ b/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/pkg-templates-table.vue @@ -53,10 +53,12 @@ diff --git a/ui/src/views/space/service/detail/config/index.vue b/ui/src/views/space/service/detail/config/index.vue index 67f116143..858bf4090 100644 --- a/ui/src/views/space/service/detail/config/index.vue +++ b/ui/src/views/space/service/detail/config/index.vue @@ -1,6 +1,11 @@ diff --git a/ui/src/views/space/service/detail/config/version-list-aside/index.vue b/ui/src/views/space/service/detail/config/version-list-aside/index.vue index 241002634..54462af44 100644 --- a/ui/src/views/space/service/detail/config/version-list-aside/index.vue +++ b/ui/src/views/space/service/detail/config/version-list-aside/index.vue @@ -1,7 +1,17 @@ diff --git a/ui/src/views/space/service/detail/config/version-list-aside/version-simple-list.vue b/ui/src/views/space/service/detail/config/version-list-aside/version-simple-list.vue index 5b62e477d..5cdcfbce0 100644 --- a/ui/src/views/space/service/detail/config/version-list-aside/version-simple-list.vue +++ b/ui/src/views/space/service/detail/config/version-list-aside/version-simple-list.vue @@ -1,7 +1,7 @@