details.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875
  1. <template>
  2. <view class="template-details">
  3. <!-- 顶部自定义导航 -->
  4. <!-- <view style="color: #fff;">
  5. <tn-nav-bar backgroundColor="#000" :bottomShadow="false">AI绘画
  6. </tn-nav-bar>
  7. <view :style="{height: tobheight+'px',borderBottom: 1+'px'+' '+'solid'}"></view>
  8. </view> -->
  9. <!-- <view class="">
  10. <view class="icon15__item--icon tn-flex tn-flex-row-center tn-flex-col-center tn-shadow-blur button-3" @tap="showLandscape">
  11. <view class="tn-icon-level"></view>
  12. </view>
  13. <view class="icon15__item--icon tn-flex tn-flex-row-center tn-flex-col-center tn-shadow-blur button-2" @click="tn('/pageA/author/author')">
  14. <view class="tn-icon-my"></view>
  15. </view>
  16. <view class="icon15__item--icon tn-flex tn-flex-row-center tn-flex-col-center tn-shadow-blur button-1" @click="tn('/pageB/chat/chat')">
  17. <view class="tn-icon-comment"></view>
  18. </view>
  19. </view> -->
  20. <block v-if="showdrawing">
  21. <u-notice-bar v-if="drawingtitle=='正在努力绘制中...'||drawingtitle=='图片正在渲染中...'" :text="noticebar" step
  22. bgColor="#000"></u-notice-bar>
  23. <view class="lazy-loading tn-flex justify-center align-center flex-wrap">
  24. <view class="preloader_1">
  25. <view></view>
  26. <view></view>
  27. <view></view>
  28. <view></view>
  29. <view></view>
  30. </view>
  31. <view class="drawing">
  32. {{drawingtitle}}
  33. </view>
  34. <view v-if="showprogress" class="progress">
  35. <u-line-progress :percentage="percentage" activeColor="#9b59b6" height="18"></u-line-progress>
  36. </view>
  37. <!-- <image src="../../static/images/head.jpg" ></image> -->
  38. </view>
  39. </block>
  40. <!-- 页面内容 -->
  41. <swiper class="card-swiper" :circular="false" :autoplay="true" duration="500" interval="12000"
  42. @change="cardSwiper">
  43. <swiper-item v-for="(item,index) in swiperList" :key="index" :class="cardCur==index?'cur':''">
  44. <!-- <view class="swiper-item image-banner" :style="'background-image:url('+ item.url + ');background-size: cover;'"> -->
  45. <!-- <view class="swiper-item image-banner"> -->
  46. <!-- <image :src="item.url" mode="widthFix"></image> -->
  47. <!-- @click.stop="preview(item.url)" -->
  48. <view class="lazy-load" :style="{height: windowHeight+'px'}">
  49. <u--image @load="previewload" @error="previewerror" width="100%" height="100%" :src="item.url"
  50. mode="widthFix">
  51. <!-- <template v-slot:loading>
  52. <view class="flxe align-center justify-center">
  53. <u-loading-icon size="50" :vertical="true" color="#fff" text="图片渲染中..."></u-loading-icon>
  54. </view>
  55. </template> -->
  56. <view slot="error" style="font-size: 32rpx;text-align: center;">
  57. 图片加载失败
  58. </view>
  59. </u--image>
  60. </view>
  61. <!-- </view> -->
  62. </swiper-item>
  63. </swiper>
  64. <view class="indication">
  65. <block v-for="(item,index) in swiperList" :key="index">
  66. <view class="spot" :class="cardCur==index?'active':''"></view>
  67. </block>
  68. </view>
  69. <!-- 底部tabbar start-->
  70. <view class="tabbar footerfixed dd-glass tn-color-white" style="border-radius: 100rpx;">
  71. <view class="action" @click="getisback">
  72. <view class="bar-icon">
  73. <view class="tn-icon-left-circle">
  74. </view>
  75. <!-- <image class="" src='https://tnuiimage.tnkjapp.com/tabbar/a1.png'></image> -->
  76. </view>
  77. <view class="">立即返回</view>
  78. </view>
  79. <view class="action" @click="getdownload">
  80. <view class="bar-icon">
  81. <view class="tn-icon-download">
  82. </view>
  83. <!-- <image class="" src='https://tnuiimage.tnkjapp.com/tabbar/k2.png'></image> -->
  84. </view>
  85. <view class="">下载/分享</view>
  86. </view>
  87. <view class="action" @click="parameters">
  88. <view class="bar-icon">
  89. <view class="tn-icon-creative">
  90. </view>
  91. <!-- <image class="" src='https://tnuiimage.tnkjapp.com/tabbar/i2.png'></image> -->
  92. </view>
  93. <view class="">绘画参数</view>
  94. </view>
  95. <view v-if="show2" class="action"
  96. @click="tn('/pages/painting/draw?prompt='+parameter.prompt+'&engine='+parameter.engine+'&model_name='+parameter.model_name)">
  97. <view class="tn-flex-direction-column tn-flex-row-center tn-flex-col-center tn-button--clear-style">
  98. <view class="bar-icon">
  99. <view class="tn-icon-write">
  100. </view>
  101. <!-- <image class="" src='https://tnuiimage.tnkjapp.com/tabbar/d2.png'></image> -->
  102. </view>
  103. <view class="">创作相似</view>
  104. </view>
  105. </view>
  106. <view v-else class="action" @click="setOpen">
  107. <view class="tn-flex-direction-column tn-flex-row-center tn-flex-col-center tn-button--clear-style">
  108. <view class="bar-icon">
  109. <view class="tn-icon-up-circle">
  110. </view>
  111. <!-- <image class="" src='https://tnuiimage.tnkjapp.com/tabbar/d2.png'></image> -->
  112. </view>
  113. <view class="">{{showopen?'已公开':'公开作品'}}</view>
  114. </view>
  115. </view>
  116. </view>
  117. <!-- 压屏窗-->
  118. <tn-landscape :show="show1" @close="closeLandscape" closePosition="bottom" :closeSize="60">
  119. <view class="tn-color-white" style="width: 100vw;">
  120. <view class="" style="margin: 120rpx 60rpx;">
  121. <!-- <view class="tn-flex tn-flex-col-top">
  122. <view class="">
  123. <view class="logo-pic tn-shadow">
  124. <view class="logo-image">
  125. <view class="tn-shadow-blur"
  126. :style="{backgroundImage:'url('+parameter.avatar+')',width: 100+'rpx',height: 100+'rpx'}">
  127. </view>
  128. </view>
  129. </view>
  130. <view class="tn-icon-sex-male"
  131. style="position: absolute;margin: -105rpx 0 0 72rpx;border-radius: 100rpx;background-color: #FFFFFF;color: #FF71D2;padding: 5rpx;">
  132. </view>
  133. </view>
  134. <view class="tn-padding-left-sm tn-padding-top-xs" style="width: 100%;">
  135. <view class="tn-flex tn-flex-row-between tn-flex-col-between">
  136. <view class="justify-content-item">
  137. <text class="tn-text-lg tn-text-bold">{{parameter.nickname}}</text>
  138. <text class="tn-padding-left-sm tn-padding-right-xs">水瓶座</text>
  139. <text class="tn-icon-con-virgo"></text>
  140. </view>
  141. <view class="justify-content-item tn-round tn-text-xs tn-bg-orangered--light tn-color-orangered" style="padding: 5rpx 15rpx;">
  142. <text class="tn-icon-warning-fill tn-padding-right-xs"></text> 举报
  143. </view>
  144. </view>
  145. <view class="tn-padding-top-xs">
  146. <view class="">
  147. <text class="tn-text-df tn-color-gray--light">{{parameter.create_time}}</text>
  148. </view>
  149. </view>
  150. </view>
  151. </view> -->
  152. <view class="tn-flex tn-flex-row-between tn-flex-col-between tn-margin-top-xl tn-text-justify">
  153. <text class="">AI绘画:{{parameter.engine == 'sd'?'StableDiffusion绘图':'MidJourney绘图'}}</text>
  154. </view>
  155. <view v-if="parameter.prompt"
  156. class="tn-flex tn-flex-row-between tn-flex-col-between tn-margin-top-xl tn-text-justify">
  157. <text class="">描述词:{{parameter.prompt}}</text>
  158. </view>
  159. <view v-if="parameter.model_name"
  160. class="tn-flex tn-flex-row-between tn-flex-col-between tn-margin-top-xl tn-text-justify">
  161. <text class="">模型:{{form.name?form.name:parameter.model_name}}</text>
  162. </view>
  163. <view v-if="parameter.width"
  164. class="tn-flex tn-flex-row-between tn-flex-col-between tn-margin-top-xl tn-text-justify">
  165. <text class="">分辨率:{{parameter.width}}x{{parameter.height}}</text>
  166. </view>
  167. <!-- <view class="tn-flex tn-flex-row-between tn-flex-col-between tn-margin-top-xl tn-text-justify">
  168. <text class="">尺寸:16:9</text>
  169. </view>
  170. <view class="tn-flex tn-flex-row-between tn-flex-col-between tn-margin-top-xl tn-text-justify">
  171. <text class="">画面风格:吉卜力</text>
  172. </view> -->
  173. </view>
  174. </view>
  175. </tn-landscape>
  176. </view>
  177. </template>
  178. <script>
  179. let timingr;
  180. let asynchronous;
  181. export default {
  182. data() {
  183. return {
  184. tobheight: 45,
  185. platform: this.$platform.get(),
  186. showdrawing: true,
  187. showprogress: true,
  188. drawingtitle: '正在努力绘制中...',
  189. percentage: 0,
  190. show1: false,
  191. show2: true,
  192. cardCur: 0,
  193. swiperList: [],
  194. form: {},
  195. parameter: {},
  196. noticebar: ['精美图片需要时间打磨,预计20-30秒左右出图',
  197. '图片生成中请不要退出此页面,否则可能会无法生成'
  198. // '长时间未出图?可稍后在 我的-绘画记录 里查看'
  199. ],
  200. parameterid: 0,
  201. showopen: false,
  202. failnum: 0,
  203. windowHeight: 0
  204. }
  205. },
  206. onUnload() {
  207. clearTimeout(timingr);
  208. clearTimeout(asynchronous);
  209. },
  210. onLoad() {
  211. var that = this;
  212. this.windowHeight = uni.$u.sys().windowHeight - 60
  213. // console.log(this.windowHeight);
  214. if (that.$Route.query.urls) {
  215. this.showprogress = false
  216. this.drawingtitle = '图片正在加载中...'
  217. that.gallerydetail(that.$Route.query.urls)
  218. }
  219. if (that.$Route.query.form) {
  220. this.form = that.$Route.query.form
  221. this.parameter.prompt = this.form.prompt
  222. this.parameter.model_name = this.form.model_id
  223. this.parameter.width = this.form.width
  224. this.parameter.height = this.form.height
  225. this.parameter.engine = 'sd'
  226. this.show2 = false
  227. // this.parameter = that.$Route.query.form
  228. this.aiPlay();
  229. }
  230. },
  231. methods: {
  232. parameters() {
  233. var that = this;
  234. // if(that.showdrawing){
  235. // uni.showToast({
  236. // title:'图片生成中',
  237. // icon:'none'
  238. // })
  239. // return;
  240. // }
  241. that.show1 = true
  242. },
  243. setOpen() {
  244. var that = this;
  245. if (that.showdrawing) {
  246. uni.showToast({
  247. title: '图片生成中',
  248. icon: 'none'
  249. })
  250. return;
  251. }
  252. if (that.showopen) {
  253. uni.showToast({
  254. title: '图片已公开',
  255. icon: 'none'
  256. })
  257. return;
  258. }
  259. uni.showModal({
  260. confirmColor: '#26B3A0',
  261. confirmText: '确认公开',
  262. title: '提示',
  263. content: '是否确认公开此绘画作品',
  264. success(src) {
  265. if (src.confirm) {
  266. that.$http('gallery.setOpen', {
  267. id: that.parameterid
  268. }).then(res => {
  269. if (res.code == 0) {
  270. uni.showToast({
  271. title: '提交成功,等待审核'
  272. })
  273. that.showopen = true
  274. }
  275. });
  276. }
  277. }
  278. });
  279. },
  280. gallerydetail(id) {
  281. let that = this;
  282. this.$http('gallery.detail', {
  283. id: id
  284. }).then(res => {
  285. if (res.code == 0) {
  286. this.showdrawing = false
  287. this.parameter = res.data
  288. for (var i = 0; i < res.data.imgs_file.length; i++) {
  289. var url = {
  290. id: i,
  291. type: 'image',
  292. url: res.data.imgs_file[i],
  293. }
  294. that.swiperList.push(url)
  295. }
  296. this.done = true
  297. } else {
  298. }
  299. });
  300. },
  301. aiPlay() {
  302. console.log('aiPlay()传递给后端的参数:',this.form);
  303. let that = this;
  304. this.showdrawing = true
  305. if (that.failnum == 0) {
  306. this.progressbar()
  307. }
  308. this.$http('gallery.create', this.form).then(res => {
  309. console.log('aiPlay()返回值:',res);
  310. if (res.code == 0) {
  311. this.showTask(res.data.id)
  312. } else {
  313. uni.hideToast()
  314. uni.showModal({
  315. confirmText: '退出',
  316. showCancel: false,
  317. confirmColor: '#26b3a0',
  318. title: '提示',
  319. content: res.msg,
  320. success(tit) {
  321. if (tit.confirm) {
  322. uni.navigateBack()
  323. }
  324. }
  325. })
  326. }
  327. });
  328. },
  329. progressbar() {
  330. var that = this;
  331. if (that.percentage < 99) {
  332. timingr = setTimeout(() => {
  333. that.percentage = uni.$u.range(0, 99, that.percentage + 1)
  334. that.progressbar()
  335. }, 300);
  336. } else {
  337. clearTimeout(timingr);
  338. }
  339. },
  340. showTask(id) {
  341. let that = this;
  342. this.$http('gallery.getOpensdDetail', {
  343. id: id,
  344. }).then(res => {
  345. console.log('showTask--gallery.getOpensdDetail返回值:',res,res.data.state);
  346. if (res.code == 0) {
  347. if (res.data.state == "success") {
  348. this.percentage = 99
  349. this.drawingtitle = '图片正在渲染中,请不要退出此页面'
  350. this.parameterid = res.data.id
  351. this.done = true
  352. clearTimeout(asynchronous);
  353. var url = {
  354. id: 0,
  355. type: 'image',
  356. url: res.data.gen_img,
  357. }
  358. that.swiperList.push(url)
  359. } else if (res.data.state == "in_create") {
  360. asynchronous = setTimeout(() => {
  361. that.showTask(id)
  362. }, 1000);
  363. return;
  364. } else if (res.data.state == "in_wait") {
  365. asynchronous = setTimeout(() => {
  366. that.showTask(id)
  367. }, 1000);
  368. return;
  369. } else {
  370. uni.showModal({
  371. confirmText: '退出',
  372. showCancel: false,
  373. confirmColor: '#26b3a0',
  374. title: '提示',
  375. content: res.msg,
  376. success(tit) {
  377. if (tit.confirm) {
  378. uni.navigateBack()
  379. }
  380. }
  381. })
  382. }
  383. } else {
  384. uni.showModal({
  385. confirmText: '退出',
  386. showCancel: false,
  387. confirmColor: '#26b3a0',
  388. title: '提示',
  389. content: res.msg,
  390. success(tit) {
  391. if (tit.confirm) {
  392. uni.navigateBack()
  393. }
  394. }
  395. })
  396. }
  397. })
  398. },
  399. previewload() {
  400. // console.log('ch');
  401. this.showdrawing = false
  402. this.percentage = 0
  403. },
  404. previewerror() {
  405. this.showdrawing = false
  406. this.percentage = 0
  407. },
  408. preview(e) {
  409. uni.previewImage({
  410. urls: [e]
  411. })
  412. },
  413. //下载分享
  414. getdownload() {
  415. uni.showModal({
  416. showCancel: false,
  417. title: '提示',
  418. content: '长按图片下载/分享',
  419. confirmColor: '#26b3a0'
  420. })
  421. },
  422. getisback() {
  423. if (!this.done) {
  424. uni.showModal({
  425. confirmColor: '#26B3A0',
  426. confirmText: '立即退出',
  427. title: '提示',
  428. content: '图片生成中,退出此页面后可能无法生成',
  429. success(src) {
  430. if (src.confirm) {
  431. uni.navigateBack()
  432. }
  433. }
  434. })
  435. } else {
  436. uni.navigateBack()
  437. }
  438. },
  439. // 跳转
  440. tn(e) {
  441. // console.log(e);
  442. uni.navigateTo({
  443. url: e,
  444. });
  445. },
  446. // cardSwiper
  447. cardSwiper(e) {
  448. // console.log(e.detail);
  449. this.cardCur = e.detail.current
  450. },
  451. // 弹出压屏窗
  452. showLandscape() {
  453. this.openLandscape()
  454. },
  455. // 打开压屏窗
  456. openLandscape() {
  457. this.show1 = true
  458. },
  459. // 关闭压屏窗
  460. closeLandscape() {
  461. this.show1 = false
  462. },
  463. }
  464. }
  465. </script>
  466. <style lang="scss" scoped>
  467. .template-details {
  468. margin: 0;
  469. width: 100%;
  470. height: 100vh;
  471. color: #fff;
  472. overflow: hidden;
  473. }
  474. /* 胶囊*/
  475. .tn-custom-nav-bar__back {
  476. width: 100%;
  477. height: 100%;
  478. position: relative;
  479. display: flex;
  480. justify-content: space-evenly;
  481. align-items: center;
  482. box-sizing: border-box;
  483. background-color: rgba(0, 0, 0, 0.15);
  484. border-radius: 1000rpx;
  485. border: 1rpx solid rgba(255, 255, 255, 0.5);
  486. color: #FFFFFF;
  487. font-size: 18px;
  488. .icon {
  489. display: block;
  490. flex: 1;
  491. margin: auto;
  492. text-align: center;
  493. }
  494. &:before {
  495. content: " ";
  496. width: 1rpx;
  497. height: 110%;
  498. position: absolute;
  499. top: 22.5%;
  500. left: 0;
  501. right: 0;
  502. margin: auto;
  503. transform: scale(0.5);
  504. transform-origin: 0 0;
  505. pointer-events: none;
  506. box-sizing: border-box;
  507. opacity: 0.7;
  508. background-color: #FFFFFF;
  509. }
  510. }
  511. /* 图标容器15 start */
  512. .icon15 {
  513. &__item {
  514. width: 30%;
  515. border-radius: 10rpx;
  516. padding: 30rpx;
  517. margin: 20rpx 10rpx;
  518. transform: scale(1);
  519. transition: transform 0.3s linear;
  520. transform-origin: center center;
  521. &--icon {
  522. width: 100rpx;
  523. height: 100rpx;
  524. font-size: 50rpx;
  525. border-radius: 50%;
  526. margin-bottom: 18rpx;
  527. position: relative;
  528. z-index: 1;
  529. &::after {
  530. content: " ";
  531. position: absolute;
  532. z-index: -1;
  533. width: 100%;
  534. height: 100%;
  535. left: 0;
  536. bottom: 0;
  537. border-radius: inherit;
  538. opacity: 1;
  539. transform: scale(1, 1);
  540. background-size: 100% 100%;
  541. }
  542. }
  543. }
  544. }
  545. /* 按钮 */
  546. .button-1 {
  547. background-color: rgba(0, 0, 0, 0.15);
  548. position: fixed;
  549. /* bottom:200rpx;
  550. right: 20rpx; */
  551. top: 25%;
  552. right: 30rpx;
  553. z-index: 1001;
  554. border-radius: 100px;
  555. }
  556. .button-2 {
  557. background-color: rgba(0, 0, 0, 0.15);
  558. position: fixed;
  559. /* bottom:200rpx;
  560. right: 20rpx; */
  561. top: 35%;
  562. right: 30rpx;
  563. z-index: 1001;
  564. border-radius: 100px;
  565. }
  566. .button-3 {
  567. background-color: rgba(0, 0, 0, 0.15);
  568. position: fixed;
  569. /* bottom:200rpx;
  570. right: 20rpx; */
  571. top: 45%;
  572. right: 30rpx;
  573. z-index: 1001;
  574. border-radius: 100px;
  575. }
  576. /* 用户头像 start */
  577. .logo-image {
  578. width: 100rpx;
  579. height: 100rpx;
  580. position: relative;
  581. }
  582. .logo-pic {
  583. background-size: cover;
  584. background-repeat: no-repeat;
  585. // background-attachment:fixed;
  586. background-position: top;
  587. border: 6rpx solid rgba(255, 255, 255, 0.25);
  588. box-shadow: 0rpx 0rpx 80rpx 0rpx rgba(0, 0, 0, 0.15);
  589. border-radius: 50%;
  590. overflow: hidden;
  591. // background-color: #FFFFFF;
  592. }
  593. /* 底部tabbar start*/
  594. /* 毛玻璃*/
  595. .dd-glass {
  596. width: 100%;
  597. backdrop-filter: blur(20rpx);
  598. -webkit-backdrop-filter: blur(20rpx);
  599. }
  600. .footerfixed {
  601. position: fixed;
  602. // margin: 20rpx;
  603. margin: 40rpx 5%;
  604. width: 90%;
  605. bottom: calc(env(safe-area-inset-bottom) / 2);
  606. ;
  607. z-index: 999;
  608. background-color: rgba(0, 0, 0, 0.15);
  609. box-shadow: 0rpx 0rpx 30rpx 0rpx rgba(0, 0, 0, 0.07);
  610. }
  611. .tabbar {
  612. display: flex;
  613. align-items: center;
  614. min-height: 110rpx;
  615. justify-content: space-between;
  616. padding: 0;
  617. height: calc(110rpx + env(safe-area-inset-bottom) / 2);
  618. // padding-bottom: calc(env(safe-area-inset-bottom) / 2);
  619. }
  620. .tabbar .action {
  621. font-size: 22rpx;
  622. position: relative;
  623. flex: 1;
  624. text-align: center;
  625. padding: 0;
  626. display: block;
  627. height: auto;
  628. line-height: 1;
  629. margin: 0;
  630. overflow: initial;
  631. }
  632. .tabbar .action .bar-icon {
  633. width: 100rpx;
  634. position: relative;
  635. display: block;
  636. height: auto;
  637. margin: 0 auto 10rpx;
  638. text-align: center;
  639. font-size: 42rpx;
  640. }
  641. .tabbar .action .bar-icon image {
  642. width: 50rpx;
  643. height: 50rpx;
  644. display: inline-block;
  645. }
  646. /* 全屏轮播 start*/
  647. .card-swiper {
  648. height: 100vh !important;
  649. }
  650. .card-swiper swiper-item {
  651. width: 750rpx !important;
  652. left: 0rpx;
  653. box-sizing: border-box;
  654. overflow: initial;
  655. background: #000;
  656. }
  657. .card-swiper swiper-item .swiper-item {
  658. // width: 100%;
  659. // display: block;
  660. // height: 100vh;
  661. // border-radius: 0rpx;
  662. // transform: scale(0.9);
  663. // transition: all 0.2s ease-in 0s;
  664. // will-change: transform;
  665. // overflow: hidden;
  666. display: flex;
  667. align-items: center;
  668. justify-content: center;
  669. height: 100%;
  670. background: #000;
  671. }
  672. .card-swiper swiper-item.cur .swiper-item {
  673. transform: scale(1);
  674. transition: all 0.2s ease-in 0s;
  675. will-change: transform;
  676. }
  677. .image-banner {
  678. display: flex;
  679. align-items: center;
  680. justify-content: center;
  681. }
  682. .image-banner image {
  683. width: 100%;
  684. // height: 100%;
  685. }
  686. /* 轮播指示点 start*/
  687. .indication {
  688. z-index: 9999;
  689. width: 100%;
  690. height: 36rpx;
  691. position: fixed;
  692. display: flex;
  693. flex-direction: row;
  694. align-items: center;
  695. justify-content: center;
  696. }
  697. .spot {
  698. background-color: #FFFFFF;
  699. opacity: 0.6;
  700. width: 10rpx;
  701. height: 10rpx;
  702. border-radius: 20rpx;
  703. top: calc(-280rpx - env(safe-area-inset-bottom) / 2);
  704. top: calc(-280rpx - constant(safe-area-inset-bottom));
  705. margin: 0 8rpx !important;
  706. position: relative;
  707. }
  708. .spot.active {
  709. opacity: 1;
  710. width: 30rpx;
  711. background-color: #FFFFFF;
  712. }
  713. .lazy-load {
  714. background: #000;
  715. display: grid;
  716. align-items: center;
  717. padding-bottom: env(safe-area-inset-bottom);
  718. // height: 100%;
  719. }
  720. .lazy-load view {
  721. width: 100%;
  722. }
  723. .lazy-loading {
  724. background: #000;
  725. height: 100%;
  726. }
  727. .drawing {
  728. position: absolute;
  729. top: 46%;
  730. // color: #606266;
  731. font-size: 18px;
  732. }
  733. .progress {
  734. position: absolute;
  735. top: 52%;
  736. width: 60%;
  737. }
  738. .preloader_1 {
  739. position: absolute;
  740. // right: 8%;
  741. // bottom: 12%;
  742. // position: fixed;
  743. // right: 58%;
  744. margin-right: 65px;
  745. top: 42%;
  746. }
  747. .preloader_1 view {
  748. display: block;
  749. bottom: 0px;
  750. width: 9px;
  751. height: 5px;
  752. background: #9b59b6;
  753. position: absolute;
  754. animation: preloader_1 1.5s infinite ease-in-out;
  755. }
  756. .preloader_1 view:nth-child(2) {
  757. left: 11px;
  758. animation-delay: .2s;
  759. }
  760. .preloader_1 view:nth-child(3) {
  761. left: 22px;
  762. animation-delay: .4s;
  763. }
  764. .preloader_1 view:nth-child(4) {
  765. left: 33px;
  766. animation-delay: .6s;
  767. }
  768. .preloader_1 view:nth-child(5) {
  769. left: 44px;
  770. animation-delay: .8s;
  771. }
  772. @keyframes preloader_1 {
  773. 0% {
  774. height: 5px;
  775. transform: translateY(0px);
  776. background: #9b59b6;
  777. }
  778. 25% {
  779. height: 30px;
  780. transform: translateY(15px);
  781. background: #3498db;
  782. }
  783. 50% {
  784. height: 5px;
  785. transform: translateY(0px);
  786. background: #9b59b6;
  787. }
  788. 100% {
  789. height: 5px;
  790. transform: translateY(0px);
  791. background: #9b59b6;
  792. }
  793. }
  794. </style>