From ed77255db177d7bc887384068b731b8c595bf05c Mon Sep 17 00:00:00 2001 From: gaozhaochen <158975971@qq.com> Date: Wed, 26 Nov 2025 11:38:58 +0800 Subject: [PATCH] =?UTF-8?q?update:=201=E3=80=81=E9=80=82=E9=85=8D=E4=B8=AD?= =?UTF-8?q?=E5=B1=B1=E7=9A=84demo=EF=BC=8C=E8=87=AA=E5=8A=A8=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- radiant.data/inst/app/server.R | 60 +++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/radiant.data/inst/app/server.R b/radiant.data/inst/app/server.R index 0eb59fb..a4becb5 100644 --- a/radiant.data/inst/app/server.R +++ b/radiant.data/inst/app/server.R @@ -1,68 +1,74 @@ shinyServer(function(input, output, session) { enc <- getOption("radiant.encoding", "UTF-8") - + ## source shared functions source("init.R", encoding = enc, local = TRUE) source("radiant.R", encoding = enc, local = TRUE) - + ## packages to use for example data options(radiant.example.data = "radiant.data") - + ## source data & analysis tools for (file in list.files(c("tools/app", "tools/data"), pattern = "\\.(r|R)$", full.names = TRUE)) { source(file, encoding = enc, local = TRUE) } - + # ============================================================ # [新增功能] 企业级集成:Token鉴权 + 环境变量 + 自动加载 # ============================================================ observe({ # 1. 解析 URL 参数 query <- parseQueryString(session$clientData$url_search) - + dataset_id <- query[['datasetId']] token <- query[['token']] - + # 2. 仅当 ID 和 Token 均存在时执行 if (!is.null(dataset_id) && !is.null(token)) { - + # 定义 Radiant 内部使用的数据集名称 (例如: data_10086) # 如果 URL 传了 name 参数就用 name,否则用 id 拼接 ds_name <- if (!is.null(query[['name']])) query[['name']] else paste0("data_", dataset_id) - + # 3. 检查数据是否已存在 (防止重复加载) if (is.null(r_data[[ds_name]])) { - + withProgress(message = '正在从业务系统同步数据...', value = 0.2, { - + # 4. 获取环境变量中的 API 基地址 - api_base <- Sys.getenv("HOST_API_BASE","http://127.0.0.1:11999") - + # api_base <- Sys.getenv("HOST_API_BASE","http://127.0.0.1:11999") + api_base <- Sys.getenv("HOST_API_BASE","http://localhost:8080") + # 5. 拼接完整 API 路径 - target_url <- paste0(api_base, "/disease-data/data/export/apply/apply/case?applyId=", dataset_id) - + # target_url <- paste0(api_base, "/disease-data/data/export/apply/apply/case?applyId=", dataset_id) + target_url <- paste0(api_base, "/research-project/generate-project-dataset/", dataset_id) + # 6. 创建临时文件 (明确 .xlsx 后缀) tmp_file <- tempfile(fileext = ".xlsx") - + tryCatch({ incProgress(0.3, detail = "正在鉴权并下载...") - + # 7. 发起带 Token 的 HTTP 请求 response <- httr::POST( url = target_url, # 添加 Bearer Token (或根据你的接口要求修改 Header) - httr::add_headers(Authorization = paste("Bearer", token)), + httr::add_headers(authentication = paste(token)), # 将结果写入磁盘 httr::write_disk(tmp_file, overwrite = TRUE) ) - + + message("=== Request Log ===") + print(response$request) + message("===================") + # 检查 HTTP 状态码 if (httr::status_code(response) != 200) { stop(paste("下载失败,请手动导入,HTTP状态码:", httr::status_code(response))) } - + incProgress(0.7, detail = "解析并导入 Radiant...") - + # 8. 复用 Radiant 核心加载函数 (manage_ui.R 中定义) # 这会自动完成读取、转因子、生成R代码、注册到下拉框等所有动作 load_user_data( @@ -73,14 +79,14 @@ shinyServer(function(input, output, session) { xlsx_header = TRUE, man_str_as_factor = TRUE ) - + # 9. 界面联动:选中数据并跳转到视图 updateSelectInput(session, "dataset", selected = ds_name) updateTabsetPanel(session, "nav_radiant", selected = "Data") updateTabsetPanel(session, "tabs_data", selected = "View") # 或者 "Visualize" - + showNotification(paste("数据集", ds_name, "加载成功!"), type = "message") - + }, error = function(e) { showNotification(paste("数据同步失败,请手动导入数据:", e$message), type = "error", duration = 10) #调试打印 print(e) @@ -90,10 +96,10 @@ shinyServer(function(input, output, session) { } }) # ============================================================ - - + + # dataviewer_proxy <- DT::dataTableProxy("dataviewer", session) - + # observe(session$setCurrentTheme( # if (isTRUE(input$dark_mode)) { # bslib::bs_theme(version = 4, bg = "black", fg = "white") @@ -101,7 +107,7 @@ shinyServer(function(input, output, session) { # bslib::bs_theme(version = 4) # } # )) - + ## save state on refresh or browser close saveStateOnRefresh(session) }) -- 2.22.0