Commit 06acfadb by 莫晓莉

2021,6.11

parent 7ab8c5db
...@@ -409,3 +409,24 @@ export function locale(data){ ...@@ -409,3 +409,24 @@ export function locale(data){
method: 'post' method: 'post'
}) })
} }
// 从文件获取字段
export function mappingFields(data){
return request({
url:'etlweb/trans/mappingFields',
data,
method: 'post'
})
}
// 获取日期格式
export function datetimeformat(data){
return request({
url:'etlweb/system/datetimeformat',
data,
method: 'post'
})
}
...@@ -8,76 +8,76 @@ ...@@ -8,76 +8,76 @@
> >
<el-tabs type="border-card"> <el-tabs type="border-card">
<el-tab-pane label="转换"> <el-tab-pane label="转换">
<el-form :model="conversionForm" label-width="160px"> <el-form :model="form" label-width="160px">
<el-form-item label="转换名称"> <el-form-item label="转换名称">
<el-input v-model="conversionForm.name"></el-input> <el-input v-model="form.name"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="转换文件"> <el-form-item label="转换文件">
<el-input v-model="conversionForm.fileName"></el-input> <el-input v-model="form.fileName"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="描述"> <el-form-item label="描述">
<el-input v-model="conversionForm.description"></el-input> <el-input v-model="form.description"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="扩展描述"> <el-form-item label="扩展描述">
<el-input <el-input
type="textarea" type="textarea"
v-model="conversionForm.extended_description" v-model="form.extended_description"
:rows="5" :rows="5"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="状态"> <el-form-item label="状态">
<el-select <el-select v-model="form.trans_status" style="width: 100%">
v-model="conversionForm.trans_status"
style="width: 100%"
>
<el-option label="草案" value="shanghai"></el-option> <el-option label="草案" value="shanghai"></el-option>
<el-option label="产品" value="beijing"></el-option> <el-option label="产品" value="beijing"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="版本"> <el-form-item label="版本">
<el-input v-model="conversionForm.trans_version"></el-input> <el-input v-model="form.trans_version"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="目录"> <el-form-item label="目录">
<el-input v-model="conversionForm.directory"></el-input> <el-input v-model="form.directory"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="创建者"> <el-form-item label="创建者">
<el-input v-model="conversionForm.created_user"></el-input> <el-input v-model="form.created_user"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="创建时间"> <el-form-item label="创建时间">
<el-input v-model="conversionForm.created_date"></el-input> <el-input v-model="form.created_date"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="最近修改者"> <el-form-item label="最近修改者">
<el-input v-model="conversionForm.modified_user"></el-input> <el-input v-model="form.modified_user"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="最近修改日期"> <el-form-item label="最近修改日期">
<el-input v-model="conversionForm.modified_date"></el-input> <el-input v-model="form.modified_date"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="命名参数"> <el-tab-pane label="命名参数">
<el-button type="text">添加字段</el-button> <el-button type="text" @click="addParameters(true)"
>添加字段</el-button
>
<el-table :data="fields" style="width: 100%"> <el-table :data="parameters" style="width: 100%">
<el-table-column prop="name" label="命名参数"> </el-table-column> <el-table-column prop="name" label="命名参数"> </el-table-column>
<el-table-column prop="default_value" label="默认值"> </el-table-column> <el-table-column prop="default_value" label="默认值">
</el-table-column>
<el-table-column prop="description" label="描述"> </el-table-column> <el-table-column prop="description" label="描述"> </el-table-column>
<el-table-column label="操作" width="100px"> <el-table-column label="操作" width="100px">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@click="fieldClick(false, scope.row)" @click="addParameters(false, scope.row)"
type="text" type="text"
size="small" size="small"
>编辑</el-button >编辑</el-button
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
<el-button <el-button
type="text" type="text"
size="small" size="small"
@click="deletefield(scope.$index, fields)" @click="deleteField(scope.$index, parameters)"
>删除</el-button >删除</el-button
> >
</template> </template>
...@@ -95,8 +95,20 @@ ...@@ -95,8 +95,20 @@
<el-tab-pane label="日志"> <el-tab-pane label="日志">
<div> <div>
<div class="leftDiv"> <div class="leftDiv">
<ul> <ul>
<li class="list" v-for="item in liList" :key="item.id" @click="switchJournal(item)" style="cursor:pointer" :class="{'hover': switchState == item.id,'checked': switchState == item.id}">{{ item.name }}</li> <li
class="list"
v-for="item in liList"
:key="item.id"
@click="switchJournal(item)"
style="cursor: pointer"
:class="{
hover: switchState == item.id,
checked: switchState == item.id,
}"
>
{{ item.name }}
</li>
</ul> </ul>
</div> </div>
...@@ -106,10 +118,23 @@ ...@@ -106,10 +118,23 @@
<el-form-item label="日志数据库连接:"> <el-form-item label="日志数据库连接:">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="18"> <el-col :span="18">
<el-input v-model="logEntry.connection"></el-input> <el-select
v-model="logEntry.connection"
style="width: 100%"
@focus="getGraphDataBases"
clearable
>
<el-option
v-for="(item, index) in namesList"
:key="index"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-col> </el-col>
<el-col class="line" :span="2"> <el-col class="line" :span="2">
<el-button type="primary" @click="metadata(true)">浏览</el-button> <el-button size="mini" @click.native="dialogVisibleFourthNew"
>新建</el-button>
</el-col> </el-col>
</el-row> </el-row>
</el-form-item> </el-form-item>
...@@ -119,13 +144,19 @@ ...@@ -119,13 +144,19 @@
<el-form-item label="日志表:"> <el-form-item label="日志表:">
<el-input v-model="logEntry.table"></el-input> <el-input v-model="logEntry.table"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="日志记录间隔时间(秒):" v-if="this.switchState == 1 || this.switchState == 3"> <el-form-item
label="日志记录间隔时间(秒):"
v-if="this.switchState == 1 || this.switchState == 3"
>
<el-input v-model="logEntry.size_limit_lines"></el-input> <el-input v-model="logEntry.size_limit_lines"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="日志记录过时时间(天):"> <el-form-item label="日志记录过时时间(天):">
<el-input v-model="logEntry.interval"></el-input> <el-input v-model="logEntry.interval"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="在内存中保存的日志行数限制:" v-if="this.switchState == 1"> <el-form-item
label="在内存中保存的日志行数限制:"
v-if="this.switchState == 1"
>
<el-input v-model="logEntry.timeout_days"></el-input> <el-input v-model="logEntry.timeout_days"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -133,20 +164,32 @@ ...@@ -133,20 +164,32 @@
<div class="lowerRight"> <div class="lowerRight">
<el-table <el-table
:data="tableData" :data="tableData"
height=" 250 " height="250"
border border
style="width: 100%" style="width: 100%"
:row-style="{ height: '10px' }" :row-style="{ height: '10px' }"
:cell-style="{ height: '10px' }" :cell-style="{ height: '10px' }"
> >
<el-table-column prop="enabled" label="启用"> </el-table-column> <el-table-column prop="enabled" label="启用">
<el-table-column prop="name" label="字段名称"> </el-table-column> <template slot-scope="scope">
<el-table-column prop="subject" label="步骤名称" v-if="this.switchState == 1"></el-table-column> {{ scope.row.enabled ? "true" : "false" }}
<el-table-column prop="description" label="字段描述"></el-table-column> </template>
</el-table-column>
<el-table-column column prop="name" label="字段名称">
</el-table-column>
<el-table-column
prop="subject"
label="步骤名称"
v-if="this.switchState == 1"
></el-table-column>
<el-table-column
prop="description"
label="字段描述"
></el-table-column>
<el-table-column label="操作" width="60"> <el-table-column label="操作" width="60">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@click="liListClick(false, scope.row)" @click="liListClick(scope.row)"
type="text" type="text"
size="small" size="small"
>编辑</el-button >编辑</el-button
...@@ -159,38 +202,51 @@ ...@@ -159,38 +202,51 @@
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="日期"> <el-tab-pane label="日期">
<el-form :model="conversionForm" label-width="160px"> <el-form :model="maxdate" label-width="160px">
<el-form-item label="最大日期数据库连接:"> <el-form-item label="最大日期数据库连接:">
<el-input v-model="conversionForm.table"></el-input> <el-select
v-model="maxdate.connection"
style="width: 100%"
@focus="getGraphDataBases"
clearable
>
<el-option
v-for="(item, index) in namesList"
:key="index"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="最大日期表:"> <el-form-item label="最大日期表:">
<el-input v-model="conversionForm.field"></el-input> <el-input v-model="maxdate.table"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="最大日期字段:"> <el-form-item label="最大日期字段:">
<el-input v-model="conversionForm.offset"></el-input> <el-input v-model="maxdate.field"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="最大日期偏移(秒):"> <el-form-item label="最大日期偏移(秒):">
<el-input v-model="conversionForm.maxdiff"></el-input> <el-input v-model="maxdate.offset"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="最大日期区别(秒):"> <el-form-item label="最大日期区别(秒):">
<el-input v-model="conversionForm.maxdate"></el-input> <el-input v-model="maxdate.maxdiff"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="依赖"> <el-tab-pane label="依赖">
<el-button type="text">添加字段</el-button> <el-button type="text" @click="relyOn(true)">添加字段</el-button>
<el-table :data="fields" style="width: 100%"> <el-table :data=" dependencies" style="width: 100%">
<el-table-column prop="name" label="数据库连接"> </el-table-column> <el-table-column prop="connection" label="数据库连接">
</el-table-column>
<el-table-column prop="default_value" label="表"> </el-table-column> <el-table-column prop="table" label="表"> </el-table-column>
<el-table-column prop="description" label="字段"> </el-table-column> <el-table-column prop="field" label="字段"> </el-table-column>
<el-table-column label="操作" width="100px"> <el-table-column label="操作" width="100px">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@click="fieldClick(false, scope.row)" @click="relyOn(false, scope.row)"
type="text" type="text"
size="small" size="small"
>编辑</el-button >编辑</el-button
...@@ -198,7 +254,7 @@ ...@@ -198,7 +254,7 @@
<el-button <el-button
type="text" type="text"
size="small" size="small"
@click="deletefield(scope.$index, fields)" @click="deleteField(scope.$index,dependencies)"
>删除</el-button >删除</el-button
> >
</template> </template>
...@@ -206,60 +262,64 @@ ...@@ -206,60 +262,64 @@
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="杂项"> <el-tab-pane label="杂项">
<el-form :model="conversionForm" label-width="230px"> <el-form :model="form" label-width="230px">
<el-form-item label="记录集合里的记录数:"> <el-form-item label="记录集合里的记录数:">
<el-input v-model="conversionForm.size_rowset"></el-input> <el-input v-model="form.size_rowset"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="转换时是否在日志中记录反馈行?:"> <el-form-item label="转换时是否在日志中记录反馈行?:">
<el-checkbox <el-checkbox
v-model="conversionForm.feedback_shown" v-model="form.feedback_shown"
true-label="Y" true-label="Y"
false-label="N" false-label="N"
></el-checkbox> ></el-checkbox>
</el-form-item> </el-form-item>
<el-form-item label="每个反馈行的处理记录数:"> <el-form-item label="每个反馈行的处理记录数:">
<el-input v-model="conversionForm.feedback_size"></el-input> <el-input v-model="form.feedback_size"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="使用唯一连接:"> <el-form-item label="使用唯一连接:">
<el-checkbox <el-checkbox
v-model="conversionForm.unique_connections" v-model="form.unique_connections"
true-label="Y" true-label="Y"
false-label="N" false-label="N"
></el-checkbox> ></el-checkbox>
</el-form-item> </el-form-item>
<el-form-item label="共享对象文件:"> <el-form-item label="共享对象文件:">
<el-input v-model="conversionForm.shared_objects_file"></el-input> <el-input v-model="form.shared_objects_file"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="管理线程优先级:"> <el-form-item label="管理线程优先级:">
<el-checkbox <el-checkbox
v-model="conversionForm.using_thread_priorities" v-model="form.using_thread_priorities"
true-label="Y" true-label="Y"
false-label="N" false-label="N"
></el-checkbox> ></el-checkbox>
</el-form-item> </el-form-item>
<el-form-item label="转换引擎类型:"> <el-form-item label="转换引擎类型:">
<el-input v-model="conversionForm.trans_type"></el-input> <el-input v-model="form.trans_type"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="监控"> <el-tab-pane label="监控">
<el-form :model="conversionForm" label-width="180px"> <el-form :model="form" label-width="180px">
<el-form-item label="开启步骤性能监控?:"> <el-form-item label="开启步骤性能监控?:">
<el-checkbox <el-checkbox
v-model="conversionForm.capture_step_performance" v-model="form.capture_step_performance"
true-label="Y" true-label="Y"
false-label="N" false-label="N"
></el-checkbox> ></el-checkbox>
</el-form-item> </el-form-item>
<el-form-item label="步骤性能监测间隔(毫秒):"> <el-form-item label="步骤性能监测间隔(毫秒):">
<el-input v-model="conversionForm.step_performance_capturing_delay"></el-input> <el-input
v-model="form.step_performance_capturing_delay"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="内存中最大的快照数量:"> <el-form-item label="内存中最大的快照数量:">
<el-input v-model="conversionForm.step_performance_capturing_size_limit"></el-input> <el-input
v-model="form.step_performance_capturing_size_limit"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
...@@ -272,15 +332,141 @@ ...@@ -272,15 +332,141 @@
> >
</span> </span>
</el-dialog> </el-dialog>
<el-dialog
title="编辑"
:visible.sync="dialogVisible"
width="500px"
:before-close="handleCloseFun"
>
<el-form :model="determination" label-width="80px">
<el-form-item label="启用">
<el-select v-model="determination.enabled">
<el-option label="true" :value="ree"></el-option>
<el-option label="false" :value="err"></el-option>
</el-select>
</el-form-item>
<el-form-item label="字段名称">
<el-input v-model="determination.name"></el-input>
</el-form-item>
<el-form-item label="步骤名称" v-if="this.switchState == 1">
<el-input v-model="determination.subject" ></el-input>
</el-form-item>
<el-form-item label="字段描述">
<el-input v-model="determination.description"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogVisibleFun">确 定</el-button>
</span>
</el-dialog>
<el-dialog
:title="this.addState? '添加' : '编辑'"
:visible.sync="parametersBox"
width="500px"
:before-close="ParametersCloseFun"
>
<el-form :model="parametersFise" label-width="80px">
<el-form-item label="字段名称">
<el-input v-model="parametersFise.name"></el-input>
</el-form-item>
<el-form-item label="步骤名称">
<el-input v-model="parametersFise.default_value"></el-input>
</el-form-item>
<el-form-item label="字段描述">
<el-input v-model="parametersFise.description"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="parametersBox = false">取 消</el-button>
<el-button type="primary" @click="ParametersBoxFun">确 定</el-button>
</span>
</el-dialog>
<el-dialog
:title="this.addState? '添加' : '编辑'"
:visible.sync="relyOnBox"
width="500px"
:before-close="relyOnCloseFun"
>
<el-form :model="relyOnFise" label-width="80px">
<el-form-item label="字段名称">
<el-select
v-model="relyOnFise.connection"
style="width: 100%"
@focus="getGraphDataBases"
clearable
>
<el-option
v-for="(item, index) in namesList"
:key="index"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-form-item>
<el-form-item label="步骤名称">
<el-input v-model="relyOnFise.table"></el-input>
</el-form-item>
<el-form-item label="字段描述">
<el-input v-model="relyOnFise.field"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="relyOnBox = false">取 消</el-button>
<el-button type="primary" @click="PrelyOnBoxFun">确 定</el-button>
</span>
</el-dialog>
<estab-dialog
ref="establishDia"
:dialogVisibleFourth.sync="dialogVisibleFourth"
@getSonValue="getSonValue"
:listNames="listNames"
:scanDialogVisible.sync="scanDialogVisible"
:chooseType="chooseType"
:chooseFlag.sync="chooseFlag"
:form.sync="form"
:getXmlVal="getXmlVal"
:noneRespository="noneRespository"
:graph.sync="newGraph"
></estab-dialog>
</div> </div>
</template> </template>
<script> <script>
import main from "../../../mykettle/main";
export default { export default {
props: ["conversionSettingsDialog"], components: {
main,
},
props: ["conversionSettingsDialog","getXmlVal", "form","saveOutputDialog1"],
data() { data() {
return { return {
conversionForm: {}, namesList: [],
fields: [], fields: [],
liList: [ liList: [
{ {
...@@ -305,60 +491,260 @@ export default { ...@@ -305,60 +491,260 @@ export default {
}, },
], ],
logEntry: {}, logEntry: {},
tableData: [ tableData: [],
{ transLogTable:[],
date: "2016-05-03", stepLogTable:[],
name: "王小虎", performanceLogTable:[],
address: "上海市普陀区金沙江路 1518 弄", channelLogTable:[],
}, metricsLogTable:[],
{ switchState: 1,
date: "2016-05-02", parametersBox:false,
name: "王小虎", dialogVisible: false,
address: "上海市普陀区金沙江路 1518 弄", parametersFise:{},
}, relyOnFise:{},
{ relyOnBox:false,
date: "2016-05-04", determination: {},
name: "王小虎", err: false,
address: "上海市普陀区金沙江路 1518 弄", ree: true,
}, maxdate: {},
{ parameters: [],
date: "2016-05-01", dependencies: [],
name: "王小虎", newGraph: {},
address: "上海市普陀区金沙江路 1518 弄", dialogVisibleFourth:false,
}, scanDialogVisible: false,
{ chooseType: "表",
date: "2016-05-08", chooseFlag: false,
name: "王小虎", noneRespository: 1, //判断是保存画布还是传后台
address: "上海市普陀区金沙江路 1518 弄", addState:false,
},
{
date: "2016-05-06",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-07",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
],
switchState:1,
}; };
}, },
created() {}, created() {},
methods: { methods: {
clickFun(graph, val) {
this.newGraph = graph;
console.log(val);
this.maxdate = JSON.parse(val.maxdate);
this.parameters = JSON.parse(val.parameters);
// this.dependencies = JSON.parse(val.dependencies);
this.transLogTable = JSON.parse(this.form.transLogTable).fields;
for (let i = 0; i < this.transLogTable.length; i++) {
this.transLogTable[i].description = decodeURIComponent(
this.transLogTable[i].description
);
}
this.stepLogTable = JSON.parse(this.form.stepLogTable).fields;
for (let i = 0; i < this.stepLogTable.length; i++) {
this.stepLogTable[i].description = decodeURIComponent(
this.stepLogTable[i].description
);
}
this.performanceLogTable = JSON.parse(this.form.performanceLogTable).fields;
for (let i = 0; i < this.performanceLogTable.length; i++) {
this.performanceLogTable[i].description = decodeURIComponent(
this.performanceLogTable[i].description
);
}
this.channelLogTable = JSON.parse(this.form.channelLogTable).fields;
for (let i = 0; i < this.channelLogTable.length; i++) {
this.channelLogTable[i].description = decodeURIComponent(
this.channelLogTable[i].description
);
}
this.metricsLogTable = JSON.parse(this.form.metricsLogTable).fields;
for (let i = 0; i < this.metricsLogTable.length; i++) {
this.metricsLogTable[i].description = decodeURIComponent(
this.metricsLogTable[i].description
);
}
console.log(this.form);
},
//删除
deleteField(index, rows){
rows.splice(index, 1);
},
getGraphDataBases() {
var root = this.newGraph.getDefaultParent(),
data = [];
if (root.getAttribute("databases") != null)
data = JSON.parse(root.getAttribute("databases"));
console.log("获取到画布上的databases====", data);
this.namesList = data;
},
// 查询已经建立的所有数据库列表
listNames() {
listNames().then((res) => {
if (res) {
console.log("获取所有已经创建的数据库列表:", res);
this.namesList = res;
} else {
this.$message.error(res.errMsg);
}
});
},
dialogVisibleFourthNew() {
this.dialogVisibleFourth = true;
// this.$refs.establishDia.database();
// this.$refs.establishDia.accessMethod(); //获取连接方式
this.$refs.establishDia.clickFun(this.newGraph); //先把画布传过去
this.$refs.establishDia.getTransDatabase();
this.$refs.establishDia.accessMethod(); //获取连接方式
},
getSonValue(res) {
if (typeof res == "string") {
this.formDataBaseName = res;
console.log("接收子组件的值1111111----", this.formDataBaseName);
} else if (typeof res == "object") {
console.log("接收子组件的值55555----", res);
this.curNode = res; // DOM 更新后 // this.$nextTick(() => { //   this.form.text=this.curNode.data.text; //   // this.$refs.goal.values=this.curNode.data.text; //   // this.$refs.goal.refreshData(this.from) // }) // this.form.text=this.curNode.data.text;
//         this.$set(this.newForm,'text',this.curNode.data.text)
//         this.$forceUpdate()
console.log("chuanhuo=====", this.newForm);
} else if (typeof res == "boolean") {
this.dialogVisibleFourth = res;
console.log("接收子组件的值2222222----", this.dialogVisibleFourth);
}
},
switchJournal(val){ handleCloseFun() {
this.switchState = val.id this.dialogVisible = !this.dialogVisible;
if (this.dialogVisible) {
}
},
ParametersCloseFun(){
this.parametersBox = !this.parametersBox
if (this.parametersBox) {
}
},
relyOnCloseFun(){
this.relyOnBox = !this.relyOnBox
if (this.relyOnBox) {
}
},
ParametersBoxFun(){
this.parametersBox = !this.parametersBox
console.log(this.addState);
if (this.addState) {
this.parameters.push(this.parametersFise)
}else{
}
},
PrelyOnBoxFun(){
this.relyOnBox = !this.relyOnBox
if (this.addState) {
this.dependencies.push(this.relyOnFise)
}
},
dialogVisibleFun() {
this.dialogVisible = !this.dialogVisible;
if (this.switchState == 1) {
this.transLogTable.push(this.determination)
} else if (this.switchState == 2) {
this.stepLogTable.push(this.determination)
} else if (this.switchState == 3) {
this.performanceLogTable .push(this.determination)
} else if (this.switchState == 4) {
this.channelLogTable.push(this.determination)
} else if (this.switchState == 5) {
this.metricsLogTable.push(this.determination)
}
},
liListClick(val) {
this.dialogVisible = !this.dialogVisible;
console.log(val); console.log(val);
this.determination = val;
},
addParameters(state,val){
this.parametersBox = !this.parametersBox
this.addState = state
if (this.addState) {
this.parametersFise = {}
}else{
this.parametersFise = val
}
},
relyOn(state,val){
this.relyOnBox = !this.relyOnBox
this.addState = state
if (this.addState) {
this.relyOnFise = {}
}else{
this.relyOnFise = val
}
},
switchJournal(val) {
this.switchState = val.id;
console.log(val);
if (this.switchState == 1) {
this.tableData = this.transLogTable
} else if (this.switchState == 2) {
this.tableData = this.stepLogTable
} else if (this.switchState == 3) {
this.tableData = this.performanceLogTable
} else if (this.switchState == 4) {
this.tableData = this.channelLogTable
} else if (this.switchState == 5) {
this.tableData = this.metricsLogTable
}
}, },
handleClose() { handleClose() {
this.$emit("update:conversionSettingsDialog", false); this.$emit("update:conversionSettingsDialog", false);
}, },
conversionSettingsDialogFun() { conversionSettingsDialogFun() {
this.form.maxdate = JSON.stringify(this.maxdate)
this.form.parameters = JSON.stringify(this.parameters)
this.form.transLogTable = JSON.parse(this.form.transLogTable)
this.form.stepLogTable = JSON.parse(this.form.stepLogTable)
this.form.performanceLogTable = JSON.parse(this.form.performanceLogTable)
this.form.channelLogTable = JSON.parse(this.form.channelLogTable)
this.form.metricsLogTable = JSON.parse(this.form.metricsLogTable)
this.form.transLogTable.fields = this.transLogTable
this.form.stepLogTable.fields = this.stepLogTable
this.form.performanceLogTable.fields = this.performanceLogTable
this.form.channelLogTable.fields = this.channelLogTable
this.form.metricsLogTable.fields = this.metricsLogTable
this.form.transLogTable = JSON.stringify(this.form.transLogTable)
this.form.stepLogTable = JSON.stringify(this.form.stepLogTable)
this.form.performanceLogTable = JSON.stringify(this.form.performanceLogTable)
this.form.channelLogTable = JSON.stringify(this.form.channelLogTable)
this.form.metricsLogTable = JSON.stringify(this.form.metricsLogTable)
// this.form.transLogTable = JSON.stringify(this.transLogTable)
// this.form.stepLogTable = JSON.stringify(this.stepLogTable)
// this.form.performanceLogTable = JSON.stringify(this.performanceLogTable)
// this.form.channelLogTable = JSON.stringify(this.channelLogTable)
// this.form.metricsLogTable = JSON.stringify(this.metricsLogTable)
this.handleClose(); this.handleClose();
console.log(this.form);
this.saveOutputDialog1(this.form)
}, },
}, },
}; };
...@@ -374,15 +760,15 @@ export default { ...@@ -374,15 +760,15 @@ export default {
padding: 10px; padding: 10px;
} }
.list.hover{ .list.hover {
cursor: pointer; cursor: pointer;
background-color: #EEEEEE; background-color: #eeeeee;
} }
.list.checked{ .list.checked {
background-color:#4e9df8; background-color: #4e9df8;
color: #fff; color: #fff;
} }
.rightDiv { .rightDiv {
width: 550px; width: 550px;
height: 400px; height: 400px;
......
...@@ -10,184 +10,232 @@ ...@@ -10,184 +10,232 @@
<el-form-item label="步骤名称:"> <el-form-item label="步骤名称:">
<el-input v-model="form.label"></el-input> <el-input v-model="form.label"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-tabs type="border-card"> <el-tabs type="border-card">
<el-tab-pane label="一般"> <el-tab-pane label="一般">
<el-card class="box-card"> <el-card class="box-card">
<el-form :model="logEntry" label-width="160px"> <el-form :model="form" label-width="160px">
<el-form-item label="资源库"> </el-form-item> <el-form-item label="资源库"> </el-form-item>
<el-form-item label="资源库名称">
<el-select
v-model="form.repositoryname"
style="width: 100%"
@focus="getGraphDataBases"
clearable
>
<el-option
v-for="(item, index) in namesList"
:key="index"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-form-item>
<el-form-item label="资源库有户名">
<el-input v-model="form.username"></el-input>
</el-form-item>
<el-form-item label="资源库名称"> <el-form-item label="资源库密码">
<el-row :gutter="10"> <el-input v-model="form.password"></el-input>
<el-col :span="20"> </el-form-item>
<el-input v-model="logEntry.connection"></el-input> <el-row :gutter="10">
</el-col> <el-col class="line" :span="4" :offset="20">
<el-col class="line" :span="2"> <el-button type="primary" @click="metadata(true)"
<el-button type="primary" @click="metadata(true)" >测试连接</el-button
>资源库</el-button >
> </el-col>
</el-col> </el-row>
</el-row> </el-form>
</el-form-item> </el-card>
<br />
<el-card class="box-card">
<el-form :model="form" label-width="160px">
<el-form-item label="设置"> </el-form-item>
<el-form-item label="资源库有户名"> <el-form-item label="导出类型">
<el-input v-model="logEntry.name"></el-input> <el-select v-model="form.export_type" style="width: 100%">
</el-form-item> <el-option label="导出所有" value="export_all"></el-option>
<el-option label="只导出作业" value="export_jobs"></el-option>
<el-option
label="只导出转换"
value="export_trans"
></el-option>
<el-option
label="按目录导出"
value="export_by_folder"
></el-option>
<el-option
label="导出第一个目录"
value="export_one_folder"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="资源库密码"> <el-form-item label="文件夹名称">
<el-input v-model="logEntry.name"></el-input>
</el-form-item>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col class="line" :span="4" :offset="20"> <el-col :span="20">
<el-input
v-model="form.directoryPath"
:disabled="
form.export_type === 'export_by_folder' ||
form.export_type === 'export_all' ||
form.export_type === 'export_jobs' ||
form.export_type === 'export_trans'
"
></el-input>
</el-col>
<el-col class="line" :span="2">
<el-button type="primary" @click="metadata(true)" <el-button type="primary" @click="metadata(true)"
>测试连接</el-button :disabled="
form.export_type === 'export_by_folder' ||
form.export_type === 'export_all' ||
form.export_type === 'export_jobs' ||
form.export_type === 'export_trans'
"
>浏览</el-button
> >
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form-item>
</el-card>
<br />
<el-card class="box-card"> <el-form-item label="新建文件夹">
<el-form :model="logEntry" label-width="160px"> <el-checkbox
<el-form-item label="设置"> </el-form-item> v-model="form.newfolder"
true-label="Y"
false-label="N"
:disabled="
form.export_type === 'export_one_folder' ||
form.export_type === 'export_all' ||
form.export_type === 'export_jobs' ||
form.export_type === 'export_trans'
"
></el-checkbox>
</el-form-item>
</el-form>
</el-card>
<br />
<el-form-item label="导出类型"> <el-card class="box-card">
<el-select <el-form :model="form" label-width="160px">
v-model="logEntry.trans_status" <el-form-item label="目标"> </el-form-item>
style="width: 100%"
>
<el-option label="草案" value="shanghai"></el-option>
<el-option label="产品" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="文件夹名称">
<el-row :gutter="10">
<el-col :span="20">
<el-input v-model="logEntry.connection"></el-input>
</el-col>
<el-col class="line" :span="2">
<el-button type="primary" @click="metadata(true)"
>浏览</el-button
>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="新建文件夹">
<el-checkbox
v-model="conversionForm.capture_step_performance"
true-label="Y"
false-label="N"
></el-checkbox>
</el-form-item>
</el-form>
</el-card>
<br />
<el-card class="box-card"> <el-form-item label="目标文件夹/文件名">
<el-form :model="logEntry" label-width="160px"> <el-row :gutter="10">
<el-form-item label="目标"> </el-form-item> <el-col :span="20">
<el-input v-model="form.targetfilename"></el-input>
<el-form-item label="文件夹名称"> </el-col>
<el-row :gutter="10"> <el-col class="line" :span="3">
<el-col :span="17"> <el-button type="primary" @click="selectFilePath()"
<el-input v-model="logEntry.connection"></el-input> >文件</el-button
</el-col> >
<el-col class="line" :span="3"> </el-col>
<el-button type="primary" @click="metadata(true)" </el-row>
>文件</el-button </el-form-item>
>
</el-col>
<el-col class="line" :span="3">
<el-button type="primary" @click="metadata(true)"
>文件夹</el-button
>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="新建文件夹"> <el-form-item label="新建文件夹">
<el-checkbox <el-checkbox
v-model="conversionForm.capture_step_performance" v-model="form.createfolder"
true-label="Y" true-label="Y"
false-label="N" false-label="N"
></el-checkbox> ></el-checkbox>
</el-form-item> </el-form-item>
<el-form-item label="添加日期到文件夹"> <el-form-item label="添加日期到文件夹">
<el-checkbox <el-checkbox
v-model="conversionForm.capture_step_performance" v-model="form.add_date"
true-label="Y" true-label="Y"
false-label="N" false-label="N"
></el-checkbox> :disabled="form.SpecifyFormat == 'Y'"
</el-form-item> ></el-checkbox>
</el-form-item>
<el-form-item label="添加时间到文件夹"> <el-form-item label="添加时间到文件夹">
<el-checkbox <el-checkbox
v-model="conversionForm.capture_step_performance" v-model="form.add_time"
true-label="Y" true-label="Y"
false-label="N" false-label="N"
></el-checkbox> :disabled="form.SpecifyFormat == 'Y'"
</el-form-item> ></el-checkbox>
</el-form-item>
<el-form-item label="指定日期时间格式"> <el-form-item label="指定日期时间格式">
<el-checkbox <el-checkbox
v-model="conversionForm.capture_step_performance" v-model="form.SpecifyFormat"
true-label="Y" true-label="Y"
false-label="N" false-label="N"
></el-checkbox> ></el-checkbox>
</el-form-item> </el-form-item>
<el-form-item label="日期时间格式"> <el-form-item label="日期时间格式">
<el-select <el-select
v-model="logEntry.trans_status" v-model="form.date_time_format"
style="width: 100%" style="width: 100%"
> :disabled="form.SpecifyFormat == 'N'"
<el-option label="草案" value="shanghai"></el-option> >
<el-option label="产品" value="beijing"></el-option> <el-option
</el-select> v-for="item in dateFormat"
</el-form-item> :key="item.index"
:label="item.name"
:value="item.name"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="如果目标文件存在"> <el-form-item label="如果目标文件存在">
<el-select <el-select v-model="form.iffileexists" style="width: 100%">
v-model="logEntry.trans_status" <el-option
style="width: 100%" label="跳过"
> value="if_file_exists_skip"
<el-option label="草案" value="shanghai"></el-option> ></el-option>
<el-option label="产品" value="beijing"></el-option> <el-option
</el-select> label="替换文件"
</el-form-item> value="success_if_errors_less"
></el-option>
<el-option
label="create file with unique name"
value="if_file_exists_uniquename"
></el-option>
<el-option
label="失败"
value="success_if_no_errors"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="添加文件名到结果"> <el-form-item label="添加文件名到结果">
<el-checkbox <el-checkbox
v-model="conversionForm.capture_step_performance" v-model="form.add_result_filesname"
true-label="Y" true-label="Y"
false-label="N" false-label="N"
></el-checkbox> ></el-checkbox>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="高级"> <el-tab-pane label="高级">
<el-form :model="conversionForm" label-width="180px"> <el-form :model="form" label-width="180px">
<el-form-item label="成功条件"> </el-form-item> <el-form-item label="成功条件"> </el-form-item>
<el-form-item label="成功调解"> <el-form-item label="成功调解">
<el-select <el-select v-model="form.success_condition" style="width: 100%">
v-model="conversionForm.trans_status" <el-option
style="width: 100%" label="一切正常"
> value="success_if_no_errors"
<el-option label="草案" value="shanghai"></el-option> ></el-option>
<el-option label="产品" value="beijing"></el-option> <el-option
label="当错误不大于"
value="success_if_errors_less"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="阈值"> <el-form-item label="阈值">
<el-input <el-input
v-model="conversionForm.step_performance_capturing_delay" v-model="form.nr_errors_less_than"
:disabled="form.success_condition == 'success_if_no_errors'"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -201,81 +249,116 @@ ...@@ -201,81 +249,116 @@
> >
</span> </span>
</el-dialog> </el-dialog>
<!-- 文件浏览器-->
<el-dialog
title="文件浏览器"
:visible.sync="filePathSelection"
width="500px"
:before-close="handleCloseFun"
: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> </div>
</template> </template>
<script> <script>
import main from "../../../mykettle/main";
import browseFiles from "../appBulletFrame/browseFiles";
import { datetimeformat, listNames } from "@/api/kettle/link";
export default { export default {
props: ["importXmlFileDialog"], components: {
main,
browseFiles,
},
props: [
"importXmlFileDialog",
"form",
"nodeData",
"doubleClickCell",
"saveOutputDialog",
],
data() { data() {
return { return {
form: {
},
conversionForm: {},
fields: [], fields: [],
liList: [
{
id: 1,
name: "作业日志表",
},
{
id: 2,
name: "作业项日志表",
},
{
id: 3,
name: "日志通道日志表",
},
],
logEntry: {}, logEntry: {},
tableData: [ tableData: [],
{
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-08",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-06",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
{
date: "2016-05-07",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄",
},
],
switchState: 1, switchState: 1,
dateFormat: [],
namesList: [],
filePathSelection:false,
localPath:{},
}; };
}, },
created() { created() {},
},
methods: { methods: {
listNames() {
listNames().then((res) => {
if (res) {
console.log("获取所有已经创建的数据库列表:", res);
this.namesList = res;
} else {
this.$message.error(res.errMsg);
}
});
},
datetimeformatFun() {
datetimeformat().then((res) => {
this.dateFormat = res;
});
},
clickFun(graph, val) { clickFun(graph, val) {
this.datetimeformatFun();
this.listNames();
this.newGraph = graph; this.newGraph = graph;
console.log(val);
},
getGraphDataBases() {
// var graph = this.getGraph();
var root = this.newGraph.getDefaultParent(),
data = [];
if (root.getAttribute("databases") != null)
data = JSON.parse(root.getAttribute("databases"));
console.log("获取到画布上的databases====", data);
this.namesList = data;
}, },
selectFilePath(){
this.filePathSelection = !this.filePathSelection
},
addFilePathSelection(){
this.filePathSelection = !this.filePathSelection
this.form.targetfilename = this.localPath.fileName
},
route(flowData){
this.localPath.fileName = flowData.name
console.log(this.localPath);
},
// 关闭弹框
handleCloseFun(done) {
this.$confirm("确认关闭?")
.then((_) => {
done();
})
.catch((_) => {});
},
switchJournal(val) { switchJournal(val) {
this.switchState = val.id; this.switchState = val.id;
console.log(val); console.log(val);
...@@ -285,6 +368,7 @@ export default { ...@@ -285,6 +368,7 @@ export default {
}, },
importXmlFileDialogFun() { importXmlFileDialogFun() {
this.saveOutputDialog(this.form);
this.handleClose(); this.handleClose();
}, },
}, },
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
</el-col> </el-col>
<el-col class="line" :span="2"> <el-col class="line" :span="2">
<el-button size="mini">浏览</el-button> <el-button size="mini" @click="filePathSelection = true">浏览</el-button>
</el-col> </el-col>
</el-row> </el-row>
</el-form-item> </el-form-item>
...@@ -117,22 +117,20 @@ ...@@ -117,22 +117,20 @@
<el-form-item <el-form-item
label="输入原步骤名(如果只有一个步骤该项可以为空)" label="输入原步骤名(如果只有一个步骤该项可以为空)"
> >
<el-row :gutter="10"> <el-select
<el-col :span="20"> v-model="form.lookup"
<el-input style="width: 100%"
v-model="inputLies.input_step" clearable
:disabled="inputLies.main_path == 'Y'" @click.native="lastStep"
></el-input> :disabled="inputLies.main_path == 'Y'"
</el-col> >
<el-option
<el-col class="line" :span="2"> v-for="item in connectionNode"
<el-button :key="item.index"
size="mini" :label="item.name"
:disabled="inputLies.main_path == 'Y'" :value="item.name"
>选择</el-button />
> </el-select>
</el-col>
</el-row>
</el-form-item> </el-form-item>
<el-form-item label="子转换里的“映射输入接口”步骤名"> <el-form-item label="子转换里的“映射输入接口”步骤名">
<el-row :gutter="10"> <el-row :gutter="10">
...@@ -168,15 +166,14 @@ ...@@ -168,15 +166,14 @@
height=" 250 " height=" 250 "
border border
style="width: 100%" style="width: 100%"
:row-style="{ height: '10px' }"
:cell-style="{ height: '10px' }"
> >
<el-table-column prop="parent" label="原字段名"> <el-table-column prop="parent" label="原字段名">
</el-table-column> </el-table-column>
<el-table-column prop="child" label="要映射成的字段名"> <el-table-column prop="child" label="要映射成的字段名">
</el-table-column> </el-table-column>
<el-table-column label="操作" width="120"> <el-table-column label="操作" width="90">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@click="addInputField(false, scope.row)" @click="addInputField(false, scope.row)"
...@@ -195,12 +192,21 @@ ...@@ -195,12 +192,21 @@
</el-table> </el-table>
<el-form :model="form"> <el-form :model="form">
<el-form-item> <el-form-item>
<el-row :gutter="10">
<el-col :span="19">
<el-checkbox <el-checkbox
v-model="form.rename_on_output" v-model="form.rename_on_output"
true-label="Y" true-label="Y"
false-label="N" false-label="N"
></el-checkbox> ></el-checkbox>
输出时字段名再重新映射回原来输入时的名字? 输出时字段名再重新映射回原来输入时的名字?
</el-col>
<el-col :span="4">
<el-button @click="fieldMapping">字段映射...</el-button>
</el-col>
</el-row>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
...@@ -237,7 +243,7 @@ ...@@ -237,7 +243,7 @@
checked: outputIndex == index, checked: outputIndex == index,
}" }"
> >
{{ item.input_step || `输${index + 1}` }} {{ item.input_step || `输${index + 1}` }}
</li> </li>
</ul> </ul>
</div> </div>
...@@ -317,7 +323,7 @@ ...@@ -317,7 +323,7 @@
<el-table-column prop="child" label="要映射成的字段名"> <el-table-column prop="child" label="要映射成的字段名">
</el-table-column> </el-table-column>
<el-table-column label="操作" width="60"> <el-table-column label="操作" width="90">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@click="addOutputField(false, scope.row)" @click="addOutputField(false, scope.row)"
...@@ -408,6 +414,29 @@ ...@@ -408,6 +414,29 @@
<el-button type="primary" @click="addoutputBoxFun">确 定</el-button> <el-button type="primary" @click="addoutputBoxFun">确 定</el-button>
</span> </span>
</el-dialog> </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> </div>
</template> </template>
...@@ -434,8 +463,9 @@ import { ...@@ -434,8 +463,9 @@ import {
valueMeta, valueMeta,
formatMapperLineTerminator, formatMapperLineTerminator,
availableCharsets, availableCharsets,
compressionProviderNames, previousSteps,
inputOutputFields, inputOutputFields,
mappingFields
} from "@/api/kettle/link"; } from "@/api/kettle/link";
export default { export default {
props: ["form", "nodeData", "saveOutputDialog", "mappingDialog"], //从父组件传过来的值 props: ["form", "nodeData", "saveOutputDialog", "mappingDialog"], //从父组件传过来的值
...@@ -445,8 +475,10 @@ export default { ...@@ -445,8 +475,10 @@ export default {
}, },
data() { data() {
return { return {
connectionNode: [],
tableData: [], tableData: [],
newGraph: [], newGraph: [],
filePathSelection:false,
metadataBox: false, metadataBox: false,
selectModifyBox: false, selectModifyBox: false,
inputBox: false, inputBox: false,
...@@ -456,7 +488,6 @@ export default { ...@@ -456,7 +488,6 @@ export default {
metadataForm: {}, metadataForm: {},
selectModifyForm: {}, selectModifyForm: {},
fieldFormat: {}, fieldFormat: {},
fieldCompress: {},
fieldType: {}, fieldType: {},
dataState: false, dataState: false,
fileType: [], fileType: [],
...@@ -474,6 +505,7 @@ export default { ...@@ -474,6 +505,7 @@ export default {
inputState: 1, inputState: 1,
mappings: {}, mappings: {},
inherit: "Y", inherit: "Y",
localPath:{},
}; };
}, },
...@@ -482,7 +514,6 @@ export default { ...@@ -482,7 +514,6 @@ export default {
this.valueMetaFun(); this.valueMetaFun();
this.formatMapperLineTerminatorFun(); this.formatMapperLineTerminatorFun();
this.availableCharsetsFun(); this.availableCharsetsFun();
this.compressionProviderNamesFun();
}, },
methods: { methods: {
...@@ -544,6 +575,35 @@ export default { ...@@ -544,6 +575,35 @@ export default {
} }
}, },
fieldMapping(){
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);
mappingFields(pamerFields).then(res=>{
console.log(res);
})
},
route(flowData){
this.localPath.fileName = flowData.name
console.log(this.localPath);
},
addFilePathSelection(){
this.filePathSelection = !this.filePathSelection
this.form.directory = this.localPath.fileName
},
inputSelection(val, index) { inputSelection(val, index) {
this.inputIndex = index; this.inputIndex = index;
console.log(val); console.log(val);
...@@ -627,13 +687,27 @@ export default { ...@@ -627,13 +687,27 @@ export default {
pamerFields.append("graphXml", this.graphXml); pamerFields.append("graphXml", this.graphXml);
pamerFields.append("before", true); pamerFields.append("before", true);
inputOutputFields(pamerFields).then((res) => { inputOutputFields(pamerFields).then((res) => {
this.parameters = res; // this.parameters = res;
res.forEach((item,index)=>{
console.log(item,index);
this.parameters.push({
variable:item.name
})
})
console.log(res);
}); });
}, },
compressionProviderNamesFun() { lastStep() {
compressionProviderNames().then((res) => { var enc = new mxCodec(mxUtils.createXmlDocument());
this.fieldCompress = res; var node = enc.encode(this.newGraph.getModel());
this.graphXml = mxUtils.getPrettyXml(node);
let pamerSteps = new FormData(); // 创建form对象
pamerSteps.append("stepName", this.nodeData.value.attributes.label.value);
pamerSteps.append("graphXml", this.graphXml);
pamerSteps.append("query", "");
previousSteps(pamerSteps).then((res) => {
this.connectionNode = res;
}); });
}, },
......
...@@ -303,7 +303,6 @@ export default { ...@@ -303,7 +303,6 @@ export default {
getGraphDataBases() { getGraphDataBases() {
// var graph = this.getGraph(); // var graph = this.getGraph();
var root = this.newGraph.getDefaultParent(), var root = this.newGraph.getDefaultParent(),
data = []; data = [];
if (root.getAttribute("databases") != null) if (root.getAttribute("databases") != null)
......
...@@ -6,562 +6,712 @@ ...@@ -6,562 +6,712 @@
width="800px" width="800px"
:before-close="handleCloseFun" :before-close="handleCloseFun"
> >
<el-form ref="from" :model="form" label-width="120px"> <el-form ref="from" :model="form" label-width="120px">
<el-form-item label="步骤名称:"> <el-form-item label="步骤名称:">
<el-input v-model="form.label"></el-input> <el-input v-model="form.label"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-tabs type="border-card">
<el-tab-pane label="文件">
<el-form ref="form" :model="fileSelection" label-width="150px">
<el-form-item label="文件名称:">
<el-row :gutter="10">
<el-col :span="17">
<el-input v-model="fileSelection.fileName" :disabled="form.acceptingFilenames == 'Y' "></el-input>
</el-col>
<el-col class="line" :span="3">
<el-button size="mini" @click="addFile" :disabled="form.acceptingFilenames == 'Y' ">增加</el-button></el-col
>
<el-col class="line" :span="3">
<el-button size="mini" @click="selectFilePath(1)" :disabled="form.acceptingFilenames == 'Y' ">浏览</el-button></el-col
>
</el-row>
</el-form-item>
<el-form-item label="规则表达式:"> <el-tabs type="border-card">
<el-input v-model="fileSelection.fileMask" :disabled="form.acceptingFilenames == 'Y' "></el-input> <el-tab-pane label="文件">
</el-form-item> <el-form ref="form" :model="fileSelection" label-width="150px">
<el-form-item label="文件名称:">
<el-row :gutter="10">
<el-col :span="17">
<el-input
v-model="fileSelection.fileName"
:disabled="form.acceptingFilenames == 'Y'"
></el-input>
</el-col>
<el-col class="line" :span="3">
<el-button
size="mini"
@click="addFile"
:disabled="form.acceptingFilenames == 'Y'"
>增加</el-button
></el-col
>
<el-col class="line" :span="3">
<el-button
size="mini"
@click="selectFilePath(1)"
:disabled="form.acceptingFilenames == 'Y'"
>浏览</el-button
></el-col
>
</el-row>
</el-form-item>
<el-form-item label="正则表达式(排除):"> <el-form-item label="规则表达式:">
<el-input v-model="fileSelection.excludeFileMask" :disabled="form.acceptingFilenames == 'Y' "></el-input> <el-input
</el-form-item> v-model="fileSelection.fileMask"
:disabled="form.acceptingFilenames == 'Y'"
></el-input>
</el-form-item>
<el-form-item label="选中的文件:"> <el-form-item label="正则表达式(排除):">
<el-input
v-model="fileSelection.excludeFileMask"
:disabled="form.acceptingFilenames == 'Y'"
></el-input>
</el-form-item>
<el-form-item label="选中的文件:">
<el-card class="box-card">
<el-table :data="fileNameStore" style="width: 100%">
<el-table-column
prop="fileName"
label="文件/目录"
width="120"
>
</el-table-column>
<el-table-column prop="filemask" label="通配符">
</el-table-column>
<el-table-column
prop="excludeFileMask"
label="通配符号(排除)"
>
</el-table-column>
<el-table-column prop="fileRequired" label="要求">
</el-table-column>
<el-table-column prop="includeSubFolders" label="包含子目录">
</el-table-column>
<el-table-column label="操作" width="120px">
<template slot-scope="scope">
<el-button
@click="handleClick(scope.row)"
type="text"
size="small"
:disabled="form.acceptingFilenames == 'Y'"
>编辑</el-button
>
<el-button
type="text"
size="small"
@click="deleteRow(scope.$index, fileNameStore)"
:disabled="form.acceptingFilenames == 'Y'"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-card>
</el-form-item>
</el-form>
<el-form ref="form" :model="form" label-width="200px">
<el-card class="box-card"> <el-card class="box-card">
<el-table :data="fileNameStore" style="width: 100%"> <el-form-item label="从以前步骤接受文件名:">
<el-table-column prop="fileName" label="文件/目录" width="120"> <el-checkbox
</el-table-column> v-model="form.acceptingFilenames"
<el-table-column prop="filemask" label="通配符"> true-label="Y"
</el-table-column> false-label="N"
<el-table-column ></el-checkbox>
prop="excludeFileMask" </el-form-item>
label="通配符号(排除)"
<el-form-item label="从以前步骤接受字段名:">
<el-checkbox
v-model="form.passingThruFields"
:disabled="
form.acceptingFilenames == 'N' || !form.acceptingFilenames
"
true-label="Y"
false-label="N"
></el-checkbox>
</el-form-item>
<el-form-item label="步骤读取的文件名来自:">
<el-select
v-model="form.acceptingField"
style="width: 100%"
:disabled="
form.acceptingFilenames == 'N' || !form.acceptingFilenames
"
clearable
> >
</el-table-column> <el-option
<el-table-column prop="fileRequired" label="要求"> v-for="item in connectionNode"
</el-table-column> :key="item.id"
<el-table-column prop="includeSubFolders" label="包含子目录"> :label="item.name"
</el-table-column> :value="item.name"
<el-table-column label="操作" width="120px"> />
<template slot-scope="scope"> </el-select>
<el-button </el-form-item>
@click="handleClick(scope.row)"
type="text" <el-form-item label="在输入里的字段被当做文件名:">
size="small" <el-input
:disabled="form.acceptingFilenames == 'Y'" v-model="form.acceptingStepName"
>编辑</el-button :disabled="
> form.acceptingFilenames == 'N' || !form.acceptingFilenames
<el-button "
type="text" ></el-input>
size="small" </el-form-item>
@click="deleteRow(scope.$index, fileNameStore)"
:disabled="form.acceptingFilenames == 'Y'"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-card> </el-card>
</el-form-item> </el-form>
</el-form> </el-tab-pane>
<el-form ref="form" :model="form" label-width="200px">
<el-card class="box-card"> <el-tab-pane label="内容">
<el-form-item label="从以前步骤接受文件名:"> <el-form ref="form" :model="form" label-width="200px">
<el-checkbox v-model="form.acceptingFilenames" true-label="Y" false-label="N"></el-checkbox> <el-form-item label="文件类型:">
<el-select v-model="form.fileType" style="width: 100%" clearable>
<el-option label="CSV" value="CSV"></el-option>
<el-option label="Fixed" value="Fixed"></el-option>
</el-select>
</el-form-item>
<el-form-item label="分割符:">
<el-row :gutter="10">
<el-col :span="20">
<el-input v-model="form.separator"></el-input>
</el-col>
<el-col class="line" :span="2">
<el-button size="mini">插入TAB</el-button></el-col
>
</el-row>
</el-form-item>
<el-form-item label="文本限定符:">
<el-input v-model="form.enclosure"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="从以前步骤接受字段名:"> <el-form-item label="在文本里允许换行:">
<el-checkbox <el-checkbox
v-model="form.passingThruFields" v-model="form.breakInEnclosureAllowed"
:disabled="form.acceptingFilenames == 'N' || !form.acceptingFilenames" true-label="Y"
true-label="Y" false-label="N" false-label="N"
></el-checkbox> ></el-checkbox>
</el-form-item> </el-form-item>
<el-form-item label="步骤读取的文件名来自:"> <el-form-item label="逃逸字符:">
<el-select v-model="form.acceptingField" style="width: 100%" :disabled="form.acceptingFilenames == 'N' || !form.acceptingFilenames" clearable> <el-input v-model="form.escapeCharacter"></el-input>
<el-option
v-for="item in connectionNode"
:key="item.id"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="在输入里的字段被当做文件名:"> <el-form-item label="头部:">
<el-input <el-row :gutter="10">
v-model="form.acceptingStepName" <el-col :span="2">
:disabled="form.acceptingFilenames == 'N' || !form.acceptingFilenames" <el-checkbox
></el-input> v-model="form.header"
true-label="Y"
false-label="N"
></el-checkbox>
</el-col>
<el-col class="line" :span="4">头部行数:</el-col>
<el-col :span="17">
<el-input
v-model="form.nrHeaderLines"
:disabled="form.header == 'N' || !form.header"
></el-input>
</el-col>
</el-row>
</el-form-item> </el-form-item>
</el-card>
</el-form>
</el-tab-pane>
<el-tab-pane label="内容">
<el-form ref="form" :model="form" label-width="200px">
<el-form-item label="文件类型:">
<el-select v-model="form.fileType" style="width: 100%" clearable>
<el-option label="CSV" value="CSV"></el-option>
<el-option label="Fixed" value="Fixed"></el-option>
</el-select>
</el-form-item>
<el-form-item label="分割符:">
<el-row :gutter="10">
<el-col :span="20">
<el-input v-model="form.separator"></el-input>
</el-col>
<el-col class="line" :span="2">
<el-button size="mini">插入TAB</el-button></el-col
>
</el-row>
</el-form-item>
<el-form-item label="文本限定符:">
<el-input v-model="form.enclosure"></el-input>
</el-form-item>
<el-form-item label="在文本里允许换行:">
<el-checkbox v-model="form.breakInEnclosureAllowed" true-label="Y" false-label="N"></el-checkbox>
</el-form-item>
<el-form-item label="逃逸字符:">
<el-input v-model="form.escapeCharacter"></el-input>
</el-form-item>
<el-form-item label="头部:">
<el-row :gutter="10">
<el-col :span="2">
<el-checkbox v-model="form.header" true-label="Y" false-label="N"></el-checkbox>
</el-col>
<el-col class="line" :span="4">头部行数:</el-col>
<el-col :span="17">
<el-input
v-model="form.nrHeaderLines"
:disabled="form.header == 'N' || !form.header"
></el-input>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="尾部:">
<el-row :gutter="10">
<el-col :span="2">
<el-checkbox v-model="form.footer" true-label="Y" false-label="N"></el-checkbox>
</el-col>
<el-col class="line" :span="4">尾部行数:</el-col>
<el-col :span="17">
<el-input
v-model="form.nrFooterLines"
:disabled="form.footer == 'N' || !form.footer"
></el-input>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="包装行:">
<el-row :gutter="10">
<el-col :span="2">
<el-checkbox v-model="form.lineWrapped" true-label="Y" false-label="N"></el-checkbox>
</el-col>
<el-col class="line" :span="6">以时间包装的行数:</el-col>
<el-col :span="15">
<el-input
v-model="form.nrWraps"
:disabled="form.lineWrapped == 'N' || !form.lineWrapped"
></el-input>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="分页布局(pointout):">
<el-row :gutter="10">
<el-col :span="2">
<el-checkbox v-model="form.layoutPaged" true-label="Y" false-label="N"></el-checkbox>
</el-col>
<el-col class="line" :span="5">每页记录行数:</el-col>
<el-col :span="16">
<el-input
v-model="form.nrLinesPerPage"
:disabled="form.layoutPaged == 'N' || !form.layoutPaged"
></el-input>
</el-col>
</el-row>
<el-row :gutter="10" style="margin-top: 5px">
<el-col class="line" :span="4" :offset="2">文档头部行:</el-col>
<el-col :span="17">
<el-input
v-model="form.nrLinesDocHeader"
:disabled="form.layoutPaged == 'N' || !form.layoutPaged"
></el-input>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="压缩:"> <el-form-item label="尾部:">
<el-row :gutter="10">
<el-col :span="2">
<el-checkbox
v-model="form.footer"
true-label="Y"
false-label="N"
></el-checkbox>
</el-col>
<el-col class="line" :span="4">尾部行数:</el-col>
<el-col :span="17">
<el-input
v-model="form.nrFooterLines"
:disabled="form.footer == 'N' || !form.footer"
></el-input>
</el-col>
</el-row>
</el-form-item>
<el-select v-model="form.fileCompression" style="width: 100%" clearable> <el-form-item label="包装行:">
<el-option <el-row :gutter="10">
v-for="item in fieldCompress" <el-col :span="2">
:key="item.index" <el-checkbox
:label="item.name" v-model="form.lineWrapped"
:value="item.name" true-label="Y"
/></el-select> false-label="N"
></el-checkbox>
</el-col>
</el-form-item> <el-col class="line" :span="6">以时间包装的行数:</el-col>
<el-col :span="15">
<el-form-item label="没有空行:"> <el-input
<el-checkbox v-model="form.noEmptyLines" true-label="Y" false-label="N"></el-checkbox> v-model="form.nrWraps"
</el-form-item> :disabled="form.lineWrapped == 'N' || !form.lineWrapped"
></el-input>
<el-form-item label="在输出包括字段名:"> </el-col>
<el-row :gutter="10"> </el-row>
<el-col :span="2"> </el-form-item>
<el-checkbox v-model="form.includeFilename" true-label="Y" false-label="N"></el-checkbox>
</el-col>
<el-col class="line" :span="5">包含字段名名称:</el-col>
<el-col :span="16">
<el-input
v-model="form.filenameField"
:disabled="form.includeFilename == 'N' || !form.includeFilename"
></el-input>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="输出包含行数:">
<el-row :gutter="10">
<el-col :span="2">
<el-checkbox v-model="form.includeRowNumber" true-label="Y" false-label="N"></el-checkbox>
</el-col>
<el-col class="line" :span="5">行数字段名称:</el-col>
<el-col :span="16">
<el-input
v-model="form.rowNumberField"
:disabled="form.includeRowNumber == 'N' || !form.includeFilename"
></el-input>
</el-col>
</el-row>
<el-row :gutter="10" style="margin-top: 5px">
<el-col class="line" :span="5" :offset="2">按文件取行号:</el-col>
<el-col :span="1">
<el-checkbox
v-model="form.rowNumberByFile"
:disabled="form.includeRowNumber == 'N' || !form.includeFilename"
true-label="Y" false-label="N"
></el-checkbox>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="格式:">
<el-select v-model="form.fileFormat" style="width: 100%" clearable>
<el-option
v-for="item in fileType"
:key="item.index"
:label="item.name"
:value="item.name"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="编码:"> <el-form-item label="分页布局(pointout):">
<el-row :gutter="10">
<el-col :span="2">
<el-checkbox
v-model="form.layoutPaged"
true-label="Y"
false-label="N"
></el-checkbox>
</el-col>
<el-col class="line" :span="5">每页记录行数:</el-col>
<el-col :span="16">
<el-input
v-model="form.nrLinesPerPage"
:disabled="form.layoutPaged == 'N' || !form.layoutPaged"
></el-input>
</el-col>
</el-row>
<el-row :gutter="10" style="margin-top: 5px">
<el-col class="line" :span="4" :offset="2">文档头部行:</el-col>
<el-col :span="17">
<el-input
v-model="form.nrLinesDocHeader"
:disabled="form.layoutPaged == 'N' || !form.layoutPaged"
></el-input>
</el-col>
</el-row>
</el-form-item>
<el-select v-model="form.encoding" filterable style="width: 100%" clearable> <el-form-item label="压缩:">
<el-option <el-select
v-for="item in codingType" v-model="form.fileCompression"
style="width: 100%"
clearable
>
<el-option
v-for="item in fieldCompress"
:key="item.index" :key="item.index"
:label="item.name" :label="item.name"
:value="item.name" :value="item.name"
/></el-select>
</el-form-item>
<el-form-item label="没有空行:">
<el-checkbox
v-model="form.noEmptyLines"
true-label="Y"
false-label="N"
></el-checkbox>
</el-form-item>
<el-form-item label="在输出包括字段名:">
<el-row :gutter="10">
<el-col :span="2">
<el-checkbox
v-model="form.includeFilename"
true-label="Y"
false-label="N"
></el-checkbox>
</el-col>
<el-col class="line" :span="5">包含字段名名称:</el-col>
<el-col :span="16">
<el-input
v-model="form.filenameField"
:disabled="
form.includeFilename == 'N' || !form.includeFilename
"
></el-input>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="输出包含行数:">
<el-row :gutter="10">
<el-col :span="2">
<el-checkbox
v-model="form.includeRowNumber"
true-label="Y"
false-label="N"
></el-checkbox>
</el-col>
<el-col class="line" :span="5">行数字段名称:</el-col>
<el-col :span="16">
<el-input
v-model="form.rowNumberField"
:disabled="
form.includeRowNumber == 'N' || !form.includeFilename
"
></el-input>
</el-col>
</el-row>
<el-row :gutter="10" style="margin-top: 5px">
<el-col class="line" :span="5" :offset="2"
>按文件取行号:</el-col
>
<el-col :span="1">
<el-checkbox
v-model="form.rowNumberByFile"
:disabled="
form.includeRowNumber == 'N' || !form.includeFilename
"
true-label="Y"
false-label="N"
></el-checkbox>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="格式:">
<el-select
v-model="form.fileFormat"
style="width: 100%"
clearable
>
<el-option
v-for="item in fileType"
:key="item.index"
:label="item.name"
:value="item.name"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item>
</el-form-item>
<el-form-item label="记录数量限制:">
<el-input v-model="form.rowLimit"></el-input>
</el-form-item>
<el-form-item label="解析日期的时候是否严格要求:">
<el-checkbox v-model="form.dateFormatLenient" true-label="Y" false-label="N"></el-checkbox>
</el-form-item>
<el-form-item label="本地日期格式:">
<el-input v-model="form.dateFormatLocale" true-label="Y" false-label="N"></el-input>
</el-form-item>
<el-form-item label="添加文件名:">
<el-checkbox v-model="form.addresult" true-label="Y" false-label="N"></el-checkbox>
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane label="错误处理">
<el-form ref="form" :model="form" label-width="160px">
<el-form-item label="忽略错误:">
<el-checkbox v-model="form.errorIgnored" true-label="Y" false-label="N"></el-checkbox>
</el-form-item>
<el-form-item label="忽略错误文件:">
<el-checkbox
v-model="form.skipBadFiles"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored"
true-label="Y" false-label="N"
></el-checkbox>
</el-form-item>
<el-form-item label="错误文件字段名:">
<el-input
v-model="form.fileErrorField"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored "
></el-input>
</el-form-item>
<el-form-item label="文件错误信息字段名:">
<el-input
v-model="form.fileErrorMessageField"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored"
></el-input>
</el-form-item>
<el-form-item label="跳过错误行:">
<el-checkbox
v-model="form.errorLineSkipped"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored"
true-label="Y" false-label="N"
></el-checkbox>
</el-form-item>
<el-form-item label="错误计数制度:">
<el-input
v-model="form.errorCountField "
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored"
></el-input>
</el-form-item>
<el-form-item label="错误字段文件名:">
<el-input
v-model="form.errorFieldsField"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored"
></el-input>
</el-form-item>
<el-form-item label="错误文本字段:">
<el-input
v-model="form.errorTextField"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored"
></el-input>
</el-form-item>
<el-form-item label="告警文件目录:">
<el-row :gutter="10">
<el-col :span="10">
<el-input
v-model="form.warningFilesDestinationDirectory"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored"
></el-input>
</el-col>
<el-col class="line" :span="3">扩展名:</el-col>
<el-col :span="8">
<el-input
v-model="form.warningFilesExtension"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored"
></el-input>
</el-col>
<el-col class="line" :span="2"> <el-form-item label="编码:">
<el-button :disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored" size="mini" @click="selectFilePath(2)">浏览</el-button></el-col <el-select
v-model="form.encoding"
filterable
style="width: 100%"
clearable
> >
</el-row> <el-option
</el-form-item> 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-form-item label="记录数量限制:">
<el-row :gutter="10"> <el-input v-model="form.rowLimit"></el-input>
<el-col :span="10"> </el-form-item>
<el-input
v-model="form.errorFilesDestinationDirectory"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored"
></el-input>
</el-col>
<el-col class="line" :span="3">扩展名:</el-col>
<el-col :span="8">
<el-input
v-model="form.errorFilesExtension"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored"
></el-input>
</el-col>
<el-col class="line" :span="2"> <el-form-item label="解析日期的时候是否严格要求:">
<el-button :disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored" size="mini" @click="selectFilePath(3)">浏览</el-button></el-col <el-checkbox
> v-model="form.dateFormatLenient"
</el-row> true-label="Y"
</el-form-item> false-label="N"
></el-checkbox>
</el-form-item>
<el-form-item label="失败行数文件目录:"> <el-form-item label="本地日期格式:">
<el-row :gutter="10"> <el-input
<el-col :span="10"> v-model="form.dateFormatLocale"
<el-input true-label="Y"
v-model="form.lineNumberFilesDestinationDirectory" false-label="N"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored" ></el-input>
></el-input> </el-form-item>
</el-col>
<el-col class="line" :span="3">扩展名:</el-col>
<el-col :span="8">
<el-input
v-model="form.lineNumberFilesExtension"
:disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored"
></el-input>
</el-col>
<el-col class="line" :span="2"> <el-form-item label="添加文件名:">
<el-button :disabled="this.form.errorIgnored == 'N' || !this.form.errorIgnored" size="mini" @click="selectFilePath(4)">浏览</el-button></el-col <el-checkbox
> v-model="form.addresult"
</el-row> true-label="Y"
</el-form-item> false-label="N"
</el-form> ></el-checkbox>
</el-tab-pane> </el-form-item>
<el-tab-pane label="过滤"> </el-form>
<el-button type="text" @click="filterClick(true)" </el-tab-pane>
>添加过滤字段</el-button <el-tab-pane label="错误处理">
> <el-form ref="form" :model="form" label-width="160px">
<el-form-item label="忽略错误:">
<el-checkbox
v-model="form.errorIgnored"
true-label="Y"
false-label="N"
></el-checkbox>
</el-form-item>
<el-table :data="filter" style="width: 100%"> <el-form-item label="忽略错误文件:">
<el-table-column prop="filterString" label="过滤器字符串"> <el-checkbox
</el-table-column> v-model="form.skipBadFiles"
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
true-label="Y"
false-label="N"
></el-checkbox>
</el-form-item>
<el-table-column prop="filterPosition" label="过滤器位置"> <el-form-item label="错误文件字段名:">
</el-table-column> <el-input
v-model="form.fileErrorField"
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
></el-input>
</el-form-item>
<el-table-column prop="filterLastLine" label="停止在过滤器"> <el-form-item label="文件错误信息字段名:">
<el-input
</el-table-column> v-model="form.fileErrorMessageField"
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
></el-input>
</el-form-item>
<el-table-column prop="filterPositive" label="积极匹配"> <el-form-item label="跳过错误行:">
</el-table-column> <el-checkbox
v-model="form.errorLineSkipped"
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
true-label="Y"
false-label="N"
></el-checkbox>
</el-form-item>
<el-table-column label="操作" width="100px"> <el-form-item label="错误计数制度:">
<template slot-scope="scope"> <el-input
<el-button v-model="form.errorCountField"
@click="filterClick(false, scope.row)" :disabled="
type="text" this.form.errorIgnored == 'N' || !this.form.errorIgnored
size="small" "
>编辑</el-button ></el-input>
> </el-form-item>
<el-button
type="text" <el-form-item label="错误字段文件名:">
size="small" <el-input
@click="deleteFilter(scope.$index, filter)" v-model="form.errorFieldsField"
>删除</el-button :disabled="
> this.form.errorIgnored == 'N' || !this.form.errorIgnored
</template> "
</el-table-column> ></el-input>
</el-table> </el-form-item>
</el-tab-pane>
<el-tab-pane label="字段"> <el-form-item label="错误文本字段:">
<el-button type="text" @click="fieldClick(true)">添加字段</el-button> <el-input
<el-button type="text" @click="getTheField">获取字段</el-button> v-model="form.errorTextField"
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
></el-input>
</el-form-item>
<el-table :data="inputFields" style="width: 100%"> <el-form-item label="告警文件目录:">
<el-table-column prop="name" label="名称"> </el-table-column>g <el-row :gutter="10">
<el-col :span="10">
<el-input
v-model="form.warningFilesDestinationDirectory"
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
></el-input>
</el-col>
<el-col class="line" :span="3">扩展名:</el-col>
<el-col :span="8">
<el-input
v-model="form.warningFilesExtension"
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
></el-input>
</el-col>
<el-col class="line" :span="2">
<el-button
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
size="mini"
@click="selectFilePath(2)"
>浏览</el-button
></el-col
>
</el-row>
</el-form-item>
<el-table-column prop="type" label="类型"> </el-table-column> <el-form-item label="错误文件目录:">
<el-row :gutter="10">
<el-col :span="10">
<el-input
v-model="form.errorFilesDestinationDirectory"
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
></el-input>
</el-col>
<el-col class="line" :span="3">扩展名:</el-col>
<el-col :span="8">
<el-input
v-model="form.errorFilesExtension"
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
></el-input>
</el-col>
<el-col class="line" :span="2">
<el-button
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
size="mini"
@click="selectFilePath(3)"
>浏览</el-button
></el-col
>
</el-row>
</el-form-item>
<el-table-column prop="format" label="格式"> </el-table-column> <el-form-item label="失败行数文件目录:">
<el-row :gutter="10">
<el-col :span="10">
<el-input
v-model="form.lineNumberFilesDestinationDirectory"
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
></el-input>
</el-col>
<el-col class="line" :span="3">扩展名:</el-col>
<el-col :span="8">
<el-input
v-model="form.lineNumberFilesExtension"
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
></el-input>
</el-col>
<el-col class="line" :span="2">
<el-button
:disabled="
this.form.errorIgnored == 'N' || !this.form.errorIgnored
"
size="mini"
@click="selectFilePath(4)"
>浏览</el-button
></el-col
>
</el-row>
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane label="过滤">
<el-button type="text" @click="filterClick(true)"
>添加过滤字段</el-button
>
<el-table :data="filter" style="width: 100%">
<el-table-column prop="filterString" label="过滤器字符串">
</el-table-column>
<el-table-column prop="filterPosition" label="过滤器位置">
</el-table-column>
<el-table-column prop="filterLastLine" label="停止在过滤器">
</el-table-column>
<el-table-column prop="filterPositive" label="积极匹配">
</el-table-column>
<el-table-column label="操作" width="100px">
<template slot-scope="scope">
<el-button
@click="filterClick(false, scope.row)"
type="text"
size="small"
>编辑</el-button
>
<el-button
type="text"
size="small"
@click="deleteFilter(scope.$index, filter)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-table-column prop="position" 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="nullif" label="Null if"> </el-table-column> <el-table-column prop="precision" label="精度"> </el-table-column>
<el-table-column prop="ifnull" label="默认"> </el-table-column> <el-table-column prop="currency" label="货币"> </el-table-column>
<el-table-column prop="trim_type" label="去除空字符串..."> <el-table-column prop="decimal" label="小数"> </el-table-column>
</el-table-column>
<el-table-column prop="repeat" label="重复"> </el-table-column> <el-table-column prop="group" label="分组"> </el-table-column>
<el-table-column label="操作" width="100px"> <el-table-column prop="nullif" label="Null if"> </el-table-column>
<template slot-scope="scope">
<el-button @click="fieldClick(false,scope.row)" type="text" size="small" <el-table-column prop="ifnull" label="默认"> </el-table-column>
>编辑</el-button
> <el-table-column prop="trim_type" label="去除空字符串...">
<el-button </el-table-column>
type="text"
size="small" <el-table-column prop="repeat" label="重复"> </el-table-column>
@click="deleteField(scope.$index, inputFields)"
>删除</el-button <el-table-column label="操作" width="100px">
> <template slot-scope="scope">
</template> <el-button
</el-table-column> @click="fieldClick(false, scope.row)"
</el-table> type="text"
</el-tab-pane> size="small"
>编辑</el-button
<el-tab-pane label="其他输出字段"> >
<el-form ref="from" :model="form" label-width="160px"> <el-button
<el-form-item label="文件名字段:"> type="text"
<el-input v-model="form.shortFilenameField"></el-input> size="small"
</el-form-item> @click="deleteField(scope.$index, inputFields)"
>删除</el-button
<el-form-item label="扩展名字段:"> >
<el-input v-model="form.extensionField"></el-input> </template>
</el-form-item> </el-table-column>
</el-table>
<el-form-item label="路径字段:"> </el-tab-pane>
<el-input v-model="form.pathField"></el-input>
</el-form-item> <el-tab-pane label="其他输出字段">
<el-form ref="from" :model="form" label-width="160px">
<el-form-item label="文件大小字段:"> <el-form-item label="文件名字段:">
<el-input v-model="form.sizeField"></el-input> <el-input v-model="form.shortFilenameField"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="是否为隐藏文件字段:"> <el-form-item label="扩展名字段:">
<el-input v-model="form.hiddenField"></el-input> <el-input v-model="form.extensionField"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="最后修改时间字段:"> <el-form-item label="路径字段:">
<el-input v-model="form.lastModificationField"></el-input> <el-input v-model="form.pathField"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="Uri字段:"> <el-form-item label="文件大小字段:">
<el-input v-model="form.uriField"></el-input> <el-input v-model="form.sizeField"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="Root uri字段:"> <el-form-item label="是否为隐藏文件字段:">
<el-input v-model="form.rootUriField"></el-input> <el-input v-model="form.hiddenField"></el-input>
</el-form-item> </el-form-item>
</el-form>
</el-tab-pane> <el-form-item label="最后修改时间字段:">
</el-tabs> <el-input v-model="form.lastModificationField"></el-input>
</el-form-item>
<span slot="footer" class="dialog-footer"> <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-tab-pane>
</el-tabs>
<span slot="footer" class="dialog-footer">
<el-button @click="handleCloseFun">取 消</el-button> <el-button @click="handleCloseFun">取 消</el-button>
<el-button type="primary" @click="TextFileInputDialogFun" <el-button type="primary" @click="TextFileInputDialogFun"
...@@ -570,8 +720,6 @@ ...@@ -570,8 +720,6 @@
</span> </span>
</el-dialog> </el-dialog>
<el-dialog <el-dialog
title="修改文件内容" title="修改文件内容"
:visible.sync="fileBox" :visible.sync="fileBox"
...@@ -580,7 +728,7 @@ ...@@ -580,7 +728,7 @@
:modal="false" :modal="false"
> >
<el-form ref="form" :model="fielForm" label-width="160px"> <el-form ref="form" :model="fielForm" label-width="160px">
<el-form-item label="文件/目录:"> <el-form-item label="文件/目录:">
<el-input v-model="fielForm.name" :disabled="true"></el-input> <el-input v-model="fielForm.name" :disabled="true"></el-input>
</el-form-item> </el-form-item>
...@@ -613,9 +761,6 @@ ...@@ -613,9 +761,6 @@
</span> </span>
</el-dialog> </el-dialog>
<el-dialog <el-dialog
title="添加字段" title="添加字段"
:visible.sync="fieldBox" :visible.sync="fieldBox"
...@@ -640,7 +785,11 @@ ...@@ -640,7 +785,11 @@
</el-form-item> </el-form-item>
<el-form-item label="格式:"> <el-form-item label="格式:">
<el-select v-model="metadataForm.format" style="width: 100%" clearable> <el-select
v-model="metadataForm.format"
style="width: 100%"
clearable
>
<el-option <el-option
v-for="item in fieldFormat" v-for="item in fieldFormat"
:key="item.index" :key="item.index"
...@@ -686,7 +835,11 @@ ...@@ -686,7 +835,11 @@
</el-form-item> </el-form-item>
<el-form-item label="去除空格类型:"> <el-form-item label="去除空格类型:">
<el-select v-model="metadataForm.trim_type" style="width: 100%" clearable> <el-select
v-model="metadataForm.trim_type"
style="width: 100%"
clearable
>
<el-option label="不去掉空格" value="none"></el-option> <el-option label="不去掉空格" value="none"></el-option>
<el-option label="去掉左空格" value="left"></el-option> <el-option label="去掉左空格" value="left"></el-option>
<el-option label="去掉右空格" value="right"></el-option> <el-option label="去掉右空格" value="right"></el-option>
...@@ -718,7 +871,11 @@ ...@@ -718,7 +871,11 @@
</el-form-item> </el-form-item>
<el-form-item label="过滤器位置:"> <el-form-item label="过滤器位置:">
<el-select v-model="filterForm.filterPosition" style="width: 100%" clearable> <el-select
v-model="filterForm.filterPosition"
style="width: 100%"
clearable
>
<el-option <el-option
v-for="item in fieldFormat" v-for="item in fieldFormat"
:key="item.index" :key="item.index"
...@@ -743,9 +900,7 @@ ...@@ -743,9 +900,7 @@
</span> </span>
</el-dialog> </el-dialog>
<!-- 文件浏览器-->
<!-- 文件浏览器-->
<el-dialog <el-dialog
title="文件浏览器" title="文件浏览器"
:visible.sync="filePathSelection" :visible.sync="filePathSelection"
...@@ -753,8 +908,7 @@ ...@@ -753,8 +908,7 @@
:before-close="handleClose" :before-close="handleClose"
:modal="false" :modal="false"
> >
<browseFiles :disabed="true" v-on:route="route"></browseFiles>
<browseFiles :disabed="true" v-on:route="route"></browseFiles>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button @click="filePathSelection = false">取 消</el-button> <el-button @click="filePathSelection = false">取 消</el-button>
...@@ -763,13 +917,11 @@ ...@@ -763,13 +917,11 @@
> >
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import browseFiles from "../appBulletFrame/browseFiles"; import browseFiles from "../appBulletFrame/browseFiles";
import mxgraph from "@/utils/mxgraph"; import mxgraph from "@/utils/mxgraph";
const { const {
mxGraph, mxGraph,
...@@ -785,38 +937,48 @@ const { ...@@ -785,38 +937,48 @@ const {
mxGeometry, mxGeometry,
} = mxgraph; } = mxgraph;
import { valueFormat, valueMeta,formatMapperLineTerminator,availableCharsets,compressionProviderNames,inputOutputFields } from "@/api/kettle/link"; import {
valueFormat,
valueMeta,
formatMapperLineTerminator,
availableCharsets,
compressionProviderNames,
inputOutputFields,
} from "@/api/kettle/link";
export default { export default {
props: ["connectionNode","form","nodeData","TextFileInputDialog","saveOutputDialog"], //从父组件传过来的值 props: [
"connectionNode",
"form",
"nodeData",
"TextFileInputDialog",
"saveOutputDialog",
], //从父组件传过来的值
components: { components: {
browseFiles, browseFiles,
}, },
data() { data() {
return { return {
newGraph:[], newGraph: [],
fileBox:false, fileBox: false,
filterBox: false, filterBox: false,
fieldBox: false, fieldBox: false,
fileNameStore:[], fileNameStore: [],
filter: [], filter: [],
inputFields: [], inputFields: [],
metadataForm: {}, metadataForm: {},
filterForm: {}, filterForm: {},
fieldFormat: {}, fieldFormat: {},
fieldCompress:{}, fieldCompress: {},
fieldType: {}, fieldType: {},
dataState: false, dataState: false,
fileType:[], fileType: [],
codingType:[], codingType: [],
routeState:0, routeState: 0,
filePathSelection:false, filePathSelection: false,
localPath:{}, localPath: {},
fileSelection:{}, fileSelection: {},
fielForm:{}, fielForm: {},
}; };
}, },
...@@ -829,88 +991,76 @@ export default { ...@@ -829,88 +991,76 @@ export default {
}, },
methods: { methods: {
clickFun(graph, val) {
clickFun(graph,val) {
console.log(graph, 1); console.log(graph, 1);
this.newGraph = graph; this.newGraph = graph;
this.fileNameStore=JSON.parse(val.fileNameStore) this.fileNameStore = JSON.parse(val.fileNameStore);
this.filter=JSON.parse(val.filter) this.filter = JSON.parse(val.filter);
this.inputFields=JSON.parse(val.inputFields) this.inputFields = JSON.parse(val.inputFields);
}, },
handleCloseFun() {
handleCloseFun(){ this.$emit("update:TextFileInputDialog", false);
this.$emit("update:TextFileInputDialog", false); },
},
TextFileInputDialogFun() { TextFileInputDialogFun() {
this.handleCloseFun() this.handleCloseFun();
this.form.filter = JSON.stringify(this.filter); this.form.filter = JSON.stringify(this.filter);
this.form.inputFields = JSON.stringify( this.form.inputFields = JSON.stringify(this.inputFields);
this.inputFields this.form.fileNameStore = JSON.stringify(this.fileNameStore);
); this.saveOutputDialog(this.form);
this.form.fileNameStore = JSON.stringify(
this.fileNameStore
);
this.saveOutputDialog(this.form)
}, },
getTheField(){ getTheField() {
var enc = new mxCodec(mxUtils.createXmlDocument()); var enc = new mxCodec(mxUtils.createXmlDocument());
var node = enc.encode(this.newGraph.getModel()); var node = enc.encode(this.newGraph.getModel());
this.graphXml = mxUtils.getPrettyXml(node); this.graphXml = mxUtils.getPrettyXml(node);
let pamerFields = new FormData(); // 创建form对象 let pamerFields = new FormData(); // 创建form对象
pamerFields.append("stepName", this.nodeData.value.attributes.label.value) pamerFields.append(
pamerFields.append("graphXml", this.graphXml); "stepName",
pamerFields.append("before", true); this.nodeData.value.attributes.label.value
pamerFields.append("query", ""); );
inputOutputFields(pamerFields).then((res) => { pamerFields.append("graphXml", this.graphXml);
this.inputFields = res pamerFields.append("before", true);
}); pamerFields.append("query", "");
inputOutputFields(pamerFields).then((res) => {
this.inputFields = res;
});
}, },
addFile(){ addFile() {
this.fileNameStore.push(this.fileSelection) this.fileNameStore.push(this.fileSelection);
console.log(this.fileNameStore,789787987987987); console.log(this.fileNameStore, 789787987987987);
this.fileSelection = {} this.fileSelection = {};
}, },
addFilePathSelection() {
addFilePathSelection(){ this.filePathSelection = !this.filePathSelection;
this.filePathSelection = !this.filePathSelection if (this.routeState == 1) {
if (this.routeState == 1 ) { this.fileSelection.fileName = this.localPath.fileName;
this.fileSelection.fileName = this.localPath.fileName } else if (this.routeState == 2) {
}else if (this.routeState == 2 ) { this.form.warningFilesDestinationDirectory = this.localPath.fileName;
this.form.warningFilesDestinationDirectory = this.localPath.fileName } else if (this.routeState == 3) {
}else if (this.routeState == 3) { this.form.errorFilesDestinationDirectory = this.localPath.fileName;
this.form.errorFilesDestinationDirectory = this.localPath.fileName } else if (this.routeState == 4) {
}else if (this.routeState == 4) { this.form.lineNumberFilesDestinationDirectory = this.localPath.fileName;
this.form.lineNumberFilesDestinationDirectory = this.localPath.fileName
} }
}, },
route(flowData){ route(flowData) {
this.localPath.fileName = flowData.name this.localPath.fileName = flowData.name;
console.log(this.localPath); console.log(this.localPath);
}, },
selectFilePath(tsate) {
selectFilePath(tsate){ this.routeState = tsate;
this.routeState = tsate this.filePathSelection = !this.filePathSelection;
this.filePathSelection = !this.filePathSelection
}, },
compressionProviderNamesFun() {
compressionProviderNames().then((res) => {
this.fieldCompress = res;
compressionProviderNamesFun(){ });
compressionProviderNames().then(res=>{
this.fieldCompress = res
})
}, },
// 关闭弹框 // 关闭弹框
...@@ -922,41 +1072,39 @@ handleCloseFun(){ ...@@ -922,41 +1072,39 @@ handleCloseFun(){
.catch((_) => {}); .catch((_) => {});
}, },
formatMapperLineTerminatorFun(){ formatMapperLineTerminatorFun() {
let pamer = new FormData(); // 创建form对象 let pamer = new FormData(); // 创建form对象
pamer.append("query", ""); pamer.append("query", "");
formatMapperLineTerminator(pamer).then(res=>{ formatMapperLineTerminator(pamer).then((res) => {
this.fileType = res this.fileType = res;
}) });
}, },
availableCharsetsFun(){ availableCharsetsFun() {
let pamer = new FormData(); // 创建form对象 let pamer = new FormData(); // 创建form对象
pamer.append("query", ""); pamer.append("query", "");
availableCharsets(pamer).then((res) => { availableCharsets(pamer).then((res) => {
this.codingType = res; this.codingType = res;
}); });
}, },
fileBoxFun(){
this.fileBox = !this.fileBox
this.fileNameStore.push(this.fielForm);
this.$emit('fileNameStore', this.fileNameStore)
},
fileBoxFun() {
this.fileBox = !this.fileBox;
this.fileNameStore.push(this.fielForm);
this.$emit("fileNameStore", this.fileNameStore);
},
addFilterBox() { addFilterBox() {
this.filterBox = !this.filterBox; this.filterBox = !this.filterBox;
if (this.dataState) { if (this.dataState) {
this.filter.push(this.filterForm); this.filter.push(this.filterForm);
this.$emit('filter', this.filter) this.$emit("filter", this.filter);
} else { } else {
} }
}, },
handleClick(val){ handleClick(val) {
this.fileBox = !this.fileBox this.fileBox = !this.fileBox;
this.fielForm = val this.fielForm = val;
}, },
deleteRow(index, rows) { deleteRow(index, rows) {
...@@ -976,29 +1124,26 @@ fileBoxFun(){ ...@@ -976,29 +1124,26 @@ fileBoxFun(){
rows.splice(index, 1); rows.splice(index, 1);
}, },
deleteField(index, rows){ deleteField(index, rows) {
rows.splice(index, 1); rows.splice(index, 1);
}, },
fieldClick(state, val) {
fieldClick(state,val) {
this.fieldBox = !this.fieldBox; this.fieldBox = !this.fieldBox;
this.dataState = state this.dataState = state;
if (state) { if (state) {
this.metadataForm = {}; this.metadataForm = {};
}else{ } else {
this.metadataForm = val; this.metadataForm = val;
} }
}, },
addFieldBox(){ addFieldBox() {
this.fieldBox = !this.fieldBox this.fieldBox = !this.fieldBox;
if (this.dataState) { if (this.dataState) {
this.inputFields.push(this.metadataForm) this.inputFields.push(this.metadataForm);
this.$emit('inputFields', this.inputFields) this.$emit("inputFields", this.inputFields);
} else {
}else{
} }
}, },
......
...@@ -869,7 +869,9 @@ export default { ...@@ -869,7 +869,9 @@ export default {
border-bottom: 1px solid #E4E7ED; border-bottom: 1px solid #E4E7ED;
} }
.sel-content{ .sel-content{
min-height: 81vh; /* min-height: 81vh; */
height: 81vh;
overflow: auto;
border: 1px solid #dce3e8; border: 1px solid #dce3e8;
} }
.sel-menu-bar{ .sel-menu-bar{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment