海南旅游项目 前端仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

253 lines
6.1 KiB

  1. <template>
  2. <view class="content">
  3. <!-- 我的频道已选的 -->
  4. <view class="title lf-font-bold">
  5. <text>我的频道</text>
  6. </view>
  7. <view class="lf-flex-wrap lf-p-l-5">
  8. <view class="select-item active" hover-class="lf-opacity"
  9. v-for="(item, key, index) in select_list" :key="index"
  10. @click="cancelItem(key)">
  11. <text>{{ key }}</text>
  12. <text class="lf-iconfont lf-icon-cuowu remove-icon"></text>
  13. </view>
  14. </view>
  15. <!-- 机票酒店 -->
  16. <view class="title lf-m-t-40">
  17. <image src="../../static/images/plane_ticket.png" class="icon-img"></image>
  18. <text class="lf-m-l-10">机票酒店</text>
  19. </view>
  20. <view class="lf-flex-wrap lf-p-l-5 select-box">
  21. <view class="select-item" hover-class="lf-opacity"
  22. v-for="(item, index) in plane_ticket_list" :key="index"
  23. v-if="!item.checked" @click="activaItem(item, index, 'plane_ticket_list')">{{ item.name }}
  24. </view>
  25. </view>
  26. <!-- 旅游度假 -->
  27. <view class="title lf-m-t-40">
  28. <image src="../../static/images/travel.png" class="icon-img"></image>
  29. <text class="lf-m-l-10">旅游度假</text>
  30. </view>
  31. <view class="lf-flex-wrap lf-p-l-5 select-box">
  32. <view class="select-item" hover-class="lf-opacity"
  33. v-for="(item, index) in travel_list" :key="index"
  34. v-if="!item.checked" @click="activaItem(item, index, 'travel_list')">{{ item.name }}
  35. </view>
  36. </view>
  37. <!-- 接送服务 -->
  38. <view class="title lf-m-t-40">
  39. <image src="../../static/images/jieson.png" class="icon-img"></image>
  40. <text class="lf-m-l-10">接送服务</text>
  41. </view>
  42. <view class="lf-flex-wrap lf-p-l-5 select-box">
  43. <view class="select-item" hover-class="lf-opacity"
  44. v-for="(item, index) in jieson_list" :key="index"
  45. v-if="!item.checked" @click="activaItem(item, index, 'jieson_list')">{{ item.name }}
  46. </view>
  47. </view>
  48. <!-- 其他精选 -->
  49. <view class="title lf-m-t-40">
  50. <image src="../../static/images/other.png" class="icon-img"></image>
  51. <text class="lf-m-l-10">其他精选</text>
  52. </view>
  53. <view class="lf-flex-wrap lf-p-l-5 select-box">
  54. <view class="select-item" hover-class="lf-opacity"
  55. v-for="(item, index) in other_list" :key="index"
  56. v-if="!item.checked" @click="activaItem(item, index, 'other_list')">{{ item.name }}
  57. </view>
  58. </view>
  59. <!-- 攻略社区 -->
  60. <view class="title lf-m-t-40">
  61. <image src="../../static/images/strategy.png" class="icon-img"></image>
  62. <text class="lf-m-l-10">攻略社区</text>
  63. </view>
  64. <view class="lf-flex-wrap lf-p-l-5 select-box">
  65. <view class="select-item" hover-class="lf-opacity"
  66. v-for="(item, index) in strategy_list" :key="index"
  67. v-if="!item.checked" @click="activaItem(item, index, 'strategy_list')">{{ item.name }}
  68. </view>
  69. </view>
  70. </view>
  71. </template>
  72. <script>
  73. export default {
  74. data(){
  75. return {
  76. select_list: {}, // 当前选中的频道
  77. plane_ticket_list: [{
  78. name: '多地比价',
  79. key: 'a1',
  80. checked: false
  81. },{
  82. name: '降价提醒',
  83. key: 'a2',
  84. checked: false
  85. },{
  86. name: '团体机票',
  87. key: 'a3',
  88. checked: false
  89. }], // 机票酒店
  90. travel_list: [{
  91. name: '周边游',
  92. checked: false
  93. },{
  94. name: '国内游',
  95. checked: false
  96. },{
  97. name: '主题玩法',
  98. checked: false
  99. },{
  100. name: '尾单特卖',
  101. checked: false
  102. },{
  103. name: '邮轮',
  104. checked: false
  105. },{
  106. name: '汽车·船票',
  107. checked: false
  108. },{
  109. name: '定制游',
  110. checked: false
  111. }], // 旅游度假
  112. jieson_list: [{
  113. name: '接送机',
  114. checked: false
  115. },{
  116. name: '接送火车',
  117. checked: false
  118. },{
  119. name: '打车',
  120. checked: false
  121. },{
  122. name: '按天包车',
  123. checked: false
  124. },{
  125. name: '定制包车',
  126. checked: false
  127. },{
  128. name: '国内租车',
  129. checked: false
  130. },{
  131. name: '境外租车',
  132. checked: false
  133. }], // 接送服务
  134. other_list: [{
  135. name: '每日签到',
  136. checked: false
  137. },{
  138. name: '会员中心',
  139. checked: false
  140. },{
  141. name: '任务中心',
  142. checked: false
  143. },{
  144. name: '智慧旅游',
  145. checked: false
  146. },{
  147. name: '兑换会员',
  148. checked: false
  149. },{
  150. name: '旅盟',
  151. checked: false
  152. }], // 其他精选
  153. strategy_list: [{
  154. name: '旅游攻略',
  155. checked: false
  156. },{
  157. name: '玩法指南',
  158. checked: false
  159. },{
  160. name: '有问必答',
  161. checked: false
  162. }]
  163. }
  164. },
  165. onLoad(){
  166. },
  167. methods: {
  168. // 添加频道
  169. activaItem(item, index, list_name){
  170. let select_list = this.select_list;
  171. if(!select_list[item.name]){
  172. if(Object.keys(select_list).length > 12){
  173. this.$msg('最多只能添加12个频道哦')
  174. }else{
  175. this.select_list[item.name] = list_name;
  176. this[list_name][index].checked = true;
  177. }
  178. }
  179. },
  180. // 移除频道
  181. cancelItem(key){
  182. // 源数据状态改变
  183. let list = this[this.select_list[key]];
  184. list.forEach(item => {
  185. if(item.name == key){
  186. item.checked = false;
  187. }
  188. });
  189. // 清除选中的对象
  190. delete this.select_list[key];
  191. }
  192. }
  193. }
  194. </script>
  195. <style lang="scss" scoped="scoped">
  196. .content{
  197. padding: 30rpx 32rpx;
  198. }
  199. .title{
  200. color: #222222;
  201. font-size: 32rpx;
  202. margin-bottom: 20rpx;
  203. display: flex;
  204. align-items: center;
  205. }
  206. .select-item{
  207. width: 170rpx;
  208. height: 82rpx;
  209. border: 1rpx solid #999999;
  210. font-size: 28rpx;
  211. color: #333333;
  212. text-align: center;
  213. line-height: 82rpx;
  214. background-color: #FFFFFF;
  215. margin-right: -1rpx;
  216. margin-top: -1rpx;
  217. box-sizing: border-box;
  218. }
  219. .active{
  220. border: 1rpx solid #1998FE;
  221. color: #1998FE;
  222. position: relative;
  223. // text-align: left;
  224. // display: flex;
  225. // justify-content: space-between;
  226. // box-sizing: border-box;
  227. // padding: 0 10rpx;
  228. .remove-icon{
  229. position: absolute;
  230. right: 0rpx;
  231. top: -28rpx;
  232. color: #FF0000;
  233. font-size: 26rpx;
  234. }
  235. }
  236. .lf-p-l-5{
  237. padding-left: 5rpx;
  238. }
  239. // .select-box{
  240. // overflow: hidden;
  241. // padding-top: 1rpx;
  242. // width: 100%;
  243. // height: max-content;
  244. // border-radius: 5rpx;
  245. // }
  246. .icon-img{
  247. width: 41rpx;
  248. height: 40rpx;
  249. }
  250. </style>