index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858
  1. <template>
  2. <div class="learn-report-container" >
  3. <div class="learn-report" id="learn-report" :ref="learnReportRef" >
  4. <div class="learn-report-bg">
  5. <img class="bg" :src="staticImg.learnReportBg" alt="">
  6. <div>
  7. <img class="title-img" :src="staticImg.titleImg" alt="">
  8. <img class="ques-img" ref="quesImgRef" @click="quesTipState = !quesTipState" :src="staticImg.quesIcon" alt="">
  9. </div>
  10. <div class="user-name" >{{state.report?.userNickName || '逻辑狗'}}</div>
  11. </div>
  12. <div class="learn-report-content" >
  13. <!-- 问题提示 -->
  14. <img class="ques-tip" v-if="quesTipState" :src="staticImg.tip" >
  15. <!-- 学习天数 -->
  16. <div class="learn-day" v-if="posterShowState" >
  17. <div class="user-ava" >
  18. <img :src="staticImg.learnReportBg" alt="">
  19. </div>
  20. <div class="user-name" >{{state.report?.userNickName}}</div>
  21. <div class="learn-day-desc" >
  22. <div>我家宝贝已经连续学习<span>{{state.report?.totalStudyDays}}</span>天了</div>
  23. <div>快来一起学习吧</div>
  24. </div>
  25. </div>
  26. <!-- 学习展示 -->
  27. <div class="learn-preview" :style="{marginTop: posterShowState ? '16px' : '-16px'}" >
  28. <div class="learn-preview-data" >
  29. <div class="data-item" >
  30. <div class="staticsc" >
  31. <!-- 为什么要加个220呢 因为刘丰源说根据他的加权平均法算出所有视频平均的时长是220s -->
  32. <span>{{state.report?.totalDuration ? Math.floor( (state.report?.totalDuration! + 220) / 60) : 0 }}</span>
  33. <div class="unit" >分钟</div>
  34. </div>
  35. <div class="data-item-desc" >
  36. 累计学习
  37. </div>
  38. </div>
  39. <div class="data-item" >
  40. <div class="staticsc" >
  41. <span>{{state.report?.totalStars}}</span>
  42. <div class="unit" >颗</div>
  43. </div>
  44. <div class="data-item-desc" >
  45. 累计获得
  46. </div>
  47. </div>
  48. <div class="data-item" >
  49. <div class="staticsc" >
  50. <span>{{state.report?.accuracy}}</span>
  51. <div class="unit" >%</div>
  52. </div>
  53. <div class="data-item-desc" >
  54. 今日正确率
  55. </div>
  56. </div>
  57. </div>
  58. <div class="decator" >
  59. <img :src="staticImg.decator" alt="">
  60. </div>
  61. <div class="audio-play-container"
  62. :style="{backgroundImage: `url(${state.report?.task3Image}`}"
  63. >
  64. <div v-if="!fco.playing" class="audio-time-total" >
  65. {{fco.duration}}
  66. </div>
  67. <div class="play-button" @click="playAudio" v-if="!fco.playing">
  68. <img :src="staticImg.playButton" alt="">
  69. </div>
  70. <div class="play-process" ref="playProcessRef" v-show="fco.playing" >
  71. <van-progress
  72. @click="updatePercentage"
  73. class="van-progress"
  74. :percentage="Number(fco.percentage.toFixed(2)) * 100"
  75. pivot-color="#FF8024"
  76. color="#FF8024"
  77. pivot-text=" "
  78. track-color="#EDEDED"
  79. />
  80. <div class="play-time-process" >
  81. {{fco.updateTime}}/{{fco.duration}}
  82. </div>
  83. </div>
  84. </div>
  85. <div class="learn-preview-desc" v-if="posterShowState" >
  86. 长按扫描二维码,一起查看~
  87. </div>
  88. </div>
  89. <!-- v-if="state.report?.exerciseCardResultList" -->
  90. <!-- 练习分析 -->
  91. <div class="learn-any learn-modle" >
  92. <div class="learn-modle-title" >
  93. <img :src="staticImg.learnAny" alt="">
  94. <div class="learn-title" >今日练习分析</div>
  95. </div>
  96. <div class="able-any" >
  97. <able-chart
  98. style="margin-bottom: 12px;"
  99. :title="item.capability"
  100. :index="index"
  101. :count="item.correctQuantity - ( item.totalQuantity - item.correctQuantity)"
  102. v-for="(item, index) in state.report?.exerciseCardResultList"
  103. :key="item.capability"
  104. />
  105. </div>
  106. </div>
  107. <!-- 家园共育策略 -->
  108. <div class="home-strategy learn-modle" >
  109. <div class="learn-modle-title" >
  110. <img :src="staticImg.strategy" alt="">
  111. <div class="learn-title" >亲子游戏策略</div>
  112. </div>
  113. <div class="strategy" >
  114. <div class="strategy-item"
  115. v-for="item in state.report?.teachDescription.split('\n').splice(0, state.report?.teachDescription.split('\n').length)"
  116. :key="item"
  117. >
  118. <div class="dot" ></div>
  119. <div class="text-content" >
  120. {{item}}
  121. </div>
  122. </div>
  123. </div>
  124. <div class="qrcode" v-show="posterShowState">
  125. <div class="qrcode-img" >
  126. <img :src="qrcode" alt="">
  127. </div>
  128. <div class="qrcode-info" >
  129. <div class="qrcode-title"> 逻辑狗·一起成长 </div>
  130. <div class="qrcode-desc">识别二维码,让你家宝贝也来体验吧 </div>
  131. </div>
  132. </div>
  133. </div>
  134. <!-- 生成报告 -->
  135. <div class="create-poster" v-if="!posterShowState" >
  136. <open-app v-if="queryParams.share == 1" />
  137. <div v-else class="create-button" @click="openModal">
  138. <div class="text" >晒报告 <span v-if="!state.shared" >+5</span> </div>
  139. <img v-if="!state.shared" :src="staticImg.dogCoin" alt="">
  140. </div>
  141. </div>
  142. <!-- 底部图片 -->
  143. <div class="learn-report-decator" v-if="posterShowState" >
  144. <img :src="staticImg.learnReportDecator" alt="">
  145. </div>
  146. </div>
  147. </div>
  148. <Overlay :show="posterShowState" class="van-overlay" :lock-scroll="false" :z-index="10" @click="posterShowState = false">
  149. <div class="wrapper">
  150. <div class="poster-container" id="learnReportRef"></div>
  151. </div>
  152. </Overlay>
  153. <ActionSheet :overlay="false" :show="posterShowState" :closeable="false" :z-index="11" title="晒报告">
  154. <div class="share-dialog" >
  155. <div class="share-content" >
  156. <div class="share-item" @click.stop="savePoster">
  157. <img :src="staticImg.photo" alt="">
  158. <span>保存海报</span>
  159. </div>
  160. <div class="share-item" @click.stop="shareWx">
  161. <img :src="staticImg.wechat" alt="">
  162. <span>微信好友</span>
  163. </div>
  164. </div>
  165. <div class="cancel-butuon" @click="closeModal" >
  166. 取消
  167. </div>
  168. </div>
  169. </ActionSheet>
  170. </div>
  171. </template>
  172. <script setup lang="ts">
  173. import { ref, nextTick, onMounted, reactive, getCurrentInstance } from 'vue'
  174. import { useAudioManager, useSchedulerOnce } from '@/hook/index'
  175. import AbleChart from '../../components/AbleChart.vue'
  176. import { screenShot, createQrcode } from '@/utils/utils'
  177. import { getReportByUser, shareUserReport } from "@/api/learnPlan"
  178. import { useRoute } from 'vue-router'
  179. import { useAppRouter, useAppFunc } from '@/hook/appHook'
  180. import { Overlay, ActionSheet, showToast, Popover } from 'vant'
  181. import { useClickAway } from '@vant/use'
  182. import OpenApp from '@/components/OpenApp/index.vue'
  183. import { registerWxopenButton } from '@/utils/utils'
  184. export interface QueryParams {
  185. i: string,
  186. u?: string,
  187. share?: number
  188. }
  189. const staticImg = {
  190. learnReportBg: require('@LP/assets/learn-report-bg.png'),
  191. titleImg: require('@LP/assets/title-img.png'),
  192. decator: require('@LP/assets/decator.png'),
  193. playButton: require('@LP/assets/play-button.png'),
  194. learnAny: require('@LP/assets/learn-any.png'),
  195. strategy: require('@LP/assets/strategy.png'),
  196. learnReportDecator: require('@LP/assets/learn-report-decator.png'),
  197. dogCoin: require('@LP/assets/dog-coin.png'),
  198. photo: require('@/assets/component/common/photo.png'),
  199. wechat: require('@/assets/component/common/wechat.png'),
  200. quesIcon: require('@LP/assets/ques.png'),
  201. tip: require('@LP/assets/tip.png'),
  202. }
  203. const [fco, atx] = useAudioManager({
  204. url: '',
  205. format: 'mm:ss'
  206. })
  207. const queryParams = useRoute().query as unknown as QueryParams
  208. const quesImgRef = ref()
  209. useClickAway(quesImgRef, () => quesTipState.value = false)
  210. // queryParams.i = "1630466274125459458"
  211. // queryParams.u = "1430026961974345730"
  212. const posterScaleRate = ref(window.screen.width / window.screen.height > 0.7 ? 0.22 : 0.3)
  213. const userId = ref(queryParams.u)
  214. const appRouter = useAppRouter()
  215. const appFunc = useAppFunc()
  216. const qrcode = ref('')
  217. const posterShowState = ref(false)
  218. const shareShowState = ref(false)
  219. const playProcessRef = ref('')
  220. const learnReportRef = ref('')
  221. const posterblob = ref('')
  222. const quesTipState = ref<boolean>(false)
  223. const playAudio = () => {
  224. fco.play()
  225. }
  226. const state = reactive<Partial<API.LearnPlan.Task>>({})
  227. const closeModal = () => {
  228. posterShowState.value = false
  229. }
  230. const initAudioDragEvent = () => {
  231. let element = Array.from(document.getElementsByClassName('van-progress__pivot'))[0]
  232. let start = 0;
  233. let distance = 0;
  234. element.addEventListener("touchstart", function(event) {
  235. start = event.touches[0].clientX;
  236. fco.pause()
  237. });
  238. element.addEventListener("touchmove", function(event) {
  239. distance = event.touches[0].clientX - start + 11;
  240. console.log(distance);
  241. if (distance < 0) {
  242. fco.setPercentage(0)
  243. } else if (distance > playProcessRef.value.clientWidth) {
  244. fco.setPercentage( 1)
  245. } else {
  246. fco.setPercentage( distance / playProcessRef.value.clientWidth)
  247. }
  248. });
  249. element.addEventListener('touchend', function(e) {
  250. fco.play()
  251. }, false);
  252. }
  253. const openModal = () => {
  254. posterShowState.value = true
  255. createPoster()
  256. }
  257. const savePoster = async () => {
  258. await _shareUserReport()
  259. useSchedulerOnce({
  260. cb: () => appFunc.savePoster(posterblob.value),
  261. delay: 500
  262. })
  263. }
  264. const _shareUserReport = async () => {
  265. const { data } = await shareUserReport({ "itemId": queryParams.i, "userId": queryParams.u! })
  266. if (data.state !== 0) {
  267. showToast(`分享成功, 获得${data.winWisdomCoin}个智慧币`)
  268. }
  269. }
  270. const updatePercentage = (e) => {
  271. const percentage = (e.layerX / playProcessRef.value.clientWidth)
  272. fco.setPercentage(percentage)
  273. }
  274. // 分享海报到微信
  275. const shareWx = async () => {
  276. await _shareUserReport()
  277. useSchedulerOnce({
  278. cb: () => appFunc.shareWx(posterblob.value),
  279. delay: 500
  280. })
  281. }
  282. // 获取用户报告信息
  283. const _getReportByUser = async () => {
  284. const { data } = await getReportByUser({ "itemId": queryParams.i, "userId": queryParams.u! })
  285. fco.src = data.report.userLearnShareAudio
  286. state.report = data.report
  287. userId.value = data.userId
  288. state.shared = data.shared
  289. getQrcodeUrl()
  290. }
  291. const createPoster = async () => {
  292. nextTick(async () => {
  293. const target = document.getElementById('learnReportRef')!
  294. if (Array.from(target!.children).length === 0) {
  295. const posterEl = await screenShot('learn-report')
  296. posterblob.value = posterEl.src
  297. posterEl.style.width = window.screen.width * posterScaleRate.value + 'px'
  298. target.append(posterEl)
  299. state.shared = 1
  300. }
  301. })
  302. }
  303. const getQrcodeUrl = async () => {
  304. qrcode.value = await createQrcode(queryParams.u ? window.location.href + `&share=1` : `${window.location.href}&u=${userId.value}&share=1`)
  305. }
  306. onMounted(async () => {
  307. if (queryParams.u) {
  308. _getReportByUser()
  309. } else {
  310. await appRouter.getToken()
  311. _getReportByUser()
  312. }
  313. registerWxopenButton()
  314. initAudioDragEvent()
  315. })
  316. </script>
  317. <style scoped lang="scss">
  318. .learn-report-container {
  319. padding-bottom: 120px;
  320. background-color: #F5F5F5;
  321. }
  322. .learn-report {
  323. width: 100vw;
  324. background-color: #F5F5F5;
  325. .learn-report-bg {
  326. position: relative;
  327. z-index: 2;
  328. .bg {
  329. width: 100vw;
  330. height: 248px;
  331. display: block;
  332. position: relative;
  333. top: -20px;
  334. object-fit: cover;
  335. }
  336. .title-img {
  337. width: 146px;
  338. height: 39px;
  339. display: block;
  340. position: absolute;
  341. top: 98px;
  342. left: 17px;
  343. }
  344. .ques-img {
  345. width: 20px;
  346. height: 20px;
  347. position: absolute;
  348. top: 98px;
  349. left: 167px;
  350. }
  351. .user-name {
  352. font-size: 14px;
  353. font-family: PingFangSC-Regular, PingFang SC;
  354. font-weight: 400;
  355. color: #FFFFFF;
  356. position: absolute;
  357. top: 146px;
  358. left: 20px;
  359. }
  360. }
  361. .learn-report-content {
  362. margin-top: -70px;
  363. .ques-tip {
  364. width: 255px;
  365. height: 193px;
  366. position: absolute;
  367. top: 110px;
  368. left: 50px;
  369. z-index: 100;
  370. }
  371. }
  372. .learn-day {
  373. width: 343px;
  374. height: 125px;
  375. background: #FEFEFE;
  376. position: relative;
  377. z-index: 2;
  378. margin: 0 auto;
  379. border-radius: 20px;
  380. .user-ava {
  381. width: 62px;
  382. height: 62px;
  383. border-radius: 50%;
  384. background-color: #FFFFFF;
  385. position: absolute;
  386. top: -31px;
  387. left: 50%;
  388. transform: translateX(-50%);
  389. display: flex;
  390. justify-content: center;
  391. align-items: center;
  392. img {
  393. width: 52px;
  394. height: 52px;
  395. border-radius: 50%;
  396. margin: 0 auto;
  397. object-fit: cover;
  398. }
  399. }
  400. .user-name {
  401. font-size: 13px;
  402. font-family: PingFangSC-Medium, PingFang SC;
  403. font-weight: 500;
  404. color: #333333;
  405. position: absolute;
  406. top: 39px;
  407. left: 50%;
  408. transform: translateX(-50%);
  409. }
  410. .learn-day-desc {
  411. width: 100%;
  412. position: absolute;
  413. top: 66px;
  414. left: 50%;
  415. transform: translateX(-50%);
  416. font-size: 13px;
  417. font-family: PingFangSC-Medium, PingFang SC;
  418. font-weight: 500;
  419. color: #333333;
  420. display: flex;
  421. flex-direction: column;
  422. align-items: center;
  423. span {
  424. color: #FF8024;
  425. font-size: 20px;
  426. }
  427. }
  428. }
  429. .learn-preview {
  430. width: 343px;
  431. height: 488px;
  432. background: #FEFEFE;
  433. margin: 16px auto;
  434. border-radius: 20px;
  435. overflow: hidden;
  436. padding: 0 40px;
  437. box-sizing: border-box;
  438. position: relative;
  439. z-index: 2;
  440. .learn-preview-data {
  441. width: 100%;
  442. display: flex;
  443. justify-content: space-between;
  444. margin-top: 30px;
  445. .data-item {
  446. .staticsc {
  447. display: flex;
  448. align-items: flex-end;
  449. span {
  450. font-size: 36px;
  451. font-family: DINAlternate-Bold, DINAlternate;
  452. font-weight: bold;
  453. color: #FF8024;
  454. margin-bottom: -5px;
  455. }
  456. .unit {
  457. font-size: 12px;
  458. font-family: PingFangSC-Regular, PingFang SC;
  459. font-weight: 400;
  460. color: #999999;
  461. height: 41px;
  462. display: flex;
  463. align-items: flex-end;
  464. }
  465. }
  466. .data-item-desc {
  467. margin-top: 6px;
  468. font-size: 12px;
  469. font-family: PingFangSC-Regular, PingFang SC;
  470. font-weight: 400;
  471. color: #4C4C4C;
  472. }
  473. }
  474. }
  475. .decator {
  476. width: 219px;
  477. height: 16px;
  478. margin: 0 auto;
  479. margin-top: 40px;
  480. img {
  481. width: 100%;
  482. height: 100%;
  483. display: block;
  484. }
  485. }
  486. .audio-play-container {
  487. width: 262px;
  488. height: 277px;
  489. // background-color: #F5F5F5;
  490. border-radius: 20px;
  491. margin-top: 30px;
  492. position: relative;
  493. background-size: cover;
  494. .audio-time-total {
  495. width: 56px;
  496. height: 24px;
  497. background: rgba(0,0,0,0.4);
  498. border-radius: 12px;
  499. position: absolute;
  500. left: 15px;
  501. bottom: 13px;
  502. font-size: 12px;
  503. font-family: PingFangSC-Regular, PingFang SC;
  504. font-weight: 400;
  505. color: #FFFFFF;
  506. display: flex;
  507. justify-content: center;
  508. align-items: center;
  509. }
  510. .play-button {
  511. position: absolute;
  512. top: 50%;
  513. left: 50%;
  514. transform: translate(-50%, -50%);
  515. img {
  516. width: 60px;
  517. height: 60px;
  518. display: block;
  519. }
  520. }
  521. .play-process {
  522. width: 238px;
  523. position: absolute;
  524. left: 12px;
  525. bottom: 9px;
  526. display: flex;
  527. flex-direction: column;
  528. align-items: end;
  529. .van-progress {
  530. width: 238px;
  531. }
  532. /deep/ .van-progress__pivot {
  533. width: 12px !important;
  534. height: 12px;
  535. border-radius: 50%;
  536. min-width: 12px;
  537. }
  538. .play-time-process {
  539. font-size: 12px;
  540. font-family: PingFangSC-Regular, PingFang SC;
  541. font-weight: 400;
  542. color: #FFFFFF;
  543. margin-top: 4px;
  544. // position: absolute;
  545. // bottom: 0px;
  546. // right: 0px;
  547. }
  548. }
  549. }
  550. .learn-preview-desc {
  551. font-size: 13px;
  552. font-family: PingFangSC-Regular, PingFang SC;
  553. font-weight: 400;
  554. color: #666666;
  555. margin: 0 auto;
  556. margin-top: 8px;
  557. display: flex;
  558. justify-content: center;
  559. align-items: center;
  560. }
  561. }
  562. .learn-modle {
  563. box-sizing: border-box;
  564. padding: 30px 20px;
  565. .learn-modle-title {
  566. display: flex;
  567. align-items: center;
  568. img {
  569. width: 24px;
  570. height: 24px;
  571. display: block;
  572. margin-right: 5px;
  573. }
  574. .learn-title {
  575. font-size: 16px;
  576. font-family: PingFangSC-Semibold, PingFang SC;
  577. font-weight: 600;
  578. color: #333333;
  579. }
  580. }
  581. }
  582. .learn-any {
  583. width: 343px;
  584. border-radius: 20px;
  585. background: #FEFEFE;
  586. margin: 0 auto;
  587. margin-top: 16px;
  588. box-sizing: border-box;
  589. padding-bottom: 18px;
  590. .able-any {
  591. margin-top: 20px;
  592. }
  593. }
  594. .home-strategy {
  595. width: 343px;
  596. border-radius: 20px;
  597. background: #FEFEFE;
  598. margin: 0 auto;
  599. margin-top: 16px;
  600. box-sizing: border-box;
  601. position: relative;
  602. z-index: 3;
  603. .strategy {
  604. width: 303px;
  605. background: #FDF8F5;
  606. border-radius: 10px;
  607. padding: 16px;
  608. box-sizing: border-box;
  609. margin-top: 20px;
  610. .strategy-item {
  611. display: flex;
  612. align-items: flex-start;
  613. .dot {
  614. width: 4px;
  615. height: 4px;
  616. background: #FE6E2C;
  617. margin-right: 8px;
  618. margin-top: 8px;
  619. border-radius: 50%;
  620. }
  621. .text-content {
  622. width: 261px;
  623. font-size: 14px;
  624. font-family: PingFangSC-Regular, PingFang SC;
  625. font-weight: 400;
  626. color: #333333;
  627. line-height: 22px;
  628. margin-bottom: 8px;
  629. }
  630. }
  631. }
  632. .qrcode {
  633. display: flex;
  634. align-items: center;
  635. margin-top: 20px;
  636. .qrcode-img {
  637. width: 73px;
  638. height: 73px;
  639. background: #0043BD;
  640. border-radius: 8px;
  641. margin-right: 14px;
  642. img {
  643. width: 100%;
  644. height: 100%;
  645. display: block;
  646. }
  647. }
  648. .qrcode-info {
  649. display: flex;
  650. flex-direction: column;
  651. .qrcode-title {
  652. font-size: 15px;
  653. font-family: PingFangSC-Semibold, PingFang SC;
  654. font-weight: 600;
  655. color: #333333;
  656. line-height: 24px;
  657. }
  658. .qrcode-desc {
  659. font-size: 13px;
  660. font-family: PingFangSC-Regular, PingFang SC;
  661. font-weight: 400;
  662. color: #666666;
  663. line-height: 24px;
  664. }
  665. }
  666. }
  667. }
  668. .learn-report-decator {
  669. // position: relative;
  670. // left: 0px;
  671. // bottom: 0px;
  672. width: 375px;
  673. height: 144px;
  674. z-index: 2;
  675. img {
  676. width: 100%;
  677. height: 100%;
  678. display: block;
  679. }
  680. }
  681. .create-poster {
  682. width: 100vw;
  683. height: 88px;
  684. background: #FEFEFE;
  685. position: fixed;
  686. left: 0;
  687. bottom: 0;
  688. z-index: 3;
  689. padding-top: 9px;
  690. box-sizing: border-box;
  691. display: flex;
  692. align-items: flex-start;
  693. justify-content: center;
  694. .create-button {
  695. width: 334px;
  696. height: 52px;
  697. background: #FF8024;
  698. border-radius: 26px;
  699. display: flex;
  700. justify-content: center;
  701. align-items: center;
  702. margin: 0 auto;
  703. .text {
  704. font-size: 18px;
  705. font-family: PingFangSC-Regular, PingFang SC;
  706. font-weight: 400;
  707. color: #FFFFFF;
  708. }
  709. img {
  710. width: 24px;
  711. height: 24px;
  712. display: block;
  713. margin-left: 8px;
  714. }
  715. }
  716. }
  717. }
  718. .van-overlay {
  719. width: 100vw;
  720. height: 100vh;
  721. background-color: rgba(0,0,0,0.4);
  722. z-index: 11;
  723. }
  724. .wrapper {
  725. width: 100vw;
  726. height: 100vh;
  727. overflow-y: scroll;
  728. z-index: 40;
  729. .poster-container {
  730. position: fixed;
  731. left: 50%;
  732. top: 6%;
  733. transform: translateX(-50%);
  734. }
  735. }
  736. .share-dialog {
  737. padding: 0px 86px;
  738. box-sizing: border-box;
  739. height: 236px;
  740. width: 100%;
  741. position: relative;
  742. background-color: #fff;
  743. .share-content {
  744. display: flex;
  745. justify-content: space-between;
  746. .share-item {
  747. display: flex;
  748. flex-direction: column;
  749. justify-content: center;
  750. margin-top: 18px;
  751. align-items: center;
  752. img {
  753. width: 51px;
  754. height: 51px;
  755. display: block;
  756. margin-bottom: 6px;
  757. }
  758. }
  759. }
  760. .cancel-butuon {
  761. font-size: 14px;
  762. font-family: PingFangSC-Regular, PingFang SC;
  763. font-weight: 600;
  764. color: #333333;
  765. position: absolute;
  766. bottom: 40px;
  767. left: 50%;
  768. transform: translateX(-50%);
  769. }
  770. }
  771. </style>