yx-navbar.vue 5.1 KB

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