customSearch.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <template>
  2. <div class="customSearch height_100" v-DivHeight="getDivHeight">
  3. <el-container style=" border: 1px solid #eee" :style="{height:tableHeight+'px'}">
  4. <el-aside v-if="DBType == 'WD'">
  5. <div>
  6. <div class="clearfix">
  7. <span><el-checkbox v-model="checked" @change="change">全部国家地区</el-checkbox></span>
  8. <span style="float: right; padding: 3px 0" type="text">{{ checkList.length }}/{{countryList1.length}}</span>
  9. </div>
  10. <div style="padding:10px">
  11. <el-input style="width:100%" v-model="suggest" @input="querySearch" placeholder="请输入内容"></el-input>
  12. </div>
  13. <div style="overflow-y:auto;overflow-x:hidden;" :style="{height:tableHeight-120+'px'}">
  14. <el-checkbox-group v-model="checkList">
  15. <div v-for="item in countryList1" :key="item.value" class="item">
  16. <el-checkbox :label="item.value">{{ item.label }}({{ item.value }})</el-checkbox>
  17. </div>
  18. </el-checkbox-group>
  19. </div>
  20. </div>
  21. </el-aside>
  22. <el-main>
  23. <div>
  24. <myFormSearch :list="(editData && editData.component == 'customSearch')?editData.data:list" :field="field" :searchValue="true" @search="search"></myFormSearch>
  25. </div>
  26. </el-main>
  27. </el-container>
  28. </div>
  29. </template>
  30. <script>
  31. import { getTableHeight } from '@/views/components/mixins'
  32. export default {
  33. name:'customSearch',
  34. components: {
  35. },
  36. mixins: [ getTableHeight],
  37. props: ['countryList','DBType','selected','editData'],
  38. data() {
  39. return {
  40. list:[],
  41. checkList:[],
  42. checked:false,
  43. //搜索值
  44. field:JSON.parse(JSON.stringify(this.$constants.searchField)),
  45. countryList1:[],
  46. suggest:'',
  47. };
  48. },
  49. watch: {
  50. 'checkList'(val){
  51. if(val.length == this.countryList1.length){
  52. this.checked = true
  53. }else{
  54. this.checked = false
  55. }
  56. },
  57. DBType(){
  58. this.getField()
  59. },
  60. 'countryList'(){
  61. this.countryList1 = this.countryList.filter(item=>item.value!='CN')
  62. },
  63. },
  64. computed: {},
  65. created() {},
  66. mounted() {
  67. if(this.selected){
  68. this.checkList = JSON.parse(JSON.stringify(this.selected))
  69. }
  70. this.countryList1 = this.countryList.filter(item=>item.value!='CN')
  71. this.getField()
  72. if(this.editData && this.editData.component == 'customSearch'){
  73. if(this.editData.checkList){
  74. this.checkList = this.editData.checkList
  75. }
  76. }
  77. },
  78. methods: {
  79. querySearch() {
  80. var restaurants = this.countryList.filter(item=>item.value!='CN')
  81. var results = this.suggest ? restaurants.filter(this.createFilter(this.suggest)) : restaurants;
  82. this.countryList1 = results
  83. },
  84. createFilter(queryString) {
  85. return (restaurant) => {
  86. return (restaurant.label.indexOf(queryString) !== -1 || restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) !== -1);
  87. };
  88. },
  89. getField(){
  90. // var a = JSON.parse(JSON.stringify(this.$constants.searchField))
  91. // this.field = a.map(item=>{
  92. // item.children = item.children.filter(item1 =>{return item1.value!='GJ' && item1.type != (this.DBType != 'WD'?'2':'1')})
  93. // return item
  94. // })
  95. var a = JSON.parse(JSON.stringify(this.$constants.searchField))
  96. this.field = a.map(item=>{
  97. item.children = item.children.filter(item1 =>{return item1.value!='GJ' && item1.type != (this.DBType != 'WD'?'2':'1')})
  98. return item
  99. }).filter(item=>{
  100. return item.children.length>0
  101. })
  102. },
  103. search(val,data){
  104. var params = {
  105. data:data,
  106. DBType:this.DBType,
  107. component:'customSearch'
  108. }
  109. if(this.DBType == 'WD' && this.checkList.length>0){
  110. params.checkList = this.checkList
  111. if(val){
  112. if(this.checkList.length==1){
  113. var a = `GJ=${this.checkList[0]}`
  114. }else{
  115. var a = `GJ=(${this.checkList.join(" OR ")})`
  116. }
  117. var str = `${val} AND ${a}`
  118. }else{
  119. if(this.checkList.length==1){
  120. var str = `GJ=${this.checkList[0]}`
  121. }else{
  122. var str = `GJ=(${this.checkList.join(" OR ")})`
  123. }
  124. }
  125. this.$emit('search',str,params)
  126. }else{
  127. this.$emit('search',`${val}`,params)
  128. }
  129. },
  130. change(val){
  131. if(val){
  132. this.checkList = this.countryList1.filter(item=>item.value!='CN').map(item=>item.value)
  133. }else{
  134. this.checkList = []
  135. }
  136. },
  137. },
  138. };
  139. </script>
  140. <style lang="scss" scoped>
  141. .clearfix {
  142. // padding-left:20px ;
  143. padding:10px 20px ;
  144. border-bottom: 1px solid #eeeeee;
  145. display: flex;
  146. justify-content: space-between;
  147. align-items: center;
  148. }
  149. .item{
  150. padding:10px 20px;
  151. }
  152. </style>