Blame view

pages/login/index.vue 9.6 KB
c293da23   刘淇   新园林init
1
2
  <template>
    <view class="login-page">
cf70629b   刘淇   养护计划 照片 自己写样式
3
      <!-- 顶部标题区 -->
8ddc6f6e   刘淇   登录 修改样式
4
5
6
7
      <view class="top-title">
        <text class="welcome-text">你好,欢迎光临</text>
        <text class="platform-name">全域智能运营管理平台</text>
      </view>
37c26bd3   刘淇   巡查计划
8
  
cf70629b   刘淇   养护计划 照片 自己写样式
9
      <!-- 登录表单区域 -->
c293da23   刘淇   新园林init
10
      <view class="login-form">
cf70629b   刘淇   养护计划 照片 自己写样式
11
12
13
14
15
16
17
18
19
20
        <!-- uview-plus的Tabs组件 -->
        <up-tabs
            :list="tabList"
            active-color="#0A86F4"
            inactive-color="#666"
            font-size="16px"
            line-width="40"
            line-height="3"
            @change="handleTabChange"
        ></up-tabs>
37c26bd3   刘淇   巡查计划
21
  
cf70629b   刘淇   养护计划 照片 自己写样式
22
        <!-- 表单校验容器 -->
8ddc6f6e   刘淇   登录 修改样式
23
24
25
26
27
28
        <up-form
            label-position="left"
            :model="form"
            ref="loginFormRef"
            labelWidth="0"
        >
cf70629b   刘淇   养护计划 照片 自己写样式
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
          <!-- 手机号输入框 -->
          <up-form-item v-if="loginType === '手机号登录'" prop="mobile">
            <up-input
                v-model="form.mobile"
                border="surround"
                clearable
                maxlength="11"
                input-align="left"
                fontSize="16px"
                :disabled="isLoading"
                shape="circle"
                placeholder="请输入手机号"
                @blur="() => loginFormRef.validateField('mobile')"
            />
          </up-form-item>
  
          <!-- 账号输入框 -->
          <up-form-item v-else prop="account">
8ddc6f6e   刘淇   登录 修改样式
47
48
49
50
51
52
53
54
55
56
            <up-input
                v-model="form.account"
                border="surround"
                clearable
                maxlength="30"
                input-align="left"
                fontSize="16px"
                :disabled="isLoading"
                shape="circle"
                placeholder="请输入账户"
8ddc6f6e   刘淇   登录 修改样式
57
58
59
                @blur="() => loginFormRef.validateField('account')"
            />
          </up-form-item>
c293da23   刘淇   新园林init
60
  
cf70629b   刘淇   养护计划 照片 自己写样式
61
          <!-- 密码输入框 -->
8ddc6f6e   刘淇   登录 修改样式
62
63
          <up-form-item
              prop="password"
cf70629b   刘淇   养护计划 照片 自己写样式
64
              class="password-item"
c293da23   刘淇   新园林init
65
          >
8ddc6f6e   刘淇   登录 修改样式
66
67
68
69
70
71
72
73
74
75
            <up-input
                v-model="form.password"
                placeholder="请输入密码"
                maxlength="20"
                border="surround"
                clearable
                input-align="left"
                type="password"
                :disabled="isLoading"
                shape="circle"
8ddc6f6e   刘淇   登录 修改样式
76
77
78
                @blur="() => loginFormRef.validateField('password')"
            />
          </up-form-item>
cf70629b   刘淇   养护计划 照片 自己写样式
79
80
81
82
83
84
85
86
87
88
89
90
  
          <!-- 记住密码单独一行,居右显示 -->
          <view class="remember-wrap">
            <up-checkbox
                :customStyle="{marginBottom: '8px'}"
                label="记住密码"
                name="agree"
                usedAlone
                v-model:checked="rememberPwd"
            >
            </up-checkbox>
          </view>
8ddc6f6e   刘淇   登录 修改样式
91
        </up-form>
c293da23   刘淇   新园林init
92
93
94
95
96
97
98
99
  
        <!-- 登录按钮 -->
        <up-button
            class="login-btn"
            type="primary"
            size="large"
            :loading="isLoading"
            @click="handleLogin"
8ddc6f6e   刘淇   登录 修改样式
100
            shape="circle"
c293da23   刘淇   新园林init
101
102
103
104
        >
          登录
        </up-button>
      </view>
8ddc6f6e   刘淇   登录 修改样式
105
106
107
  
      <!-- 版权信息 -->
      <view class="copyright">蓟城山水集团版权所有</view>
c293da23   刘淇   新园林init
108
109
110
111
    </view>
  </template>
  
  <script setup>
