Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-bi
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-bi
Commits
e32f5936
提交
e32f5936
authored
4月 08, 2025
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
chore: update
上级
5e707104
显示空白字符变更
内嵌
并排
正在显示
15 个修改的文件
包含
208 行增加
和
114 行删除
+208
-114
App.tsx
src/App.tsx
+7
-8
AIChat.tsx
src/components/ai/AIChat.tsx
+3
-9
ButtonModal.tsx
src/modules/data/preprocess/error/components/ButtonModal.tsx
+19
-10
ButtonModal.tsx
src/modules/data/preprocess/max/components/ButtonModal.tsx
+19
-10
ButtonModal.tsx
src/modules/data/preprocess/min/components/ButtonModal.tsx
+20
-11
ButtonModal.tsx
src/modules/data/preprocess/null/components/ButtonModal.tsx
+18
-11
ButtonModal.tsx
...modules/data/preprocess/repeat/components/ButtonModal.tsx
+8
-10
ButtonModal.tsx
src/modules/data/preprocess/space/components/ButtonModal.tsx
+67
-12
ErrorButtonModal.tsx
...les/data/read/exploration/components/ErrorButtonModal.tsx
+9
-4
MaxButtonModal.tsx
...dules/data/read/exploration/components/MaxButtonModal.tsx
+8
-4
MinButtonModal.tsx
...dules/data/read/exploration/components/MinButtonModal.tsx
+8
-4
NullButtonModal.tsx
...ules/data/read/exploration/components/NullButtonModal.tsx
+8
-4
OtherButtonModal.tsx
...les/data/read/exploration/components/OtherButtonModal.tsx
+2
-2
RepeatButtonModal.tsx
...es/data/read/exploration/components/RepeatButtonModal.tsx
+3
-6
prompt.ts
src/utils/prompt.ts
+9
-9
没有找到文件。
src/App.tsx
浏览文件 @
e32f5936
import
{
Suspense
,
useEffect
}
from
'react'
import
{
Suspense
,
useEffect
}
from
'react'
import
{
Spin
}
from
'antd'
import
{
Spin
}
from
'antd'
import
{
useRoutes
,
use
SearchParams
,
useLocation
}
from
'react-router'
import
{
useRoutes
,
use
Location
,
useNavigate
}
from
'react-router'
import
routes
from
'./router/routes'
import
routes
from
'./router/routes'
import
'./App.scss'
import
'./App.scss'
...
@@ -9,17 +9,16 @@ const experimentId = params.get('experiment_id') || '7028276368903241728'
...
@@ -9,17 +9,16 @@ const experimentId = params.get('experiment_id') || '7028276368903241728'
const
App
=
()
=>
{
const
App
=
()
=>
{
const
element
=
useRoutes
(
routes
)
const
element
=
useRoutes
(
routes
)
const
[
searchParams
,
setSearchParams
]
=
useSearchParams
()
const
location
=
useLocation
()
const
location
=
useLocation
()
const
navigate
=
useNavigate
()
useEffect
(()
=>
{
useEffect
(()
=>
{
const
currentId
=
searchParams
.
get
(
'experiment_id'
)
const
params
=
new
URLSearchParams
(
location
.
search
)
if
(
!
currentId
)
{
if
(
!
params
.
get
(
'experiment_id'
))
{
const
newSearchParams
=
new
URLSearchParams
(
location
.
search
)
params
.
set
(
'experiment_id'
,
experimentId
)
newSearchParams
.
set
(
'experiment_id'
,
experimentId
)
navigate
({
search
:
params
.
toString
()
},
{
replace
:
true
})
setSearchParams
(
newSearchParams
)
}
}
},
[
location
.
search
,
searchParams
,
setSearchParams
])
},
[
location
,
navigate
])
return
(
return
(
<
Suspense
<
Suspense
...
...
src/components/ai/AIChat.tsx
浏览文件 @
e32f5936
...
@@ -26,10 +26,10 @@ export default function AIChat() {
...
@@ -26,10 +26,10 @@ export default function AIChat() {
const
handleEnterSearch
=
(
e
:
KeyboardEvent
<
HTMLTextAreaElement
>
)
=>
{
const
handleEnterSearch
=
(
e
:
KeyboardEvent
<
HTMLTextAreaElement
>
)
=>
{
if
(
e
.
key
===
'Enter'
&&
!
e
.
shiftKey
)
{
if
(
e
.
key
===
'Enter'
&&
!
e
.
shiftKey
)
{
e
.
preventDefault
()
e
.
preventDefault
()
handle
Search
()
handle
AI
()
}
}
}
}
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
setContent
(
''
)
setContent
(
''
)
post
({
messages
:
[{
role
:
'user'
,
content
}]
})
post
({
messages
:
[{
role
:
'user'
,
content
}]
})
}
}
...
@@ -75,13 +75,7 @@ export default function AIChat() {
...
@@ -75,13 +75,7 @@ export default function AIChat() {
variant=
"filled"
variant=
"filled"
suffixIcon=
{
null
}
suffixIcon=
{
null
}
popupMatchSelectWidth=
{
110
}
></
Select
>
popupMatchSelectWidth=
{
110
}
></
Select
>
<
Button
<
Button
type=
"primary"
shape=
"circle"
icon=
{
<
ArrowUpOutlined
/>
}
onClick=
{
handleAI
}
loading=
{
isLoading
}
/>
type=
"primary"
shape=
"circle"
icon=
{
<
ArrowUpOutlined
/>
}
onClick=
{
handleSearch
}
loading=
{
isLoading
}
/>
</
div
>
</
div
>
<
div
className=
"upload-list"
></
div
>
<
div
className=
"upload-list"
></
div
>
</
div
>
</
div
>
...
...
src/modules/data/preprocess/error/components/ButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -7,29 +7,36 @@ import { useAI } from '@/hooks/useAI'
...
@@ -7,29 +7,36 @@ import { useAI } from '@/hooks/useAI'
import
prompt
from
'@/utils/prompt'
import
prompt
from
'@/utils/prompt'
import
{
useProcessData
}
from
'../query'
import
{
useProcessData
}
from
'../query'
interface
ResultItem
{
name
:
string
desc
:
string
}
export
default
function
ButtonModal
()
{
export
default
function
ButtonModal
()
{
const
[
searchParams
]
=
useSearchParams
()
const
[
searchParams
]
=
useSearchParams
()
const
{
fieldOptions
,
getFieldName
}
=
useDataFieldQuery
()
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
resultsOptions
=
results
.
map
((
result
)
=>
({
label
:
result
.
name
,
value
:
fieldOptions
.
find
((
option
)
=>
option
.
label
===
result
.
name
)?.
value
||
''
,
}))
const
selectOptions
=
resultsOptions
.
length
?
resultsOptions
:
fieldOptions
const
{
isLoading
,
post
}
=
useAI
({
const
{
isLoading
,
post
}
=
useAI
({
onComplete
:
(
message
)
=>
{
onComplete
:
(
message
)
=>
{
try
{
if
(
!
message
.
content
)
return
const
parse
=
JSON
.
parse
(
message
.
content
)
const
parse
=
JSON
.
parse
(
message
.
content
)
console
.
log
(
parse
)
console
.
log
(
parse
)
}
catch
(
error
)
{
setResults
(
parse
.
results
||
[])
console
.
error
(
error
)
}
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
post
({
post
({
response_format
:
{
type
:
'json_object'
},
response_format
:
{
type
:
'json_object'
},
messages
:
[{
role
:
'user'
,
content
:
prompt
.
error
}],
messages
:
[{
role
:
'user'
,
content
:
prompt
.
error
}],
})
})
}
}
const
{
fieldOptions
,
getFieldName
}
=
useDataFieldQuery
()
const
[
open
,
setOpen
]
=
useState
(
false
)
const
[
open
,
setOpen
]
=
useState
(
false
)
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
searchParams
.
get
(
'results'
))
{
if
(
searchParams
.
get
(
'results'
))
{
...
@@ -40,6 +47,7 @@ export default function ButtonModal() {
...
@@ -40,6 +47,7 @@ export default function ButtonModal() {
const
[
form
]
=
Form
.
useForm
()
const
[
form
]
=
Form
.
useForm
()
const
initialValues
=
{
const
initialValues
=
{
action
:
'取该字段平均值'
,
action
:
'取该字段平均值'
,
field
:
searchParams
.
get
(
'results'
)
||
''
,
}
}
const
field
=
Form
.
useWatch
(
'field'
,
form
)
const
field
=
Form
.
useWatch
(
'field'
,
form
)
...
@@ -59,6 +67,7 @@ export default function ButtonModal() {
...
@@ -59,6 +67,7 @@ export default function ButtonModal() {
setOpen
(
false
)
setOpen
(
false
)
setCurrent
(
0
)
setCurrent
(
0
)
remove
()
remove
()
setResults
([])
}
}
const
steps
=
[
const
steps
=
[
...
@@ -66,9 +75,9 @@ export default function ButtonModal() {
...
@@ -66,9 +75,9 @@ export default function ButtonModal() {
title
:
'请选择逻辑错误值字段'
,
title
:
'请选择逻辑错误值字段'
,
content
:
(
content
:
(
<
Form
.
Item
name=
"field"
rules=
{
[{
required
:
true
,
message
:
'请选择逻辑错误值字段'
}]
}
>
<
Form
.
Item
name=
"field"
rules=
{
[{
required
:
true
,
message
:
'请选择逻辑错误值字段'
}]
}
>
<
Radio
.
Group
>
<
Radio
.
Group
style=
{
{
width
:
'100%'
}
}
>
<
Row
gutter=
{
[
10
,
10
]
}
>
<
Row
gutter=
{
[
10
,
10
]
}
>
{
field
Options
.
map
((
item
)
=>
(
{
select
Options
.
map
((
item
)
=>
(
<
Col
span=
{
6
}
key=
{
item
.
value
}
>
<
Col
span=
{
6
}
key=
{
item
.
value
}
>
<
Radio
value=
{
item
.
value
}
>
{
item
.
label
}
</
Radio
>
<
Radio
value=
{
item
.
value
}
>
{
item
.
label
}
</
Radio
>
</
Col
>
</
Col
>
...
@@ -132,7 +141,7 @@ export default function ButtonModal() {
...
@@ -132,7 +141,7 @@ export default function ButtonModal() {
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
{
current
===
0
&&
(
{
current
===
0
&&
(
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
检查逻辑错误值字段
检查逻辑错误值字段
</
Button
>
</
Button
>
)
}
)
}
...
...
src/modules/data/preprocess/max/components/ButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -7,29 +7,36 @@ import { useAI } from '@/hooks/useAI'
...
@@ -7,29 +7,36 @@ import { useAI } from '@/hooks/useAI'
import
prompt
from
'@/utils/prompt'
import
prompt
from
'@/utils/prompt'
import
{
useProcessData
}
from
'../query'
import
{
useProcessData
}
from
'../query'
interface
ResultItem
{
name
:
string
desc
:
string
}
export
default
function
ButtonModal
()
{
export
default
function
ButtonModal
()
{
const
[
searchParams
]
=
useSearchParams
()
const
[
searchParams
]
=
useSearchParams
()
const
{
fieldOptions
,
getFieldName
}
=
useDataFieldQuery
()
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
resultsOptions
=
results
.
map
((
result
)
=>
({
label
:
result
.
name
,
value
:
fieldOptions
.
find
((
option
)
=>
option
.
label
===
result
.
name
)?.
value
||
''
,
}))
const
selectOptions
=
resultsOptions
.
length
?
resultsOptions
:
fieldOptions
const
{
isLoading
,
post
}
=
useAI
({
const
{
isLoading
,
post
}
=
useAI
({
onComplete
:
(
message
)
=>
{
onComplete
:
(
message
)
=>
{
try
{
if
(
!
message
.
content
)
return
const
parse
=
JSON
.
parse
(
message
.
content
)
const
parse
=
JSON
.
parse
(
message
.
content
)
console
.
log
(
parse
)
console
.
log
(
parse
)
}
catch
(
error
)
{
setResults
(
parse
.
results
||
[])
console
.
error
(
error
)
}
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
post
({
post
({
response_format
:
{
type
:
'json_object'
},
response_format
:
{
type
:
'json_object'
},
messages
:
[{
role
:
'user'
,
content
:
prompt
.
max
}],
messages
:
[{
role
:
'user'
,
content
:
prompt
.
max
}],
})
})
}
}
const
{
fieldOptions
,
getFieldName
}
=
useDataFieldQuery
()
const
[
open
,
setOpen
]
=
useState
(
false
)
const
[
open
,
setOpen
]
=
useState
(
false
)
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
searchParams
.
get
(
'results'
))
{
if
(
searchParams
.
get
(
'results'
))
{
...
@@ -41,6 +48,7 @@ export default function ButtonModal() {
...
@@ -41,6 +48,7 @@ export default function ButtonModal() {
const
initialValues
=
{
const
initialValues
=
{
action
:
'取该字段平均值'
,
action
:
'取该字段平均值'
,
field
:
searchParams
.
get
(
'results'
)
||
''
,
}
}
const
field
=
Form
.
useWatch
(
'field'
,
form
)
const
field
=
Form
.
useWatch
(
'field'
,
form
)
...
@@ -60,6 +68,7 @@ export default function ButtonModal() {
...
@@ -60,6 +68,7 @@ export default function ButtonModal() {
setOpen
(
false
)
setOpen
(
false
)
setCurrent
(
0
)
setCurrent
(
0
)
remove
()
remove
()
setResults
([])
}
}
const
steps
=
[
const
steps
=
[
...
@@ -67,9 +76,9 @@ export default function ButtonModal() {
...
@@ -67,9 +76,9 @@ export default function ButtonModal() {
title
:
'请选择过大值字段'
,
title
:
'请选择过大值字段'
,
content
:
(
content
:
(
<
Form
.
Item
name=
"field"
rules=
{
[{
required
:
true
,
message
:
'请选择过大值字段'
}]
}
>
<
Form
.
Item
name=
"field"
rules=
{
[{
required
:
true
,
message
:
'请选择过大值字段'
}]
}
>
<
Radio
.
Group
>
<
Radio
.
Group
style=
{
{
width
:
'100%'
}
}
>
<
Row
gutter=
{
[
10
,
10
]
}
>
<
Row
gutter=
{
[
10
,
10
]
}
>
{
field
Options
.
map
((
item
)
=>
(
{
select
Options
.
map
((
item
)
=>
(
<
Col
span=
{
6
}
key=
{
item
.
value
}
>
<
Col
span=
{
6
}
key=
{
item
.
value
}
>
<
Radio
value=
{
item
.
value
}
>
{
item
.
label
}
</
Radio
>
<
Radio
value=
{
item
.
value
}
>
{
item
.
label
}
</
Radio
>
</
Col
>
</
Col
>
...
@@ -133,7 +142,7 @@ export default function ButtonModal() {
...
@@ -133,7 +142,7 @@ export default function ButtonModal() {
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
{
current
===
0
&&
(
{
current
===
0
&&
(
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
检查过大值字段
检查过大值字段
</
Button
>
</
Button
>
)
}
)
}
...
...
src/modules/data/preprocess/min/components/ButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -7,29 +7,36 @@ import { useAI } from '@/hooks/useAI'
...
@@ -7,29 +7,36 @@ import { useAI } from '@/hooks/useAI'
import
prompt
from
'@/utils/prompt'
import
prompt
from
'@/utils/prompt'
import
{
useProcessData
}
from
'../query'
import
{
useProcessData
}
from
'../query'
interface
ResultItem
{
name
:
string
desc
:
string
}
export
default
function
ButtonModal
()
{
export
default
function
ButtonModal
()
{
const
[
searchParams
]
=
useSearchParams
()
const
[
searchParams
]
=
useSearchParams
()
const
{
fieldOptions
,
getFieldName
}
=
useDataFieldQuery
()
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
resultsOptions
=
results
.
map
((
result
)
=>
({
label
:
result
.
name
,
value
:
fieldOptions
.
find
((
option
)
=>
option
.
label
===
result
.
name
)?.
value
||
''
,
}))
const
selectOptions
=
resultsOptions
.
length
?
resultsOptions
:
fieldOptions
const
{
isLoading
,
post
}
=
useAI
({
const
{
isLoading
,
post
}
=
useAI
({
onComplete
:
(
message
)
=>
{
onComplete
:
(
message
)
=>
{
try
{
if
(
!
message
.
content
)
return
const
parse
=
JSON
.
parse
(
message
.
content
)
const
parse
=
JSON
.
parse
(
message
.
content
)
console
.
log
(
parse
)
console
.
log
(
parse
)
}
catch
(
error
)
{
setResults
(
parse
.
results
||
[])
console
.
error
(
error
)
}
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
post
({
post
({
response_format
:
{
type
:
'json_object'
},
response_format
:
{
type
:
'json_object'
},
messages
:
[{
role
:
'user'
,
content
:
prompt
.
m
ax
}],
messages
:
[{
role
:
'user'
,
content
:
prompt
.
m
in
}],
})
})
}
}
const
{
fieldOptions
,
getFieldName
}
=
useDataFieldQuery
()
const
[
open
,
setOpen
]
=
useState
(
false
)
const
[
open
,
setOpen
]
=
useState
(
false
)
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
searchParams
.
get
(
'results'
))
{
if
(
searchParams
.
get
(
'results'
))
{
...
@@ -40,6 +47,7 @@ export default function ButtonModal() {
...
@@ -40,6 +47,7 @@ export default function ButtonModal() {
const
[
form
]
=
Form
.
useForm
()
const
[
form
]
=
Form
.
useForm
()
const
initialValues
=
{
const
initialValues
=
{
action
:
'取该字段平均值'
,
action
:
'取该字段平均值'
,
field
:
searchParams
.
get
(
'results'
)
||
''
,
}
}
const
field
=
Form
.
useWatch
(
'field'
,
form
)
const
field
=
Form
.
useWatch
(
'field'
,
form
)
...
@@ -59,6 +67,7 @@ export default function ButtonModal() {
...
@@ -59,6 +67,7 @@ export default function ButtonModal() {
setOpen
(
false
)
setOpen
(
false
)
setCurrent
(
0
)
setCurrent
(
0
)
remove
()
remove
()
setResults
([])
}
}
const
steps
=
[
const
steps
=
[
...
@@ -66,9 +75,9 @@ export default function ButtonModal() {
...
@@ -66,9 +75,9 @@ export default function ButtonModal() {
title
:
'请选择过小值字段'
,
title
:
'请选择过小值字段'
,
content
:
(
content
:
(
<
Form
.
Item
name=
"field"
rules=
{
[{
required
:
true
,
message
:
'请选择过小值字段'
}]
}
>
<
Form
.
Item
name=
"field"
rules=
{
[{
required
:
true
,
message
:
'请选择过小值字段'
}]
}
>
<
Radio
.
Group
>
<
Radio
.
Group
style=
{
{
width
:
'100%'
}
}
>
<
Row
gutter=
{
[
10
,
10
]
}
>
<
Row
gutter=
{
[
10
,
10
]
}
>
{
field
Options
.
map
((
item
)
=>
(
{
select
Options
.
map
((
item
)
=>
(
<
Col
span=
{
6
}
key=
{
item
.
value
}
>
<
Col
span=
{
6
}
key=
{
item
.
value
}
>
<
Radio
value=
{
item
.
value
}
>
{
item
.
label
}
</
Radio
>
<
Radio
value=
{
item
.
value
}
>
{
item
.
label
}
</
Radio
>
</
Col
>
</
Col
>
...
@@ -132,7 +141,7 @@ export default function ButtonModal() {
...
@@ -132,7 +141,7 @@ export default function ButtonModal() {
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
{
current
===
0
&&
(
{
current
===
0
&&
(
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
检查过小值字段
检查过小值字段
</
Button
>
</
Button
>
)
}
)
}
...
...
src/modules/data/preprocess/null/components/ButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -22,29 +22,35 @@ const ruleOptions = [
...
@@ -22,29 +22,35 @@ const ruleOptions = [
{
label
:
'热卡填充(下)'
,
value
:
'热卡填充(下)'
},
{
label
:
'热卡填充(下)'
,
value
:
'热卡填充(下)'
},
]
]
interface
ResultItem
{
name
:
string
desc
:
string
}
export
default
function
ButtonModal
()
{
export
default
function
ButtonModal
()
{
const
[
searchParams
]
=
useSearchParams
()
const
[
searchParams
]
=
useSearchParams
()
const
{
fieldOptions
,
getFieldName
,
getFieldNames
}
=
useDataFieldQuery
()
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
resultsOptions
=
results
.
map
((
result
)
=>
({
label
:
result
.
name
,
value
:
fieldOptions
.
find
((
option
)
=>
option
.
label
===
result
.
name
)?.
value
||
''
,
}))
const
selectOptions
=
resultsOptions
.
length
?
resultsOptions
:
fieldOptions
const
{
isLoading
,
post
}
=
useAI
({
const
{
isLoading
,
post
}
=
useAI
({
onComplete
:
(
message
)
=>
{
onComplete
:
(
message
)
=>
{
try
{
if
(
!
message
.
content
)
return
const
parse
=
JSON
.
parse
(
message
.
content
)
const
parse
=
JSON
.
parse
(
message
.
content
)
console
.
log
(
parse
)
console
.
log
(
parse
)
if
(
parse
.
results
.
length
)
form
.
setFieldValue
(
'fields'
,
parse
.
results
.
map
((
item
:
any
)
=>
item
.
name
)
||
[])
setResults
(
parse
.
results
||
[])
}
catch
(
error
)
{
console
.
error
(
error
)
}
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
post
({
post
({
response_format
:
{
type
:
'json_object'
},
response_format
:
{
type
:
'json_object'
},
messages
:
[{
role
:
'user'
,
content
:
prompt
.
null
}],
messages
:
[{
role
:
'user'
,
content
:
prompt
.
null
}],
})
})
}
}
const
{
fieldOptions
,
getFieldName
,
getFieldNames
}
=
useDataFieldQuery
()
const
[
open
,
setOpen
]
=
useState
(
false
)
const
[
open
,
setOpen
]
=
useState
(
false
)
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
searchParams
.
get
(
'results'
))
{
if
(
searchParams
.
get
(
'results'
))
{
...
@@ -79,6 +85,7 @@ export default function ButtonModal() {
...
@@ -79,6 +85,7 @@ export default function ButtonModal() {
setOpen
(
false
)
setOpen
(
false
)
setCurrent
(
0
)
setCurrent
(
0
)
remove
()
remove
()
setResults
([])
}
}
const
steps
=
[
const
steps
=
[
...
@@ -86,9 +93,9 @@ export default function ButtonModal() {
...
@@ -86,9 +93,9 @@ export default function ButtonModal() {
title
:
'请选择缺失值字段'
,
title
:
'请选择缺失值字段'
,
content
:
(
content
:
(
<
Form
.
Item
name=
"fields"
>
<
Form
.
Item
name=
"fields"
>
<
Checkbox
.
Group
>
<
Checkbox
.
Group
style=
{
{
width
:
'100%'
}
}
>
<
Row
gutter=
{
[
10
,
10
]
}
>
<
Row
gutter=
{
[
10
,
10
]
}
>
{
field
Options
.
map
((
item
)
=>
(
{
select
Options
.
map
((
item
)
=>
(
<
Col
span=
{
6
}
key=
{
item
.
value
}
>
<
Col
span=
{
6
}
key=
{
item
.
value
}
>
<
Checkbox
value=
{
item
.
value
}
>
{
item
.
label
}
</
Checkbox
>
<
Checkbox
value=
{
item
.
value
}
>
{
item
.
label
}
</
Checkbox
>
</
Col
>
</
Col
>
...
@@ -174,7 +181,7 @@ export default function ButtonModal() {
...
@@ -174,7 +181,7 @@ export default function ButtonModal() {
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
{
current
===
0
&&
(
{
current
===
0
&&
(
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
检查缺失值字段
检查缺失值字段
</
Button
>
</
Button
>
)
}
)
}
...
...
src/modules/data/preprocess/repeat/components/ButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -8,10 +8,7 @@ import { useProcessData } from '../query'
...
@@ -8,10 +8,7 @@ import { useProcessData } from '../query'
export
default
function
ButtonModal
()
{
export
default
function
ButtonModal
()
{
const
[
searchParams
]
=
useSearchParams
()
const
[
searchParams
]
=
useSearchParams
()
const
[
results
,
setResults
]
=
useState
<
Array
<
{
lines
:
number
[];
desc
:
string
}
>>
([
const
[
results
,
setResults
]
=
useState
<
Array
<
{
line
:
number
;
lines
:
number
[];
desc
:
string
}
>>
([])
{
lines
:
[
1
,
3
],
desc
:
'第1行、第3行的数据完全一样'
},
{
lines
:
[
2
,
8
],
desc
:
'第2行、第8行的数据完全一样'
},
])
useEffect
(()
=>
{
useEffect
(()
=>
{
if
(
searchParams
.
get
(
'results'
))
{
if
(
searchParams
.
get
(
'results'
))
{
setResults
(
JSON
.
parse
(
searchParams
.
get
(
'results'
)
||
''
)
as
any
)
setResults
(
JSON
.
parse
(
searchParams
.
get
(
'results'
)
||
''
)
as
any
)
...
@@ -31,7 +28,7 @@ export default function ButtonModal() {
...
@@ -31,7 +28,7 @@ export default function ButtonModal() {
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
post
({
response_format
:
{
type
:
'json_object'
},
messages
:
[{
role
:
'user'
,
content
:
prompt
.
repeat
}]
})
post
({
response_format
:
{
type
:
'json_object'
},
messages
:
[{
role
:
'user'
,
content
:
prompt
.
repeat
}]
})
}
}
...
@@ -43,7 +40,7 @@ export default function ButtonModal() {
...
@@ -43,7 +40,7 @@ export default function ButtonModal() {
action
:
'保留1条,删除剩余重复数据'
,
action
:
'保留1条,删除剩余重复数据'
,
}
}
const
checkedList
:
string
[]
=
Form
.
useWatch
(
'checkedList'
,
form
)
||
[]
const
checkedList
:
number
[]
=
Form
.
useWatch
(
'checkedList'
,
form
)
||
[]
const
ruleOptions
=
[
'保留1条,删除剩余重复数据'
,
'全部删除'
,
'不处理'
]
const
ruleOptions
=
[
'保留1条,删除剩余重复数据'
,
'全部删除'
,
'不处理'
]
...
@@ -51,7 +48,7 @@ export default function ButtonModal() {
...
@@ -51,7 +48,7 @@ export default function ButtonModal() {
// 开始处理
// 开始处理
const
handleStart
=
()
=>
{
const
handleStart
=
()
=>
{
form
.
validateFields
().
then
((
values
)
=>
{
form
.
validateFields
().
then
((
values
)
=>
{
const
params
=
{
...
values
}
const
params
=
{
...
values
,
pk_id
:
checkedList
.
join
(
','
)
}
mutate
(
params
)
mutate
(
params
)
})
})
}
}
...
@@ -61,6 +58,7 @@ export default function ButtonModal() {
...
@@ -61,6 +58,7 @@ export default function ButtonModal() {
setOpen
(
false
)
setOpen
(
false
)
setCurrent
(
0
)
setCurrent
(
0
)
remove
()
remove
()
setResults
([])
}
}
const
steps
=
[
const
steps
=
[
...
@@ -72,7 +70,7 @@ export default function ButtonModal() {
...
@@ -72,7 +70,7 @@ export default function ButtonModal() {
<
Row
gutter=
{
[
10
,
10
]
}
>
<
Row
gutter=
{
[
10
,
10
]
}
>
{
results
.
map
((
item
,
index
)
=>
(
{
results
.
map
((
item
,
index
)
=>
(
<
Col
span=
{
24
}
key=
{
index
}
>
<
Col
span=
{
24
}
key=
{
index
}
>
<
Checkbox
value=
{
item
.
desc
}
>
{
item
.
desc
}
</
Checkbox
>
<
Checkbox
value=
{
item
.
line
}
>
{
item
.
desc
}
</
Checkbox
>
</
Col
>
</
Col
>
))
}
))
}
</
Row
>
</
Row
>
...
@@ -88,7 +86,7 @@ export default function ButtonModal() {
...
@@ -88,7 +86,7 @@ export default function ButtonModal() {
<
Form
.
Item
label=
"要处理的重复值数据"
>
<
Form
.
Item
label=
"要处理的重复值数据"
>
{
checkedList
.
map
((
item
,
index
)
=>
(
{
checkedList
.
map
((
item
,
index
)
=>
(
<
p
key=
{
index
}
>
<
p
key=
{
index
}
>
{
index
+
1
}
、
{
item
}
{
index
+
1
}
、
{
results
.
find
((
resulst
)
=>
resulst
.
line
===
item
)?.
desc
}
</
p
>
</
p
>
))
}
))
}
</
Form
.
Item
>
</
Form
.
Item
>
...
@@ -131,7 +129,7 @@ export default function ButtonModal() {
...
@@ -131,7 +129,7 @@ export default function ButtonModal() {
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
{
current
===
0
&&
(
{
current
===
0
&&
(
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
检查重复值字段
检查重复值字段
</
Button
>
</
Button
>
)
}
)
}
...
...
src/modules/data/preprocess/space/components/ButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -2,26 +2,65 @@ import { useState } from 'react'
...
@@ -2,26 +2,65 @@ import { useState } from 'react'
import
{
Button
,
Flex
,
Modal
,
Radio
,
Form
,
Row
,
Col
}
from
'antd'
import
{
Button
,
Flex
,
Modal
,
Radio
,
Form
,
Row
,
Col
}
from
'antd'
import
{
useDataFieldQuery
}
from
'@/hooks/useQuery'
import
{
useDataFieldQuery
}
from
'@/hooks/useQuery'
import
AppProgressSteps
from
'@/components/AppProgressSteps'
import
AppProgressSteps
from
'@/components/AppProgressSteps'
import
{
useAI
}
from
'@/hooks/useAI'
import
prompt
from
'@/utils/prompt'
import
{
useProcessData
}
from
'../query'
import
{
useProcessData
}
from
'../query'
import
{
useAI
}
from
'@/hooks/useAI'
import
MarkdownRender
from
'@/components/MarkdownRender'
export
default
function
ButtonModal
()
{
export
default
function
ButtonModal
()
{
const
[
result
,
setResult
]
=
useState
(
''
)
const
{
isLoading
,
post
}
=
useAI
({
const
{
isLoading
,
post
}
=
useAI
({
onComplete
:
(
message
)
=>
{
onComplete
:
(
message
)
=>
{
try
{
setResult
(
message
?.
content
||
''
)
const
parse
=
JSON
.
parse
(
message
.
content
)
console
.
log
(
parse
)
}
catch
(
error
)
{
console
.
error
(
error
)
}
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
async
()
=>
{
post
({
post
({
response_format
:
{
type
:
'json_object'
},
messages
:
[
messages
:
[{
role
:
'user'
,
content
:
prompt
.
max
}],
{
role
:
'user'
,
content
:
`任务目标
对数据集中指定字段进行 空格问题分析 ,包括:
1.
空格类型检测 (前后空格、中间多余空格、全空格字段)。
2.
影响评估 (如数据匹配失败、统计错误)。
3.
处理建议 (自动化修复或人工审核)。
输入要求
1.
字段列表 :[字段1、字段2、字段3(用顿号分隔)]
2.
数据样本:[在此粘贴数据片段或上传文件(CSV/XLSX)]
输出格式:
| 序号 | 字段名称 | 空格问题描述 | 影响分析 | 处理建议(格式:建议名称:描述,执行方式:自动/人工)
| 1 | 用户名 | 字段值前后存在空格 | 影响登录系统唯一性校验 | 建议名称:前后空格清理,执行方式:自动
| 2 | 地址 | 字段值前后存在空格 | 导致地址解析失败 | 建议名称:中间空格标准化,执行方式:自动
执行要求
1.
分析规则 :
○
前后空格 :检测字段值首尾是否存在空格。
○
中间多余空格 :检测字段值中是否存在连续空格或不规范空格(如"张 三")。
○
全空格字段 :字段值仅为空格(如" ")。
○
空值与空格混淆 :区分空值(NULL)和空字符串("")。
1.
影响评估 :
○
说明空格问题对业务的影响(如数据匹配、统计分析、系统处理)。`
,
},
],
})
})
}
}
...
@@ -58,12 +97,14 @@ export default function ButtonModal() {
...
@@ -58,12 +97,14 @@ export default function ButtonModal() {
setOpen
(
false
)
setOpen
(
false
)
setCurrent
(
0
)
setCurrent
(
0
)
remove
()
remove
()
setResult
(
''
)
}
}
const
steps
=
[
const
steps
=
[
{
{
title
:
'请选择数据去空格字段'
,
title
:
'请选择数据去空格字段'
,
content
:
(
content
:
(
<>
<
Form
.
Item
name=
"field"
rules=
{
[{
required
:
true
,
message
:
'请选择数据去空格字段'
}]
}
>
<
Form
.
Item
name=
"field"
rules=
{
[{
required
:
true
,
message
:
'请选择数据去空格字段'
}]
}
>
<
Radio
.
Group
>
<
Radio
.
Group
>
<
Row
gutter=
{
[
10
,
10
]
}
>
<
Row
gutter=
{
[
10
,
10
]
}
>
...
@@ -75,6 +116,20 @@ export default function ButtonModal() {
...
@@ -75,6 +116,20 @@ export default function ButtonModal() {
</
Row
>
</
Row
>
</
Radio
.
Group
>
</
Radio
.
Group
>
</
Form
.
Item
>
</
Form
.
Item
>
{
result
&&
(
<
div
style=
{
{
marginTop
:
20
,
background
:
'#f5f5f5'
,
padding
:
20
,
maxHeight
:
300
,
overflow
:
'auto'
,
borderRadius
:
10
,
}
}
>
<
MarkdownRender
>
{
result
}
</
MarkdownRender
>
</
div
>
)
}
</>
),
),
},
},
{
{
...
@@ -131,7 +186,7 @@ export default function ButtonModal() {
...
@@ -131,7 +186,7 @@ export default function ButtonModal() {
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
{
current
===
0
&&
(
{
current
===
0
&&
(
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
AI去空格字段分析与建议
AI去空格字段分析与建议
</
Button
>
</
Button
>
)
}
)
}
...
...
src/modules/data/read/exploration/components/ErrorButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -5,6 +5,7 @@ import { useNavigate } from 'react-router'
...
@@ -5,6 +5,7 @@ import { useNavigate } from 'react-router'
import
AppSteps
from
'@/components/AppSteps'
import
AppSteps
from
'@/components/AppSteps'
import
{
useAI
}
from
'@/hooks/useAI'
import
{
useAI
}
from
'@/hooks/useAI'
import
prompt
from
'@/utils/prompt'
import
prompt
from
'@/utils/prompt'
import
{
useDataFieldQuery
}
from
'@/hooks/useQuery'
interface
ResultItem
{
interface
ResultItem
{
name
:
string
name
:
string
...
@@ -13,7 +14,11 @@ interface ResultItem {
...
@@ -13,7 +14,11 @@ interface ResultItem {
export
default
function
ButtonModal
()
{
export
default
function
ButtonModal
()
{
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
resultsOptions
=
results
.
map
((
result
)
=>
result
.
name
)
const
{
fieldOptions
}
=
useDataFieldQuery
()
const
resultsOptions
=
results
.
map
((
result
)
=>
({
label
:
result
.
name
,
value
:
fieldOptions
.
find
((
option
)
=>
option
.
label
===
result
.
name
)?.
value
||
''
,
}))
const
{
isLoading
,
post
}
=
useAI
({
const
{
isLoading
,
post
}
=
useAI
({
onComplete
:
(
message
)
=>
{
onComplete
:
(
message
)
=>
{
...
@@ -23,7 +28,7 @@ export default function ButtonModal() {
...
@@ -23,7 +28,7 @@ export default function ButtonModal() {
setResults
(
parse
.
results
||
[])
setResults
(
parse
.
results
||
[])
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
post
({
post
({
response_format
:
{
type
:
'json_object'
},
response_format
:
{
type
:
'json_object'
},
messages
:
[{
role
:
'user'
,
content
:
prompt
.
min
}],
messages
:
[{
role
:
'user'
,
content
:
prompt
.
min
}],
...
@@ -65,14 +70,14 @@ export default function ButtonModal() {
...
@@ -65,14 +70,14 @@ export default function ButtonModal() {
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
{
current
===
0
&&
(
{
current
===
0
&&
(
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
智能探索字段数据逻辑错误
智能探索字段数据逻辑错误
</
Button
>
</
Button
>
)
}
)
}
{
current
>
0
&&
<
Button
onClick=
{
()
=>
prev
()
}
>
上一步
</
Button
>
}
{
current
>
0
&&
<
Button
onClick=
{
()
=>
prev
()
}
>
上一步
</
Button
>
}
{
current
<
steps
.
length
-
1
&&
(
{
current
<
steps
.
length
-
1
&&
(
<
Button
type=
"primary"
onClick=
{
()
=>
next
()
}
disabled=
{
!
!
value
}
>
<
Button
type=
"primary"
onClick=
{
()
=>
next
()
}
disabled=
{
!
value
}
>
下一步
下一步
</
Button
>
</
Button
>
)
}
)
}
...
...
src/modules/data/read/exploration/components/MaxButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -5,16 +5,20 @@ import { useNavigate } from 'react-router'
...
@@ -5,16 +5,20 @@ import { useNavigate } from 'react-router'
import
AppSteps
from
'@/components/AppSteps'
import
AppSteps
from
'@/components/AppSteps'
import
{
useAI
}
from
'@/hooks/useAI'
import
{
useAI
}
from
'@/hooks/useAI'
import
prompt
from
'@/utils/prompt'
import
prompt
from
'@/utils/prompt'
import
{
useDataFieldQuery
}
from
'@/hooks/useQuery'
interface
ResultItem
{
interface
ResultItem
{
key
:
string
name
:
string
name
:
string
desc
:
string
desc
:
string
}
}
export
default
function
ButtonModal
()
{
export
default
function
ButtonModal
()
{
const
{
fieldOptions
}
=
useDataFieldQuery
()
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
resultsOptions
=
results
.
map
((
result
)
=>
({
label
:
result
.
name
,
value
:
result
.
key
}))
const
resultsOptions
=
results
.
map
((
result
)
=>
({
label
:
result
.
name
,
value
:
fieldOptions
.
find
((
option
)
=>
option
.
label
===
result
.
name
)?.
value
||
''
,
}))
const
{
isLoading
,
post
}
=
useAI
({
const
{
isLoading
,
post
}
=
useAI
({
onComplete
:
(
message
)
=>
{
onComplete
:
(
message
)
=>
{
...
@@ -24,7 +28,7 @@ export default function ButtonModal() {
...
@@ -24,7 +28,7 @@ export default function ButtonModal() {
setResults
(
parse
.
results
||
[])
setResults
(
parse
.
results
||
[])
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
post
({
post
({
response_format
:
{
type
:
'json_object'
},
response_format
:
{
type
:
'json_object'
},
messages
:
[{
role
:
'user'
,
content
:
prompt
.
max
}],
messages
:
[{
role
:
'user'
,
content
:
prompt
.
max
}],
...
@@ -73,7 +77,7 @@ export default function ButtonModal() {
...
@@ -73,7 +77,7 @@ export default function ButtonModal() {
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
{
current
===
0
&&
(
{
current
===
0
&&
(
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
智能探索过大值字段
智能探索过大值字段
</
Button
>
</
Button
>
)
}
)
}
...
...
src/modules/data/read/exploration/components/MinButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -5,16 +5,20 @@ import { useNavigate } from 'react-router'
...
@@ -5,16 +5,20 @@ import { useNavigate } from 'react-router'
import
AppSteps
from
'@/components/AppSteps'
import
AppSteps
from
'@/components/AppSteps'
import
{
useAI
}
from
'@/hooks/useAI'
import
{
useAI
}
from
'@/hooks/useAI'
import
prompt
from
'@/utils/prompt'
import
prompt
from
'@/utils/prompt'
import
{
useDataFieldQuery
}
from
'@/hooks/useQuery'
interface
ResultItem
{
interface
ResultItem
{
key
:
string
name
:
string
name
:
string
desc
:
string
desc
:
string
}
}
export
default
function
ButtonModal
()
{
export
default
function
ButtonModal
()
{
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
resultsOptions
=
results
.
map
((
result
)
=>
({
label
:
result
.
name
,
value
:
result
.
key
}))
const
{
fieldOptions
}
=
useDataFieldQuery
()
const
resultsOptions
=
results
.
map
((
result
)
=>
({
label
:
result
.
name
,
value
:
fieldOptions
.
find
((
option
)
=>
option
.
label
===
result
.
name
)?.
value
||
''
,
}))
const
{
isLoading
,
post
}
=
useAI
({
const
{
isLoading
,
post
}
=
useAI
({
onComplete
:
(
message
)
=>
{
onComplete
:
(
message
)
=>
{
...
@@ -24,7 +28,7 @@ export default function ButtonModal() {
...
@@ -24,7 +28,7 @@ export default function ButtonModal() {
setResults
(
parse
.
results
||
[])
setResults
(
parse
.
results
||
[])
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
post
({
post
({
response_format
:
{
type
:
'json_object'
},
response_format
:
{
type
:
'json_object'
},
messages
:
[{
role
:
'user'
,
content
:
prompt
.
min
}],
messages
:
[{
role
:
'user'
,
content
:
prompt
.
min
}],
...
@@ -66,7 +70,7 @@ export default function ButtonModal() {
...
@@ -66,7 +70,7 @@ export default function ButtonModal() {
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
{
current
===
0
&&
(
{
current
===
0
&&
(
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
智能探索过小值字段
智能探索过小值字段
</
Button
>
</
Button
>
)
}
)
}
...
...
src/modules/data/read/exploration/components/NullButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -5,18 +5,22 @@ import { useNavigate } from 'react-router'
...
@@ -5,18 +5,22 @@ import { useNavigate } from 'react-router'
import
AppSteps
from
'@/components/AppSteps'
import
AppSteps
from
'@/components/AppSteps'
import
{
useAI
}
from
'@/hooks/useAI'
import
{
useAI
}
from
'@/hooks/useAI'
import
prompt
from
'@/utils/prompt'
import
prompt
from
'@/utils/prompt'
import
{
useDataFieldQuery
}
from
'@/hooks/useQuery'
const
CheckboxGroup
=
Checkbox
.
Group
const
CheckboxGroup
=
Checkbox
.
Group
interface
ResultItem
{
interface
ResultItem
{
key
:
string
name
:
string
name
:
string
desc
:
string
desc
:
string
}
}
export
default
function
ButtonModal
()
{
export
default
function
ButtonModal
()
{
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
[
results
,
setResults
]
=
useState
<
ResultItem
[]
>
([])
const
resultsOptions
=
results
.
map
((
result
)
=>
({
label
:
result
.
name
,
value
:
result
.
key
}))
const
{
fieldOptions
}
=
useDataFieldQuery
()
const
resultsOptions
=
results
.
map
((
result
)
=>
({
label
:
result
.
name
,
value
:
fieldOptions
.
find
((
option
)
=>
option
.
label
===
result
.
name
)?.
value
||
''
,
}))
const
{
isLoading
,
post
}
=
useAI
({
const
{
isLoading
,
post
}
=
useAI
({
onComplete
:
(
message
)
=>
{
onComplete
:
(
message
)
=>
{
...
@@ -28,7 +32,7 @@ export default function ButtonModal() {
...
@@ -28,7 +32,7 @@ export default function ButtonModal() {
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
post
({
post
({
response_format
:
{
type
:
'json_object'
},
response_format
:
{
type
:
'json_object'
},
messages
:
[{
role
:
'user'
,
content
:
prompt
.
null
}],
messages
:
[{
role
:
'user'
,
content
:
prompt
.
null
}],
...
@@ -119,7 +123,7 @@ export default function ButtonModal() {
...
@@ -119,7 +123,7 @@ export default function ButtonModal() {
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
{
current
===
0
&&
(
{
current
===
0
&&
(
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
智能探索缺失值字段
智能探索缺失值字段
</
Button
>
</
Button
>
)
}
)
}
...
...
src/modules/data/read/exploration/components/OtherButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -28,7 +28,7 @@ export default function ButtonModal() {
...
@@ -28,7 +28,7 @@ export default function ButtonModal() {
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
const
names
=
results
.
map
((
item
:
any
)
=>
item
.
name
).
join
(
','
)
const
names
=
results
.
map
((
item
:
any
)
=>
item
.
name
).
join
(
','
)
post
({
post
({
response_format
:
{
type
:
'json_object'
},
response_format
:
{
type
:
'json_object'
},
...
@@ -116,7 +116,7 @@ json
...
@@ -116,7 +116,7 @@ json
open=
{
open
}
open=
{
open
}
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
一键计算
一键计算
</
Button
>
</
Button
>
</
Flex
>
</
Flex
>
...
...
src/modules/data/read/exploration/components/RepeatButtonModal.tsx
浏览文件 @
e32f5936
...
@@ -7,10 +7,7 @@ import { useAI } from '@/hooks/useAI'
...
@@ -7,10 +7,7 @@ import { useAI } from '@/hooks/useAI'
import
prompt
from
'@/utils/prompt'
import
prompt
from
'@/utils/prompt'
export
default
function
ButtonModal
()
{
export
default
function
ButtonModal
()
{
const
[
results
,
setResults
]
=
useState
<
Array
<
{
lines
:
number
[];
desc
:
string
}
>>
([
const
[
results
,
setResults
]
=
useState
<
Array
<
{
line
:
number
;
lines
:
number
[];
desc
:
string
}
>>
([])
{
lines
:
[
1
,
3
],
desc
:
'第1行、第3行的数据完全一样'
},
{
lines
:
[
2
,
8
],
desc
:
'第2行、第8行的数据完全一样'
},
])
const
{
isLoading
,
post
}
=
useAI
({
const
{
isLoading
,
post
}
=
useAI
({
onComplete
:
(
message
)
=>
{
onComplete
:
(
message
)
=>
{
...
@@ -20,7 +17,7 @@ export default function ButtonModal() {
...
@@ -20,7 +17,7 @@ export default function ButtonModal() {
setResults
(
parse
.
results
||
[])
setResults
(
parse
.
results
||
[])
},
},
})
})
const
handle
Search
=
()
=>
{
const
handle
AI
=
()
=>
{
post
({
post
({
response_format
:
{
type
:
'json_object'
},
response_format
:
{
type
:
'json_object'
},
messages
:
[{
role
:
'user'
,
content
:
prompt
.
repeat
}],
messages
:
[{
role
:
'user'
,
content
:
prompt
.
repeat
}],
...
@@ -52,7 +49,7 @@ export default function ButtonModal() {
...
@@ -52,7 +49,7 @@ export default function ButtonModal() {
footer=
{
footer=
{
<
Flex
justify=
"center"
gap=
{
20
}
>
<
Flex
justify=
"center"
gap=
{
20
}
>
{
current
===
0
&&
(
{
current
===
0
&&
(
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
Search
}
>
<
Button
type=
"primary"
loading=
{
isLoading
}
onClick=
{
handle
AI
}
>
智能探索重复值字段
智能探索重复值字段
</
Button
>
</
Button
>
)
}
)
}
...
...
src/utils/prompt.ts
浏览文件 @
e32f5936
...
@@ -5,8 +5,8 @@ const prompt = {
...
@@ -5,8 +5,8 @@ const prompt = {
json
json
{
{
results: [
results: [
{ name: '字段1',
key: 'name1',
desc: 'A000001、A000002...' },
{ name: '字段1', desc: 'A000001、A000002...' },
{ name: '字段2',
key: 'name2',
desc: 'A000001、A000002...' },
{ name: '字段2', desc: 'A000001、A000002...' },
],
],
}
}
...
@@ -19,8 +19,8 @@ json
...
@@ -19,8 +19,8 @@ json
json
json
{
{
results: [
results: [
{ lines: [1, 3], desc: '第1行、第3行的数据完全一样' },
{ line
: 1, line
s: [1, 3], desc: '第1行、第3行的数据完全一样' },
{ lines: [2, 8], desc: '第2行、第8行的数据完全一样' },
{ line
: 2, line
s: [2, 8], desc: '第2行、第8行的数据完全一样' },
],
],
}
}
...
@@ -32,8 +32,8 @@ json
...
@@ -32,8 +32,8 @@ json
json
json
{
{
results: [
results: [
{ name: '字段1',
key: 'name1',
desc: 'XXXX值过大,参考XXXXXXXX' },
{ name: '字段1', desc: 'XXXX值过大,参考XXXXXXXX' },
{ name: '字段2',
key: 'name2',
desc: 'XXXX值过大,参考XXXXXXXX' },
{ name: '字段2', desc: 'XXXX值过大,参考XXXXXXXX' },
],
],
}
}
...
@@ -45,8 +45,8 @@ json
...
@@ -45,8 +45,8 @@ json
json
json
{
{
results: [
results: [
{ name: '字段1',
key: 'name1',
desc: 'XXXX值过小,参考XXXXXXXX' },
{ name: '字段1', desc: 'XXXX值过小,参考XXXXXXXX' },
{ name: '字段2',
key: 'name2',
desc: 'XXXX值过小,参考XXXXXXXX' },
{ name: '字段2', desc: 'XXXX值过小,参考XXXXXXXX' },
],
],
}
}
...
@@ -57,7 +57,7 @@ json
...
@@ -57,7 +57,7 @@ json
返回格式示例:
返回格式示例:
json
json
{
{
results: [{ name: '字段1',
key: 'name1',
desc: 'XXXX值存在逻辑错误,参考XXXXXXXX' }],
results: [{ name: '字段1', desc: 'XXXX值存在逻辑错误,参考XXXXXXXX' }],
}
}
要求:
要求:
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论