You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

280 lines
5.9 KiB

10 months ago
9 months ago
10 months ago
  1. <!-- 登录页面 -->
  2. <template>
  3. <view class="login bx">
  4. <!-- 背景图片 -->
  5. <view class="bg-box">
  6. <image @click="showSelectLanguageProp" class="language" src="@/static/login/language.png" mode="aspectFit"></image>
  7. <image src="@/static/logo.png" mode="aspectFit"></image>
  8. </view>
  9. <!-- 加载效果 -->
  10. <loading :loading="loading" @close="closeLoading"></loading>
  11. <view v-if="!loading" class="main">
  12. <!-- 登录标题 -->
  13. <view class="login-title">
  14. <view class="title">{{ $t('page.login.title') }}</view>
  15. <view class="login-descript">{{ $t('page.login.please-login') }}</view>
  16. </view>
  17. <!-- 输入框列表 -->
  18. <view class="input-list">
  19. <view class="input-item">
  20. <view class="input-descript">{{ $t('page.login.username') }}</view>
  21. <input v-model="form.account" type="text" :placeholder="$t('page.login.username-placeholder')" />
  22. </view>
  23. <view class="input-item">
  24. <view class="input-descript">{{ $t('page.login.password') }}</view>
  25. <input v-model="form.pass" type="password" :placeholder="$t('page.login.password-placeholder')" />
  26. </view>
  27. </view>
  28. <!-- 忘记密码 -->
  29. <view class="forgot-password">
  30. <text @click="forgetPass">{{ $t('page.login.forgot-password') }}</text>
  31. </view>
  32. <!-- 按钮组 -->
  33. <view class="btns">
  34. <view @click="Login" class="now-login-btn">{{ $t('page.login.login') }}</view>
  35. <view @click="toRegister" class="now-register-btn">{{ $t('page.login.register') }}</view>
  36. </view>
  37. </view>
  38. <!-- 切换语言 -->
  39. <changeLanguage :show.sync="showSelectLanguage" @close="closeSelectLanguageProp"></changeLanguage>
  40. <!-- 客服列表 -->
  41. <serviceList :show="showService" :serverList="serverList" @close="closeServiceList"></serviceList>
  42. <!-- 初始页面 -->
  43. <pageInit></pageInit>
  44. </view>
  45. </template>
  46. <script>
  47. import changeLanguage from '../../components/changeLanguage/changeLanguage.vue';
  48. import serviceList from '@/components/serviceList/serviceList.vue';
  49. import pageInit from '@/components/pageInit/pageInit.vue'
  50. import loading from '@/components/pageInit/loading.vue'
  51. export default {
  52. components : { changeLanguage , serviceList , pageInit , loading },
  53. data() {
  54. return {
  55. form: {
  56. account: '',
  57. pass: '',
  58. loginIp : ''
  59. },
  60. showSelectLanguage : false,
  61. showService : false,
  62. serverList : [],
  63. loading : true
  64. }
  65. },
  66. created() {
  67. },
  68. methods: {
  69. //登录
  70. Login() {
  71. this.$play()
  72. let _self = this;
  73. let { account , pass } = this.form
  74. if(account.trim() == ''){
  75. return uni.showToast({title: this.$t('page.login.accountEmpty'),icon : 'none'});
  76. }
  77. if(pass.trim() == ''){
  78. return uni.showToast({title: this.$t('page.login.passEmpty'),icon : 'none'});
  79. }
  80. return uni.request({
  81. url: 'https://api.ipify.org?format=json',
  82. success: function(res) {
  83. _self.form.loginIp = res.data.ip;
  84. _self.request('login', {}, _self.form).then(res => {
  85. if(res.code == 200){
  86. localStorage.setItem("userInfo",JSON.stringify(res.result.userInfo))
  87. localStorage.setItem("token", res.result.token)
  88. uni.navigateTo({
  89. url: '/pages/home/home'
  90. })
  91. }
  92. })
  93. }
  94. });
  95. },
  96. //跳转注册页面
  97. toRegister() {
  98. this.$play()
  99. uni.navigateTo({
  100. url: '/pages/register/register'
  101. })
  102. },
  103. //显示选择语言弹框
  104. showSelectLanguageProp(){
  105. this.$play()
  106. this.showSelectLanguage = true
  107. },
  108. //关闭语言选择弹框
  109. closeSelectLanguageProp(){
  110. this.showSelectLanguage = false
  111. },
  112. //显示客服列表
  113. revealServiceList(){
  114. this.$play()
  115. this.showService = true;
  116. },
  117. //关闭客服列表
  118. closeServiceList(){
  119. this.showService = false;
  120. },
  121. //关闭加载效果
  122. closeLoading(){
  123. this.loading = false;
  124. },
  125. //忘记密码
  126. forgetPass(){
  127. this.request('forgetPass').then(res => {
  128. if(res.code == 200){
  129. this.serverList = res.result
  130. this.revealServiceList()
  131. }
  132. })
  133. }
  134. }
  135. }
  136. </script>
  137. <style lang="scss" scoped>
  138. .login {
  139. width: 750rpx;
  140. height: 100vh;
  141. margin: 0px auto;
  142. background: black;
  143. background-image: url('@/static/login/bg.png');
  144. background-size: 100%;
  145. background-repeat: no-repeat;
  146. box-sizing: border-box;
  147. padding: 0rpx 20rpx;
  148. .bg-box {
  149. position: relative;
  150. display: flex;
  151. align-items: center;
  152. justify-content: center;
  153. height: 40%;
  154. .language {
  155. position: absolute;
  156. top: 30rpx;
  157. right: 30rpx;
  158. width: 60rpx;
  159. height: 60rpx;
  160. z-index: 999;
  161. }
  162. }
  163. .login-title {
  164. padding: 0rpx 10rpx;
  165. box-sizing: border-box;
  166. .title {
  167. font-size: 36rpx;
  168. font-weight: bold;
  169. color: #B0C73B;
  170. margin-bottom: 10rpx;
  171. }
  172. .login-descript {
  173. font-size: 32rpx;
  174. color: white;
  175. margin-bottom: 20rpx;
  176. }
  177. }
  178. .input-list {
  179. padding: 0rpx 10rpx;
  180. box-sizing: border-box;
  181. margin: 40rpx 0rpx;
  182. .input-item {
  183. display: flex;
  184. justify-content: space-between;
  185. align-items: center;
  186. border: 1px solid #B0C73B;
  187. padding: 20rpx;
  188. border-radius: 5rpx;
  189. margin-bottom: 25rpx;
  190. box-sizing: border-box;
  191. font-size: 28rpx;
  192. .input-descript {
  193. color: #B0C73B;
  194. }
  195. input {
  196. color: #B0C73B;
  197. }
  198. }
  199. }
  200. .forgot-password {
  201. color: #B0C73B;
  202. text-align: center;
  203. text {
  204. border-bottom: 1rpx solid #ccc;
  205. }
  206. }
  207. .btns {
  208. padding: 0rpx 10rpx;
  209. margin-top: 40rpx;
  210. .now-login-btn,
  211. .now-register-btn {
  212. background: #B0C73B;
  213. border-radius: 10rpx;
  214. display: flex;
  215. align-items: center;
  216. justify-content: center;
  217. margin-bottom: 20rpx;
  218. font-weight: bold;
  219. }
  220. .now-login-btn {
  221. height: 90rpx;
  222. font-size: 40rpx;
  223. }
  224. .now-register-btn {
  225. height: 60rpx;
  226. width: 90%;
  227. font-size: 28rpx;
  228. margin: 0 auto;
  229. }
  230. }
  231. }
  232. </style>