Commit 327ec109 by 李耀琨

数值范围 解决分组bug 数据检验

parent f0dcfd5d
...@@ -12,6 +12,15 @@ export function types(data) { ...@@ -12,6 +12,15 @@ export function types(data) {
} }
//获取连接类型
export function typeGroup(data) {
return request({
url: 'etlweb/system/typeGroup',
data,
method: 'post'
})
}
//记录集连接 连接类型 //记录集连接 连接类型
export function typesss(data) { export function typesss(data) {
return request({ return request({
......
<template>
<div class="getSystemInformation">
<el-dialog
title="数据检验"
:visible.sync="dataInspectionDialog"
width="800px"
:before-close="handleCloseFun"
>
<el-form ref="form" :model="form" label-width="120px">
<el-form-item label="步骤名称:">
<el-input v-model="form.label"></el-input>
</el-form-item>
</el-form>
<el-row :gutter="20">
<el-col :span="8">
<el-button type="text" @click="addSheet()" style="margin: 10px"
>增加校验</el-button
>
<el-button type="text" @click="deleteInput()" style="margin: 10px"
>删除校验</el-button
>
<br />
选择一个编辑的校验
<div class="verification">
<ul class="ulHeight">
<li
class="list"
v-for="(item, index) in liList"
:key="index"
@click="inputSelection(item, index)"
style="cursor: pointer"
:class="{
hover: inputIndex == index,
checked: inputIndex == index,
}"
>
{{ item.validation_name }}
</li>
</ul>
</div>
</el-col>
<el-col :span="16">
<el-form ref="form" :model="form">
<el-form-item label="">
<el-checkbox
v-model="form.validate_all"
true-label="Y"
false-label="N"
></el-checkbox>
报告所有错误,不止第一个错误
</el-form-item>
<el-row>
<el-col :span="13">
<el-form-item label="">
<el-checkbox
v-model="form.concat_errors"
true-label="Y"
false-label="N"
:disabled="form.validate_all == 'N'"
></el-checkbox>
只输出一行,指定谅解错误的分隔符:
</el-form-item>
</el-col>
<el-col :span="11">
<el-input type="text" v-model="form.concat_separator" :disabled="form.validate_all == 'N' || form.concat_errors == 'N'" />
</el-col>
</el-row>
</el-form>
<div class="verification">
<el-form
ref="liList"
:model="form"
label-width="180px"
v-if="inputIndex != -1"
>
<el-form-item label="检验描述">
<el-input v-model="liList[inputIndex].validation_name" @input="Rename($event)" ></el-input>
</el-form-item>
<el-form-item label="要检验的字段名">
<el-select v-model="liList[inputIndex].name" style="width: 100%">
<el-option v-for="(item,index) in previousField"
:key="index"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-form-item>
<el-form-item label="错误代码">
<el-input v-model="liList[inputIndex].error_code"></el-input>
</el-form-item>
<el-form-item label="错误描述">
<el-input v-model="liList[inputIndex].error_description"></el-input>
</el-form-item>
<hr />
类型
<el-form-item label="检验数据类型">
<el-checkbox
v-model="liList[inputIndex].data_type_verified"
true-label="Y"
false-label="N"
></el-checkbox>
</el-form-item>
<el-form-item label="数据类型">
<el-select v-model="liList[inputIndex].data_type" style="width: 100%">
<el-option v-for="(item,index) in fieldType"
:key="index"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-form-item>
<el-form-item label="转换掩码">
<el-input v-model="liList[inputIndex].conversion_mask"></el-input>
</el-form-item>
<el-form-item label="小数点符号">
<el-input v-model="liList[inputIndex].decimal_symbol"></el-input>
</el-form-item>
<el-form-item label="分组符号">
<el-input v-model="liList[inputIndex].grouping_symbol"></el-input>
</el-form-item>
<hr />
数据
<el-form-item label="允许空?">
<el-checkbox
v-model="liList[inputIndex].null_allowed"
true-label="Y"
false-label="N"
></el-checkbox>
</el-form-item>
<el-form-item label="只允许空值">
<el-checkbox
v-model="liList[inputIndex].only_null_allowed"
true-label="Y"
false-label="N"
></el-checkbox>
</el-form-item>
<el-form-item label="只允许数值类型的数据">
<el-checkbox
v-model="liList[inputIndex].only_numeric_allowed"
true-label="Y"
false-label="N"
></el-checkbox>
</el-form-item>
<el-form-item label="最大字符串长度">
<el-input v-model="liList[inputIndex].max_length"></el-input>
</el-form-item>
<el-form-item label="最小字符串长度">
<el-input v-model="liList[inputIndex].min_length"></el-input>
</el-form-item>
<el-form-item label="最大值">
<el-input v-model="liList[inputIndex].max_value"></el-input>
</el-form-item>
<el-form-item label="最小值">
<el-input v-model="liList[inputIndex].min_value"></el-input>
</el-form-item>
<el-form-item label="允许的开始字符串">
<el-input v-model="liList[inputIndex].start_string"></el-input>
</el-form-item>
<el-form-item label="允许的结束字符串">
<el-input v-model="liList[inputIndex].end_string"></el-input>
</el-form-item>
<el-form-item label="不允许的开始字符串">
<el-input v-model="liList[inputIndex].start_string_not_allowed"></el-input>
</el-form-item>
<el-form-item label="不允许的结束字符串">
<el-input v-model="liList[inputIndex].end_string_not_allowed"></el-input>
</el-form-item>
<el-form-item label="合法数据的正则表达式">
<el-input v-model="liList[inputIndex].regular_expression"></el-input>
</el-form-item>
<el-form-item label="不合法数据的正则表达式">
<el-input v-model="liList[inputIndex].regular_expression_not_allowed"></el-input>
</el-form-item>
<el-form-item label="允许的值">
<el-button type="text" @click="addVal()" style="margin: 10px" :disabled="liList[inputIndex].is_sourcing_values == 'Y' "
>增加</el-button
>
<el-button type="text" @click="deletVal()" style="margin: 10px"
:disabled="liList[inputIndex].is_sourcing_values == 'Y' ">删除</el-button
>
<div class="val">
<ul class="ulHeight" >
<li
class="list"
v-for="(item, index) in liList[inputIndex].allowed_value"
:key="item.id"
@click="switchJournal(item, index)"
style="cursor: pointer"
:class="{
hover: valIndex == index,
checked: valIndex == index,
}"
>
{{ item.value }}
</li>
</ul>
</div>
</el-form-item>
<el-form-item label="从其他步骤获取允许的值">
<el-checkbox
v-model="liList[inputIndex].is_sourcing_values"
true-label="Y"
false-label="N"
></el-checkbox>
</el-form-item>
<el-form-item label="要读取的步骤">
<el-select v-model="liList[inputIndex].sourcing_step" style="width: 100%" :disabled="liList[inputIndex].is_sourcing_values == 'N' ">
<el-option
v-for="(item, index) in connectionNode"
:key="index"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-form-item>
<el-form-item label="要读取的字段">
<el-select v-model="liList[inputIndex].sourcing_field" style="width: 100%" :disabled="liList[inputIndex].is_sourcing_values == 'N' ">
<el-option v-for="(item,index) in previousField"
:key="index"
:label="item.name"
:value="item.name"
/>
</el-select>
</el-form-item>
</el-form>
</div>
</el-col>
</el-row>
<span slot="footer" class="dialog-footer">
<el-button @click="handleCloseFun">取 消</el-button>
<el-button type="primary" @click="SystemInfoDialogFun">确 定</el-button>
</span>
</el-dialog>
<el-dialog
title="输入校验名称"
:visible.sync="addField"
width="500px"
:before-close="handleClose"
:modal="false"
>
<el-form ref="form" :model="fiel">
<el-form-item label="为校验规定设置一个唯一的名称">
<el-input v-model="fiel.name"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addField = false">取 消</el-button>
<el-button type="primary" @click="addFieldDetermine">确 定</el-button>
</span>
</el-dialog>
<el-dialog
title="添加允许值"
:visible.sync="addValDialog"
width="500px"
:before-close="handleClose"
:modal="false"
>
<el-form ref="form" :model="fielVal">
<el-form-item label="输入一个允许值">
<el-input v-model="fielVal.name"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addValDialog = false">取 消</el-button>
<el-button type="primary" @click="addValDetermine">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import mxgraph from "@/utils/mxgraph";
const {
mxGraph,
mxUtils,
mxEvent,
mxKeyHandler,
mxRubberband,
mxConstants,
mxStencilRegistry,
mxStencil,
mxCodec,
mxGraphModel,
mxGeometry,
} = mxgraph;
import {
systemDataTypes,
valueFormat,
valueMeta,
previousSteps,
inputOutputFields,
} from "@/api/kettle/link";
export default {
props: ["form", "dataInspectionDialog", "saveOutputDialog", "nodeData"],
data() {
return {
addField: false,
fields: [],
type: {},
dataStatus: false,
fiel: {},
fieldFormat: [],
fieldType: [],
inputIndex: -1,
// inputLies: {},
liList: [],
allowed_value: [],
valIndex: -1,
valLies: {},
addValDialog: false,
fielVal: {},
connectionNode: [],
previousField:[],
};
},
created() {
this.systemDataTypesFun();
},
methods: {
clickFun(graph, val) {
console.log(graph, "双击获取值");
this.newGraph = graph;
console.log(val, "拿到form");
this.liList = JSON.parse(val.validator_field)
this.lastStep();
this.inputOutputFieldsFun()
this.valueMetaFun()
// this.fields = JSON.parse(val.fields);
},
Rename(e){
console.log(e);
this.$forceUpdate();
this.liList[this.inputIndex].validation_name = e
},
lastStep() {
var enc = new mxCodec(mxUtils.createXmlDocument());
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;
});
},
inputOutputFieldsFun(){
console.log(this.nodeData);
var enc = new mxCodec(mxUtils.createXmlDocument());
var node = enc.encode(this.newGraph.getModel());
this.graphXml = mxUtils.getPrettyXml(node);
// console.log( this.graphXml,"看着了");
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) => {
console.log(res);
this.previousField = res
})
},
inputSelection(val, index) {
this.form.validation_name = val.validation_name
this.inputIndex = index;
// console.log(val);
// this.inputLies = val;
},
handleCloseFun() {
this.$emit("update:dataInspectionDialog", false);
},
SystemInfoDialogFun() {
this.handleCloseFun();
this.form.validator_field = JSON.stringify(this.liList);
this.saveOutputDialog(this.form);
},
switchJournal(val, index) {
this.valIndex = index;
console.log(val);
this.valLies = val;
},
addValDetermine() {
this.addValDialog = !this.addValDialog;
let obj = {
value: this.fielVal.name,
};
this.liList[this.inputIndex].allowed_value.push(obj);
},
addFieldDetermine() {
this.addField = !this.addField;
let obj = {
validation_name: this.fiel.name,
null_allowed:'Y',
only_null_allowed:'N',
only_numeric_allowed:'N',
data_type_verified:'N',
is_sourcing_values:'N',
allowed_value:[],
};
this.liList.push(obj);
},
// 关闭弹框
handleClose(done) {
this.$confirm("确认关闭?")
.then((_) => {
done();
})
.catch((_) => {});
},
addVal() {
this.addValDialog = !this.addValDialog;
this.fielVal = {};
},
deletVal() {
this.liList[this.inputIndex].allowed_value.splice(this.valIndex, 1);
this.valIndex = -1;
},
addSheet(state, val) {
this.addField = !this.addField;
this.fiel = {};
},
deleteInput() {
this.liList.splice(this.inputIndex, 1);
this.inputIndex = -1;
},
systemDataTypesFun() {
systemDataTypes().then((res) => {
this.type = res;
});
},
valueMetaFun() {
valueMeta().then((res) => {
this.fieldType = res;
});
},
valueFormatFun() {
let pamer2 = new FormData(); // 创建form对象
pamer2.append("valueType", "all");
valueFormat(pamer2).then((res) => {
this.fieldFormat = res;
});
},
},
};
</script>
<style lang="scss" scoped>
* {
outline: none;
}
.verification {
width: 100%;
height: 450px;
overflow: auto;
border: 1px solid #d3d6dc;
padding: 10px;
}
.val {
width: 100%;
height: 200px;
overflow: auto;
border: 1px solid #d3d6dc;
padding: 10px;
}
.ulHeight {
// border: 1px solid #d2e0f1;
width: 100%;
height: 100%;
}
.list.hover {
cursor: pointer;
background-color: #eeeeee;
}
.list.checked {
background-color: #4e9df8;
color: #fff;
}
</style>
...@@ -135,8 +135,17 @@ ...@@ -135,8 +135,17 @@
:modal="false" :modal="false"
> >
<el-form ref="form" :model="fiel" label-width="160px"> <el-form ref="form" :model="fiel" label-width="160px">
<el-form-item label="名称:"> <el-form-item label="名称:">
<el-input v-model="fiel.name"></el-input> <el-select v-model="fiel.name" placeholder="请选择">
<el-option
v-for="(item,index) in getFiel"
:key="index"
:label="item.name"
:value="item.name"
>
</el-option>
</el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -161,10 +170,10 @@ ...@@ -161,10 +170,10 @@
<el-form-item label="subject:"> <el-form-item label="subject:">
<el-select v-model="gatherLite.subject" placeholder="请选择"> <el-select v-model="gatherLite.subject" placeholder="请选择">
<el-option <el-option
v-for="(item,index) in fields" v-for="(item,index) in getFiel"
:key="index" :key="index"
:label="item.aggregate" :label="item.name"
:value="item.aggregate" :value="item.name"
> >
</el-option> </el-option>
</el-select> </el-select>
...@@ -173,7 +182,7 @@ ...@@ -173,7 +182,7 @@
<el-form-item label="类型:"> <el-form-item label="类型:">
<el-select v-model="gatherLite.type" placeholder="请选择"> <el-select v-model="gatherLite.type" placeholder="请选择">
<el-option <el-option
v-for="item in fields" v-for="item in typeGroup"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
...@@ -192,7 +201,7 @@ ...@@ -192,7 +201,7 @@
</template> </template>
<script> <script>
import { systemDataTypes, inputOutputFields } from "@/api/kettle/link"; import { systemDataTypes, inputOutputFields,typeGroup } from "@/api/kettle/link";
import mxgraph from "@/utils/mxgraph"; import mxgraph from "@/utils/mxgraph";
const { const {
mxGraph, mxGraph,
...@@ -220,16 +229,30 @@ export default { ...@@ -220,16 +229,30 @@ export default {
fiel: {}, fiel: {},
gatherLite: {}, gatherLite: {},
gather: false, gather: false,
typeGroup:[],
getFiel:[],
}; };
}, },
created() { created() {
this.systemDataTypesFun(); this.systemDataTypesFun();
}, },
methods: { methods: {
gatherDetermine(){}, gatherDetermine(){
this.fields.push()
this.gather = !this.gather;
if (this.dataStatus) {
this.fields.push(this.gatherLite);
}
},
typeGroupFun(){
typeGroup().then(res=>{
this.typeGroup = res
})
},
structure(state, val) { structure(state, val) {
// this.addField = !this.addField // this.addField = !this.addField
this.dataStatus = state; this.dataStatus = state;
...@@ -242,6 +265,7 @@ export default { ...@@ -242,6 +265,7 @@ export default {
}, },
polymerization(state, val) { polymerization(state, val) {
this.dataStatus = state; this.dataStatus = state;
this.typeGroupFun()
if (state) { if (state) {
this.gatherLite = {}; this.gatherLite = {};
} else { } else {
...@@ -250,7 +274,22 @@ export default { ...@@ -250,7 +274,22 @@ export default {
} }
this.gather = !this.gather; this.gather = !this.gather;
}, },
inputOutputFieldsFun(){
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.getFiel = res;
console.log(res);
});
},
getTheGroup() { getTheGroup() {
var enc = new mxCodec(mxUtils.createXmlDocument()); var enc = new mxCodec(mxUtils.createXmlDocument());
...@@ -304,8 +343,10 @@ export default { ...@@ -304,8 +343,10 @@ export default {
}, },
clickFun(graph, val) { clickFun(graph, val) {
console.log(graph, "双击获取值"); console.log(graph, "双击获取值");
this.newGraph = graph; this.newGraph = graph;
this.inputOutputFieldsFun()
console.log(val, "拿到form"); console.log(val, "拿到form");
this.fields = JSON.parse(val.fields) this.fields = JSON.parse(val.fields)
this.groupFile = JSON.parse(val.groupFile) this.groupFile = JSON.parse(val.groupFile)
...@@ -325,7 +366,7 @@ export default { ...@@ -325,7 +366,7 @@ export default {
addFieldDetermine() { addFieldDetermine() {
this.addField = !this.addField; this.addField = !this.addField;
if (this.dataStatus) { if (this.dataStatus) {
this.fields.push(this.fiel); this.groupFile.push(this.fiel);
} else { } else {
} }
}, },
......
...@@ -32,17 +32,13 @@ ...@@ -32,17 +32,13 @@
{{'范围(最小<= x<最大):'}} {{'范围(最小<= x<最大):'}}
<br> <br>
<el-button type="text" @click="addSheet(true)" style="margin: 10px" <el-button type="text" @click="addSheet(true)" style="margin: 10px"
>添加</el-button >添加</el-button>
>
<el-form-item> <el-form-item>
<el-table :data="rules" style="width: 100%"> <el-table :data="rules" style="width: 100%">
<el-table-column prop="lower_bound" label="下界"> </el-table-column> <el-table-column prop="lower_bound" label="下界"> </el-table-column>
<el-table-column prop="upper_bound" label="上界"> </el-table-column> <el-table-column prop="upper_bound" label="上界"> </el-table-column>
<el-table-column prop="value" label="值"> <el-table-column prop="value" label="值">
</el-table-column> </el-table-column>
<el-table-column label="操作"> <el-table-column label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
......
...@@ -1010,6 +1010,16 @@ ...@@ -1010,6 +1010,16 @@
:saveOutputDialog="saveOutputDialog" :saveOutputDialog="saveOutputDialog"
></addConstants> ></addConstants>
<!-- 数据校验 -->
<dataInspection
ref="dataInspection"
:form="form"
:nodeData="nodeData"
:dataInspectionDialog.sync="dataInspectionDialog"
:doubleClickCell="doubleClickCell"
:saveOutputDialog="saveOutputDialog"
></dataInspection>
<!-- 拆分字符串 --> <!-- 拆分字符串 -->
<splitFields <splitFields
ref="splitFields" ref="splitFields"
...@@ -1383,6 +1393,7 @@ import addSequence from "../appBulletFrame/addSequence"; //增加序列 ...@@ -1383,6 +1393,7 @@ import addSequence from "../appBulletFrame/addSequence"; //增加序列
import importXmlFile from "../appBulletFrame/importXmlFile"; //导出资源库到XML文件 import importXmlFile from "../appBulletFrame/importXmlFile"; //导出资源库到XML文件
import grouping from "../appBulletFrame/grouping"; //分组 import grouping from "../appBulletFrame/grouping"; //分组
import addConstants from "../appBulletFrame/addConstants"; //增加常量 import addConstants from "../appBulletFrame/addConstants"; //增加常量
import dataInspection from "../appBulletFrame/dataInspection" //数据校验
import splitFields from "../appBulletFrame/splitFields";//拆分字符串 import splitFields from "../appBulletFrame/splitFields";//拆分字符串
import numericalRange from "../appBulletFrame/numericalRange";//数值范围 import numericalRange from "../appBulletFrame/numericalRange";//数值范围
import stringOperation from "../appBulletFrame/stringOperation" //字符串操作 import stringOperation from "../appBulletFrame/stringOperation" //字符串操作
...@@ -1526,6 +1537,7 @@ export default { ...@@ -1526,6 +1537,7 @@ export default {
groupingDialog: false, //分组 groupingDialog: false, //分组
stringSubstitutionDialog: false, //字符串替换 stringSubstitutionDialog: false, //字符串替换
addConstantsDialog: false, //增加常量 addConstantsDialog: false, //增加常量
dataInspectionDialog:false,//数据校验
splitFieldsDialog:false,//拆分字符串 splitFieldsDialog:false,//拆分字符串
numericalRangeDialog:false,//数值范围 numericalRangeDialog:false,//数值范围
stringOperationDialog:false,//字符串操作 stringOperationDialog:false,//字符串操作
...@@ -1649,6 +1661,7 @@ export default { ...@@ -1649,6 +1661,7 @@ export default {
importXmlFile, //导出资源库到XML文件 importXmlFile, //导出资源库到XML文件
grouping, //分组 grouping, //分组
addConstants, //增加常量 addConstants, //增加常量
dataInspection,//数据校验
splitFields,//拆分字符串 splitFields,//拆分字符串
numericalRange,//数值范围 numericalRange,//数值范围
stringOperation,//字符串操作 stringOperation,//字符串操作
...@@ -2346,7 +2359,16 @@ export default { ...@@ -2346,7 +2359,16 @@ export default {
valueFormat(pamer2).then((res) => { valueFormat(pamer2).then((res) => {
this.fieldFormat = res; this.fieldFormat = res;
}); });
if ( if (
(this.curFileType == "transformation" && cell.dis == "step138") ||
cell.value.attributes.ctype.value == "Validator"
) {
this.dataInspectionDialog = !this.dataInspectionDialog;
this.form = this.showDataFunc();
setTimeout(() => {
this.$refs.dataInspection.clickFun(this.graph, this.form);
}, 500);
} else if (
(this.curFileType == "transformation" && cell.dis == "step67") || (this.curFileType == "transformation" && cell.dis == "step67") ||
cell.value.attributes.ctype.value == "NumberRange" cell.value.attributes.ctype.value == "NumberRange"
) { ) {
......
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