Blame view

pages/login/index.vue 15.7 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';
cf70629b   刘淇   养护计划 照片 自己写样式
409
410
      } else {
        loginParams.username = form.account;
e2e5221c   刘淇   验证码登录
411
412
        loginParams.password = form.password;
        loginParams.type = 'password';
cf70629b   刘淇   养护计划 照片 自己写样式
413
414
415
416
      }
  
      // 执行登录
      await userStore.login(loginParams);
c293da23   刘淇   新园林init
417
  
e2e5221c   刘淇   验证码登录
418
419
      // 保存登录信息(仅账号登录且勾选记住密码)
      if (loginType.value === '账号登录' && rememberPwd.value) {
cf70629b   刘淇   养护计划 照片 自己写样式
420
        try {
e2e5221c   刘淇   验证码登录
421
          uni.setStorageSync('login_account', aesEncrypt(form.account));
24c0bbe7   刘淇   登录账号密码 加密存储
422
          uni.setStorageSync('login_password', aesEncrypt(form.password));
e2e5221c   刘淇   验证码登录
423
          uni.removeStorageSync('login_mobile');
cf70629b   刘淇   养护计划 照片 自己写样式
424
        } catch (err) {
24c0bbe7   刘淇   登录账号密码 加密存储
425
          console.warn('保存登录信息失败:', err);
cf70629b   刘淇   养护计划 照片 自己写样式
426
427
        }
      } else {
e2e5221c   刘淇   验证码登录
428
        // 清除缓存
cf70629b   刘淇   养护计划 照片 自己写样式
429
430
431
432
433
        uni.removeStorageSync('login_account');
        uni.removeStorageSync('login_mobile');
        uni.removeStorageSync('login_password');
      }
  
e2e5221c   刘淇   验证码登录
434
435
436
      // 登录成功后清除临时表单缓存
      uni.removeStorageSync(TEMP_FORM_KEY);
  
24c0bbe7   刘淇   登录账号密码 加密存储
437
      // 登录成功跳转
cf70629b   刘淇   养护计划 照片 自己写样式
438
      uni.showToast({ title: '登录成功', icon: 'success', duration: 1000 });
c293da23   刘淇   新园林init
439
      setTimeout(() => {
c293da23   刘淇   新园林init
440
441
        uni.switchTab({
          url: globalConfig.router.tabBarList[1].path,
cf70629b   刘淇   养护计划 照片 自己写样式
442
          fail: () => uni.reLaunch({ url: '/pages/workbench/index' })
c293da23   刘淇   新园林init
443
        });
e6a04285   刘淇   单图情况 宽高70*70
444
      }, 1000);
c293da23   刘淇   新园林init
445
    } catch (err) {
e2e5221c   刘淇   验证码登录
446
447
448
449
450
451
      console.error('登录失败:', err);
      uni.showToast({
        title: err.msg || (loginType.value === '手机号登录' ? '验证码错误' : '账号或密码错误'),
        icon: 'none',
        duration: 1000
      });
c293da23   刘淇   新园林init
452
453
454
455
    } finally {
      isLoading.value = false;
    }
  };
24c0bbe7   刘淇   登录账号密码 加密存储
456
  
e2e5221c   刘淇   验证码登录
457
458
459
460
461
462
463
464
465
466
467
468
469
  // ========== 小程序生命周期适配(方案二核心) ==========
  // 页面显示时(切回页面)恢复数据
  onShow(() => {
    restoreFormData();
  });
  
  // 页面卸载时保存数据
  onUnmounted(() => {
    clearCountdown();
    saveFormData();
  });
  
  // 页面挂载时初始化
24c0bbe7   刘淇   登录账号密码 加密存储
470
471
  onMounted(() => {
    checkLoginStatus();
e2e5221c   刘淇   验证码登录
472
  
24c0bbe7   刘淇   登录账号密码 加密存储
473
474
475
    // 初始化表单规则
    nextTick(() => {
      loginFormRef.value?.setRules(loginFormRules);
e2e5221c   刘淇   验证码登录
476
477
      // 首次挂载也恢复一次数据
      restoreFormData();
24c0bbe7   刘淇   登录账号密码 加密存储
478
    });
24c0bbe7   刘淇   登录账号密码 加密存储
479
  });
c293da23   刘淇   新园林init
480
481
482
  </script>
  
  <style scoped lang="scss">
e2e5221c   刘淇   验证码登录
483
484
  .page-container {
    height: 100vh;
83673de2   刘淇   ai 大区经理 优化添加结束功能
485
486
487
488
    background: url("https://img.jichengshanshui.com.cn:28207/appimg/loginbg.jpg") no-repeat;
    background-position: bottom center;
    background-size: 100% 240px;
  }
e2e5221c   刘淇   验证码登录
489
  
