Blame view

pages/login/index.vue 15.9 KB
c293da23   刘淇   新园林init
1
  <template>
24c0bbe7   刘淇   登录账号密码 加密存储
2
    <view class="page-container">
cf70629b   刘淇   养护计划 照片 自己写样式
3
      <!-- 顶部标题区 -->
8ddc6f6e   刘淇   登录 修改样式
4
      <view class="top-title">
e2e5221c   刘淇   验证码登录
5
6
        <text class="welcome-text">你好,欢迎登录</text>
        <text class="platform-name">蓟城山水全域智能运营管理平台</text>
8ddc6f6e   刘淇   登录 修改样式
7
      </view>
37c26bd3   刘淇   巡查计划
8
  
cf70629b   刘淇   养护计划 照片 自己写样式
9
      <!-- 登录表单区域 -->
c293da23   刘淇   新园林init
10
      <view class="login-form">
e2e5221c   刘淇   验证码登录
11
        <!-- 登录方式切换 -->
cf70629b   刘淇   养护计划 照片 自己写样式
12
13
        <up-tabs
            :list="tabList"
578c1373   刘淇   样式优化
14
15
            line-width="55"
            line-height="2"
cf70629b   刘淇   养护计划 照片 自己写样式
16
            @change="handleTabChange"
e2e5221c   刘淇   验证码登录
17
18
            :activeStyle="{ color: '#3c9cff', fontWeight:'500', fontSize: '14px' }"
            :inactiveStyle="{ color: '#606060', fontSize: '14px' }"
cf70629b   刘淇   养护计划 照片 自己写样式
19
        ></up-tabs>
37c26bd3   刘淇   巡查计划
20
  
cf70629b   刘淇   养护计划 照片 自己写样式
21
        <!-- 表单校验容器 -->
8ddc6f6e   刘淇   登录 修改样式
22
23
24
25
26
27
        <up-form
            label-position="left"
            :model="form"
            ref="loginFormRef"
            labelWidth="0"
        >
e2e5221c   刘淇   验证码登录
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
          <!-- ========== 手机号登录区域 ========== -->
          <view v-if="loginType === '手机号登录'">
            <!-- 手机号输入框 -->
            <up-form-item prop="mobile">
              <up-input
                  v-model="form.mobile"
                  border="surround"
                  maxlength="11"
                  input-align="left"
                  fontSize="14px"
                  :disabled="isLoading"
                  shape="circle"
                  placeholder="请输入手机号"
                  @blur="() => loginFormRef.validateField('mobile')"
              />
            </up-form-item>
  
            <!-- 验证码输入框 + 自定义倒计时按钮 -->
            <up-form-item prop="code">
              <up-input
                  v-model="form.code"
                  border="surround"
                  maxlength="4"
                  type="number"
                  input-align="left"
                  fontSize="14px"
                  :disabled="isLoading"
                  shape="circle"
                  placeholder="请输入验证码"
                  @blur="() => loginFormRef.validateField('code')"
              >
                <template #suffix>
                  <up-button
                      size="mini"
                      type="primary"
                      :disabled="isCodeBtnDisabled"
                      :loading="isCodeLoading"
                      @tap="getVerificationCode"
                      shape="circle"
                  >
                    {{ countdown > 0 ? `${countdown}秒后重新获取` : '获取验证码' }}
                  </up-button>
                </template>
              </up-input>
            </up-form-item>
          </view>
  
          <!-- ========== 账号登录区域 ========== -->
          <view v-else>
            <!-- 账号输入框 -->
            <up-form-item prop="account">
              <up-input
                  v-model="form.account"
                  border="surround"
                  maxlength="30"
                  input-align="left"
                  fontSize="14px"
                  :disabled="isLoading"
                  shape="circle"
                  placeholder="请输入账户"
                  @blur="() => loginFormRef.validateField('account')"
              />
            </up-form-item>
  
            <!-- 密码输入框 -->
            <up-form-item prop="password" class="password-item">
              <up-input
                  v-model="form.password"
                  placeholder="请输入密码"
                  maxlength="20"
                  border="surround"
                  input-align="left"
                  type="password"
                  :disabled="isLoading"
                  shape="circle"
                  @blur="() => loginFormRef.validateField('password')"
              />
            </up-form-item>
  
            <!-- 记住密码 -->
            <view class="remember-wrap">
              <up-checkbox
                  :customStyle="{marginBottom: '8px'}"
                  label="记住密码"
                  name="agree"
                  size="14"
                  iconSize="14"
                  labelSize="14"
                  labelColor="#3F3F3F"
                  usedAlone
                  v-model:checked="rememberPwd"
              >
              </up-checkbox>
            </view>
