componentLockInfo.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901
  1. <template>
  2. <view>
  3. <componentLogin ref="refLogin"
  4. @findByOpenId="findByOpenId"></componentLogin>
  5. <u-modal v-model="openLockBl" @confirm="lockStatus1" confirm-color="#00B962" :show-cancel-button="true"
  6. ref="uModal" title="提示" content="是否下降当前地锁?" confirm-text="开启"></u-modal>
  7. <u-modal v-model="closeLockBl" @confirm="lockStatus2" confirm-color="#fa3534" :show-cancel-button="true"
  8. ref="uModal" title="提示" content="是否结束使用当前地锁?" confirm-text="结束"></u-modal>
  9. <u-modal v-model="loginBl" @confirm="loginconfirm" :show-cancel-button="true"
  10. ref="uModal" title="提示" content="当前用户未登录,是否前往登录" confirm-text="登录"></u-modal>
  11. <u-modal v-model="openModalBl" @confirm="confirmPhone" confirm-text="拨打电话" confirm-color="#606266"
  12. :show-cancel-button="true" ref="uModal" :asyncClose="true" title="客服电话" :content="content"
  13. :content-style="{fontSize: '24px',color: '#101010'}"></u-modal>
  14. <u-popup v-model="showMessage" mode="bottom" border-radius="30">
  15. <view class="showMessage">
  16. <view class="title">降锁成功</view>
  17. <view class="body">
  18. 车位锁已经降锁,请尽快驶入车位!<br />
  19. 若超过3分钟未停车,车位锁将自动升起上锁,如需继续使用请重新扫码降锁。
  20. </view>
  21. <view class="botton">
  22. <u-button @click="showMessage=false" type="primary" shape="square">知道了</u-button>
  23. </view>
  24. </view>
  25. </u-popup>
  26. <view v-if="isReady" class="isReady">
  27. <view class="gradient-header">
  28. <view class="jpback">
  29. </view>
  30. </view>
  31. <view v-if="floorlockInfo.id" class="isReady_1">
  32. <view class="body">
  33. <view class="page">
  34. <view class="page-main page-border ">
  35. <view class="name">
  36. <view class="name-info">
  37. <view class="name-text">
  38. {{floorlockInfo.name}}
  39. </view>
  40. <view class=" tags">
  41. <span class="tag typeN"
  42. :class="'typeN'+floorlockInfo.type">{{floorlockInfo.typeN}}</span>
  43. <span class="tag"
  44. :class="'status'+floorlockInfo.status">{{floorlockInfo.status==1?'在线':'离线'}}</span>
  45. </view>
  46. </view>
  47. <view class="code-info">
  48. 编号:{{floorlockInfo.lockNo}}
  49. </view>
  50. </view>
  51. <view class="value1" @click="gotoMain" >
  52. <view class="item1">
  53. <img class="img" src="@/assets/img/parkingDetails/item7.png" alt="">
  54. </view>
  55. <view class="item2">切换</view>
  56. </view>
  57. </view>
  58. <view class="page-info" >
  59. <view class="address">
  60. <view class="name">
  61. {{floorlockInfo.parkingName}}
  62. </view>
  63. <view class="text" v-if="floorlockInfo.locationAddress">
  64. <u-icon name="map-fill" size="24" color="#999999" ></u-icon>
  65. {{floorlockInfo.locationAddress?floorlockInfo.locationAddress:''}}
  66. </view>
  67. </view>
  68. <view class="value2" v-if="floorlockInfo.longitude&&floorlockInfo.latitude" @click="openLocation" >
  69. <view class="item1">
  70. <img class="img" src="@/assets/img/parkingDetails/item8.png" alt="">
  71. </view>
  72. <view class="item2">导航</view>
  73. </view>
  74. </view>
  75. <view class="page-info" v-if="0">
  76. <view class="info-span" v-if="floorlockInfo.lastOnlineTime">
  77. 更新时间:{{floorlockInfo.lastOnlineTime}}
  78. </view>
  79. <view class="info-span" v-if="floorlockInfo.batteryLevel">
  80. 电压:{{floorlockInfo.batteryLevel}}V
  81. </view>
  82. </view>
  83. </view>
  84. </view>
  85. <view class="page-top" v-if="id">
  86. <template v-if="floorlockInfo.status==0">
  87. <view class="name">
  88. <img class="img" src="@/assets/img/lockstatus/index4.png" alt="">
  89. </view>
  90. </template>
  91. <template v-else>
  92. <view class="name" v-if="floorlockInfo.parkingStatus==1">
  93. <img class="img" src="@/assets/img/lockstatus/index3.png" alt="">
  94. </view>
  95. <view class="name" v-else-if="floorlockInfo.lockStatus==1">
  96. <img class="img" src="@/assets/img/lockstatus/index1.png" alt="">
  97. </view>
  98. <view class="name" v-else-if="floorlockInfo.lockStatus==3">
  99. <img class="img" src="@/assets/img/lockstatus/index2.png" alt="">
  100. </view>
  101. <view class="name" v-else-if="floorlockInfo.lockStatus==2">
  102. <img class="img" src="@/assets/img/lockstatus/index2.png" alt="">
  103. </view>
  104. <view class="name" v-else-if="floorlockInfo.lockStatus==4||floorlockInfo.lockStatus==0">
  105. <img class="img" src="@/assets/img/lockstatus/index4.png" alt="">
  106. </view>
  107. </template>
  108. <view class=" value" style="text-align: center;font-size: 40rpx;color: rgba(51,51,51,1);font-weight: bold;">
  109. {{floorlockInfo.lockStatusN}}
  110. </view>
  111. <view class=" value" style="color: rgba(255,61,0,1);;text-align: center;font-size: 24rpx;margin:10rpx"
  112. v-if="floorlockInfo.lockStatus==2&&floorlockInfo.parkingStatus==0">
  113. {{showsecondsDistance()}}后自动抬锁<br>
  114. 请尽快驶入地锁
  115. </view>
  116. <view class="valuebutton" @click="operateBtn" >
  117. <template v-if="floorlockInfo.status==0">
  118. <view class="jpbutton jpbutton5">
  119. <u-icon name="phone-fill" label="电话报修" color="#fff" label-color="#fff"
  120. label-size="36"></u-icon>
  121. </view>
  122. </template>
  123. <template v-else>
  124. <view class="jpbutton jpbutton6" v-if="floorlockInfo.parkingStatus==1">
  125. 该地锁已被占用
  126. </view>
  127. <view class="jpbutton jpbutton1" v-else-if="floorlockInfo.lockStatus==1">
  128. <img class="img" src="@/assets/img/button/lock.svg" alt="">
  129. 降锁
  130. </view>
  131. <!-- <view class="jpbutton jpbutton6" v-else-if="floorlockInfo.lockStatus==2">
  132. 地锁降
  133. </view> -->
  134. <view class="jpbutton jpbutton4" v-else-if="floorlockInfo.lockStatus==3">
  135. 降锁中
  136. </view>
  137. <view class="jpbutton jpbutton5"
  138. v-else-if="floorlockInfo.lockStatus==4||floorlockInfo.lockStatus==0">
  139. <u-icon name="phone-fill" label="电话报修" color="#fff" label-color="#fff"
  140. label-size="36"></u-icon>
  141. </view>
  142. </template>
  143. </view>
  144. <view class="page pagemanage" v-if="isMy">
  145. <view class="page-main">
  146. <view class="mitem" @click="gotoUrl('pages/mylock/bindLock')">
  147. <img class="img" src="@/assets/img/quick/item2.svg" alt="">
  148. 绑定地锁
  149. </view>
  150. <view class="mitem" @click="gotoUrl('pages/mylock/infoLock?add=1&id='+floorlockInfo.id)" >
  151. <img class="img" src="@/assets/img/quick/item1.svg" alt="">
  152. 白名单
  153. </view>
  154. <view class="mitem end" @click="gotoUrl('pages/mylock/bindLock?id='+floorlockInfo.id)">
  155. <img class="img" src="@/assets/img/quick/item3.svg" alt="">
  156. 属性查看
  157. </view>
  158. </view>
  159. </view>
  160. <view class="page " >
  161. <u-collapse >
  162. <u-collapse-item :title="item.head" v-for="(item, index) in itemList" :open="item.open" :key="index">
  163. {{item.body}}
  164. </u-collapse-item>
  165. </u-collapse>
  166. </view>
  167. </view>
  168. </view>
  169. </view>
  170. <view class="page-role" v-else>
  171. <u-icon name="hourglass" size="300" color="#19be6b" v-if="!permission"></u-icon>
  172. <img class="img" v-else src="@/assets/img/nonwhitelist/info.png" alt="">
  173. <view class="text1">{{permission?'暂无权限':'加载中...'}}</view>
  174. <view class="text2" v-if="permission">此车位仅限车主及授权用户使用</view>
  175. <view class="botton" @click="gotoIndex" v-if="permission">返回首页</view>
  176. </view>
  177. </view>
  178. </template>
  179. <script>
  180. import componentLogin from '@/components/componentLogin.vue';
  181. import * as API from '@/apis/pagejs/pagesIndex.js'
  182. import {
  183. secondsDistance,newDate,
  184. } from '@/apis/utils'
  185. export default {
  186. components: {
  187. componentLogin,
  188. //'u-collapse-item': () => import('@/uni_modules/uview-ui/components/u-collapse-item/u-collapse-item'),
  189. //'u-collapse': () => import('@/uni_modules/uview-ui/components/u-collapse/u-collapse'),
  190. },
  191. data() {
  192. return {
  193. isBack:false,
  194. isMy:0,
  195. showtabbar:false,
  196. isReady: false,
  197. id: "",
  198. opid:"",
  199. whiteList: [],
  200. list: [],
  201. mylist: [],
  202. loginBl: false,
  203. floorlockInfo: {
  204. lockStatusN: ""
  205. },
  206. itemList: [{
  207. head: "操作指南",
  208. body: "点击“降锁”按钮,等待地锁降下后系统会提示降锁成功,此时即可将车辆驶入指定车位。",
  209. open: true,
  210. disabled: true
  211. },{
  212. head: "温馨提示",
  213. body: "1、成功降锁后请于三分钟内将车辆驶入指定车位;超时地锁会自动升起,需重新扫码降锁;\n\t2、请按降锁流程说明停车,严禁使用外力降锁;\n\t3、地锁服务热线 400-8899-619。",
  214. open: false,
  215. }],
  216. content: "400-8899-619",
  217. setIntervalId: "",
  218. userInfo:{},
  219. userInfoPlus:{
  220. whiteList:[],
  221. myAllList:[]
  222. },
  223. showMessage: 0,
  224. permission:false,
  225. openLockBl:false,
  226. closeLockBl:false,
  227. openModalBl: false,
  228. isOnLoad:0,
  229. }
  230. },
  231. onLoad(op) {
  232. this.isOnLoad=1
  233. if(op.q){
  234. var val =decodeURIComponent(op.q);
  235. if(val&&val.indexOf("?id=")>-1){
  236. val=val.split("?id=")[1]
  237. if(val.indexOf("&")>-1){
  238. val=val.split("&")[0]
  239. }
  240. this.id = val
  241. }
  242. }
  243. this.userInfo = this.jphelp.getPersonInfo()
  244. this.userInfoPlus=this.jphelp.getPersonInfoPlus()
  245. if(this.userInfo.id){
  246. }
  247. uni.setNavigationBarTitle({
  248. title: "加载中..."
  249. })
  250. if (op.id) {
  251. this.id = op.id
  252. }
  253. //this.lockInfoOnLoad()
  254. },
  255. onShow(){
  256. //
  257. },
  258. onReady() {
  259. this.initRef()
  260. },
  261. onShareTimeline(){
  262. return {
  263. title: '智泊e家',
  264. }
  265. },
  266. onShareAppMessage(res) {
  267. return {
  268. title: '智泊e家',
  269. }
  270. },
  271. methods: {
  272. showsecondsDistance(){
  273. if((this.floorlockInfo.id&&this.floorlockInfo.lastOperationTime)){
  274. var time1=new Date()
  275. var time2=newDate(this.floorlockInfo.lastOperationTime)
  276. var time3=secondsDistance(time2,time1)
  277. var k=3*60-time3
  278. var fen=parseInt(k/60)
  279. var miao=parseInt(k%60)
  280. if(k>0){
  281. if(fen>0){
  282. return `${fen}分${miao}秒`
  283. }else{
  284. return `${miao}秒`
  285. }
  286. }else{
  287. return "3分钟"
  288. }
  289. }else{
  290. return "3分钟"
  291. }
  292. },
  293. initRef(id,ref){
  294. if(ref==1){
  295. this.isOnLoad=1
  296. }
  297. if(id){
  298. this.id = id
  299. }
  300. this.$refs.refLogin.findByOpenId()
  301. this.setIntervalId = setInterval(() => {
  302. this.getFloorlockDetails(1)
  303. }, 1000 * 3)
  304. this.jphelp.setInterval("lockInfo",this.setIntervalId)
  305. console.log("eeeeeeeeeeeeeeeeeeee")
  306. this.getFloorlockDetails(0,1)
  307. },
  308. findByOpenId(res) {
  309. this.getFloorlockList()
  310. },
  311. confirmPhone() {
  312. this.openModalBl = false;
  313. uni.makePhoneCall({
  314. phoneNumber: this.content //仅为示例
  315. });
  316. },
  317. lockStatus3(){
  318. uni.showToast({
  319. title: "下降中...",
  320. icon: "none"
  321. })
  322. },
  323. lockStatus0(){
  324. this.openModalBl=true;
  325. },
  326. loginconfirm(){
  327. this.$refs.refLogin.ashow()
  328. },
  329. gotoMain(){
  330. uni.reLaunch({
  331. url:"/pages/business/index"
  332. })
  333. },
  334. openLocation(){
  335. uni.openLocation({
  336. latitude:this.floorlockInfo.latitude,
  337. longitude: this.floorlockInfo.longitude,
  338. success: function () {
  339. console.log('success');
  340. }
  341. });
  342. },
  343. operateBtn() {
  344. if(!this.jphelp.getPersonInfo().id){
  345. this.loginBl=true;
  346. }else if(this.floorlockInfo.status==0){
  347. this.lockStatus0()
  348. }else{
  349. if(this.floorlockInfo.lockStatus==4){
  350. this.lockStatus0() //异常
  351. }else if(this.floorlockInfo.lockStatus==1){
  352. //this.lockStatus1() //未使用
  353. this.openLockBl=true;
  354. }else if(this.floorlockInfo.lockStatus==2){
  355. //this.lockStatus2()
  356. //this.closeLockBl=true;
  357. //使用
  358. }else if(this.floorlockInfo.lockStatus==3){
  359. this.lockStatus3() //过程
  360. }
  361. }
  362. },
  363. getFloorlockList() {
  364. uni.showLoading({
  365. title: "加载中",
  366. mask: true,
  367. })
  368. this.list = []
  369. API.myParkingSpot().then((res) => {
  370. this.mylist = res.data.floorList
  371. for(var i in this.mylist){
  372. var item=this.mylist[i]
  373. if(item.id==this.id){
  374. this.isMy=1
  375. }
  376. }
  377. uni.hideLoading();
  378. }).catch(error => {
  379. uni.hideLoading();
  380. uni.showToast({
  381. title: error,
  382. icon: "none"
  383. })
  384. })
  385. },
  386. getFloorlockDetails(bl) {
  387. if (!this.id) {
  388. return
  389. }
  390. if (!bl) {
  391. uni.showLoading({
  392. title: "加载中",
  393. mask: true,
  394. })
  395. }
  396. var obj = {
  397. id: this.id
  398. }
  399. this.isBack=false
  400. API.floorlockDetails(obj).then((res) => {
  401. this.floorlockInfo = res.data.floorlockInfo
  402. this.isReady=1;
  403. if(this.floorlockInfo.parkingPhone){
  404. this.content=this.floorlockInfo.parkingPhone
  405. }
  406. if (res.data.usable) {
  407. if(this.isOnLoad){
  408. uni.setNavigationBarTitle({
  409. title: this.floorlockInfo.parkingName
  410. })
  411. }
  412. this.loading = true
  413. } else {
  414. this.loading = false
  415. this.permission = true
  416. // #ifdef MP-WEIXIN
  417. uni.setBackgroundColor({
  418. backgroundColor: '#ffffff',
  419. })
  420. // #endif
  421. }
  422. if (!bl) {
  423. uni.hideLoading();
  424. }
  425. }).catch(error => {
  426. uni.hideLoading();
  427. uni.showToast({
  428. title: error,
  429. icon: "none"
  430. })
  431. })
  432. }
  433. }
  434. }
  435. </script>
  436. <style>
  437. page{
  438. background-color:#F2F4F6;
  439. }
  440. </style>
  441. <style scoped lang="scss">
  442. .body {
  443. padding: 32rpx;
  444. }
  445. .gradient-header {
  446. height: 0px;
  447. }
  448. .jpback {
  449. height: 760rpx;
  450. background: linear-gradient(180deg, rgba(203, 234, 255, 1) 0%, rgba(203, 234, 255, 0) 100%);
  451. }
  452. .isReady_2{
  453. margin-top: 80rpx;
  454. .r2text{
  455. text-align: center;
  456. .r2text1{
  457. color: rgba(51,51,51,1);
  458. font-size: 40rpx;
  459. font-weight: bold;
  460. }
  461. .r2text2{
  462. font-weight: 400;
  463. color: rgba(51,51,51,1);
  464. font-size: 32rpx;
  465. }
  466. }
  467. }
  468. .page-top {
  469. padding: 40rpx;
  470. padding-top: 0rpx;
  471. display: flex;
  472. flex-direction: column;
  473. align-items: center;
  474. .name {
  475. width: 320rpx;
  476. height: 320rpx;
  477. display: flex;
  478. align-items: flex-end;
  479. .img {
  480. width: 320rpx;
  481. height: 320rpx;
  482. }
  483. .img2 {
  484. width: 320rpx;
  485. height: 140rpx;
  486. }
  487. }
  488. .value {
  489. //margin-top: 24rpx;
  490. font-size: 40rpx;
  491. font-weight: bold;
  492. color: #333333;
  493. }
  494. }
  495. .pagemanage{
  496. margin-top: 80rpx;
  497. margin-bottom: 80rpx;
  498. .mitem{
  499. width: 33%;
  500. display: flex;
  501. flex-direction: column;
  502. align-items: center;
  503. img{
  504. width: 48rpx;
  505. height: 48rpx;
  506. margin-bottom: 8rpx;
  507. }
  508. border-right: 1px solid rgba(187,187,187,0.43);
  509. }
  510. .end{
  511. border-right:0
  512. }
  513. }
  514. .page {
  515. border-radius: 16rpx;
  516. background-color: rgba(255, 255, 255, 1);
  517. color: rgba(16, 16, 16, 1);
  518. box-shadow: 0px 4px 8px 0px rgba(22,119,255,0.2);
  519. padding: 32rpx;
  520. margin-bottom: 32rpx;
  521. font-size: 32rpx;
  522. color: rgb(16, 16, 16);
  523. width: 100%;
  524. .page-border{
  525. border-bottom: 1px solid rgba(232,232,232,1);
  526. padding-bottom: 16rpx;
  527. }
  528. .page-main {
  529. display: flex;
  530. justify-content: space-between;
  531. align-items: center;
  532. .name {
  533. color: rgba(51, 51, 51, 1);
  534. font-size: 36rpx;
  535. display: flex;
  536. flex-direction: column;
  537. display: flex;
  538. .name-info{
  539. display: flex;
  540. .name-text{
  541. font-size: 36rpx;
  542. font-weight: bold;
  543. }
  544. }
  545. .code-info{
  546. font-size: 24rpx;
  547. color: rgba(119,119,119,1);
  548. }
  549. }
  550. .tags{
  551. display: flex;
  552. align-items: center;
  553. margin-left: 8rpx;
  554. .tag {
  555. font-size: 24rpx;
  556. border: 1px solid rgba(187, 187, 187, 1);
  557. border-radius: 4px;
  558. color: rgba(22,119,255,1);
  559. padding: 1px 8rpx;
  560. margin-left: 8rpx;
  561. }
  562. .typeN1{
  563. color:#1677FF ;
  564. border: 1px solid #1677FF ;
  565. }
  566. .typeN2{
  567. color:#8161FF;
  568. border: 1px solid #8161FF;
  569. }
  570. .status1{
  571. color:#00B962;
  572. border: 1px solid #00B962;
  573. }
  574. .status0{
  575. color:#A7A2A2;
  576. border: 1px solid #A7A2A2;
  577. }
  578. }
  579. .value1{
  580. display: flex;
  581. flex-direction: column;
  582. align-items: center;
  583. justify-content: space-between;
  584. .item1{
  585. .img{
  586. width: 48rpx;
  587. height: 48rpx;
  588. }
  589. display: flex;
  590. }
  591. .item2 {
  592. font-size: 24rpx;
  593. color: rgba(119,119,119,1);
  594. }
  595. }
  596. }
  597. .page-info{
  598. padding-top: 16rpx;
  599. font-size: 24rpx;
  600. color: #777777;
  601. display: flex;
  602. justify-content: space-between;
  603. .address{
  604. .name{
  605. color: rgba(119,119,119,1);
  606. font-size: 28rpx;
  607. }
  608. .text{
  609. color: rgba(51,51,51,1);
  610. font-size: 24rpx;
  611. }
  612. }
  613. .value2{
  614. display: flex;
  615. flex-direction: column;
  616. align-items: center;
  617. justify-content: space-between;
  618. .item1{
  619. .img{
  620. width: 32rpx;
  621. height: 32rpx;
  622. }
  623. display: flex;
  624. }
  625. .item2 {
  626. font-size: 24rpx;
  627. color: rgba(119,119,119,1);
  628. }
  629. }
  630. }
  631. .page-content {
  632. .step {
  633. margin-bottom: 16rpx;
  634. }
  635. .tip-title {
  636. color: #101010;
  637. font-size: 36rpx;
  638. font-weight: bold;
  639. margin-bottom: 24rpx;
  640. }
  641. .tip1 {
  642. .step {
  643. color: #101010
  644. }
  645. border-bottom: 1px solid rgba(241, 241, 241, 1);
  646. margin-bottom: 24rpx;
  647. padding-bottom: 8rpx;
  648. }
  649. .tip2 {
  650. .step {
  651. color: #333333
  652. }
  653. }
  654. }
  655. }
  656. .valuebutton{
  657. margin-bottom: 30rpx;
  658. }
  659. .jpbutton {
  660. margin-top: 30rpx;
  661. border-radius: 100rpx;
  662. width: 400rpx;
  663. height: 84rpx;
  664. color: #fff;
  665. padding: 8rpx;
  666. display: flex;
  667. align-items: center;
  668. justify-content: center;
  669. font-size: 36rpx;
  670. .img {
  671. margin-right: 8rpx;
  672. width: 36rpx;
  673. height: 32rpx;
  674. }
  675. }
  676. .jpbutton1 {
  677. background-color: #2979FF;
  678. .img {
  679. width: 32rpx;
  680. height: 32rpx;
  681. }
  682. }
  683. .jpbutton2 {
  684. background-color: #2979FF;
  685. .img {
  686. width: 40rpx;
  687. height: 40rpx;
  688. animation: spin 2s linear infinite;
  689. /* 添加无限旋转动画 */
  690. }
  691. /* 定义旋转动画 */
  692. @keyframes spin {
  693. from {
  694. transform: rotate(0deg);
  695. /* 起始角度 */
  696. }
  697. to {
  698. transform: rotate(360deg);
  699. /* 结束角度 */
  700. }
  701. }
  702. }
  703. .jpbutton3 {
  704. background-color: #00B962;
  705. }
  706. .jpbutton4 {
  707. background-color: #A7A2A2;
  708. }
  709. .jpbutton6 {
  710. background-color: #FF7B00;
  711. }
  712. .jpbutton5 {
  713. background-color: #1677FF;
  714. }
  715. .page-role {
  716. padding-top: 120rpx;
  717. display: flex;
  718. flex-direction: column;
  719. align-items: center;
  720. .img {
  721. width: 500rpx;
  722. height: 500rpx;
  723. }
  724. .text1 {
  725. color: rgba(51, 51, 51, 1);
  726. font-weight: bold;
  727. font-size: 48rpx;
  728. margin-bottom: 16rpx;
  729. }
  730. .text2 {
  731. color: rgba(51, 51, 51, 1);
  732. font-size: 36rpx;
  733. margin-bottom: 200rpx;
  734. }
  735. .botton {
  736. border-radius: 100rpx;
  737. width: 360rpx;
  738. text-align: center;
  739. border: 1px solid rgba(187, 187, 187, 1);
  740. color: rgba(22, 119, 255, 1);
  741. padding: 16rpx;
  742. }
  743. }
  744. </style>