|
@@ -31,9 +31,32 @@
|
|
|
|
|
|
<el-button size="mini" @click.prevent="removeFilterItem(item)">删除</el-button>
|
|
|
</el-row>
|
|
|
+ <br>
|
|
|
+ <el-row v-for="(item, index) in relFilterItems" :key="item.key">
|
|
|
+ <el-form-item label="关联对象">
|
|
|
+ <el-select v-model="item.relObj">
|
|
|
+ <el-option
|
|
|
+ v-for="op in releatedObjOptions"
|
|
|
+ :key="op.value"
|
|
|
+ :label="op.label"
|
|
|
+ :value="op.value">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="关系类型">
|
|
|
+ <el-cascader
|
|
|
+ placeholder="搜索"
|
|
|
+ :options="dicRels" :props="{expandTrigger: 'hover', multiple: true, label: 'name', value: 'code'}"
|
|
|
+ v-model="item.relTypes" filterable collapse-tags clearable style="width: 300px;"></el-cascader>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-button size="mini" @click.prevent="removeFilterItem(item)">删除</el-button>
|
|
|
+ </el-row>
|
|
|
</el-form>
|
|
|
<br>
|
|
|
+
|
|
|
<el-button size="mini" @click="addFilterItem()">添加条件(and)</el-button>
|
|
|
+ <el-button size="mini" @click="addRelationItem()" v-if="releatedObjs && releatedObjs.length > 0">添加关系过滤(and)</el-button>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -51,35 +74,67 @@
|
|
|
@Prop()
|
|
|
dataFilter: any;
|
|
|
|
|
|
+ @Prop()
|
|
|
+ releatedObjs: any[];
|
|
|
+
|
|
|
+ @Prop()
|
|
|
+ dicRels: any[];
|
|
|
+
|
|
|
filterItems: any[] = [];
|
|
|
+ relFilterItems: any[] = [];
|
|
|
+
|
|
|
+ releatedObjOptions: any[] = [];
|
|
|
|
|
|
mounted(){
|
|
|
this.buildFilterItems();
|
|
|
+ this.buildReleatedObjOptions();
|
|
|
}
|
|
|
|
|
|
@Watch("dataFilter")
|
|
|
buildFilterItems(){
|
|
|
- this.filterItems = this.buildItems(this.dataFilter);
|
|
|
+ this.buildItems(this.dataFilter);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Watch("releatedObjs")
|
|
|
+ buildReleatedObjOptions(){
|
|
|
+ this.releatedObjOptions = [];
|
|
|
+ if(this.releatedObjs) {
|
|
|
+ for(const obj of this.releatedObjs) {
|
|
|
+ if(obj.compType == 'mainPipe'){
|
|
|
+ this.releatedObjOptions.push({value: 'mainPipe:' + obj.id, label: '干管:' + (obj.name != null ? obj.name : obj.id)});
|
|
|
+ } else if(obj.compType == 'container') {
|
|
|
+ //TODO
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
buildItems(filter){
|
|
|
const items:any[] = [];
|
|
|
+ const rels:any[] = [];
|
|
|
if(filter && filter.type) {
|
|
|
if(filter.type == 1) { // match
|
|
|
items.push(this.buildItem4Edit(filter));
|
|
|
+ } else if(filter.type == 9) { // match
|
|
|
+ rels.push(this.buildRelItem4Edit(filter));
|
|
|
} else if (filter.type == 2) { // and
|
|
|
for(const i of filter.items){
|
|
|
- items.push(this.buildItem4Edit(i));
|
|
|
+ if(i.type == 1)
|
|
|
+ items.push(this.buildItem4Edit(i));
|
|
|
+ else if(i.type == 9)
|
|
|
+ rels.push(this.buildRelItem4Edit(i));
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
- items.push({});
|
|
|
+ items.push({type: 1});
|
|
|
}
|
|
|
- return items;
|
|
|
+
|
|
|
+ this.filterItems = items;
|
|
|
+ this.relFilterItems = rels;
|
|
|
}
|
|
|
|
|
|
buildItem4Edit(filterItem){
|
|
|
- const item:any = {};
|
|
|
+ const item:any = {type: filterItem.type};
|
|
|
const obj:string = filterItem.object;
|
|
|
const infosPre = 'infos.';
|
|
|
if(obj.indexOf(infosPre) == 0){
|
|
@@ -94,38 +149,70 @@
|
|
|
return item;
|
|
|
}
|
|
|
|
|
|
+ buildRelItem4Edit(filterItem){
|
|
|
+ const item:any = {type: filterItem.type};
|
|
|
+ item.relObj = filterItem.relObjType + ':' + filterItem.relObjId;
|
|
|
+ if(filterItem.relTypes){
|
|
|
+ item.relTypes = [];
|
|
|
+ for(const r of filterItem.relTypes) {
|
|
|
+ item.relTypes.push(r.split("/"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return item;
|
|
|
+ }
|
|
|
+
|
|
|
//添加过滤条件条目
|
|
|
addFilterItem(){
|
|
|
- this.filterItems.push({});
|
|
|
+ this.filterItems.push({type: 1});
|
|
|
+ }
|
|
|
+
|
|
|
+ addRelationItem(){
|
|
|
+ this.relFilterItems.push({type: 9});
|
|
|
}
|
|
|
|
|
|
//删除过滤条件条目
|
|
|
removeFilterItem(item){
|
|
|
- const idx = this.filterItems.indexOf(item);
|
|
|
- this.filterItems.splice(idx, 1);
|
|
|
+ var idx = this.filterItems.indexOf(item);
|
|
|
+ if(idx >= 0){
|
|
|
+ this.filterItems.splice(idx, 1);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ idx = this.relFilterItems.indexOf(item);
|
|
|
+ if(idx >= 0) {
|
|
|
+ this.relFilterItems.splice(idx, 1);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//创建设备过滤条件
|
|
|
buildFilter(){
|
|
|
var filter: any;
|
|
|
- if(this.filterItems.length == 0)
|
|
|
+ const allItems = [];
|
|
|
+ allItems.push(...this.filterItems);
|
|
|
+ allItems.push(...this.relFilterItems);
|
|
|
+ if(allItems.length == 0)
|
|
|
filter = null;
|
|
|
else {
|
|
|
- for(const item of this.filterItems) {
|
|
|
- var flag = !this['$common'].isEmpty(item.filterObj) && !this['$common'].isEmpty(item.filterOper) && !this['$common'].isEmpty(item.filterVal);
|
|
|
- if(flag) {
|
|
|
- if(item.filterObj == 'infos.')
|
|
|
- flag = !this['$common'].isEmpty(item.infoCode);
|
|
|
+ for(const item of allItems) {
|
|
|
+ var flag = true;
|
|
|
+ if(item.type == 1) {
|
|
|
+ flag = !this['$common'].isEmpty(item.filterObj) && !this['$common'].isEmpty(item.filterOper) && !this['$common'].isEmpty(item.filterVal);
|
|
|
+ if(flag) {
|
|
|
+ if(item.filterObj == 'infos.')
|
|
|
+ flag = !this['$common'].isEmpty(item.infoCode);
|
|
|
+ }
|
|
|
+ } else if(item.type == 9) {
|
|
|
+ flag = !this['$common'].isEmpty(item.relObj);
|
|
|
}
|
|
|
+
|
|
|
if(!flag)
|
|
|
return {errMsg: '缺少必要的信息'};
|
|
|
}
|
|
|
|
|
|
- if(this.filterItems.length == 1)
|
|
|
- filter = this.buildItem4Commit(this.filterItems[0]);
|
|
|
+ if(allItems.length == 1)
|
|
|
+ filter = this.buildItem4Commit(allItems[0]);
|
|
|
else {
|
|
|
filter = {type: 2, items: []}; //and
|
|
|
- for(const item of this.filterItems) {
|
|
|
+ for(const item of allItems) {
|
|
|
filter.items.push(this.buildItem4Commit(item));
|
|
|
}
|
|
|
}
|
|
@@ -134,13 +221,25 @@
|
|
|
}
|
|
|
|
|
|
buildItem4Commit(item){
|
|
|
- const filterItem:any = {type: 1};
|
|
|
- filterItem.object = item.filterObj;
|
|
|
- if(filterItem.object == 'infos.')
|
|
|
- filterItem.object += item.infoCode;
|
|
|
- filterItem.operation = item.filterOper;
|
|
|
- filterItem.value = item.filterVal;
|
|
|
- filterItem.not = item.not;
|
|
|
+ const filterItem:any = {type: item.type};
|
|
|
+ if(item.type == 1) {
|
|
|
+ filterItem.object = item.filterObj;
|
|
|
+ if(filterItem.object == 'infos.')
|
|
|
+ filterItem.object += item.infoCode;
|
|
|
+ filterItem.operation = item.filterOper;
|
|
|
+ filterItem.value = item.filterVal;
|
|
|
+ filterItem.not = item.not;
|
|
|
+ } else if (item.type == 9) {
|
|
|
+ const arr = item.relObj.split(":");
|
|
|
+ filterItem.relObjType = arr[0];
|
|
|
+ filterItem.relObjId = arr[1];
|
|
|
+ if(item.relTypes) {
|
|
|
+ filterItem.relTypes = [];
|
|
|
+ for(const arr of item.relTypes) {
|
|
|
+ filterItem.relTypes.push(arr.join("/"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
return filterItem;
|
|
|
}
|
|
|
|