Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
B
bigDataSystem
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
张伯涛
bigDataSystem
Commits
4ba5d8ed
Commit
4ba5d8ed
authored
Dec 05, 2024
by
chenjiahao
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
5c6d1dc8
d864acd4
Changes
26
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
957 additions
and
645 deletions
+957
-645
addDataConversionRuleModal.vue
...tegration/dataLakePunctual/addDataConversionRuleModal.vue
+0
-7
dataLakePunctual.data.ts
...dataIntegration/dataLakePunctual/dataLakePunctual.data.ts
+37
-4
fieldNameMappingRuleModal.vue
...ntegration/dataLakePunctual/fieldNameMappingRuleModal.vue
+2
-2
fieldTypeMappingRuleModal.vue
...ntegration/dataLakePunctual/fieldTypeMappingRuleModal.vue
+1
-1
getMetadataModal.vue
...ews/dataIntegration/dataLakePunctual/getMetadataModal.vue
+2
-2
index.vue
src/views/dataIntegration/dataLakePunctual/index.vue
+94
-79
mock.ts
src/views/dataIntegration/dataLakePunctual/mock.ts
+1
-1
newFieldRuleModal.vue
...ws/dataIntegration/dataLakePunctual/newFieldRuleModal.vue
+1
-1
singleTableFieldMappingRuleModal.vue
...ion/dataLakePunctual/singleTableFieldMappingRuleModal.vue
+2
-2
index.vue
src/views/dataIntegration/taskOM/index.vue
+156
-65
mock.ts
src/views/dataIntegration/taskOM/mock.ts
+18
-0
recordDetails.vue
src/views/dataIntegration/taskOM/recordDetails.vue
+2
-2
taskOM.data.ts
src/views/dataIntegration/taskOM/taskOM.data.ts
+27
-18
viewTheLog.vue
src/views/dataIntegration/taskOM/viewTheLog.vue
+2
-2
DataTree.vue
src/views/scriptDevelopment/sqlDevelopment/DataTree.vue
+1
-1
GroupTree.vue
src/views/scriptDevelopment/sqlDevelopment/GroupTree.vue
+1
-1
index.vue
src/views/scriptDevelopment/sqlDevelopment/index.vue
+120
-30
dataPreviewModal.vue
...evelopment/sqlDevelopment/sqlExecute/dataPreviewModal.vue
+0
-83
sqlExecute.vue
...criptDevelopment/sqlDevelopment/sqlExecute/sqlExecute.vue
+3
-14
index.vue
src/views/taskScheduling/taskFlow/index.vue
+4
-4
mock.ts
src/views/taskScheduling/taskFlow/mock.ts
+9
-9
defineEvent.vue
src/views/taskScheduling/taskFlowDesign/defineEvent.vue
+177
-229
design.data.ts
src/views/taskScheduling/taskFlowDesign/design.data.ts
+229
-42
index.vue
src/views/taskScheduling/taskFlowDesign/index.vue
+3
-0
taskConfigModel.vue
src/views/taskScheduling/taskFlowDesign/taskConfigModel.vue
+17
-32
taskModel.vue
src/views/taskScheduling/taskFlowDesign/taskModel.vue
+48
-14
No files found.
src/views/dataIntegration/dataLakePunctual/addDataConversionRuleModal.vue
View file @
4ba5d8ed
...
...
@@ -3,13 +3,6 @@
<template
#
title
>
<span
style=
"font-size: 23px; font-weight: lighter"
>
新建规则
</span>
</
template
>
<Span
style=
"font-size: 18px"
>
<Icon
style=
"margin-right: 5px; font-size: 18px"
:color=
"'#5cb3ff'"
icon=
"material-symbols:table-convert-outline"
/>
数据转换规则
</Span>
<List>
<Row
:gutter=
"16"
>
<
template
v-for=
"item in cardRuleList"
:key=
"item.title"
>
...
...
src/views/dataIntegration/dataLakePunctual/dataLakePunctual.data.ts
View file @
4ba5d8ed
...
...
@@ -55,7 +55,7 @@ export const sourceSideConfigurationFormSchema: FormSchema[] = [
component
:
'Select'
,
required
:
true
,
componentProps
:
{
placeholder
:
'请选择数据
源
'
,
placeholder
:
'请选择数据'
,
displayRender
:
({
labels
})
=>
{
return
labels
[
labels
.
length
-
1
];
},
...
...
@@ -146,7 +146,18 @@ export const NewFieldRuleFormSchema: FormSchema[] = [
{
field
:
'newFieldType'
,
label
:
'新增字段类型'
,
component
:
'Input'
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'STRING'
,
value
:
'STRING'
},
{
label
:
'INTEGER'
,
value
:
'INTEGER'
},
{
label
:
'FLOAT'
,
value
:
'FLOAT'
},
{
label
:
'DECIMAL'
,
value
:
'DECIMAL'
},
{
label
:
'DATE'
,
value
:
'DATE'
},
{
label
:
'TIMESTAMP'
,
value
:
'TIMESTAMP'
},
{
label
:
'BOOLEAN'
,
value
:
'BOOLEAN'
},
]
},
required
:
true
,
},
{
...
...
@@ -273,13 +284,35 @@ export const FieldTypeMappingRuleFormSchema: FormSchema[] = [
{
field
:
'sourceFieldType'
,
label
:
'源字段类型'
,
component
:
'Input'
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'STRING'
,
value
:
'STRING'
},
{
label
:
'INTEGER'
,
value
:
'INTEGER'
},
{
label
:
'FLOAT'
,
value
:
'FLOAT'
},
{
label
:
'DECIMAL'
,
value
:
'DECIMAL'
},
{
label
:
'DATE'
,
value
:
'DATE'
},
{
label
:
'TIMESTAMP'
,
value
:
'TIMESTAMP'
},
{
label
:
'BOOLEAN'
,
value
:
'BOOLEAN'
},
]
},
required
:
true
,
},
{
field
:
'targetFieldType'
,
label
:
'目标字段类型'
,
component
:
'Input'
,
component
:
'Select'
,
componentProps
:
{
options
:
[
{
label
:
'STRING'
,
value
:
'STRING'
},
{
label
:
'INTEGER'
,
value
:
'INTEGER'
},
{
label
:
'FLOAT'
,
value
:
'FLOAT'
},
{
label
:
'DECIMAL'
,
value
:
'DECIMAL'
},
{
label
:
'DATE'
,
value
:
'DATE'
},
{
label
:
'TIMESTAMP'
,
value
:
'TIMESTAMP'
},
{
label
:
'BOOLEAN'
,
value
:
'BOOLEAN'
},
]
},
required
:
true
,
},
];
...
...
src/views/dataIntegration/dataLakePunctual/fieldNameMappingRuleModal.vue
View file @
4ba5d8ed
...
...
@@ -2,9 +2,9 @@
<BasicModal
v-bind=
"$attrs"
@
register=
"registerModal"
title=
"
全局字段名称
映射规则"
title=
"
字段名
映射规则"
@
ok=
"handleSubmit"
style=
"width: 35
%"
width=
"40
%"
minHeight=
"50"
>
<BasicForm
@
register=
"registerForm"
>
...
...
src/views/dataIntegration/dataLakePunctual/fieldTypeMappingRuleModal.vue
View file @
4ba5d8ed
...
...
@@ -2,7 +2,7 @@
<BasicModal
v-bind=
"$attrs"
@
register=
"registerModal"
title=
"
全局
字段类型映射规则"
title=
"字段类型映射规则"
@
ok=
"handleSubmit"
minHeight=
"50"
>
...
...
src/views/dataIntegration/dataLakePunctual/getMetadataModal.vue
View file @
4ba5d8ed
...
...
@@ -39,8 +39,7 @@
import
{
getMetadataTableList
}
from
'./mock'
import
{
getMetadataColumns
}
from
'./dataLakePunctual.data'
;
import
Icon
from
'@/components/Icon/Icon.vue'
;
const
emit
=
defineEmits
([
'success'
,
'register'
]);
const
emit
=
defineEmits
([
'success'
,
'register'
,
'setFlag'
]);
const
{
createMessage
}
=
useMessage
();
const
unfold
=
ref
(
false
);
let
startId
=
ref
();
...
...
@@ -79,6 +78,7 @@
/**确定按钮*/
async
function
handleSubmit
()
{
closeModal
();
emit
(
'setFlag'
,
0
);
}
/**获取元数据-选择按钮*/
...
...
src/views/dataIntegration/dataLakePunctual/index.vue
View file @
4ba5d8ed
This diff is collapsed.
Click to expand it.
src/views/dataIntegration/dataLakePunctual/mock.ts
View file @
4ba5d8ed
...
...
@@ -415,7 +415,7 @@ export const cardRuleList = [
},
{
title
:
'【全局】
字段
映射规则'
,
title
:
'【全局】
表名
映射规则'
,
type
:
'singleTableFieldMappingRule'
,
description
:
'根据业务需求,对选中的源端表进行详情字段名、类型、注释 的映射配置'
,
},
...
...
src/views/dataIntegration/dataLakePunctual/newFieldRuleModal.vue
View file @
4ba5d8ed
...
...
@@ -2,7 +2,7 @@
<BasicModal
v-bind=
"$attrs"
@
register=
"registerModal"
title=
"
全局
新增字段规则"
title=
"新增字段规则"
@
ok=
"handleSubmit"
minHeight=
"50"
>
...
...
src/views/dataIntegration/dataLakePunctual/singleTableFieldMappingRuleModal.vue
View file @
4ba5d8ed
...
...
@@ -2,9 +2,9 @@
<BasicModal
v-bind=
"$attrs"
@
register=
"registerModal"
title=
"
全局字段
映射规则"
title=
"
表名
映射规则"
@
ok=
"handleSubmit"
style=
"width: 35
%"
width=
"40
%"
minHeight=
"50"
>
<BasicForm
@
register=
"registerForm"
>
...
...
src/views/dataIntegration/taskOM/index.vue
View file @
4ba5d8ed
...
...
@@ -6,8 +6,24 @@
<Col
:span=
"24"
>
<Card>
<div
style=
"flex: 1"
>
<div
class=
"ml-1 mt-1"
>
<BasicForm
@
register=
"registerForm"
/>
<div
class=
"ml-2 mt-1"
>
<div
class=
"flex"
>
<a-button
type=
"default"
@
click=
"handleGoBack"
><icon
icon=
"ant-design:left-outlined"
/>
返回
</a-button>
<Select
class=
"ml-6"
v-model:value=
"value1"
style=
"width: 260px"
:options=
"options1"
@
change=
"handleChange"
></Select>
</div>
<BasicForm
class=
"mt-2"
@
register=
"registerForm"
>
<template
#
refresh=
"
{ field, model }">
<div
class=
"mr-2"
style=
"float: right"
>
<a-button
type=
"primary"
@
click=
"resetFields"
>
刷新
</a-button>
</div>
</
template
>
</BasicForm>
</div>
<div
class=
"card_content"
>
<col
:span=
"3"
/>
...
...
@@ -21,7 +37,7 @@
<Col
:span=
"3"
@
click=
"clickButton(1)"
:class=
"{ 'listItemClass': selectedItem === 1 }"
>
<div
class=
"card_item"
>
<div
class=
"card_itemInfo"
>
<div
class=
"dataNum"
>
10
</div>
<div
class=
"dataNum"
>
{{ allNum }}
</div>
<div
class=
"dataTitle"
>
执行记录
</div>
</div>
</div>
...
...
@@ -30,7 +46,7 @@
<div
class=
"card_item"
>
<Icon
icon=
"ant-design:check-circle-filled"
:size=
"30"
:color=
"'rgb(84,198,159)'"
/>
<div
class=
"card_itemInfo"
>
<div
class=
"dataNum"
>
1
</div>
<div
class=
"dataNum"
>
{{ successNum }}
</div>
<div
class=
"dataTitle"
>
成功
</div>
</div>
</div>
...
...
@@ -39,7 +55,7 @@
<div
class=
"card_item"
>
<Icon
icon=
"line-md:loading-twotone-loop"
:size=
"30"
:color=
"'rgb(81, 160, 248)'"
/>
<div
class=
"card_itemInfo"
>
<div
class=
"dataNum"
>
2
</div>
<div
class=
"dataNum"
>
{{ runningNum }}
</div>
<div
class=
"dataTitle"
>
进行中
</div>
</div>
</div>
...
...
@@ -48,7 +64,7 @@
<div
class=
"card_item"
>
<Icon
icon=
"line-md:close-circle-filled"
:size=
"30"
:color=
"'rgb(212, 115, 113)'"
/>
<div
class=
"card_itemInfo"
>
<div
class=
"dataNum"
>
3
</div>
<div
class=
"dataNum"
>
{{ failNum }}
</div>
<div
class=
"dataTitle"
>
失败
</div>
</div>
</div>
...
...
@@ -57,7 +73,7 @@
<div
class=
"card_item"
>
<Icon
icon=
"ri:hourglass-fill"
:size=
"30"
:color=
"'rgb(147, 140, 206)'"
/>
<div
class=
"card_itemInfo"
>
<div
class=
"dataNum"
>
4
</div>
<div
class=
"dataNum"
>
{{ waitNum }}
</div>
<div
class=
"dataTitle"
>
等待
</div>
</div>
</div>
...
...
@@ -106,9 +122,10 @@
<
script
setup
lang=
"ts"
>
import
PageWrapper
from
"@/components/Page/src/PageWrapper.vue"
;
import
{
Card
,
Col
,
Row
}
from
"ant-design-vue"
;
import
{
Card
,
Col
,
Row
,
Select
}
from
"ant-design-vue"
;
import
type
{
SelectProps
}
from
'ant-design-vue'
;
import
Icon
from
"@/components/Icon/Icon.vue"
;
import
{
Ref
,
ref
,
watch
}
from
"vue"
;
import
{
onMounted
,
onUnmounted
,
Ref
,
ref
,
watch
}
from
"vue"
;
import
{
useECharts
}
from
"@/hooks/web/useECharts"
;
import
{
useMessage
}
from
"@/hooks/web/useMessage"
;
import
{
useRoute
}
from
"vue-router"
;
...
...
@@ -124,7 +141,79 @@ import {BasicForm,useForm} from "@/components/Form";
defineOptions
({
name
:
'AccountManagement'
});
/*饼图数据获取*/
const
successNum
=
ref
(
0
);
const
runningNum
=
ref
(
0
);
const
failNum
=
ref
(
0
);
const
waitNum
=
ref
(
0
);
const
allNum
=
ref
(
0
);
onMounted
(()
=>
{
tableList
.
forEach
(
item
=>
{
if
(
item
.
operationalStatus
===
'成功'
)
{
successNum
.
value
++
}
else
if
(
item
.
operationalStatus
===
'进行中'
)
{
runningNum
.
value
++
}
else
if
(
item
.
operationalStatus
===
'失败'
)
{
failNum
.
value
++
}
else
if
(
item
.
operationalStatus
===
'等待'
)
{
waitNum
.
value
++
}
allNum
.
value
++
})
watch
(
()
=>
props
.
loading
,
()
=>
{
if
(
props
.
loading
)
{
return
;
}
setOptions
({
tooltip
:
{
trigger
:
'item'
,
},
series
:
[
{
color
:
[
'rgb(84,198,159)'
,
'rgb(81, 160, 248)'
,
'rgb(212, 115, 113)'
,
'rgb(147, 140, 206)'
],
// name: '访问来源',
type
:
'pie'
,
radius
:
[
'50%'
,
'70%'
],
avoidLabelOverlap
:
false
,
itemStyle
:
{
borderRadius
:
0
,
borderColor
:
'#fff'
,
borderWidth
:
2
,
},
label
:
{
show
:
false
,
position
:
'center'
,
},
emphasis
:
{
label
:
{
show
:
true
,
fontSize
:
'12'
,
fontWeight
:
'bold'
,
},
},
labelLine
:
{
show
:
false
,
},
data
:
[
{
value
:
successNum
.
value
,
name
:
'成功'
},
{
value
:
runningNum
.
value
,
name
:
'进行中'
},
{
value
:
failNum
.
value
,
name
:
'失败'
},
{
value
:
waitNum
.
value
,
name
:
'等待'
},
],
animationType
:
'scale'
,
animationEasing
:
'exponentialInOut'
,
animationDelay
:
function
()
{
return
Math
.
random
()
*
100
;
},
},
],
});
},
{
immediate
:
true
},
);
})
const
[
register1
]
=
useDescription
({
bordered
:
false
,
data
:
mockData
,
...
...
@@ -148,59 +237,7 @@ const route = useRoute();
const
go
=
useGo
();
const
searchInfo
=
ref
(
''
);
const
selectedItem
=
ref
()
watch
(
()
=>
props
.
loading
,
()
=>
{
if
(
props
.
loading
)
{
return
;
}
setOptions
({
tooltip
:
{
trigger
:
'item'
,
},
series
:
[
{
color
:
[
'rgb(84,198,159)'
,
'rgb(81, 160, 248)'
,
'rgb(212, 115, 113)'
,
'rgb(147, 140, 206)'
],
// name: '访问来源',
type
:
'pie'
,
radius
:
[
'50%'
,
'70%'
],
avoidLabelOverlap
:
false
,
itemStyle
:
{
borderRadius
:
0
,
borderColor
:
'#fff'
,
borderWidth
:
2
,
},
label
:
{
show
:
false
,
position
:
'center'
,
},
emphasis
:
{
label
:
{
show
:
true
,
fontSize
:
'12'
,
fontWeight
:
'bold'
,
},
},
labelLine
:
{
show
:
false
,
},
data
:
[
{
value
:
1
,
name
:
'成功'
},
{
value
:
2
,
name
:
'进行中'
},
{
value
:
3
,
name
:
'失败'
},
{
value
:
4
,
name
:
'等待'
},
],
animationType
:
'scale'
,
animationEasing
:
'exponentialInOut'
,
animationDelay
:
function
()
{
return
Math
.
random
()
*
100
;
},
},
],
});
},
{
immediate
:
true
},
);
//初始化表单
const
[
registerForm
,
{
setFieldsValue
,
updateSchema
,
resetFields
,
validate
}]
=
useForm
({
labelWidth
:
100
,
...
...
@@ -256,8 +293,11 @@ const [registerTable, { reload, updateTableDataRecord, getSearchInfo,getForm,get
// },
});
/**返回按钮*/
function
handleGoBack
()
{
router
.
go
(
-
1
);
}
/**执行 按钮*/
const
handleExecute
=
()
=>
{
console
.
log
(
'触发了执行按钮'
)
...
...
@@ -273,22 +313,73 @@ function handleEdit() {
/**重跑 按钮*/
const
handleRun
=
()
=>
{
console
.
log
(
'触发了重跑按钮'
)
createConfirm
({
iconType
:
'warning'
,
title
:
'重跑'
,
content
:
'确认重跑选中数据吗?'
,
onOk
()
{
createMessage
.
success
(
'重跑成功!'
);
},
});
};
/**错误恢复 按钮*/
const
handleRecover
=
()
=>
{
console
.
log
(
'触发了错误恢复按钮'
)
createConfirm
({
iconType
:
'warning'
,
title
:
'错误恢复'
,
content
:
'确认恢复选中数据吗?'
,
onOk
()
{
createMessage
.
success
(
'恢复成功!'
);
},
});
};
/**取消 按钮*/
const
handleCancel
=
()
=>
{
console
.
log
(
'触发了取消执行按钮'
)
createConfirm
({
iconType
:
'warning'
,
title
:
'取消执行'
,
content
:
'确认取消执行选中数据吗?'
,
onOk
()
{
createMessage
.
success
(
'取消执行成功!'
);
},
});
};
const
value1
=
ref
(
'admin-个人工作区,共享工作区,test001'
);
const
options1
=
ref
<
SelectProps
[
'options'
]
>
([
{
label
:
'admin-个人工作区'
,
value
:
'admin-个人工作区'
,
},
{
label
:
'共享工作区'
,
value
:
'共享工作区'
,
},
{
label
:
'test001'
,
value
:
'test001'
,
},
{
label
:
'test002'
,
value
:
'test002'
,
},
{
label
:
'test003'
,
value
:
'test003'
,
},
]);
const
handleChange
=
(
value
:
string
)
=>
{
console
.
log
(
`selected
${
value
}
`
);
};
/**点击card 改变css样式*/
function
clickButton
(
item
){
selectedItem
.
value
=
item
;
}
</
script
>
...
...
@@ -298,7 +389,6 @@ function clickButton(item){
::v-deep(.ant-card-body) {
display: flex;
justify-content: center;
height: 150px;
padding: 0;
}
.homePage_left {
...
...
@@ -308,6 +398,7 @@ function clickButton(item){
}
.card_content {
width: 100%;
margin-bottom: 16px;
display: flex;
justify-content: center;
align-items: center;
...
...
src/views/dataIntegration/taskOM/mock.ts
View file @
4ba5d8ed
...
...
@@ -26,6 +26,24 @@ export const tableList: any[] = [
version
:
'V2'
,
executeMode
:
'手动执行'
,
},
{
dispatchTime
:
'2024-10-25 10:04:05'
,
executeTime
:
'2024-10-25 10:04:05'
,
rows
:
12
,
executeDuration
:
'5s'
,
operationalStatus
:
'等待'
,
version
:
'V2'
,
executeMode
:
'手动执行'
,
},
{
dispatchTime
:
'2024-10-25 10:04:05'
,
executeTime
:
'2024-10-25 10:04:05'
,
rows
:
12
,
executeDuration
:
'5s'
,
operationalStatus
:
'等待'
,
version
:
'V2'
,
executeMode
:
'手动执行'
,
},
]
...
...
src/views/dataIntegration/taskOM/recordDetails.vue
View file @
4ba5d8ed
...
...
@@ -31,8 +31,8 @@
<
template
#
toolbar
>
<div
style=
"flex: 1;display: flex; justify-content: space-between;"
>
<div>
<span>
加载成功数量:2
</span>
<span>
加载成功数量:0
</span>
<span>
加载成功数量:2
</span>
<span>
加载成功数量:0
</span>
<span>
(加载成功数量:0,
</span>
<span>
加载成功数量:0)
</span>
</div>
...
...
src/views/dataIntegration/taskOM/taskOM.data.ts
View file @
4ba5d8ed
import
{
BasicColumn
,
FormSchema
}
from
"@/components/Table"
;
import
{
DescItem
}
from
"@/components/Description"
;
import
{
BasicColumn
,
FormSchema
}
from
'@/components/Table'
;
import
{
DescItem
}
from
'@/components/Description'
;
export
const
columns
:
BasicColumn
[]
=
[
{
...
...
@@ -57,9 +56,7 @@ export const searchFormSchema: FormSchema[] = [
component
:
'Select'
,
componentProps
:
{
placeholder
:
'按来源过滤'
,
options
:
[
{
label
:
'指标汇总表'
,
value
:
'1'
},
],
options
:
[{
label
:
'指标汇总表'
,
value
:
'1'
}],
},
colProps
:
{
span
:
8
},
},
...
...
@@ -71,7 +68,8 @@ export const resetNameFormSchema: FormSchema[] = [
field
:
'schedulingTime'
,
component
:
'RadioButtonGroup'
,
colProps
:
{
lg
:
4
,
md
:
4
,
lg
:
4
,
md
:
4
,
},
defaultValue
:
'1'
,
componentProps
:
{
...
...
@@ -90,26 +88,27 @@ export const resetNameFormSchema: FormSchema[] = [
},
},
},
{
{
field
:
'days'
,
component
:
'DatePicker'
,
colProps
:
{
lg
:
3
,
md
:
3
,
lg
:
3
,
md
:
3
,
},
defaultValue
:
new
Date
(),
componentProps
:
{
format
:
'YYYY-MM-DD'
,
placeholder
:
'选择日期范围'
,
format
:
'YYYY-MM-DD'
,
placeholder
:
'选择日期范围'
,
},
},
},
{
field
:
'schedulingType'
,
component
:
'Select'
,
label
:
'调度类型'
,
colProps
:
{
lg
:
4
,
md
:
4
,
lg
:
4
,
md
:
4
,
},
defaultValue
:
'1'
,
componentProps
:
{
...
...
@@ -137,7 +136,8 @@ export const resetNameFormSchema: FormSchema[] = [
component
:
'Select'
,
label
:
'发布状态'
,
colProps
:
{
lg
:
4
,
md
:
4
,
lg
:
4
,
md
:
4
,
},
defaultValue
:
'1'
,
componentProps
:
{
...
...
@@ -160,6 +160,16 @@ export const resetNameFormSchema: FormSchema[] = [
],
},
},
{
field
:
'refresh'
,
label
:
' '
,
colProps
:
{
lg
:
9
,
md
:
9
,
},
component
:
'Slot'
,
slot
:
'refresh'
,
},
];
export
const
schema
:
DescItem
[]
=
[
...
...
@@ -175,7 +185,6 @@ export const schema: DescItem[] = [
field
:
'createdBy'
,
label
:
'创建者'
,
},
];
export
const
detailsColumns
:
BasicColumn
[]
=
[
{
...
...
@@ -194,7 +203,7 @@ export const detailsColumns: BasicColumn[] = [
width
:
170
,
},
{
title
:
'
调用
状态'
,
title
:
'
运行
状态'
,
dataIndex
:
'callStatus'
,
width
:
100
,
slots
:
{
customRender
:
'callStatus'
},
...
...
@@ -204,7 +213,7 @@ export const detailsColumns: BasicColumn[] = [
dataIndex
:
'rows'
,
width
:
100
,
},
]
]
;
export
const
detailSchemas
:
FormSchema
[]
=
[
{
...
...
src/views/dataIntegration/taskOM/viewTheLog.vue
View file @
4ba5d8ed
<
template
>
<BasicModal
width=
"
5
0%"
width=
"
4
0%"
@
register=
"registerModal"
:title=
"getTitle"
@
ok=
"handleSubmit"
...
...
@@ -8,7 +8,7 @@
<template
#
insertFooter
>
<a-button
@
click=
"downloadLog"
style=
"float: left;"
type=
"link"
>
下载日志
</a-button>
</
template
>
<img
src=
"@/assets/images/Log.png"
/>
<img
class=
"w-1/1"
src=
"@/assets/images/Log.png"
/>
</BasicModal>
</template>
...
...
src/views/scriptDevelopment/sqlDevelopment/DataTree.vue
View file @
4ba5d8ed
<
template
>
<div
class=
"
m-5 mr-0
overflow-hidden bg-white"
>
<div
class=
"overflow-hidden bg-white"
>
<BasicTree
title=
""
ref=
"treeRef"
...
...
src/views/scriptDevelopment/sqlDevelopment/GroupTree.vue
View file @
4ba5d8ed
<
template
>
<div
class=
"
m-5 mr-0
overflow-hidden bg-white"
>
<div
class=
"overflow-hidden bg-white"
>
<BasicTree
title=
""
ref=
"treeRef"
...
...
src/views/scriptDevelopment/sqlDevelopment/index.vue
View file @
4ba5d8ed
<
template
>
<PageWrapper
dense
contentFullHeight
fixedHeight
contentClass=
"flex"
>
<div
class=
"w-1/4 xl:w-1/5"
>
<DataTree
@
select=
"handleSelect"
style=
"height: 50%"
/>
<GroupTree
@
select=
"handleGroupSelect"
style=
"height: 50%"
/>
<PageWrapper
dense
contentFullHeight
fixedHeight
>
<div
class=
"flex"
>
<div
class=
"w-1/4 xl:w-1/5"
>
<DataTree
@
select=
"handleSelect"
style=
"height: 50%"
/>
<GroupTree
@
select=
"handleGroupSelect"
style=
"height: 50%"
/>
</div>
<div
class=
"w-3/4 xl:w-4/5"
>
<div>
<BasicTable
@
register=
"registerTable"
:searchInfo=
"searchInfo"
>
<template
#
headerTop
>
<a-input-search
v-model:value=
"form.value"
placeholder=
"输入关键字搜索"
style=
"width: 200px"
/>
</
template
>
<
template
#
toolbar
>
<a-button
:disabled=
"getRowSelection().selectedRowKeys
<
=
0
"
type=
"primary"
@
click=
"handleExport"
>
导出
</a-button
>
<a-button
type=
"primary"
@
click=
"handleImport"
>
导入
</a-button></
template
>
</BasicTable>
</div>
<div
v-if=
"showTable === 'true'"
>
<BasicTable
@
register=
"registerDataPreviewTable"
>
<
template
#
headerTop
>
<Dropdown
:trigger=
"['click']"
>
<span
type=
"primary"
@
click
.
prevent
style=
"margin-left: 1180px"
>
字段选择
<Icon
icon=
"ant-design:caret-down-filled"
style=
"font-size: 12px; margin-left: 2px"
/></span>
<template
#
overlay
>
<Checkbox
.
Group
v-model:value=
"selectedTasks"
>
<Menu>
<MenuItem
v-for=
"task in fieldData"
:key=
"task.value"
@
click
.
stop=
"handleTaskModel(item)"
>
<Checkbox
:value=
"task.value"
>
{{
task
.
label
}}
</Checkbox>
</MenuItem>
</Menu>
</Checkbox
.Group
>
</
template
>
</Dropdown>
<Icon
icon=
"bxs:download"
style=
"margin-left: 20px"
:size=
"25"
@
click=
"handleDownload"
/>
</template>
</BasicTable>
</div>
</div>
</div>
<BasicTable
@
register=
"registerTable"
class=
"w-3/4 xl:w-4/5"
:searchInfo=
"searchInfo"
>
<template
#
toolbar
>
<a-button
:disabled=
"getRowSelection().selectedRowKeys
<
=
0
"
type=
"primary"
@
click=
"handleExport"
>
导出
</a-button
>
<a-button
type=
"primary"
@
click=
"handleImport"
>
导入
</a-button></
template
>
</BasicTable>
<importModal
@
register=
"registerImport"
@
success=
"handleImportSuccess"
/>
</PageWrapper>
</template>
<
script
lang=
"ts"
setup
>
import
{
reactive
,
onMounted
}
from
'vue'
;
import
{
reactive
,
onMounted
,
ref
}
from
'vue'
;
import
{
BasicTable
,
useTable
}
from
'@/components/Table'
;
import
{
getRoleListByPage
,
deleteById
,
exportRoleList
}
from
'@/api/system/role/role'
;
import
{
exportRoleList
}
from
'@/api/system/role/role'
;
import
{
PageWrapper
}
from
'@/components/Page'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
DataTree
from
'./DataTree.vue'
;
import
GroupTree
from
'./GroupTree.vue'
;
import
{
DataTreeData
}
from
'./sqlDevelopmentData'
;
import
{
columns
,
searchFormSchema
}
from
'./data'
;
import
{
DataTreeData
,
previewData
}
from
'./sqlDevelopmentData'
;
import
{
columns
,
previewColumns
}
from
'./data'
;
import
importModal
from
'./importModal/importModal.vue'
;
import
{
router
}
from
'@/router'
;
import
{
downloadByData
}
from
'@/utils/file/download'
;
import
Icon
from
'@/components/Icon/Icon.vue'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
Dropdown
,
Menu
,
MenuItem
,
Checkbox
}
from
'ant-design-vue'
;
defineOptions
({
name
:
'AccountManagement'
});
const
[
registerImport
,
{
openModal
:
openImportModal
}]
=
useModal
();
const
searchInfo
=
reactive
<
Recordable
>
({});
const
{
createMessage
}
=
useMessage
();
const
showTable
=
ref
(
'false'
);
const
selectedTasks
=
ref
([]);
const
fieldData
=
[
{
value
:
'script'
,
label
:
'脚本'
},
{
value
:
'java'
,
label
:
'Java'
},
{
value
:
'python'
,
label
:
'Python'
},
{
value
:
'rTask'
,
label
:
'R任务'
},
{
value
:
'scala'
,
label
:
'Scala'
},
{
value
:
'sql'
,
label
:
'SQL'
},
{
value
:
'dataLoad'
,
label
:
'数据加载'
},
{
value
:
'dataSync'
,
label
:
'数据同步'
},
{
value
:
'dataQuality'
,
label
:
'数据质量'
},
{
value
:
'dataMetrics'
,
label
:
'数据指标'
},
{
value
:
'nestedWorkflow'
,
label
:
'嵌套任务流'
},
{
value
:
'delay'
,
label
:
'延时器'
},
];
const
form
=
reactive
({
value
:
''
,
});
const
[
registerTable
,
{
reload
,
updateTableDataRecord
,
getSearchInfo
,
getForm
,
getRowSelection
},
...
...
@@ -67,21 +136,44 @@
rowSelection
:
{
type
:
'checkbox'
,
},
formConfig
:
{
labelWidth
:
10
,
schemas
:
searchFormSchema
,
autoSubmitOnEnter
:
true
,
resetFunc
:
()
=>
{
searchInfo
.
res
=
''
;
},
scroll
:
{
y
:
400
},
useSearchForm
:
false
,
showTableSetting
:
false
,
bordered
:
true
,
handleSearchInfoFn
(
info
)
{
return
info
;
},
});
const
[
registerDataPreviewTable
]
=
useTable
({
title
:
'数据预览'
,
api
:
async
()
=>
{
const
response
=
{
pageNu
:
'1'
,
pageSize
:
'10'
,
total
:
previewData
.
length
,
data
:
previewData
,
};
return
{
...
response
};
},
useSearchForm
:
true
,
rowKey
:
'id'
,
rowSelection
:
true
,
columns
:
previewColumns
,
showIndexColumn
:
false
,
pagination
:
true
,
scroll
:
{
y
:
400
},
useSearchForm
:
false
,
showTableSetting
:
false
,
bordered
:
true
,
handleSearchInfoFn
(
info
)
{
return
info
;
},
});
function
handleDownload
()
{
selectedTasks
.
value
=
[];
createMessage
.
success
(
'下载成功'
);
}
/** 导出按钮*/
async
function
handleExport
()
{
console
.
log
(
'导出----'
);
...
...
@@ -111,9 +203,7 @@
}
function
handleGroupSelect
()
{
router
.
push
({
path
:
'/scriptDevelopment/sqlDevelopment/sqlExecute/sqlExecute'
,
});
showTable
.
value
=
'true'
;
}
onMounted
(()
=>
{});
</
script
>
src/views/scriptDevelopment/sqlDevelopment/sqlExecute/dataPreviewModal.vue
deleted
100644 → 0
View file @
5c6d1dc8
<
template
>
<BasicModal
width=
"55%"
v-bind=
"$attrs"
@
register=
"registerModal"
:title=
"title"
@
ok=
"handleSubmit"
>
<template
#
footer
>
<a-button
type=
"primary"
@
click=
"handleSubmit"
>
关闭
</a-button>
</
template
>
<BasicTable
@
register=
"registerTable"
:searchInfo=
"searchInfo"
>
<
template
#
toolbar
>
<!-- 下载-->
<a-button
type=
"primary"
@
click=
"handleDownload"
><Icon
icon=
"bxs:download"
:size=
"20"
/></a-button>
</
template
>
</BasicTable>
</BasicModal>
</template>
<
script
lang=
"ts"
setup
>
import
{
onMounted
,
reactive
,
ref
}
from
'vue'
;
import
{
BasicModal
,
useModalInner
}
from
'@/components/Modal'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
{
BasicTable
,
useTable
}
from
'@/components/Table'
;
import
Icon
from
'@/components/Icon/Icon.vue'
;
import
{
previewData
}
from
'../sqlDevelopmentData'
;
import
{
previewColumns
}
from
'../data'
;
defineOptions
({
name
:
'KnowledgeModal'
});
const
emit
=
defineEmits
([
'success'
,
'register'
]);
const
{
createMessage
}
=
useMessage
();
const
title
=
ref
();
const
searchInfo
=
reactive
<
Recordable
>
({});
const
tableData
=
ref
([]);
const
[
registerModal
,
{
setModalProps
,
closeModal
}]
=
useModalInner
(
async
(
data
)
=>
{
tableData
.
value
=
[];
await
reload
();
setModalProps
({
confirmLoading
:
false
});
title
.
value
=
data
.
title
;
});
const
[
registerTable
,
{
reload
}]
=
useTable
({
api
:
async
()
=>
{
const
response
=
{
pageNu
:
'1'
,
pageSize
:
'10'
,
total
:
previewData
.
length
,
data
:
previewData
,
};
return
{
...
response
};
},
rowKey
:
'id'
,
rowSelection
:
true
,
columns
:
previewColumns
,
showIndexColumn
:
false
,
pagination
:
false
,
formConfig
:
{
labelWidth
:
10
,
autoSubmitOnEnter
:
true
,
resetFunc
:
()
=>
{
searchInfo
.
res
=
''
;
},
},
useSearchForm
:
false
,
showTableSetting
:
false
,
bordered
:
true
,
handleSearchInfoFn
(
info
)
{
return
info
;
},
});
function
handleDownload
()
{
createMessage
.
success
(
'下载成功'
);
}
async
function
handleSubmit
()
{
closeModal
();
}
onMounted
(()
=>
{});
</
script
>
src/views/scriptDevelopment/sqlDevelopment/sqlExecute/sqlExecute.vue
View file @
4ba5d8ed
...
...
@@ -4,11 +4,10 @@
dense
contentFullHeight
fixedHeight
contentClass=
"flex"
@
back=
"goBack"
>
<GroupTree
@
select=
"handleSelect"
class=
"w-1/4 xl:w-1/5"
/>
<div
class=
"w-3/4 xl:w-4/5"
style=
"padding-top: 20px"
>
<div
style=
"padding-top: 20px"
>
<BasicForm
@
register=
"registerForm"
>
<template
#
formFooter
>
<div
style=
"display: flex; justify-content: space-between"
>
...
...
@@ -16,7 +15,7 @@
<Tooltip
placement=
"top"
title=
"新窗口运行"
>
<a-button
type=
"primary"
style=
"margin-right: 10px; margin-left:
5
00px"
style=
"margin-right: 10px; margin-left:
7
00px"
@
click=
"handleExecute"
>
<Icon
icon=
"si:play-forward-duotone"
:size=
"20"
/>
...
...
@@ -77,7 +76,6 @@
</div>
<optionsModal
@
register=
"registerModal"
/>
<resultModal
@
register=
"registerResultModal"
/>
<PreviewModal
@
register=
"registerPreviewModal"
/>
<RecordModal
@
register=
"registerRecordModal"
/>
<versionManagementModal
@
register=
"registerVersionManagementModal"
/>
</PageWrapper>
...
...
@@ -86,7 +84,6 @@
import
{
Tooltip
}
from
'ant-design-vue'
;
import
{
ref
,
nextTick
,
watch
,
onMounted
}
from
'vue'
;
import
{
PageWrapper
}
from
'@/components/Page'
;
import
GroupTree
from
'../GroupTree.vue'
;
import
{
jsonData
}
from
'../sqlDevelopmentData'
;
import
{
formSchema
}
from
'../data'
;
import
{
useGo
}
from
'@/hooks/web/usePage'
;
...
...
@@ -95,7 +92,6 @@
import
optionsModal
from
'./optionsModal.vue'
;
import
{
useModal
}
from
'@/components/Modal'
;
import
resultModal
from
'./resultModal.vue'
;
import
PreviewModal
from
'./dataPreviewModal.vue'
;
import
{
useMessage
}
from
'@/hooks/web/useMessage'
;
import
Icon
from
'@/components/Icon/Icon.vue'
;
import
RecordModal
from
'./executeRecordModal.vue'
;
...
...
@@ -107,7 +103,6 @@
const
go
=
useGo
();
const
[
registerModal
,
{
openModal
}]
=
useModal
();
const
[
registerResultModal
,
{
openModal
:
openResultModal
}]
=
useModal
();
const
[
registerPreviewModal
,
{
openModal
:
openPreviewModal
}]
=
useModal
();
const
[
registerVersionManagementModal
,
{
openModal
:
openVersionManagementModal
}]
=
useModal
();
const
[
registerRecordModal
,
{
openModal
:
openRecordModal
}]
=
useModal
();
const
[
registerForm
]
=
useForm
({
...
...
@@ -116,12 +111,6 @@
schemas
:
formSchema
,
showActionButtonGroup
:
false
,
});
/** 部门树的select*/
function
handleSelect
()
{
openPreviewModal
(
true
,
{
title
:
'数据预览'
,
});
}
function
handleOptions
()
{
openModal
(
true
,
{
title
:
'参数配置'
,
...
...
src/views/taskScheduling/taskFlow/index.vue
View file @
4ba5d8ed
...
...
@@ -91,7 +91,7 @@
tooltip:'详情',
onClick: handleConsanguinity.bind(null, record),
ifShow: () => {
return record.releaseStatus !== '
父级
'; // 这里只是实现树文件夹按钮
return record.releaseStatus !== ''; // 这里只是实现树文件夹按钮
},
},
{
...
...
@@ -107,7 +107,7 @@
tooltip:'下线',
onClick: handleOnline.bind(null, record),
ifShow: () => {
return record.releaseStatus !== '
父级
'; // 根据业务控制是否显示: 非enable状态的不显示启用按钮
return record.releaseStatus !== ''; // 根据业务控制是否显示: 非enable状态的不显示启用按钮
},
},
{
...
...
@@ -115,7 +115,7 @@
tooltip:'发布',
onClick: apiDetail.bind(null, record),
ifShow: () => {
return record.releaseStatus !== '
父级
'; // 根据业务控制是否显示: 非enable状态的不显示启用按钮
return record.releaseStatus !== ''; // 根据业务控制是否显示: 非enable状态的不显示启用按钮
},
},
{
...
...
@@ -123,7 +123,7 @@
tooltip:'检查?',
onClick: handleOffline.bind(null, record),
ifShow: () => {
return record.releaseStatus !== '
父级
'; // 这里只是实现树文件夹按钮
return record.releaseStatus !== ''; // 这里只是实现树文件夹按钮
},
},
]"
...
...
src/views/taskScheduling/taskFlow/mock.ts
View file @
4ba5d8ed
...
...
@@ -122,7 +122,7 @@ export const tableList: any[] = [
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'
父级
'
,
releaseStatus
:
''
,
task
:
null
,
type
:
'theme'
,
...
...
@@ -136,7 +136,7 @@ export const tableList: any[] = [
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'
父级
'
,
releaseStatus
:
''
,
task
:
null
,
type
:
'theme'
,
...
...
@@ -150,7 +150,7 @@ export const tableList: any[] = [
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'
父级
'
,
releaseStatus
:
''
,
task
:
null
,
type
:
'twoLevel'
,
...
...
@@ -164,7 +164,7 @@ export const tableList: any[] = [
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'
父级
'
,
releaseStatus
:
''
,
task
:
null
,
type
:
'twoLevel'
,
...
...
@@ -178,7 +178,7 @@ export const tableList: any[] = [
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'
父级
'
,
releaseStatus
:
''
,
task
:
null
,
type
:
'twoLevel'
,
...
...
@@ -192,7 +192,7 @@ export const tableList: any[] = [
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'
父级
'
,
releaseStatus
:
''
,
task
:
null
,
type
:
'twoLevel'
,
...
...
@@ -206,7 +206,7 @@ export const tableList: any[] = [
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'
父级
'
,
releaseStatus
:
''
,
task
:
null
,
type
:
'twoLevel'
,
...
...
@@ -220,7 +220,7 @@ export const tableList: any[] = [
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'
父级
'
,
releaseStatus
:
''
,
task
:
null
,
type
:
'twoLevel'
,
...
...
@@ -234,7 +234,7 @@ export const tableList: any[] = [
updateDate
:
'2023/07/10 10:49:38'
,
businessTag
:
'_'
,
owner
:
'admin'
,
releaseStatus
:
'
父级
'
,
releaseStatus
:
''
,
task
:
null
,
type
:
'twoLevel'
,
...
...
src/views/taskScheduling/taskFlowDesign/defineEvent.vue
View file @
4ba5d8ed
This diff is collapsed.
Click to expand it.
src/views/taskScheduling/taskFlowDesign/design.data.ts
View file @
4ba5d8ed
import
{
FormSchema
}
from
'@/components/Form'
;
import
{
BasicColumn
}
from
'@/components/Table'
;
import
{
TableColumn
}
from
'ant-design-vue'
;
import
{
InputProps
,
TableColumn
}
from
'ant-design-vue'
;
import
{
TreeItem
}
from
'@/components/Tree'
;
export
const
designFormSchema
:
FormSchema
[]
=
[
...
...
@@ -284,6 +284,7 @@ export const sqlFormSchema: FormSchema[] = [
{
label
:
'SQL执行模式'
,
field
:
'runMode'
,
defaultValue
:
'不拆分执行'
,
component
:
'RadioGroup'
,
componentProps
:
{
options
:
[
...
...
@@ -702,6 +703,7 @@ export const embedFlowFormSchema: FormSchema[] = [
{
label
:
'任务流'
,
field
:
'path'
,
required
:
true
,
component
:
'Select'
,
componentProps
:
{
options
:
[
...
...
@@ -720,6 +722,27 @@ export const delayFormSchema: FormSchema[] = [
slot
:
'time'
,
},
];
export
const
checkFormSchema
:
FormSchema
[]
=
[
{
label
:
'落标检查'
,
field
:
'path'
,
required
:
true
,
slot
:
'path'
,
},
{
label
:
'检查结果'
,
field
:
'result'
,
component
:
'CheckboxGroup'
,
componentProps
:
{
options
:
[
{
label
:
'所有规则均通过检查'
,
value
:
'所有规则均通过检查'
,
},
],
},
},
];
export
const
dataLoadConfigColumn
:
BasicColumn
[]
=
[
{
title
:
'参数名'
,
...
...
@@ -830,12 +853,38 @@ export const taskOverallConfig: FormSchema[] = [
slot
:
'cycle'
,
colProps
:
{
lg
:
24
,
md
:
24
},
},
/*
{
{
label
:
'Cron表达式'
,
helpMessage
:
'0 0 0 ? * * *'
,
component
:
'Input'
,
componentProps
:
{
placeholder
:
'0 0 0 ? * * *'
,
}
as
InputProps
,
field
:
'cron'
,
slot: 'cron',
colProps
:
{
lg
:
24
,
md
:
24
},
},*/
show
:
({
model
})
=>
{
return
model
.
cycle
===
'Cron表达式'
;
},
},
{
label
:
'调度时间'
,
field
:
'scheduleTime'
,
fields
:[
'scheduleTime'
],
slot
:
'scheduleTime'
,
colProps
:
{
lg
:
24
,
md
:
24
},
show
:
({
model
})
=>
{
return
model
.
cycle
===
'每天一次'
;
},
},
{
label
:
'事件触发器'
,
field
:
'eventTrigger'
,
slot
:
'eventTrigger'
,
colProps
:
{
lg
:
24
,
md
:
24
},
show
:
({
model
})
=>
{
return
model
.
cycle
===
'事件触发器'
;
},
},
{
label
:
'自定义日历'
,
field
:
'calendar'
,
...
...
@@ -1034,81 +1083,219 @@ export const defineEvent: FormSchema[] = [
label
:
'触发类型'
,
field
:
'triggerType'
,
fields
:
[
'saveResult'
],
/*componentProps: {
options: [
{
label: '文件到达',
value: '文件到达',
},
{
label: 'SQL结果检查',
value: 'SQL结果检查',
},
{
label: '脚本自定义',
value: '脚本自定义',
},
],
},*/
defaultValue
:
'文件到达'
,
colProps
:
{
span
:
20
,
},
slot
:
'triggerType'
,
},
/*
{
{
label
:
'文件系统源'
,
field
:
'fileSystemSource'
,
component: 'Select',
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'文件到达'
;
},
slot
:
'fileSystemSource'
,
colProps
:
{
span
:
20
,
},
},
{
label
:
'文件路径'
,
field
:
'filePath'
,
slot
:
'filePath'
,
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'文件到达'
;
},
colProps
:
{
span
:
20
,
},
},
{
label
:
'目标对象'
,
field
:
'targetObject'
,
fields
:
[
'targetObject'
],
slot
:
'targetObject'
,
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'文件到达'
;
},
colProps
:
{
span
:
20
,
},
},
{
label
:
'超时设置'
,
field
:
'timeoutSettings'
,
component
:
'CheckboxGroup'
,
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'文件到达'
;
},
colProps
:
{
span
:
20
,
},
componentProps
:
{
options
:
[
{
label: 'HDFS',
value: 'HDFS',
},
{
label: 'FTP',
value: 'FTP',
label
:
'超时失败'
,
value
:
'超时失败'
,
},
],
},
},
{
label
:
'保存结果'
,
field
:
'saveResults'
,
fields
:
[
'saveResults'
,
'saveResultName'
,
'saveResultObject'
],
colProps
:
{
span
:
20
,
},
slot
:
'saveResults'
,
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'文件到达'
;
},
},
{
label
:
'开始时间'
,
field
:
'startTime'
,
colProps
:
{
span
:
20
,
},
component
:
'TimePicker'
,
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'SQL结果检查'
;
},
},
{
label
:
'滚动时间窗口'
,
field
:
'rollingTimeWindow'
,
fields
:
[
'timeList'
],
colProps
:
{
span
:
20
,
},
slot
:
'rollingTimeWindow'
,
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'SQL结果检查'
;
},
},
{
label
:
'超时设置'
,
field
:
'timeoutSettingsT'
,
component
:
'CheckboxGroup'
,
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'SQL结果检查'
;
},
colProps
:
{
span
:
20
,
},
componentProps
:
{
options
:
[
{
label: '
SFTP
',
value: '
SFTP
',
label
:
'
超时失败
'
,
value
:
'
超时失败
'
,
},
],
},
},
{
label
:
'连接'
,
field
:
'connection'
,
component
:
'Select'
,
colProps
:
{
span
:
20
,
},
componentProps
:
{
options
:
[
{
value
:
'1'
,
label
:
'192.168.11.3'
},
{
value
:
'2'
,
label
:
'192.168.96.3'
},
{
value
:
'3'
,
label
:
'192.168.1.32'
},
],
},
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'SQL结果检查'
;
},
},
{
label: '文件路径',
field: 'filePath',
component: 'Input',
label
:
'SQL'
,
field
:
'sql'
,
component
:
'InputTextArea'
,
componentProps
:
{
placeholder
:
'事件满足取决于当前sql返回结果是否为空,'
+
'若无返回结果则判断事件条件未达成:此处支持引用任务流参数、工作区参数、全局参数'
,
}
as
InputProps
,
colProps
:
{
span
:
20
,
},
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'SQL结果检查'
;
},
},
{
label: '目标对象',
field: 'targetObject',
component: 'Input',
label
:
'保存结果'
,
field
:
'saveResultsT'
,
fields
:
[
'saveResults'
,
'saveResultName'
,
'saveResultObject'
],
colProps
:
{
span
:
20
,
},
slot
:
'saveResults'
,
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'SQL结果检查'
;
},
},
{
label
:
'开始时间'
,
field
:
'startTimeT'
,
colProps
:
{
span
:
20
,
},
component
:
'TimePicker'
,
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'脚本自定义'
;
},
},
{
label
:
'滚动时间窗口'
,
field
:
'rollingTimeWindowT'
,
fields
:
[
'timeListT'
],
colProps
:
{
span
:
20
,
},
slot
:
'rollingTimeWindowT'
,
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'脚本自定义'
;
},
},
{
label
:
'超时设置'
,
field: 'targetObject',
component: 'Input',
field
:
'timeoutSettingsTh'
,
component
:
'CheckboxGroup'
,
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'脚本自定义'
;
},
colProps
:
{
span
:
20
,
},
componentProps
:
{
options
:
[
{
label
:
'超时失败'
,
value
:
'超时失败'
,
},
],
},
},
{
label: '保存结果',
field: 'saveResults',
component: 'Input',
label
:
'脚本内容'
,
field
:
'scriptContent'
,
component
:
'InputTextArea'
,
componentProps
:
{
placeholder
:
'脚本运行成功,即满足,因此判断逻辑由用户确定'
,
}
as
InputProps
,
colProps
:
{
span
:
20
,
},
},*/
show
:
({
model
})
=>
{
return
model
.
triggerType
===
'脚本自定义'
;
},
},
];
src/views/taskScheduling/taskFlowDesign/index.vue
View file @
4ba5d8ed
...
...
@@ -131,6 +131,9 @@
<MenuItem
@
click=
"handleTaskModel('12')"
>
<span>
延时器
</span>
</MenuItem>
<MenuItem
@
click=
"handleTaskModel('13')"
>
<span>
落标检查任务
</span>
</MenuItem>
</Menu>
</
template
>
</Dropdown>
...
...
src/views/taskScheduling/taskFlowDesign/taskConfigModel.vue
View file @
4ba5d8ed
...
...
@@ -9,24 +9,6 @@
<BasicForm
@
register=
"registerForm"
>
<template
#
cycle=
"
{ field, model }">
<Select
v-model:value=
"model[field]"
:options=
"cycleOptions"
placeholder=
"请选择"
/>
<div
v-if=
"model[field] === '每天一次'"
>
<div
style=
"display: flex;margin: 25px 0 0 -65px"
>
<div
style=
"width: 100px"
>
调度时间
</div>
<div
style=
"display: flex;margin-left: -35px"
>
<Input/>
时
<Input/>
分
</div>
</div>
</div>
<div
v-if=
"model[field] === 'Cron表达式'"
style=
"margin-bottom: -15px"
>
<div
style=
"display: flex;margin: 25px 0 0 -80px"
>
<div
style=
"width: 100px"
>
Cron表达式
</div>
<div
style=
"display: flex;margin-left: -5px;width: 100%"
>
<Input/>
</div>
</div>
<a-button
style=
"padding: 0"
type=
"link"
>
Cron表达式
</a-button>
</div>
<a-button
type=
"link"
v-if=
"model[field] === '事件触发器'"
...
...
@@ -34,23 +16,25 @@
style=
"margin-left: -15px"
>
批量调整直接下游配置
</a-button>
<div
v-if=
"model[field] === '事件触发器'"
style=
"margin-bottom: -15px"
>
<div
style=
"display: flex;margin: 15px 0 0 -65px"
>
<div
style=
"width: 100px"
>
事件定义
</div>
<a-button
@
click=
"handleSetConfig"
style=
"color: red;border-color: red;margin-left: -30px"
>
定义事件
</a-button>
<a-button
@
click=
"viewLogs"
style=
"margin-left: 20px"
>
查看日志
</a-button>
</div>
<a-button
type=
"link"
style=
"color: red;margin-left: -10px"
>
<Icon
icon=
"ant-design:exclamation-circle-outlined"
/>
请定义触发事件详情
</
template
>
<
template
#
scheduleTime=
"{ field, model }"
>
<div
style=
"display: flex"
>
<Input
v-model:value=
"model[field]"
style=
"width: 45%"
/>
时
<Input
v-model:value=
"model['scheduleTime']"
style=
"width: 45%"
/>
分
</div>
</
template
>
<
template
#
eventTrigger=
"{ field, model }"
>
<div
style=
"display: flex;"
>
<a-button
@
click=
"handleSetConfig"
style=
"color: red;border-color: red;"
>
定义事件
</a-button>
<a-button
@
click=
"viewLogs"
style=
"margin-left: 20px"
>
查看日志
</a-button>
</div>
<a-button
type=
"link"
style=
"color: red;margin-left: -10px"
>
<Icon
icon=
"ant-design:exclamation-circle-outlined"
/>
请定义触发事件详情
</a-button>
</
template
>
<!-- <template #cron="{ field, model }">
<Input v-model:value="model[field]"/>
<a-button style="padding: 0" type="link">Cron表达式</a-button>
</template>-->
<
template
#
overTime=
"{ field, model }"
>
<CheckboxGroup
:options=
"overTimeOptions"
v-model:value=
"model[field]"
/>
<div
v-if=
"model[field]"
style=
"display: flex; width: 30%"
>
...
...
@@ -103,6 +87,7 @@ function viewLogs() {
const
[
registerModal
,
{
setModalProps
,
closeModal
}]
=
useModalInner
(
async
(
data
)
=>
{
setModalProps
({
confirmLoading
:
false
});
});
/**调度周期*/
const
cycleOptions
=
[
{
label
:
'每天一次'
,
...
...
src/views/taskScheduling/taskFlowDesign/taskModel.vue
View file @
4ba5d8ed
...
...
@@ -47,7 +47,9 @@
</div>
</
template
>
<
template
#
skip=
"{ field, model }"
>
<Checkbox
v-model:checked=
"model[field]"
@
click=
"handleSkip(model[field])"
>
开启
</Checkbox>
<Checkbox
v-model:checked=
"model[field]"
@
click=
"handleSkip(model[field])"
>
开启
</Checkbox
>
</
template
>
<
template
#
group=
"{ field, model }"
>
<Select
:options=
"groupOptions"
v-model:value=
"model[field]"
/>
...
...
@@ -186,16 +188,18 @@
<TabPane
v-if=
"type === '9'"
key=
"9"
tab=
"数据质量任务"
>
<BasicForm
@
register=
"dataQualityForm"
>
<
template
#
perc=
"{ field, model }"
>
<Switch
v-model:checked=
"model.percFlag"
/>
<InputNumber
style=
"width: 30%"
:disabled=
"!model.percFlag"
v-model:value=
"model[field]"
:min=
"0"
:max=
"100"
:step=
"1"
addon-after=
"%"
/>
<div
class=
"flex"
style=
"gap: 6px"
>
<Switch
v-model:checked=
"model.percFlag"
style=
"margin-top: 5px"
/>
<InputNumber
style=
"width: 30%"
:disabled=
"!model.percFlag"
v-model:value=
"model[field]"
:min=
"0"
:max=
"100"
:step=
"1"
/>
<div
style=
"font-size: 18px"
>
%
</div>
</div>
</
template
>
</BasicForm>
</TabPane>
...
...
@@ -221,6 +225,19 @@
</
template
>
</BasicForm>
</TabPane>
<TabPane
v-if=
"type === '13'"
key=
"13"
tab=
"落标检查任务"
>
<BasicForm
@
register=
"checkForm"
>
<
template
#
path=
"{ field, model }"
>
<div
style=
"display: flex"
>
<InputSearch
v-model:value=
"model[field]"
enter-button=
"选择"
@
search=
"onCheckSearch"
/>
</div>
</
template
>
</BasicForm>
</TabPane>
<TabPane
v-if=
"type !== '7' && type !== '8' && type !== '10'"
key=
"100"
tab=
"任务参数"
>
<!--嵌套任务流任务区别部分-->
<div
v-if=
"type === '11'"
>
...
...
@@ -259,7 +276,9 @@
<
template
#
toolbar
>
<div
style=
"flex: 1; display: flex; justify-content: space-between"
>
<a-button
type=
"link"
>
查看内置函数
</a-button>
<a-button
type=
"link"
><SyncOutlined
/>
刷新参数列表
</a-button>
<a-button
type=
"link"
@
click=
"handleFlushFieldList"
><SyncOutlined
/>
刷新参数列表
</a-button
>
</div>
</
template
>
</BasicTable>
...
...
@@ -282,6 +301,7 @@
Switch
,
InputNumber
,
CheckboxGroup
,
InputSearch
,
}
from
'ant-design-vue'
;
import
{
CheckOutlined
,
...
...
@@ -294,6 +314,7 @@
import
{
BasicModal
,
useModalInner
}
from
'@/components/Modal'
;
import
{
BasicForm
,
useForm
}
from
'@/components/Form'
;
import
{
checkFormSchema
,
dataIndexFormSchema
,
dataLoadConfigColumn
,
dataLoadFormSchema
,
...
...
@@ -582,7 +603,7 @@
value
:
'秒'
,
},
];
const
[
delayForm
,
{}
]
=
useForm
({
const
[
delayForm
]
=
useForm
({
labelWidth
:
120
,
baseColProps
:
{
lg
:
24
,
md
:
24
},
schemas
:
delayFormSchema
,
...
...
@@ -591,6 +612,16 @@
span
:
23
,
},
});
function
onCheckSearch
()
{}
const
[
checkForm
]
=
useForm
({
labelWidth
:
120
,
baseColProps
:
{
lg
:
24
,
md
:
24
},
schemas
:
checkFormSchema
,
showActionButtonGroup
:
false
,
actionColOptions
:
{
span
:
23
,
},
});
//初始化列表
const
typeOptions
=
[
...
...
@@ -662,7 +693,10 @@
striped
:
false
,
pagination
:
false
,
});
const
[
dataLoadConfigTable
,
{}]
=
useTable
({
function
handleFlushFieldList
()
{
createMessage
.
success
(
'刷新成功'
);
}
const
[
dataLoadConfigTable
]
=
useTable
({
title
:
''
,
api
:
async
(
params
)
=>
{
console
.
log
(
'params'
,
params
);
...
...
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