doctor_info.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. <template>
  2. <view class="main">
  3. <view>
  4. <view class="pr det-body">
  5. <image class="det-bg-img" mode="scaleToFill" src="http://file.supermm.me/miniProgram/images/det/det_bg_01.png"></image>
  6. <view class="det-head pr plr15 bdr8 m-bg-white mlr15 pt25">
  7. <view class="m-xstart pr m-bottom-line pb25 margin-bottom-sm">
  8. <view class="m-flex overflow mr10">
  9. <view class="m-xend">
  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" :key="index">{{itm}}</text>
  12. <text class="dpb m-flex"></text>
  13. </view>
  14. <view class="m-xend mt25">
  15. <view class="f14 m-gray-big">评分:<text class="m-theme">{{doctor.score}}</text>
  16. <text class="f11 margin-left-xs">分</text>
  17. </view>
  18. <view class="f14 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">距离:{{parseInt(doctor.distance/1000)}}km</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="content"></rich-text>
  37. </u-read-more>
  38. </view>
  39. </view>
  40. <view class="gridstyle padding-sm margin-lr-sm">
  41. <u-grid :col="3" :border="false">
  42. <view @click="gotoxuanze" data-index="1">
  43. <u-grid-item>
  44. <u-image width="120rpx" height="120rpx" src="https://cdn.uviewui.com/uview/example/fade.jpg" shape="circle"></u-image>
  45. <view class="grid-text margin-top-sm">电话咨询</view>
  46. </u-grid-item>
  47. </view>
  48. <view class="" @click="gotoxuanze" data-index="2">
  49. <u-grid-item>
  50. <u-image width="120rpx" height="120rpx" src="https://cdn.uviewui.com/uview/example/fade.jpg" shape="circle"></u-image>
  51. <view class="grid-text margin-top-sm">图文咨询</view>
  52. </u-grid-item>
  53. </view>
  54. <view class="" @click="gotoxuanze" data-index="3">
  55. <u-grid-item>
  56. <u-image width="120rpx" height="120rpx" src="https://cdn.uviewui.com/uview/example/fade.jpg" shape="circle"></u-image>
  57. <view class="grid-text margin-top-sm">门诊预约</view>
  58. </u-grid-item>
  59. </view>
  60. </u-grid>
  61. <u-line color="#efefef" :hair-line="true" />
  62. <view v-if="!isjigou" class="text-lg text-center margin-top-sm" style="color: rgb(238, 170, 63);">
  63. 平均回复低至1分钟
  64. </view>
  65. <view v-else class="text-lg margin-top-sm" style="color: rgb(238, 170, 63);border-bottom: 3rpx solid rgb(238, 170, 63); width: 410rpx;"
  66. @click="xuantime">
  67. 已选时间:{{daytime}}
  68. <u-picker mode="multiSelector" @confirm="callbacktime" v-model="show" :default-selector='[0, 1]' range-key="start_time_period"
  69. :range="multiSelector"></u-picker>
  70. </view>
  71. </view>
  72. <view v-if="isjigou" bindtap="goAdrPostion" class="pr pt10 pb10 margin-lr-sm margin-top-sm m-bg-white" style="border-radius: 16rpx;box-shadow: 0 0 50rpx 0 rgba(0, 0, 0, 0.1);">
  73. <view class="pr pt15 pb15">
  74. <view class="f18 fb plr15">机构地址</view>
  75. <view class="pr m-xcenter plr15 mt15">
  76. <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="
  77. style="width: 10px; height: 12px;"></image>
  78. <view class="m-flex tl ml5">xxxxxxxxxxxxxxxxxxxxxx</view>
  79. </view>
  80. <view class="pr m-xcenter plr15 mt10">
  81. <view class="m-flex tl m-gray-small f12 pl15 mr5">地址:xxxxxxxxxxxxxxxxxx</view>
  82. <view class="pt2 pb2 plr10 f12 m-gray-small br-gray-letter bdr30" v-if="true">
  83. {{0}}km
  84. </view>
  85. <view class="pt2 pb2 plr10 f12 m-gray-small br-gray-letter bdr30" wx:else>暂无距离</view>
  86. <text class="dpb iconfont icon-arrow-right m-gray-letter f20"></text>
  87. </view>
  88. </view>
  89. </view>
  90. <view class="margin-lr-sm mt30 bg-white" style="border-radius: 16rpx; box-shadow: 0 0 50rpx 0 rgba(0, 0, 0, 0.1);"
  91. v-if="doctor.evaluate.length!=0">
  92. <view class="f18 fb flex align-center plr15 pt15">患者评价 <text class="f12 m-gray-letter margin-left-xs">({{doctor.evaluate.length}})</text>
  93. </view>
  94. <view class="cu-list menu-avatar card-menu">
  95. <view class="cu-item" v-for="(item,index) in doctor.evaluate" :key="index">
  96. <view class="cu-avatar round lg" :style="'background-image:url('+item.user.avatar+');'"></view>
  97. <view class="content">
  98. <view class="text-grey margin-right-sm">
  99. {{item.user.nickname}}
  100. <u-rate :count="5" v-model="item.score" :disabled="true"></u-rate>
  101. </view>
  102. <view class="text-gray text-sm flex">
  103. <text class="text-cut">
  104. {{item.content}}
  105. </text>
  106. </view>
  107. </view>
  108. <view class="action" style="width: 104rpx;">
  109. <view class="text-grey text-xs">{{item.created_at}}</view>
  110. </view>
  111. </view>
  112. </view>
  113. </view>
  114. <view class="cu-tabbar-height"></view>
  115. <view class="cu-tabbar-height"></view>
  116. </view>
  117. <view class="cu-bar bg-white tabbar border shop" style="position: fixed; bottom: 0; z-index: 99;width: 100%;">
  118. <button class="action text-orange" open-type="share" style="width: 200rpx;">
  119. <view class="cuIcon-share text-orange">
  120. </view>
  121. 分享
  122. </button>
  123. <view v-if="barindex==1" class="submit text-white" @click="phonezixun" style="background-color: rgb(11,115,186);">电话咨询</view>
  124. <view v-else-if="barindex==2" class="submit text-white" style="background-color: rgb(11,115,186)">图文咨询</view>
  125. <view v-else class="submit text-white" style="background-color: rgb(11,115,186)">门诊预约</view>
  126. </view>
  127. </view>
  128. </template>
  129. <script>
  130. export default {
  131. onLoad(options) {
  132. this.doctorid = options.id
  133. this.daytime = options.time
  134. console.log(options)
  135. },
  136. mounted() {
  137. this.getdoctorInfo()
  138. },
  139. data() {
  140. return {
  141. content: `浔阳江头夜送客,枫叶荻花秋瑟瑟。主人下马客在船,举酒欲饮无管弦。醉不成欢惨将别,别时茫茫江浸月。
  142. 忽闻水上琵琶声,主人忘归客不发。寻声暗问弹者谁,琵琶声停欲语迟。移船相近邀相见,添酒回灯重开宴。千呼万唤始出来,犹抱琵琶半遮面。转轴拨弦三两声,未成曲调先有情。弦弦掩抑声声思,似诉平生不得志。低眉信手续续弹,说尽心中无限事。轻拢慢捻抹复挑,初为《霓裳》后《六幺》。大弦嘈嘈如急雨,小弦切切如私语。嘈嘈切切错杂弹,大珠小珠落玉盘。间关莺语花底滑,幽咽泉流冰下难。冰泉冷涩弦凝绝,凝绝不通声暂歇。别有幽愁暗恨生,此时无声胜有声。银瓶乍破水浆迸,铁骑突出刀枪鸣。曲终收拨当心画,四弦一声如裂帛。东船西舫悄无言,唯见江心秋月白。
  143. 沉吟放拨插弦中,整顿衣裳起敛容。自言本是京城女,家在虾蟆陵下住。十三学得琵琶成,名属教坊第一部。曲罢曾教善才服,妆成每被秋娘妒。五陵年少争缠头,一曲红绡不知数。钿头银篦击节碎,血色罗裙翻酒污。今年欢笑复明年,秋月春风等闲度。弟走从军阿姨死,暮去朝来颜色故。门前冷落鞍马稀,老大嫁作商人妇。商人重利轻别离,前月浮梁买茶去。去来江口守空船,绕船月明江水寒。夜深忽梦少年事,梦啼妆泪红阑干。
  144. 我闻琵琶已叹息,又闻此语重唧唧。同是天涯沦落人,相逢何必曾相识!我从去年辞帝京,谪居卧病浔阳城。浔阳地僻无音乐,终岁不闻丝竹声。住近湓江地低湿,黄芦苦竹绕宅生。其间旦暮闻何物?杜鹃啼血猿哀鸣。春江花朝秋月夜,往往取酒还独倾。岂无山歌与村笛?呕哑嘲哳难为听。今夜闻君琵琶语,如听仙乐耳暂明。莫辞更坐弹一曲,为君翻作《琵琶行》。感我此言良久立,却坐促弦弦转急。凄凄不似向前声,满座重闻皆掩泣。座中泣下谁最多?江州司马青衫湿。`,
  145. doctorid: "",
  146. doctor: {},
  147. shadowStyle: {
  148. backgroundImage: "none"
  149. },
  150. isjigou: false,
  151. barindex: 1, //显示按钮
  152. daytime: "",
  153. multiSelector: [],
  154. params: {
  155. year: false,
  156. month: true,
  157. day: true,
  158. hour: true,
  159. minute: true,
  160. second: false
  161. },
  162. show: false,
  163. istime: false,
  164. }
  165. },
  166. methods: {
  167. getdoctorInfo: async function() {
  168. let res = await this.$request.post("/api/v1/docter/docterDetail", {
  169. docter_id: this.doctorid,
  170. latitude: uni.getStorageSync("latitude"),
  171. longitude: uni.getStorageSync("longitude")
  172. })
  173. this.doctor = res
  174. console.log(res)
  175. },
  176. submitCollect: async function(e) {
  177. let res = await this.$request.post("/api/v1/collection/submitCollect", {
  178. type: 1,
  179. relation_id: e.currentTarget.dataset.id
  180. })
  181. if (res.status == 0) {
  182. if (res.data.is_collect == 0) {
  183. uni.showToast({
  184. title: "取消成功",
  185. icon: "none"
  186. })
  187. this.doctor.is_collect = res.data.is_collect
  188. } else {
  189. uni.showToast({
  190. title: "关注成功",
  191. icon: "none"
  192. })
  193. this.doctor.is_collect = res.data.is_collect
  194. }
  195. }
  196. },
  197. gettime: async function() {
  198. let res = await this.$request.post("/api/v1/docter/timePeriodList")
  199. console.log(res)
  200. if (res.status == 0) {
  201. res.data.list.forEach(item => {
  202. item.start_time_period = item.start_time_period + '-' + item.end_time_period
  203. })
  204. this.multiSelector.push(res.data.dates)
  205. this.multiSelector.push(res.data.list)
  206. this.showtime = res.data.dates[0] + ' ' + res.data.list[0].start_time_period
  207. }
  208. },
  209. gotoxuanze(e) {
  210. this.barindex = e.currentTarget.dataset.index
  211. if (e.currentTarget.dataset.index == 3) {
  212. this.isjigou = true
  213. } else {
  214. this.isjigou = false
  215. }
  216. },
  217. phonezixun() {
  218. uni.navigateTo({
  219. url: "info_write"
  220. })
  221. },
  222. xuantime() {
  223. this.show = !this.show
  224. },
  225. }
  226. };
  227. </script>
  228. <style scoped>
  229. @import url("../index/mine.css");
  230. .gridstyle {
  231. height: 340rpx;
  232. background-color: #fff;
  233. border-radius: 16rpx;
  234. margin-top: 60rpx;
  235. box-shadow: 0 0 50rpx 0 rgba(0, 0, 0, 0.1);
  236. }
  237. .det-body {
  238. z-index: 1;
  239. padding-top: 80rpx;
  240. }
  241. .det-bg-img {
  242. position: absolute;
  243. top: 0;
  244. left: 0;
  245. right: 0;
  246. z-index: 1;
  247. display: block;
  248. width: 100%;
  249. height: 400rpx;
  250. }
  251. .det-head {
  252. z-index: 2;
  253. box-shadow: 0 0 50rpx 0 rgba(248, 151, 164, 0.13);
  254. }
  255. .det-attention {
  256. position: absolute;
  257. display: block;
  258. bottom: -22rpx;
  259. right: 50%;
  260. z-index: 1;
  261. width: 128rpx;
  262. height: auto;
  263. margin-right: -64rpx;
  264. padding: 4rpx 0;
  265. background-color: #F897A1;
  266. box-sizing: border-box;
  267. }
  268. .det-attention.active {
  269. background-color: #E6E6E6;
  270. }
  271. .det-item {
  272. width: calc((100% - 120rpx) / 4);
  273. }
  274. .det-item.active {
  275. background-color: rgba(255, 123, 114, 0.24);
  276. }
  277. .det-item .text {
  278. color: rgba(0, 0, 0, 0.54);
  279. }
  280. .det-item .price {
  281. color: rgba(0, 0, 0, 0.40);
  282. }
  283. .det-item.active .text,
  284. .det-item.active .price {
  285. color: #FF979C;
  286. }
  287. .det-item.disabled .text,
  288. .det-item.disabled .price {
  289. color: rgba(0, 0, 0, 0.3);
  290. }
  291. .button-reset {
  292. height: 102rpx;
  293. background: none !important;
  294. color: rgba(0, 0, 0, 0.54) !important;
  295. }
  296. button::after {
  297. border: none;
  298. }
  299. .button-reset::after {
  300. border: none;
  301. }
  302. .package-list {
  303. width: 100%;
  304. height: 178rpx;
  305. overflow: hidden;
  306. }
  307. .package-list .warp {
  308. white-space: nowrap;
  309. overflow: scroll;
  310. }
  311. .package-list .warp .list {
  312. background: red;
  313. display: inline-block;
  314. font-size: 14px;
  315. width: 266rpx;
  316. height: 178rpx;
  317. background: linear-gradient(270deg, rgba(255, 100, 101, 1) 0%, rgba(255, 148, 133, 1) 100%);
  318. box-shadow: 0px 3px 5px 0px rgba(255, 110, 110, 0.5);
  319. border-radius: 8rpx;
  320. margin-right: 18rpx;
  321. padding: 30rpx 20rpx 24rpx 20rpx;
  322. overflow: hidden;
  323. }
  324. .package-list .warp .list:nth-child(3) {
  325. margin-right: 0;
  326. }
  327. .package-list .warp .list .name {
  328. font-size: 30rpx;
  329. font-weight: 500;
  330. color: rgba(255, 255, 255, 1);
  331. line-height: 30rpx;
  332. }
  333. .package-list .warp .list .desc {
  334. font-size: 24rpx;
  335. font-weight: 400;
  336. color: rgba(255, 255, 255, .87);
  337. margin-top: 16rpx;
  338. line-height: 24rpx;
  339. }
  340. .package-list .warp .list .price {
  341. font-size: 24rpx;
  342. font-weight: 500;
  343. color: rgba(255, 255, 255, 1);
  344. margin-top: 30rpx;
  345. line-height: 24rpx;
  346. }
  347. .det-desc {
  348. height: 40px;
  349. overflow: hidden;
  350. }
  351. .det-desc.active {
  352. height: auto;
  353. }
  354. .follow_style {
  355. position: absolute;
  356. bottom: -12rpx;
  357. left: 8rpx;
  358. z-index: 1;
  359. width: 106rpx;
  360. height: 40rpx;
  361. padding: 4rpx 0;
  362. background-color: rgb(208, 105, 150);
  363. box-sizing: border-box;
  364. color: #fff;
  365. text-align: center;
  366. border-radius: 60rpx;
  367. font-size: 24rpx;
  368. display: flex;
  369. justify-content: center;
  370. align-items: center;
  371. }
  372. </style>