ocpview-plus 1.3.15 → 1.3.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/README.md +55 -43
  2. package/dist/ocpviewplus.min.esm.js +574 -482
  3. package/dist/ocpviewplus.min.js +9 -9
  4. package/dist/style.css +1 -1
  5. package/dist/styles/efviewplus.css +1 -1
  6. package/package.json +146 -146
  7. package/src/components/base/ContractPrintMixins.js +30 -30
  8. package/src/components/base/controlbase.vue +190 -190
  9. package/src/components/base/controlbox.vue +102 -102
  10. package/src/components/base/index.js +2 -2
  11. package/src/components/base/load.js +19 -19
  12. package/src/components/base/probase.js +220 -220
  13. package/src/components/base/size.js +78 -78
  14. package/src/components/billbox/billbox.vue +67 -67
  15. package/src/components/billbox/index.js +1 -1
  16. package/src/components/cascaderbox/cascaderbox.vue +184 -184
  17. package/src/components/cascaderbox/index.js +2 -2
  18. package/src/components/checkbox/checkbox.vue +75 -75
  19. package/src/components/checkbox/checkgroupbox.vue +103 -103
  20. package/src/components/checkbox/index.js +2 -2
  21. package/src/components/colorbox/colorbox.vue +43 -43
  22. package/src/components/colorbox/index.js +1 -1
  23. package/src/components/combobox/combobox.vue +219 -219
  24. package/src/components/combobox/index.js +1 -1
  25. package/src/components/conditionbox/conditionbase.vue +194 -194
  26. package/src/components/conditionbox/conditionbox.vue +62 -62
  27. package/src/components/conditionbox/conditionfilterbox.vue +479 -479
  28. package/src/components/conditionbox/conditionselectorbox.vue +237 -237
  29. package/src/components/conditionbox/index.js +4 -4
  30. package/src/components/conditionbox/queryconditionbox.vue +25 -25
  31. package/src/components/conditionbox/queryconditionboxbase.vue +123 -123
  32. package/src/components/conditionbox/searchconditionbox.vue +113 -113
  33. package/src/components/conditionbox/searchgrid.vue +391 -391
  34. package/src/components/datebox/DateBoxV1.vue +22 -22
  35. package/src/components/datebox/datebox.vue +129 -129
  36. package/src/components/datebox/daterangebox.vue +154 -154
  37. package/src/components/datebox/index.js +5 -5
  38. package/src/components/form/baseform.vue +676 -676
  39. package/src/components/form/detailsbox.vue +487 -487
  40. package/src/components/form/formbox.vue +28 -28
  41. package/src/components/form/formcardbox.vue +267 -267
  42. package/src/components/form/formcardbox2.vue +228 -228
  43. package/src/components/form/formcardgroupbox.vue +251 -251
  44. package/src/components/form/formcompro.js +18 -18
  45. package/src/components/form/formdetail.vue +128 -128
  46. package/src/components/form/formdetailtwo.vue +302 -302
  47. package/src/components/form/index.js +9 -9
  48. package/src/components/form/toolanchor.js +45 -45
  49. package/src/components/form/workform.vue +167 -167
  50. package/src/components/grid/basegrid.vue +1062 -1062
  51. package/src/components/grid/editgrid.vue +51 -51
  52. package/src/components/grid/editgridbase.vue +1062 -1062
  53. package/src/components/grid/editgridcard.vue +193 -193
  54. package/src/components/grid/expandrow.vue +137 -137
  55. package/src/components/grid/index.js +5 -5
  56. package/src/components/grid/viewgrid.vue +121 -121
  57. package/src/components/grid/viewgridbase.vue +1286 -1286
  58. package/src/components/icon/common-icon.vue +53 -53
  59. package/src/components/icon/eicon.vue +28 -28
  60. package/src/components/icon/icons.vue +42 -42
  61. package/src/components/icon/index.js +1 -1
  62. package/src/components/label/index.js +2 -2
  63. package/src/components/label/showtext.vue +94 -94
  64. package/src/components/load/loadcartoon.vue +227 -227
  65. package/src/components/map/index.js +1 -1
  66. package/src/components/map/mapbox.vue +348 -348
  67. package/src/components/masterplate/RewriteBillListDetails/BillInfoPanel.vue +184 -184
  68. package/src/components/masterplate/RewriteBillListDetails/BillInfoPanelEditTable.vue +838 -838
  69. package/src/components/masterplate/RewriteBillListDetails/BillInfoPanelEditTableControlbox.vue +126 -126
  70. package/src/components/masterplate/RewriteBillListDetails/BillInfoPanelEditTableControlboxNumberbox.vue +27 -27
  71. package/src/components/masterplate/RewriteBillListDetails/BillListPanel.vue +126 -126
  72. package/src/components/masterplate/RewriteBillListDetails/BillListPanelQueryBar.vue +280 -280
  73. package/src/components/masterplate/RewriteBillListDetails/BillListPanelTable.vue +346 -346
  74. package/src/components/masterplate/RewriteBillListDetails/index.vue +325 -325
  75. package/src/components/masterplate/RewriteBillListDetails/mixins/useVxeGridEditTypeKeydownEventHook.js +251 -251
  76. package/src/components/masterplate/RewriteListdetails/BillListPanelV2.vue +115 -115
  77. package/src/components/masterplate/RewriteListdetails/BillListPanelV2QueryBar.vue +24 -24
  78. package/src/components/masterplate/RewriteListdetails/BillListPanelV3.vue +121 -121
  79. package/src/components/masterplate/RewriteListdetails/BillListPanelV3QueryBar.vue +275 -275
  80. package/src/components/masterplate/RewriteListdetails/indexV2.vue +320 -320
  81. package/src/components/masterplate/RewriteListdetails/indexV3.vue +331 -331
  82. package/src/components/masterplate/appendix.vue +586 -586
  83. package/src/components/masterplate/approval.vue +863 -863
  84. package/src/components/masterplate/base.vue +1028 -1028
  85. package/src/components/masterplate/billasyncimport.vue +614 -614
  86. package/src/components/masterplate/billconditionbox.vue +223 -223
  87. package/src/components/masterplate/billconditionsbox.vue +427 -427
  88. package/src/components/masterplate/billdetailform.vue +1028 -1028
  89. package/src/components/masterplate/billimport.vue +301 -301
  90. package/src/components/masterplate/billquerygrid.vue +391 -391
  91. package/src/components/masterplate/billsinglegrid.vue +234 -234
  92. package/src/components/masterplate/birtreport.vue +185 -185
  93. package/src/components/masterplate/contractappendix.vue +688 -688
  94. package/src/components/masterplate/detailbtntoolbar.vue +311 -311
  95. package/src/components/masterplate/detailsbox.vue +386 -386
  96. package/src/components/masterplate/editgridcard.vue +292 -292
  97. package/src/components/masterplate/editgridcard2.vue +127 -127
  98. package/src/components/masterplate/formcard.vue +105 -105
  99. package/src/components/masterplate/formcardgroupbox.vue +167 -167
  100. package/src/components/masterplate/formdetailtwo.vue +366 -366
  101. package/src/components/masterplate/gridcolset.vue +226 -226
  102. package/src/components/masterplate/index.js +54 -54
  103. package/src/components/masterplate/layouttemplate.vue +51 -51
  104. package/src/components/masterplate/leftlistrightdetails.vue +581 -581
  105. package/src/components/masterplate/leftlistrightlist.vue +464 -464
  106. package/src/components/masterplate/lefttreerightdetails.vue +636 -636
  107. package/src/components/masterplate/levelreport.vue +510 -510
  108. package/src/components/masterplate/listbtntoolbar.vue +276 -276
  109. package/src/components/masterplate/listdetails.vue +768 -768
  110. package/src/components/masterplate/operlog.vue +272 -272
  111. package/src/components/masterplate/options.vue +110 -110
  112. package/src/components/masterplate/page.vue +102 -102
  113. package/src/components/masterplate/promptmessage.vue +73 -73
  114. package/src/components/masterplate/querybar.vue +490 -490
  115. package/src/components/masterplate/report.vue +357 -357
  116. package/src/components/masterplate/rowbtntoolbar.vue +126 -126
  117. package/src/components/masterplate/simpletree.vue +137 -137
  118. package/src/components/masterplate/simpleviewgrid.vue +144 -144
  119. package/src/components/mychart/bar/bar.vue +201 -201
  120. package/src/components/mychart/basechart.vue +190 -190
  121. package/src/components/mychart/complexmychart/barline.vue +153 -153
  122. package/src/components/mychart/gauge/gauge.vue +82 -82
  123. package/src/components/mychart/index.js +8 -8
  124. package/src/components/mychart/line/line.vue +201 -201
  125. package/src/components/mychart/liquidfill/liquidfill.vue +108 -108
  126. package/src/components/mychart/pie/pie.vue +95 -95
  127. package/src/components/mychart/radar/radar.vue +121 -121
  128. package/src/components/mychart/scatter/scatter.vue +75 -75
  129. package/src/components/numberbox/NumberBoxV1.vue +39 -39
  130. package/src/components/numberbox/append.js +11 -11
  131. package/src/components/numberbox/index.js +4 -4
  132. package/src/components/numberbox/numberbox.vue +302 -302
  133. package/src/components/numberbox/numberrangebox.vue +422 -422
  134. package/src/components/picturebox/filebox.vue +369 -369
  135. package/src/components/picturebox/index.js +2 -2
  136. package/src/components/picturebox/picturebox.vue +541 -541
  137. package/src/components/picturebox/uploadbox.vue +164 -164
  138. package/src/components/poptagbox/index.js +1 -1
  139. package/src/components/poptagbox/poptagbox.vue +388 -388
  140. package/src/components/poptextbox/index.js +1 -1
  141. package/src/components/poptextbox/poptextbox.vue +624 -624
  142. package/src/components/radiobox/index.js +1 -1
  143. package/src/components/radiobox/radiogroupbox.vue +75 -75
  144. package/src/components/richtextbox/editor.vue +150 -150
  145. package/src/components/richtextbox/index.js +1 -1
  146. package/src/components/richtextbox/richtextbox.vue +448 -448
  147. package/src/components/textbox/index.js +1 -1
  148. package/src/components/textbox/textbox.vue +97 -97
  149. package/src/components/timebox/index.js +1 -1
  150. package/src/components/timebox/timebox.vue +75 -75
  151. package/src/components/toolbar/ebutton.vue +169 -169
  152. package/src/components/toolbar/index.js +3 -3
  153. package/src/components/toolbar/toolbar.vue +445 -445
  154. package/src/components/tree/CompatTree.vue +297 -297
  155. package/src/components/tree/basetree.vue +1098 -1098
  156. package/src/components/tree/index.js +2 -2
  157. package/src/components/tree/treedata.vue +53 -53
  158. package/src/components/tree/treedatabase.vue +189 -189
  159. package/src/components/upload/billimport.vue +233 -233
  160. package/src/components/upload/index.js +1 -1
  161. package/src/components/videobox/index.js +1 -1
  162. package/src/components/videobox/uploadbox.vue +148 -148
  163. package/src/components/videobox/videobox.vue +503 -503
  164. package/src/components/wrichtextbox/editor.vue +219 -219
  165. package/src/components/wrichtextbox/index.js +1 -1
  166. package/src/components/wrichtextbox/wrichtextbox.vue +62 -62
  167. package/src/index.js +231 -231
  168. package/src/locale/format.js +51 -51
  169. package/src/locale/index.js +63 -63
  170. package/src/locale/lang/zh-CN.js +123 -123
  171. package/src/locale/lang/zh-TW.js +114 -114
  172. package/src/locale/lang/zh-UG.js +115 -115
  173. package/src/locale/lang.js +15 -15
  174. package/src/method/case/case.js +1274 -1274
  175. package/src/method/config/queryconfig.js +24 -24
  176. package/src/method/const/const.js +815 -815
  177. package/src/method/index.js +7 -7
  178. package/src/plugins/theme/theme-variable.css +114 -114
  179. package/src/plugins/vxeTable/index.js +241 -241
  180. package/src/plugins/vxeTable/renderer/components/TableFilterInput.vue +51 -51
  181. package/src/plugins/vxeTable/renderer/filter.js +32 -32
  182. package/src/static/excel/exportexcel.js +626 -626
  183. package/src/static/iview/coustom.js +462 -462
  184. package/src/store/index.js +18 -18
  185. package/src/store/modules/app.js +53 -53
  186. package/src/styles/README.md +3 -3
  187. package/src/styles/common.less +80 -80
  188. package/src/styles/components/anchor.less +74 -74
  189. package/src/styles/components/approval.less +135 -135
  190. package/src/styles/components/button.less +208 -208
  191. package/src/styles/components/card.less +51 -51
  192. package/src/styles/components/content.less +38 -38
  193. package/src/styles/components/font.less +313 -313
  194. package/src/styles/components/form.less +71 -71
  195. package/src/styles/components/iconfont/fonts/iconfont.less +1384 -1384
  196. package/src/styles/components/iconfont/fonts/iconfont.svg +703 -703
  197. package/src/styles/components/index.less +16 -16
  198. package/src/styles/components/input.less +290 -290
  199. package/src/styles/components/modal.less +203 -203
  200. package/src/styles/components/page.less +340 -340
  201. package/src/styles/components/select.less +361 -361
  202. package/src/styles/components/steps.less +367 -367
  203. package/src/styles/components/table.less +544 -544
  204. package/src/styles/components/tabs.less +249 -249
  205. package/src/styles/components/upload.less +82 -82
  206. package/src/styles/custom.less +67 -67
  207. package/src/styles/index.less +6 -6
  208. package/src/styles/pack.less +6 -6
  209. package/src/utils/EfuMessenger.js +155 -155
  210. package/src/utils/assist.js +353 -353
  211. package/src/utils/index.js +1 -1
  212. package/src/utils/random_str.js +10 -10
  213. package/src/components/masterplate/detailgridbox.vue +0 -386
