searchInfo.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810
  1. <template>
  2. <view>
  3. <u-sticky :offsetTop="0" :customNavHeight='0' class="searchtop">
  4. <view class="searchtop-box x-bc">
  5. <image class="backicon" src="@/static/image/black_back.png" mode="aspectFill" @click="$navBack"></image>
  6. <u-search :showAction="true" actionText="搜索" v-model="keyword" @search="search" @custom="search"></u-search>
  7. </view>
  8. <!-- <u-tabs class="tabs" :list="list1" :current="current" lineWidth="48rpx" lineHeight="6rpx" lineColor="#FF5C03" :activeStyle="activeStyle"
  9. itemStyle="font-family: PingFang SC;font-weight: 400;font-size: 28rpx;color: #757575;padding:30rpx 36rpx" @click="handleTab">
  10. </u-tabs> -->
  11. </u-sticky>
  12. <view class="search-res">
  13. <view v-if="current != 0">
  14. <mescroll-body ref="mescrollRef" :style="{height:height,minHeight:minHeight}" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
  15. <view class="box" v-if="current==1">
  16. <view class="hothall" v-for="(item, index) in dataList" :key="index" @click="navTo('/pages/course/info?courseId='+item.courseId)">
  17. <image class="video-img" :src="item.imgUrl"></image>
  18. <view class="hothall-infobox">
  19. <view class="hothall-info">
  20. <image :src="item.secondImg" mode="aspectFit"></image>
  21. <view>
  22. <view class="hothall-title">{{item.courseName}}</view>
  23. <view class="hothall-desc">{{item.description}}
  24. </view>
  25. </view>
  26. <view v-if="item.isIntegral!=1" class="vip">VIP</view>
  27. </view>
  28. <view class="tagbox">
  29. <block v-if="item.tags!=null">
  30. <view class="tag" v-for="(item, index) in item.tags.split(',')" :key="index" >{{item}}</view>
  31. </block>
  32. </view>
  33. </view>
  34. </view>
  35. </view>
  36. <!-- 视频 -->
  37. <view class="box maxstyle" :id="'mescrollRef' + current" v-if="current==2">
  38. <view class="hallbox">
  39. <view class="hall-box-item" v-for="(item, index) in dataList " :key="index" @click="handleDetail(item,index,'video')">
  40. <view class="video-imgbox">
  41. <image class="video-img" :src="item.cover" mode="aspectFill" :lazy-load="true"></image>
  42. <image class="video-img-icon" src="@/static/image/hall/video_icon.png" mode="aspectFill"></image>
  43. </view>
  44. <view class="hall-box-info">
  45. <view class="hall-box-name">{{item.title}}</view>
  46. <view class="hall-box-footer" style="margin-top: 16rpx;">
  47. <view class="hall-box-footerl footer-flex">
  48. <image class="hall-box-img" :src="item.headImg"></image>
  49. <text>{{item.username}}</text>
  50. </view>
  51. <view class="hall-box-footerr footer-flex">
  52. <image class="hall-box-img" src="@/static/image/hall/zan_icon.png"></image>
  53. <text>{{ formatNum(item.likeNum) }}</text>
  54. </view>
  55. </view>
  56. </view>
  57. </view>
  58. </view>
  59. </view>
  60. <!-- 养生干货 -->
  61. <view class="box" v-if="current==3">
  62. <view class="health-guidelines-item border-line" v-for="(item,index) in dataList" :key="index" @click="handleDetail(item)">
  63. <view class="health-guidelines-itemtxt">
  64. <text class="textTwo">{{item.title}}</text>
  65. <text class="health-guidelines-readnum">阅读 {{item.views || 0}}</text>
  66. </view>
  67. <image :src="item.imageUrl" mode="aspectFill"></image>
  68. </view>
  69. </view>
  70. <!-- 药膳 -->
  71. <view class="box" v-if="current!=0&&current!=1&&current!=2&&current!=3">
  72. <view v-for="i in 3" class="boxlist-item x-f">
  73. <image src="/static/bxzs.jpg" class="boxlist-img" mode="aspectFill"></image>
  74. <view style="flex: 1;overflow: hidden;margin-left: 30rpx;">
  75. <view class="boxlist-title textOne">大麦汤</view>
  76. <view class="textOne">调理慢病,治疗高血压</view>
  77. </view>
  78. </view>
  79. </view>
  80. </mescroll-body>
  81. </view>
  82. <!-- 名医讲堂 -->
  83. <view class="box" v-if="(current==0 ||current==1 )&&courseList && courseList.length > 0">
  84. <view class="box-nav">
  85. <view class="title">名医讲堂</view>
  86. <view class="box-nav-right" @click="navTo('/pages/course/famousHall?type=1')">
  87. <text>更多讲堂</text>
  88. <image class="right-arrow" src="@/static/image/home/my_right_arrow.png" mode="aspectFill" :lazy-load="true"></image>
  89. </view>
  90. </view>
  91. <view class="hothall" v-for="(item, index) in courseList" :key="index" @click="navTo('/pages/course/info?courseId='+item.courseId)">
  92. <image class="video-img" :src="item.imgUrl"></image>
  93. <view class="hothall-infobox">
  94. <view class="hothall-info">
  95. <image :src="item.secondImg" mode="aspectFit"></image>
  96. <view>
  97. <view class="hothall-title">{{item.courseName}}</view>
  98. <view class="hothall-desc">{{item.description}}
  99. </view>
  100. </view>
  101. <view v-if="item.isIntegral!=1" class="vip">VIP</view>
  102. </view>
  103. <view class="tagbox">
  104. <block v-if="item.tags!=null">
  105. <view class="tag" v-for="(item, index) in item.tags.split(',')" :key="index" >{{item}}</view>
  106. </block>
  107. </view>
  108. </view>
  109. </view>
  110. </view>
  111. <!-- 视频 -->
  112. <view :class="current==2 ? 'box maxstyle':'box'" v-if="isLastPage &&(current==0 ||current==2 )&&videoList && videoList.length > 0">
  113. <view class="box-nav">
  114. <view class="title">{{current==2?'猜你喜欢':'视频'}}</view>
  115. <view class="box-nav-right" @click="handleToVideo()">
  116. <text>{{current==2?'更多':'更多视频'}}</text>
  117. <image class="right-arrow" src="@/static/image/home/my_right_arrow.png" mode="aspectFill" :lazy-load="true"></image>
  118. </view>
  119. </view>
  120. <view class="hallbox">
  121. <view class="hall-box-item" v-for="(item, index) in videoList " :key="index">
  122. <view class="video-imgbox">
  123. <image class="video-img" :src="item.cover" mode="aspectFill" :lazy-load="true"></image>
  124. <image class="video-img-icon" src="@/static/image/hall/video_icon.png" mode="aspectFill"></image>
  125. </view>
  126. <view class="hall-box-info">
  127. <view class="hall-box-name">{{item.title}}</view>
  128. <view class="hall-box-footer">
  129. <view class="hall-box-footerl footer-flex">
  130. <image class="hall-box-img" :src="item.headImg"></image>
  131. <text>{{item.username}}</text>
  132. </view>
  133. <view class="hall-box-footerr footer-flex">
  134. <image class="hall-box-img" src="@/static/image/hall/zan_icon.png"></image>
  135. <text>{{ formatNum(item.likeNum) }}</text>
  136. </view>
  137. </view>
  138. </view>
  139. </view>
  140. </view>
  141. </view>
  142. <!-- 养生干货 -->
  143. <view class="box" v-if="(current==0 ||current==3 )&&articleList && articleList.length > 0">
  144. <view class="box-nav">
  145. <view class="title">养生干货</view>
  146. <view class="box-nav-right" @click="navTo('/pages/index/health/index')">
  147. <text>更多养生干货</text>
  148. <image class="right-arrow" src="@/static/image/home/my_right_arrow.png" mode="aspectFill" :lazy-load="true"></image>
  149. </view>
  150. </view>
  151. <view class="health-guidelines-item border-line" v-for="(item,index) in list" :key="index" @click="handleDetail(item)">
  152. <view class="health-guidelines-itemtxt">
  153. <text class="textTwo">{{item.title}}</text>
  154. <text class="health-guidelines-readnum">阅读 {{item.views || 0}}</text>
  155. </view>
  156. <image :src="item.imageUrl" mode="aspectFill"></image>
  157. </view>
  158. </view>
  159. <!-- 药膳 -->
  160. <view class="box" v-if="(current==0 || current==3)&&otherList && otherList.length > 0">
  161. <view class="box-nav">
  162. <view class="title">药膳</view>
  163. <view class="box-nav-right" @click="navTo('/pages/index/health/index')">
  164. <text>更多药膳</text>
  165. <image class="right-arrow" src="@/static/image/home/my_right_arrow.png" mode="aspectFill" :lazy-load="true"></image>
  166. </view>
  167. </view>
  168. <view v-for="i in 3" class="boxlist-item x-f">
  169. <image src="/static/bxzs.jpg" class="boxlist-img" mode="aspectFill"></image>
  170. <view style="flex: 1;overflow: hidden;margin-left: 30rpx;">
  171. <view class="boxlist-title textOne">大麦汤</view>
  172. <view class="textOne">调理慢病,治疗高血压</view>
  173. </view>
  174. </view>
  175. </view>
  176. <!-- 中药 -->
  177. <view class="box" v-if="(current==0 || current==4)&&otherList && otherList.length > 0">
  178. <view class="box-nav">
  179. <view class="title">中药</view>
  180. <view class="box-nav-right" @click="navTo('/pages/index/health/index')">
  181. <text>更多中药</text>
  182. <image class="right-arrow" src="@/static/image/home/my_right_arrow.png" mode="aspectFill" :lazy-load="true"></image>
  183. </view>
  184. </view>
  185. <view v-for="i in 3" class="boxlist-item x-f">
  186. <image src="/static/bxzs.jpg" class="boxlist-img" mode="aspectFill"></image>
  187. <view style="flex: 1;overflow: hidden;margin-left: 30rpx;">
  188. <view class="boxlist-title textOne">山杜仲</view>
  189. <view class="textOne">祛风湿,强筋骨治</view>
  190. </view>
  191. </view>
  192. </view>
  193. </view>
  194. </view>
  195. </template>
  196. <script>
  197. import { getCourseList } from '@/api/course';
  198. import { getArticleList } from '@/api/article';
  199. import { getVideoList,doFavorite,doLike } from '@/api/shortvideo';
  200. import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
  201. export default {
  202. mixins: [MescrollMixin],
  203. components: {
  204. },
  205. data() {
  206. return {
  207. keyword: "",
  208. list1: [
  209. {
  210. name: '综合',
  211. }, {
  212. name: '讲堂',
  213. },
  214. {
  215. name: '视频'
  216. },
  217. {
  218. name: '养生干货'
  219. }, {
  220. name: '药膳'
  221. }, {
  222. name: '中药'
  223. },
  224. ],
  225. current: 2,
  226. activeStyle: {
  227. fontFamily: "PingFang SC",
  228. fontWeight: 600,
  229. fontSize: "28rpx",
  230. color: "#222222"
  231. },
  232. recommendList:[],
  233. list:[],
  234. isLastPage: false,
  235. mescroll:null,
  236. downOption: { //下拉刷新
  237. use:true,
  238. auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
  239. },
  240. upOption: {
  241. use: true, // 是否启用上拉加载; 默认true
  242. page: {
  243. pae: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
  244. size: 10 // 每页数据的数量,默认10
  245. },
  246. noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
  247. textNoMore:"没有更多了",
  248. empty: {
  249. icon:'https://cos.his.cdwjyyh.com/fs/20240423/cf4a86b913a04341bb44e34bb4d37aa2.png',
  250. tip: '暂无数据'
  251. }
  252. },
  253. dataList: [],
  254. courseList: [],
  255. videoList: [],
  256. articleList: [],
  257. otherList: [],
  258. height: 'auto',
  259. minHeight: 'auto',
  260. pageNum: 1,
  261. pageSize: 10
  262. }
  263. },
  264. onLoad(option) {
  265. this.keyword = option.keyword || ""
  266. this.current = option.type || 2
  267. // this.search()
  268. // this.getRecommendList()
  269. this.getVideoListTui()
  270. this.minHeight = uni.getSystemInfoSync().windowHeight
  271. },
  272. methods: {
  273. formatNum(num){
  274. if(num>10000){
  275. return (num/10000.0).toFixed(1)+'万';
  276. }
  277. return num;
  278. },
  279. search() {
  280. if(this.current == 0) {
  281. this.getCourseListTui(this.keyword)
  282. } else {
  283. this.mescroll.scrollTo(0,0);
  284. this.mescroll.resetUpScroll()
  285. }
  286. },
  287. handleTab(e) {
  288. this.current = e.index
  289. this.mescroll.resetUpScroll()
  290. },
  291. navTo(url) {
  292. uni.navigateTo({
  293. url: url
  294. })
  295. },
  296. handleDetail(item,index,type) {
  297. if(type == 'video') {
  298. // #ifdef APP-PLUS
  299. uni.navigateTo({
  300. url: "/pages/course/video/living-app-searchInfo?index="+index+'&pageNum='+this.pageNum+'&pageSize='+this.pageSize+"&keyword="+this.keyword || ''
  301. })
  302. // #endif
  303. // #ifdef H5
  304. uni.navigateTo({
  305. url: "/pages/course/video/living-applet?index="+index+'&pageNum='+this.pageNum+'&pageSize='+this.pageSize+"&keyword="+this.keyword || ''
  306. })
  307. // #endif
  308. }
  309. },
  310. mescrollInit(mescroll) {
  311. this.mescroll = mescroll;
  312. },
  313. /*下拉刷新的回调 */
  314. downCallback(mescroll) {
  315. mescroll.resetUpScroll()
  316. },
  317. upCallback(page) {
  318. //联网加载数据
  319. if(this.current == 1) {
  320. this.getCourseList(page)
  321. } else if(this.current == 2) {
  322. this.getVideoList(page)
  323. } else if(this.current == 3) {
  324. this.getArticleList(page)
  325. } else if(this.current == 4) {
  326. this.getArticleList(page)
  327. } else if(this.current == 5) {
  328. this.getArticleList(page)
  329. }
  330. },
  331. getCourseList(page) {
  332. //联网加载数据
  333. const that = this;
  334. const data = {
  335. keyword:this.keyword,
  336. pageNum: page.num,
  337. pageSize: page.size
  338. };
  339. getCourseList(data).then(res => {
  340. if(res.code==200){
  341. //设置列表数据
  342. if (page.num == 1) {
  343. that.dataList = res.data.list;
  344. } else {
  345. that.dataList = that.dataList.concat(res.data.list);
  346. }
  347. that.mescroll.endBySize(res.data.list.length, res.data.total);
  348. }else{
  349. uni.showToast({
  350. icon:'none',
  351. title: "请求失败",
  352. });
  353. that.dataList = null;
  354. that.mescroll.endErr();
  355. }
  356. });
  357. },
  358. getCourseListTui() {
  359. getCourseList({isTui:1},1,10).then(res => {
  360. if(res.code==200){
  361. this.courseList=res.data.list.splice(0,2);
  362. }
  363. },
  364. rej => {}
  365. );
  366. },
  367. getRecommendList(){
  368. let that=this;
  369. const params={"isTui":1};
  370. getCourseList(params,1,10).then(res => {
  371. if(res.code==200){
  372. this.recommendList=res.data.list.splice(0,2);
  373. }
  374. },
  375. rej => {}
  376. );
  377. },
  378. getArticleList() {
  379. const queryParam = {
  380. keyword:undefined,
  381. cateId:undefined,
  382. page: 1,
  383. pageSize: 4
  384. }
  385. getArticleList(queryParam).then(res=>{
  386. if(res.code == 200) {
  387. this.list = res.data.list
  388. }
  389. })
  390. },
  391. // 视频搜索
  392. getVideoList(page){
  393. const that = this;
  394. let param = {
  395. keyword:this.keyword,
  396. };
  397. this.pageNum = page.num
  398. this.pageSize = page.size
  399. getVideoList(param,page.num,page.size).then(res => {
  400. if(res.code==200){
  401. this.isLastPage = res.data.isLastPage
  402. //设置列表数据
  403. if (page.num == 1) {
  404. that.dataList = res.data.list;
  405. } else {
  406. that.dataList = that.dataList.concat(res.data.list);
  407. }
  408. this.$nextTick(()=>{
  409. this.getHeight()
  410. })
  411. that.mescroll.endBySize(res.data.list.length, res.data.total);
  412. }else{
  413. uni.showToast({
  414. icon:'none',
  415. title: "请求失败",
  416. });
  417. that.dataList = null;
  418. that.mescroll.endErr();
  419. }
  420. });
  421. },
  422. // 视频推荐
  423. getVideoListTui(){
  424. getVideoList({},1, 6).then(res => {
  425. if(res.code==200){
  426. //设置列表数据
  427. this.videoList = res.data.list;
  428. }
  429. });
  430. },
  431. // 更多视频
  432. handleToVideo() {
  433. // #ifdef APP-PLUS
  434. uni.switchTab({
  435. url: '/pages/course/video/living-app'
  436. })
  437. // #endif
  438. // #ifdef H5
  439. uni.navigateTo({
  440. url: '/pages/course/video/living-applet'
  441. })
  442. // #endif
  443. },
  444. getHeight() {
  445. this.height = 'auto'
  446. this.minHeight = uni.getSystemInfoSync().windowHeight
  447. const el = '#mescrollRef' + this.current
  448. if(this.current > 0) {
  449. const query = uni.createSelectorQuery().in(this);
  450. const windowHeight = uni.getSystemInfoSync().windowHeight
  451. query
  452. .select(el)
  453. .boundingClientRect((data) => {
  454. if(this.isLastPage == true&&data.height<windowHeight){
  455. console.log("得到布局位置信息" + JSON.stringify(data));
  456. console.log("节点离页面顶部的距离为" + data.top,windowHeight);
  457. this.height = `calc(${data.height} + 40rpx)`
  458. this.minHeight = this.height
  459. }
  460. })
  461. .exec();
  462. }
  463. }
  464. }
  465. }
  466. </script>
  467. <style lang="scss" scoped>
  468. @mixin u-flex($flexD, $alignI, $justifyC) {
  469. display: flex;
  470. flex-direction: $flexD;
  471. align-items: $alignI;
  472. justify-content: $justifyC;
  473. }
  474. .searchtop {
  475. background-color: #fff;
  476. .backicon {
  477. width: 64rpx;
  478. height: 64rpx;
  479. }
  480. &-box {
  481. padding: 12rpx 24rpx;
  482. padding-top: calc(var(--status-bar-height) + 12rpx);
  483. background-color: #fff;
  484. }
  485. .tabs {
  486. background-color: #fff;
  487. }
  488. }
  489. .search-res {
  490. padding: 20rpx 24rpx;
  491. }
  492. .maxstyle {
  493. padding:0 !important;
  494. background-color: transparent !important;
  495. .hall-box {
  496. &-item {
  497. width: 342rpx !important;
  498. .video-imgbox {
  499. width: 342rpx !important;
  500. }
  501. .video-img {
  502. width: 342rpx !important;
  503. }
  504. }
  505. &-name {
  506. margin-bottom: 10rpx;
  507. }
  508. }
  509. }
  510. .box {
  511. background: #FFFFFF;
  512. border-radius: 16rpx 16rpx 16rpx 16rpx;
  513. padding: 0 32rpx;
  514. margin-bottom: 20rpx;
  515. .box-nav {
  516. width: 100%;
  517. padding: 36rpx 0;
  518. box-sizing: border-box;
  519. display: flex;
  520. justify-content: space-between;
  521. font-family: PingFang SC, PingFang SC;
  522. font-weight: 500;
  523. font-size: 34rpx;
  524. color: #222222;
  525. &-right {
  526. font-family: PingFang SC, PingFang SC;
  527. font-weight: 400;
  528. font-size: 24rpx;
  529. color: #999999;
  530. @include u-flex(row, center, flex-start);
  531. }
  532. .right-arrow {
  533. height: 48rpx;
  534. width: 48rpx;
  535. }
  536. }
  537. .hothall {
  538. width: 100%;
  539. background: #FFFFFF;
  540. border-radius: 16rpx 16rpx 16rpx 16rpx;
  541. overflow: hidden;
  542. position: relative;
  543. .video-img {
  544. width: 100%;
  545. height: 400rpx;
  546. background: rgba(0, 0, 0, 0.15);
  547. border-radius: 16rpx 16rpx 0rpx 0rpx;
  548. }
  549. .vip{
  550. position: absolute;
  551. min-width: 54rpx;
  552. min-height: 20rpx;
  553. line-height: 20rpx;
  554. background: linear-gradient(94deg, #FFE9D0 0%, #E9BD97 100%);
  555. border-radius: 16rpx 0 16rpx 0;
  556. top:0;
  557. left: 0;
  558. color:#333;
  559. font-size:18rpx ;
  560. text-align: center;
  561. font-weight: 500;
  562. font-style: italic;
  563. }
  564. &-infobox {
  565. padding: 24rpx 0;
  566. image {
  567. width: 88rpx;
  568. height: 128rpx;
  569. background: #ECECEC;
  570. border-radius: 8rpx 8rpx 8rpx 8rpx;
  571. border: 2rpx solid #ECECEC;
  572. flex-shrink: 0;
  573. margin-right: 28rpx;
  574. }
  575. }
  576. &-info {
  577. @include u-flex(row, center, flex-start);
  578. }
  579. &-title {
  580. font-weight: 500;
  581. font-size: 28rpx;
  582. color: #222222;
  583. overflow: hidden;
  584. white-space: nowrap;
  585. text-overflow: ellipsis;
  586. }
  587. &-desc {
  588. font-weight: 400;
  589. font-size: 24rpx;
  590. color: #757575;
  591. line-height: 28rpx;
  592. margin-top: 10rpx;
  593. overflow: hidden;
  594. text-overflow: ellipsis;
  595. display: -webkit-box;
  596. -webkit-line-clamp: 2;
  597. -webkit-box-orient: vertical;
  598. }
  599. .tagbox {
  600. @include u-flex(row, center, flex-start);
  601. flex-wrap: wrap;
  602. margin: 0 -12rpx -12rpx 0;
  603. }
  604. .tag {
  605. min-height: 40rpx;
  606. margin: 16rpx 12rpx 12rpx 0;
  607. background: #FEFAF3;
  608. border-radius: 20rpx 20rpx 20rpx 20rpx;
  609. border: 1rpx solid #FBEDD1;
  610. padding: 0 16rpx;
  611. font-weight: 400;
  612. font-size: 22rpx;
  613. color: #A97125;
  614. line-height: 40rpx;
  615. }
  616. }
  617. .hallbox {
  618. @include u-flex(row, center, flex-start);
  619. flex-wrap: wrap;
  620. margin: 0 -18rpx 0 0;
  621. .gapitem {
  622. width: 310rpx !important;
  623. margin: 0 18rpx 18rpx 0;
  624. }
  625. }
  626. .health-guidelines {
  627. padding: 24rpx 24rpx 0 24rpx;
  628. background: #FFFFFF;
  629. border-radius: 16rpx 16rpx 16rpx 16rpx;
  630. .box-title {
  631. font-family: PingFang SC, PingFang SC;
  632. font-weight: 400;
  633. font-size: 24rpx;
  634. color: #757575;
  635. @include u-flex(row, center, space-between);
  636. height: 80rpx;
  637. &-left {
  638. font-weight: 500;
  639. font-size: 36rpx;
  640. color: #222222;
  641. // line-height: 42rpx;
  642. }
  643. &-right {
  644. @include u-flex(row, center, flex-start);
  645. image {
  646. height: 48rpx;
  647. width: 48rpx;
  648. }
  649. }
  650. }
  651. &-item {
  652. padding: 30rpx 0 40rpx;
  653. font-family: PingFang SC, PingFang SC;
  654. font-weight: 400;
  655. font-size: 32rpx;
  656. color: #333333;
  657. line-height: 38rpx;
  658. @include u-flex(row, center, space-between);
  659. image {
  660. flex-shrink: 0;
  661. width: 180rpx;
  662. height: 136rpx;
  663. margin-left: 16rpx;
  664. background: #F5F6F6;
  665. border-radius: 10rpx 10rpx 10rpx 10rpx;
  666. overflow: hidden;
  667. }
  668. }
  669. &-itemtxt {
  670. flex: 1;
  671. }
  672. &-readnum {
  673. display: inline-block;
  674. margin-top: 30rpx;
  675. font-size: 26rpx;
  676. color: #999999;
  677. }
  678. .border-line:last-child::after {
  679. border: none;
  680. }
  681. }
  682. .boxlist {
  683. &-item {
  684. padding: 20rpx 0;
  685. font-family: PingFang SC, PingFang SC;
  686. font-weight: 400;
  687. font-size: 24rpx;
  688. color: #999999;
  689. overflow: hidden;
  690. }
  691. &-img {
  692. flex-shrink: 0;
  693. width: 180rpx;
  694. height: 128rpx;
  695. background: #F5F6F6;
  696. border-radius: 10rpx 10rpx 10rpx 10rpx;
  697. }
  698. &-title {
  699. margin-bottom: 24rpx;
  700. font-weight: 500;
  701. font-size: 32rpx;
  702. color: #222222;
  703. }
  704. }
  705. .hall-box {
  706. @include u-flex(row, center, flex-start);
  707. flex-wrap: wrap;
  708. &-item {
  709. width: 310rpx;
  710. margin: 0 18rpx 18rpx 0;
  711. background: #FFFFFF;
  712. border-radius: 16rpx 16rpx 16rpx 16rpx;
  713. overflow: hidden;
  714. position: relative;
  715. .video-imgbox {
  716. width: 310rpx;
  717. height: 280rpx;
  718. background: #ECECEC;
  719. border-radius: 16rpx 16rpx 0rpx 0rpx;
  720. position: relative;
  721. overflow: hidden;
  722. }
  723. .video-img-icon {
  724. width: 48rpx;
  725. height: 48rpx;
  726. position: absolute;
  727. left: 50%;
  728. top: 50%;
  729. transform: translate(-50%, -50%);
  730. z-index: 1;
  731. }
  732. .video-img {
  733. width: 310rpx;
  734. height: 280rpx;
  735. }
  736. }
  737. &-info {
  738. padding: 22rpx 20rpx;
  739. font-family: PingFang SC, PingFang SC;
  740. font-weight: 400;
  741. font-size: 24rpx;
  742. color: #999999;
  743. }
  744. &-name {
  745. font-weight: 400;
  746. font-size: 28rpx;
  747. color: #222222;
  748. overflow: hidden;
  749. white-space: nowrap;
  750. text-overflow: ellipsis;
  751. }
  752. &-desc {
  753. overflow: hidden;
  754. white-space: nowrap;
  755. text-overflow: ellipsis;
  756. margin: 10rpx 0 18rpx;
  757. }
  758. &-footer {
  759. @include u-flex(row, center, space-between);
  760. width: 100%;
  761. }
  762. &-footerl {
  763. flex: 1;
  764. text {
  765. overflow: hidden;
  766. white-space: nowrap;
  767. text-overflow: ellipsis;
  768. }
  769. }
  770. &-img {
  771. width: 32rpx;
  772. height: 32rpx;
  773. margin-right: 8rpx;
  774. flex-shrink: 0;
  775. border-radius: 50%;
  776. }
  777. }
  778. .footer-flex {
  779. overflow: hidden;
  780. @include u-flex(row, center, flex-start);
  781. }
  782. }
  783. </style>