<template>
|
<div class="node-filter-container">
|
<!-- <div class="add-btn">
|
<span class="name">条件设置</span> <el-button @click="addItem" link><i>+</i>添加字段</el-button>
|
</div> -->
|
<!-- {{ $store.getters.data().flowTable.WorkTable }} -->
|
<div class="ef-node-pmenu-item" style="display: flex;">
|
<div style="flex:1;">
|
<span class="name"><i class="el-icon-news"></i>条件设置</span>
|
</div>
|
<div><el-button link size="small" @click="addItem" type="primary" v-if="!disabled">
|
+ 添加字段</el-button></div>
|
</div>
|
|
<div>
|
<table>
|
<tr>
|
<td>字段</td>
|
<td style="width:90px">条件</td>
|
<td class="value">值</td>
|
<td style="width: 40px;" v-if="!disabled">操作</td>
|
</tr>
|
<tr v-for="(item, index) in filters" :key="index">
|
|
<td><el-select @change="(field) => { fieldChange(field, index) }" size="small" v-model="item.field"
|
placeholder="请选择" :disabled="disabled">
|
<el-option v-for="data in fieldsOptions" :key="data.field" :label="data.name"
|
:value="data.field" />
|
</el-select></td>
|
<td><el-select size="small" v-model="item.filterType" placeholder="请选择" :disabled="disabled">
|
<el-option v-for="data in filterType" :key="data.value" :label="data.name"
|
:value="data.value" />
|
</el-select></td>
|
<td>
|
<template v-if="item.data">
|
<el-select v-if="item.data.length >= 300" multiple size="small" v-model="item.value"
|
placeholder="请选择">
|
<el-option v-for="data in item.data" :key="data.key" :label="data.value"
|
:value="data.key" :disabled="disabled" />
|
</el-select>
|
<el-select-v2 style="width: 100%;" v-else multiple size="small" :options="item.data"
|
v-model="item.value" placeholder="请选择" :disabled="disabled">
|
</el-select-v2>
|
</template>
|
<el-input v-else v-model="item.value" size="small" :disabled="disabled"></el-input>
|
</td>
|
<td @click="delItem(index)" class="item-del" v-if="!disabled"><i class="el-icon-delete"></i></td>
|
</tr>
|
</table>
|
</div>
|
<!-- <div>
|
<label>自定义sql</label>
|
<div><el-input type="textarea" v-model="customSql"></el-input></div>
|
</div> -->
|
</div>
|
</template>
|
|
<script>
|
let _this = this;
|
export default {
|
props: {
|
tableName: {
|
type: String,
|
default: ""
|
},
|
filters: {
|
type: Array,
|
default: () => {
|
return []
|
}
|
},
|
disabled:{
|
typeof:Boolean,
|
default:false
|
}
|
},
|
data() {
|
return {
|
filter: this.$store.getters.data().flowTable,
|
customSql: "",
|
value: "",
|
//{ field: "名称", value: "", filterType: "=" },
|
// filters: [],
|
fieldsOptions: [
|
|
],
|
t: [],
|
filterType: [{ name: "等于(=)", value: "=" },
|
{ name: "不等于(!=)", value: "!=" },
|
{ name: "大于(>)", value: ">" },
|
{ name: "大于等于(>=)", value: ">=" },
|
{ name: "小于(<)", value: "<" },
|
{ name: "小于等于(<=)", value: "<=" },
|
{ name: "包括(in)", value: "in" },
|
// { name: "不包括(not in)", value: "notin" },
|
{ name: "模糊匹配(like)", value: "like" },
|
{ name: "或者(or)", value: "or" }
|
]
|
}
|
},
|
methods: {
|
delItem(index) {
|
this.$confirm('确认要删除字配置条件配置吗?', '警告', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning',
|
center: true
|
}).then(() => {
|
this.filters.splice(index, 1);
|
});
|
},
|
addItem() {
|
this.filters.push({ field: "", value: "", filterType: "", data: null })
|
},
|
fieldChange(field, index) {
|
let option = this.fieldsOptions.find(x => { return x.field == field });
|
this.filters[index].field = option.field;
|
this.filters[index].value = option.data ? [] : null;
|
this.filters[index].data = option.data;;
|
},
|
convertOptions(result) {
|
|
},
|
getOptions(tableName) {
|
const url = 'api/Sys_WorkFlow/getFields?table=' + tableName;
|
this.http.post(url, {}, false).then(result => {
|
result.forEach(c => {
|
if (c.data && c.data.length < 300) {
|
c.data = c.data.map(x => {
|
return {
|
value: x.key,
|
label: x.value,
|
key: x.key
|
}
|
})
|
}
|
})
|
_this.fieldsOptions = result;
|
})
|
}
|
},
|
watch: {
|
'filter.WorkTable': {
|
handler(newvalue, oldvalue) {
|
if (newvalue) {
|
this.getOptions(newvalue);
|
} else {
|
// this.fieldsOptions.splice(0)
|
}
|
}
|
}
|
// deep:true,
|
// filter(newVal,oldVal){
|
// alert(1)
|
// }
|
},
|
created() {
|
_this = this;
|
},
|
}
|
</script>
|
|
<style lang="less" scoped>
|
.node-filter-container {
|
margin-top: 15px;
|
|
table {
|
width: 100%;
|
padding-left: 6px;
|
|
td {
|
font-size: 13px;
|
padding: 5px;
|
|
}
|
|
tr:first-child {
|
font-size: 12px;
|
font-weight: bolder;
|
}
|
|
.item-del {
|
text-align: center;
|
color: rgb(226, 4, 4);
|
cursor: pointer;
|
}
|
|
.value {
|
width: 150px;
|
}
|
}
|
|
.add-btn {
|
text-align: right;
|
padding-right: 10px;
|
border-bottom: 1px solid #e8e8e8;
|
padding-bottom: 5px;
|
}
|
|
.node-filter-item {}
|
}</style>
|