activity.vue 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000
  1. <template>
  2. <view class="container_box">
  3. <view class="header-nav"
  4. :style="{height: `calc(88rpx + ${statusBarHeight}px)`,paddingTop: statusBarHeight + 'px'}">
  5. </view>
  6. <view class="conbox">
  7. <image class="activity_yh_right" src="https://obs.jnmyunl.com/minapp/course/activity_yh_right.png"
  8. mode="widthFix"></image>
  9. <image class="activity_yh_left" src="https://obs.jnmyunl.com/minapp/course/activity_yh_left.png"
  10. mode="widthFix"></image>
  11. <image class="activity_title" v-if="collectType!=1&&isExpiry" src="https://obs.jnmyunl.com/minapp/course/activity_title.png" mode="widthFix"></image>
  12. <view class="activity_title2" v-if="!isExpiry&&collectType!=1">
  13. 福袋已经失效了~
  14. </view>
  15. <template v-if="collectType==1">
  16. <view class="activity_title3">
  17. 您已经领取过本次福袋啦~
  18. </view>
  19. <view class="activity_title4">
  20. 赶紧前往国健通APP,兑换好物吧
  21. </view>
  22. </template>
  23. <view class="ybg_box">
  24. <view class="ybg"></view>
  25. <image class="activity_lucky_bag" src="https://obs.jnmyunl.com/minapp/course/activity_lucky_bag.png"
  26. mode="heightFix"></image>
  27. <image class="activity_ysx" v-show="!isExpiry&&collectType!=1"
  28. src="https://obs.jnmyunl.com/minapp/course/activity_ysx.png" mode="widthFix"></image>
  29. <image class="activity_ylq" v-show="collectType==1"
  30. src="https://obs.jnmyunl.com/minapp/course/activity_ylq.png" mode="widthFix"></image>
  31. </view>
  32. <view class="activity_btn animation" v-if="collectType!=1&&isExpiry" @click="handleReceive">
  33. <view class="btn">领取福袋</view>
  34. <image src="https://obs.jnmyunl.com/minapp/course/activity_btn.png" mode="heightFix"></image>
  35. <view class="exsct"></view>
  36. </view>
  37. <view class="activity_btn_down x-c" v-else @click="navTo">
  38. <text>如何下载国健通APP</text>
  39. <image src="https://obs.jnmyunl.com/minapp/course/activity_more.png" mode="aspectFill"></image>
  40. </view>
  41. </view>
  42. <image class="footer_img" src="https://obs.jnmyunl.com/minapp/course/activity_xy.png" mode="widthFix">
  43. </image>
  44. <u-popup :show="show" mode="center" bgColor="transparent" :closeOnClickOverlay="false" overlayOpacity="0.7">
  45. <view class="popup-box">
  46. <image class="activity_jb" src="https://obs.jnmyunl.com/minapp/course/activity_jb.png"
  47. mode="heightFix"></image>
  48. <text class="popup-tit">恭喜您获得</text>
  49. <view class="con">
  50. <view class="numbox color_FB2205"><text class="num">+{{coinAmount||0}}</text>积分</view>
  51. <view>您的积分总额:<text class="color_FB2205" style="font-weight: 600;">{{balance||0}}</text></view>
  52. </view>
  53. <view class="goodslist">
  54. <view class="goodsitem" v-for="(item,index) in products" :key="index" @click="handleItem(item,index)">
  55. <image class="bg" src="https://obs.jnmyunl.com/fs/20260105/1767598882857.png" mode="widthFix"></image>
  56. <image class="img" :src="item.imageUrl" mode="aspectFill"></image>
  57. <view class="goodsitem-name ellipsis">{{item.productName}}</view>
  58. <view class="goodsitem-integral">
  59. <text class="goodsitem-integral-num">{{item.requiredPoints}}</text>
  60. <text>积分</text>
  61. </view>
  62. <view class="goodsitem-price">原价{{item.otPrice&&item.otPrice.toFixed(2)}}元</view>
  63. </view>
  64. </view>
  65. <view class="changebtn" @click="getInfo">换一批</view>
  66. <view class="popup-tips">赶紧去国健通APP,兑换好物吧~</view>
  67. <view class="popbtn x-c" @click="show=false">我知道啦</view>
  68. </view>
  69. <view class="popup-tips" style="color: #FFFFFF;margin-top: 40rpx;">兑换提示:请前往国健通APP兑换</view>
  70. <view class="popup-tips" style="color: #FFC05C;text-decoration-line: underline;margin-top: 20rpx;" @click="navTo">如何下载国健通APP?
  71. </view>
  72. </u-popup>
  73. <u-popup :show="userlogo" mode="bottom" round='12'>
  74. <view class="userlogo column">
  75. <view class="mtb30 justify-start align-center ml20">
  76. <u-avatar src="https://obs.jnmyunl.com/fs/20250425/logo.png" size="50"></u-avatar>
  77. <view class="bold mlr20">荣健堂优选</view>
  78. <view>申请</view>
  79. </view>
  80. <view class="bold fs36 ml20">授权你的昵称头像信息</view>
  81. <view class="mtb20 justify-between align-center plr20">
  82. <view class="justify-start align-center">
  83. <view class="boxweixin" :class="userinfos.nickname==''?'boxnosel':'boxsel'">
  84. <view v-if="userinfos.nickname">
  85. <u-icon name="checkbox-mark" color="#00aa00" size="22"></u-icon>
  86. </view>
  87. </view>
  88. <view class="ml20">
  89. <view class="base-color-3 bold">第一步</view>
  90. <view class="fs32 base-color-9">请点击授权微信昵称</view>
  91. </view>
  92. </view>
  93. <view class="button-container">
  94. <input
  95. type="nickname"
  96. class="hidden-input"
  97. @blur="onNickNameInput"
  98. @input="onNickNameInput"
  99. />
  100. <button class="custom-button" :class="nameuser==''?'subname':'subavt'">{{nameuser?"已授权":'允许授权'}}</button>
  101. </view>
  102. </view>
  103. <!-- <view class="mtb20 justify-between align-center plr20 mt40">
  104. <view class="justify-start align-center">
  105. <view class="boxweixin" :class="userinfos.nickname==''?'boxnosel':'boxsel'">
  106. <view v-if="userinfos.avatar">√</view>
  107. </view>
  108. <view class="ml20">
  109. <view class="base-color-3 bold">第二步</view>
  110. <view class="fs32 base-color-9">请点击授权微信头像</view>
  111. </view>
  112. </view>
  113. <view class="button-container">
  114. <button open-type="chooseAvatar" @chooseavatar="onChooseAvatar" class="hidden-input"
  115. v-if="nameuser">
  116. 允许授权
  117. </button>
  118. <button class="custom-button sub" @click="shouquan" v-if="nameuser==''">允许授权</button>
  119. <button class="custom-button " :class="avataruser==''?'subname':'subavt'"
  120. v-else>{{avataruser?"已授权":'允许授权'}}</button>
  121. </view>
  122. </view> -->
  123. <view class="submitname" @click="confimrname" :class="nameuser&&avataruser?'subact':'sub'">确定</view>
  124. </view>
  125. </u-popup>
  126. </view>
  127. </template>
  128. <script>
  129. import {TOKEN_KEYAuto} from '@/utils/courseTool.js'
  130. import {mapGetters} from 'vuex';
  131. import { getLuckyBagInfo, receiveLuckyBag,loginByMp,editUser,isAddCompanyUser,registerQwFsUserFinish,getCourseIntegralGoods,getConfigByKey}from '@/api/courseAuto.js'
  132. import {handleFsUserWx} from '@/api/courseLook.js'
  133. export default {
  134. data() {
  135. return {
  136. statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
  137. show: false,
  138. status: 0,
  139. recordId: '',
  140. urlOption: {},
  141. sortLink: '',
  142. isLogin: false,
  143. isLoginH5: 1, // 1服务号授权
  144. collectType: 0, // 领取状态(0-已发放 1-已领取 2-已失效)
  145. isExpiry: true, // false 失效 true 有效
  146. coinAmount: 0,
  147. balance: 0,
  148. chatId: '',
  149. userlogo:false,
  150. imgname:'',
  151. userinfos:{
  152. nickname:"",
  153. avatar:""
  154. },
  155. btnLoading: false,
  156. registerLoading: false,
  157. products:[]
  158. }
  159. },
  160. computed: {
  161. ...mapGetters(['coureLogin','logoimg']),
  162. nameuser() {
  163. return this.userinfos.nickname
  164. },
  165. avataruser() {
  166. return this.userinfos.avatar
  167. },
  168. },
  169. watch: {
  170. coureLogin: {
  171. immediate: true, // 页面一进入就检查一次
  172. handler(val) {
  173. if (val == 2 && this.isLogin) {
  174. console.log("注册AppToken失效,请重新登录")
  175. uni.removeStorageSync('auto_userInfo');
  176. uni.removeStorageSync('TOKEN_WEXIN');
  177. this.isLogin = false
  178. if (this.isLoginH5 == 0) {
  179. this.goWXLogin()
  180. } else {
  181. this.goLogin()
  182. }
  183. }
  184. }
  185. }
  186. },
  187. onLoad(option) {
  188. this.getWebviewUrl()
  189. this.urlOption = option.link ? JSON.parse(decodeURIComponent(option.link)) : {};
  190. this.sortLink = this.urlOption.link || ''
  191. this.chatId = this.urlOption.chatId || ''
  192. this.recordId =this.urlOption.businessId || ''
  193. console.log('232323',this.recordId)
  194. uni.$on('usercode',(data)=>{
  195. if(data) {
  196. this.goLogin(data)
  197. }
  198. })
  199. this.getLuckyBagInfo()
  200. this.getInfo()
  201. },
  202. beforeDestroy() {
  203. uni.$off('usercode')
  204. },
  205. onUnload() {
  206. uni.$off('usercode')
  207. },
  208. methods: {
  209. getWebviewUrl() {
  210. var data = {
  211. key: 'course.config'
  212. }
  213. getConfigByKey(data).then(res => {
  214. if (res.code == 200) {
  215. console.log("getConfigByKey====", JSON.parse(res.data))
  216. let data = JSON.parse(res.data,)
  217. uni.setStorageSync('setWebviewUrl',data.userCourseAuthDomain)
  218. }else{
  219. uni.showToast({
  220. icon:'none',
  221. title: res.msg,
  222. });
  223. }
  224. })
  225. },
  226. getInfo() {
  227. getCourseIntegralGoods().then(res=>{
  228. if(res.code == 200) {
  229. // this.goodsInfo = res.data
  230. this.products = res.data && res.data.products? res.data.products:[]
  231. } else {
  232. uni.showToast({
  233. title: res.msg,
  234. icon: 'none'
  235. })
  236. }
  237. })
  238. },
  239. registerQwFsUserFinish() {
  240. uni.showLoading({
  241. title: '领取中...'
  242. });
  243. registerQwFsUserFinish(this.urlOption).then(res=>{
  244. uni.hideLoading()
  245. if(res.code==200) {
  246. this.receiveLuckyBag()
  247. } else {
  248. if (this.chatId) {
  249. this.userlogo = true
  250. } else {
  251. this.getAddCompanyUser()
  252. }
  253. }
  254. }).catch(()=>{
  255. uni.hideLoading()
  256. })
  257. },
  258. getAddCompanyUser() {
  259. if(this.registerLoading) return;
  260. uni.showLoading({
  261. title: '注册中'
  262. })
  263. this.registerLoading = true
  264. isAddCompanyUser(this.urlOption).then(res=>{
  265. this.registerLoading = false
  266. uni.hideLoading()
  267. if(res.code==200) {
  268. this.receiveLuckyBag()
  269. } else {
  270. uni.showToast({
  271. title: res.msg,
  272. icon: 'none'
  273. });
  274. }
  275. }).catch(()=>{
  276. this.registerLoading = false
  277. uni.hideLoading()
  278. })
  279. },
  280. //修改用户昵称以及头像
  281. editUserA(){
  282. this.userinfos=uni.getStorageSync('auto_userInfo')?uni.getStorageSync('auto_userInfo'):this.userinfos
  283. const data={
  284. nickName:this.userinfos.nickname,
  285. // avatar:this.userinfos.avatar,
  286. }
  287. editUser(data).then(res=>{
  288. if(res.code==200){
  289. this.isLogin = true
  290. uni.showToast({
  291. icon:'none',
  292. title:'修改成功!',
  293. });
  294. setTimeout(()=>{
  295. this.getAddCompanyUser()
  296. },100)
  297. }else{
  298. uni.removeStorageSync('auto_userInfo')
  299. uni.showToast({
  300. icon:'none',
  301. title:res.msg+'请重新领取福袋',
  302. });
  303. }
  304. })
  305. },
  306. shouquan(){
  307. if(this.userinfos.nickname==''){
  308. uni.showToast({
  309. icon:'none',
  310. title: "请先授权微信昵称",
  311. });
  312. }
  313. },
  314. confimrname(){
  315. if(this.userinfos.nickname==''){
  316. uni.showToast({
  317. icon:'none',
  318. title: "请授权微信昵称",
  319. });
  320. return
  321. }
  322. // if(this.userinfos.avatar==''){
  323. // uni.showToast({
  324. // icon:'none',
  325. // title: "请授权微信头像",
  326. // });
  327. // return
  328. // }
  329. uni.setStorageSync('auto_userInfo',this.userinfos)
  330. this.editUserA()
  331. this.userlogo=false
  332. },
  333. onNickNameInput(e){
  334. console.log(e)
  335. this.userinfos.nickname=e.detail.value
  336. },
  337. onChooseAvatar(e){
  338. this.userinfos.avatar=e.detail.avatarUrl
  339. uni.uploadFile({
  340. url: 'https://userapp.jnmyunl.com'+'/app/common/uploadOSS', //仅为示例,非真实的接口地址
  341. filePath: e.detail.avatarUrl,
  342. name: 'file',
  343. formData: {
  344. 'user': 'test' // 上传附带参数
  345. },
  346. success: (uploadFileRes) => {
  347. console.log(uploadFileRes)
  348. // 根据接口具体返回格式 赋值具体对应url
  349. var data=JSON.parse(uploadFileRes.data)
  350. this.headImg=uni.getStorageSync('requestPath')+data.fileName
  351. this.userinfos.avatar=data.url
  352. }
  353. });
  354. },
  355. handleReceive() {
  356. // if (this.isLoginH5 == 0) {
  357. this.$isLoginCourseAuto().then(
  358. isLogin => {
  359. this.isLogin = isLogin
  360. if (this.isLogin) {
  361. this.registerQwFsUserFinish()
  362. } else {
  363. this.goLogin()
  364. }
  365. },
  366. rej => {}
  367. );
  368. // }
  369. },
  370. receiveLuckyBag() {
  371. if(this.btnLoading) {
  372. return
  373. }
  374. uni.showLoading({
  375. title: '领取中...',
  376. });
  377. this.btnLoading = true
  378. console.log('11111',JSON.parse(uni.getStorageSync('auto_userInfo')).userId)
  379. const param = {
  380. ...this.urlOption,
  381. recordId: this.recordId,
  382. userId:JSON.parse(uni.getStorageSync('auto_userInfo')).userId
  383. }
  384. receiveLuckyBag(param).then(res => {
  385. uni.hideLoading()
  386. this.btnLoading = false
  387. if(res.code == 200) {
  388. this.coinAmount = res.data.coinAmount || 0
  389. this.balance = res.data.balance || 0
  390. this.collectType = 1
  391. this.show = true
  392. } else {
  393. uni.showModal({
  394. title: '领取失败',
  395. content: res.msg,
  396. showCancel: false,
  397. success: function (res) {
  398. if (res.confirm) {
  399. console.log('用户点击确定');
  400. } else if (res.cancel) {
  401. console.log('用户点击取消');
  402. }
  403. }
  404. });
  405. }
  406. }).catch(()=>{
  407. this.btnLoading = false
  408. })
  409. },
  410. navTo() {
  411. this.show = false
  412. uni.navigateTo({
  413. url: '/pages_course/appDownload'
  414. })
  415. },
  416. getLuckyBagInfo() {
  417. uni.hideLoading()
  418. getLuckyBagInfo({
  419. recordId: this.recordId
  420. }).then(res => {
  421. if (res.code == 200) {
  422. this.collectType = res.data.collectType || 0; //领取状态(0-已发放 1-已领取 2-已失效)
  423. this.isExpiry = res.data.isExpiry; //false 失效 true 有效
  424. } else {
  425. uni.showToast({
  426. title: res.msg,
  427. icon: 'none'
  428. });
  429. }
  430. })
  431. },
  432. goLogin(data) {
  433. console.log('----',this.isLoginH5)
  434. if (this.isLoginH5 == 0) {
  435. this.goWXLogin(1)
  436. return
  437. }
  438. console.log('----===',this.isLoginH5)
  439. if(data) {
  440. this.utils.getProvider().then(provider=>{
  441. console.log('当前的环境商',provider)
  442. if (!provider) {
  443. reject()
  444. }
  445. uni.login({
  446. provider: provider,
  447. success: loginRes => {
  448. console.log(loginRes)
  449. uni.getUserInfo({
  450. provider: provider,
  451. success: (infoRes)=> {
  452. const param = {
  453. code: loginRes.code, // 必填参数,不能为空,code参数缺失时会报错
  454. appId:wx.getAccountInfoSync().miniProgram.appId, // 应用ID
  455. userId: data.userId // 用户id
  456. }
  457. uni.showLoading({
  458. title: '报名中'
  459. })
  460. handleFsUserWx(param).then(res=>{
  461. uni.hideLoading()
  462. if(res.code==200) {
  463. let token = uni.getStorageSync('TOKEN_WEXIN');
  464. let user = uni.getStorageSync('userInfo')
  465. uni.setStorageSync(TOKEN_KEYAuto, token);
  466. uni.setStorageSync('auto_userInfo', JSON.stringify(user));
  467. this.isLogin = true
  468. this.registerQwFsUserFinish()
  469. } else {
  470. uni.removeStorageSync('auto_userInfo');
  471. uni.removeStorageSync('TOKEN_WEXIN');
  472. uni.showToast({
  473. title: res.msg,
  474. icon: 'none'
  475. });
  476. }
  477. }).catch(err=>{
  478. uni.hideLoading()
  479. })
  480. }
  481. });
  482. }
  483. })
  484. })
  485. } else {
  486. uni.setStorageSync('H5course',{
  487. companyId: this.urlOption.companyId,
  488. companyUserId:this.urlOption.companyUserId,
  489. })
  490. uni.navigateTo({
  491. url:'/pages_course/webview'
  492. })
  493. }
  494. },
  495. goWXLogin() {
  496. this.utils.getProvider().then(provider => {
  497. console.log('当前的环境商', provider)
  498. if (!provider) {
  499. reject()
  500. }
  501. uni.login({
  502. provider: provider,
  503. success: async loginRes => {
  504. console.log(loginRes)
  505. uni.getUserInfo({
  506. provider: provider,
  507. success: (infoRes) => {
  508. uni.showToast({
  509. title: '登录中...',
  510. icon: 'loading'
  511. });
  512. loginByMp({
  513. code: loginRes.code,
  514. encryptedData: infoRes.encryptedData,
  515. iv: infoRes.iv,
  516. appId: wx.getAccountInfoSync().miniProgram.appId
  517. }).then(res => {
  518. uni.hideLoading();
  519. if (res.code == 200) {
  520. // this.checkUserInfoA()
  521. this.$store.commit('setCoureLogin', 1);
  522. uni.setStorageSync(TOKEN_KEYAuto, res.token);
  523. uni.setStorageSync('auto_userInfo',JSON.stringify(res.user));
  524. this.isLogin = true
  525. this.registerQwFsUserFinish()
  526. } else {
  527. uni.showToast({
  528. title: res.msg,
  529. icon: 'none'
  530. });
  531. }
  532. }).catch(err => {
  533. uni.hideLoading();
  534. uni.showToast({
  535. icon: 'none',
  536. title: "登录失败,请重新登录",
  537. });
  538. });
  539. }
  540. });
  541. }
  542. })
  543. }).catch(err => {})
  544. }
  545. }
  546. }
  547. </script>
  548. <style scoped lang="scss">
  549. .changebtn {
  550. width: 152rpx;
  551. height: 64rpx;
  552. margin: 0 auto 24rpx auto;
  553. border-radius: 32rpx 32rpx 32rpx 32rpx;
  554. border: 1rpx solid #FF5C03;
  555. display: flex;
  556. align-items: center;
  557. justify-content: center;
  558. font-family: PingFang SC;
  559. font-weight: 400;
  560. font-size: 24rpx;
  561. color: #FF5C03;
  562. }
  563. .subname{
  564. background-color: #00aa00;
  565. color: #fff;
  566. }
  567. .subavt{
  568. background-color: #fff;
  569. border: 2rpx #0a0 solid;
  570. color: #00aa00;
  571. }
  572. .boxweixin{
  573. width: 44rpx;
  574. height: 44rpx;
  575. border-radius: 50%;
  576. text-align: center;
  577. line-height: 34rpx;
  578. color: #0a0;
  579. }
  580. .boxnosel{
  581. border: #757575 4rpx solid;
  582. }
  583. .boxsel{
  584. border: #0a0 4rpx solid;
  585. }
  586. .button-container {
  587. position: relative;
  588. width: 240rpx;
  589. }
  590. .hidden-input {
  591. position: absolute;
  592. top: 0;
  593. left: 0;
  594. width: 100%;
  595. height: 100%;
  596. opacity: 0;
  597. z-index: 2;
  598. }
  599. .custom-button {
  600. position: relative;
  601. z-index: 1;
  602. /* 其他样式 */
  603. width:100%;
  604. margin: 0 auto;
  605. height: 80rpx;
  606. line-height: 60rpx;
  607. font-size: 28rpx;
  608. padding: 10rpx 20rpx;
  609. }
  610. .submitname{
  611. width: 90%;
  612. margin: 0 auto;
  613. text-align: center;
  614. padding: 30rpx;
  615. margin-top: 40rpx;
  616. }
  617. .sub{
  618. background-color: #f0f0f0;
  619. color: #0a0;
  620. }
  621. .subact{
  622. background-color: #0a0;
  623. color: #fff;
  624. }
  625. .userlogo{
  626. height: 760rpx;
  627. }
  628. .exsct {
  629. height: 92rpx;
  630. width: 437rpx;
  631. background-color: transparent;
  632. border-radius: 69rpx;
  633. position: absolute;
  634. top: 27rpx;
  635. left: 28rpx;
  636. box-shadow: inset -57rpx 0px 40rpx -26rpx rgba(255, 255, 255, 0.7);
  637. will-change: left, opacity;
  638. animation: leftFade 2s linear infinite;
  639. opacity: 0;
  640. }
  641. .color_FB2205 {
  642. color: #FB2205;
  643. }
  644. .activity_title2,
  645. .activity_title3,
  646. .activity_title4 {
  647. margin-top: 8vh;
  648. margin-bottom: 56rpx;
  649. font-family: PingFang SC, PingFang SC;
  650. font-weight: 600;
  651. font-size: 48rpx;
  652. line-height: 80rpx;
  653. filter: drop-shadow(0px 4rpx 8rpx rgba(174, 0, 25, 0.8));
  654. text-align: center;
  655. font-style: normal;
  656. text-transform: none;
  657. background: linear-gradient(270deg, #FFF5EE 0%, #FFE2B3 100%);
  658. -webkit-background-clip: text;
  659. background-clip: text;
  660. -webkit-text-fill-color: transparent;
  661. text-fill-color: transparent;
  662. display: inline-block
  663. }
  664. .activity_title3 {
  665. font-size: 48rpx;
  666. line-height: 80rpx;
  667. margin-top: 6vh;
  668. margin-bottom: 8rpx;
  669. }
  670. .activity_title4 {
  671. font-size: 32rpx;
  672. line-height: 44rpx;
  673. margin-top: 0;
  674. margin-bottom: 48rpx;
  675. }
  676. .container_box {
  677. min-height: 100vh;
  678. position: relative;
  679. background: linear-gradient(180deg, #FD2F3C 0%, #FFE7CE 100%);
  680. }
  681. .activity_yh_right {
  682. width: 100rpx;
  683. position: absolute;
  684. top: 25%;
  685. right: 0;
  686. }
  687. .activity_yh_left {
  688. width: 114rpx;
  689. position: absolute;
  690. top: 50%;
  691. left: 0;
  692. }
  693. .header-nav {
  694. height: 88rpx;
  695. display: flex;
  696. align-items: center;
  697. justify-content: center;
  698. overflow: hidden;
  699. box-sizing: border-box;
  700. width: 100%;
  701. }
  702. .conbox {
  703. position: relative;
  704. display: flex;
  705. flex-direction: column;
  706. align-items: center;
  707. justify-content: flex-start;
  708. z-index: 3;
  709. .activity_title {
  710. width: 632rpx;
  711. height: auto;
  712. margin-top: 28rpx;
  713. }
  714. .ybg_box {
  715. width: 566rpx;
  716. height: 580rpx;
  717. position: relative;
  718. .activity_ysx,
  719. .activity_ylq {
  720. position: absolute;
  721. left: 242rpx;
  722. top: 215rpx;
  723. width: 300rpx;
  724. height: auto;
  725. }
  726. .ybg {
  727. width: 616rpx;
  728. height: 616rpx;
  729. background: #FFE7CE;
  730. border-radius: 0rpx 0rpx 0rpx 0rpx;
  731. filter: blur(94.30000305175781px);
  732. }
  733. image {
  734. height: 580rpx;
  735. position: absolute;
  736. top: 0;
  737. left: 0;
  738. z-index: 99;
  739. }
  740. }
  741. .activity_btn_down {
  742. width: 416rpx;
  743. height: 88rpx;
  744. margin-top: 94rpx;
  745. background: rgba(0, 0, 0, 0.3);
  746. border-radius: 56rpx 56rpx 56rpx 56rpx;
  747. font-family: PingFang SC, PingFang SC;
  748. font-weight: 600;
  749. font-size: 28rpx;
  750. color: #FFFFFF;
  751. image {
  752. width: 32rpx;
  753. height: 32rpx;
  754. margin-left: 16rpx;
  755. }
  756. }
  757. .activity_btn {
  758. height: 137rpx;
  759. width: 502rpx;
  760. margin-top: 48rpx;
  761. font-family: PingFang SC;
  762. font-weight: 600;
  763. font-size: 44rpx;
  764. color: #FFFFFF;
  765. display: flex;
  766. align-items: center;
  767. justify-content: center;
  768. position: relative;
  769. z-index: 2;
  770. overflow: hidden;
  771. border-radius: 137rpx;
  772. image {
  773. height: 137rpx;
  774. position: absolute;
  775. left: 0;
  776. top: 12rpx;
  777. z-index: -1;
  778. }
  779. }
  780. }
  781. .popup-box {
  782. width: 670rpx;
  783. min-height: 568rpx;
  784. padding-bottom: 24rpx;
  785. margin-top: 130rpx;
  786. background: linear-gradient(180deg, #FFE7AC 0%, #FFFFFF 100%);
  787. border-radius: 56rpx 56rpx 56rpx 56rpx;
  788. position: relative;
  789. display: flex;
  790. align-items: center;
  791. flex-direction: column;
  792. box-shadow: 0 0 30px -6px rgba(255, 231, 206, 1);
  793. .activity_jb {
  794. height: 184rpx;
  795. margin-top: -130rpx;
  796. position: relative;
  797. }
  798. .popup-tit {
  799. font-family: PingFang SC;
  800. font-weight: 600;
  801. font-size: 40rpx;
  802. color: #000000;
  803. line-height: 80rpx;
  804. }
  805. .con {
  806. // margin-top: 16rpx;
  807. width: 538rpx;
  808. min-height: 170rpx;
  809. padding: 16rpx 0;
  810. background: #FFE8AE;
  811. border-radius: 16rpx 16rpx 16rpx 16rpx;
  812. font-family: PingFang SC;
  813. font-weight: 400;
  814. font-size: 28rpx;
  815. color: #333333;
  816. display: flex;
  817. flex-direction: column;
  818. align-items: center;
  819. justify-content: center;
  820. }
  821. .numbox {
  822. font-weight: 600;
  823. margin-bottom: 12rpx;
  824. }
  825. .num {
  826. font-size: 68rpx;
  827. margin-right: 10rpx;
  828. }
  829. .popbtn {
  830. width: 358rpx;
  831. height: 88rpx;
  832. background: linear-gradient(90deg, #F82D31 0%, #FD6C05 100%);
  833. box-shadow: 0rpx 8rpx 0rpx 0rpx #FEBC92;
  834. border-radius: 64rpx 64rpx 64rpx 64rpx;
  835. margin-top: 32rpx;
  836. font-family: PingFang SC, PingFang SC;
  837. font-weight: 600;
  838. font-size: 32rpx;
  839. color: #FFFFFF;
  840. }
  841. }
  842. .popup-tips {
  843. // margin-top: 20rpx;
  844. font-family: PingFang SC;
  845. font-weight: 400;
  846. font-size: 24rpx;
  847. color: #666666;
  848. text-align: center;
  849. }
  850. .footer_img {
  851. width: 100%;
  852. position: fixed;
  853. bottom: 0;
  854. left: 0;
  855. }
  856. .animation {
  857. will-change: transform;
  858. animation: scaleAnimation 2s ease infinite;
  859. }
  860. @keyframes leftFade {
  861. 0% {
  862. left: -464rpx;
  863. opacity: 0;
  864. }
  865. 25% {
  866. opacity: 1;
  867. left: -249rpx;
  868. }
  869. 50% {
  870. opacity: 0;
  871. left: 16rpx;
  872. }
  873. 100% {
  874. opacity: 0;
  875. left: 490rpx;
  876. }
  877. }
  878. @keyframes scaleAnimation {
  879. 0% {
  880. transform: scale(1);
  881. }
  882. // 30% {
  883. // transform: scale(1.05);
  884. // }
  885. 50% {
  886. transform: scale(1.05);
  887. }
  888. 100% {
  889. transform: scale(1);
  890. }
  891. }
  892. .goodslist {
  893. width: 100%;
  894. margin-top: 58rpx;
  895. padding: 24rpx 10rpx;
  896. display: flex;
  897. align-items: center;
  898. justify-content: space-evenly;
  899. .bg {
  900. width: 100%;
  901. height: 100%;
  902. position: absolute;
  903. bottom: 0;
  904. left: 0;
  905. z-index: -1;
  906. }
  907. }
  908. .goodsitem {
  909. flex: 1;
  910. max-width: 200rpx;
  911. min-height: 124rpx;
  912. border-radius: 10rpx;
  913. display: flex;
  914. flex-direction: column;
  915. align-items: center;
  916. justify-content: flex-start;
  917. font-family: PingFang SC;
  918. font-weight: 400;
  919. font-size: 22rpx;
  920. color: #999999;
  921. position: relative;
  922. z-index: 2;
  923. .img {
  924. width: 153rpx;
  925. height: 126rpx;
  926. margin-top: -44rpx;
  927. border-radius: 10rpx;
  928. }
  929. &-name {
  930. width: 100%;
  931. padding: 8rpx 14rpx;
  932. text-align: center;
  933. font-family: PingFang SC;
  934. font-weight: 500;
  935. font-size: 24rpx;
  936. color: #222222;
  937. box-sizing: border-box;
  938. }
  939. &-integral {
  940. min-width: 80%;
  941. padding-bottom: 16rpx;
  942. box-sizing: border-box;
  943. font-family: PingFang SC;
  944. font-weight: 400;
  945. font-size: 22rpx;
  946. color: #FF5C03;
  947. border-bottom: 2px #999999 dotted;
  948. &-num {
  949. font-family: DINPro, DINPro;
  950. font-weight: 500;
  951. font-size: 36rpx;
  952. }
  953. }
  954. &-price {
  955. padding: 10rpx 0;
  956. }
  957. }
  958. </style>