Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
R
Radiant
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wuzekai
Radiant
Commits
1017104c
Commit
1017104c
authored
Nov 21, 2025
by
wuzekai
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
将导入xlsx改为导入全部sheet
parent
0dec47dc
Changes
4
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
2291 additions
and
2251 deletions
+2291
-2251
transform.R
radiant.data/R/transform.R
+763
-763
server.R
radiant.data/inst/app/server.R
+85
-6
manage_ui.R
radiant.data/inst/app/tools/data/manage_ui.R
+36
-19
transform_ui.R
radiant.data/inst/app/tools/data/transform_ui.R
+1407
-1463
No files found.
radiant.data/R/transform.R
View file @
1017104c
radiant.data/inst/app/server.R
View file @
1017104c
...
...
@@ -13,6 +13,85 @@ shinyServer(function(input, output, session) {
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"
)
# 5. 拼接完整 API 路径
target_url
<-
paste0
(
api_base
,
"/disease-data/data/export/apply/apply/case?applyId="
,
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
::
write_disk
(
tmp_file
,
overwrite
=
TRUE
)
)
# 检查 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
(
fname
=
paste0
(
ds_name
,
".xlsx"
),
# 虚拟文件名
uFile
=
tmp_file
,
# 实际文件路径
ext
=
"xlsx"
,
xlsx_sheet
=
1
,
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)
})
})
}
}
})
# ============================================================
# dataviewer_proxy <- DT::dataTableProxy("dataviewer", session)
# observe(session$setCurrentTheme(
...
...
radiant.data/inst/app/tools/data/manage_ui.R
View file @
1017104c
...
...
@@ -50,8 +50,7 @@ output$ui_fileUpload <- renderUI({
)
}
else
if
(
input
$
dataType
==
"xlsx"
)
{
tagList
(
make_uploadfile
(
accept
=
c
(
".xlsx"
,
".xls"
)),
make_description_uploadfile
(
accept
=
c
(
".md"
,
".txt"
))
make_uploadfile
(
accept
=
c
(
".xlsx"
,
".xls"
))
)
}
else
if
(
input
$
dataType
==
"url_rds"
)
{
with
(
tags
,
table
(
...
...
@@ -229,11 +228,6 @@ output$ui_Manage <- renderUI({
),
conditionalPanel
(
"input.dataType == 'xlsx'"
,
numericInput
(
"xlsx_sheet"
,
label
=
i
18
n
$
t
(
"Sheet index (1-based):"
),
value
=
1
,
min
=
1
,
step
=
1
),
checkboxInput
(
"xlsx_header"
,
label
=
i
18
n
$
t
(
"First row as header"
),
...
...
@@ -514,19 +508,42 @@ observeEvent(input$uploadfile, {
withProgress
(
message
=
"Loading ..."
,
value
=
1
,
{
for
(
i
in
1
:
nrow
(
inFile
))
{
# 区分文件类型,传递对应参数
if
(
input
$
dataType
==
"xlsx"
)
{
# 调用load_user_data,传递xlsx专属参数
uFile
<-
as.character
(
inFile
[
i
,
"datapath"
])
# 获取xlsx文件中所有sheet名称
sheets
<-
try
(
readxl
::
excel_sheets
(
uFile
),
silent
=
TRUE
)
if
(
inherits
(
sheets
,
"try-error"
))
{
showNotification
(
i
18
n
$
t
(
"Failed to read the sheet list from the xlsx file. Please check if the file is corrupted or properly formatted "
),
type
=
"error"
)
next
# 跳过当前文件
}
# 循环读取每个sheet,先带后缀加载,再重命名
for
(
sheet
in
sheets
)
{
# 1. 临时文件名(带.xlsx后缀,满足函数校验)
temp_fname
<-
paste0
(
sheet
,
".xlsx"
)
# 2. 加载数据
load_user_data
(
fname
=
as.character
(
inFile
[
i
,
"name"
]),
uFile
=
as.character
(
inFile
[
i
,
"datapath"
])
,
ext
=
"xlsx"
,
# 明确指定ext为xlsx
xlsx_sheet
=
input
$
xlsx_sheet
,
# 从UI获取工作表索引
xlsx_header
=
input
$
xlsx_header
,
# 从UI获取表头设置
man_str_as_factor
=
TRUE
# xlsx也支持“字符串转因子”
fname
=
temp_fname
,
# 临时文件名:sheet名.xlsx
uFile
=
uFile
,
ext
=
"xlsx"
,
xlsx_sheet
=
sheet
,
# 按sheet名称读取
xlsx_header
=
input
$
xlsx_header
,
man_str_as_factor
=
TRUE
)
}
else
if
(
input
$
dataType
%in%
c
(
"csv"
,
"url_csv"
))
{
# 原有CSV参数传递
# 3. 重命名数据集:从“sheet名.xlsx”改为“sheet名”
# 检查是否已存在同名数据集(避免覆盖)
if
(
!
is.null
(
r_data
[[
sheet
]]))
{
sheet_new
<-
paste0
(
sheet
,
"_"
,
length
(
grep
(
paste0
(
"^"
,
sheet
),
names
(
r_data
)))
+
1
)
sheet
<-
sheet_new
}
# 执行重命名
r_data
[[
sheet
]]
<-
r_data
[[
temp_fname
]]
# 删除临时数据集
rm
(
list
=
temp_fname
,
envir
=
r_data
)
}
}
else
if
(
input
$
dataType
%in%
c
(
"csv"
,
"url_csv"
))
{
load_user_data
(
fname
=
as.character
(
inFile
[
i
,
"name"
]),
uFile
=
as.character
(
inFile
[
i
,
"datapath"
]),
...
...
radiant.data/inst/app/tools/data/transform_ui.R
View file @
1017104c
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment