index.jsx 7.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. import { useState, useEffect } from "react";
  2. import Taro, { useDidShow, useReady } from "@tarojs/taro";
  3. import withLayout from "@/layout";
  4. import {
  5. Text,
  6. View,
  7. Picker,
  8. Input,
  9. ScrollView,
  10. Image,
  11. RichText,
  12. } from "@tarojs/components";
  13. import "@/assets/css/iconfont.css";
  14. import "./index.scss";
  15. import {
  16. // addActivityShareNum,
  17. signupActivity,
  18. favorActivity,
  19. cancelFavorActivity,
  20. queryActivityDetail,
  21. } from "@/services/activity";
  22. import { getImgURL } from "@/utils/image";
  23. import getDateFormat from "@/utils/chatDate";
  24. const activityStatusDict = {
  25. 0: {
  26. text: "立即参与",
  27. className: "yellow",
  28. },
  29. 1: {
  30. text: "未开始",
  31. className: "blue",
  32. },
  33. 2: {
  34. text: "已结束",
  35. className: "grey",
  36. },
  37. 3: {
  38. text: "已参与",
  39. className: "yellow",
  40. },
  41. };
  42. export default withLayout((props) => {
  43. const { id } = props.router.params;
  44. const [detail, setDetail] = useState({});
  45. const [canChoose, setCanChoose] = useState("none");
  46. const [IsPull, setPull] = useState(false);
  47. const [PullTimer, setPullTimer] = useState(null);
  48. const PageRefresh = () => {
  49. // 页面下拉刷新回调
  50. setPull(true);
  51. };
  52. useEffect(() => {
  53. // 下拉刷新触发
  54. if (IsPull) {
  55. clearTimeout(PullTimer);
  56. setPullTimer(
  57. setTimeout(() => {
  58. setPull(false);
  59. }, 2000)
  60. );
  61. }
  62. }, [IsPull]);
  63. const getDetail = (params) => {
  64. Taro.showLoading();
  65. queryActivityDetail(params).then((res) => {
  66. console.log(res, "queryActivityDetail");
  67. setDetail(res);
  68. Taro.hideLoading();
  69. });
  70. };
  71. useEffect(() => {
  72. if (id) {
  73. getDetail(id);
  74. }
  75. }, [id]);
  76. useReady(() => {
  77. console.log("Taro.showLoading()");
  78. });
  79. useDidShow(() => {
  80. // Taro.getCurrentPages()
  81. console.log("Taro.showLoading()");
  82. // console.log(Taro.getCurrentPages(),'Taro.showLoading()')
  83. // getDetail()
  84. });
  85. //收藏
  86. const handleFavo = () => {
  87. const { dynamicId, isSaved } = detail;
  88. if (isSaved) {
  89. cancelFavorActivity(dynamicId).then((res) => {
  90. Taro.showToast({
  91. title: "已取消收藏",
  92. });
  93. setDetail({
  94. ...detail,
  95. isSaved: 0,
  96. });
  97. });
  98. } else {
  99. favorActivity(dynamicId).then((res) => {
  100. Taro.showToast({
  101. title: "收藏成功",
  102. });
  103. setDetail({
  104. ...detail,
  105. isSaved: 1,
  106. });
  107. });
  108. }
  109. // savePoint({
  110. // event: 'save',
  111. // eventType: 'activity',
  112. // targetType: 'dynamic',
  113. // propertyName: '活动详情收藏',
  114. // data: '{}'
  115. // }).then(res => {
  116. // console.log('活动详情收藏')
  117. // })
  118. };
  119. const handleSignup = () => {
  120. const {
  121. detail: { buildingId, dynamicId, isSign },
  122. } = this.state;
  123. const {
  124. userInfo: {
  125. person: { phone, name, nickname },
  126. },
  127. } = this.props;
  128. if (isSign) {
  129. Taro.showToast({
  130. icon: "none",
  131. title: "你已报名成功",
  132. });
  133. return;
  134. }
  135. this.setState({
  136. canChoose: "block",
  137. });
  138. };
  139. return (
  140. <view className="Page activityDetail flex-v">
  141. <view className="flex-item">
  142. <view>
  143. <ScrollView
  144. scroll-y
  145. refresher-enabled
  146. refresher-triggered={IsPull}
  147. onrefresherrefresh={PageRefresh}
  148. refresher-background="#fff"
  149. >
  150. <view className="PageContent">
  151. <view className="Top">
  152. <Image
  153. mode="aspectFill"
  154. src={getImgURL(detail.bannerListImg)}
  155. className="centerLabel"
  156. ></Image>
  157. </view>
  158. <view className="Info">
  159. <view>
  160. <view className="Title flex-h">
  161. <view className="flex-item">
  162. <text>{detail.title}</text>
  163. </view>
  164. <text className="Tips">{detail.enlisted || 0}人已报名</text>
  165. </view>
  166. <text className="Time">
  167. 报名截止时间:
  168. {getDateFormat(
  169. new Date(detail.enlistEnd).valueOf(),
  170. true,
  171. "yyyy/M/d"
  172. )}
  173. </text>
  174. {/* <text className="Name">“香颂 · 蔚澜半岛”</text> */}
  175. <view className="flex-h Address">
  176. <text>地址:</text>
  177. <view className="flex-item">
  178. <text>{detail.address}</text>
  179. </view>
  180. </view>
  181. <view className="flex-h Date">
  182. <text>时间:</text>
  183. <view className="flex-item">
  184. <text>
  185. {getDateFormat(
  186. new Date(detail.startDate).valueOf(),
  187. true,
  188. "yyyy/M/d"
  189. )}{" "}
  190. -{" "}
  191. {getDateFormat(
  192. new Date(detail.endDate).valueOf(),
  193. true,
  194. "yyyy/M/d"
  195. )}
  196. </text>
  197. </view>
  198. </view>
  199. <view className="Btn">
  200. <text>分享好友</text>
  201. </view>
  202. </view>
  203. </view>
  204. <view className="ActivityIntro">
  205. <view className="Title">
  206. <text>活动介绍</text>
  207. </view>
  208. <Image
  209. mode="aspectFill"
  210. src={getImgURL(detail.imgUrl)}
  211. className="img"
  212. ></Image>
  213. <RichText nodes={detail.desc} />
  214. {/* <richText nodes={detail.desc} ></richText> */}
  215. </view>
  216. <view className="Bottom">
  217. <view>
  218. <view>
  219. <text className="iconfont icon-shengming"></text>
  220. <text>免责声明</text>
  221. </view>
  222. <view>
  223. <text>
  224. &emsp;&emsp;以上价格仅供参考,具体一房一价的信息以售楼处展示为准。房屋位置交通、医疗、教育、商业等配套信息,来源于第三方不作为要约,仅供参考,双方具体权利义务应以法律规定及买卖合同约定为准。本平台对项目周边文化教育的介绍旨在提供相关信息1
  225. 意味着信息发布方对就学安排作出承诺。相关教育资首页信息存在调整的可能,应以政府教育主管部门门及办学颁布的政策规定为准。详情请仔细阅读
  226. </text>
  227. <text className="active">《新联家使用免责条款》</text>
  228. </view>
  229. </view>
  230. </view>
  231. </view>
  232. </ScrollView>
  233. </view>
  234. </view>
  235. <view className="PageBottom flex-h">
  236. <view className="Share">
  237. <text className="iconfont icon-fenxiang"></text>
  238. <text>分享</text>
  239. </view>
  240. <view className="Collect" onClick={handleFavo}>
  241. <text
  242. className="iconfont icon-shoucang"
  243. style={detail.isSaved === 1 ? { color: "red" } : undefined}
  244. ></text>
  245. <text>收藏</text>
  246. </view>
  247. <view className="flex-item"></view>
  248. <text className="Post" onClick={handleSignup}>
  249. {activityStatusDict[detail.activityStatus]?.text}
  250. </text>
  251. </view>
  252. </view>
  253. );
  254. });