@@ -1,391 +1,391 @@
1
- <style lang="less">
2
- .vertical-center-modal{
3
- display: flex;
4
- align-items: center;
5
- justify-content: center;
6
-
7
- .ivu-modal{
8
- top: 0;
9
- .ivu-modal-content {
10
- .ivu-modal-body {
11
- padding:0px;
12
- }
13
- }
14
- }
15
- }
16
-
17
- </style>
18
- <template>
19
- <div>
20
- <Modal v-model="modalSearch" :width="900" title="高级查询" class-name="vertical-center-modal" :footer-hide="true">
21
- <div style="padding:10px">
22
- <Row type="flex" :gutter="10" justify="start" align="middle">
23
- <Col>
24
- <Button icon="ios-add" type="primary" @click="addCondition">新建</Button>
25
- </Col>
26
- <Col>
27
- <Button icon="ios-remove" type="primary" @click="delCondition">删除</Button>
28
- </Col>
29
- <Col>
30
- <Button icon="ios-close" type="primary" @click="clearCondition">清空</Button>
31
- </Col>
32
- <Col>
33
- <Button icon="ios-redo-outline" style="float:right;" @click="backCondition">取消</Button>
34
- </Col>
35
- <Col>
36
- <Button icon="ios-search" style="float:right;margin-right:5px;" type="primary" @click="searchCondition">确定查询</Button>
37
- </Col>
38
- </Row>
39
- <EditGrid ref="grid" :config="gridConfig" :dictData="dictData">
40
- </EditGrid>
41
- </div>
42
- </Modal>
43
- </div>
44
-
45
-
46
- </template>
47
- <script>
48
- export default {
49
- name:'searchgrid',
50
- data () {
51
- return {
52
- myConfig:{},
53
- searchDictData:{},
54
- modalSearch:false,
55
- gridConfig:{
56
- showAddBtn:false,
57
- showDelBatchBtn:false,
58
- showDelRow:true,
59
- showCheckBox:true,
60
- showIndex:false,
61
- height:0.5,
62
- cellbeginedit:this.cellbeginedit,
63
- items:[ {
64
- label:'左括号',
65
- name:'bracket_left',
66
- type:'ComboBox',
67
- width:80,
68
- align:'center',
69
- codeWithName:false,
70
- data:[{code:'1',name:'('},{code:'2',name:'(('}]
71
- },{
72
- label:'条件字段',
73
- name:'field',
74
- type:'ComboBox',
75
- codeWithName:false,
76
- align:'center',
77
- contentAlign:'left',
78
- dictkey:'FIELD'
79
- }, {
80
- label:'运算',
81
- name:'calculator',
82
- type:'ComboBox',
83
- width:100,
84
- align:'center',
85
- codeWithName:false,
86
- clearable:false,
87
- data:[{
88
- name: '等于',
89
- code: '=='
90
- }, {
91
- name: '大于',
92
- code: '>'
93
- }, {
94
- name: '大于等于',
95
- code: '>='
96
- }, {
97
- name: '小于',
98
- code: '<'
99
- }, {
100
- name: '小于等于',
101
- code: '<='
102
- }, {
103
- name: '不等于',
104
- code: '<>'
105
- }, {
106
- name: '包含',
107
- code: 'LIKE'
108
- }],
109
- defaultValue:'=='
110
- }, {
111
- label:'条件值',
112
- name:'editors',
113
- type:'TextBox',
114
- align:'center',
115
- contentAlign:'left',
116
- updateCellConfig:this.updateCellConfig
117
- },{
118
- label:'右括号',
119
- name:'bracket_right',
120
- type:'ComboBox',
121
- width:80,
122
- align:'center',
123
- codeWithName:false,
124
- data:[{code:'1',name:')'},{code:'2',name:'))'}]
125
- },{
126
- label:'关系',
127
- name:'relationship',
128
- type:'ComboBox',
129
- width:80,
130
- align:'center',
131
- codeWithName:false,
132
- clearable:false,
133
- data:[{code:'1',name:'且'},{code:'2',name:'或'}]
134
- }]
135
- },
136
- initData:[],
137
- condition:[],
138
- bracket:[],
139
- bracketLeft:0,
140
- bracketRight:0
141
- };
142
- },
143
- props: {
144
- config: {
145
- type: Object,
146
- default: () => {
147
- return {};
148
- }
149
- },
150
- dictData: {
151
- type: Object,
152
- default:null
153
- },
154
- dataType: {
155
- type: Object,
156
- default:null
157
- },
158
- },
159
- created() {
160
- this.init();
161
- },
162
- methods: {
163
- init() {
164
- this.myConfig = this.$Method.copy(this.config);
165
- for (let i=0;i<6;i++) {
166
- let obj = {};
167
- obj.relationship = '1';
168
- obj.field = '';
169
- obj.calculator = '==';
170
- obj.editors = '';
171
- obj.bracket_left = '';
172
- obj.bracket_right = '';
173
- this.initData.push(obj);
174
- }
175
- },
176
- updateCellConfig(obj) {
177
- let field = obj.row.field;
178
- let itemConfig = Object.assign({},obj.column,this.dataType[field]);
179
- itemConfig.name = 'editors';
180
- if (itemConfig.readOnly) {
181
- delete itemConfig.readOnly;
182
- }
183
- if (!itemConfig.visible) {
184
- delete itemConfig.visible;
185
- }
186
- return itemConfig;
187
-
188
- },
189
- cellbeginedit (obj) {
190
- let field = obj.column.key;
191
- let record = obj.row;
192
- if (field === 'editors') {
193
- if (!record.field) {
194
- return false;
195
- }
196
- }
197
- return true;
198
- },
199
- addCondition() {
200
- this.$refs.grid.addRow();
201
- },
202
- delCondition() {
203
- this.$refs.grid.delBatchRow();
204
- },
205
- clearCondition() {
206
- this.condition = [];
207
- let data = this.$Method.copy(this.initData);
208
- this.$refs.grid.setData(data);
209
- },
210
- getResultCondition() {
211
- let obj = {};
212
- if (this.condition.length > 0) {
213
- if (this.condition.length === 1) {
214
- obj = Object.assign({}, obj, this.condition[0].condition);
215
- } else {
216
- if (this.bracket.length > 0) {
217
- let last = this.bracket.length -1;
218
- obj['$and'] = [];
219
- this.createCondition(last, obj['$and']);
220
- }
221
- }
222
- }
223
- return obj;
224
- },
225
- searchCondition() {
226
- this.condition = [];
227
- if (!this.checkCondition()){
228
- return;
229
- }
230
- this.modalSearch = false;
231
- this.$emit('search', this.getResultCondition());
232
- },
233
- createCondition(index, obj) {
234
- if (index >= 0) {
235
- let tempObj = {};
236
- let list = [];
237
- let str = this.bracket[index];
238
- let oper = '$or';
239
- if (str.indexOf('$and') !== -1) {
240
- oper = '$and';
241
- }
242
- list = str.split(oper);
243
- if (list.length > 0) {
244
- tempObj[oper] = [];
245
- list.forEach(el => {
246
- if (el) {
247
- let temp = el.split('_');
248
- tempObj[oper].push(this.condition[Number(temp[1])].condition);
249
- }
250
- });
251
- }
252
- if (index -1 >= 0) {
253
- this.createCondition(index-1,tempObj[oper]);
254
- }
255
-
256
- obj.push(tempObj);
257
- }
258
- },
259
-
260
- checkCondition() {
261
- this.bracketLeft = 0;
262
- this.bracketRight = 0;
263
- let data = this.$refs.grid.getData();
264
- let result = [];
265
-
266
- if (data && data.length > 0) {
267
- for (let i=0;i<data.length;i++) {
268
- if (data[i].bracket_left || data[i].bracket_right) {
269
- if (!data[i].field) {
270
- this.alert('第'+(i+1)+'行的条件字段为空,请检查');
271
- return false;
272
- }
273
- if (!data[i].editors) {
274
- this.alert('第'+(i+1)+'行的值为空,请检查');
275
- return false;
276
- }
277
- if (data[i].bracket_left) {
278
- this.bracketLeft = this.bracketLeft + Number(data[i].bracket_left);
279
- }
280
- if (data[i].bracket_right) {
281
- this.bracketRight = this.bracketRight + Number(data[i].bracket_right);
282
- }
283
- }
284
-
285
- if (data[i].field && data[i].editors) {
286
- if (!data[i].relationship) {
287
- this.alert('第'+(i+1)+'行的关系为空,请检查');
288
- return false;
289
- }
290
- result.push(this.$Method.copy(data[i]));
291
- }
292
- }
293
- }
294
- if (this.bracketLeft !== this.bracketRight) {
295
- this.alert('有效条件的左括号('+this.bracketLeft+')与右括号('+this.bracketRight+')的数量不一致,请检查');
296
- return false;
297
- }
298
- if (result.length > 0) {
299
- let str = '';
300
- result.forEach((el,j) => {
301
- el.condition = this.getConditionValue(el.field,el.editors,el.calculator,this.dataType[el.field]);
302
- if (el.bracket_left === '1') {
303
- str = str + '(';
304
- }
305
- if (el.bracket_left === '2') {
306
- str = str + '((';
307
- }
308
- str = str + el.field + '_' + j;
309
- if (el.bracket_right === '1') {
310
- str = str + ')';
311
- }
312
- if (el.bracket_right === '2') {
313
- str = str + '))';
314
- }
315
- if (j + 1 < result.length) {
316
- if (el.relationship === '1') {
317
- str = str + '$and';
318
- }
319
- if (el.relationship === '2') {
320
- str = str + '$or';
321
- }
322
- }
323
- });
324
- this.condition = result;
325
- this.bracket = [];
326
- if (str) {
327
- this.separateBracket(str, this.bracket);
328
- }
329
- this.bracket.some(el => {
330
- let andIndex = el.indexOf('$and');
331
- let orIndex = el.indexOf('$or');
332
- if (andIndex !== -1 && orIndex !== -1) {
333
- let oper = '$or';
334
- let opername = '或';
335
- if (orIndex < andIndex) {
336
- oper = '$and';
337
- opername = '且';
338
- }
339
- let list = el.split('_');
340
- let index = -1;
341
- if (list.length > 0) {
342
- list.some(el2 => {
343
- if (el2.indexOf(oper) !== -1) {
344
- let tempList= el2.split(oper);
345
- if (tempList.length > 0) {
346
- index = Number(tempList[0]);
347
- return true;
348
- }
349
- }
350
- });
351
- }
352
- if (index > -1) {
353
- this.alert('第'+(index+1)+'行的关系不能为['+opername+']或请添加括号' );
354
- return true;
355
- }
356
- }
357
- });
358
- }
359
- return true;
360
- },
361
-
362
- separateBracket (str,obj) {
363
- let newStr = this.$Method.copy(str);
364
- let bracket_leftIndex = newStr.lastIndexOf('(');
365
- let bracket_rightIndex = newStr.indexOf(')');
366
- if (bracket_leftIndex !== -1 && bracket_rightIndex !== -1) {
367
- let tempstr = newStr.substring(bracket_leftIndex+1,bracket_rightIndex);
368
- obj.push(tempstr);
369
- str = str.replace('('+tempstr+')','');
370
- if (str) {
371
- this.separateBracket(str,obj);
372
- }
373
- } else {
374
- if (newStr) {
375
- obj.push(newStr);
376
- }
377
- }
378
- },
379
-
380
- show() {
381
- this.modalSearch = true;
382
- },
383
- backCondition() {
384
- this.modalSearch = false;
385
- }
386
- },
387
- mounted () {
388
- this.clearCondition();
389
- }
390
- };
391
- </script>
1
+ <style lang="less">
2
+ .vertical-center-modal{
3
+ display: flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+
7
+ .ivu-modal{
8
+ top: 0;
9
+ .ivu-modal-content {
10
+ .ivu-modal-body {
11
+ padding:0px;
12
+ }
13
+ }
14
+ }
15
+ }
16
+
17
+ </style>
18
+ <template>
19
+ <div>
20
+ <Modal v-model="modalSearch" :width="900" title="高级查询" class-name="vertical-center-modal" :footer-hide="true">
21
+ <div style="padding:10px">
22
+ <Row type="flex" :gutter="10" justify="start" align="middle">
23
+ <Col>
24
+ <Button icon="ios-add" type="primary" @click="addCondition">新建</Button>
25
+ </Col>
26
+ <Col>
27
+ <Button icon="ios-remove" type="primary" @click="delCondition">删除</Button>
28
+ </Col>
29
+ <Col>
30
+ <Button icon="ios-close" type="primary" @click="clearCondition">清空</Button>
31
+ </Col>
32
+ <Col>
33
+ <Button icon="ios-redo-outline" style="float:right;" @click="backCondition">取消</Button>
34
+ </Col>
35
+ <Col>
36
+ <Button icon="ios-search" style="float:right;margin-right:5px;" type="primary" @click="searchCondition">确定查询</Button>
37
+ </Col>
38
+ </Row>
39
+ <EditGrid ref="grid" :config="gridConfig" :dictData="dictData">
40
+ </EditGrid>
41
+ </div>
42
+ </Modal>
43
+ </div>
44
+
45
+
46
+ </template>
47
+ <script>
48
+ export default {
49
+ name:'searchgrid',
50
+ data () {
51
+ return {
52
+ myConfig:{},
53
+ searchDictData:{},
54
+ modalSearch:false,
55
+ gridConfig:{
56
+ showAddBtn:false,
57
+ showDelBatchBtn:false,
58
+ showDelRow:true,
59
+ showCheckBox:true,
60
+ showIndex:false,
61
+ height:0.5,
62
+ cellbeginedit:this.cellbeginedit,
63
+ items:[ {
64
+ label:'左括号',
65
+ name:'bracket_left',
66
+ type:'ComboBox',
67
+ width:80,
68
+ align:'center',
69
+ codeWithName:false,
70
+ data:[{code:'1',name:'('},{code:'2',name:'(('}]
71
+ },{
72
+ label:'条件字段',
73
+ name:'field',
74
+ type:'ComboBox',
75
+ codeWithName:false,
76
+ align:'center',
77
+ contentAlign:'left',
78
+ dictkey:'FIELD'
79
+ }, {
80
+ label:'运算',
81
+ name:'calculator',
82
+ type:'ComboBox',
83
+ width:100,
84
+ align:'center',
85
+ codeWithName:false,
86
+ clearable:false,
87
+ data:[{
88
+ name: '等于',
89
+ code: '=='
90
+ }, {
91
+ name: '大于',
92
+ code: '>'
93
+ }, {
94
+ name: '大于等于',
95
+ code: '>='
96
+ }, {
97
+ name: '小于',
98
+ code: '<'
99
+ }, {
100
+ name: '小于等于',
101
+ code: '<='
102
+ }, {
103
+ name: '不等于',
104
+ code: '<>'
105
+ }, {
106
+ name: '包含',
107
+ code: 'LIKE'
108
+ }],
109
+ defaultValue:'=='
110
+ }, {
111
+ label:'条件值',
112
+ name:'editors',
113
+ type:'TextBox',
114
+ align:'center',
115
+ contentAlign:'left',
116
+ updateCellConfig:this.updateCellConfig
117
+ },{
118
+ label:'右括号',
119
+ name:'bracket_right',
120
+ type:'ComboBox',
121
+ width:80,
122
+ align:'center',
123
+ codeWithName:false,
124
+ data:[{code:'1',name:')'},{code:'2',name:'))'}]
125
+ },{
126
+ label:'关系',
127
+ name:'relationship',
128
+ type:'ComboBox',
129
+ width:80,
130
+ align:'center',
131
+ codeWithName:false,
132
+ clearable:false,
133
+ data:[{code:'1',name:'且'},{code:'2',name:'或'}]
134
+ }]
135
+ },
136
+ initData:[],
137
+ condition:[],
138
+ bracket:[],
139
+ bracketLeft:0,
140
+ bracketRight:0
141
+ };
142
+ },
143
+ props: {
144
+ config: {
145
+ type: Object,
146
+ default: () => {
147
+ return {};
148
+ }
149
+ },
150
+ dictData: {
151
+ type: Object,
152
+ default:null
153
+ },
154
+ dataType: {
155
+ type: Object,
156
+ default:null
157
+ },
158
+ },
159
+ created() {
160
+ this.init();
161
+ },
162
+ methods: {
163
+ init() {
164
+ this.myConfig = this.$Method.copy(this.config);
165
+ for (let i=0;i<6;i++) {
166
+ let obj = {};
167
+ obj.relationship = '1';
168
+ obj.field = '';
169
+ obj.calculator = '==';
170
+ obj.editors = '';
171
+ obj.bracket_left = '';
172
+ obj.bracket_right = '';
173
+ this.initData.push(obj);
174
+ }
175
+ },
176
+ updateCellConfig(obj) {
177
+ let field = obj.row.field;
178
+ let itemConfig = Object.assign({},obj.column,this.dataType[field]);
179
+ itemConfig.name = 'editors';
180
+ if (itemConfig.readOnly) {
181
+ delete itemConfig.readOnly;
182
+ }
183
+ if (!itemConfig.visible) {
184
+ delete itemConfig.visible;
185
+ }
186
+ return itemConfig;
187
+
188
+ },
189
+ cellbeginedit (obj) {
190
+ let field = obj.column.key;
191
+ let record = obj.row;
192
+ if (field === 'editors') {
193
+ if (!record.field) {
194
+ return false;
195
+ }
196
+ }
197
+ return true;
198
+ },
199
+ addCondition() {
200
+ this.$refs.grid.addRow();
201
+ },
202
+ delCondition() {
203
+ this.$refs.grid.delBatchRow();
204
+ },
205
+ clearCondition() {
206
+ this.condition = [];
207
+ let data = this.$Method.copy(this.initData);
208
+ this.$refs.grid.setData(data);
209
+ },
210
+ getResultCondition() {
211
+ let obj = {};
212
+ if (this.condition.length > 0) {
213
+ if (this.condition.length === 1) {
214
+ obj = Object.assign({}, obj, this.condition[0].condition);
215
+ } else {
216
+ if (this.bracket.length > 0) {
217
+ let last = this.bracket.length -1;
218
+ obj['$and'] = [];
219
+ this.createCondition(last, obj['$and']);
220
+ }
221
+ }
222
+ }
223
+ return obj;
224
+ },
225
+ searchCondition() {
226
+ this.condition = [];
227
+ if (!this.checkCondition()){
228
+ return;
229
+ }
230
+ this.modalSearch = false;
231
+ this.$emit('search', this.getResultCondition());
232
+ },
233
+ createCondition(index, obj) {
234
+ if (index >= 0) {
235
+ let tempObj = {};
236
+ let list = [];
237
+ let str = this.bracket[index];
238
+ let oper = '$or';
239
+ if (str.indexOf('$and') !== -1) {
240
+ oper = '$and';
241
+ }
242
+ list = str.split(oper);
243
+ if (list.length > 0) {
244
+ tempObj[oper] = [];
245
+ list.forEach(el => {
246
+ if (el) {
247
+ let temp = el.split('_');
248
+ tempObj[oper].push(this.condition[Number(temp[1])].condition);
249
+ }
250
+ });
251
+ }
252
+ if (index -1 >= 0) {
253
+ this.createCondition(index-1,tempObj[oper]);
254
+ }
255
+
256
+ obj.push(tempObj);
257
+ }
258
+ },
259
+
260
+ checkCondition() {
261
+ this.bracketLeft = 0;
262
+ this.bracketRight = 0;
263
+ let data = this.$refs.grid.getData();
264
+ let result = [];
265
+
266
+ if (data && data.length > 0) {
267
+ for (let i=0;i<data.length;i++) {
268
+ if (data[i].bracket_left || data[i].bracket_right) {
269
+ if (!data[i].field) {
270
+ this.alert('第'+(i+1)+'行的条件字段为空,请检查');
271
+ return false;
272
+ }
273
+ if (!data[i].editors) {
274
+ this.alert('第'+(i+1)+'行的值为空,请检查');
275
+ return false;
276
+ }
277
+ if (data[i].bracket_left) {
278
+ this.bracketLeft = this.bracketLeft + Number(data[i].bracket_left);
279
+ }
280
+ if (data[i].bracket_right) {
281
+ this.bracketRight = this.bracketRight + Number(data[i].bracket_right);
282
+ }
283
+ }
284
+
285
+ if (data[i].field && data[i].editors) {
286
+ if (!data[i].relationship) {
287
+ this.alert('第'+(i+1)+'行的关系为空,请检查');
288
+ return false;
289
+ }
290
+ result.push(this.$Method.copy(data[i]));
291
+ }
292
+ }
293
+ }
294
+ if (this.bracketLeft !== this.bracketRight) {
295
+ this.alert('有效条件的左括号('+this.bracketLeft+')与右括号('+this.bracketRight+')的数量不一致,请检查');
296
+ return false;
297
+ }
298
+ if (result.length > 0) {
299
+ let str = '';
300
+ result.forEach((el,j) => {
301
+ el.condition = this.getConditionValue(el.field,el.editors,el.calculator,this.dataType[el.field]);
302
+ if (el.bracket_left === '1') {
303
+ str = str + '(';
304
+ }
305
+ if (el.bracket_left === '2') {
306
+ str = str + '((';
307
+ }
308
+ str = str + el.field + '_' + j;
309
+ if (el.bracket_right === '1') {
310
+ str = str + ')';
311
+ }
312
+ if (el.bracket_right === '2') {
313
+ str = str + '))';
314
+ }
315
+ if (j + 1 < result.length) {
316
+ if (el.relationship === '1') {
317
+ str = str + '$and';
318
+ }
319
+ if (el.relationship === '2') {
320
+ str = str + '$or';
321
+ }
322
+ }
323
+ });
324
+ this.condition = result;
325
+ this.bracket = [];
326
+ if (str) {
327
+ this.separateBracket(str, this.bracket);
328
+ }
329
+ this.bracket.some(el => {
330
+ let andIndex = el.indexOf('$and');
331
+ let orIndex = el.indexOf('$or');
332
+ if (andIndex !== -1 && orIndex !== -1) {
333
+ let oper = '$or';
334
+ let opername = '或';
335
+ if (orIndex < andIndex) {
336
+ oper = '$and';
337
+ opername = '且';
338
+ }
339
+ let list = el.split('_');
340
+ let index = -1;
341
+ if (list.length > 0) {
342
+ list.some(el2 => {
343
+ if (el2.indexOf(oper) !== -1) {
344
+ let tempList= el2.split(oper);
345
+ if (tempList.length > 0) {
346
+ index = Number(tempList[0]);
347
+ return true;
348
+ }
349
+ }
350
+ });
351
+ }
352
+ if (index > -1) {
353
+ this.alert('第'+(index+1)+'行的关系不能为['+opername+']或请添加括号' );
354
+ return true;
355
+ }
356
+ }
357
+ });
358
+ }
359
+ return true;
360
+ },
361
+
362
+ separateBracket (str,obj) {
363
+ let newStr = this.$Method.copy(str);
364
+ let bracket_leftIndex = newStr.lastIndexOf('(');
365
+ let bracket_rightIndex = newStr.indexOf(')');
366
+ if (bracket_leftIndex !== -1 && bracket_rightIndex !== -1) {
367
+ let tempstr = newStr.substring(bracket_leftIndex+1,bracket_rightIndex);
368
+ obj.push(tempstr);
369
+ str = str.replace('('+tempstr+')','');
370
+ if (str) {
371
+ this.separateBracket(str,obj);
372
+ }
373
+ } else {
374
+ if (newStr) {
375
+ obj.push(newStr);
376
+ }
377
+ }
378
+ },
379
+
380
+ show() {
381
+ this.modalSearch = true;
382
+ },
383
+ backCondition() {
384
+ this.modalSearch = false;
385
+ }
386
+ },
387
+ mounted () {
388
+ this.clearCondition();
389
+ }
390
+ };
391
+ </script>