Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
ETL-admin
Overview
Overview
Details
Activity
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
莫晓莉
ETL-admin
Commits
b1cc08db
Commit
b1cc08db
authored
Jun 02, 2021
by
李耀琨
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新
parent
3302a397
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
913 additions
and
403 deletions
+913
-403
.env.development
+5
-5
src/main.js
+2
-2
src/views/dashboard-kettle/components/appBulletFrame/importXmlFile.vue
+4
-1
src/views/dashboard-kettle/components/appBulletFrame/mapping.vue
+418
-179
src/views/dashboard-kettle/components/appBulletFrame/xmlFileInput.vue
+423
-170
src/views/dashboard-kettle/components/designer/modules/node_menu.vue
+2
-2
src/views/dashboard-kettle/components/designer/mxgraphDesigner.vue
+59
-44
No files found.
.env.development
View file @
b1cc08db
...
...
@@ -2,16 +2,16 @@ ENV = 'development'
VUE_APP_BASE_API = 'http://147.1.3.180:9888/'
VUE_APP_WS_API = 'ws://147.1.3.180:9888/'
#
VUE_APP_BASE_API = 'http://147.1.3.180:9888/'
#
VUE_APP_WS_API = 'ws://147.1.3.180:9888/'
# 接口地址
#V1UE_APP_BASE_API = 'http://192.168.0.44
'
#VUE_APP_WS_API = 'ws://192.168.0.44
'
VUE_APP_FILE_API = ''
VUE_APP_BASE_API = 'http://192.168.0.44:9888
'
VUE_APP_WS_API = 'ws://192.168.0.44:9888
'
VUE_APP_FILE_API = '
http://192.168.0.44:9888
'
...
...
src/main.js
View file @
b1cc08db
...
...
@@ -78,8 +78,8 @@ Vue.prototype.R = R
Vue
.
config
.
productionTip
=
false
const
baseUrl
=
process
.
env
.
VUE_APP_BASE_API
===
'/'
?
''
:
process
.
env
.
VUE_APP_BASE_API
Vue
.
prototype
.
etlWeb
=
"http://147.1.3.180:9888/ETLWEB-SERVER/etlweb/"
//
Vue.prototype.etlWeb = "http://192.168.0.44:9888/ETLWEB-SERVER/etlweb/"
//
Vue.prototype.etlWeb = "http://147.1.3.180:9888/ETLWEB-SERVER/etlweb/"
Vue
.
prototype
.
etlWeb
=
"http://192.168.0.44:9888/ETLWEB-SERVER/etlweb/"
new
Vue
({
router
,
...
...
src/views/dashboard-kettle/components/appBulletFrame/importXmlFile.vue
View file @
b1cc08db
...
...
@@ -10,7 +10,7 @@
<el-form-item
label=
"步骤名称:"
>
<el-input
v-model=
"form.label"
></el-input>
</el-form-item>
{{
8
^
100
}}
</el-form>
<el-tabs
type=
"border-card"
>
...
...
@@ -273,6 +273,9 @@ export default {
},
methods
:
{
clickFun
(
graph
,
val
)
{
this
.
newGraph
=
graph
;
},
switchJournal
(
val
)
{
this
.
switchState
=
val
.
id
;
console
.
log
(
val
);
...
...
src/views/dashboard-kettle/components/appBulletFrame/mapping.vue
View file @
b1cc08db
...
...
@@ -29,11 +29,13 @@
<el-button
type=
"text"
@
click=
"selectModify(true)"
>
添加字段
</el-button
>
<!--
<el-button
type=
"text"
@
click=
"selectModifyGetTheField"
>
获取字段
</el-button>
-->
<el-button
type=
"text"
@
click=
"selectModifyGetTheField"
>
获取字段
</el-button
>
<el-table
:data=
"
field
s"
style=
"width: 100%"
>
<el-table-column
prop=
"
nam
e"
label=
"变量名"
>
</el-table-column>
<el-table-column
prop=
"
rename
"
label=
"字符串值(里面里可以使用变量)"
>
<el-table
:data=
"
parameter
s"
style=
"width: 100%"
>
<el-table-column
prop=
"
variabl
e"
label=
"变量名"
>
</el-table-column>
<el-table-column
prop=
"
input
"
label=
"字符串值(里面里可以使用变量)"
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"100px"
>
...
...
@@ -47,111 +49,143 @@
<el-button
type=
"text"
size=
"small"
@
click=
"deleteField(scope.$index,
field
s)"
@
click=
"deleteField(scope.$index,
parameter
s)"
>
删除
</el-button
>
</
template
>
</el-table-column>
</el-table>
<!--
<el-form :model="mappings">
<el-form-item > -->
<el-checkbox
v-model=
"inherit"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
从父转换继承所有变量
<!-- </el-form-item>
</el-form> -->
</el-tab-pane>
<el-tab-pane
label=
"输入"
>
<div>
<div
class=
"leftDiv"
>
<el-row
:gutter=
"10"
>
<el-col
:span=
"10"
>
<el-button
type=
"text"
@
click=
"metadata(true)"
>
添加
</el-button>
</el-col>
<el-row
:gutter=
"10"
>
<el-col
:span=
"10"
>
<el-button
type=
"text"
@
click=
"addInput(true)"
>
添加
</el-button
>
</el-col>
<el-col
class=
"line"
:span=
"10"
>
<el-button
type=
"text"
@
click=
"deleteInput(true)"
>
删除
</el-button
>
</el-col>
</el-row>
<el-col
class=
"line"
:span=
"10"
>
<el-button
type=
"text"
@
click=
"metadata(true)"
>
删除
</el-button>
</el-col>
</el-row>
<ul
class=
"ulHeight"
>
<li
class=
"list"
v-for=
"
item
in liList"
:key=
"i
tem.id
"
@
click=
"
switchJournal(item
)"
v-for=
"
(item, index)
in liList"
:key=
"i
ndex
"
@
click=
"
inputSelection(item, index
)"
style=
"cursor: pointer"
:class=
"{
hover:
switchState == item.id
,
checked:
switchState == item.id
,
hover:
inputIndex == index
,
checked:
inputIndex == index
,
}"
>
{{ item.
name
}}
{{ item.
input_step || `输入${index + 1}`
}}
</li>
</ul>
</div>
<div
class=
"rightDiv"
>
<div
class=
"topRight"
>
<el-form
:model=
"form
"
>
<el-
form-item
label=
"是否是主要数据路径?"
>
<el-checkbox
v-model=
"form.feedback_shown
"
true-label=
"Y
"
false-label=
"N
"
></el-checkbox>
</el-form-item>
<el-form
size=
"mini
"
>
<el-form-item
label=
"是否是主要数据路径?"
>
<el-
checkbox
v-model=
"inputLies.main_path"
true-label=
"Y
"
false-label=
"N
"
@
change=
"mainPathChange
"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"输入原步骤名(如果只有一个步骤该项可以为空)"
>
<el-form-item
label=
"输入原步骤名(如果只有一个步骤该项可以为空)"
>
<el-row
:gutter=
"10"
>
<el-col
:span=
"20"
>
<el-input
v-model=
"form.directory"
></el-input>
<el-input
v-model=
"inputLies.input_step"
:disabled=
"inputLies.main_path == 'Y'"
></el-input>
</el-col>
<el-col
class=
"line"
:span=
"2"
>
<el-button
size=
"mini"
>
选择
</el-button>
<el-button
size=
"mini"
:disabled=
"inputLies.main_path == 'Y'"
>
选择
</el-button
>
</el-col>
</el-row>
</el-form-item>
<el-form-item
label=
"子转换里的“映射输入接口”步骤名"
>
<el-form-item
label=
"子转换里的“映射输入接口”步骤名"
>
<el-row
:gutter=
"10"
>
<el-col
:span=
"20"
>
<el-input
v-model=
"form.directory"
></el-input>
<el-input
v-model=
"inputLies.output_step"
:disabled=
"inputLies.main_path == 'Y'"
></el-input>
</el-col>
<el-col
class=
"line"
:span=
"2"
>
<el-button
size=
"mini"
>
选择
</el-button>
<el-button
size=
"mini"
:disabled=
"inputLies.main_path == 'Y'"
>
选择
</el-button
>
</el-col>
</el-row>
</el-form-item>
<el-form-item
label=
"步骤映射描述:"
>
<el-input
v-model=
"form.timeout_days"
></el-input>
<el-form-item
label=
"步骤映射描述:"
>
<el-input
v-model=
"inputLies.description"
:disabled=
"inputLies.main_path == 'Y'"
></el-input>
</el-form-item>
</el-form>
</div>
<div
class=
"lowerRight"
>
<el-button
type=
"text"
@
click=
"
metadata
(true)"
<el-button
type=
"text"
@
click=
"
addInputField
(true)"
>
添加字段
</el-button
>
<el-table
:data=
"
tableData
"
:data=
"
inputLies.connector
"
height=
" 250 "
border
style=
"width: 100%"
:row-style=
"{ height: '10px' }"
:cell-style=
"{ height: '10px' }"
>
<el-table-column
prop=
"
enabled
"
label=
"原字段名"
>
<el-table-column
prop=
"
parent
"
label=
"原字段名"
>
</el-table-column>
<el-table-column
prop=
"
name
"
label=
"要映射成的字段名"
>
<el-table-column
prop=
"
child
"
label=
"要映射成的字段名"
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"
6
0"
>
<el-table-column
label=
"操作"
width=
"
12
0"
>
<
template
slot-scope=
"scope"
>
<el-button
@
click=
"
liListClick
(false, scope.row)"
@
click=
"
addInputField
(false, scope.row)"
type=
"text"
size=
"small"
>
编辑
</el-button
>
<el-button
@
click=
"
liListClick(false, scope.row
)"
@
click=
"
deleteField(scope.$index, inputLies.connector
)"
type=
"text"
size=
"small"
>
删除
</el-button
...
...
@@ -159,6 +193,16 @@
</
template
>
</el-table-column>
</el-table>
<el-form
:model=
"form"
>
<el-form-item>
<el-checkbox
v-model=
"form.rename_on_output"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
输出时字段名再重新映射回原来输入时的名字?
</el-form-item>
</el-form>
</div>
</div>
</div>
...
...
@@ -167,103 +211,122 @@
<el-tab-pane
label=
"输出"
>
<div>
<div
class=
"leftDiv"
>
<el-row
:gutter=
"10"
>
<el-col
:span=
"10"
>
<el-button
type=
"text"
@
click=
"metadata(true)"
>
添加
</el-button>
</el-col>
<el-row
:gutter=
"10"
>
<el-col
:span=
"10"
>
<el-button
type=
"text"
@
click=
"addInput(false)"
>
添加
</el-button
>
</el-col>
<el-col
class=
"line"
:span=
"10"
>
<el-button
type=
"text"
@
click=
"deleteInput(false)"
>
删除
</el-button
>
</el-col>
</el-row>
<el-col
class=
"line"
:span=
"10"
>
<el-button
type=
"text"
@
click=
"metadata(true)"
>
删除
</el-button>
</el-col>
</el-row>
<ul
class=
"ulHeight"
>
<li
class=
"list"
v-for=
"
item
in liListru"
v-for=
"
(item, index)
in liListru"
:key=
"item.id"
@
click=
"switchJournal(item)"
@
click=
"switchJournal(item
, index
)"
style=
"cursor: pointer"
:class=
"{
hover:
switchState == item.id
,
checked:
switchState == item.id
,
hover:
outputIndex == index
,
checked:
outputIndex == index
,
}"
>
{{ item.
name
}}
{{ item.
input_step || `输入${index + 1}`
}}
</li>
</ul>
</div>
<div
class=
"rightDiv"
>
<div
class=
"topRight"
>
<el-form
:model=
"form"
>
<el-form-item
label=
"是否是主要数据路径?"
>
<el-checkbox
v-model=
"form.feedback_shown"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
</el-form-item>
<el-form
size=
"mini"
>
<el-form-item
label=
"是否是主要数据路径?"
>
<el-checkbox
v-model=
"outputLies.main_path"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"子转换里的“映射输入接口”步骤名"
>
<el-form-item
label=
"子转换里的“映射输入接口”步骤名"
>
<el-row
:gutter=
"10"
>
<el-col
:span=
"20"
>
<el-input
v-model=
"form.directory"
></el-input>
<el-input
v-model=
"outputLies.input_step"
:disabled=
"outputLies.main_path == 'Y'"
></el-input>
</el-col>
<el-col
class=
"line"
:span=
"2"
>
<el-button
size=
"mini"
>
选择
</el-button>
<el-button
size=
"mini"
:disabled=
"outputLies.main_path == 'Y'"
>
选择
</el-button
>
</el-col>
</el-row>
</el-form-item>
<el-form-item
label=
"输入原步骤名(如果只有一个步骤该项可以为空)"
>
<el-form-item
label=
"输入原步骤名(如果只有一个步骤该项可以为空)"
>
<el-row
:gutter=
"10"
>
<el-col
:span=
"20"
>
<el-input
v-model=
"form.directory"
></el-input>
<el-input
v-model=
"outputLies.output_step"
:disabled=
"outputLies.main_path == 'Y'"
></el-input>
</el-col>
<el-col
class=
"line"
:span=
"2"
>
<el-button
size=
"mini"
>
选择
</el-button>
<el-button
size=
"mini"
:disabled=
"outputLies.main_path == 'Y'"
>
选择
</el-button
>
</el-col>
</el-row>
</el-form-item>
<el-form-item
label=
"步骤映射描述:"
>
<el-input
v-model=
"form.timeout_days"
></el-input>
<el-form-item
label=
"步骤映射描述:"
>
<el-input
v-model=
"outputLies.description"
:disabled=
"outputLies.main_path == 'Y'"
></el-input>
</el-form-item>
</el-form>
</div>
<div
class=
"lowerRight"
>
<el-button
type=
"text"
@
click=
"
metadata
(true)"
<div
class=
"lowerRight"
>
<el-button
type=
"text"
@
click=
"
addOutputField
(true)"
>
添加字段
</el-button
>
<el-table
:data=
"
tableData
"
:data=
"
outputLies.connector
"
height=
" 250 "
border
style=
"width: 100%"
:row-style=
"{ height: '10px' }"
:cell-style=
"{ height: '10px' }"
>
<el-table-column
prop=
"
enabled
"
label=
"原字段名"
>
<el-table-column
prop=
"
parent
"
label=
"原字段名"
>
</el-table-column>
<el-table-column
prop=
"
name
"
label=
"要映射成的字段名"
>
<el-table-column
prop=
"
child
"
label=
"要映射成的字段名"
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
>
<
template
slot-scope=
"scope"
>
<el-button
@
click=
"
liListClick
(false, scope.row)"
@
click=
"
addOutputField
(false, scope.row)"
type=
"text"
size=
"small"
>
编辑
</el-button
>
<el-button
@
click=
"
liListClick(false, scope.row
)"
@
click=
"
deleteField(scope.$index, outputLies.connector
)"
type=
"text"
size=
"small"
>
删除
</el-button
...
...
@@ -284,7 +347,67 @@
</span>
</el-dialog>
<el-dialog
:title=
"this.dataState ? '添加字段' : '修改'"
:visible
.
sync=
"selectModifyBox"
width=
"500px"
:before-close=
"selectModifyBoxFun"
>
<el-form
:model=
"selectModifyForm"
>
<el-form-item
label=
"变量名"
>
<el-input
v-model=
"selectModifyForm.variable"
></el-input>
</el-form-item>
<el-form-item
label=
"字符串值(里面里可以使用变量)"
>
<el-input
v-model=
"selectModifyForm.input"
></el-input>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"selectModifyBox = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"addSelectModifyBoxFun"
>
确 定
</el-button
>
</span>
</el-dialog>
<el-dialog
:title=
"this.dataState ? '添加字段' : '修改'"
:visible
.
sync=
"inputBox"
width=
"500px"
:before-close=
"inputBoxFun"
>
<el-form
:model=
"inputField"
>
<el-form-item
label=
"原字段名"
>
<el-input
v-model=
"inputField.parent"
></el-input>
</el-form-item>
<el-form-item
label=
"要映射成的字段名"
>
<el-input
v-model=
"inputField.child"
></el-input>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"inputBox = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"addinputBoxFun"
>
确 定
</el-button>
</span>
</el-dialog>
<el-dialog
:title=
"this.dataState ? '添加字段' : '修改'"
:visible
.
sync=
"outputBox"
width=
"500px"
:before-close=
"outputBoxFun"
>
<el-form
:model=
"outputField"
>
<el-form-item
label=
"原字段名"
>
<el-input
v-model=
"outputField.parent"
></el-input>
</el-form-item>
<el-form-item
label=
"要映射成的字段名"
>
<el-input
v-model=
"outputField.child"
></el-input>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"inputBox = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"addoutputBoxFun"
>
确 定
</el-button>
</span>
</el-dialog>
</div>
</template>
...
...
@@ -315,46 +438,42 @@ import {
inputOutputFields
,
}
from
"@/api/kettle/link"
;
export
default
{
props
:
[
"form"
,
"nodeData"
,
"saveOutputDialog"
,
"mappingDialog"
,
],
//从父组件传过来的值
props
:
[
"form"
,
"nodeData"
,
"saveOutputDialog"
,
"mappingDialog"
],
//从父组件传过来的值
components
:
{
browseFiles
,
},
data
()
{
return
{
tableData
:
[],
tableData
:
[],
newGraph
:
[],
fileBox
:
false
,
filterBox
:
false
,
metadataBox
:
false
,
selectModifyBox
:
false
,
removeField
Box
:
false
,
fields
:
[]
,
remove
:
[],
input
Box
:
false
,
outputBox
:
false
,
parameters
:
[],
meta
:
[],
metadataForm
:
{},
selectModifyForm
:
{},
removeFieldForm
:
{},
filterForm
:
{},
fieldFormat
:
{},
fieldCompress
:
{},
fieldType
:
{},
dataState
:
false
,
fileType
:
[],
codingType
:
[],
routeState
:
0
,
filePathSelection
:
false
,
localPath
:
{},
fileSelection
:
{},
fielForm
:
{},
liList
:[{
id
:
1
,
name
:
"输入"
}],
liListru
:[{
id
:
1
,
name
:
"输出"
}],
switchState
:
1
,
liList
:
[],
inputIndex
:
0
,
inputLies
:
{
connector
:
[]
},
inputField
:
{},
liListru
:
[],
outputIndex
:
0
,
outputLies
:
{
connector
:
[]
},
outputField
:
{},
switchState
:
1
,
inputState
:
1
,
mappings
:
{},
inherit
:
"Y"
,
};
},
...
...
@@ -368,17 +487,94 @@ export default {
methods
:
{
clickFun
(
graph
,
val
)
{
console
.
log
(
graph
);
this
.
mappings
=
[];
this
.
liList
=
[];
this
.
liListru
=
[];
this
.
parameters
=
[];
this
.
newGraph
=
graph
;
this
.
fields
=
JSON
.
parse
(
val
.
fields
);
this
.
remove
=
JSON
.
parse
(
val
.
remove
);
this
.
meta
=
JSON
.
parse
(
val
.
meta
);
this
.
mappings
=
JSON
.
parse
(
val
.
mappings
);
// console.log(val.mappings);
// console.log(this.mappings);
this
.
inherit
=
this
.
mappings
.
parameters
.
inherit_all_vars
;
// console.log(this.mappings);
console
.
log
(
this
.
mappings
.
input
);
// this.liList = this.mappings.input
this
.
mappings
.
input
.
forEach
((
item
,
index
)
=>
{
console
.
log
(
item
,
index
);
console
.
log
(
typeof
item
.
connector
==
"string"
);
if
(
typeof
item
.
connector
===
"string"
)
{
item
.
connector
=
JSON
.
parse
(
item
.
connector
);
this
.
liList
.
push
(
item
);
}
else
{
this
.
liList
.
push
(
item
);
}
});
this
.
mappings
.
output
.
forEach
((
item
,
index
)
=>
{
console
.
log
(
item
,
index
);
console
.
log
(
typeof
item
.
connector
==
"string"
);
if
(
typeof
item
.
connector
===
"string"
)
{
item
.
connector
=
JSON
.
parse
(
item
.
connector
);
this
.
liListru
.
push
(
item
);
}
else
{
this
.
liListru
.
push
(
item
);
}
});
// for (let i = 0; i
<
this
.
mappings
.
input
.
length
;
i
++
)
{
// this.liList[i].connector = JSON.parse(this.mappings.input[i].connector)
// }
if
(
this
.
mappings
.
parameters
.
input
.
length
==
0
||
this
.
mappings
.
parameters
.
variable
.
length
==
0
)
{
this
.
parameters
=
[];
console
.
log
(
this
.
parameters
);
return
;
}
else
{
this
.
mappings
.
parameters
.
input
.
forEach
((
item
,
index
)
=>
{
console
.
log
(
item
,
index
);
this
.
parameters
.
push
({
variable
:
this
.
mappings
.
parameters
.
variable
[
index
],
input
:
item
,
});
});
console
.
log
(
this
.
parameters
);
}
},
switchJournal
(
val
)
{
this
.
switchState
=
val
.
id
inputSelection
(
val
,
index
)
{
this
.
inputIndex
=
index
;
console
.
log
(
val
);
this
.
inputLies
=
val
;
// console.log(this.mappings);
// this.inputState = val.input_step;
// // console.log(this.inputState);
// var index = this.liList.find(e =>{
// return e.index == val.index
// })
// console.log(index);
// // this.liList.splice(index, 1);
// // this.inputIndex = index
// // console.log(this.inputIndex.input_step);
// // this.inputIndex =
},
//修改数据
mainPathChange
(
e
)
{
if
(
e
==
"Y"
)
{
delete
this
.
inputLies
.
input_step
;
delete
this
.
inputLies
.
output_step
;
delete
this
.
inputLies
.
description
;
}
},
switchJournal
(
val
,
index
)
{
this
.
outputIndex
=
index
;
console
.
log
(
val
);
this
.
outputLies
=
val
;
},
handleCloseFun
()
{
...
...
@@ -386,9 +582,35 @@ export default {
},
mappingDialogFun
()
{
this
.
form
.
fields
=
JSON
.
stringify
(
this
.
fields
);
this
.
form
.
remove
=
JSON
.
stringify
(
this
.
remove
);
this
.
form
.
meta
=
JSON
.
stringify
(
this
.
meta
);
this
.
form
.
mappings
=
JSON
.
parse
(
this
.
form
.
mappings
);
// this.form.meta = JSON.stringify(this.meta);
// this.form.mappings.input = this.inputIndex
// this.form.mappings.parameters.inherit_all_vars = this.inherit
// this.form.mappings = JSON.parse(this.form.mappings)
console
.
log
(
this
.
form
.
mappings
,
"form.mappings"
);
console
.
log
(
this
.
parameters
,
"parameters"
);
var
w
=
[];
var
q
=
[];
this
.
parameters
.
forEach
((
item
,
index
)
=>
{
console
.
log
(
item
,
index
);
w
.
push
(
item
.
input
);
q
.
push
(
item
.
variable
);
});
this
.
form
.
mappings
.
parameters
.
input
=
w
;
this
.
form
.
mappings
.
parameters
.
variable
=
q
;
console
.
log
(
this
.
form
.
mappings
.
parameters
);
// console.log(this.form.mappings.parameters);
this
.
form
.
mappings
.
parameters
.
inherit_all_vars
=
this
.
inherit
;
// var qinput = []
// this.liList.forEach(item => {
// // item.connector = JSON.stringify(item.connector)
// qinput.push(item)
// })
this
.
form
.
mappings
.
input
=
this
.
liList
;
this
.
form
.
mappings
.
output
=
this
.
liListru
;
this
.
form
.
mappings
=
JSON
.
stringify
(
this
.
form
.
mappings
);
console
.
log
(
this
.
form
.
mappings
);
this
.
saveOutputDialog
(
this
.
form
);
this
.
handleCloseFun
();
},
...
...
@@ -405,39 +627,7 @@ export default {
pamerFields
.
append
(
"graphXml"
,
this
.
graphXml
);
pamerFields
.
append
(
"before"
,
true
);
inputOutputFields
(
pamerFields
).
then
((
res
)
=>
{
this
.
fields
=
res
;
});
},
getTheField
()
{
var
enc
=
new
mxCodec
(
mxUtils
.
createXmlDocument
());
var
node
=
enc
.
encode
(
this
.
newGraph
.
getModel
());
this
.
graphXml
=
mxUtils
.
getPrettyXml
(
node
);
let
pamerFields
=
new
FormData
();
// 创建form对象
pamerFields
.
append
(
"stepName"
,
this
.
nodeData
.
value
.
attributes
.
label
.
value
);
pamerFields
.
append
(
"graphXml"
,
this
.
graphXml
);
pamerFields
.
append
(
"before"
,
true
);
inputOutputFields
(
pamerFields
).
then
((
res
)
=>
{
this
.
remove
=
res
;
});
},
metadataGetTheField
()
{
var
enc
=
new
mxCodec
(
mxUtils
.
createXmlDocument
());
var
node
=
enc
.
encode
(
this
.
newGraph
.
getModel
());
this
.
graphXml
=
mxUtils
.
getPrettyXml
(
node
);
let
pamerFields
=
new
FormData
();
// 创建form对象
pamerFields
.
append
(
"stepName"
,
this
.
nodeData
.
value
.
attributes
.
label
.
value
);
pamerFields
.
append
(
"graphXml"
,
this
.
graphXml
);
pamerFields
.
append
(
"before"
,
true
);
inputOutputFields
(
pamerFields
).
then
((
res
)
=>
{
this
.
meta
=
res
;
this
.
parameters
=
res
;
});
},
...
...
@@ -471,17 +661,32 @@ export default {
});
},
//添加
addInput
(
state
)
{
let
obj
=
{
main_path
:
"Y"
,
//默认是Y
rename_on_output
:
"N"
,
connector
:
[],
};
if
(
state
)
{
this
.
liList
.
push
(
obj
);
}
else
{
this
.
liListru
.
push
(
obj
);
}
//添加时 需要push的数据为input_step output_step main_path rename_on_output description connector:[parent:"",child:""]
},
//删除
deleteField
(
index
,
rows
)
{
rows
.
splice
(
index
,
1
);
},
fieldClick
(
state
,
val
)
{
this
.
removeFieldBox
=
!
this
.
removeFieldBox
;
this
.
dataState
=
state
;
deleteInput
(
state
)
{
if
(
state
)
{
this
.
removeFieldForm
=
{}
;
this
.
liList
.
splice
(
this
.
inputIndex
,
1
)
;
}
else
{
this
.
removeFieldForm
=
val
;
this
.
liListru
.
splice
(
this
.
outputIndex
,
1
)
;
}
},
...
...
@@ -495,40 +700,74 @@ export default {
}
},
metadata
(
state
,
val
)
{
this
.
metadataBox
=
!
this
.
metadataBox
;
selectModifyBoxFun
()
{
this
.
selectModifyBox
=
!
this
.
selectModifyBox
;
if
(
this
.
selectModifyBox
)
{
}
},
// input添加字段
addInputField
(
state
,
val
)
{
this
.
dataState
=
state
;
this
.
inputBox
=
!
this
.
inputBox
;
if
(
state
)
{
this
.
metadataForm
=
{};
this
.
inputField
=
{};
}
else
{
this
.
metadataForm
=
val
;
this
.
inputField
=
val
;
}
},
selectModifyBoxFun
()
{
addOutputField
(
state
,
val
)
{
this
.
dataState
=
state
;
this
.
outputBox
=
!
this
.
outputBox
;
if
(
state
)
{
this
.
outputField
=
{};
}
else
{
this
.
outputField
=
val
;
}
},
inputBoxFun
()
{
this
.
inputBox
=
!
this
.
inputBox
;
if
(
this
.
inputBox
)
{
}
},
outputBoxFun
()
{
this
.
outputBox
=
!
this
.
outputBox
;
if
(
this
.
outputBox
)
{
}
},
addSelectModifyBoxFun
()
{
this
.
selectModifyBox
=
!
this
.
selectModifyBox
;
if
(
this
.
dataState
)
{
this
.
fields
.
push
(
this
.
selectModifyForm
);
this
.
$emit
(
"fields"
,
this
.
fields
);
this
.
parameters
.
push
(
this
.
selectModifyForm
);
}
else
{
}
},
removeFieldBoxFun
()
{
this
.
removeFieldBox
=
!
this
.
removeFieldBox
;
addinputBoxFun
()
{
this
.
inputBox
=
!
this
.
inputBox
;
console
.
log
(
this
.
dataState
);
if
(
this
.
dataState
)
{
this
.
remove
.
push
(
this
.
removeFieldForm
);
this
.
$emit
(
"fields"
,
this
.
remove
);
}
else
{
console
.
log
(
this
.
inputField
);
this
.
inputLies
.
connector
.
push
(
this
.
inputField
);
}
},
metadata
BoxFun
()
{
this
.
metadataBox
=
!
this
.
metadata
Box
;
addoutput
BoxFun
()
{
this
.
outputBox
=
!
this
.
output
Box
;
if
(
this
.
dataState
)
{
this
.
meta
.
push
(
this
.
metadataForm
);
this
.
$emit
(
"meta"
,
this
.
meta
);
this
.
outputLies
.
connector
.
push
(
this
.
outputField
);
}
},
metadata
(
state
,
val
)
{
this
.
metadataBox
=
!
this
.
metadataBox
;
this
.
dataState
=
state
;
if
(
state
)
{
this
.
metadataForm
=
{};
}
else
{
this
.
metadataForm
=
val
;
}
},
...
...
@@ -558,14 +797,14 @@ export default {
width
:
150px
;
height
:
500px
;
/* background-color: antiquewhite; */
//
border
:
1px
solid
#d2e0f1
;
//
border
:
1px
solid
#d2e0f1
;
float
:
left
;
padding
:
10px
;
}
.ulHeight
{
border
:
1px
solid
#d2e0f1
;
width
:
120px
;
.ulHeight
{
border
:
1px
solid
#d2e0f1
;
width
:
120px
;
height
:
400px
;
}
...
...
@@ -586,14 +825,14 @@ export default {
.topRight
{
width
:
550px
;
height
:
270px
;
//
border
:
1px
solid
#d2e0f1
;
//
border
:
1px
solid
#d2e0f1
;
padding
:
10px
;
/* background-color: aqua; */
}
.lowerRight
{
width
:
550px
;
height
:
230px
;
//
border
:
1px
solid
#d2e0f1
;
//
border
:
1px
solid
#d2e0f1
;
padding
:
10px
;
overflow
:
hidden
;
/* background-color: aqua; */
...
...
src/views/dashboard-kettle/components/appBulletFrame/xmlFileInput.vue
View file @
b1cc08db
...
...
@@ -32,7 +32,7 @@
<el-form-item
label=
"XML源定义在第一个字段里?"
>
<el-checkbox
v-model=
"form.
feedback_shown
"
v-model=
"form.
IsInFields
"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
...
...
@@ -40,22 +40,24 @@
<el-form-item
label=
"XML源是文件名?"
>
<el-checkbox
v-model=
"form.
feedback_shown
"
v-model=
"form.
IsAFile
"
true-label=
"Y"
false-label=
"N"
false-label=
"N"
:disabled=
"form.IsInFields == 'N'"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"以URL的方式读取XML源?"
>
<el-checkbox
v-model=
"form.
feedback_shown
"
v-model=
"form.
readurl
"
true-label=
"Y"
false-label=
"N"
:disabled=
"form.IsInFields == 'N'"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"XML 源字段名:"
>
<el-input
v-model=
"form.
label
"
></el-input>
<el-input
v-model=
"form.
XmlField"
:disabled=
"form.IsInFields == 'N'
"
></el-input>
</el-form-item>
</el-form>
</el-card>
...
...
@@ -65,15 +67,15 @@
<el-row
:gutter=
"10"
>
<el-col
:span=
"17"
>
<el-input
v-model=
"fileSelection.
fileN
ame"
:disabled=
"form.
acceptingFilename
s == 'Y'"
v-model=
"fileSelection.
n
ame"
:disabled=
"form.
IsInField
s == 'Y'"
></el-input>
</el-col>
<el-col
class=
"line"
:span=
"3"
>
<el-button
size=
"mini"
@
click=
"addFile"
:disabled=
"form.
acceptingFilename
s == 'Y'"
:disabled=
"form.
IsInField
s == 'Y'"
>
增加
</el-button
></el-col
>
...
...
@@ -81,7 +83,7 @@
<el-button
size=
"mini"
@
click=
"selectFilePath(1)"
:disabled=
"form.
acceptingFilename
s == 'Y'"
:disabled=
"form.
IsInField
s == 'Y'"
>
浏览
</el-button
></el-col
>
...
...
@@ -90,23 +92,23 @@
<el-form-item
label=
"规则表达式:"
>
<el-input
v-model=
"fileSelection.file
M
ask"
:disabled=
"form.
acceptingFilename
s == 'Y'"
v-model=
"fileSelection.file
m
ask"
:disabled=
"form.
IsInField
s == 'Y'"
></el-input>
</el-form-item>
<el-form-item
label=
"正则表达式(排除):"
>
<el-input
v-model=
"fileSelection.exclude
FileM
ask"
:disabled=
"form.
acceptingFilename
s == 'Y'"
v-model=
"fileSelection.exclude
_filem
ask"
:disabled=
"form.
IsInField
s == 'Y'"
></el-input>
</el-form-item>
<el-form-item
label=
"选中的文件:"
>
<el-card
class=
"box-card"
>
<el-table
:data=
"file
NameStore
"
style=
"width: 100%"
>
<el-table
:data=
"file"
style=
"width: 100%"
>
<el-table-column
prop=
"
fileN
ame"
prop=
"
n
ame"
label=
"文件/目录"
width=
"120"
>
...
...
@@ -114,13 +116,13 @@
<el-table-column
prop=
"filemask"
label=
"通配符"
>
</el-table-column>
<el-table-column
prop=
"exclude
FileM
ask"
prop=
"exclude
_filem
ask"
label=
"通配符号(排除)"
>
</el-table-column>
<el-table-column
prop=
"file
R
equired"
label=
"要求"
>
<el-table-column
prop=
"file
_r
equired"
label=
"要求"
>
</el-table-column>
<el-table-column
prop=
"include
SubF
olders"
label=
"包含子目录"
>
<el-table-column
prop=
"include
_subf
olders"
label=
"包含子目录"
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"120px"
>
<template
slot-scope=
"scope"
>
...
...
@@ -128,14 +130,14 @@
@
click=
"handleClick(scope.row)"
type=
"text"
size=
"small"
:disabled=
"form.
acceptingFilename
s == 'Y'"
:disabled=
"form.
IsInField
s == 'Y'"
>
编辑
</el-button
>
<el-button
type=
"text"
size=
"small"
@
click=
"deleteRow(scope.$index, file
NameStore
)"
:disabled=
"form.
acceptingFilename
s == 'Y'"
@
click=
"deleteRow(scope.$index, file)"
:disabled=
"form.
IsInField
s == 'Y'"
>
删除
</el-button
>
</
template
>
...
...
@@ -146,255 +148,373 @@
</el-form>
</el-tab-pane>
<el-tab-pane
label=
"内容"
>
<el-card
class=
"box-card"
>
设置
<el-form
ref=
"from"
:model=
"form"
label-width=
"240px"
>
<el-form-item
label=
"循环读取路径:"
>
<el-row
:gutter=
"10"
>
<el-col
:span=
"15"
>
<el-input
v-model=
"form.loopxpath"
></el-input>
</el-col>
<el-col
class=
"line"
:span=
"8"
>
<el-button
size=
"mini"
@
click=
"selectFilePath(0)"
>
获取XML文档的所有路径
</el-button>
</el-col>
</el-row>
</el-form-item>
<el-card
class=
"box-card"
>
设置
<el-form
ref=
"from"
:model=
"form"
label-width=
"240px"
>
<el-form-item
label=
"转换:"
>
<el-row
:gutter=
"10"
>
<el-col
:span=
"15"
>
<el-input
v-model=
"form.directory"
></el-input>
</el-col>
<el-col
class=
"line"
:span=
"8"
>
<el-button
size=
"mini"
>
获取XML文档的所有路径
</el-button>
</el-col>
</el-row>
</el-form-item>
<el-form-item
label=
"编码"
>
<el-select
v-model=
"form.region"
placeholder=
"请选择活动区域"
>
<el-option
label=
"区域一"
value=
"shanghai"
></el-option>
<el-option
label=
"区域二"
value=
"beijing"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"编码:"
>
<el-select
v-model=
"form.encoding"
filterable
style=
"width: 100%"
clearable
>
<el-option
v-for=
"item in codingType"
:key=
"item.index"
:label=
"item.name"
:value=
"item.name"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"考虑命名空间"
>
<el-checkbox
v-model=
"form.
feedback_shown
"
v-model=
"form.
namespaceaware
"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"忽略注释?"
>
<el-checkbox
v-model=
"form.
feedback_shown
"
v-model=
"form.
ignorecomments
"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"验证XML?"
>
<el-checkbox
v-model=
"form.
feedback_shown
"
v-model=
"form.
validating
"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"使用标记"
>
<el-checkbox
v-model=
"form.
feedback_show
n"
v-model=
"form.
usetoke
n"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"忽略空文件"
>
<el-checkbox
v-model=
"form.
feedback_shown
"
v-model=
"form.
IsIgnoreEmptyFile
"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"如果没有文件不要报告错误"
>
<el-checkbox
v-model=
"form.
feedback_shown
"
v-model=
"form.
doNotFailIfNoFile
"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"限制"
>
<el-input
v-model=
"fileSelection.fileMask"
></el-input>
</el-form-item>
<el-form-item
label=
"用于截取数据的XML路径(大文件)"
>
<el-input
v-model=
"fileSelection.fileMask"
></el-input>
</el-form-item>
<el-input
v-model=
"fileSelection.limit"
:disabled=
"form.IsInFields == 'Y'"
></el-input>
</el-form-item>
</el-form>
</el-card>
<br>
<el-card
class=
"box-card"
>
附件字段
<el-form
ref=
"from"
:model=
"form"
label-width=
"140px"
>
<el-form-item
label=
"输出中包括文件名?"
>
<el-form-item
label=
"用于截取数据的XML路径(大文件)"
>
<el-input
v-model=
"fileSelection.prunePath"
:disabled=
"form.IsInFields == 'Y'"
></el-input>
</el-form-item>
</el-form>
</el-card>
<br
/>
<el-card
class=
"box-card"
>
附件字段
<el-form
ref=
"from"
:model=
"form"
label-width=
"140px"
>
<el-form-item
label=
"输出中包括文件名?"
>
<el-checkbox
v-model=
"form.
feedback_shown
"
v-model=
"form.
include
"
true-label=
"Y"
false-label=
"N"
:disabled=
"form.IsInFields == 'Y'"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"文件名字段"
>
<el-input
v-model=
"fileSelection.fileMask"
></el-input>
</el-form-item>
<el-input
v-model=
"fileSelection.include_field"
:disabled=
"form.IsInFields == 'Y' || form.include == 'N' "
></el-input>
</el-form-item>
<el-form-item
label=
"输出包括行号?"
>
<el-form-item
label=
"输出包括行号?"
>
<el-checkbox
v-model=
"form.
feedback_shown
"
v-model=
"form.
rownum
"
true-label=
"Y"
false-label=
"N"
></el-checkbox>
</el-form-item>
<el-form-item
label=
"行数组段"
>
<el-input
v-model=
"fileSelection.fileMask"
></el-input>
</el-form-item>
</el-form>
</el-card>
<br>
<el-card
class=
"box-card"
>
添加到结果文件中
<el-form
ref=
"from"
:model=
"form"
label-width=
"180px"
>
<el-form-item
label=
"将文件增加到结果文件中"
>
<el-input
v-model=
"fileSelection.rownum_field"
:disabled=
"form.rownum == 'N'"
></el-input>
</el-form-item>
</el-form>
</el-card>
<br
/>
<el-card
class=
"box-card"
>
添加到结果文件中
<el-form
ref=
"from"
:model=
"form"
label-width=
"180px"
>
<el-form-item
label=
"将文件增加到结果文件中"
>
<el-checkbox
v-model=
"form.
feedback_shown
"
v-model=
"form.
addresultfile
"
true-label=
"Y"
false-label=
"N"
:disabled=
"form.IsInFields == 'Y'"
></el-checkbox>
</el-form-item>
</el-form>
</el-card>
</el-tab-pane>
</el-form>
</el-card>
<el-tab-pane
label=
"字段"
>
<el-button
type=
"text"
@
click=
"fieldClick(true)"
>
添加字段
</el-button>
<el-button
type=
"text"
@
click=
"getTheField"
>
获取字段
</el-button>
</el-tab-pane>
<el-table
:data=
"fields"
style=
"width: 100%"
>
<el-table-column
prop=
"name"
label=
"名称"
>
</el-table-column>
g
<el-table-column
prop=
"xpath"
label=
"xml路径"
>
</el-table-column>
<el-table-column
prop=
"element_type"
label=
"节点"
>
</el-table-column>
<el-table-column
prop=
"result_type"
label=
"结果类型"
>
</el-table-column>
<el-table-column
prop=
"type"
label=
"类型"
>
</el-table-column>
<el-table-column
prop=
"format"
label=
"格式"
>
</el-table-column>
<el-tab-pane
label=
"字段"
>
<el-button
type=
"text"
@
click=
"fieldClick(true)"
>
添加字段
</el-button>
<el-button
type=
"text"
@
click=
"getTheField"
>
获取字段
</el-button>
<el-table-column
prop=
"length"
label=
"长度"
>
</el-table-column>
<el-table
:data=
"inputFields"
style=
"width: 100%"
>
<el-table-column
prop=
"name"
label=
"名称"
>
</el-table-column>
g
<el-table-column
prop=
"precision"
label=
"精度"
>
</el-table-column>
<el-table-column
prop=
"type"
label=
"类型
"
>
</el-table-column>
<el-table-column
prop=
"currency"
label=
"货币符号
"
>
</el-table-column>
<el-table-column
prop=
"format"
label=
"格式
"
>
</el-table-column>
<el-table-column
prop=
"decimal"
label=
"小数点符号
"
>
</el-table-column>
<el-table-column
prop=
"position"
label=
"位置
"
>
</el-table-column>
<el-table-column
prop=
"group"
label=
"组
"
>
</el-table-column>
<el-table-column
prop=
"length"
label=
"长度"
>
</el-table-column>
<el-table-column
prop=
"trim_type"
label=
"去除空格类型"
>
</el-table-column>
<el-table-column
prop=
"precision"
label=
"精度
"
>
</el-table-column>
<el-table-column
prop=
"repeat"
label=
"重复
"
>
</el-table-column>
<el-table-column
prop=
"currency"
label=
"货币"
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"100px"
>
<
template
slot-scope=
"scope"
>
<el-button
@
click=
"fieldClick(false, scope.row)"
type=
"text"
size=
"small"
>
编辑
</el-button
>
<el-button
type=
"text"
size=
"small"
@
click=
"deleteRow(scope.$index, fields)"
>
删除
</el-button
>
</
template
>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane
label=
"其他输出字段"
>
<el-form
ref=
"from"
:model=
"form"
label-width=
"160px"
>
<el-form-item
label=
"文件名字段:"
>
<el-input
v-model=
"form.shortFileFieldName"
></el-input>
</el-form-item>
<el-table-column
prop=
"decimal"
label=
"小数"
>
</el-table-column>
<el-form-item
label=
"扩展名字段:"
>
<el-input
v-model=
"form.extensionFieldName"
></el-input>
</el-form-item>
<el-table-column
prop=
"group"
label=
"分组"
>
</el-table-column>
<el-form-item
label=
"路径字段:"
>
<el-input
v-model=
"form.pathFieldName"
></el-input>
</el-form-item>
<el-table-column
prop=
"nullif"
label=
"Null if"
>
</el-table-column>
<el-form-item
label=
"文件大小字段:"
>
<el-input
v-model=
"form.sizeFieldName"
></el-input>
</el-form-item>
<el-table-column
prop=
"ifnull"
label=
"默认"
>
</el-table-column>
<el-form-item
label=
"是否为隐藏文件字段:"
>
<el-input
v-model=
"form.hiddenFieldName"
></el-input>
</el-form-item>
<el-table-column
prop=
"trim_type"
label=
"去除空字符串..."
>
</el-table-column>
<el-form-item
label=
"最后修改时间字段:"
>
<el-input
v-model=
"form.lastModificationTimeFieldName"
></el-input>
</el-form-item>
<el-table-column
prop=
"repeat"
label=
"重复"
>
</el-table-column>
<el-form-item
label=
"Uri字段:"
>
<el-input
v-model=
"form.uriNameFieldName"
></el-input>
</el-form-item>
<el-table-column
label=
"操作"
width=
"100px"
>
<
template
slot-scope=
"scope"
>
<el-button
@
click=
"fieldClick(false,scope.row)"
type=
"text"
size=
"small"
>
编辑
</el-button
>
<el-button
type=
"text"
size=
"small"
@
click=
"deleteField(scope.$index, inputFields)"
>
删除
</el-button
>
</
template
>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane
label=
"其他输出字段"
>
<el-form
ref=
"from"
:model=
"form"
label-width=
"160px"
>
<el-form-item
label=
"文件名字段:"
>
<el-input
v-model=
"form.shortFilenameField"
></el-input>
</el-form-item>
<el-form-item
label=
"扩展名字段:"
>
<el-input
v-model=
"form.extensionField"
></el-input>
</el-form-item>
<el-form-item
label=
"路径字段:"
>
<el-input
v-model=
"form.pathField"
></el-input>
</el-form-item>
<el-form-item
label=
"文件大小字段:"
>
<el-input
v-model=
"form.sizeField"
></el-input>
</el-form-item>
<el-form-item
label=
"是否为隐藏文件字段:"
>
<el-input
v-model=
"form.hiddenField"
></el-input>
</el-form-item>
<el-form-item
label=
"最后修改时间字段:"
>
<el-input
v-model=
"form.lastModificationField"
></el-input>
</el-form-item>
<el-form-item
label=
"Uri字段:"
>
<el-input
v-model=
"form.uriField"
></el-input>
</el-form-item>
<el-form-item
label=
"Root uri字段:"
>
<el-input
v-model=
"form.rootUriField"
></el-input>
</el-form-item>
</el-form>
<el-form-item
label=
"Root uri字段:"
>
<el-input
v-model=
"form.rootUriNameFieldName"
></el-input>
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"handleCloseFun"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"xmlFileInputDialog"
>
确 定
</el-button>
<el-button
type=
"primary"
@
click=
"xmlFileInputDialogFun"
>
确 定
</el-button>
</span>
</el-dialog>
<!-- 文件浏览器-->
<el-dialog
title=
"字段"
:visible
.
sync=
"addFieldsDialog"
width=
"500px"
:before-close=
"handleClose"
:modal=
"false"
>
<el-form
ref=
"from"
:model=
"addFields"
label-width=
"120px"
>
<el-form-item
label=
"名称:"
>
<el-input
v-model=
"addFields.name"
></el-input>
</el-form-item>
<el-form-item
label=
"xml路径:"
>
<el-input
v-model=
"addFields.xpath"
></el-input>
</el-form-item>
<el-form-item
label=
"节点"
>
<el-select
v-model=
"addFields.element_type"
style=
"width: 100%"
clearable
>
<el-option
label=
"节点"
value=
"node"
></el-option>
<el-option
label=
"属性"
value=
"attribut"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"结果类型:"
>
<el-select
v-model=
"addFields.result_type"
style=
"width: 100%"
clearable
>
<el-option
label=
"value of"
value=
"valueof"
></el-option>
<el-option
label=
"Single node"
value=
"Singlenode"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"类型:"
>
<el-select
v-model=
"addFields.type"
style=
"width: 100%"
clearable
>
<el-option
v-for=
"item in fieldType"
:key=
"item.id"
:label=
"item.name"
:value=
"item.name"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"格式:"
>
<el-select
v-model=
"addFields.format"
style=
"width: 100%"
clearable
>
<el-option
v-for=
"item in fieldFormat"
:key=
"item.index"
:label=
"item.name"
:value=
"item.name"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"长度:"
>
<el-input
v-model=
"addFields.length"
></el-input>
</el-form-item>
<el-form-item
label=
"精度:"
>
<el-input
v-model=
"addFields.precision"
></el-input>
</el-form-item>
<el-form-item
label=
"货币符号:"
>
<el-input
v-model=
"addFields.currency"
></el-input>
</el-form-item>
<el-form-item
label=
"小数点符号:"
>
<el-input
v-model=
"addFields.decimal"
></el-input>
</el-form-item>
<el-form-item
label=
"组:"
>
<el-input
v-model=
"addFields.group"
></el-input>
</el-form-item>
<el-form-item
label=
"去除空格类型:"
>
<el-select
v-model=
"addFields.trim_type"
style=
"width: 100%"
clearable
>
<el-option
label=
"不去掉空格"
value=
"none"
></el-option>
<el-option
label=
"去掉左空格"
value=
"left"
></el-option>
<el-option
label=
"去掉右空格"
value=
"right"
></el-option>
<el-option
label=
"去掉左右两端空格"
value=
"both"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"重复:"
>
<el-select
v-model=
"addFields.repeat"
style=
"width: 100%"
clearable
>
<el-option
label=
"是"
value=
"Y"
></el-option>
<el-option
label=
"否"
value=
"N"
></el-option>
</el-select>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"addFieldsDialog = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"addFieldsDialogFun"
>
确 定
</el-button
>
</span>
</el-dialog>
<!-- 文件浏览器-->
<el-dialog
title=
"文件浏览器"
:visible
.
sync=
"filePathSelection"
width=
"500px"
:before-close=
"handleClose"
:modal=
"false"
>
<browseFiles
:disabed=
"true"
v-on:route=
"route"
></browseFiles>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"filePathSelection = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"addFilePathSelection"
>
确 定
</el-button
>
</span>
</el-dialog>
</div>
</template>
<
script
>
import
browseFiles
from
"../appBulletFrame/browseFiles"
;
import
mxgraph
from
"@/utils/mxgraph"
;
import
{
inputOutputFields
,
availableCharsets
,
valueFormat
,
valueMeta
}
from
"@/api/kettle/link"
;
const
{
mxGraph
,
mxUtils
,
...
...
@@ -411,22 +531,155 @@ const {
export
default
{
props
:
[
"form"
,
"nodeData"
,
"saveOutputDialog"
,
"xmlFileInputDialog"
],
components
:
{
browseFiles
,
},
data
()
{
return
{
file
NameStore
:
[],
file
:
[],
fileSelection
:
{},
codingType
:[],
fields
:[],
routeState
:
0
,
filePathSelection
:
false
,
localPath
:{},
state
:
false
,
addFields
:{},
addFieldsDialog
:
false
,
fieldFormat
:
{},
fieldType
:
{},
};
},
created
()
{},
methods
:
{
fieldClick
(
state
,
val
){
this
.
addFieldsDialog
=
!
this
.
addFieldsDialog
this
.
addState
=
state
if
(
state
)
{
this
.
addFields
=
{}
}
else
{
this
.
addFields
=
val
}
},
xmlFileInputDialogFun
(){
this
.
handleCloseFun
()
this
.
form
.
file
=
JSON
.
stringify
(
this
.
file
);
this
.
form
.
fields
=
JSON
.
stringify
(
this
.
fields
);
this
.
saveOutputDialog
(
this
.
form
)
},
valueMetaFun
()
{
valueMeta
().
then
((
res
)
=>
{
this
.
fieldType
=
res
;
});
},
valueFormatFun
()
{
let
pamer2
=
new
FormData
();
// 创建form对象
pamer2
.
append
(
"valueType"
,
"all"
);
valueFormat
(
pamer2
).
then
((
res
)
=>
{
this
.
fieldFormat
=
res
;
});
},
systemDataTypesFun
()
{
systemDataTypes
().
then
((
res
)
=>
{
this
.
type
=
res
;
});
},
addFieldsDialogFun
(){
this
.
addFieldsDialog
=
!
this
.
addFieldsDialog
;
if
(
this
.
addState
)
{
this
.
fields
.
push
(
this
.
addFields
);
this
.
$emit
(
'fields'
,
this
.
fields
)
}
else
{
}
},
route
(
flowData
){
this
.
localPath
.
fileName
=
flowData
.
name
console
.
log
(
this
.
localPath
);
},
// 关闭弹框
handleClose
(
done
)
{
this
.
$confirm
(
"确认关闭?"
)
.
then
((
_
)
=>
{
done
();
})
.
catch
((
_
)
=>
{});
},
addFilePathSelection
(){
this
.
filePathSelection
=
!
this
.
filePathSelection
if
(
this
.
routeState
==
0
)
{
this
.
form
.
loopxpath
=
this
.
localPath
.
fileName
}
else
if
(
this
.
routeState
==
1
)
{
this
.
fileSelection
.
name
=
this
.
localPath
.
fileName
}
},
deleteRow
(
index
,
rows
)
{
rows
.
splice
(
index
,
1
);
},
clickFun
(
graph
,
val
)
{
this
.
availableCharsetsFun
()
this
.
valueMetaFun
()
this
.
valueFormatFun
()
console
.
log
(
graph
);
this
.
newGraph
=
graph
;
console
.
log
(
val
);
this
.
file
=
JSON
.
parse
(
val
.
file
)
this
.
fields
=
JSON
.
parse
(
val
.
fields
)
},
availableCharsetsFun
(){
let
pamer
=
new
FormData
();
// 创建form对象
pamer
.
append
(
"query"
,
""
);
availableCharsets
(
pamer
).
then
((
res
)
=>
{
this
.
codingType
=
res
;
});
},
handleCloseFun
()
{
this
.
$emit
(
"update:xmlFileInputDialog"
,
false
);
},
addFile
()
{
this
.
file
.
push
(
this
.
fileSelection
);
console
.
log
(
this
.
file
,
789787987987987
);
this
.
fileSelection
=
{};
},
selectFilePath
(
tsate
)
{
this
.
routeState
=
tsate
;
this
.
filePathSelection
=
!
this
.
filePathSelection
;
},
getTheField
()
{
var
enc
=
new
mxCodec
(
mxUtils
.
createXmlDocument
());
var
node
=
enc
.
encode
(
this
.
newGraph
.
getModel
());
this
.
graphXml
=
mxUtils
.
getPrettyXml
(
node
);
let
pamerFields
=
new
FormData
();
// 创建form对象
pamerFields
.
append
(
"stepName"
,
this
.
nodeData
.
value
.
attributes
.
label
.
value
);
pamerFields
.
append
(
"graphXml"
,
this
.
graphXml
);
pamerFields
.
append
(
"before"
,
true
);
pamerFields
.
append
(
"query"
,
""
);
inputOutputFields
(
pamerFields
).
then
((
res
)
=>
{
this
.
fields
=
res
;
});
},
},
};
</
script
>
...
...
src/views/dashboard-kettle/components/designer/modules/node_menu.vue
View file @
b1cc08db
...
...
@@ -87,8 +87,8 @@ export default {
data
()
{
return
{
// prefix:'http://192.168.0.2:9700/etlweb/',
prefix
:
`http://147.1.3.180:9888/ETLWEB-SERVER/etlweb/`
,
//
prefix:`http://192.168.0.44:9888/ETLWEB-SERVER/etlweb/`,
//
prefix:`http://147.1.3.180:9888/ETLWEB-SERVER/etlweb/`,
prefix
:
`http://192.168.0.44:9888/ETLWEB-SERVER/etlweb/`
,
// 测试数据开始=====
jobTreeList
:
[
{
...
...
src/views/dashboard-kettle/components/designer/mxgraphDesigner.vue
View file @
b1cc08db
...
...
@@ -863,7 +863,7 @@
title=
"改变开始复制的数量"
:visible
.
sync=
"copyNumber"
width=
"300px"
:before-close=
"handleClose"
:before-close=
"handleClose"
>
<el-form
ref=
"form"
:model=
"form"
>
...
...
@@ -1540,7 +1540,7 @@ export default {
this
.
initGraph
();
console
.
log
(
this
.
blankCanvas
,
7987987987
);
this
.
$refs
.
container
.
style
.
background
=
'url("./mxgraph/images/grid.gif")'
;
this
.
$parent
.
dtads
();
//
this.$parent.dtads();
},
// filters: {
...
...
@@ -2048,6 +2048,7 @@ export default {
if
(
label
)
{
if
(
cell
.
isEdge
()
&&
cell
.
value
.
nodeName
==
"TransHop"
)
{
return
'<img src="'
+
label
+
'" width="16" height="16" />'
;
}
else
if
(
cell
.
isEdge
()
&&
cell
.
value
.
nodeName
==
"JobHop"
)
{
console
.
log
(
label
,
"label"
);
// var jsonArray = JSON.parse(label), label = '';
...
...
@@ -2062,7 +2063,12 @@ export default {
return
label
;
}
else
{
return
decodeURIComponent
(
label
)
+
" "
+
"X"
+
cell
.
value
.
attributes
.
copies
.
value
;
if
(
this
.
curFileType
==
"transformation"
)
{
return
decodeURIComponent
(
label
)
+
" "
+
"X"
+
cell
.
value
.
attributes
.
copies
.
value
;
}
else
{
return
decodeURIComponent
(
label
)
}
}
}
...
...
@@ -2164,8 +2170,21 @@ export default {
pamer2
.
append
(
"stepName"
,
"all"
);
valueFormat
(
pamer2
).
then
((
res
)
=>
{
this
.
fieldFormat
=
res
;
});
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
dis
==
"step22"
||
});
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
dis
==
"step6"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"getXMLData"
)
{
this
.
xmlFileInputDialog
=
!
this
.
xmlFileInputDialog
this
.
form
=
this
.
showDataFunc
()
setTimeout
(()
=>
{
this
.
$refs
.
xmlFileInput
.
clickFun
(
this
.
graph
,
this
.
form
);
},
500
);
}
else
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
dis
==
"step166"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"Mapping"
)
{
this
.
mappingDialog
=
!
this
.
mappingDialog
this
.
form
=
this
.
showDataFunc
()
setTimeout
(()
=>
{
this
.
$refs
.
mapping
.
clickFun
(
this
.
graph
,
this
.
form
);
},
500
);
}
else
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
dis
==
"step56"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"Unique"
)
{
this
.
toRepeatDialog
=
!
this
.
toRepeatDialog
this
.
form
=
this
.
showDataFunc
()
...
...
@@ -2173,7 +2192,7 @@ export default {
this
.
$refs
.
toRepeat
.
clickFun
(
this
.
graph
,
this
.
form
);
},
500
);
}
else
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
dis
==
"step
27
"
||
}
else
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
dis
==
"step
61
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"SelectValues"
)
{
this
.
selectFieldDialog
=
!
this
.
selectFieldDialog
this
.
form
=
this
.
showDataFunc
()
...
...
@@ -2182,7 +2201,7 @@ export default {
this
.
$refs
.
selectField
.
clickFun
(
this
.
graph
,
this
.
form
);
},
500
);
}
else
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
dis
==
"step
5
0"
||
cell
.
dis
==
"step
13
0"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"MergeRows"
)
{
this
.
mergeRecordsDialog
=
!
this
.
mergeRecordsDialog
;
...
...
@@ -2192,7 +2211,7 @@ export default {
},
500
);
return
;
}
else
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
dis
==
"step
64
"
||
cell
.
dis
==
"step
162
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"GetVariable"
)
{
this
.
getVariableDialog
=
!
this
.
getVariableDialog
;
...
...
@@ -2202,7 +2221,7 @@ export default {
},
500
);
return
;
}
else
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
dis
==
"step
65
"
||
cell
.
dis
==
"step
163
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"SetVariable"
)
{
this
.
setVariableDialog
=
!
this
.
setVariableDialog
;
...
...
@@ -2213,7 +2232,7 @@ export default {
return
;
}
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
dis
==
"step
29
"
||
cell
.
dis
==
"step
66
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"SortRows"
)
{
this
.
sortRecordDialog
=
!
this
.
sortRecordDialog
;
...
...
@@ -2223,7 +2242,7 @@ export default {
},
500
);
return
;
}
else
if
(
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
1
"
)
||
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
4
"
)
||
cell
.
value
.
attributes
.
ctype
.
value
==
"ExcelInput"
)
{
this
.
excelLnput
=
!
this
.
excelLnput
;
...
...
@@ -2244,7 +2263,7 @@ export default {
this
.
file
=
q
.
file
;
return
;
}
else
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
7
"
||
cell
.
ids
==
"step
28
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"TableInput"
)
{
this
.
TableInputDialog
=
!
this
.
TableInputDialog
;
...
...
@@ -2256,7 +2275,7 @@ export default {
return
;
}
else
if
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
6
"
||
cell
.
ids
==
"step
25
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"SystemInfo"
)
{
this
.
SystemInfoDialog
=
!
this
.
SystemInfoDialog
;
...
...
@@ -2266,7 +2285,7 @@ export default {
},
500
);
return
;
}
else
if
(
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
5
"
)
||
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
21
"
)
||
cell
.
value
.
attributes
.
ctype
.
value
==
"DataGrid"
)
{
this
.
ConstantDialog
=
!
this
.
ConstantDialog
;
...
...
@@ -2277,7 +2296,7 @@ export default {
},
500
);
return
;
}
else
if
(
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
4
"
)
||
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
19
"
)
||
cell
.
value
.
attributes
.
ctype
.
value
==
"RandomValue"
)
{
this
.
RandomValueDialog
=
!
this
.
RandomValueDialog
;
...
...
@@ -2287,7 +2306,7 @@ export default {
},
500
);
return
;
}
else
if
(
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
3
"
)
||
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
18
"
)
||
cell
.
value
.
attributes
.
ctype
.
value
==
"RowGenerator"
)
{
this
.
RowGeneratorDialog
=
!
this
.
RowGeneratorDialog
;
...
...
@@ -2297,7 +2316,7 @@ export default {
},
500
);
return
;
}
else
if
(
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
2
"
)
||
(
this
.
curFileType
==
"transformation"
&&
cell
.
ids
==
"step
17
"
)
||
cell
.
value
.
attributes
.
ctype
.
value
==
"TextFileInput"
)
{
this
.
TextFileInputDialog
=
!
this
.
TextFileInputDialog
;
...
...
@@ -2308,7 +2327,7 @@ export default {
},
500
);
return
;
}
else
if
(
cell
.
ids
==
"step
17
"
||
cell
.
ids
==
"step
46
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"TableOutput"
)
{
//表输出
...
...
@@ -2320,7 +2339,7 @@ export default {
// this.$refs.tableOutPut.clickFun(this.graph);
return
;
}
else
if
(
cell
.
ids
==
"step
16
"
||
cell
.
ids
==
"step
44
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"Update"
)
{
//更新
...
...
@@ -2332,7 +2351,7 @@ export default {
},
500
);
return
;
}
else
if
(
cell
.
ids
==
"step
15
"
||
cell
.
ids
==
"step
43
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"TextFileOutput"
)
{
//文本文件输出
...
...
@@ -2341,7 +2360,7 @@ export default {
this
.
$refs
.
textFile
.
clickFun
(
this
.
graph
);
//向子组件传递画布
return
;
}
else
if
(
cell
.
ids
==
"step
14
"
||
cell
.
ids
==
"step
43
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"SynchronizeAfterMerge"
)
{
//数据同步
...
...
@@ -2350,7 +2369,7 @@ export default {
this
.
$refs
.
syn
.
clickFun
(
this
.
graph
);
//向子组件传递画布
return
;
}
else
if
(
cell
.
ids
==
"step
13
"
||
cell
.
ids
==
"step
41
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"InsertUpdate"
)
{
//插入、更新
...
...
@@ -2359,7 +2378,7 @@ export default {
this
.
$refs
.
insertOrdate
.
clickFun
(
this
.
graph
);
//向子组件传递画布
return
;
}
else
if
(
cell
.
ids
==
"step
12
"
||
cell
.
ids
==
"step
40
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"Delete"
)
{
//删除
...
...
@@ -2371,7 +2390,7 @@ export default {
// this.$refs.del.clickFun(this.graph);//向子组件传递画布
return
;
}
else
if
(
cell
.
ids
==
"step
11
"
||
cell
.
ids
==
"step
39
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"SQLFileOutput"
)
{
//SQL文件输出
...
...
@@ -2380,7 +2399,7 @@ export default {
this
.
$refs
.
sql
.
clickFun
(
this
.
graph
);
//向子组件传递画布
return
;
}
else
if
(
cell
.
ids
==
"step
10
"
||
cell
.
ids
==
"step
36
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"TypeExitExcelWriterStep"
)
{
//mico-Excel输出
...
...
@@ -2391,7 +2410,7 @@ export default {
},
500
);
return
;
}
else
if
(
cell
.
ids
==
"step
9
"
||
cell
.
ids
==
"step
34
"
||
cell
.
value
.
attributes
.
ctype
.
value
==
"ExcelOutput"
)
{
//Excel输出
...
...
@@ -2471,6 +2490,14 @@ export default {
this
.
$refs
.
script
.
clickFun
(
this
.
graph
);
//向子组件传递画布
},
500
);
return
;
}
else
if
((
this
.
curFileType
==
"job"
&&
cell
.
ids
==
"step63"
)
||
cell
.
value
.
attributes
.
ctype
.
value
==
"EXPORT_REPOSITORY"
){
//资源库 --导出资源库XML文件
this
.
importXmlFileDialog
=
!
this
.
importXmlFileDialog
;
this
.
form
=
this
.
showDataFunc
()
setTimeout
(()
=>
{
this
.
$refs
.
importXmlFile
.
clickFun
(
this
.
graph
,
this
.
form
);
//向子组件传递画布
},
500
);
return
;
}
});
...
...
@@ -2493,18 +2520,10 @@ export default {
console
.
log
(
cell
,
"当前节点"
);
this
.
conversionSettingsDialog
=
!
this
.
conversionSettingsDialog
});
menu
.
addItem
(
"映射(子转换)"
,
null
,
()
=>
{
console
.
log
(
cell
,
"当前节点"
);
this
.
mappingDialog
=
!
this
.
mappingDialog
});
menu
.
addItem
(
"映射输入规范"
,
null
,
()
=>
{
console
.
log
(
cell
,
"当前节点"
);
this
.
mappingInputDialog
=
!
this
.
mappingInputDialog
});
menu
.
addItem
(
"映射输出规范"
,
null
,
()
=>
{
console
.
log
(
cell
,
"当前节点"
);
this
.
mappingOutputDialog
=
!
this
.
mappingOutputDialog
...
...
@@ -2514,10 +2533,7 @@ export default {
this
.
nullOperationDialog
=
!
this
.
nullOperationDialog
});
menu
.
addItem
(
"Get data from XML"
,
null
,
()
=>
{
console
.
log
(
cell
,
"当前节点"
);
this
.
xmlFileInputDialog
=
!
this
.
xmlFileInputDialog
});
menu
.
addSeparator
();
}
else
{
...
...
@@ -2527,12 +2543,11 @@ export default {
this
.
jobSettingsDialog
=
!
this
.
jobSettingsDialog
});
menu
.
addItem
(
"导出资源库到XML文件"
,
null
,
()
=>
{
console
.
log
(
cell
,
"当前节点"
);
this
.
importXmlFileDialog
=
!
this
.
importXmlFileDialog
console
.
log
(
typeof
this
.
form
.
q
);
});
// menu.addItem("导出资源库到XML文件", null, () => {
// console.log(cell, "当前节点");
// this.importXmlFileDialog = !this.importXmlFileDialog
// console.log(typeof this.form.q);
// });
menu
.
addSeparator
();
}
}
else
{
...
...
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