allTypes.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  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',selectId==item.myChartClassifyId?'active':'']"
  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. @confirm="myClassifyMoveEnd"
  44. ></dragSorts>
  45. </view>
  46. </van-collapse-item>
  47. </van-collapse>
  48. </block>
  49. <block v-else>
  50. <view class="list">
  51. <view
  52. :class="['item',selectId==item.myChartClassifyId?'active':'']"
  53. v-for="item in pubClassifyList"
  54. :key="item.myChartClassifyName"
  55. @click="handleSelectClassify(item,true)"
  56. >{{item.myChartClassifyName}}</view>
  57. </view>
  58. </block>
  59. </view>
  60. </view>
  61. </template>
  62. <script>
  63. import {apiChartClassifyList,apiClassifyMove} from '@/api/chart'
  64. import dragSorts from '@/components/chartClassifyItem/HM-dragSorts.vue'
  65. export default {
  66. components: {
  67. dragSorts
  68. },
  69. data () {
  70. return {
  71. searchVal:'',
  72. active:['common','mine'],
  73. selectId:0,
  74. myClassifyList:[],
  75. pubClassifyList:[],
  76. classifyListHeight:0,//我的分类默认高度
  77. rowHeight:44,
  78. }
  79. },
  80. onLoad(options) {
  81. this.selectId=options.selectId
  82. this.getList()
  83. },
  84. methods: {
  85. // 搜索关键词变化
  86. searchValChange(e){
  87. this.searchVal=e.detail
  88. },
  89. onSearch(){
  90. this.getList()
  91. },
  92. onClearSearch(){
  93. this.searchVal=''
  94. this.getList()
  95. },
  96. change(e){
  97. this.active=e.detail
  98. },
  99. // 获取分类数据
  100. async getList(){
  101. const res=await apiChartClassifyList({Keywords:this.searchVal})
  102. if(res.code===200){
  103. this.myClassifyList=res.data.private_classify||[]
  104. this.pubClassifyList=res.data.public_classify||[]
  105. this.classifyListHeight=this.rowHeight*this.myClassifyList.length
  106. }
  107. },
  108. // 点击我的分类项
  109. myClassifyClick(e){
  110. this.handleSelectClassify(e.value,false)
  111. },
  112. handleSelectClassify(item,isPublic){
  113. this.selectId=item.myChartClassifyId
  114. uni.$emit('classifyPageSelect', {selectId:this.selectId,isPublic:isPublic})
  115. uni.navigateBack()
  116. },
  117. // 分类移动
  118. async myClassifyMoveEnd(e){
  119. const moveTarget=e.moveRow
  120. const index=e.moveTo// 拖动后的序号
  121. const list=e.list//拖动后的列表
  122. // console.log(moveTarget.myChartClassifyId);
  123. // console.log(index);
  124. // console.log(list);
  125. const PrevClassifyId=list[index-1]&&list[index-1].myChartClassifyId||0
  126. const NextClassifyId=list[index+1]&&list[index+1].myChartClassifyId||0
  127. const res=await apiClassifyMove({
  128. MyChartClassifyId:moveTarget.myChartClassifyId,
  129. PrevClassifyId:PrevClassifyId,
  130. NextClassifyId:NextClassifyId
  131. })
  132. if(res.code===200){
  133. this.myClassifyList=list
  134. }else{
  135. uni.showToast({
  136. title: '移动失败',
  137. icon: 'none'
  138. })
  139. }
  140. },
  141. }
  142. };
  143. </script>
  144. <style lang="scss">
  145. .chart-alltype-page{
  146. .list-wrap{
  147. .van-cell__title, .van-cell__value{
  148. flex: none !important;
  149. }
  150. .van-cell:after{
  151. border: none !important;
  152. }
  153. .van-collapse-item__content{
  154. padding: 0;
  155. }
  156. .van-cell__title{
  157. font-size: 16px;
  158. font-weight: bold;
  159. }
  160. .van-hairline--top:after{
  161. border-top-width: 0 !important;
  162. }
  163. .self-wrap{
  164. // margin-top: 60rpx;
  165. }
  166. }
  167. .list{
  168. .item{
  169. &:first-child{
  170. border-top: 1px solid #E5E5E5;
  171. }
  172. padding: 20rpx 34rpx;
  173. border-bottom: 1px solid #E5E5E5;
  174. color: #1F243A;
  175. font-size: 14px;
  176. }
  177. .active{
  178. color: #E3B377;
  179. }
  180. }
  181. .empty-box{
  182. text-align: center;
  183. font-size: 32rpx;
  184. color: #999;
  185. padding-top: 150rpx;
  186. image{
  187. width: 346rpx;
  188. margin-bottom: 57rpx;
  189. }
  190. }
  191. }
  192. </style>