cf70629b   刘淇   养护计划 照片 自己写样式
122
          </view>
8ddc6f6e   刘淇   登录 修改样式
123
        </up-form>
c293da23   刘淇   新园林init
124
125
126
127
128
129
130
131
  
        <!-- 登录按钮 -->
        <up-button
            class="login-btn"
            type="primary"
            size="large"
            :loading="isLoading"
            @click="handleLogin"
8ddc6f6e   刘淇   登录 修改样式
132
            shape="circle"
c293da23   刘淇   新园林init
133
134
135
136
        >
          登录
        </up-button>
      </view>
8ddc6f6e   刘淇   登录 修改样式
137
138
139
  
      <!-- 版权信息 -->
      <view class="copyright">蓟城山水集团版权所有</view>
c293da23   刘淇   新园林init
140
141
142
143
    </view>
  </template>
  
  <script setup>
e2e5221c   刘淇   验证码登录
144
145
  import { ref, reactive, onMounted, nextTick, computed, onUnmounted} from 'vue';
  import {onShow} from '@dcloudio/uni-app'
c293da23   刘淇   新园林init
146
147
  import { useUserStore } from '@/pinia/user';
  import globalConfig from '@/common/config/global';
24c0bbe7   刘淇   登录账号密码 加密存储
148
  import CryptoJS from 'crypto-js';
e2e5221c   刘淇   验证码登录
149
  import { getSmsCode } from "@/api/user";
24c0bbe7   刘淇   登录账号密码 加密存储
150
  
5b5a4862   刘淇   按钮放大
151
  // ========== 加密工具函数 ==========
24c0bbe7   刘淇   登录账号密码 加密存储
152
  const CRYPTO_CONFIG = {
5b5a4862   刘淇   按钮放大
153
    key: CryptoJS.enc.Utf8.parse('jcsscrypto123abc'), // 16位key
24c0bbe7   刘淇   登录账号密码 加密存储
154
155
156
157
    iv: CryptoJS.enc.Utf8.parse('abc123jcsscrypto'),  // 16位iv
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  };
c293da23   刘淇   新园林init
158
  
24c0bbe7   刘淇   登录账号密码 加密存储
159
160
161
162
163
164
165
166
167
168
169
170
171
172
  const aesEncrypt = (text) => {
    if (!text) return '';
    try {
      return CryptoJS.AES.encrypt(text, CRYPTO_CONFIG.key, {
        iv: CRYPTO_CONFIG.iv,
        mode: CRYPTO_CONFIG.mode,
        padding: CRYPTO_CONFIG.padding
      }).toString();
    } catch (err) {
      console.error('AES加密失败:', err);
      return '';
    }
  };
  
24c0bbe7   刘淇   登录账号密码 加密存储
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
  const aesDecrypt = (encryptedText) => {
    if (!encryptedText) return '';
    try {
      const decryptObj = CryptoJS.AES.decrypt(encryptedText, CRYPTO_CONFIG.key, {
        iv: CRYPTO_CONFIG.iv,
        mode: CRYPTO_CONFIG.mode,
        padding: CRYPTO_CONFIG.padding
      });
      return decryptObj.toString(CryptoJS.enc.Utf8);
    } catch (err) {
      console.error('AES解密失败:', err);
      return '';
    }
  };
  
e2e5221c   刘淇   验证码登录
188
  // ========== 核心业务逻辑 ==========
8ddc6f6e   刘淇   登录 修改样式
189
  const userStore = useUserStore();
