login.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683
  1. <template>
  2. <view class="normal-login-container">
  3. <view style="color: aliceblue;position: fixed;left: 10px;z-index: 999999;top:50px;font-size: 10px;">{{i18('版本')}}:{{version}}</view>
  4. <view style="color: aliceblue;position: fixed;right: 10px;z-index: 999999;top:50px" @click="changeLocale">
  5. {{ $t('login.language') }}:{{localeConfig[locale]}}<uni-icons type="gear" size="15"></uni-icons>
  6. </view>
  7. <view style="height: 80vh;;">
  8. <!-- <image style="width: 750px;height: 807px;" :src="imgUrl+'/login/backImg2.png'" mode="widthFix"/> -->
  9. <!-- <view class="logo-content align-center justify-center flex">
  10. <text class="title" style="font-size: 25px;margin-left:-71px">{{$t('login.title') }}</text>
  11. </view> -->
  12. <view class="" style=" padding-top: 23vh;display: flex;flex-direction: column;flex-wrap: nowrap;align-items: center;">
  13. <image style="height: 3vh;width: 15vh;"
  14. src="../static/images/new/starts/login/backImg2.png"></image>
  15. <text class="welcome" style="margin-top: 20px; height: 20vh;font-size: 16px; color: #a3a3a3;">Welcome</text>
  16. </view>
  17. </view>
  18. <!-- 登录表单 -->
  19. <view class="login-form-content" style="z-index: 99;position: relative;" v-show="isLogin">
  20. <view class="input-item flex align-center" v-if="locale == 'en'">
  21. <!-- <view class="iconfont icon-user icon"></view> -->
  22. <uni-row>
  23. <uni-col :span="2">
  24. <uni-icons class="icon" type="email" size="20" color="#e3e3e3"></uni-icons>
  25. </uni-col>
  26. <uni-col :span="22">
  27. <input style="color: #000000;" v-model="loginForm.username" class="input" type="text" :placeholder="$t('login.mailInput')" maxlength="30" />
  28. </uni-col>
  29. </uni-row>
  30. </view>
  31. <view class="input-item flex align-center" v-if="locale == 'en'">
  32. <!-- <view class="iconfont icon-password icon"></view> -->
  33. <uni-row
  34. <uni-col :span="2">
  35. <uni-icons class="icon" type="locked-filled" size="20" color="#e3e3e3"></uni-icons>
  36. </uni-col>
  37. <uni-col :span="18">
  38. <uni-easyinput style="margin-left:-10px ;color: #000000;" :inputBorder="false" v-model="loginForm.password" type="password" class="input" :placeholder="$t('login.pwdInput')" maxlength="30" />
  39. </uni-col>
  40. </uni-row>
  41. </view>
  42. <view class="xieyi text-center" style="margin-top: -10px;" v-if="locale == 'en'">
  43. <text class="text-grey">{{ $t('login.noAccount') }},</text>
  44. <text @click="toggleLoginMode" class="text-green">{{ $t('login.resiger') }}</text>
  45. <!-- <text @click="handleUserAgrement" class="text-green">立即注册</text> -->
  46. <!-- <text @click="handlePrivacy" class="text-blue">《隐私协议》</text> -->
  47. </view>
  48. <!-- <view class="input-item flex align-center" style="width: 60%;margin: 0px;" v-if="captchaEnabled">
  49. <view class="iconfont icon-code icon"></view>
  50. <input v-model="loginForm.code" type="number" class="input" placeholder="请输入验证码" maxlength="4" />
  51. <view class="login-code"> <image :src="codeUrl" @click="getCode" class="login-code-img"></image></view >
  52. </view> -->
  53. <view class="text-green" style="margin: 5px 0;margin-top:15px;font-size: 12px;;" @click="forgetPwd">{{i18('忘记密码?')}}</view>
  54. <view class="action-btn" style="z-index: 99;position: relative;">
  55. <button @click="handleLogin" class="login-btn cu-btn block bg-blue lg round">{{ $t('login.tologin') }}</button>
  56. </view>
  57. </view>
  58. <view class="login-form-content" style="z-index: 9999;position: relative;" v-show="!isLogin" @submit.prevent="handleRegister">
  59. <!-- 注册表单 -->
  60. <view>
  61. <view class="input-item flex align-center">
  62. <uni-row>
  63. <uni-col :span="2">
  64. <uni-icons class="icon" type="email" size="20" color="#e3e3e3"></uni-icons>
  65. </uni-col>
  66. <uni-col :span="22">
  67. <input style="color: #000000;" v-model="register.username" class="input" type="text" :placeholder="$t('login.mailInput')" maxlength="30" />
  68. </uni-col>
  69. </uni-row>
  70. </view>
  71. <view>
  72. <view class="input-item flex align-center">
  73. <uni-row>
  74. <uni-col :span="2">
  75. <uni-icons class="icon" type="locked" size="20" color="#e3e3e3"></uni-icons>
  76. </uni-col>
  77. <uni-col :span="22">
  78. <input v-model="register.password" style="color: #000000;" class="input" type="text" :placeholder="$t('login.pwdInput')" maxlength="30" />
  79. </uni-col>
  80. </uni-row>
  81. </view>
  82. </view>
  83. <view class="xieyi text-center" style="margin-top: -10px;">
  84. <p class="text-grey">{{ $t('register.hasAccount') }}<a href="#" @click="toggleLoginMode" class="text-green">{{ $t('register.backLogin') }}</a></p>
  85. </view>
  86. <view class="action-btn" style="z-index: 9999;position: relative;">
  87. <button @click="handleRegister" type="submit" class="login-btn cu-btn block bg-blue lg round">{{ $t('register.register') }}</button>
  88. </view>
  89. </view>
  90. </view>
  91. <!-- <view v-show="isLogin">
  92. <view class="img">
  93. <image @click="buleTeeth" style="width: 31px;" :src="imgUrl+'/login/blueTeeth.png'" mode="widthFix"/>
  94. </view>
  95. <view class="blue-text">
  96. <text @click="buleTeeth">{{ $t('login.buletooth') }}</text>
  97. </view>
  98. </view> -->
  99. <u-picker @cancel="cancelLocale" :confirmText="i18('确认')" :cancelText="i18('取消')" :show="showLocale" keyName="label" :columns="localeList" @confirm="changeLanguage"></u-picker>
  100. <u-popup :zoom="false" :show="showStatus" :mask-close-able="false" mode="center" :closeable="false" border-radius="14" height="150rpx">
  101. <view style="margin:20rpx">
  102. {{i18('检测到有新版本,请点击下载')}} {{newVerson}}
  103. </view>
  104. <view v-if="!isShowProgress" style="text-align: center;text-decoration: underline;margin:10px" @click="downloadFile">
  105. {{i18('立即下载')}}
  106. </view>
  107. <view class="progress-container" v-if="isShowProgress">
  108. <view class="progress-box">
  109. <view class="text"> {{i18('文件下载中,请稍后......')}}</view>
  110. <progress :percent="progress" show-info stroke-width="3" />
  111. </view>
  112. </view>
  113. </u-popup>
  114. <u-popup :show="showCode" :round="10" mode="center" @close="closeCode">
  115. <view style="border-radius: 10px;
  116. width: 250px;">
  117. <image style="border-radius: 10px" src="/static/images/new/code.jpg" mode="widthFix"/>
  118. </view>
  119. </u-popup>
  120. </view>
  121. </template>
  122. <script>
  123. import {checkVersion,forgetPwd} from '@/api/login'
  124. import {getToken} from "@/utils/auth";
  125. import i18 from '@/utils/i18.js'
  126. export default {
  127. data() {
  128. return {
  129. version:"",
  130. newVerson:"",
  131. showLocale:false,
  132. localeList:[[{"label":"简体中文","id":"zh-Hans"},{"label":"英文","id":"en"}]],
  133. localeConfig:{"zh-Hans":"简体中文","en":"英文"},
  134. // currentImg: "",
  135. codeUrl: "",
  136. captchaEnabled: true,
  137. globalConfig: getApp().globalData.config,
  138. loginForm: {
  139. username: "",
  140. password: "",
  141. code: "",
  142. uuid: ''
  143. },
  144. register: {
  145. username: "",
  146. password: "",
  147. locale: "",
  148. },
  149. appVersionCode: "",
  150. showStatus: false,
  151. downloadUrl: "",
  152. iosUrl: "",
  153. isShowProgress: false,
  154. progress: 0,
  155. isLogin: true, // 是否为登录模式
  156. showCode: false,
  157. platom:"",
  158. onlineVersionData:null,
  159. }
  160. },
  161. // mounted() {
  162. // this.addTextEvent()
  163. // },
  164. computed: {
  165. imgUrl: function () {
  166. return getApp().globalData.config.imgUrl;
  167. }
  168. },
  169. created() {
  170. let self = this;
  171. uni.getSystemInfo({
  172. success:function(res){
  173. self.platom = res.platform;
  174. // self.checkVersion();
  175. self.getAppInfo();
  176. }
  177. });
  178. this.setLocale()
  179. uni.getLocation({
  180. type: 'wgs84',
  181. success: function (res) {
  182. console.log('当前位置的经度:' + res.longitude);
  183. console.log('当前位置的纬度:' + res.latitude);
  184. }
  185. });
  186. this.checkLogin();
  187. this.readLoginInfo()
  188. },
  189. methods: {
  190. readLoginInfo(){
  191. let loginForm = uni.getStorageSync("loginInfo");
  192. if(loginForm){
  193. this.loginForm = loginForm;
  194. this.pwdLogin()
  195. }
  196. },
  197. saveLoginInfo(){
  198. if(this.loginForm.username.length>0){
  199. uni.setStorageSync("loginInfo",this.loginForm);
  200. }
  201. },
  202. forgetPwd(){
  203. let self = this;
  204. uni.showModal({
  205. editable:true,
  206. title: i18('请输入邮箱'),
  207. success: function (res) {
  208. if (res.confirm) {
  209. let mail = res.content;
  210. if(!mail){
  211. uni.showToast({
  212. title: i18('邮箱不能为空'),
  213. icon: 'none'
  214. })
  215. return;
  216. }
  217. forgetPwd(mail,self.locale).then(res=>{
  218. if(res.data){
  219. uni.showToast({
  220. title: i18('请查看邮箱进行操作'),
  221. icon: 'none'
  222. })
  223. }else{
  224. uni.showToast({
  225. title: msg,
  226. icon: 'none'
  227. })
  228. }
  229. });
  230. } else if (res.cancel) {
  231. console.log('用户点击取消');
  232. }
  233. }
  234. });
  235. },
  236. closeCode(){
  237. this.showCode = false
  238. },
  239. i18(text){
  240. return i18(text)
  241. },
  242. downloadFile(){
  243. let self = this;
  244. let versionData = this.onlineVersionData;
  245. if(versionData == null){
  246. return;
  247. }
  248. let is_wgt = versionData.is_wgt;
  249. const platform = this.platom.toLowerCase();
  250. if(is_wgt == 0){
  251. if (platform == 'android') {
  252. let downUrl = versionData.app_url;
  253. plus.runtime.openURL(downUrl);
  254. }else{
  255. const appleId = '86726R3L5K'; // 这里替换成你的 apple id
  256. plus.runtime.launchApplication({
  257. action: self.iosUrl
  258. },
  259. function(e) {
  260. }
  261. );
  262. }
  263. }else{
  264. self.isShowProgress = true;
  265. const downloadTask = uni.downloadFile({
  266. url: self.downloadUrl,
  267. success: res => {
  268. if (res.statusCode === 200) {
  269. this.isShowProgress = false;
  270. console.log('下载成功');
  271. }
  272. let that = this;
  273. plus.runtime.install(res
  274. .tempFilePath, {
  275. force: false
  276. },
  277. function() {
  278. plus.runtime
  279. .restart();
  280. });
  281. }
  282. })
  283. console.log(downloadTask)
  284. downloadTask.onProgressUpdate((res) => {
  285. if(res.progress > 0) {
  286. this.isShowProgress = true;
  287. }
  288. this.progress = res.progress;
  289. console.log('下载进度:' + res.progress);
  290. console.log('已下载长度:' + res.totalBytesWritten);
  291. console.log('文件总长度:' + res.totalBytesExpectedToWrite);
  292. })
  293. }
  294. },
  295. getAppInfo() {
  296. let self = this;
  297. plus.runtime.getProperty( plus.runtime.appid, function ( wgtinfo ) {
  298. self.version = wgtinfo.version;
  299. let appVersion = self.version.split(".").join("");
  300. let appVersionCode = parseInt(appVersion);
  301. checkVersion({"versionCode": appVersion,"platom":self.platom}).then(res=>{
  302. let cz_app_version =res.data;
  303. if(cz_app_version != null){
  304. let onlineVersion = cz_app_version.version;
  305. console.log(onlineVersion)
  306. let isForce = cz_app_version.isForce;
  307. let url = cz_app_version.down_url;
  308. self.downloadUrl = url;
  309. self.onlineVersionData = cz_app_version;
  310. self.iosUrl = cz_app_version.ios_url;
  311. if(onlineVersion>appVersionCode){
  312. let versionType = cz_app_version.type_;
  313. if(versionType.toLowerCase() === self.platom.toLowerCase()){
  314. self.newVerson = onlineVersion;
  315. self.showStatus = true;
  316. }else if(versionType.toLowerCase() === 'all'){
  317. self.newVerson = onlineVersion;
  318. self.showStatus = true;
  319. }
  320. }
  321. }
  322. });
  323. } );
  324. },
  325. checkVersion(){
  326. let appBaseInfo = uni.getAppBaseInfo();
  327. let appVersionCode = appBaseInfo.appVersionCode;
  328. this.appVersionCode = appVersionCode;
  329. this.version = appVersionCode;
  330. let self = this;
  331. checkVersion({"versionCode":appVersionCode,"platom":this.platom}).then(res=>{
  332. let cz_app_version =res.data;
  333. console.log(cz_app_version)
  334. if(cz_app_version != null){
  335. let onlineVersion = cz_app_version.version;
  336. console.log(onlineVersion)
  337. let isForce = cz_app_version.isForce;
  338. let url = cz_app_version.down_url;
  339. self.downloadUrl = url;
  340. self.iosUrl = cz_app_version.ios_url;
  341. if(onlineVersion>appVersionCode){
  342. self.newVerson = onlineVersion;
  343. self.showStatus = true;
  344. }
  345. }
  346. });
  347. },
  348. cancelLocale(){
  349. this.showLocale = false;
  350. },
  351. setLocale(){
  352. this.locale = uni.getLocale()
  353. if(this.locale == "en"){
  354. this.localeList = [[{"label":"Chinese","id":"zh-Hans"},{"label":"English","id":"en"}]];
  355. this.localeConfig={"zh-Hans":"Chinese","en":"English"};
  356. }else if(this.locale == "zh-Hans"){
  357. this.localeList = [[{"label":"简体中文","id":"zh-Hans"},{"label":"英文","id":"en"}]];
  358. this.localeConfig={"zh-Hans":"简体中文","en":"英文"};
  359. }
  360. },
  361. changeLanguage(e){
  362. this.showLocale =false;
  363. console.log(e.value[0].id)
  364. uni.setLocale(e.value[0].id);
  365. },
  366. changeLocale(){
  367. this.showLocale = true;
  368. },
  369. buleTeeth(){
  370. this.$tab.navigateTo('/pages/bluetooth/index/index')
  371. },
  372. checkLogin(){
  373. let token = getToken()
  374. if(token){
  375. this.loginSuccess()
  376. }else{
  377. }
  378. },
  379. // // 隐私协议
  380. // handlePrivacy() {
  381. // let site = this.globalConfig.appInfo.agreements[0]
  382. // this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
  383. // },
  384. // 用户协议
  385. handleUserAgrement() {
  386. let site = this.globalConfig.appInfo.agreements[1]
  387. this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
  388. },
  389. // // 获取图形验证码
  390. // getCode() {
  391. // getCodeImg().then(res => {
  392. // this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled
  393. // if (this.captchaEnabled) {
  394. // this.codeUrl = 'data:image/gif;base64,' + res.img
  395. // this.loginForm.uuid = res.uuid
  396. // }
  397. // })
  398. // },
  399. // 登录方法
  400. async handleLogin() {
  401. if(this.locale == "zh-Hans"){
  402. this.showCode = true;
  403. return;
  404. }
  405. if (this.loginForm.username === "") {
  406. this.$modal.msgError(this.$t('login.logintip'))
  407. } else if (this.loginForm.password === "") {
  408. this.$modal.msgError(this.$t('login.pwdtip'))
  409. }
  410. // else if (this.loginForm.code === "" && this.captchaEnabled) {
  411. // this.$modal.msgError("请输入验证码")}
  412. else {
  413. this.$modal.loading(this.$t('login.logining'))
  414. this.pwdLogin()
  415. }
  416. },
  417. // 密码登录
  418. async pwdLogin() {
  419. this.$store.dispatch('Login', this.loginForm).then(() => {
  420. this.$modal.closeLoading()
  421. this.loginSuccess()
  422. }).catch(() => {
  423. // if (this.captchaEnabled) {
  424. // this.getCode()
  425. // }
  426. })
  427. },
  428. // 登录成功后,处理函数
  429. loginSuccess(result) {
  430. //保存用户信息
  431. this.saveLoginInfo()
  432. // 设置用户信息
  433. this.$store.dispatch('GetInfo').then(res => {
  434. this.$tab.reLaunch('/pages/index')
  435. })
  436. },
  437. // async handleRegister() {
  438. // if (this.register.newUsername === '' || this.register.newPassword === '') {
  439. // // 如果用户名或密码为空,则弹出提示框
  440. // uni.showToast({
  441. // title: '请输入用户名和密码',
  442. // icon: 'none'
  443. // })
  444. // return
  445. // }
  446. // // 发送注册请求
  447. // uni.showLoading({
  448. // title: '注册中...'
  449. // })
  450. // uni.request({
  451. // url: 'http://localhost:8080/login/mailRegister',
  452. // method: 'POST',
  453. // data: {
  454. // username: this.register.newUsername,
  455. // password: this.register.newPassword
  456. // },
  457. // success: res => {
  458. // // uni.hideLoading()
  459. // if (res.data.success) {
  460. // // 注册成功,弹出提示框并回到登录模式
  461. // uni.showToast({
  462. // title: '注册成功',
  463. // success: () => {
  464. // this.isLogin = true
  465. // this.register.newUsername = ''
  466. // this.register.newPassword = ''
  467. // }
  468. // })
  469. // } else {
  470. // // 注册失败,弹出提示框显示错误信息
  471. // uni.showToast({
  472. // title: res.data.message || '注册成功',
  473. // icon: 'none'
  474. // })
  475. // }
  476. // },
  477. // fail: err => {
  478. // uni.hideLoading()
  479. // uni.showToast({
  480. // title: err.errMsg || '注册失败',
  481. // icon: 'none'
  482. // })
  483. // }
  484. // })
  485. // },
  486. // 注册方法
  487. async handleRegister() {
  488. // debugger
  489. if (this.register.username === "") {
  490. this.$modal.msgError(this.$t('register.logintip'))
  491. } else if (this.register.password === "") {
  492. this.$modal.msgError(this.$t('register.pwdtip'))
  493. }
  494. // else if (this.loginForm.code === "" && this.captchaEnabled) {
  495. // this.$modal.msgError("请输入验证码")}
  496. else {
  497. // debugger
  498. this.$modal.loading(this.$t('register.logining'))
  499. this.pwdRegister()
  500. }
  501. },
  502. // 用户注册
  503. async pwdRegister() {
  504. this.$store.dispatch("Register",this.register).then(res => {
  505. if (res.msg) {
  506. this.$modal.showToast(res.msg)
  507. return;
  508. }
  509. this.loginForm.username = this.register.username;
  510. this.loginForm.password = this.register.password;
  511. this.$modal.closeLoading()
  512. this.registerSuccess()
  513. });
  514. },
  515. // 注册成功后,处理函数
  516. registerSuccess(result){
  517. // 设置用户信息
  518. this.toggleLoginMode();
  519. },
  520. toggleLoginMode() {
  521. // 切换登录/注册模式
  522. this.isLogin = !this.isLogin
  523. if(this.isLogin){
  524. this.register.username = "";
  525. this.register.password = "";
  526. }
  527. }
  528. }
  529. }
  530. </script>
  531. <style lang="scss">
  532. page {
  533. background-color: #ffffff;
  534. }
  535. .normal-login-container {
  536. background-image: url('../static/images/new/starts/bg1.jpg');
  537. background-size: cover;
  538. background-repeat: no-repeat;
  539. width: 100%;
  540. height: 102.5vh;
  541. font-family: 思源黑体;
  542. margin-top: -20px;
  543. .logo-content {
  544. width: 100%;
  545. font-size: 21px;
  546. text-align: center;
  547. padding-top: 15%;
  548. .image {
  549. border-radius: 4px;
  550. }
  551. .title {
  552. width: 244px;
  553. font-weight: bold;
  554. margin-left: -56px;
  555. text-align: left;
  556. margin-top: -425px;
  557. z-index: 1;
  558. white-space: nowrap;
  559. // line-height: 51px;
  560. text-stroke: 2px #FFFFFF;
  561. font-size: 34px;
  562. // letter-spacing: 2px;
  563. color: #57B03D;
  564. text-shadow: 0 2px white, 2px 0 white, -2px 0 white, 0 -2px white;
  565. }
  566. .welcome {
  567. z-index: 2;
  568. font-size: 15px;
  569. font-family: Source Han Sans CN;
  570. font-weight: 400;
  571. color: aliceblue;
  572. }
  573. .welcome1 {
  574. margin-top: -278px;
  575. margin-left: 8px;
  576. font-family: Alibaba PuHuiTi;
  577. z-index: 2;
  578. font-size: 12px;
  579. }
  580. }
  581. .login-form-content {
  582. text-align: center;
  583. margin: -260px 20px 20px 40px;
  584. // margin-top: 15%;
  585. width: 80%;
  586. // margin-top: -200px;
  587. z-index: 1;
  588. .input-item {
  589. margin: 20px 0 20px 0;
  590. height: 45px;
  591. border-radius: 8px;
  592. background-color: #f0fdfc;
  593. border: 1px solid #e3e3e3;
  594. opacity: 0.5;
  595. color: #e3e3e3;
  596. text-indent:1em;
  597. .icon {
  598. // margin-left: 10px;
  599. font-size: 38rpx;
  600. margin-left: 0px;
  601. }
  602. .input {
  603. width: 122%;
  604. font-size: 14px;
  605. line-height: 27px;
  606. text-align: left;
  607. padding-left: 15px;
  608. color: #d8d8d8;
  609. margin-left: 10;
  610. }
  611. }
  612. .login-btn {
  613. margin-top: 30px;
  614. height: 40px;
  615. border-radius: 8px;
  616. background-color: #57B03D;
  617. }
  618. .xieyi {
  619. color: #333;
  620. margin-top: 100px;
  621. }
  622. .login-code {
  623. height: 38px;
  624. float: right;
  625. .login-code-img {
  626. height: 38px;
  627. position: absolute;
  628. margin-left: 10px;
  629. width: 200rpx;
  630. }
  631. }
  632. }
  633. .text-green {
  634. color: #57B03D;
  635. }
  636. .img {
  637. margin-top: 25px;
  638. text-align:center
  639. }
  640. .blue-text {
  641. color: #666;
  642. text-align:center
  643. }
  644. }
  645. </style>