8ddc6f6e   刘淇   登录 修改样式
112
  import { ref, reactive, onMounted, nextTick } from 'vue';
c293da23   刘淇   新园林init
113
114
115
  import { useUserStore } from '@/pinia/user';
  import globalConfig from '@/common/config/global';
  
cf70629b   刘淇   养护计划 照片 自己写样式
116
  // 全局实例 & 基础状态
8ddc6f6e   刘淇   登录 修改样式
117
  const userStore = useUserStore();
cf70629b   刘淇   养护计划 照片 自己写样式
118
119
120
121
122
123
124
125
126
127
128
129
  const loginFormRef = ref(null);
  const isLoading = ref(false);
  
  // Tabs配置(name直接存储显示文本)
  const tabList = ref([
    { name: '手机号登录' },
    { name: '账号登录' }
  ]);
  const loginType = ref('手机号登录'); // 登录类型标识
  
  // 记住密码(默认选中)
  const rememberPwd = ref(true);
8ddc6f6e   刘淇   登录 修改样式
130
  
cf70629b   刘淇   养护计划 照片 自己写样式
131
  // 表单数据
c293da23   刘淇   新园林init
132
  const form = reactive({
cf70629b   刘淇   养护计划 照片 自己写样式
133
134
135
    account: '',    // 账号
    mobile: '',     // 手机号
    password: ''    // 密码
c293da23   刘淇   新园林init
136
137
  });
  
cf70629b   刘淇   养护计划 照片 自己写样式
138
  // 表单校验规则
