QueryCondition.vue 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <template>
  2. <div>
  3. <div>
  4. <!-- <ul
  5. class="nav nav-tabs m-row"
  6. role="tablist"
  7. >
  8. <li
  9. role="presentation"
  10. :class="{'active': isSimple === true}"
  11. >
  12. <a @click="changeSearch(true)">{{ $t('lang.QueryCondition.simpleQuery') }}</a>
  13. </li>
  14. <li
  15. role="presentation"
  16. :class="{'active': isSimple === false}"
  17. >
  18. <a @click="changeSearch(false)">{{ $t('lang.QueryCondition.advancedQuery') }}</a>
  19. </li>
  20. <slot name="header" :is-simple="isSimple" />
  21. </ul> -->
  22. <div>
  23. <div>
  24. <QueryConditionSimple
  25. v-show="!isGenerator"
  26. ref="queryConditionSimple"
  27. :info-buttons="infoButtons"
  28. :is-search-widget="isSearchWidget"
  29. :show-button="showButton"
  30. @simple-search="simpleSearch"
  31. @refresh-search="refreshSearch"
  32. @execute-process="executeProcess($event)"
  33. @execute-export="executeExport(true)"
  34. />
  35. </div>
  36. <div
  37. v-show="isComplex"
  38. >
  39. <a-drawer
  40. v-model:open="searchVisible"
  41. title="高级查询"
  42. width="440px"
  43. style="z-index: 1050;"
  44. placement="right"
  45. @close="closeSearch"
  46. >
  47. <QueryConditionComplex
  48. ref="queryConditionComplex"
  49. :info-window-no="infoWindowNo"
  50. :filter-fields="filterFields"
  51. :info-buttons="infoButtons"
  52. :is-search-widget="isSearchWidget"
  53. :show-button="showButton"
  54. @complex-search="complexSearch"
  55. @execute-process="executeProcess($event)"
  56. @execute-export="executeExport(false)"
  57. />
  58. </a-drawer>
  59. </div>
  60. <slot name="body" />
  61. </div>
  62. </div>
  63. </div>
  64. </template>
  65. <script>
  66. import InfoWindowUtil from './InfoWindowUtil.js';
  67. import QueryConditionSimple from './QueryConditionSimple.vue';
  68. import QueryConditionComplex from './QueryConditionComplex.vue';
  69. export default {
  70. name: 'QueryCondition',
  71. components: {
  72. QueryConditionSimple, QueryConditionComplex,
  73. },
  74. props: {
  75. 'infoWindowNo':{
  76. type: String,
  77. default: null,
  78. },
  79. 'infoFilterFields': {
  80. type: Array,
  81. default: null,
  82. },
  83. 'infoButtons': {
  84. type: Array,
  85. default: null,
  86. },
  87. 'isSearchWidget':{
  88. type: Boolean,
  89. default: null,
  90. },
  91. 'showButton':{
  92. type: Boolean,
  93. default: null,
  94. },
  95. 'isComplex':{
  96. type: Boolean,
  97. default: false,
  98. },
  99. 'isGenerator':{
  100. type: Boolean,
  101. default: false,
  102. },
  103. },
  104. emits: ['simpleSearch', 'complexSearch','openComplex', 'refreshSearch', 'executeProcess', 'executeExport', 'changeSearch'],
  105. data: function () {
  106. return {
  107. simpleConditionValue: '',
  108. isSimple: true,
  109. filterFields: [],
  110. selectedText: [],
  111. searchVisible:false,
  112. searchType:'simple',
  113. };
  114. },
  115. watch: {
  116. $route: function (to, from) {
  117. var _self = this;
  118. _self.simpleConditionValue = '';
  119. _self.filterFields = [];
  120. },
  121. infoFilterFields: {
  122. deep: true,
  123. handler: function (currentValue, oldValue) {
  124. var _self = this;
  125. _self.filterFields.splice(0, _self.filterFields.length);
  126. if (currentValue == undefined) {
  127. return;
  128. }
  129. var cloneInfoFilterFields = InfoWindowUtil.cloneInfoFilterFields(currentValue);
  130. for (var i = 0, len = cloneInfoFilterFields.length; i < len; i++) {
  131. _self.filterFields.push(cloneInfoFilterFields[i]);
  132. }
  133. },
  134. },
  135. isComplex:{
  136. handler(newVal){
  137. this.searchVisible = newVal;
  138. },
  139. immediate:true,
  140. },
  141. searchVisible:{
  142. handler(newVal){
  143. if(newVal){
  144. this.searchType = 'complex';
  145. } else {
  146. this.searchType = 'simple';
  147. }
  148. },
  149. immediate:true,
  150. },
  151. },
  152. methods: {
  153. /**
  154. * 是否是简单查询
  155. * @return {Object} 查询条件
  156. */
  157. isSimpleQuery: function () {
  158. return this.isSimple === true;
  159. },
  160. closeSearch(){
  161. this.searchVisible = false;
  162. this.searchType = 'simple';
  163. this.$emit('openComplex',false);
  164. },
  165. /**
  166. * 获取查询条件供外部调用
  167. * @return {Object} 查询条件
  168. */
  169. getQueryCondition: function () {
  170. var _self = this;
  171. var values = [];
  172. if (_self.searchType === 'simple') {
  173. values = this.$refs.queryConditionSimple.getQueryCondition();
  174. } else if (_self.searchType === 'complex') {
  175. values = this.$refs.queryConditionComplex.getQueryCondition();
  176. }
  177. return values;
  178. },
  179. /**
  180. * 触发简单查询
  181. * @return {void}
  182. */
  183. simpleSearch: function (value) {
  184. this.isSimple = true;
  185. this.searchType = value;
  186. this.$emit('simpleSearch','simple');
  187. },
  188. /**
  189. * 获取简单查询条件供外部调用
  190. * @return {Array} 查询条件
  191. */
  192. getSimpleQueryCondition: function () {
  193. var _self = this;
  194. var values = [];
  195. return values;
  196. },
  197. /**
  198. * 回车键查询
  199. * @return {void}
  200. */
  201. complexSearch: function (value) {
  202. this.isSimple = false;
  203. this.searchType = value;
  204. this.$emit('complexSearch','complex');
  205. },
  206. /**
  207. * 刷新搜索
  208. */
  209. refreshSearch: function () {
  210. this.$emit('refreshSearch');
  211. },
  212. /**
  213. * 执行流程
  214. *
  215. */
  216. executeProcess: function (infoButton) {
  217. this.$emit('executeProcess', infoButton);
  218. },
  219. /**
  220. * 执行导出
  221. * @return {void}
  222. */
  223. executeExport: function (isSimple) {
  224. this.$emit('executeExport',isSimple);
  225. },
  226. /**
  227. * 切换简单查询和高级查询
  228. * @param {Boolean} val 是否是简单查询
  229. * @return {void}
  230. */
  231. changeSearch: function (val) {
  232. var _self = this;
  233. if (val === false) {
  234. this.simpleConditionValue = '';
  235. _self.isSimple = false;
  236. }else if(val === true){
  237. _self.isSimple = true;
  238. }else{
  239. _self.isSimple = val;
  240. }
  241. _self.$emit('changeSearch', val);
  242. // 当前查询是简单查询,切换到高级查询的时候,清空查询条件
  243. if (this.isSimple === true && val === false) {
  244. if (_self.filterFields != undefined) {
  245. _self.filterFields.forEach(function (item) {
  246. item.value.value1 = '';
  247. item.value.value2 = '';
  248. });
  249. }
  250. }
  251. },
  252. },
  253. };
  254. </script>
  255. <style scoped>
  256. .m-row {
  257. margin-bottom: 5px;
  258. }
  259. .nav > li > a {
  260. padding: 8px 10px;
  261. }
  262. </style>