1
+ <template >
2
+ <div class =" container" >
3
+ <ejs-querybuilder ref =" querybuilder" id =" querybuilder"
4
+ :rule =" importRules"
5
+ :headerTemplate =" 'headerTemplate'" >
6
+ <e-columns >
7
+ <e-column field =" EmployeeID" label =" Employee ID" type =" number" />
8
+ <e-column field =" FirstName" label =" First Name" type =" string" />
9
+ <e-column field =" LastName" label =" Last Name" type =" string" />
10
+ <e-column field =' TitleOfCourtesy' label =' Title Of Courtesy' type =' string'
11
+ :template =" 'columnTemplate'" />
12
+ <e-column field =" HireDate" label =" Hire Date" type =" date" format =" dd/MM/yyyy" />
13
+ <e-column field =" Country" label =" Country" type =" string"
14
+ :ruleTemplate =" 'ruleTemplate'" />
15
+ </e-columns >
16
+ <template #headerTemplate =" { data } " >
17
+ <div class =" query-template-control" >
18
+ <div class =" e-groupheader" >
19
+ <ejs-dropdownlist cssClass =" e-custom-group-btn"
20
+ :id =" `${data.ruleID}_cndtn`" v-model =" data.condition"
21
+ :dataSource =" grpHdrOperatorItems"
22
+ :fields =" grpHdrOperatorfields"
23
+ :change =" conditionChange" >
24
+ </ejs-dropdownlist >
25
+ <div class =" e-header" >
26
+ <div class =" e-qb-hdr-content" >
27
+ <ejs-button :id =" `${data.ruleID}_addgrp`"
28
+ cssClass =" e-primary e-grp-btn"
29
+ @click =" grpbtnClick" >Add Group</ejs-button >
30
+ </div >
31
+ <div class =" e-qb-hdr-content" >
32
+ <ejs-button :id =" `${data.ruleID}_addrule`" cssClass =" e-primary e-cond-btn"
33
+ @click =" rulebtnClick" >Add Condition</ejs-button >
34
+ </div >
35
+ <div class =" e-qb-hdr-content" >
36
+ <ejs-button :id =" `${data.ruleID}_dltbtn`" cssClass =" e-danger"
37
+ v-if =" data.ruleID !== 'querybuilder_group0'"
38
+ @click =" onDeleteGrpBtnClick"
39
+ >Delete Group</ejs-button >
40
+ </div >
41
+ </div >
42
+ </div >
43
+ </div >
44
+ </template >
45
+ <template #columnTemplate =" { data } " >
46
+ <ejs-dropdownlist :dataSource =" ['Mr.', 'Mrs.', 'Dr.', 'Ms.']"
47
+ v-model =" data.rule.value" :change =" onTitleChange" >
48
+ </ejs-dropdownlist >
49
+ </template >
50
+ <template #ruleTemplate =" { data } " >
51
+ <div >
52
+ <div class =" e-rule-filter" >
53
+ <ejs-dropdownlist :dataSource =" data.columns" :fields =" data.fields"
54
+ :value =" data.rule.field" :change =" fieldChange" >
55
+ </ejs-dropdownlist >
56
+ </div >
57
+ <div class =" e-rule-operator e-operator" >
58
+ <ejs-radiobutton label =" Is Equal" value =" equal" name =" operator"
59
+ checked =true :change =" operatorChange" ></ejs-radiobutton >
60
+ <ejs-radiobutton label =" Is Not Equal" value =" notequal" name =" operator"
61
+ :change =" operatorChange" ></ejs-radiobutton >
62
+ </div >
63
+ <div class =" e-rule-value e-value e-custom-value" >
64
+ <ejs-dropdownlist :value =" data.rule.value"
65
+ :dataSource =" countryItems" :fields =" countryFields"
66
+ :change =" valueChange" >
67
+ </ejs-dropdownlist >
68
+ </div >
69
+ <div class =" e-rule-value-delete" >
70
+ <button
71
+ class =" e-removerule e-custom-delete e-rule-delete e-css e-btn e-small e-round"
72
+ title =" Delete Rule" >
73
+ <span class =" e-btn-icon e-icons e-delete-icon" ></span >
74
+ </button >
75
+ </div >
76
+ </div >
77
+ </template >
78
+ </ejs-querybuilder >
79
+ </div >
80
+ </template >
81
+ <script >
82
+ import {
83
+ QueryBuilderComponent ,
84
+ ColumnDirective ,
85
+ ColumnsDirective
86
+ } from " @syncfusion/ej2-vue-querybuilder" ;
87
+ import { DropDownListComponent } from " @syncfusion/ej2-vue-dropdowns" ;
88
+ import { ButtonComponent , RadioButtonComponent } from " @syncfusion/ej2-vue-buttons" ;
89
+ import { closest } from " @syncfusion/ej2-base" ;
90
+
91
+ export default {
92
+ components: {
93
+ " ejs-querybuilder" : QueryBuilderComponent,
94
+ " e-columns" : ColumnsDirective,
95
+ " e-column" : ColumnDirective,
96
+ " ejs-dropdownlist" : DropDownListComponent,
97
+ " ejs-button" : ButtonComponent,
98
+ " ejs-radiobutton" : RadioButtonComponent
99
+ },
100
+ data () {
101
+ return {
102
+ grpHdrOperatorItems: [{ key: " AND" , value: " and" },
103
+ { key: " OR" , value: " or" }
104
+ ],
105
+ grpHdrOperatorfields: { text: " key" , value: " value" },
106
+ countryItems: [{ field: ' USA' , label: ' USA' }, { field: ' England' , label: ' England' },
107
+ { field: ' India' , label: ' India' }, { field: ' Spain' , label: ' Spain' }],
108
+ countryFields: { text: ' field' , value: ' label' },
109
+ importRules: {
110
+ condition: " and" ,
111
+ rules: [
112
+ { label: " First Name" , field: " FirstName" , type: " string" ,
113
+ operator: " equal" , value: " Nancy" },
114
+ { label: " Title Of Courtesy" , field: " TitleOfCourtesy" , type: " string" ,
115
+ operator: " equal" , value: " Ms." },
116
+ { label: " Country" , field: " Country" , type: " string" ,
117
+ operator: " equal" , value: " USA" }
118
+ ]
119
+ }
120
+ };
121
+ },
122
+ methods: {
123
+ conditionChange (event ){
124
+ this .$refs .querybuilder .ej2Instances .notifyChange (
125
+ event .value , event .element , " condition"
126
+ );
127
+ },
128
+ grpbtnClick ({target}){
129
+ const targetParentGroupID = target .id .split (" _" )[1 ];
130
+ this .$refs .querybuilder .ej2Instances .addGroups (
131
+ [{ condition: " or" , rules: [{}]}], targetParentGroupID
132
+ );
133
+ },
134
+ rulebtnClick ({target}){
135
+ const targetParentGroupID = target .id .split (" _" )[1 ];
136
+ this .$refs .querybuilder .ej2Instances .addRules (
137
+ [{}], targetParentGroupID
138
+ );
139
+ },
140
+ onDeleteGrpBtnClick ({target}){
141
+ this .$refs .querybuilder .ej2Instances .deleteGroup (
142
+ closest (target, " .e-group-container" )
143
+ );
144
+ },
145
+ onTitleChange (event ){
146
+ this .$refs .querybuilder .ej2Instances .notifyChange (
147
+ event .itemData .value , event .element
148
+ );
149
+ },
150
+ fieldChange (event ){
151
+ this .$refs .querybuilder .ej2Instances .notifyChange (
152
+ event .value , event .element , " field"
153
+ );
154
+ },
155
+ operatorChange (operatorArgs ){
156
+ this .$refs .querybuilder .ej2Instances .getRule (
157
+ operatorArgs .event .target ).operator = operatorArgs .value ;
158
+ },
159
+ valueChange (event ){
160
+ this .$refs .querybuilder .ej2Instances .notifyChange (
161
+ event .value , event .element , " value"
162
+ );
163
+ }
164
+ }
165
+ };
166
+ </script >
167
+ <style >
168
+ @import " ../node_modules/@syncfusion/ej2-base/styles/material.css" ;
169
+ @import " ../node_modules/@syncfusion/ej2-buttons/styles/material.css" ;
170
+ @import " ../node_modules/@syncfusion/ej2-splitbuttons/styles/material.css" ;
171
+ @import " ../node_modules/@syncfusion/ej2-dropdowns/styles/material.css" ;
172
+ @import " ../node_modules/@syncfusion/ej2-inputs/styles/material.css" ;
173
+ @import " ../node_modules/@syncfusion/ej2-lists/styles/material.css" ;
174
+ @import " ../node_modules/@syncfusion/ej2-popups/styles/material.css" ;
175
+ @import " ../node_modules/@syncfusion/ej2-calendars/styles/material.css" ;
176
+ @import " ../node_modules/@syncfusion/ej2-navigations/styles/material.css" ;
177
+ @import " ../node_modules/@syncfusion/ej2-vue-querybuilder/styles/material.css" ;
178
+
179
+ .container {
180
+ display : flex ;
181
+ flex-direction : column ;
182
+ width : 60% ;
183
+ margin : 0 auto ;
184
+ position : absolute ;
185
+ top : 20px ;
186
+ left : 50% ;
187
+ transform : translateX (-50% );
188
+ }
189
+ .e-query-builder .query-template-control span .e-custom-group-btn {
190
+ max-width : 70px ;
191
+ border-radius : 5px !important ;
192
+ border-width : 1px !important ;
193
+ }
194
+ .e-query-builder .query-template-control .e-custom-group-btn {
195
+ padding-left : 10px ;
196
+ height : 32px ;
197
+ }
198
+ .e-query-builder .query-template-control .e-header {
199
+ float : right ;
200
+ }
201
+
202
+ .e-query-builder .query-template-control .e-qb-hdr-content {
203
+ display : inline-block ;
204
+ padding : 5px ;
205
+ }
206
+
207
+ .e-query-builder .query-template-control .e-grp-btn ,
208
+ .e-query-builder .query-template-control .e-cond-btn {
209
+ background-color : #6c757d !important ;
210
+ }
211
+
212
+ .e-query-builder .query-template-control .e-grp-btn :hover ,
213
+ .e-query-builder .query-template-control .e-cond-btn :hover {
214
+ background-color : #545c63 !important ;
215
+ }
216
+ </style >
0 commit comments