Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
lmp_web
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
yujian
lmp_web
Commits
d0ea71d8
Commit
d0ea71d8
authored
Apr 09, 2024
by
mhw
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
版本迭代
parent
7f127c61
Changes
20
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
1243 additions
and
343 deletions
+1243
-343
DataSetCleaning.js
src/api/GptController/DataSetCleaning.js
+47
-0
DatasetVersion.js
src/api/GptController/DatasetVersion.js
+3
-1
gptController.js
src/api/gptController.js
+3
-1
index.vue
src/components/DownList/index.vue
+75
-0
gptStaticDict.js
src/staticDict/gptStaticDict.js
+81
-1
index.js
src/staticDict/index.js
+11
-5
cleaningTable.vue
...ining/dataServices/dataCleansing/dialog/cleaningTable.vue
+117
-0
configeCard.vue
...raining/dataServices/dataCleansing/dialog/configeCard.vue
+110
-0
details.vue
...gptTraining/dataServices/dataCleansing/dialog/details.vue
+268
-0
editOrAdd.vue
...tTraining/dataServices/dataCleansing/dialog/editOrAdd.vue
+314
-67
index.vue
src/views/gptTraining/dataServices/dataCleansing/index.vue
+89
-38
index.vue
src/views/gptTraining/dataServices/dataEnhancement/index.vue
+27
-64
index.vue
src/views/gptTraining/dataServices/myDataSet/index.vue
+4
-6
derived.vue
...ataServices/myDataSet/versionsTableBox/dialog/derived.vue
+3
-43
particulars.vue
...ervices/myDataSet/versionsTableBox/dialog/particulars.vue
+2
-2
index.vue
...raining/dataServices/myDataSet/versionsTableBox/index.vue
+32
-9
derived.vue
...ices/onlineAnnotation/versionsTableBox/dialog/derived.vue
+3
-43
index.vue
.../dataServices/onlineAnnotation/versionsTableBox/index.vue
+33
-11
index.vue
...iews/gptTraining/modelService/serviceManagement/index.vue
+20
-52
vue.config.js
vue.config.js
+1
-0
No files found.
src/api/GptController/DataSetCleaning.js
0 → 100644
View file @
d0ea71d8
export
default
class
DataSetCleaning
{
static
list
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetClean/list'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
view
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetClean/view'
,
'get'
,
params
,
axiosOption
,
httpOption
);
}
static
startClean
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetClean/startClean'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
add
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetClean/add'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
stopClean
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetClean/stopClean'
,
'get'
,
params
,
axiosOption
,
httpOption
);
}
static
restartClean
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetClean/restartClean'
,
'get'
,
params
,
axiosOption
,
httpOption
);
}
static
addAll
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetClean/addAll'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
update
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetClean/update'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
delete
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetClean/delete'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
getCleanList
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetCleanConfig/getCleanList'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
getDesensitiveList
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetCleanConfig/getDesensitiveList'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
getDeduplicateList
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetCleanConfig/getDeduplicateList'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
getFilterList
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetCleanConfig/getFilterList'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
configList
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetCleanConfig/list'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
}
src/api/GptController/DatasetVersion.js
View file @
d0ea71d8
...
...
@@ -18,10 +18,12 @@ export default class DatasetVersion {
static
load
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetVersion/load'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
outputList
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetOutput/list'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
outputDelete
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetOutput/delete'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
static
add
(
sender
,
params
,
axiosOption
,
httpOption
)
{
return
sender
.
doUrl
(
'/admin/app/datasetVersion/add'
,
'post'
,
params
,
axiosOption
,
httpOption
);
}
...
...
src/api/gptController.js
View file @
d0ea71d8
...
...
@@ -18,6 +18,7 @@ import KnowledgeManage from './GptController/KnowledgeManage.js';
import
DatasetData
from
'./GptController/DatasetData.js'
;
import
ModelDeployment
from
'./GptController/ModelDeployment.js'
;
import
KnowledgeGraph
from
'./GptController/KnowledgeGraph.js'
;
import
DataSetCleaning
from
'./GptController/DataSetCleaning.js'
;
export
{
TemplateController
,
...
...
@@ -38,5 +39,6 @@ export {
KnowledgeManage
,
DatasetData
,
ModelDeployment
,
KnowledgeGraph
KnowledgeGraph
,
DataSetCleaning
}
src/components/DownList/index.vue
0 → 100644
View file @
d0ea71d8
<!-- 下载文件列表 -->
<
template
>
<el-table
:data=
"outputList"
border
style=
"width: 1200px"
>
<el-table-column
prop=
"markFormatType"
label=
"标注格式类型"
>
</el-table-column>
<el-table-column
prop=
"outputContent"
label=
"导出内容"
>
</el-table-column>
<el-table-column
prop=
"fileSize"
label=
"文件大小"
>
</el-table-column>
<el-table-column
prop=
"dataCount"
label=
"数据量"
>
</el-table-column>
<el-table-column
prop=
"createUserId"
label=
"创建人"
>
<template
slot-scope=
"scope"
>
{{
scope
.
row
.
createUserIdDictMap
.
name
}}
</
template
>
</el-table-column>
<el-table-column
prop=
"outputStartTime"
label=
"导出开始时间"
width=
"150"
>
</el-table-column>
<el-table-column
prop=
"outputEndTime"
label=
"导出完成时间"
width=
"150"
>
</el-table-column>
<el-table-column
prop=
"status"
label=
"状态"
>
<
template
slot-scope=
"scope"
>
{{
OutputStatus
.
getValue
(
scope
.
row
.
status
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
fixed=
"right"
>
<
template
slot-scope=
"scope"
>
<el-button
@
click=
"down(scope.row.downloadUrl)"
type=
"text"
size=
"mini"
>
下载
</el-button>
<el-button
@
click=
"outputDelete(scope.row.outputId)"
type=
"text"
size=
"mini"
>
刪除
</el-button>
</
template
>
</el-table-column>
</el-table>
</template>
<
script
>
import
{
DatasetVersion
}
from
'@/api/gptController.js'
export
default
{
data
()
{
return
{}
},
props
:
[
'outputList'
],
components
:
{},
computed
:
{},
mounted
()
{},
methods
:
{
down
(
url
)
{
let
downDom
=
document
.
createElement
(
'a'
)
downDom
.
href
=
url
downDom
.
click
()
},
outputDelete
(
outputId
)
{
this
.
$confirm
(
'是否确认删除'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
let
params
=
{
outputId
}
DatasetVersion
.
outputDelete
(
this
,
params
).
then
((
res
)
=>
{
this
.
outputList
=
res
.
data
.
dataList
console
.
log
(
this
.
outputList
)
})
})
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/staticDict/gptStaticDict.js
View file @
d0ea71d8
...
...
@@ -198,6 +198,11 @@ const CleanStatus = new DictionaryBase('清洗状态', [
id
:
1
,
name
:
'清洗完成'
,
symbol
:
'1'
},
{
id
:
2
,
name
:
'暂停清洗'
,
symbol
:
'2'
}
]);
Vue
.
prototype
.
CleanStatus
=
CleanStatus
;
...
...
@@ -645,6 +650,80 @@ const KnowledgeFormat = new DictionaryBase('知识格式', [
]);
Vue
.
prototype
.
KnowledgeFormat
=
KnowledgeFormat
;
const
CleaningMethod
=
new
DictionaryBase
(
'清洗方式'
,
[
{
id
:
1
,
name
:
'移除不可见字符'
,
symbol
:
'remove_invisible_character'
},
{
id
:
2
,
name
:
'规范化空格'
,
symbol
:
'replace_uniform_whitespace'
},
{
id
:
3
,
name
:
'去除乱码'
,
symbol
:
'remove_non_meaning_characters'
},
{
id
:
4
,
name
:
'繁体转简体'
,
symbol
:
'replace_traditional_chinese_to_simplified'
},
{
id
:
5
,
name
:
'去除网页标识符'
,
symbol
:
'remove_web_identifiers'
},
{
id
:
6
,
name
:
'去除表情'
,
symbol
:
'remove_emoji'
},
{
id
:
7
,
name
:
'检查文档的词数目'
,
symbol
:
'filter_check_number_words'
},
{
id
:
8
,
name
:
'检查文档的字重复率'
,
symbol
:
'filter_check_character_repetition_removal'
},
{
id
:
9
,
name
:
'检查文档的词重复率'
,
symbol
:
'filter_check_word_repetition_removal'
},
{
id
:
10
,
name
:
'检查文档的特殊字符率'
,
symbol
:
'filter_check_special_characters'
},
{
id
:
11
,
name
:
'检查文档的色情暴力词率'
,
symbol
:
'filter_check_flagged_words'
},
{
id
:
12
,
name
:
'去除Email'
,
symbol
:
'replace_emails'
},
{
id
:
13
,
name
:
'去除IP地址'
,
symbol
:
'replace_ip'
},
{
id
:
14
,
name
:
'去除数字'
,
symbol
:
'replace_identifier'
}
]);
Vue
.
prototype
.
CleaningMethod
=
CleaningMethod
;
export
{
TemplateLabelDict
,
ScenarioTypeDict
,
...
...
@@ -670,5 +749,6 @@ export {
KnowledgeImportFormat
,
KnowledgeFormat
,
ImportStatus
,
PublishStatus
PublishStatus
,
CleaningMethod
}
src/staticDict/index.js
View file @
d0ea71d8
...
...
@@ -4,13 +4,14 @@
import
Vue
from
'vue'
;
class
DictionaryBase
extends
Map
{
constructor
(
name
,
dataList
,
keyId
=
'id'
,
symbolId
=
'symbol'
)
{
constructor
(
name
,
dataList
,
keyId
=
'id'
,
symbolId
=
'symbol'
)
{
super
();
this
.
showName
=
name
;
this
.
setList
(
dataList
,
keyId
,
symbolId
);
this
.
dataList
=
dataList
}
setList
(
dataList
,
keyId
=
'id'
,
symbolId
=
'symbol'
)
{
setList
(
dataList
,
keyId
=
'id'
,
symbolId
=
'symbol'
)
{
this
.
clear
();
if
(
Array
.
isArray
(
dataList
))
{
dataList
.
forEach
((
item
)
=>
{
...
...
@@ -26,7 +27,7 @@ class DictionaryBase extends Map {
}
}
getList
(
valueId
=
'name'
,
parentIdKey
=
'parentId'
,
filter
)
{
getList
(
valueId
=
'name'
,
parentIdKey
=
'parentId'
,
filter
)
{
let
temp
=
[];
this
.
forEach
((
value
,
key
)
=>
{
let
obj
=
{
...
...
@@ -48,14 +49,19 @@ class DictionaryBase extends Map {
return
temp
;
}
getValue
(
id
,
valueId
=
'name'
)
{
getValue
(
id
,
valueId
=
'name'
)
{
// 如果id为boolean类型,则自动转换为0和1
if
(
typeof
id
===
'boolean'
)
{
id
=
id
?
1
:
0
;
}
return
(
this
.
get
(
id
)
||
{})[
valueId
];
}
fromSymbolgetValue
(
symbol
,
valueId
=
'name'
)
{
return
this
.
dataList
.
find
((
item
)
=>
{
return
item
.
symbol
===
symbol
})[
valueId
]
// return (this.get(symbol) || {})[valueId];
}
}
const
SysUserStatus
=
new
DictionaryBase
(
'用户状态'
,
[
...
...
src/views/gptTraining/dataServices/dataCleansing/dialog/cleaningTable.vue
0 → 100644
View file @
d0ea71d8
<!-- -->
<
template
>
<div
class=
"tableBox"
style=
" width:100% "
>
<vxe-table
border
show-header-overflow
show-overflow
:row-config=
"
{ isHover: true }" :data="tableData.impl.dataList" min-height="96">
<vxe-column
field=
"cleanId"
title=
"序号"
></vxe-column>
<vxe-column
field=
"cleanBeforeData"
title=
"清洗前"
>
<!--
<template
slot-scope=
"scope"
>
{{
CleanStatus
.
getValue
(
scope
.
row
.
cleanStatus
)
}}
</
template
>
-->
</vxe-column>
<vxe-column
field=
"cleanAfterData"
title=
"清洗后"
>
</vxe-column>
</vxe-table>
<el-row
slot=
"pagination"
type=
"flex"
justify=
"end"
style=
"margin-top: 16px;width: 100%;"
>
<el-pagination
:total=
"tableData.impl.totalCount"
:current-page=
"tableData.impl.currentPage"
:page-size=
"tableData.impl.pageSize"
:page-sizes=
"[10, 20, 50, 100]"
layout=
"total, prev, pager, next, sizes"
@
current-change=
"tableData.impl.onCurrentPageChange"
@
size-change=
"tableData.impl.onPageSizeChange"
>
</el-pagination>
</el-row>
</div>
</template>
<
script
>
/* eslint-disable-next-line */
import
{
DropdownWidget
,
TableWidget
,
UploadWidget
,
ChartWidget
}
from
'@/utils/widget.js'
import
{
DataSetCleaning
}
from
'@/api/gptController.js'
export
default
{
data
()
{
return
{
tableData
:
{
impl
:
new
TableWidget
(
this
.
getwidgetData
,
true
,
true
,
false
,
undefined
,
false
)
},
head
:
{
clean
:
[
{
name
:
'清洗前'
,
key
:
'cleanBeforeData'
},
{
name
:
'清洗后'
,
key
:
'cleanAfterData'
}
],
desensitive
:
[
{
name
:
'清洗前'
,
key
:
'cleanBeforeData'
},
{
name
:
'清洗后'
,
key
:
'cleanAfterData'
}
],
filter
:
[
{
name
:
'文本内容'
}
]
}
}
},
props
:
[
'api'
,
'cleanId'
],
components
:
{},
computed
:
{},
mounted
()
{
this
.
refresh
()
},
methods
:
{
getwidgetData
(
params
)
{
if
(
params
==
null
)
params
=
{}
let
key
switch
(
this
.
api
)
{
case
'getCleanList'
:
key
=
'cleanDtoFilter'
break
case
'getDesensitiveList'
:
key
=
'desensitiveDtoFilter'
break
case
'getFilterList'
:
key
=
'filterDtoFilter'
break
default
:
break
}
params
=
{
[
key
]:
{
cleanId
:
this
.
cleanId
},
...
params
}
return
new
Promise
((
resolve
,
reject
)
=>
{
DataSetCleaning
[
this
.
api
](
this
,
params
)
.
then
((
res
)
=>
{
resolve
({
dataList
:
res
.
data
.
dataList
,
totalCount
:
0
})
})
.
catch
((
e
)
=>
{
reject
(
e
)
})
})
},
refresh
(
reloadData
=
false
)
{
if
(
reloadData
)
{
this
.
tableData
.
impl
.
refreshTable
(
true
,
1
)
}
else
{
this
.
tableData
.
impl
.
refreshTable
()
}
}
}
}
</
script
>
<
style
scoped
>
</
style
>
src/views/gptTraining/dataServices/dataCleansing/dialog/configeCard.vue
0 → 100644
View file @
d0ea71d8
<!-- 配置卡片 -->
<
template
>
<div>
<el-card
class=
"box-card"
>
<div
class=
"topBox"
>
<el-tooltip
class=
"item"
effect=
"dark"
:content=
"value.tag"
placement=
"top-start"
:disabled=
'!isTextOverflowing(value.tag,1,156,16)'
>
<div
class=
"title omit"
>
{{
value
.
tag
}}
</div>
</el-tooltip>
<el-switch
v-if=
"'isopen' in value"
v-model=
"value.isopen"
active-color=
"#13ce66"
inactive-color=
"#ff4949"
>
</el-switch>
</div>
<el-tooltip
class=
"item"
effect=
"dark"
:content=
"value.content"
placement=
"top-start"
:disabled=
'!isTextOverflowing(value.content,2,206,12)'
>
<div
class=
"content omit_2"
>
{{
value
.
content
}}
</div>
</el-tooltip>
<!--
<el-divider
style=
"margin: 14px 0"
></el-divider>
-->
<component
v-if=
"value.inputCompont"
:is=
'value.inputCompont.compont'
v-model=
"value.value"
v-bind=
"value.inputCompont.attrs"
style=
"width:100%"
></component>
</el-card>
</div>
</
template
>
<
script
>
export
default
{
data
()
{
return
{}
},
props
:
[
'value'
],
components
:
{},
computed
:
{},
mounted
()
{},
methods
:
{
isTextOverflowing
(
text
,
lineNum
=
1
,
width
,
fontSize
)
{
// 创建一个临时的div来计算文本是否超出
const
tempDiv
=
document
.
createElement
(
'div'
)
tempDiv
.
innerHTML
=
text
tempDiv
.
style
.
position
=
'absolute'
tempDiv
.
style
.
width
=
width
+
'px'
tempDiv
.
style
.
opacity
=
0
tempDiv
.
style
.
overflow
=
'hidden'
tempDiv
.
style
.
whiteSpace
=
'nowrap'
tempDiv
.
style
.
fontSize
=
fontSize
+
'px'
document
.
body
.
appendChild
(
tempDiv
)
const
isOverflowing
=
tempDiv
.
scrollWidth
>
tempDiv
.
offsetWidth
*
lineNum
document
.
body
.
removeChild
(
tempDiv
)
return
isOverflowing
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
@import
'@/assets/style/element-variables.scss'
;
.box-card
{
width
:
240px
;
min-height
:
150px
;
flex-shrink
:
0
;
margin-bottom
:
20px
;
background
:
linear-gradient
(
to
bottom
,
#e7efff
10%
,
#fff
50%
);
}
.box-card-2
{
width
:
240px
;
flex-shrink
:
0
;
}
.tag
:not
(
:last-child
)
{
margin-right
:
10px
;
}
div
/
deep
/
.el-card__body
{
height
:
100%
;
width
:
100%
;
position
:
relative
;
}
div
/
deep
/
.el-divider--horizontal
{
margin
:
14px
0
0
0
;
}
.topBox
{
display
:
flex
;
justify-content
:
space-between
;
}
.title
{
font-size
:
16px
;
color
:
$--color-text-primary
;
margin-bottom
:
16px
;
width
:
156px
;
}
.content
{
margin-bottom
:
10px
;
color
:
$--color-text-secondary
;
width
:
206px
;
font-size
:
12px
;
}
.buttonBox
{
display
:
flex
;
justify-content
:
space-between
;
position
:
absolute
;
bottom
:
0
;
width
:
calc
(
100%
-
32px
);
}
</
style
>
src/views/gptTraining/dataServices/dataCleansing/dialog/details.vue
0 → 100644
View file @
d0ea71d8
<!-- 详情 -->
<
template
>
<div>
<el-card
class=
"box-card"
>
<div
class=
"topBox"
>
<div
class=
"title omit"
>
基本信息
</div>
</div>
<div
class=
"content"
>
<div
class=
"item"
>
<div
class=
"label"
>
任务ID:
</div>
<span
class=
"value"
>
{{
row
.
cleanId
}}
</span>
</div>
<div
class=
"item"
>
<div
class=
"label"
>
任务名称:
</div>
<span
class=
"value"
>
{{
row
.
taskName
}}
</span>
</div>
<div
class=
"item"
>
<div
class=
"label"
>
清洗类型:
</div>
<span
class=
"value"
>
{{
row
.
cleanType
==
1
?
'文本数据清洗'
:
''
}}
</span>
</div>
<div
class=
"item"
>
<div
class=
"label"
>
清洗数据集:
</div>
<span
class=
"value"
>
{{
row
.
datasetName
}}
</span>
</div>
<div
class=
"item"
>
<div
class=
"label"
>
创建人:
</div>
<span
class=
"value"
>
{{
row
.
createUserIdDictMap
.
name
}}
</span>
</div>
<div
class=
"item"
>
<div
class=
"label"
>
创建时间:
</div>
<span
class=
"value"
>
{{
row
.
startTime
}}
</span>
</div>
<div
class=
"item"
>
<div
class=
"label"
>
完成时间:
</div>
<span
class=
"value"
>
{{
row
.
finishTime
}}
</span>
</div>
</div>
</el-card>
<el-card
class=
"box-card"
>
<div>
<div
class=
"title"
>
异常清洗
</div>
<div
class=
"cardList"
>
<template
v-for=
"(item,index) in filterCleanConfig"
>
<configeCard
v-model=
"filterCleanConfig[index]"
:key=
"item.name"
/>
</
template
>
<div
style=
"width: 240px;"
v-for=
"item in 7"
:key=
"item"
>
</div>
</div>
<cleaningTable
:cleanId=
'row.cleanId'
api=
"getCleanList"
/>
</div>
</el-card>
<el-card
class=
"box-card"
>
<div>
<div
class=
"title"
>
过滤
</div>
<div
class=
"cardList"
>
<
template
v-for=
"(item,index) in filterFilterConfig"
>
<configeCard
v-model=
"filterFilterConfig[index]"
:key=
"item.name"
/>
</
template
>
<div
style=
"width: 240px;"
v-for=
"item in 7"
:key=
"item"
>
</div>
</div>
<cleaningTable
:cleanId=
'row.cleanId'
api=
"getFilterList"
/>
</div>
</el-card>
<el-card
class=
"box-card"
>
<div>
<div
class=
"title"
>
去隐私
</div>
<div
class=
"cardList"
>
<
template
v-for=
"(item,index) in filterDesensitiveConfig"
>
<configeCard
v-model=
"filterDesensitiveConfig[index]"
:key=
"item.name"
/>
</
template
>
<div
style=
"width: 240px;"
v-for=
"item in 7"
:key=
"item"
>
</div>
</div>
<cleaningTable
:cleanId=
'row.cleanId'
api=
"getDesensitiveList"
/>
</div>
</el-card>
</div>
</template>
<
script
>
import
configeCard
from
'./configeCard.vue'
import
cleaningTable
from
'./cleaningTable.vue'
import
{
DataSetCleaning
}
from
'@/api/gptController.js'
export
default
{
data
()
{
return
{
cleanConfig
:
[
{
icon
:
''
,
tag
:
'移除不可见字符'
,
name
:
'remove_invisible_character'
,
content
:
'移除ASCII中的一些不可见字符, 如0-32 和127-160这两个范围'
},
{
icon
:
''
,
tag
:
'规范化空格'
,
name
:
'replace_uniform_whitespace'
,
content
:
'将不同的unicode空格比如 u2008,转成正常的空格'
},
{
icon
:
''
,
tag
:
'去除乱码'
,
name
:
'remove_non_meaning_characters'
,
content
:
'去除乱码和无意义的unicode'
},
{
icon
:
''
,
tag
:
'繁体转简体'
,
name
:
'replace_traditional_chinese_to_simplified'
,
content
:
'繁体转简体,如“不經意,妳的笑容”清洗成“不经意,你的笑容”'
},
{
icon
:
''
,
tag
:
'去除网页标识符'
,
name
:
'remove_web_identifiers'
,
content
:
'移除文档中的html标签,如<html>,<dev>,<p>等'
},
{
icon
:
''
,
tag
:
'去除表情'
,
name
:
'remove_emoji'
,
content
:
'去除文档中的表情,如‘🐰’, ‘🧑🏼’等'
}
],
filterConfig
:
[
{
icon
:
''
,
tag
:
'检查文档的词数目'
,
name
:
'filter_check_number_words'
,
content
:
'词数目不在指定范围会被过滤掉,如中文[1,1000000]'
},
{
icon
:
''
,
tag
:
'检查文档的字重复率'
,
name
:
'filter_check_character_repetition_removal'
,
content
:
'如果字重复率太高,意味着文档中重复的字太多,文档会被过滤掉'
},
{
icon
:
''
,
tag
:
'检查文档的词重复率'
,
name
:
'filter_check_word_repetition_removal'
,
content
:
'如果词重复率太高,意味着文档中重复的词太多,文档会被过滤掉'
},
{
icon
:
''
,
tag
:
'检查文档的特殊字符率'
,
name
:
'filter_check_special_characters'
,
content
:
'如果特殊字符率太高,意味着文档中特殊字符太多,文档会被过滤掉'
},
{
icon
:
''
,
tag
:
'检查文档的色情暴力词率'
,
name
:
'filter_check_flagged_words'
,
content
:
'如果色情暴力词率太高,文档会被过滤掉'
}
],
desensitiveConfig
:
[
{
icon
:
''
,
tag
:
'去除Email'
,
name
:
'replace_emails'
,
content
:
'去除email地址'
},
{
icon
:
''
,
tag
:
'去除IP地址'
,
name
:
'replace_ip'
,
content
:
'去除IPv4 或者 IPv6 地址'
},
{
icon
:
''
,
tag
:
'去除数字'
,
name
:
'replace_identifier'
,
content
:
'去除数字和字母数字标识符,如电话号码、信用卡号、十六进制散列等,同时跳过年份和简单数字的实例'
}
],
config
:
{
cleanConfig
:
[],
desensitiveConfig
:
[],
filterConfig
:
[]
}
}
},
props
:
[
'row'
],
components
:
{
configeCard
,
cleaningTable
},
computed
:
{
filterCleanConfig
()
{
return
this
.
cleanConfig
.
filter
((
item
)
=>
{
return
this
.
config
.
cleanConfig
.
some
((
item2
)
=>
{
return
item
.
name
===
item2
.
name
})
})
},
filterFilterConfig
()
{
return
this
.
filterConfig
.
filter
((
item
)
=>
{
return
this
.
config
.
filterConfig
.
some
((
item2
)
=>
{
return
item
.
name
===
item2
.
name
})
})
},
filterDesensitiveConfig
()
{
return
this
.
desensitiveConfig
.
filter
((
item
)
=>
{
return
this
.
config
.
desensitiveConfig
.
some
((
item2
)
=>
{
return
item
.
name
===
item2
.
name
})
})
}
},
mounted
()
{
this
.
configList
()
},
methods
:
{
configList
()
{
DataSetCleaning
.
configList
(
this
,
{
datasetCleanConfigDtoFilter
:
{
cleanId
:
this
.
row
.
cleanId
}
})
.
then
((
res
)
=>
{
let
{
cleanConfig
,
desensitiveConfig
,
filterConfig
}
=
res
.
data
.
dataList
[
0
]
this
.
config
.
cleanConfig
=
JSON
.
parse
(
cleanConfig
)
this
.
config
.
desensitiveConfig
=
JSON
.
parse
(
desensitiveConfig
)
this
.
config
.
filterConfig
=
JSON
.
parse
(
filterConfig
)
})
.
catch
((
e
)
=>
{
console
.
log
(
e
)
})
}
}
}
</
script
>
<
style
scoped
>
.box-card
{
margin-bottom
:
20px
;
}
.topBox
{
display
:
flex
;
justify-content
:
space-between
;
}
.title
{
font-size
:
16px
;
margin-bottom
:
16px
;
width
:
calc
(
100%
-
50px
);
}
.item
{
min-width
:
400px
;
margin-bottom
:
20px
;
display
:
flex
;
flex-direction
:
row
;
align-items
:
flex-end
;
}
.content
{
display
:
flex
;
flex-wrap
:
wrap
;
}
.cardList
{
display
:
flex
;
flex-direction
:
row
;
flex-wrap
:
wrap
;
justify-content
:
space-around
;
}
</
style
>
src/views/gptTraining/dataServices/dataCleansing/dialog/editOrAdd.vue
View file @
d0ea71d8
This diff is collapsed.
Click to expand it.
src/views/gptTraining/dataServices/dataCleansing/index.vue
View file @
d0ea71d8
...
...
@@ -28,41 +28,44 @@
</el-collapse>
<div
class=
"tableBox"
:style=
"{ height: tableHeight }"
>
<el-form
ref=
"myDataSetPage"
:model=
"myDataSetPage"
label-width=
"75px"
:size=
"defaultFormItemSize"
label-position=
"right"
@
submit
.
native
.
prevent
>
<filter-box
:item-width=
"350"
@
search=
"
searc
h()"
@
reset=
"onReset"
>
<filter-box
:item-width=
"350"
@
search=
"
refres
h()"
@
reset=
"onReset"
>
<el-form-item
label-width=
"0px"
>
<el-button
class=
"add"
type=
"primary"
icon=
"el-icon-plus"
:size=
"defaultFormItemSize"
@
click=
"add()"
>
创建任务
</el-button>
</el-form-item>
<el-form-item
label=
"
数据集名称或id
"
prop=
"formFilter.dataName"
label-width=
"120px"
>
<el-input
class=
"filter-item"
v-model=
"myDataSetPage.formFilter.dataName"
:clearable=
"true"
placeholder=
"
数据集名称或id
"
/>
<el-form-item
label=
"
清洗数据集名称
"
prop=
"formFilter.dataName"
label-width=
"120px"
>
<el-input
class=
"filter-item"
v-model=
"myDataSetPage.formFilter.dataName"
:clearable=
"true"
placeholder=
"
清洗数据集名称
"
/>
</el-form-item>
</filter-box>
</el-form>
<vxe-table
border
show-header-overflow
show-overflow
:row-config=
"{ isHover: true }"
:data=
"myDataSetPage.tableData.impl.dataList"
min-height=
"96"
>
<vxe-column
field=
"versions"
title=
"版本"
></vxe-column>
<vxe-column
field=
"versionsId"
title=
"版本ID"
></vxe-column>
<vxe-column
field=
"importState"
title=
"导入状态"
></vxe-column>
<vxe-column
field=
"derivedState"
title=
"导出状态"
></vxe-column>
<vxe-column
field=
"cleanCondition"
title=
"清洗状态"
></vxe-column>
<vxe-column
field=
"cleanCondition"
title=
"增强状态"
></vxe-column>
<vxe-column
field=
"cleanCondition"
title=
"发布状态"
></vxe-column>
<vxe-column
field=
"cleanCondition"
title=
"标注类型>模板"
></vxe-column>
<vxe-column
field=
"cleanId"
title=
"任务序号"
></vxe-column>
<vxe-column
field=
"cleanStatus"
title=
"清洗状态"
>
<
template
slot-scope=
"scope"
>
{{
CleanStatus
.
getValue
(
scope
.
row
.
cleanStatus
)
}}
</
template
>
</vxe-column>
<!-- <vxe-column field="cleanType" title="清洗类型"></vxe-column> -->
<vxe-column
field=
"cleanMethod"
title=
"清洗方式"
>
<
template
slot-scope=
"scope"
>
{{
scope
.
row
.
cleanMethod
.
map
((
item
)
=>
{
return
CleaningMethod
.
fromSymbolgetValue
(
item
)
}
).
join
(
'、'
)
}}
<
/template>
<
/vxe-column>
<
vxe
-
column
field
=
"datasetName"
title
=
"清洗数据集名称"
><
/vxe-column>
<
vxe
-
column
field
=
"startTime"
title
=
"开始时间"
><
/vxe-column>
<
vxe
-
column
field
=
"finishTime"
title
=
"完成时间"
><
/vxe-column>
<
vxe
-
column
field
=
"operation"
title
=
"操作"
>
<!-- <template slot-scope="scope">
<el-button
type="text"
:size="defaultFormItemSize"
@click="dataImport(scope.row)"
>导入</el-button
>
<el-button
type="text"
:size="defaultFormItemSize"
@click="del(scope.row)"
>删除</el-button
>
</template> -->
<
template
slot
-
scope
=
"scope"
>
<
el
-
button
type
=
"text"
:
size
=
"defaultFormItemSize"
@
click
=
"stopClean(scope.row)"
v
-
if
=
"scope.row.cleanStatus===0"
>
暂停清洗
<
/el-button>
<
el
-
button
type
=
"text"
:
size
=
"defaultFormItemSize"
@
click
=
"restartClean(scope.row)"
v
-
if
=
"scope.row.cleanStatus===2"
>
重新清洗
<
/el-button>
<
el
-
button
type
=
"text"
:
size
=
"defaultFormItemSize"
v
-
if
=
"scope.row.cleanStatus===1"
@
click
=
'details(scope.row)'
>
详情
<
/el-button>
<
el
-
button
type
=
"text"
:
size
=
"defaultFormItemSize"
@
click
=
"del(scope.row)"
>
删除
<
/el-button>
<
/template>
<
/vxe-column>
<
/vxe-table>
<
el
-
row
slot
=
"pagination"
type
=
"flex"
justify
=
"end"
style
=
"margin-top: 16px;width: 100%;"
>
...
...
@@ -77,8 +80,10 @@
import
{
mapGetters
}
from
'vuex'
/* eslint-disable-next-line */
import
{
DropdownWidget
,
TableWidget
,
UploadWidget
,
ChartWidget
}
from
'@/utils/widget.js'
import
{
ModelSquare
}
from
'@/api/gptController.js'
import
{
DataSetCleaning
}
from
'@/api/gptController.js'
import
editOrAdd
from
'./dialog/editOrAdd'
import
details
from
'./dialog/details'
export
default
{
data
()
{
return
{
...
...
@@ -113,11 +118,7 @@ export default {
],
myDataSetPage
:
{
formFilter
:
{
modelDescribe
:
''
,
modelId
:
0
,
modelName
:
''
,
modelType
:
0
,
versionCount
:
0
datasetName
:
''
}
,
tableData
:
{
...
...
@@ -152,14 +153,14 @@ export default {
// pageNum: 0,
// pageSize: 0
//
}
,
dataset
Manage
DtoFilter
:
{
...
this
.
myDataSetPage
.
formFilter
}
dataset
Clean
DtoFilter
:
{
...
this
.
myDataSetPage
.
formFilter
}
}
return
new
Promise
((
resolve
,
reject
)
=>
{
ModelSquare
.
list
(
this
,
params
)
DataSetCleaning
.
list
(
this
,
params
)
.
then
((
res
)
=>
{
resolve
({
dataList
:
null
,
dataList
:
res
.
data
.
dataList
,
totalCount
:
0
}
)
}
)
...
...
@@ -171,7 +172,7 @@ export default {
add
()
{
this
.
$dialog
.
show
(
'创建
模版
'
,
'创建
任务
'
,
editOrAdd
,
{
area
:
[
'100%'
,
'100%'
]
...
...
@@ -186,7 +187,7 @@ export default {
edit
(
item
)
{
this
.
$dialog
.
show
(
'修改
模版
'
,
'修改
任务
'
,
editOrAdd
,
{
area
:
[
'100%'
,
'100%'
]
...
...
@@ -204,8 +205,8 @@ export default {
cancelButtonText
:
'取消'
,
type
:
'warning'
}
).
then
(()
=>
{
let
params
=
{
batchTaskId
:
item
.
batchTask
Id
}
ModelSquare
.
delete
(
this
,
params
)
let
params
=
{
cleanId
:
item
.
clean
Id
}
DataSetCleaning
.
delete
(
this
,
params
)
.
then
((
res
)
=>
{
this
.
$message
.
success
(
'删除成功'
)
this
.
refresh
()
...
...
@@ -215,6 +216,56 @@ export default {
}
)
}
)
}
,
restartClean
(
item
)
{
this
.
$confirm
(
'是否确认重新清洗'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}
).
then
(()
=>
{
let
params
=
{
cleanId
:
item
.
cleanId
}
DataSetCleaning
.
restartClean
(
this
,
params
)
.
then
((
res
)
=>
{
this
.
$message
.
success
(
'重启成功'
)
this
.
refresh
()
}
)
.
catch
((
e
)
=>
{
console
.
log
(
e
)
}
)
}
)
}
,
stopClean
(
item
)
{
this
.
$confirm
(
'是否确认暂停清洗'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}
).
then
(()
=>
{
let
params
=
{
cleanId
:
item
.
cleanId
}
DataSetCleaning
.
stopClean
(
this
,
params
)
.
then
((
res
)
=>
{
this
.
$message
.
success
(
'暂停成功'
)
this
.
refresh
()
}
)
.
catch
((
e
)
=>
{
console
.
log
(
e
)
}
)
}
)
}
,
details
(
row
)
{
// 详情
this
.
$dialog
.
show
(
'详情'
,
details
,
{
area
:
[
'100%'
,
'100%'
]
}
,
{
row
:
row
}
)
.
then
((
res
)
=>
{
this
.
refresh
()
}
)
.
catch
((
e
)
=>
{
}
)
}
,
refresh
(
reloadData
=
false
)
{
if
(
reloadData
)
{
this
.
myDataSetPage
.
tableData
.
impl
.
refreshTable
(
true
,
1
)
...
...
src/views/gptTraining/dataServices/dataEnhancement/index.vue
View file @
d0ea71d8
...
...
@@ -8,16 +8,11 @@
</
template
>
<div
class=
"instructions"
>
<div
class=
"instructionsList"
>
<div
class=
"item"
v-for=
"(item, index) in instructionsList"
:key=
"index"
>
<div
class=
"item"
v-for=
"(item, index) in instructionsList"
:key=
"index"
>
<img
class=
"img"
:src=
"item.img"
alt=
""
/>
<div
class=
"itemTitle"
>
<span
class=
"head-index"
>
{{ index + 1 }}
</span
>
{{ item.title }}
<span
class=
"head-index"
>
{{ index + 1 }}
</span>
{{ item.title }}
</div>
<div
class=
"itemDescribe"
>
{{ item.describe }}
</div>
</div>
...
...
@@ -26,54 +21,25 @@
</el-collapse-item>
</el-collapse>
<div
class=
"tableBox"
:style=
"{ height: tableHeight }"
>
<el-form
ref=
"myDataSetPage"
:model=
"myDataSetPage"
label-width=
"75px"
:size=
"defaultFormItemSize"
label-position=
"right"
@
submit
.
native
.
prevent
>
<filter-box
:item-width=
"350"
@
search=
"search()"
@
reset=
"onReset"
>
<el-form-item
label-width=
"0px"
>
<el-button
class=
"add"
type=
"primary"
icon=
"el-icon-plus"
:size=
"defaultFormItemSize"
>
创建任务
</el-button
>
</el-form-item>
<el-form-item
label=
"数据集名称或id"
prop=
"formFilter.dataName"
label-width=
"120px"
>
<el-input
class=
"filter-item"
v-model=
"myDataSetPage.formFilter.dataName"
:clearable=
"true"
placeholder=
"数据集名称或id"
/>
<el-form
ref=
"myDataSetPage"
:model=
"myDataSetPage"
label-width=
"75px"
:size=
"defaultFormItemSize"
label-position=
"right"
@
submit
.
native
.
prevent
>
<filter-box
:item-width=
"350"
@
search=
"search()"
@
reset=
"onReset"
>
<el-form-item
label-width=
"0px"
>
<el-button
class=
"add"
type=
"primary"
icon=
"el-icon-plus"
:size=
"defaultFormItemSize"
>
创建任务
</el-button>
</el-form-item>
<el-form-item
label=
"数据集名称"
prop=
"formFilter.dataName"
label-width=
"120px"
>
<el-input
class=
"filter-item"
v-model=
"myDataSetPage.formFilter.dataName"
:clearable=
"true"
placeholder=
"数据集名称"
/>
</el-form-item>
</filter-box>
</el-form>
</filter-box>
</el-form>
>
<vxe-table
border
show-header-overflow
show-overflow
:row-config=
"{ isHover: true }"
:data=
"tableData"
min-height=
"96"
>
<vxe-table
border
show-header-overflow
show-overflow
:row-config=
"{ isHover: true }"
:data=
"tableData"
min-height=
"96"
>
<vxe-column
field=
"taskName"
title=
"任务名称"
></vxe-column>
<vxe-column
field=
"taskStatus"
title=
"任务状态"
>
<
template
slot-scope=
"scope"
>
{{
TaskStatus
.
getValue
(
scope
.
row
.
taskStatus
)
}}
</
template
>
{{
TaskStatus
.
getValue
(
scope
.
row
.
taskStatus
)
}}
</
template
>
</vxe-column>
<vxe-column
field=
"enhancementType"
title=
"增强类型"
></vxe-column>
<vxe-column
field=
"enhancementMode"
title=
"增强方式"
></vxe-column>
...
...
@@ -103,9 +69,9 @@
</template>
<
script
>
import
{
mapGetters
}
from
'vuex'
;
import
{
mapGetters
}
from
'vuex'
export
default
{
data
()
{
data
()
{
return
{
activeName
:
'1'
,
collapseHeight
:
0
,
...
...
@@ -146,7 +112,7 @@ export default {
address
:
'test abc'
}
]
}
;
}
},
components
:
{},
...
...
@@ -154,26 +120,24 @@ export default {
computed
:
{
...
mapGetters
([
'getMainContextHeight'
]),
tableHeight
()
{
return
this
.
getMainContextHeight
-
this
.
collapseHeight
-
34
+
'px'
;
tableHeight
()
{
return
this
.
getMainContextHeight
-
this
.
collapseHeight
-
34
+
'px'
}
},
mounted
()
{
},
mounted
()
{},
methods
:
{
resize
(
e
)
{
resize
(
e
)
{
setTimeout
(()
=>
{
this
.
collapseHeight
=
e
.
height
},
300
)
;
},
300
)
}
}
}
;
}
</
script
>
<
style
lang=
"scss"
scoped
>
@import
"@/assets/style/element-variables.scss"
;
@import
'@/assets/style/element-variables.scss'
;
.instructions
{
background-color
:
white
;
width
:
100%
;
...
...
@@ -227,8 +191,7 @@ export default {
div
/
deep
/
.el-collapse-item__content
{
padding-bottom
:
0
;
}
div
/
deep
/
.el-collapse-item__header
{
padding-left
:
20px
;
div
/
deep
/
.el-collapse-item__header
{
padding-left
:
20px
;
}
</
style
>
src/views/gptTraining/dataServices/myDataSet/index.vue
View file @
d0ea71d8
...
...
@@ -65,15 +65,13 @@
<vxe-column
field=
"dataVolume"
title=
"数据量"
></vxe-column>
<vxe-column
field=
"inputStatus"
title=
"导入状态"
>
<
template
slot-scope=
"scope"
>
<el-tag
v-if=
"scope.row.inputStatus!==0
"
size=
"mini"
>
{{
ImportStatus
.
getValue
(
scope
.
row
.
inputStatus
)
}}
</el-tag>
<el-tag
v-else
type=
"info"
size=
"mini"
>
{{
ImportStatus
.
getValue
(
scope
.
row
.
inputStatus
)
}}
</el-tag>
<el-tag
:type=
"scope.row.inputStatus!==0?'':'info'
"
size=
"mini"
>
{{
ImportStatus
.
getValue
(
scope
.
row
.
inputStatus
)
}}
</el-tag>
</
template
>
</vxe-column>
<vxe-column
field=
"releaseStatus"
title=
"发布状态"
>
<
template
slot-scope=
"scope"
>
<el-tag
v-if=
"scope.row.releaseStatus!==0"
type=
"danger"
size=
"mini"
>
{{
PublishStatus
.
getValue
(
scope
.
row
.
releaseStatus
)
}}
</el-tag>
<el-tag
v-else
type=
"info"
size=
"mini"
>
{{
PublishStatus
.
getValue
(
scope
.
row
.
releaseStatus
)
}}
</el-tag>
<el-tag
:type=
"scope.row.releaseStatus!==0?'danger':'info'"
size=
"mini"
>
{{
PublishStatus
.
getValue
(
scope
.
row
.
releaseStatus
)
}}
</el-tag>
</
template
>
</vxe-column>
<vxe-column
field=
"createTime"
title=
"创建时间"
></vxe-column>
...
...
@@ -118,7 +116,7 @@ import editOrAdd from './dialog/editOrAdd'
import
addVersions
from
'./versionsTableBox/dialog/add.vue'
import
versionsTableBox
from
'./versionsTableBox/index.vue'
import
derived
from
'./versionsTableBox/dialog/derived.vue'
import
dataImport
from
"./versionsTableBox/dialog/dataImport"
;
import
dataImport
from
'./versionsTableBox/dialog/dataImport'
export
default
{
data
()
{
return
{
...
...
src/views/gptTraining/dataServices/myDataSet/versionsTableBox/dialog/derived.vue
View file @
d0ea71d8
...
...
@@ -9,35 +9,7 @@
</el-select>
</el-form-item>
<el-form-item
label=
"数据导出记录:"
>
<el-table
:data=
"outputList"
border
style=
"width: 100%"
height=
"600"
>
<el-table-column
prop=
"markFormatType"
label=
"标注格式类型"
>
</el-table-column>
<el-table-column
prop=
"outputContent"
label=
"导出内容"
>
</el-table-column>
<el-table-column
prop=
"fileSize"
label=
"文件大小"
>
</el-table-column>
<el-table-column
prop=
"dataCount"
label=
"数据量"
>
</el-table-column>
<el-table-column
prop=
"createUserId"
label=
"创建人"
>
</el-table-column>
<el-table-column
prop=
"outputStartTime"
label=
"导出开始时间"
width=
"150"
>
</el-table-column>
<el-table-column
prop=
"outputEndTime"
label=
"导出完成时间"
width=
"150"
>
</el-table-column>
<el-table-column
prop=
"status"
label=
"状态"
>
<template
slot-scope=
"scope"
>
{{
OutputStatus
.
getValue
(
scope
.
row
.
status
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
fixed=
"right"
>
<
template
slot-scope=
"scope"
>
<el-button
@
click=
"down(scope.row.downloadUrl)"
type=
"text"
size=
"mini"
>
下载
</el-button>
</
template
>
</el-table-column>
</el-table>
<downList
:outputList=
'outputList'
/>
</el-form-item>
<el-row
type=
"flex"
justify=
"end"
class=
"dialog-btn-layer mt20"
>
...
...
@@ -49,6 +21,7 @@
<
script
>
import
{
DatasetVersion
}
from
'@/api/gptController.js'
import
downList
from
'@/components/DownList/index.vue'
export
default
{
data
()
{
return
{
...
...
@@ -59,7 +32,7 @@ export default {
}
},
props
:
[
'isEdit'
,
'row'
],
components
:
{},
components
:
{
downList
},
computed
:
{},
...
...
@@ -82,19 +55,6 @@ export default {
this
.
onCancel
(
true
)
this
.
$message
.
success
(
'下载成功'
)
})
// this.download('/admin/app/datasetVersion/export', params, '下载文件.' + this.form.format, 'get').then(res => {
// // resolve(res);
// console.log(res);
// this.$message.success('下载成功');
// this.onCancel(true);
// }).catch(e => {
// // reject(e);
// });
},
down
(
url
)
{
let
downDom
=
document
.
createElement
(
'a'
)
downDom
.
href
=
url
downDom
.
click
()
},
getOutputList
()
{
let
params
=
{
datasetOutputDtoFilter
:
{
versionId
:
this
.
row
.
versionId
}
}
...
...
src/views/gptTraining/dataServices/myDataSet/versionsTableBox/dialog/particulars.vue
View file @
d0ea71d8
...
...
@@ -16,7 +16,7 @@
<vxe-column
field=
"operation"
title=
"操作"
width=
"150px"
>
<template
slot-scope=
"scope"
>
<el-button
type=
"text"
:size=
"defaultFormItemSize"
@
click=
"check(scope.row)"
>
查看
</el-button>
<el-button
type=
"text"
:size=
"defaultFormItemSize"
@
click=
"label(scope.row)"
v-if=
"
versionItem.dimensionType
===0"
>
标注
</el-button>
<el-button
type=
"text"
:size=
"defaultFormItemSize"
@
click=
"label(scope.row)"
v-if=
"
releaseStatus
===0"
>
标注
</el-button>
<el-button
type=
"text"
:size=
"defaultFormItemSize"
@
click=
"del(scope.row)"
>
删除
</el-button>
</
template
>
</vxe-column>
...
...
@@ -53,7 +53,7 @@ export default {
},
components
:
{},
props
:
[
'versionItem'
],
props
:
[
'versionItem'
,
'releaseStatus'
],
computed
:
{
...
mapGetters
([
'getMainContextHeight'
]),
tableHeight
()
{
...
...
src/views/gptTraining/dataServices/myDataSet/versionsTableBox/index.vue
View file @
d0ea71d8
...
...
@@ -9,12 +9,13 @@
<el-tabs
v-model=
"activeName"
style=
"width:calc(100% - 200px)"
v-if=
"nowVersion"
>
<div
style=
"position: absolute; top: -55px; right: 0;"
>
<el-button
type=
"
text"
:size=
"defaultFormItemSize"
@
click=
"dataImport(nowVersion)"
>
导入
</el-button>
<el-button
type=
"
text"
:size=
"defaultFormItemSize"
@
click=
"del(nowVersion)"
>
删除
</el-button>
<el-button
type=
"
primary"
plain
:size=
"defaultFormItemSize"
@
click=
"dataImport(nowVersion)"
>
导入
</el-button>
<el-button
type=
"
danger"
plain
:size=
"defaultFormItemSize"
@
click=
"del(nowVersion)"
>
删除
</el-button>
<template
v-if=
"nowVersion.inputStatus !== 0"
>
<el-dropdown
s
tyle=
"margin-left:15
px;font-size: 12px;color: #0092FF;"
:size=
"defaultFormItemSize"
>
<el-dropdown
s
plit-button
type=
"primary"
plain
style=
"margin-left:10
px;font-size: 12px;color: #0092FF;"
:size=
"defaultFormItemSize"
>
<span
class=
"el-dropdown-link"
>
更多
<i
class=
"el-icon-arrow-down el-icon--right"
></i>
更多
<!--
<i
class=
"el-icon-arrow-down el-icon--right"
></i>
-->
</span>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
v-if=
"nowVersion.releaseStatus!==1"
@
click
.
native=
"putOut(nowVersion)"
>
发布
</el-dropdown-item>
...
...
@@ -27,9 +28,9 @@
</div>
<el-tab-pane
label=
"数据详情"
name=
"dataDetail"
style=
"height: 100%;"
>
<particulars
:versionItem=
'nowVersion'
/>
<particulars
:versionItem=
'nowVersion'
:releaseStatus=
"tableData.releaseStatus"
/>
</el-tab-pane>
<el-tab-pane
label=
"版本信息"
name=
"versionInformation"
style=
"padding-left: 20px;"
>
<el-tab-pane
label=
"版本信息"
name=
"versionInformation"
style=
"padding-left: 20px;
overflow: scroll; height: calc(100vh - 200px);
"
>
<div
class=
"dataBox"
>
<div
class=
"dataItem"
>
<div
class=
"title"
>
版本:
</div>
...
...
@@ -68,7 +69,12 @@
<div
class=
"title"
>
最后更新时间:
</div>
<div
class=
"content"
>
{{ nowVersion.updateTime }}
</div>
</div>
<div
class=
"dataItem"
style=
"align-items: flex-start;"
>
<div
class=
"title"
>
导出日志:
</div>
<div
class=
"content"
>
<downList
:outputList=
'outputList'
/>
</div>
</div>
</el-tab-pane>
</el-tabs>
...
...
@@ -81,16 +87,19 @@ import dataImport from './dialog/dataImport.vue'
import
particulars
from
'./dialog/particulars.vue'
import
{
DatasetVersion
}
from
'@/api/gptController.js'
import
addVersions
from
'./dialog/add.vue'
import
downList
from
'@/components/DownList/index.vue'
export
default
{
data
()
{
return
{
activeName
:
'dataDetail'
,
versionList
:
[],
nowVersion
:
undefined
nowVersion
:
undefined
,
outputList
:
[]
}
},
props
:
[
'tableData'
,
'refresh'
],
components
:
{
particulars
},
components
:
{
particulars
,
downList
},
computed
:
{},
...
...
@@ -200,6 +209,7 @@ export default {
)
.
then
((
res
)
=>
{
this
.
refresh
()
this
.
getOutputList
()
})
.
catch
((
e
)
=>
{})
},
...
...
@@ -231,6 +241,19 @@ export default {
cutVersions
(
item
)
{
// 切换版本
this
.
nowVersion
=
item
},
getOutputList
()
{
let
params
=
{
datasetOutputDtoFilter
:
{
versionId
:
this
.
nowVersion
.
versionId
}
}
DatasetVersion
.
outputList
(
this
,
params
).
then
((
res
)
=>
{
this
.
outputList
=
res
.
data
.
dataList
})
}
},
watch
:
{
nowVersion
:
{
handler
()
{
this
.
getOutputList
()
}
}
}
}
...
...
src/views/gptTraining/dataServices/onlineAnnotation/versionsTableBox/dialog/derived.vue
View file @
d0ea71d8
...
...
@@ -9,35 +9,7 @@
</el-select>
</el-form-item>
<el-form-item
label=
"数据导出记录:"
>
<el-table
:data=
"outputList"
border
style=
"width: 100%"
height=
"600"
>
<el-table-column
prop=
"markFormatType"
label=
"标注格式类型"
>
</el-table-column>
<el-table-column
prop=
"outputContent"
label=
"导出内容"
>
</el-table-column>
<el-table-column
prop=
"fileSize"
label=
"文件大小"
>
</el-table-column>
<el-table-column
prop=
"dataCount"
label=
"数据量"
>
</el-table-column>
<el-table-column
prop=
"createUserId"
label=
"创建人"
>
</el-table-column>
<el-table-column
prop=
"outputStartTime"
label=
"导出开始时间"
width=
"150"
>
</el-table-column>
<el-table-column
prop=
"outputEndTime"
label=
"导出完成时间"
width=
"150"
>
</el-table-column>
<el-table-column
prop=
"status"
label=
"状态"
>
<template
slot-scope=
"scope"
>
{{
OutputStatus
.
getValue
(
scope
.
row
.
status
)
}}
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
fixed=
"right"
>
<
template
slot-scope=
"scope"
>
<el-button
@
click=
"down(scope.row.downloadUrl)"
type=
"text"
size=
"mini"
>
下载
</el-button>
</
template
>
</el-table-column>
</el-table>
<downList
:outputList=
'outputList'
/>
</el-form-item>
<el-row
type=
"flex"
justify=
"end"
class=
"dialog-btn-layer mt20"
>
...
...
@@ -49,6 +21,7 @@
<
script
>
import
{
DatasetVersion
}
from
'@/api/gptController.js'
import
downList
from
'@/components/DownList/index.vue'
export
default
{
data
()
{
return
{
...
...
@@ -59,7 +32,7 @@ export default {
}
},
props
:
[
'isEdit'
,
'row'
],
components
:
{},
components
:
{
downList
},
computed
:
{},
...
...
@@ -82,19 +55,6 @@ export default {
this
.
onCancel
(
true
)
this
.
$message
.
success
(
'下载成功'
)
})
// this.download('/admin/app/datasetVersion/export', params, '下载文件.' + this.form.format, 'get').then(res => {
// // resolve(res);
// console.log(res);
// this.$message.success('下载成功');
// this.onCancel(true);
// }).catch(e => {
// // reject(e);
// });
},
down
(
url
)
{
let
downDom
=
document
.
createElement
(
'a'
)
downDom
.
href
=
url
downDom
.
click
()
},
getOutputList
()
{
let
params
=
{
datasetOutputDtoFilter
:
{
versionId
:
this
.
row
.
versionId
}
}
...
...
src/views/gptTraining/dataServices/onlineAnnotation/versionsTableBox/index.vue
View file @
d0ea71d8
...
...
@@ -9,12 +9,13 @@
<el-tabs
v-model=
"activeName"
style=
"width:calc(100% - 200px)"
v-if=
"nowVersion"
>
<div
style=
"position: absolute; top: -55px; right: 0;"
>
<el-button
type=
"
text"
:size=
"defaultFormItemSize"
@
click=
"dataImport(nowVersion)"
>
导入
</el-button>
<el-button
type=
"
text"
:size=
"defaultFormItemSize"
@
click=
"del(nowVersion)"
>
删除
</el-button>
<el-button
type=
"
primary"
plain
:size=
"defaultFormItemSize"
@
click=
"dataImport(nowVersion)"
>
导入
</el-button>
<el-button
type=
"
danger"
plain
:size=
"defaultFormItemSize"
@
click=
"del(nowVersion)"
>
删除
</el-button>
<template
v-if=
"nowVersion.inputStatus !== 0"
>
<el-dropdown
s
tyle=
"margin-left:15
px;font-size: 12px;color: #0092FF;"
:size=
"defaultFormItemSize"
>
<el-dropdown
s
plit-button
type=
"primary"
plain
style=
"margin-left:10
px;font-size: 12px;color: #0092FF;"
:size=
"defaultFormItemSize"
>
<span
class=
"el-dropdown-link"
>
更多
<i
class=
"el-icon-arrow-down el-icon--right"
></i>
更多
<!--
<i
class=
"el-icon-arrow-down el-icon--right"
></i>
-->
</span>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
v-if=
"nowVersion.releaseStatus!==1"
@
click
.
native=
"putOut(nowVersion)"
>
发布
</el-dropdown-item>
...
...
@@ -27,9 +28,9 @@
</div>
<el-tab-pane
label=
"数据详情"
name=
"dataDetail"
style=
"height: 100%;"
>
<particulars
:versionItem=
'nowVersion'
/>
<particulars
:versionItem=
'nowVersion'
:releaseStatus=
"tableData.releaseStatus"
/>
</el-tab-pane>
<el-tab-pane
label=
"版本信息"
name=
"versionInformation"
style=
"padding-left: 20px;"
>
<el-tab-pane
label=
"版本信息"
name=
"versionInformation"
style=
"padding-left: 20px;
overflow: scroll; height: calc(100vh - 200px);
"
>
<div
class=
"dataBox"
>
<div
class=
"dataItem"
>
<div
class=
"title"
>
版本:
</div>
...
...
@@ -56,7 +57,6 @@
<div
class=
"title"
>
标注类型>模板:
</div>
<div
class=
"content"
>
{{ LabelType.getValue(nowVersion.dimensionType ) }}
</div>
</div>
<div
class=
"dataItem"
>
<div
class=
"title"
>
数据量:
</div>
<div
class=
"content"
>
{{ nowVersion.dataVolume }}
</div>
...
...
@@ -69,7 +69,12 @@
<div
class=
"title"
>
最后更新时间:
</div>
<div
class=
"content"
>
{{ nowVersion.updateTime }}
</div>
</div>
<div
class=
"dataItem"
style=
"align-items: flex-start;"
>
<div
class=
"title"
>
导出日志:
</div>
<div
class=
"content"
>
<downList
:outputList=
'outputList'
/>
</div>
</div>
</el-tab-pane>
</el-tabs>
...
...
@@ -82,16 +87,19 @@ import dataImport from './dialog/dataImport.vue'
import
particulars
from
'./dialog/particulars.vue'
import
{
DatasetVersion
}
from
'@/api/gptController.js'
import
addVersions
from
'./dialog/add.vue'
import
downList
from
'@/components/DownList/index.vue'
export
default
{
data
()
{
return
{
activeName
:
'dataDetail'
,
versionList
:
[],
nowVersion
:
undefined
nowVersion
:
undefined
,
outputList
:
[]
}
},
props
:
[
'tableData'
,
'refresh'
],
components
:
{
particulars
},
components
:
{
particulars
,
downList
},
computed
:
{},
...
...
@@ -165,7 +173,7 @@ export default {
DatasetVersion
.
list
(
this
,
params
)
.
then
((
res
)
=>
{
this
.
versionList
=
res
.
data
.
dataList
this
.
nowVersion
=
this
.
versionList
[
0
]
this
.
nowVersion
=
this
.
tableData
})
.
catch
((
e
)
=>
{})
},
...
...
@@ -201,6 +209,7 @@ export default {
)
.
then
((
res
)
=>
{
this
.
refresh
()
this
.
getOutputList
()
})
.
catch
((
e
)
=>
{})
},
...
...
@@ -232,6 +241,19 @@ export default {
cutVersions
(
item
)
{
// 切换版本
this
.
nowVersion
=
item
},
getOutputList
()
{
let
params
=
{
datasetOutputDtoFilter
:
{
versionId
:
this
.
nowVersion
.
versionId
}
}
DatasetVersion
.
outputList
(
this
,
params
).
then
((
res
)
=>
{
this
.
outputList
=
res
.
data
.
dataList
})
}
},
watch
:
{
nowVersion
:
{
handler
()
{
this
.
getOutputList
()
}
}
}
}
...
...
src/views/gptTraining/modelService/serviceManagement/index.vue
View file @
d0ea71d8
...
...
@@ -2,50 +2,21 @@
<
template
>
<div
style=
"position: relative"
>
<div
class=
"topBox"
>
<div
class=
"title"
>
在线服务
</div>
<div
class=
"title"
>
在线服务
</div>
</div>
<div
class=
"tableBox"
:style=
"
{ height: tableHeight }">
<el-form
ref=
"myDataSetPage"
:model=
"myDataSetPage"
label-width=
"75px"
:size=
"defaultFormItemSize"
label-position=
"right"
@
submit
.
native
.
prevent
>
<el-form
ref=
"myDataSetPage"
:model=
"myDataSetPage"
label-width=
"75px"
:size=
"defaultFormItemSize"
label-position=
"right"
@
submit
.
native
.
prevent
>
<filter-box
:item-width=
"350"
@
search=
"search()"
@
reset=
"onReset"
>
<el-form-item
label-width=
"0px"
>
<el-button
class=
"add"
type=
"primary"
icon=
"el-icon-plus"
:size=
"defaultFormItemSize"
>
创建服务
</el-button
>
<el-button
class=
"add"
type=
"primary"
icon=
"el-icon-plus"
:size=
"defaultFormItemSize"
>
创建服务
</el-button>
</el-form-item>
<el-form-item
label=
"数据集名称或id"
prop=
"formFilter.dataName"
label-width=
"120px"
>
<el-input
class=
"filter-item"
v-model=
"myDataSetPage.formFilter.dataName"
:clearable=
"true"
placeholder=
"请输入服务名称"
/>
<el-form-item
label=
"数据集名称"
prop=
"formFilter.dataName"
label-width=
"120px"
>
<el-input
class=
"filter-item"
v-model=
"myDataSetPage.formFilter.dataName"
:clearable=
"true"
placeholder=
"请输入服务名称"
/>
</el-form-item>
</filter-box>
</el-form>
<vxe-table
border
show-header-overflow
show-overflow
:row-config=
"
{ isHover: true }"
:data="tableData"
min-height="96"
>
<vxe-table
border
show-header-overflow
show-overflow
:row-config=
"
{ isHover: true }" :data="tableData" min-height="96">
<vxe-column
field=
"serviceName"
title=
"服务名称"
></vxe-column>
<vxe-column
field=
"serviceState"
title=
"服务状态"
></vxe-column>
<vxe-column
field=
"modelNameAndVersion"
title=
"模型名称及版本"
></vxe-column>
...
...
@@ -74,9 +45,9 @@
</template>
<
script
>
import
{
mapGetters
}
from
'vuex'
;
import
{
mapGetters
}
from
'vuex'
export
default
{
data
()
{
data
()
{
return
{
myDataSetPage
:
{
formFilter
:
{
...
...
@@ -93,44 +64,42 @@ export default {
address
:
'test abc'
}
]
}
;
}
},
components
:
{},
computed
:
{
...
mapGetters
([
'getMainContextHeight'
]),
tableHeight
()
{
return
this
.
getMainContextHeight
-
110
+
'px'
;
tableHeight
()
{
return
this
.
getMainContextHeight
-
110
+
'px'
}
},
mounted
()
{
},
mounted
()
{},
methods
:
{
resize
(
e
)
{
resize
(
e
)
{
setTimeout
(()
=>
{
this
.
collapseHeight
=
e
.
height
},
300
)
;
},
300
)
}
}
}
;
}
</
script
>
<
style
lang=
"scss"
scoped
>
@import
"@/assets/style/element-variables.scss"
;
.topBox
{
@import
'@/assets/style/element-variables.scss'
;
.topBox
{
background-color
:
white
;
width
:
100%
;
margin-bottom
:
16px
;
.title
{
.title
{
color
:
$--color-text-primary
;
font-size
:
16px
;
font-weight
:
500
;
padding
:
20px
20px
20px
20px
;
padding
:
20px
20px
20px
20px
;
}
}
...
...
@@ -143,5 +112,4 @@ export default {
margin-bottom
:
20px
;
}
}
</
style
>
vue.config.js
View file @
d0ea71d8
module
.
exports
=
{
//
productionSourceMap
:
false
,
publicPath
:
'/'
,
devServer
:
{
port
:
'8085'
,
/* 跨域代理 */
...
...
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