8ddc6f6e   刘淇   登录 修改样式
490
  .top-title {
cf70629b   刘淇   养护计划 照片 自己写样式
491
492
    background: url("https://img.jichengshanshui.com.cn:28207/appimg/bg.jpg") no-repeat;
    background-size: 100% 100%;
8ddc6f6e   刘淇   登录 修改样式
493
    color: #fff;
cf70629b   刘淇   养护计划 照片 自己写样式
494
    padding: 200rpx 0 200rpx 40rpx;
8ddc6f6e   刘淇   登录 修改样式
495
    text-align: left;
8ddc6f6e   刘淇   登录 修改样式
496
497
    position: relative;
    z-index: 1;
cf70629b   刘淇   养护计划 照片 自己写样式
498
  
8ddc6f6e   刘淇   登录 修改样式
499
    .welcome-text {
578c1373   刘淇   样式优化
500
      font-size: 20px;
8ddc6f6e   刘淇   登录 修改样式
501
502
      display: block;
      margin-bottom: 10px;
37c26bd3   刘淇   巡查计划
503
504
    }
  
8ddc6f6e   刘淇   登录 修改样式
505
506
    .platform-name {
      margin-bottom: 10px;
578c1373   刘淇   样式优化
507
      font-size: 20px;
8ddc6f6e   刘淇   登录 修改样式
508
      display: block;
37c26bd3   刘淇   巡查计划
509
510
511
    }
  }
  
c293da23   刘淇   新园林init
512
  .login-form {
8ddc6f6e   刘淇   登录 修改样式
513
    background-color: #fff;
12e66ec8   刘淇   新增树
514
515
516
517
    padding: 20px 15px;
    border-radius: 8px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
    margin: -90px 20px 0;
37c26bd3   刘淇   巡查计划
518
519
    position: relative;
    z-index: 10;
8ddc6f6e   刘淇   登录 修改样式
520
    box-sizing: border-box;
cf70629b   刘淇   养护计划 照片 自己写样式
521
  }
37c26bd3   刘淇   巡查计划
522
  
cf70629b   刘淇   养护计划 照片 自己写样式
523
524
  :deep(.u-tabs) {
    margin-bottom: 15px;
e2e5221c   刘淇   验证码登录
525
  
cf70629b   刘淇   养护计划 照片 自己写样式
526
527
528
    .u-tabs__content {
      height: auto !important;
    }
e2e5221c   刘淇   验证码登录
529
  
cf70629b   刘淇   养护计划 照片 自己写样式
530
531
    .u-tab-item {
      padding: 0 10px;
37c26bd3   刘淇   巡查计划
532
    }
c293da23   刘淇   新园林init
533
534
  }
  
8ddc6f6e   刘淇   登录 修改样式
535
  :deep(.u-form-item) {
12e66ec8   刘淇   新增树
536
    margin-bottom: 10px;
c293da23   刘淇   新园林init
537
    position: relative;
8ddc6f6e   刘淇   登录 修改样式
538
  }
c293da23   刘淇   新园林init
539
  
cf70629b   刘淇   养护计划 照片 自己写样式
540
541
542
543
544
  .password-item {
    position: relative;
    margin-bottom: 5px !important;
  }
  
cf70629b   刘淇   养护计划 照片 自己写样式
545
  .remember-wrap {
24c0bbe7   刘淇   登录账号密码 加密存储
546
    padding: 0;
cf70629b   刘淇   养护计划 照片 自己写样式
547
548
549
550
551
552
    margin: 10px 0 20px;
  
    :deep(.u-checkbox) {
      font-size: 12px;
      color: #666;
      justify-content: flex-end;
cf70629b   刘淇   养护计划 照片 自己写样式
553
554
555
556
557
558
559
560
      margin-left: 0 !important;
  
      .u-checkbox__label {
        margin-left: 5px;
      }
    }
  }
  
8ddc6f6e   刘淇   登录 修改样式
561
  .login-btn {
cf70629b   刘淇   养护计划 照片 自己写样式
562
    margin-top: 10px;
8ddc6f6e   刘淇   登录 修改样式
563
    width: 100%;
12e66ec8   刘淇   新增树
564
565
566
    height: 44px;
    line-height: 44px;
    border-radius: 4px;
578c1373   刘淇   样式优化
567
    font-size: 18px;
12e66ec8   刘淇   新增树
568
569
570
    background: #0A86F4;
    box-shadow: 0px 4px 6px 1px rgba(25,94,215,0.5);
    border-radius: 23px;
c293da23   刘淇   新园林init
571
572
  }
  
8ddc6f6e   刘淇   登录 修改样式
573
574
575
  .copyright {
    width: 100%;
    text-align: center;
12e66ec8   刘淇   新增树
576
    font-size: 12px;
8ddc6f6e   刘淇   登录 修改样式
577
578
    color: #999;
    position: fixed;
83673de2   刘淇   ai 大区经理 优化添加结束功能
579
    bottom: 60px;
8ddc6f6e   刘淇   登录 修改样式
580
  }
e2e5221c   刘淇   验证码登录
581
582
583
584
585
586
587
588
589
590
591
  
  // 验证码按钮样式优化
  :deep(.u-input__suffix) {
    padding-right: 10rpx;
  }
  
  :deep(.u-button--mini) {
    height: 60rpx;
    line-height: 60rpx;
    padding: 0 15rpx;
  }
c293da23   刘淇   新园林init
592
  </style>