8ddc6f6e   刘淇   登录 修改样式
139
  const loginFormRules = reactive({
8ddc6f6e   刘淇   登录 修改样式
140
141
142
143
    account: [
      { type: 'string', required: true, message: '请输入登录账号', trigger: ['change', 'blur'] },
      { type: 'string', min: 2, max: 30, message: '账号长度为2-30个字符', trigger: ['change', 'blur'] }
    ],
cf70629b   刘淇   养护计划 照片 自己写样式
144
145
146
147
    mobile: [
      { type: 'string', required: true, message: '请输入手机号', trigger: ['change', 'blur'] },
      { type: 'string', pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号格式', trigger: ['change', 'blur'] }
    ],
8ddc6f6e   刘淇   登录 修改样式
148
149
    password: [
      { type: 'string', required: true, message: '请输入登录密码', trigger: ['change', 'blur'] },
12e66ec8   刘淇   新增树
150
      { type: 'string', min: 3, max: 20, message: '密码长度为3-20个字符', trigger: ['change', 'blur'] }
8ddc6f6e   刘淇   登录 修改样式
151
    ]
c293da23   刘淇   新园林init
152
153
  });
  
cf70629b   刘淇   养护计划 照片 自己写样式
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
  // Tabs切换事件
  const handleTabChange = ({name}) => {
    console.log(name)
    if (isLoading.value) return;
    loginType.value = name;
  
    // 切换时清空另一类输入框
    if (name === '手机号登录') {
      form.account = '';
    } else {
      form.mobile = '';
    }
  
    // 清空校验状态
    nextTick(() => {
      loginFormRef.value?.clearValidate();
    });
  };
  
  // 生命周期
c293da23   刘淇   新园林init
174
  onMounted(() => {
37c26bd3   刘淇   巡查计划
175
176
    // 检查登录态
    checkLoginStatus();
cf70629b   刘淇   养护计划 照片 自己写样式
177
178
  
    // 初始化表单校验规则
8ddc6f6e   刘淇   登录 修改样式
179
180
181
    nextTick(() => {
      loginFormRef.value?.setRules(loginFormRules);
    });
cf70629b   刘淇   养护计划 照片 自己写样式
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
  
    // 读取缓存的账号/密码
    if (rememberPwd.value) {
      try {
        const savedAccount = uni.getStorageSync('login_account') || '';
        const savedMobile = uni.getStorageSync('login_mobile') || '';
        const savedPwd = uni.getStorageSync('login_password') || '';
  
        if (savedAccount) {
          form.account = savedAccount;
          loginType.value = '账号登录';
  
        } else if (savedMobile) {
          form.mobile = savedMobile;
          loginType.value = '手机号登录';
        }
        form.password = savedPwd;
      } catch (err) {
        console.warn('读取缓存密码失败:', err);
      }
    }
37c26bd3   刘淇   巡查计划
203
204
  });
  
cf70629b   刘淇   养护计划 照片 自己写样式
205
  // 检查登录状态
37c26bd3   刘淇   巡查计划
206
  const checkLoginStatus = () => {
c293da23   刘淇   新园林init
207
    try {
c293da23   刘淇   新园林init
208
209
      if (userStore.isLogin) {
        uni.switchTab({
e6a04285   刘淇   单图情况 宽高70*70
210
          url: '/pages/workbench/index',
cf70629b   刘淇   养护计划 照片 自己写样式
211
          fail: () => uni.reLaunch({ url: '/pages/workbench/index' })
c293da23   刘淇   新园林init
212
        });
c293da23   刘淇   新园林init
213
214
215
216
      }
    } catch (err) {
      console.warn('检查登录状态失败:', err);
    }
37c26bd3   刘淇   巡查计划
217
  };
c293da23   刘淇   新园林init
218
  
cf70629b   刘淇   养护计划 照片 自己写样式
219
  // 登录方法
c293da23   刘淇   新园林init
220
  const handleLogin = async () => {
c293da23   刘淇   新园林init
221
    try {
cf70629b   刘淇   养护计划 照片 自己写样式
222
      // 表单校验
8ddc6f6e   刘淇   登录 修改样式
223
      await loginFormRef.value.validate();
8ddc6f6e   刘淇   登录 修改样式
224
      isLoading.value = true;
c293da23   刘淇   新园林init
225
  
cf70629b   刘淇   养护计划 照片 自己写样式
226
227
228
229
230
231
232
233
234
235
236
      // 组装登录参数
      const loginParams = { password: form.password };
      if (loginType.value === '手机号登录') {
        // loginParams.mobile = form.mobile;
        loginParams.username = form.mobile;
      } else {
        loginParams.username = form.account;
      }
  
      // 执行登录
      await userStore.login(loginParams);
c293da23   刘淇   新园林init
237
  
cf70629b   刘淇   养护计划 照片 自己写样式
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
      // 保存记住密码
      if (rememberPwd.value) {
        try {
          if (loginType.value === '手机号登录') {
            uni.setStorageSync('login_mobile', form.mobile);
            uni.removeStorageSync('login_account');
          } else {
            uni.setStorageSync('login_account', form.account);
            uni.removeStorageSync('login_mobile');
          }
          uni.setStorageSync('login_password', form.password);
        } catch (err) {
          console.warn('保存密码失败:', err);
        }
      } else {
        // 清除缓存
        uni.removeStorageSync('login_account');
        uni.removeStorageSync('login_mobile');
        uni.removeStorageSync('login_password');
      }
  
      // 登录成功提示+跳转
      uni.showToast({ title: '登录成功', icon: 'success', duration: 1000 });
c293da23   刘淇   新园林init
261
      setTimeout(() => {
c293da23   刘淇   新园林init
262
263
        uni.switchTab({
          url: globalConfig.router.tabBarList[1].path,
cf70629b   刘淇   养护计划 照片 自己写样式
264
          fail: () => uni.reLaunch({ url: '/pages/workbench/index' })
c293da23   刘淇   新园林init
265
        });
e6a04285   刘淇   单图情况 宽高70*70
266
      }, 1000);
c293da23   刘淇   新园林init
267
    } catch (err) {
cf70629b   刘淇   养护计划 照片 自己写样式
268
      // 错误处理
8ddc6f6e   刘淇   登录 修改样式
269
270
271
      if (!Array.isArray(err)) {
        console.error('登录失败:', err);
        uni.showToast({
cf70629b   刘淇   养护计划 照片 自己写样式
272
          title: err.msg || '账号或密码错误,请重试',
8ddc6f6e   刘淇   登录 修改样式
273
          icon: 'none',
cf70629b   刘淇   养护计划 照片 自己写样式
274
          duration: 1000
8ddc6f6e   刘淇   登录 修改样式
275
276
        });
      }
c293da23   刘淇   新园林init
277
278
279
280
281
282
283
    } finally {
      isLoading.value = false;
    }
  };
  </script>
  
  <style scoped lang="scss">
37c26bd3   刘淇   巡查计划
284
  // 核心布局
c293da23   刘淇   新园林init
285
286
  .login-page {
    min-height: 100vh;
8ddc6f6e   刘淇   登录 修改样式
287
    padding: 0;
c293da23   刘淇   新园林init
288
    box-sizing: border-box;
8ddc6f6e   刘淇   登录 修改样式
289
290
291
    overflow: hidden;
    position: relative;
    background: #f5f7fa;
37c26bd3   刘淇   巡查计划
292
293
  }
  
cf70629b   刘淇   养护计划 照片 自己写样式
294
  // 顶部样式
8ddc6f6e   刘淇   登录 修改样式
295
  .top-title {
cf70629b   刘淇   养护计划 照片 自己写样式
296
297
    background: url("https://img.jichengshanshui.com.cn:28207/appimg/bg.jpg") no-repeat;
    background-size: 100% 100%;
8ddc6f6e   刘淇   登录 修改样式
298
    color: #fff;
cf70629b   刘淇   养护计划 照片 自己写样式
299
    padding: 200rpx 0 200rpx 40rpx;
8ddc6f6e   刘淇   登录 修改样式
300
    text-align: left;
8ddc6f6e   刘淇   登录 修改样式
301
302
    position: relative;
    z-index: 1;
cf70629b   刘淇   养护计划 照片 自己写样式
303
  
8ddc6f6e   刘淇   登录 修改样式
304
    .welcome-text {
12e66ec8   刘淇   新增树
305
      font-size: 23px;
8ddc6f6e   刘淇   登录 修改样式
306
307
308
      display: block;
      margin-bottom: 10px;
      font-weight: 500;
37c26bd3   刘淇   巡查计划
309
310
    }
  
8ddc6f6e   刘淇   登录 修改样式
311
312
    .platform-name {
      margin-bottom: 10px;
12e66ec8   刘淇   新增树
313
      font-size: 23px;
8ddc6f6e   刘淇   登录 修改样式
314
315
      display: block;
      opacity: 0.95;
37c26bd3   刘淇   巡查计划
316
317
318
    }
  }
  
c293da23   刘淇   新园林init
319
  .login-form {
8ddc6f6e   刘淇   登录 修改样式
320
    background-color: #fff;
12e66ec8   刘淇   新增树
321
322
323
324
    padding: 20px 15px;
    border-radius: 8px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
    margin: -90px 20px 0;
37c26bd3   刘淇   巡查计划
325
326
    position: relative;
    z-index: 10;
8ddc6f6e   刘淇   登录 修改样式
327
    box-sizing: border-box;
cf70629b   刘淇   养护计划 照片 自己写样式
328
  }
37c26bd3   刘淇   巡查计划
329
  
cf70629b   刘淇   养护计划 照片 自己写样式
330
331
332
333
334
335
336
337
  // Tabs样式适配
  :deep(.u-tabs) {
    margin-bottom: 15px;
    .u-tabs__content {
      height: auto !important;
    }
    .u-tab-item {
      padding: 0 10px;
37c26bd3   刘淇   巡查计划
338
    }
c293da23   刘淇   新园林init
339
340
  }
  
cf70629b   刘淇   养护计划 照片 自己写样式
341
  // 表单间距
8ddc6f6e   刘淇   登录 修改样式
342
  :deep(.u-form-item) {
12e66ec8   刘淇   新增树
343
    margin-bottom: 10px;
c293da23   刘淇   新园林init
344
    position: relative;
8ddc6f6e   刘淇   登录 修改样式
345
  }
c293da23   刘淇   新园林init
346
  
cf70629b   刘淇   养护计划 照片 自己写样式
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
  // 密码项样式
  .password-item {
    position: relative;
    margin-bottom: 5px !important;
  }
  
  // ✅ 核心优化:记住密码完全居右对齐
  .remember-wrap {
    //text-align: right;
    padding: 0; // 移除多余内边距
    margin: 10px 0 20px;
  
    :deep(.u-checkbox) {
      font-size: 12px;
      color: #666;
      justify-content: flex-end;
      // 移除复选框的默认左边距,确保居右紧凑
      margin-left: 0 !important;
  
      .u-checkbox__label {
        margin-left: 5px;
      }
    }
  }
  
12e66ec8   刘淇   新增树
372
  // 登录按钮
8ddc6f6e   刘淇   登录 修改样式
373
  .login-btn {
cf70629b   刘淇   养护计划 照片 自己写样式
374
    margin-top: 10px;
8ddc6f6e   刘淇   登录 修改样式
375
    width: 100%;
12e66ec8   刘淇   新增树
376
377
378
379
    height: 44px;
    line-height: 44px;
    border-radius: 4px;
    font-size: 16px;
12e66ec8   刘淇   新增树
380
381
382
    background: #0A86F4;
    box-shadow: 0px 4px 6px 1px rgba(25,94,215,0.5);
    border-radius: 23px;
c293da23   刘淇   新园林init
383
384
  }
  
cf70629b   刘淇   养护计划 照片 自己写样式
385
  // 版权信息
8ddc6f6e   刘淇   登录 修改样式
386
387
388
  .copyright {
    width: 100%;
    text-align: center;
12e66ec8   刘淇   新增树
389
    font-size: 12px;
8ddc6f6e   刘淇   登录 修改样式
390
391
392
393
    color: #999;
    position: fixed;
    bottom: 100px;
  }
c293da23   刘淇   新园林init
394
  </style>