doctor_info.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608
  1. <template>
  2. <view class="main">
  3. <view class="u-skeleton">
  4. <view class="pr det-body">
  5. <image class="det-bg-img" mode="scaleToFill" src="https://zhengda.oss-cn-chengdu.aliyuncs.com/baoma/static/img/doctorbanner.png"></image>
  6. <view class="det-head pr plr15 bdr8 m-bg-white mlr15 pt25 u-skeleton-fillet">
  7. <view class="m-xstart pr m-bottom-line pb25 margin-bottom-sm">
  8. <view class="m-flex overflow mr10">
  9. <view class="flex align-center">
  10. <text class="dpb fb f16">{{doctor.name||''}}</text>
  11. <text class="dpb f14 m-gray-small ml5" v-for="(itm,index) in doctor.label_texts" :key="index">{{itm.label_name||''}}</text>
  12. </view>
  13. <view class="dpb m-flex margin-top-sm">科室:{{doctor.office.name||'暂无'}} {{doctor.qualification.name||'暂无'}}</view>
  14. <view class="m-xend mt12">
  15. <view class="f12 m-gray-big">评分:<text class="m-theme">{{doctor.score}}</text>
  16. <text class="f11 margin-left-xs">分</text>
  17. </view>
  18. <view class="f12 ml15 m-gray-big">服务:<text class="m-theme">{{doctor.service_persons}}</text>
  19. <text class="f11">人</text>
  20. </view>
  21. <view class="m-flex ml15 text-sm">距离:<text class="text-sm">{{doctor.distance!='未知'?parseInt(doctor.distance/1000)+'km':'未知'}}</text></view>
  22. </view>
  23. </view>
  24. <view class="pr pt5">
  25. <view class="follow_style" @click="submitCollect" :data-index="index" :data-id="doctor.id" v-if="doctor.is_collect==0">
  26. 关注
  27. </view>
  28. <view class="follow_style" @click="submitCollect" :data-index="index" :data-id="doctor.id" style="background-color: #fff;color: rgb(208, 105, 150);border:2rpx solid rgb(208, 105, 150);"
  29. v-else>
  30. 已关注
  31. </view>
  32. <u-image shape="circle" width="120rpx" height="120rpx" :src="doctor.avatar"></u-image>
  33. </view>
  34. </view>
  35. <u-read-more :toggle="true" show-height="0" :shadow-style="shadowStyle" close-text=" " open-text=" ">
  36. <rich-text :nodes="doctor.intro"></rich-text>
  37. </u-read-more>
  38. </view>
  39. </view>
  40. <view class="gridstyle padding-sm margin-lr-sm u-skeleton-fillet">
  41. <u-grid :col="3" :border="false">
  42. <view @click="gotoxuanze" data-index="1" data-name="电话咨询" :data-istrue="doctor.is_phone">
  43. <u-grid-item :bg-color="barindex==1&&doctor.is_phone==1?'#efefef':'#fff'">
  44. shape="circle"></u-image>
  45. </u-grid-item>
  46. </view>
  47. <view class="" @click="gotoxuanze" data-index="2" data-name="图文咨询" :data-istrue="doctor.is_chat">
  48. <u-grid-item :bg-color="barindex==2&&doctor.is_chat==1?'#efefef':'#fff'">
  49. shape="circle"></u-image>
  50. </u-grid-item>
  51. </view>
  52. <view class="" @click="gotoxuanze" data-index="3" data-name="门诊预约" :data-istrue="doctor.is_appoint">
  53. <u-grid-item :bg-color="barindex==3&&doctor.is_appoint==1?'#efefef':'#fff'">
  54. <u-image width="120rpx" height="120rpx" :src="doctor.is_appoint==1?'https://zhengda.oss-cn-chengdu.aliyuncs.com/baoma/static/toolimg/indexmen.png':'/static/img/yuyue_gray.png'"
  55. shape="circle"></u-image>
  56. <view class="grid-text margin-top-sm" :style="doctor.is_appoint==1?'color:black;':'color:rgb(219,219,219)'">门诊预约</view>
  57. </u-grid-item>
  58. </view>
  59. </u-grid>
  60. <u-line color="#efefef" :hair-line="true" />
  61. <view v-if="!isjigou" class="text-lg text-center margin-top-sm" style="color: rgb(238, 170, 63);">
  62. 平均回复低至1分钟
  63. </view>
  64. <view v-else class="text-lg margin-top-sm" style="color: rgb(238, 170, 63);border-bottom: 3rpx solid rgb(238, 170, 63); width: 530rpx;"
  65. @click="xuantime">
  66. 已选时间:{{daytime||'该医生暂未排班'}}
  67. <!-- <u-picker mode="multiSelector" @confirm="callbacktime" v-model="show" range-key="start_time_period"
  68. :range="multiSelector"></u-picker> -->
  69. </view>
  70. </view>
  71. <view class="" v-if="isjigou">
  72. <view @click="goAdrPostion(itm)" v-for="(itm,idx) in doctor.organization" :key="idx" class="pr pt10 pb10 margin-lr-sm margin-top-sm m-bg-white"
  73. style="border-radius: 16rpx;box-shadow: 0 0 50rpx 0 rgba(0, 0, 0, 0.1);">
  74. <view class="pr">
  75. <view class="f18 fb plr15">机构地址</view>
  76. <view class="pr m-xcenter plr15 mt15">
  77. <image class="dpb" mode="scaleToFill" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAABx0lEQVQoU2WSP2gTcRTHv+/dH4IdmkVcFAvSgihNLi1SRKE4uNhek4I6iNLY5AQnB93dpHNBMEltIbgUc5pUF0F0cDBIk2twKiJBBAWHVgOl5u5+TxrINeCbvnz5Pnh8vo8wMBPOE8NXx6YIcpKJfu74Ox/aa9n9foT6IrFYtVjjMkHOHO7TV6Ww6JVm3x94vXBy4fkombGPUMEwEW+oMPRY44QAs0TcDfzwUms1Xe+FrXztJURsIdz0inPPkgsv4t5aZjd5u3qDGGUiqjeK9nmauLo+rOLmDyJuNQr2VMrZWBJR90DacrMwc9/K1+qAmvQDjNB4rnJcg/aN2Kg2ClcyqTuvP0nYnWQ2vM3CjGU5tQpE5gPfP03T0+/036OdLwBinT19bCjmn2JCPoBa6SreHtJpWwTdzvf2WO/mRM7NaqQ/BeFN92949/Oe3z57xBgxTe0xgMuhCm9trWTKfXSUcmquKJUGUQBgF0AcIroQvfKKtg2QRJyt7PpRMmKbosITEWfW2vD3zzVXr/2KOEfFOO4FFu0tRJnE+h8odbFRmmv912DfSObcB8zGI5HgerOYqQy+Q3TGofmQE7nx9FZp3h0MHuh/o0mz0Kcr4U0AAAAASUVORK5CYII="
  78. style="width: 10px; height: 12px;"></image>
  79. <view class="m-flex tl ml5">{{itm.name||'无'}}</view>
  80. </view>
  81. <view class="pr m-xcenter plr15 mt10">
  82. <view class="m-flex tl m-gray-small f12 pl15 mr5">地址:{{itm.address||'无'}}</view>
  83. <view class="pt2 pb2 plr10 f12 m-gray-small br-gray-letter bdr30" v-if="itm.distance!='0'">
  84. {{itm.distance/1000||'暂无距离'}}km
  85. </view>
  86. <view class="pt2 pb2 plr10 f12 m-gray-small br-gray-letter bdr30" wx:else>暂无距离</view>
  87. <text class="dpb iconfont icon-arrow-right m-gray-letter f20"></text>
  88. </view>
  89. </view>
  90. </view>
  91. </view>
  92. <view class="margin-lr-sm mt15 bg-white u-skeleton-fillet" style="border-radius: 16rpx; box-shadow: 0 0 50rpx 0 rgba(0, 0, 0, 0.1);"
  93. v-if="doctor.evaluate.length!=0">
  94. <view class="f18 fb flex align-center plr15 pt15">患者评价 <text class="f12 m-gray-letter margin-left-xs">({{doctor.evaluate.length}})</text>
  95. </view>
  96. <view class="cu-list menu-avatar card-menu">
  97. <view class="cu-item" v-for="(item,index) in doctor.evaluate" :key="index">
  98. <view class="cu-avatar round lg" :style="'background-image:url('+item.user.avatar+');'"></view>
  99. <view class="content">
  100. <view class="text-grey margin-right-sm">
  101. {{item.user.nickname}}
  102. <u-rate :count="5" v-model="item.score" :disabled="true"></u-rate>
  103. </view>
  104. <view class="text-gray text-sm flex">
  105. <text class="text-cut">
  106. {{item.content}}
  107. </text>
  108. </view>
  109. </view>
  110. <view class="action" style="width: 124rpx;">
  111. <view class="text-grey text-xs">{{item.created_at}}</view>
  112. </view>
  113. </view>
  114. </view>
  115. </view>
  116. <view class="cu-tabbar-height"></view>
  117. <view class="cu-tabbar-height"></view>
  118. </view>
  119. <view class="cu-bar bg-white tabbar border shop" style="position: fixed; bottom: 0; z-index: 99;width: 100%;">
  120. <button class="action text-orange" open-type="share" style="width: 200rpx;">
  121. <view class="cuIcon-share text-orange">
  122. </view>
  123. 分享
  124. </button>
  125. <button v-else class="submit text-white" @click="phonezixun" :disabled="ismenzhen||daytime==''||is_can_appoint==0"
  126. :style="!ismenzhen&&daytime!=''&&is_can_appoint!=0?'background-color: rgb(11,115,186);font-size: 26rpx;':'font-size: 26rpx;color:gray'">门诊预约</button>
  127. </view>
  128. <u-no-network></u-no-network>
  129. <u-skeleton :loading="loading" el-color="#ddd" :animation="true" bgColor="#FFF"></u-skeleton>
  130. <u-popup v-model="dateshow" :safe-area-inset-bottom="true" mode="bottom" border-radius="14" length="50%" height="700rpx">
  131. <datepicker :date="multiSelector" @callbacktime="callbacktime" ref="date"></datepicker>
  132. </u-popup>
  133. </view>
  134. </template>
  135. <script>
  136. import datepicker from '../../components/datepicker/datepicker'
  137. var user = require('../../common/user.js');
  138. export default {
  139. components: {
  140. datepicker
  141. },
  142. onLoad(options) {
  143. this.doctorid = options.id
  144. if (options.time != undefined) {
  145. this.daytime = options.time
  146. }
  147. this.barindex = options.index
  148. if (this.barindex == 3) {
  149. this.isjigou = true
  150. } else {
  151. this.isjigou = false
  152. }
  153. console.log(this.daytime)
  154. },
  155. onShow() {
  156. this.gettime()
  157. this.getdoctorInfo()
  158. },
  159. mounted() {
  160. },
  161. data() {
  162. return {
  163. doctorid: "",
  164. doctor: {},
  165. shadowStyle: {
  166. backgroundImage: "none"
  167. },
  168. isjigou: false,
  169. barindex: 1, //显示按钮
  170. daytime: "",
  171. multiSelector: [],
  172. show: false,
  173. istime: false,
  174. hospital: "",
  175. address: "",
  176. distance: "",
  177. jigouid: "",
  178. year: "",
  179. yearid: "",
  180. isphone: false,
  181. istuwen: false,
  182. ismenzhen: false,
  183. loading: false,
  184. is_can_appoint: "",
  185. dateshow: false,
  186. is_date_obsolete: "",
  187. location: {}
  188. }
  189. },
  190. methods: {
  191. getdoctorInfo: async function() {
  192. this.loading = true
  193. let res = await this.$request.post("/api/v1/docter/docterDetail", {
  194. docter_id: this.doctorid,
  195. latitude: uni.getStorageSync("latitude"),
  196. longitude: uni.getStorageSync("longitude")
  197. })
  198. console.log(res)
  199. if (res) {
  200. this.loading = false
  201. }
  202. this.doctor = res
  203. this.doctor.is_chat != 0 ? this.istuwen = false : this.istuwen = true
  204. this.doctor.is_phone != 0 ? this.isphone = false : this.isphone = true
  205. this.doctor.is_appoint != 0 || this.multiSelector.length != 0 ? this.ismenzhen = false : this.ismenzhen = true
  206. console.log(this.ismenzhen)
  207. },
  208. submitCollect: async function(e) {
  209. let res = await this.$request.post("/api/v1/collection/submitCollect", {
  210. type: 1,
  211. relation_id: e.currentTarget.dataset.id
  212. })
  213. let status = user.islogin(res)
  214. if (status) {
  215. if (res.data.is_collect == 0) {
  216. uni.showToast({
  217. title: "取消成功",
  218. icon: "none"
  219. })
  220. this.doctor.is_collect = res.data.is_collect
  221. } else {
  222. uni.showToast({
  223. title: "关注成功",
  224. icon: "none"
  225. })
  226. this.doctor.is_collect = res.data.is_collect
  227. }
  228. }
  229. },
  230. gettime: async function() {
  231. this.multiSelector = []
  232. let res = await this.$request.post("/api/v1/docter/schedulePeriodList", {
  233. docter_id: this.doctorid,
  234. latitude: uni.getStorageSync('latitude'),
  235. longitude: uni.getStorageSync('longitude')
  236. })
  237. if (res.status == 0) {
  238. if (res.data.data.length != 0) {
  239. // let nian = res.data.data.map(item => {
  240. // return item.schedule_date
  241. // })
  242. // let time = res.data.data.map(item => {
  243. // return item.schedule_period.map(itm => {
  244. // itm.organization.org_id = itm.organization['id']
  245. // return {
  246. // can_appoint_num: itm.can_appoint_num,
  247. // ...itm.organization,
  248. // ...itm.time_period
  249. // }
  250. // })
  251. // })
  252. // time[0].forEach(item => {
  253. // item.start_time_period = item.start_time_period + '-' + item.end_time_period
  254. // })
  255. // this.multiSelector.push(nian)
  256. // time[0].sort((a,b)=> {return a.end_time_period>b.end_time_period?1:-1})
  257. // this.multiSelector.push(time[0])
  258. // console.log(this.multiSelector)
  259. // this.daytime = this.multiSelector[0][0] + " " + this.multiSelector[1][0].start_time_period
  260. // this.hospital = this.multiSelector[1][0].name
  261. // this.address = this.multiSelector[1][0].address
  262. // this.jigouid = this.multiSelector[1][0].org_id
  263. // this.is_can_appoint = this.multiSelector[1][0].can_appoint_num
  264. // this.year = this.multiSelector[0][0]
  265. // console.log(this.jigouid)
  266. // this.yearid = this.multiSelector[1][0].id
  267. // console.log(this.yearid)
  268. // this.distance = parseInt(this.multiSelector[1][0].distance) / 1000
  269. let times = []
  270. let nian = res.data.data.map(item => {
  271. if (item.schedule_period.length != 0) {
  272. return {
  273. date: item.schedule_date,
  274. id: item.id,
  275. week: item.week
  276. }
  277. }
  278. })
  279. res.data.data.forEach(item => {
  280. if (item.schedule_period.length != 0) {
  281. let time = item.schedule_period.map(itm => {
  282. if (item.id == itm.schedule_id) {
  283. if (itm.time_period != null) {
  284. itm.organization.org_id = itm.organization['id']
  285. return {
  286. yeardate: itm.schedule_date,
  287. schedule_id: itm.schedule_id,
  288. can_appoint_num: itm.can_appoint_num,
  289. ...itm.organization,
  290. ...itm.time_period
  291. }
  292. }
  293. }
  294. })
  295. time = time.filter(item => item !== undefined)
  296. times.push(time)
  297. }
  298. })
  299. nian = nian.filter(item => item !== undefined)
  300. this.multiSelector.push(nian)
  301. times.forEach((item, index) => {
  302. item.sort((a, b) => {
  303. return a.end_time_period > b.end_time_period ? 1 : -1
  304. })
  305. // for (let i = item.length - 1; i >= 0; i--) {
  306. // let arr = item[i].yeardate + " " + item[i].end_time_period;
  307. // arr = arr.split(/[- :]/)
  308. // let nndate = Date.parse(new Date(arr[0], arr[1] - 1, arr[2], arr[3], arr[4]));
  309. // let currentTime = Date.parse(new Date())
  310. // // console.log(nndate<currentTime,index)
  311. // if (nndate < currentTime) {
  312. // item.splice(i, 1)
  313. // }
  314. // }
  315. })
  316. this.multiSelector.push(times)
  317. this.daytime = this.multiSelector[0][0].date + " " + this.multiSelector[1][0][0].start_time_period + "-" + this.multiSelector[
  318. 1][0][0].end_time_period
  319. this.is_date_obsolete = this.multiSelector[0][0].date + " " + this.multiSelector[
  320. 1][0][0].end_time_period
  321. this.hospital = this.multiSelector[1][0][0].name
  322. this.address = this.multiSelector[1][0][0].address
  323. this.jigouid = this.multiSelector[1][0][0].org_id
  324. this.is_can_appoint = this.multiSelector[1][0][0].can_appoint_num
  325. this.year = this.multiSelector[0][0].date
  326. this.yearid = this.multiSelector[1][0][0].id
  327. this.distance = parseInt(this.multiSelector[1][0][0].distance) / 1000
  328. this.location = {
  329. latitude: this.multiSelector[1][0][0].latitude - 0,
  330. longitude: this.multiSelector[1][0][0].longitude - 0,
  331. name: this.multiSelector[1][0][0].name,
  332. address: this.multiSelector[1][0][0].address,
  333. }
  334. let arr = this.multiSelector[1][0]
  335. arr.forEach(item => {
  336. item.year = nian[0].date
  337. })
  338. this.$refs.date.rightday = arr
  339. console.log(this.multiSelector)
  340. }
  341. }
  342. },
  343. goAdrPostion(itm) {
  344. uni.openLocation({
  345. latitude: Number(itm.latitude),
  346. longitude: Number(itm.longitude),
  347. name: itm.name,
  348. address: itm.address,
  349. success: (res) => {
  350. console.log(res)
  351. },
  352. fail: (err) => {
  353. console.log(err)
  354. }
  355. })
  356. },
  357. gotoxuanze(e) {
  358. if (e.currentTarget.dataset.istrue == 0) {
  359. uni.showToast({
  360. title: "该医生暂未开通服务",
  361. icon: "none",
  362. duration: 1500
  363. })
  364. return false
  365. }
  366. this.barindex = e.currentTarget.dataset.index
  367. if (this.barindex == 3) {
  368. this.isjigou = true
  369. } else {
  370. this.isjigou = false
  371. }
  372. },
  373. phonezixun() {
  374. let arr = this.is_date_obsolete.split(/[- :]/)
  375. let nndate = new Date(arr[0], arr[1] - 1, arr[2], arr[3], arr[4]);
  376. nndate = Date.parse(nndate)
  377. let currentTime = Date.parse(new Date())
  378. if (this.barindex == 3) {
  379. if (nndate < currentTime) {
  380. uni.showToast({
  381. title: "不可预约已过时间",
  382. icon: "none"
  383. })
  384. return false
  385. }
  386. }
  387. uni.navigateTo({
  388. url: "info_write?doctor=" + JSON.stringify(this.doctor) + "&type=" + this.barindex + "&time=" + this.daytime +
  389. "&hospital=" + this.hospital + "&jigou=" + this.jigouid + "&year=" + this.year + "&yearid=" + this.yearid
  390. })
  391. },
  392. xuantime() {
  393. if (this.multiSelector.length != 0) {
  394. this.dateshow = !this.dateshow
  395. } else {
  396. uni.showToast({
  397. title: "该医生暂未排班",
  398. icon: "none"
  399. })
  400. }
  401. },
  402. callbacktime(item) {
  403. console.log(item)
  404. // this.daytime = this.multiSelector[0][arr[0]] + " " + this.multiSelector[1][arr[1]].start_time_period
  405. // this.hospital = this.multiSelector[1][arr[1]].name
  406. // this.address = this.multiSelector[1][arr[1]].address
  407. // this.jigouid = this.multiSelector[1][arr[1]].org_id
  408. // this.is_can_appoint = this.multiSelector[1][arr[1]].can_appoint_num
  409. // this.year = this.multiSelector[0][arr[0]]
  410. // console.log(this.multiSelector[1][arr[1]])
  411. // this.yearid = this.multiSelector[1][arr[1]].id
  412. // console.log(this.yearid)
  413. // this.distance = parseInt(this.multiSelector[1][arr[1]].distance) / 1000
  414. this.is_date_obsolete = item.year + " " + item.end_time_period
  415. this.daytime = item.year + " " + item.start_time_period + "-" + item.end_time_period
  416. this.hospital = item.name
  417. this.address = item.address
  418. this.jigouid = item.org_id
  419. this.is_can_appoint = item.can_appoint_num
  420. this.year = item.year
  421. this.yearid = item.id
  422. this.distance = parseInt(item.distance) / 1000
  423. this.dateshow = false
  424. this.location = item
  425. }
  426. }
  427. };
  428. </script>
  429. <style scoped>
  430. @import url("../index/mine.css");
  431. .gridstyle {
  432. height: 340rpx;
  433. background-color: #fff;
  434. border-radius: 16rpx;
  435. margin-top: 30rpx;
  436. box-shadow: 0 0 50rpx 0 rgba(0, 0, 0, 0.1);
  437. }
  438. .det-body {
  439. z-index: 1;
  440. padding-top: 80rpx;
  441. }
  442. .det-bg-img {
  443. position: absolute;
  444. top: 0;
  445. left: 0;
  446. right: 0;
  447. z-index: 1;
  448. display: block;
  449. width: 100%;
  450. height: 267rpx;
  451. }
  452. .det-head {
  453. z-index: 2;
  454. box-shadow: 0 0 50rpx 0 rgba(248, 151, 164, 0.13);
  455. }
  456. .det-attention {
  457. position: absolute;
  458. display: block;
  459. bottom: -22rpx;
  460. right: 50%;
  461. z-index: 1;
  462. width: 128rpx;
  463. height: auto;
  464. margin-right: -64rpx;
  465. padding: 4rpx 0;
  466. background-color: #F897A1;
  467. box-sizing: border-box;
  468. }
  469. .det-attention.active {
  470. background-color: #E6E6E6;
  471. }
  472. .det-item {
  473. width: calc((100% - 120rpx) / 4);
  474. }
  475. .det-item.active {
  476. background-color: rgba(255, 123, 114, 0.24);
  477. }
  478. .det-item .text {
  479. color: rgba(0, 0, 0, 0.54);
  480. }
  481. .det-item .price {
  482. color: rgba(0, 0, 0, 0.40);
  483. }
  484. .det-item.active .text,
  485. .det-item.active .price {
  486. color: #FF979C;
  487. }
  488. .det-item.disabled .text,
  489. .det-item.disabled .price {
  490. color: rgba(0, 0, 0, 0.3);
  491. }
  492. .button-reset {
  493. height: 102rpx;
  494. background: none !important;
  495. color: rgba(0, 0, 0, 0.54) !important;
  496. }
  497. button::after {
  498. border: none;
  499. }
  500. .button-reset::after {
  501. border: none;
  502. }
  503. .package-list {
  504. width: 100%;
  505. height: 178rpx;
  506. overflow: hidden;
  507. }
  508. .package-list .warp {
  509. white-space: nowrap;
  510. overflow: scroll;
  511. }
  512. .package-list .warp .list {
  513. background: red;
  514. display: inline-block;
  515. font-size: 14px;
  516. width: 266rpx;
  517. height: 178rpx;
  518. background: linear-gradient(270deg, rgba(255, 100, 101, 1) 0%, rgba(255, 148, 133, 1) 100%);
  519. box-shadow: 0px 3px 5px 0px rgba(255, 110, 110, 0.5);
  520. border-radius: 8rpx;
  521. margin-right: 18rpx;
  522. padding: 30rpx 20rpx 24rpx 20rpx;
  523. overflow: hidden;
  524. }
  525. .package-list .warp .list:nth-child(3) {
  526. margin-right: 0;
  527. }
  528. .package-list .warp .list .name {
  529. font-size: 30rpx;
  530. font-weight: 500;
  531. color: rgba(255, 255, 255, 1);
  532. line-height: 30rpx;
  533. }
  534. .package-list .warp .list .desc {
  535. font-size: 24rpx;
  536. font-weight: 400;
  537. color: rgba(255, 255, 255, .87);
  538. margin-top: 16rpx;
  539. line-height: 24rpx;
  540. }
  541. .package-list .warp .list .price {
  542. font-size: 24rpx;
  543. font-weight: 500;
  544. color: rgba(255, 255, 255, 1);
  545. margin-top: 30rpx;
  546. line-height: 24rpx;
  547. }
  548. .det-desc {
  549. height: 40px;
  550. overflow: hidden;
  551. }
  552. .det-desc.active {
  553. height: auto;
  554. }
  555. .follow_style {
  556. position: absolute;
  557. bottom: -12rpx;
  558. left: 8rpx;
  559. z-index: 1;
  560. width: 106rpx;
  561. height: 40rpx;
  562. padding: 4rpx 0;
  563. background-color: rgb(208, 105, 150);
  564. box-sizing: border-box;
  565. color: #fff;
  566. text-align: center;
  567. border-radius: 60rpx;
  568. font-size: 24rpx;
  569. display: flex;
  570. justify-content: center;
  571. align-items: center;
  572. }
  573. </style>