Commit 4bde86d7 authored by wuzekai's avatar wuzekai

将导入xlsx改为导入全部sheet

parent 0587c1d1
shinyServer(function(input, output, session) { shinyServer(function(input, output, session) {
enc <- getOption("radiant.encoding", "UTF-8") enc <- getOption("radiant.encoding", "UTF-8")
## source shared functions ## source shared functions
source("init.R", encoding = enc, local = TRUE) source("init.R", encoding = enc, local = TRUE)
source("radiant.R", encoding = enc, local = TRUE) source("radiant.R", encoding = enc, local = TRUE)
## packages to use for example data ## packages to use for example data
options(radiant.example.data = "radiant.data") options(radiant.example.data = "radiant.data")
## source data & analysis tools ## source data & analysis tools
for (file in list.files(c("tools/app", "tools/data"), pattern = "\\.(r|R)$", full.names = TRUE)) { for (file in list.files(c("tools/app", "tools/data"), pattern = "\\.(r|R)$", full.names = TRUE)) {
source(file, encoding = enc, local = TRUE) source(file, encoding = enc, local = TRUE)
} }
# ============================================================ # ============================================================
# [新增功能] 企业级集成:Token鉴权 + 环境变量 + 自动加载 # [新增功能] 企业级集成:Token鉴权 + 环境变量 + 自动加载
# ============================================================ # ============================================================
observe({ observe({
# 1. 解析 URL 参数 # 1. 解析 URL 参数
query <- parseQueryString(session$clientData$url_search) query <- parseQueryString(session$clientData$url_search)
dataset_id <- query[['datasetId']] dataset_id <- query[['datasetId']]
token <- query[['token']] token <- query[['token']]
# 2. 仅当 ID 和 Token 均存在时执行 # 2. 仅当 ID 和 Token 均存在时执行
if (!is.null(dataset_id) && !is.null(token)) { if (!is.null(dataset_id) && !is.null(token)) {
# 定义 Radiant 内部使用的数据集名称 (例如: data_10086) # 定义 Radiant 内部使用的数据集名称 (例如: data_10086)
# 如果 URL 传了 name 参数就用 name,否则用 id 拼接 # 如果 URL 传了 name 参数就用 name,否则用 id 拼接
ds_name <- if (!is.null(query[['name']])) query[['name']] else paste0("data_", dataset_id) ds_name <- if (!is.null(query[['name']])) query[['name']] else paste0("data_", dataset_id)
# 3. 检查数据是否已存在 (防止重复加载) # 3. 检查数据是否已存在 (防止重复加载)
if (is.null(r_data[[ds_name]])) { if (is.null(r_data[[ds_name]])) {
withProgress(message = '正在从业务系统同步数据...', value = 0.2, { withProgress(message = '正在从业务系统同步数据...', value = 0.2, {
# 4. 获取环境变量中的 API 基地址 # 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")
# 5. 拼接完整 API 路径 # 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)
# 6. 创建临时文件 (明确 .xlsx 后缀) # 6. 创建临时文件 (明确 .xlsx 后缀)
tmp_file <- tempfile(fileext = ".xlsx") tmp_file <- tempfile(fileext = ".xlsx")
tryCatch({ tryCatch({
incProgress(0.3, detail = "正在鉴权并下载...") incProgress(0.3, detail = "正在鉴权并下载...")
# 7. 发起带 Token 的 HTTP 请求 # 7. 发起带 Token 的 HTTP 请求
response <- httr::POST( response <- httr::POST(
url = target_url, url = target_url,
...@@ -55,14 +55,14 @@ shinyServer(function(input, output, session) { ...@@ -55,14 +55,14 @@ shinyServer(function(input, output, session) {
# 将结果写入磁盘 # 将结果写入磁盘
httr::write_disk(tmp_file, overwrite = TRUE) httr::write_disk(tmp_file, overwrite = TRUE)
) )
# 检查 HTTP 状态码 # 检查 HTTP 状态码
if (httr::status_code(response) != 200) { if (httr::status_code(response) != 200) {
stop(paste("下载失败,请手动导入,HTTP状态码:", httr::status_code(response))) stop(paste("下载失败,请手动导入,HTTP状态码:", httr::status_code(response)))
} }
incProgress(0.7, detail = "解析并导入 Radiant...") incProgress(0.7, detail = "解析并导入 Radiant...")
# 8. 复用 Radiant 核心加载函数 (manage_ui.R 中定义) # 8. 复用 Radiant 核心加载函数 (manage_ui.R 中定义)
# 这会自动完成读取、转因子、生成R代码、注册到下拉框等所有动作 # 这会自动完成读取、转因子、生成R代码、注册到下拉框等所有动作
load_user_data( load_user_data(
...@@ -73,14 +73,14 @@ shinyServer(function(input, output, session) { ...@@ -73,14 +73,14 @@ shinyServer(function(input, output, session) {
xlsx_header = TRUE, xlsx_header = TRUE,
man_str_as_factor = TRUE man_str_as_factor = TRUE
) )
# 9. 界面联动:选中数据并跳转到视图 # 9. 界面联动:选中数据并跳转到视图
updateSelectInput(session, "dataset", selected = ds_name) updateSelectInput(session, "dataset", selected = ds_name)
updateTabsetPanel(session, "nav_radiant", selected = "Data") updateTabsetPanel(session, "nav_radiant", selected = "Data")
updateTabsetPanel(session, "tabs_data", selected = "View") # 或者 "Visualize" updateTabsetPanel(session, "tabs_data", selected = "View") # 或者 "Visualize"
showNotification(paste("数据集", ds_name, "加载成功!"), type = "message") showNotification(paste("数据集", ds_name, "加载成功!"), type = "message")
}, error = function(e) { }, error = function(e) {
showNotification(paste("数据同步失败,请手动导入数据:", e$message), type = "error", duration = 10) showNotification(paste("数据同步失败,请手动导入数据:", e$message), type = "error", duration = 10)
#调试打印 print(e) #调试打印 print(e)
...@@ -90,10 +90,10 @@ shinyServer(function(input, output, session) { ...@@ -90,10 +90,10 @@ shinyServer(function(input, output, session) {
} }
}) })
# ============================================================ # ============================================================
# dataviewer_proxy <- DT::dataTableProxy("dataviewer", session) # dataviewer_proxy <- DT::dataTableProxy("dataviewer", session)
# observe(session$setCurrentTheme( # observe(session$setCurrentTheme(
# if (isTRUE(input$dark_mode)) { # if (isTRUE(input$dark_mode)) {
# bslib::bs_theme(version = 4, bg = "black", fg = "white") # bslib::bs_theme(version = 4, bg = "black", fg = "white")
...@@ -101,7 +101,7 @@ shinyServer(function(input, output, session) { ...@@ -101,7 +101,7 @@ shinyServer(function(input, output, session) {
# bslib::bs_theme(version = 4) # bslib::bs_theme(version = 4)
# } # }
# )) # ))
## save state on refresh or browser close ## save state on refresh or browser close
saveStateOnRefresh(session) saveStateOnRefresh(session)
}) })
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment