allTypes.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <template>
  2. <view class="chart-alltype-page">
  3. <van-sticky style="background: #fff;width:100%">
  4. <van-search
  5. shape="round"
  6. :value="searchVal"
  7. placeholder="图表分类搜索"
  8. @change="searchValChange"
  9. @search="onSearch"
  10. @clear="onClearSearch"
  11. clear-trigger="always"
  12. style="width:100%"
  13. />
  14. </van-sticky>
  15. <view class="empty-box" v-if="myClassifyList.length==0&&pubClassifyList.length==0">
  16. <image
  17. :src="globalImgUrls.chartEmpty"
  18. mode="widthFix"
  19. />
  20. <view>暂时找不到对应分类,试试别的搜索词吧~</view>
  21. </view>
  22. <view class="list-wrap" v-else>
  23. <block v-if="userInfo.is_inner==1">
  24. <van-collapse :value="active" @change="change" :border="false">
  25. <van-collapse-item title="公共图库" name="common" :border="false">
  26. <view class="list">
  27. <view
  28. class="item"
  29. v-for="item in pubClassifyList"
  30. :key="item.myChartClassifyName"
  31. @click="handleSelectClassify(item,true)"
  32. >{{item.myChartClassifyName}}</view>
  33. </view>
  34. </van-collapse-item>
  35. <van-collapse-item title="我的图库" name="mine" :border="false" custom-class="self-wrap">
  36. <view class="list" v-if="myClassifyList.length>0">
  37. <dragSorts
  38. :list="myClassifyList"
  39. :selectId="selectId"
  40. :rowHeight="rowHeight"
  41. :listHeight="classifyListHeight+20"
  42. @onclick="myClassifyClick"
  43. ></dragSorts>
  44. </view>
  45. </van-collapse-item>
  46. </van-collapse>
  47. </block>
  48. <block v-else>
  49. <view class="list">
  50. <view
  51. class="item"
  52. v-for="item in pubClassifyList"
  53. :key="item.myChartClassifyName"
  54. @click="handleSelectClassify(item,true)"
  55. >{{item.myChartClassifyName}}</view>
  56. </view>
  57. </block>
  58. </view>
  59. </view>
  60. </template>
  61. <script>
  62. import {apiChartClassifyList} from '@/api/chart'
  63. import dragSorts from '@/components/chartClassifyItem/HM-dragSorts.vue'
  64. export default {
  65. components: {
  66. dragSorts
  67. },
  68. data () {
  69. return {
  70. searchVal:'',
  71. active:['common','mine'],
  72. selectId:0,
  73. myClassifyList:[],
  74. pubClassifyList:[],
  75. classifyListHeight:0,//我的分类默认高度
  76. rowHeight:44,
  77. }
  78. },
  79. onLoad(options) {
  80. this.selectId=options.selectId
  81. this.getList()
  82. },
  83. methods: {
  84. // 搜索关键词变化
  85. searchValChange(e){
  86. this.searchVal=e.detail
  87. },
  88. onSearch(){
  89. this.getList()
  90. },
  91. onClearSearch(){
  92. this.searchVal=''
  93. this.getList()
  94. },
  95. change(e){
  96. this.active=e.detail
  97. },
  98. // 获取分类数据
  99. async getList(){
  100. const res=await apiChartClassifyList({Keywords:this.searchVal})
  101. if(res.code===200){
  102. this.myClassifyList=res.data.private_classify||[]
  103. this.pubClassifyList=res.data.public_classify||[]
  104. this.classifyListHeight=this.rowHeight*this.myClassifyList.length
  105. }
  106. },
  107. // 点击我的分类项
  108. myClassifyClick(e){
  109. this.handleSelectClassify(e.value.myChartClassifyId,false)
  110. },
  111. handleSelectClassify(item,isPublic){
  112. this.selectId=item.myChartClassifyId
  113. uni.$emit('classifyPageSelect', {selectId:this.selectId,isPublic:isPublic})
  114. uni.navigateBack()
  115. }
  116. }
  117. };
  118. </script>
  119. <style lang="scss">
  120. .chart-alltype-page{
  121. .list-wrap{
  122. .van-cell__title, .van-cell__value{
  123. flex: none !important;
  124. }
  125. .van-cell:after{
  126. border: none !important;
  127. }
  128. .van-collapse-item__content{
  129. padding: 0;
  130. }
  131. .van-cell__title{
  132. font-size: 16px;
  133. font-weight: bold;
  134. }
  135. .van-hairline--top:after{
  136. border-top-width: 0 !important;
  137. }
  138. .self-wrap{
  139. margin-top: 60rpx;
  140. }
  141. }
  142. .list{
  143. .item{
  144. &:first-child{
  145. border-top: 1px solid #E5E5E5;
  146. }
  147. padding: 20rpx 34rpx;
  148. border-bottom: 1px solid #E5E5E5;
  149. color: #1F243A;
  150. font-size: 14px;
  151. }
  152. }
  153. .empty-box{
  154. text-align: center;
  155. font-size: 32rpx;
  156. color: #999;
  157. padding-top: 150rpx;
  158. image{
  159. width: 346rpx;
  160. margin-bottom: 57rpx;
  161. }
  162. }
  163. }
  164. </style>