cf70629b   刘淇   养护计划 照片 自己写样式
190
191
  const loginFormRef = ref(null);
  const isLoading = ref(false);
e2e5221c   刘淇   验证码登录
192
  const isCodeLoading = ref(false); // 验证码按钮独立loading状态
cf70629b   刘淇   养护计划 照片 自己写样式
193
  
e2e5221c   刘淇   验证码登录
194
195
  // 登录方式切换
  const tabList = ref([{ name: '手机号登录' }, { name: '账号登录' }]);
24c0bbe7   刘淇   登录账号密码 加密存储
196
  const loginType = ref('手机号登录');
cf70629b   刘淇   养护计划 照片 自己写样式
197
  
e2e5221c   刘淇   验证码登录
198
  // 记住密码(仅账号登录生效)
cf70629b   刘淇   养护计划 照片 自己写样式
199
  const rememberPwd = ref(true);
8ddc6f6e   刘淇   登录 修改样式
200
  
cf70629b   刘淇   养护计划 照片 自己写样式
201
  // 表单数据
c293da23   刘淇   新园林init
202
  const form = reactive({
5b5a4862   刘淇   按钮放大
203
204
    account: '',  // 账号
    mobile: '',   // 手机号
e2e5221c   刘淇   验证码登录
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
    password: '', // 密码
    code: ''      // 验证码
  });
  
  // 验证码倒计时相关
  const countdown = ref(0);
  let countdownTimer = null; // 倒计时定时器
  
  // 临时缓存KEY
  const TEMP_FORM_KEY = 'login_temp_form_data';
  
  // ========== 方案二核心:保存/恢复表单数据 ==========
  // 保存表单数据到本地缓存
  const saveFormData = () => {
    try {
      const tempData = {
        form: { ...form },
        loginType: loginType.value,
        countdown: countdown.value,
        rememberPwd: rememberPwd.value
      };
      // 加密存储,提升安全性
      const encryptData = aesEncrypt(JSON.stringify(tempData));
      uni.setStorageSync(TEMP_FORM_KEY, encryptData);
    } catch (err) {
      console.warn('保存表单数据失败:', err);
    }
  };
  
  // 从本地缓存恢复表单数据
  const restoreFormData = () => {
    try {
      const encryptData = uni.getStorageSync(TEMP_FORM_KEY);
      if (!encryptData) return;
  
      const tempData = JSON.parse(aesDecrypt(encryptData));
      // 恢复表单数据
      if (tempData.form) {
        Object.assign(form, tempData.form);
      }
      // 恢复登录类型
      // if (tempData.loginType) {
      //   loginType.value = tempData.loginType;
      // }
      // 恢复记住密码状态
      if (tempData.rememberPwd !== undefined) {
        rememberPwd.value = tempData.rememberPwd;
      }
      // 恢复倒计时
      if (tempData.countdown && tempData.countdown > 0) {
        countdown.value = tempData.countdown;
        // 重启倒计时定时器
        startCountdown(countdown.value);
      }
  
      // 恢复记住密码的缓存数据(原有逻辑)
      if (rememberPwd.value && loginType.value === '账号登录') {
        const savedAccount = aesDecrypt(uni.getStorageSync('login_account') || '');
        const savedPwd = aesDecrypt(uni.getStorageSync('login_password') || '');
        if (savedAccount) {
          form.account = savedAccount;
          form.password = savedPwd;
        }
      }
    } catch (err) {
      console.warn('恢复表单数据失败:', err);
    }
  };
  
  // 校验手机号格式
  const isMobileValid = computed(() => {
    const mobileReg = /^1[3-9]\d{9}$/;
    return mobileReg.test(form.mobile);
  });
  
  // 统一计算验证码按钮禁用状态
  const isCodeBtnDisabled = computed(() => {
    return countdown.value > 0 || isLoading.value || isCodeLoading.value || !isMobileValid.value;
c293da23   刘淇   新园林init
283
284
  });
  
cf70629b   刘淇   养护计划 照片 自己写样式
285
  // 表单校验规则
