yx-navbar.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <template>
  2. <view class="narBarCon">
  3. <view class="topBarCon">
  4. <view class="itemCon">
  5. <view class="leftIcon">
  6. <u-icon
  7. v-if="isBack"
  8. @click.once="leftClick"
  9. name="arrow-left"
  10. size="23"
  11. color="#fff"
  12. ></u-icon>
  13. </view>
  14. <view class="title">
  15. <span v-if="!searchShow">{{title}}</span>
  16. <u-search bgColor="#fff" shape="square" :showAction="false" v-if="searchShow" placeholder="请输入关键字" v-model="keyword" @change="onSearchInput"></u-search>
  17. </view>
  18. <view class="rightIcon" v-if="isAdd||isSearch">
  19. <view class="yuan" v-if="!searchShow">
  20. <u-icon
  21. v-if="isSearch"
  22. name="search"
  23. size="24"
  24. color="#eb5a10"
  25. @click="openSearch"
  26. ></u-icon>
  27. <u-icon
  28. v-if="isAdd"
  29. @click="addMenuShow=true"
  30. name="plus"
  31. size="16"
  32. color="#eb5a10"
  33. ></u-icon>
  34. </view>
  35. <view v-if="searchShow" style="font-size: 28rpx;margin-left: 20rpx;" @click="clsoeSearch">取消</view>
  36. </view>
  37. </view>
  38. </view>
  39. <view class="searchOptions" v-if="searchToolList.length>0&&searchShow">
  40. <view class="myList" v-for="(item, index) in searchToolList" :key="index" @click="chooseItem(item)">
  41. <u--image
  42. radius="4"
  43. :src="item.icon"
  44. width="32px"
  45. height="32px"
  46. ></u--image>
  47. <view class="name">{{item.funcName}}</view>
  48. <u-icon
  49. name="arrow-right"
  50. size="21"
  51. color="#ccc"
  52. ></u-icon>
  53. </view>
  54. </view>
  55. <view class="addMenuCon column y-center flex-around" v-if="addMenuShow">
  56. <view class="row wid-80 flex-around" @click="eventUp(1)">
  57. <u-icon name="minus-circle-fill" size="16" color="#fff"></u-icon>
  58. <text>{{toolStatus?'停用':'启用'}}工具</text>
  59. </view>
  60. <view class="row wid-80 flex-around" @click="eventUp(2)">
  61. <u-icon name="file-text-fill" size="20" color="#fff"></u-icon>
  62. <text>申请开放</text>
  63. </view>
  64. <view class="row wid-80 flex-around" @click="eventUp(3)">
  65. <u-icon name="share-square" size="18" color="#fff"></u-icon>
  66. <text>账号授权</text>
  67. </view>
  68. <view class="row wid-80 flex-around" @click="eventUp(4)">
  69. <u-icon name="trash-fill" size="18" color="#fff"></u-icon>
  70. <text>删除工具</text>
  71. </view>
  72. </view>
  73. <view class="addMenuConZhe" v-if="addMenuShow" v-on:touchstart="addMenuShow=false;searchToolList=[]"/>
  74. <!-- <u-icon class="close-icon" name="close-circle" size="22" color="#fff"></u-icon>-->
  75. </view>
  76. </template>
  77. <script>
  78. import {getFuncListApi} from 'common/api.js'
  79. export default {
  80. name:"yx-navbar",
  81. props:{
  82. isBack:{
  83. type: Boolean,
  84. default: true
  85. },
  86. title:{
  87. type: String,
  88. default: ''
  89. },
  90. isSearch:{
  91. type: Boolean,
  92. default: false
  93. },
  94. isAdd:{
  95. type: Boolean,
  96. default: false
  97. },
  98. toolStatus:{
  99. type: Boolean,
  100. default: true
  101. }
  102. },
  103. data() {
  104. return {
  105. addMenuShow:false,
  106. searchShow:false,
  107. timer:'',
  108. indexList:[
  109. // {url:'https://cdn.uviewui.com/uview/album/1.jpg'},
  110. // {url:'https://cdn.uviewui.com/uview/album/2.jpg'},
  111. ],
  112. keyword:'',
  113. searchToolList:[]
  114. };
  115. },
  116. methods:{
  117. eventUp(e){
  118. this.$emit('eventUp',e)
  119. this.addMenuShow=false
  120. },
  121. // 点击左侧区域
  122. leftClick() {
  123. // 如果配置了autoBack,自动返回上一页
  124. // this.$emit('leftClick')
  125. // if(this.$props.isBack) {
  126. uni.navigateBack()
  127. uni.$emit('refreshPage')
  128. // }
  129. },
  130. // 点击右侧区域
  131. rightClick() {
  132. this.$emit('rightClick')
  133. },
  134. openSearch(){
  135. console.log("2222")
  136. this.searchShow=true
  137. },
  138. clsoeSearch(){
  139. this.keyword=''
  140. this.searchToolList=[]
  141. this.searchShow=false
  142. },
  143. onSearchInput(v){
  144. console.log('onSearchInput',v)
  145. // if(v.length>0)uni.$u.throttle(this.$emit('search',v), 600)
  146. clearTimeout(this.timer)
  147. if(v.length==0)return
  148. this.timer=setTimeout(()=>{
  149. this.allSearch(v)
  150. },1000)
  151. },
  152. async allSearch(e){
  153. console.log('search',e)
  154. let params={
  155. listType:0,
  156. pageIndex:1,
  157. pageSize:9999,
  158. funcName:e,
  159. }
  160. const res = await getFuncListApi(params)
  161. if(res.data.toolList){
  162. this.searchToolList=res.data.toolList
  163. }else{
  164. this.searchToolList=[]
  165. uni.showToast({
  166. title:'搜索无结果',
  167. icon:'none'
  168. })
  169. }
  170. },
  171. chooseItem(item){
  172. console.log(item)
  173. this.searchShow=false
  174. this.keyword=''
  175. this.searchToolList=[]
  176. uni.navigateTo({
  177. url:"/pages/detail/detail?id="+item.id
  178. })
  179. }
  180. }
  181. }
  182. </script>
  183. <style lang="less">
  184. @import "./yx-navbar.less";
  185. </style>