景徳镇旅游微信小程序
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.

316 lines
6.2 KiB

8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
8 months ago
  1. <template>
  2. <!-- '遗产讲述', '达人同游' 我要跟拍 的共同详情页面 -->
  3. <view class="page">
  4. <navbar :title="dict.title" leftClick @leftClick="$utils.navigateBack" />
  5. <view class="info">
  6. <!-- 上面 -->
  7. <view class="top">
  8. <image :src="detail.roleHead" mode="aspectFill"></image>
  9. <view class="left">
  10. <view class="title">
  11. {{ detail.roleName }}
  12. </view>
  13. <view class="left-list">
  14. <view
  15. @click="addCollection">
  16. <button
  17. class="share">
  18. <uv-icon size="50rpx" color="#FF4340"
  19. v-if="collectonFlag"
  20. name="star-fill"></uv-icon>
  21. <uv-icon
  22. name="star"
  23. v-else
  24. size="50rpx"
  25. ></uv-icon>
  26. 收藏
  27. </button>
  28. </view>
  29. <view>
  30. <button
  31. open-type="share"
  32. class="share">
  33. <uv-icon
  34. name="share"
  35. size="50rpx"
  36. ></uv-icon>
  37. 分享
  38. </button>
  39. </view>
  40. <view
  41. @click="$refs.contactActionSheet.open()">
  42. <button
  43. class="share">
  44. <uv-icon
  45. name="server-man"
  46. size="50rpx"
  47. ></uv-icon>
  48. 客服
  49. </button>
  50. </view>
  51. </view>
  52. </view>
  53. </view>
  54. <!-- 下面 -->
  55. <view class="bottom">
  56. <view>
  57. <image src="../static/reservationDetail/1.png" mode=""></image>
  58. <view>
  59. <!-- {{ $dayjs(detail.preTime).format('YYYY-MM-DD') }} -->
  60. {{ detail.openTime }}
  61. </view>
  62. </view>
  63. <view>
  64. <image src="../static/reservationDetail/2.png" mode=""></image>
  65. <view>
  66. {{ detail.price }}
  67. </view>
  68. </view>
  69. <view
  70. @click="toUrl(detail, type)">
  71. <image v-if="type == 2" src="../static/reservationDetail/3.png" mode=""></image>
  72. <image v-else src="../static/reservationDetail/4.png" mode=""></image>
  73. <view>
  74. 预约
  75. </view>
  76. </view>
  77. </view>
  78. </view>
  79. <view class="detail">
  80. <view class="content">
  81. <view class="thumb-up">
  82. <uv-icon
  83. name="thumb-up"
  84. size="40rpx"
  85. color="#B12731"
  86. ></uv-icon>
  87. <text>推荐度</text> <text>{{ detail.recommend }}</text>
  88. </view>
  89. <view class="text">
  90. <view class="line">
  91. <view class="left">
  92. 专业擅长
  93. </view>
  94. <view class="right">
  95. {{ detail.skill }}
  96. </view>
  97. </view>
  98. <view class="line">
  99. <view class="left">
  100. 个人简介
  101. </view>
  102. <view class="right">
  103. {{ detail.brief }}
  104. </view>
  105. </view>
  106. </view>
  107. </view>
  108. <view class="video-list">
  109. <view class="title">
  110. {{ dict.subTitle }}
  111. </view>
  112. </view>
  113. <videoList ref="videoList" :roleId="id"/>
  114. </view>
  115. <contactActionSheet ref="contactActionSheet"/>
  116. <tabber/>
  117. </view>
  118. </template>
  119. <script>
  120. import videoList from '@/components/list/videoList.vue'
  121. import contactActionSheet from '@/components/base/contactActionSheet.vue'
  122. export default {
  123. components : {
  124. videoList,
  125. contactActionSheet,
  126. },
  127. data() {
  128. return {
  129. type: '',
  130. id : 0,
  131. dict : {},
  132. detail : {},
  133. collectonFlag : false,
  134. }
  135. },
  136. onLoad(args) {
  137. this.type = args.type
  138. this.id = args.id
  139. this.dict = this.$config.dict[args.type]
  140. },
  141. onShow() {
  142. this.$nextTick(() => {
  143. this.$refs.videoList.queryVideoList()
  144. })
  145. this.getData()
  146. },
  147. onPullDownRefresh(){
  148. this.$refs.videoList.queryVideoList()
  149. this.getData()
  150. },
  151. //滚动到屏幕底部
  152. onReachBottom() {
  153. this.$refs.videoList.loadMoreData()
  154. },
  155. onShareAppMessage(res) {
  156. return {
  157. title: this.dict.title,
  158. desc: this.detail.roleName,
  159. path: '/pages_order/service/reservationDetail?id=' + this.id
  160. }
  161. },
  162. methods: {
  163. // 添加收藏
  164. addCollection(){
  165. this.$api('addCollection', {
  166. itemId : this.detail.id,
  167. collectionType : this.dict.collectType,
  168. }, res => {
  169. if(res.code == 200){
  170. this.getData()
  171. uni.showToast({
  172. title: res.message,
  173. icon:'none'
  174. })
  175. }
  176. })
  177. },
  178. getData(){
  179. let data = {
  180. roleInfoId : this.id,
  181. }
  182. if(uni.getStorageSync('token')){
  183. data.token = uni.getStorageSync('token')
  184. }
  185. this.$api('queryRoleInfoById', data, res => {
  186. uni.stopPullDownRefresh()
  187. if(res.code == 200){
  188. this.detail = res.result.travelRoleInfo
  189. this.collectonFlag = res.result.collectonFlag
  190. }
  191. })
  192. },
  193. toUrl(detail, type){
  194. uni.navigateTo({
  195. url: `/pages_order/order/orderSubscribe?id=${detail.id}&type=${this.type}`
  196. })
  197. },
  198. }
  199. }
  200. </script>
  201. <style scoped lang="scss">
  202. .page{
  203. .info{
  204. .top{
  205. display: flex;
  206. padding: 40rpx;
  207. image{
  208. width: 240rpx;
  209. height: 280rpx;
  210. border-radius: 20rpx;
  211. margin-right: 40rpx;
  212. }
  213. .left{
  214. .title{
  215. font-size: 32rpx;
  216. margin-top: 20rpx;
  217. }
  218. .left-list{
  219. display: flex;
  220. font-size: 26rpx;
  221. background-color: #fff;
  222. border-radius: 20rpx;
  223. padding: 20rpx;
  224. margin-top: 50rpx;
  225. box-shadow: 0 0 10rpx 10rpx #00000010;
  226. >view{
  227. margin: 20rpx 30rpx;
  228. display: flex;
  229. flex-direction: column;
  230. justify-content: center;
  231. align-items: center;
  232. }
  233. }
  234. }
  235. }
  236. .bottom{
  237. display: flex;
  238. justify-content: space-around;
  239. image{
  240. width: 80rpx;
  241. height: 80rpx;
  242. margin-bottom: 10rpx;
  243. }
  244. >view{
  245. background-color: #fff;
  246. box-shadow: 0 0 10rpx 10rpx #00000010;
  247. border-radius: 20rpx;
  248. height: 180rpx;
  249. width: 230rpx;
  250. display: flex;
  251. justify-content: center;
  252. align-items: center;
  253. flex-direction: column;
  254. color: $uni-color;
  255. font-size: 28rpx;
  256. }
  257. }
  258. }
  259. .detail{
  260. width: 100%;
  261. background-color: #fff;
  262. .content{
  263. padding: 40rpx;
  264. .thumb-up{
  265. background-color: #F6F2E7;
  266. color: $uni-color;
  267. font-size: 28rpx;
  268. font-weight: 900;
  269. padding: 10rpx 25rpx;
  270. display: flex;
  271. width: fit-content;
  272. border-radius: 30rpx;
  273. text{
  274. margin-left: 10rpx;
  275. }
  276. }
  277. .text{
  278. .line{
  279. margin-top: 40rpx;
  280. display: flex;
  281. line-height: 50rpx;
  282. .left{
  283. width: 180rpx;
  284. flex-shrink: 0;
  285. color: $uni-color;
  286. font-weight: 900;
  287. }
  288. }
  289. }
  290. }
  291. .video-list{
  292. padding: 15rpx;
  293. .title{
  294. font-weight: 900;
  295. color: $uni-color;
  296. padding: 15rpx;
  297. }
  298. }
  299. }
  300. }
  301. </style>