8ddc6f6e   刘淇   登录 修改样式
286
  const loginFormRules = reactive({
8ddc6f6e   刘淇   登录 修改样式
287
288
289
290
    account: [
      { type: 'string', required: true, message: '请输入登录账号', trigger: ['change', 'blur'] },
      { type: 'string', min: 2, max: 30, message: '账号长度为2-30个字符', trigger: ['change', 'blur'] }
    ],
cf70629b   刘淇   养护计划 照片 自己写样式
291
292
293
294
    mobile: [
      { type: 'string', required: true, message: '请输入手机号', trigger: ['change', 'blur'] },
      { type: 'string', pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号格式', trigger: ['change', 'blur'] }
    ],
8ddc6f6e   刘淇   登录 修改样式
295
296
    password: [
      { type: 'string', required: true, message: '请输入登录密码', trigger: ['change', 'blur'] },
12e66ec8   刘淇   新增树
297
      { type: 'string', min: 3, max: 20, message: '密码长度为3-20个字符', trigger: ['change', 'blur'] }
e2e5221c   刘淇   验证码登录
298
299
300
301
    ],
    code: [
      { type: 'string', required: true, message: '请输入验证码', trigger: ['change', 'blur'] },
      { type: 'string', len: 4, message: '验证码长度4位', trigger: ['change', 'blur'] }
8ddc6f6e   刘淇   登录 修改样式
302
    ]
c293da23   刘淇   新园林init
303
304
  });
  
e2e5221c   刘淇   验证码登录
305
  // 切换登录方式
24c0bbe7   刘淇   登录账号密码 加密存储
306
  const handleTabChange = ({ name }) => {
cf70629b   刘淇   养护计划 照片 自己写样式
307
    if (isLoading.value) return;
e2e5221c   刘淇   验证码登录
308
  
cf70629b   刘淇   养护计划 照片 自己写样式
309
    loginType.value = name;
e2e5221c   刘淇   验证码登录
310
    // 清空校验状态和无关输入框
cf70629b   刘淇   养护计划 照片 自己写样式
311
312
313
314
315
    nextTick(() => {
      loginFormRef.value?.clearValidate();
    });
  };
  
e2e5221c   刘淇   验证码登录
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
  // 开始验证码倒计时
  const startCountdown = (seconds = 60) => {
    countdown.value = seconds;
  
    // 清除已有定时器,避免重复
    if (countdownTimer) clearInterval(countdownTimer);
  
    countdownTimer = setInterval(() => {
      if (countdown.value <= 0) {
        clearCountdown();
        return;
      }
      countdown.value--;
    }, 1000);
  };
  
  // 清除倒计时
  const clearCountdown = () => {
    countdown.value = 0;
    if (countdownTimer) {
      clearInterval(countdownTimer);
      countdownTimer = null;
    }
  };
  
  // 获取验证码
  const getVerificationCode = async () => {
    // 双重校验:按钮禁用状态
    if (isCodeBtnDisabled.value) {
      console.warn('验证码按钮已禁用,不执行请求');
      return;
    }
  
    try {
      isCodeLoading.value = true; // 按钮进入loading
      uni.showLoading({ title: '发送验证码中...', mask: true }); // 遮罩防止重复点击
  
      const postData = {
        mobile: form.mobile,
        scene: 21
      };
      // 调用验证码接口
      const res = await getSmsCode(postData);
  
      uni.hideLoading();
      uni.$u.toast('验证码已发送,请注意查收');
      startCountdown(); // 仅接口成功时开始倒计时
    } catch (err) {
      // 捕获接口异常
      uni.hideLoading();
      console.error('获取验证码失败:', err);
      uni.$u.toast(err.msg || '发送验证码失败,请重试');
    } finally {
      isCodeLoading.value = false; // 结束loading状态
    }
  };
  
cf70629b   刘淇   养护计划 照片 自己写样式
373
  // 检查登录状态
37c26bd3   刘淇   巡查计划
374
  const checkLoginStatus = () => {
c293da23   刘淇   新园林init
375
    try {
c293da23   刘淇   新园林init
376
377
      if (userStore.isLogin) {
        uni.switchTab({
e6a04285   刘淇   单图情况 宽高70*70
378
          url: '/pages/workbench/index',
cf70629b   刘淇   养护计划 照片 自己写样式
379
          fail: () => uni.reLaunch({ url: '/pages/workbench/index' })
c293da23   刘淇   新园林init
380
        });
c293da23   刘淇   新园林init
381
382
      }
    } catch (err) {
24c0bbe7   刘淇   登录账号密码 加密存储
383
      console.warn('检查登录状态失败:', err);
c293da23   刘淇   新园林init
384
    }
37c26bd3   刘淇   巡查计划
385
  };
c293da23   刘淇   新园林init
386
  
e2e5221c   刘淇   验证码登录
387
  // 登录处理
c293da23   刘淇   新园林init
388
  const handleLogin = async () => {
c293da23   刘淇   新园林init
389
    try {
e2e5221c   刘淇   验证码登录
390
391
392
393
394
395
396
397
398
399
400
      // 根据登录类型校验对应字段
      const validateFields = loginType.value === '手机号登录'
          ? ['mobile', 'code']
          : ['account', 'password'];
  
      // 执行表单校验
      const validateRes = await loginFormRef.value.validate(validateFields);
      if (!validateRes) {
        return;
      }
  
8ddc6f6e   刘淇   登录 修改样式
401
      isLoading.value = true;
c293da23   刘淇   新园林init
402
  
cf70629b   刘淇   养护计划 照片 自己写样式
403
      // 组装登录参数
e2e5221c   刘淇   验证码登录
404
      const loginParams = {};
cf70629b   刘淇   养护计划 照片 自己写样式
405
      if (loginType.value === '手机号登录') {
e2e5221c   刘淇   验证码登录
406
407
408
        loginParams.mobile = form.mobile;
        loginParams.code = form.code;
        loginParams.type = 'sms';
ee792d52   刘淇   动态表单
409
410
411
         loginParams.tenantName='蓟城山水集团'
  
         loginParams.rememberMe= true
cf70629b   刘淇   养护计划 照片 自己写样式
412
413
      } else {
        loginParams.username = form.account;
e2e5221c   刘淇   验证码登录
414
415
        loginParams.password = form.password;
        loginParams.type = 'password';
ee792d52   刘淇   动态表单
416
417
        loginParams.tenantName='蓟城山水集团'
          loginParams.rememberMe= true
cf70629b   刘淇   养护计划 照片 自己写样式
418
419
420
421
      }
  
      // 执行登录
      await userStore.login(loginParams);
c293da23   刘淇   新园林init
422
  
e2e5221c   刘淇   验证码登录
423
424
      // 保存登录信息(仅账号登录且勾选记住密码)
      if (loginType.value === '账号登录' && rememberPwd.value) {
cf70629b   刘淇   养护计划 照片 自己写样式
425
        try {
e2e5221c   刘淇   验证码登录
426
          uni.setStorageSync('login_account', aesEncrypt(form.account));
24c0bbe7   刘淇   登录账号密码 加密存储
427
          uni.setStorageSync('login_password', aesEncrypt(form.password));
e2e5221c   刘淇   验证码登录
428
          uni.removeStorageSync('login_mobile');
cf70629b   刘淇   养护计划 照片 自己写样式
429
        } catch (err) {
24c0bbe7   刘淇   登录账号密码 加密存储
430
          console.warn('保存登录信息失败:', err);
cf70629b   刘淇   养护计划 照片 自己写样式
431
432
        }
      } else {
e2e5221c   刘淇   验证码登录
433
        // 清除缓存
cf70629b   刘淇   养护计划 照片 自己写样式
434
435
436
437
438
        uni.removeStorageSync('login_account');
        uni.removeStorageSync('login_mobile');
        uni.removeStorageSync('login_password');
      }
  
e2e5221c   刘淇   验证码登录
439
440
441
      // 登录成功后清除临时表单缓存
      uni.removeStorageSync(TEMP_FORM_KEY);
  
24c0bbe7   刘淇   登录账号密码 加密存储
442
      // 登录成功跳转
cf70629b   刘淇   养护计划 照片 自己写样式
443
      uni.showToast({ title: '登录成功', icon: 'success', duration: 1000 });
c293da23   刘淇   新园林init
444
      setTimeout(() => {
c293da23   刘淇   新园林init
445
446
        uni.switchTab({
          url: globalConfig.router.tabBarList[1].path,
cf70629b   刘淇   养护计划 照片 自己写样式
447
          fail: () => uni.reLaunch({ url: '/pages/workbench/index' })
c293da23   刘淇   新园林init
448
        });
e6a04285   刘淇   单图情况 宽高70*70
449
      }, 1000);
c293da23   刘淇   新园林init
450
    } catch (err) {
e2e5221c   刘淇   验证码登录
451
452
453
454
455
456
      console.error('登录失败:', err);
      uni.showToast({
        title: err.msg || (loginType.value === '手机号登录' ? '验证码错误' : '账号或密码错误'),
        icon: 'none',
        duration: 1000
      });
c293da23   刘淇   新园林init
457
458
459
460
    } finally {
      isLoading.value = false;
    }
  };
24c0bbe7   刘淇   登录账号密码 加密存储
461
  
e2e5221c   刘淇   验证码登录
462
463
464
465
466
467
468
469
470
471
472
473
474
  // ========== 小程序生命周期适配(方案二核心) ==========
  // 页面显示时(切回页面)恢复数据
  onShow(() => {
    restoreFormData();
  });
  
  // 页面卸载时保存数据
  onUnmounted(() => {
    clearCountdown();
    saveFormData();
  });
  
  // 页面挂载时初始化
24c0bbe7   刘淇   登录账号密码 加密存储
475
476
  onMounted(() => {
    checkLoginStatus();
e2e5221c   刘淇   验证码登录
477
  
24c0bbe7   刘淇   登录账号密码 加密存储
478
479
480
    // 初始化表单规则
    nextTick(() => {
      loginFormRef.value?.setRules(loginFormRules);
e2e5221c   刘淇   验证码登录
481
482
      // 首次挂载也恢复一次数据
      restoreFormData();
24c0bbe7   刘淇   登录账号密码 加密存储
483
    });
24c0bbe7   刘淇   登录账号密码 加密存储
484
  });
c293da23   刘淇   新园林init
485
486
487
  </script>
  
  <style scoped lang="scss">
e2e5221c   刘淇   验证码登录
488
489
  .page-container {
    height: 100vh;
83673de2   刘淇   ai 大区经理 优化添加结束功能
490
491
492
493
    background: url("https://img.jichengshanshui.com.cn:28207/appimg/loginbg.jpg") no-repeat;
    background-position: bottom center;
    background-size: 100% 240px;
  }
e2e5221c   刘淇   验证码登录
494
  
8ddc6f6e   刘淇   登录 修改样式
495
  .top-title {
cf70629b   刘淇   养护计划 照片 自己写样式
496
497
    background: url("https://img.jichengshanshui.com.cn:28207/appimg/bg.jpg") no-repeat;
    background-size: 100% 100%;
8ddc6f6e   刘淇   登录 修改样式
498
    color: #fff;
cf70629b   刘淇   养护计划 照片 自己写样式
499
    padding: 200rpx 0 200rpx 40rpx;
8ddc6f6e   刘淇   登录 修改样式
500
    text-align: left;
8ddc6f6e   刘淇   登录 修改样式
501
502
    position: relative;
    z-index: 1;
cf70629b   刘淇   养护计划 照片 自己写样式
503
  
8ddc6f6e   刘淇   登录 修改样式
504
    .welcome-text {
578c1373   刘淇   样式优化
505
      font-size: 20px;
8ddc6f6e   刘淇   登录 修改样式
506
507
      display: block;
      margin-bottom: 10px;
37c26bd3   刘淇   巡查计划
508
509
    }
  
8ddc6f6e   刘淇   登录 修改样式
510
511
    .platform-name {
      margin-bottom: 10px;
578c1373   刘淇   样式优化
512
      font-size: 20px;
8ddc6f6e   刘淇   登录 修改样式
513
      display: block;
37c26bd3   刘淇   巡查计划
514
515
516
    }
  }
  
c293da23   刘淇   新园林init
517
  .login-form {
8ddc6f6e   刘淇   登录 修改样式
518
    background-color: #fff;
12e66ec8   刘淇   新增树
519
520
521
522
    padding: 20px 15px;
    border-radius: 8px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
    margin: -90px 20px 0;
37c26bd3   刘淇   巡查计划
523
524
    position: relative;
    z-index: 10;
8ddc6f6e   刘淇   登录 修改样式
525
    box-sizing: border-box;
cf70629b   刘淇   养护计划 照片 自己写样式
526
  }
37c26bd3   刘淇   巡查计划
527
  
cf70629b   刘淇   养护计划 照片 自己写样式
528
529
  :deep(.u-tabs) {
    margin-bottom: 15px;
e2e5221c   刘淇   验证码登录
530
  
cf70629b   刘淇   养护计划 照片 自己写样式
531
532
533
    .u-tabs__content {
      height: auto !important;
    }
e2e5221c   刘淇   验证码登录
534
  
cf70629b   刘淇   养护计划 照片 自己写样式
535
536
    .u-tab-item {
      padding: 0 10px;
37c26bd3   刘淇   巡查计划
537
    }
c293da23   刘淇   新园林init
538
539
  }
  
8ddc6f6e   刘淇   登录 修改样式
540
  :deep(.u-form-item) {
12e66ec8   刘淇   新增树
541
    margin-bottom: 10px;
c293da23   刘淇   新园林init
542
    position: relative;
8ddc6f6e   刘淇   登录 修改样式
543
  }
c293da23   刘淇   新园林init
544
  
cf70629b   刘淇   养护计划 照片 自己写样式
545
546
547
548
549
  .password-item {
    position: relative;
    margin-bottom: 5px !important;
  }
  
cf70629b   刘淇   养护计划 照片 自己写样式
550
  .remember-wrap {
24c0bbe7   刘淇   登录账号密码 加密存储
551
    padding: 0;
cf70629b   刘淇   养护计划 照片 自己写样式
552
553
554
555
556
557
    margin: 10px 0 20px;
  
    :deep(.u-checkbox) {
      font-size: 12px;
      color: #666;
      justify-content: flex-end;
cf70629b   刘淇   养护计划 照片 自己写样式
558
559
560
561
562
563
564
565
      margin-left: 0 !important;
  
      .u-checkbox__label {
        margin-left: 5px;
      }
    }
  }
  
8ddc6f6e   刘淇   登录 修改样式
566
  .login-btn {
cf70629b   刘淇   养护计划 照片 自己写样式
567
    margin-top: 10px;
8ddc6f6e   刘淇   登录 修改样式
568
    width: 100%;
12e66ec8   刘淇   新增树
569
570
571
    height: 44px;
    line-height: 44px;
    border-radius: 4px;
578c1373   刘淇   样式优化
572
    font-size: 18px;
12e66ec8   刘淇   新增树
573
574
575
    background: #0A86F4;
    box-shadow: 0px 4px 6px 1px rgba(25,94,215,0.5);
    border-radius: 23px;
c293da23   刘淇   新园林init
576
577
  }
  
8ddc6f6e   刘淇   登录 修改样式
578
579
580
  .copyright {
    width: 100%;
    text-align: center;
12e66ec8   刘淇   新增树
581
    font-size: 12px;
8ddc6f6e   刘淇   登录 修改样式
582
583
    color: #999;
    position: fixed;
83673de2   刘淇   ai 大区经理 优化添加结束功能
584
    bottom: 60px;
8ddc6f6e   刘淇   登录 修改样式
585
  }
e2e5221c   刘淇   验证码登录
586
587
588
589
590
591
592
593
594
595
596
  
  // 验证码按钮样式优化
  :deep(.u-input__suffix) {
    padding-right: 10rpx;
  }
  
  :deep(.u-button--mini) {
    height: 60rpx;
    line-height: 60rpx;
    padding: 0 15rpx;
  }
c293da23   刘淇   新园林init
597
  </style>