selectVariety.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <template>
  2. <view class="select-variety-page">
  3. <view class="flex variety-list">
  4. <view class="variety-item" v-for="(item,index) in list" :key="item.name" @click="handleSelect(index)">
  5. <view :class="['variety-radio',item.selected&&'variety-radio-s']"></view>
  6. <image class="variety-img" :src="item.pic_url" mode="aspectFill"></image>
  7. <view class="variety-name">{{item.name}}</view>
  8. </view>
  9. </view>
  10. <view class="global-btn-yellow-change btn" v-if="has" @click="handleConfirm">关注</view>
  11. <view class="global-btn-disable btn" v-else>请至少关注一个品种</view>
  12. </view>
  13. </template>
  14. <script>
  15. import {apiGetPermissionList} from '@/api/common'
  16. export default {
  17. data () {
  18. return {
  19. list:[]
  20. }
  21. },
  22. computed: {
  23. has(){
  24. let flag=false
  25. this.list.forEach(item=>{
  26. if(item.selected) flag=true
  27. })
  28. return flag
  29. }
  30. },
  31. onLoad(options){
  32. let beforePagePermission=''
  33. const eventChannel = this.getOpenerEventChannel();
  34. // 监听上个页面传来的已经选择的权限
  35. eventChannel.on('hasPermissionData', (data) =>{
  36. beforePagePermission=data.data
  37. this.getList(beforePagePermission)
  38. })
  39. },
  40. methods: {
  41. handleSelect(index){
  42. this.list[index].selected=!this.list[index].selected
  43. },
  44. async getList(arr){
  45. const hasArr=arr.split(',')||[]
  46. const res=await apiGetPermissionList()
  47. if(res.code===200){
  48. this.list=res.data.map(item=>{
  49. let obj={...item,selected:false}
  50. if(hasArr.find((e)=>e===item.name)){
  51. obj.selected=true
  52. }
  53. return obj
  54. })
  55. }
  56. },
  57. handleConfirm(){
  58. let arr=[]
  59. this.list.forEach(item=>{
  60. if(item.selected){
  61. arr.push(item.name)
  62. }
  63. })
  64. uni.$emit('selectPermission',{permissionList:arr})
  65. uni.navigateBack()
  66. }
  67. }
  68. }
  69. </script>
  70. <style lang="scss">
  71. .variety-list{
  72. padding: 50rpx 68rpx;
  73. justify-content: space-between;
  74. flex-wrap: wrap;
  75. text-decoration: none;
  76. .variety-item{
  77. margin-bottom: 30rpx;
  78. position: relative;
  79. width: 188rpx;
  80. }
  81. .variety-img{
  82. width: 188rpx;
  83. height: 188rpx;
  84. background-color: $global-bg-color-grey;
  85. border-radius: 8rpx;
  86. }
  87. .variety-name{
  88. text-align: center;
  89. }
  90. // 使用伪类 补充一个元素
  91. &::after{
  92. content: "";
  93. height: 0;
  94. width: 188rpx;
  95. }
  96. .variety-radio{
  97. position: absolute;
  98. top: 12rpx;
  99. right: 12rpx;
  100. width: 20px;
  101. height: 20px;
  102. border-radius: 50%;
  103. border: 1px solid #fff;
  104. }
  105. .variety-radio-s{
  106. background-image: url('./static/radio-s.png');
  107. background-size: cover;
  108. border: none;
  109. background-color: #fff;
  110. }
  111. }
  112. .btn{
  113. height: 80rpx;
  114. line-height: 80rpx;
  115. border-radius: 40rpx;
  116. width: 614rpx;
  117. margin-left: auto;
  118. margin-right: auto;
  119. }
  120. </style>