c293da23
刘淇
新园林init
|
1
2
|
<template>
<view class="login-page">
|
8ddc6f6e
刘淇
登录 修改样式
|
3
4
5
6
7
|
<!-- 顶部标题区 - 加高 + 左下大圆角 + 底部蓝色过滤阴影 + 从浅到深 蓝色渐变背景 -->
<view class="top-title">
<text class="welcome-text">你好,欢迎光临</text>
<text class="platform-name">全域智能运营管理平台</text>
</view>
|
37c26bd3
刘淇
巡查计划
|
8
|
|
8ddc6f6e
刘淇
登录 修改样式
|
9
|
<!-- 登录表单区域 - 往上偏移 盖住top-title一部分 -->
|
c293da23
刘淇
新园林init
|
10
|
<view class="login-form">
|
8ddc6f6e
刘淇
登录 修改样式
|
11
12
|
<!-- 登录标题 -->
<view class="login-title">账户登录</view>
|
37c26bd3
刘淇
巡查计划
|
13
|
|
8ddc6f6e
刘淇
登录 修改样式
|
14
15
16
17
18
19
20
21
22
23
|
<!-- ✅ 核心:和工单页同款 up-form 表单校验容器 -->
<up-form
label-position="left"
:model="form"
ref="loginFormRef"
labelWidth="0"
>
<!-- 账号输入框 + 校验 -->
<up-form-item
prop="account"
|
c293da23
刘淇
新园林init
|
24
|
>
|
8ddc6f6e
刘淇
登录 修改样式
|
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
<up-input
v-model="form.account"
border="surround"
clearable
maxlength="30"
input-align="left"
fontSize="16px"
:disabled="isLoading"
shape="circle"
placeholder="请输入账户"
selectionStart="15"
selectionEnd="15"
@blur="() => loginFormRef.validateField('account')"
/>
</up-form-item>
|
c293da23
刘淇
新园林init
|
40
|
|
8ddc6f6e
刘淇
登录 修改样式
|
41
42
43
|
<!-- 密码输入框 + 校验 -->
<up-form-item
prop="password"
|
c293da23
刘淇
新园林init
|
44
|
>
|
8ddc6f6e
刘淇
登录 修改样式
|
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
<up-input
v-model="form.password"
placeholder="请输入密码"
maxlength="20"
border="surround"
clearable
input-align="left"
type="password"
:disabled="isLoading"
shape="circle"
selectionStart="5"
selectionEnd="5"
@blur="() => loginFormRef.validateField('password')"
/>
</up-form-item>
</up-form>
|
c293da23
刘淇
新园林init
|
61
62
63
64
65
66
67
68
|
<!-- 登录按钮 -->
<up-button
class="login-btn"
type="primary"
size="large"
:loading="isLoading"
@click="handleLogin"
|
8ddc6f6e
刘淇
登录 修改样式
|
69
|
shape="circle"
|
c293da23
刘淇
新园林init
|
70
71
72
73
|
>
登录
</up-button>
</view>
|
8ddc6f6e
刘淇
登录 修改样式
|
74
75
76
|
<!-- 版权信息 -->
<view class="copyright">蓟城山水集团版权所有</view>
|
c293da23
刘淇
新园林init
|
77
78
79
80
|
</view>
</template>
<script setup>
|
8ddc6f6e
刘淇
登录 修改样式
|
81
|
import { ref, reactive, onMounted, nextTick } from 'vue';
|
c293da23
刘淇
新园林init
|
82
83
84
|
import { useUserStore } from '@/pinia/user';
import globalConfig from '@/common/config/global';
|
8ddc6f6e
刘淇
登录 修改样式
|
85
86
87
88
89
90
|
// ========== 【全局实例 & 基础状态】 和工单页写法一致 ==========
const userStore = useUserStore();
const loginFormRef = ref(null); // 表单ref 用于校验
const isLoading = ref(false); // 登录加载状态
// ========== 【表单数据】 和工单页一致的 reactive 声明 ==========
|
c293da23
刘淇
新园林init
|
91
|
const form = reactive({
|
8ddc6f6e
刘淇
登录 修改样式
|
92
93
|
account: '', // 账号
password: '' // 密码
|
c293da23
刘淇
新园林init
|
94
95
|
});
|
8ddc6f6e
刘淇
登录 修改样式
|
96
97
98
99
100
101
102
103
104
105
|
// ========== 【表单校验规则】 ✅核心 和工单页1:1同款校验规则写法 ==========
const loginFormRules = reactive({
// 账号校验:必填 + 长度限制 2-30位(合理账号长度,可自行调整)
account: [
{ type: 'string', required: true, message: '请输入登录账号', trigger: ['change', 'blur'] },
{ type: 'string', min: 2, max: 30, message: '账号长度为2-30个字符', trigger: ['change', 'blur'] }
],
// 密码校验:必填 + 长度限制 6-20位(行业通用密码长度,可自行调整)
password: [
{ type: 'string', required: true, message: '请输入登录密码', trigger: ['change', 'blur'] },
|
12e66ec8
刘淇
新增树
|
106
|
{ type: 'string', min: 3, max: 20, message: '密码长度为3-20个字符', trigger: ['change', 'blur'] }
|
8ddc6f6e
刘淇
登录 修改样式
|
107
|
]
|
c293da23
刘淇
新园林init
|
108
109
|
});
|
8ddc6f6e
刘淇
登录 修改样式
|
110
|
// ========== 【生命周期】 nextTick 设置校验规则 和工单页一致 ==========
|
c293da23
刘淇
新园林init
|
111
|
onMounted(() => {
|
37c26bd3
刘淇
巡查计划
|
112
113
|
// 检查登录态
checkLoginStatus();
|
8ddc6f6e
刘淇
登录 修改样式
|
114
115
116
117
|
// nextTick确保表单挂载完成再赋值规则,修复校验不生效bug,和工单页写法一致
nextTick(() => {
loginFormRef.value?.setRules(loginFormRules);
});
|
37c26bd3
刘淇
巡查计划
|
118
119
|
});
|
8ddc6f6e
刘淇
登录 修改样式
|
120
|
// ========== 【检查登录状态】 原有逻辑不变 ==========
|
37c26bd3
刘淇
巡查计划
|
121
|
const checkLoginStatus = () => {
|
c293da23
刘淇
新园林init
|
122
123
124
125
|
try {
// 已登录则直接跳首页
if (userStore.isLogin) {
uni.switchTab({
|
e6a04285
刘淇
单图情况 宽高70*70
|
126
|
url: '/pages/workbench/index',
|
c293da23
刘淇
新园林init
|
127
|
fail: () => {
|
e6a04285
刘淇
单图情况 宽高70*70
|
128
|
uni.reLaunch({ url: '/pages/workbench/index' });
|
c293da23
刘淇
新园林init
|
129
130
131
132
133
134
135
|
}
});
return;
}
} catch (err) {
console.warn('检查登录状态失败:', err);
}
|
37c26bd3
刘淇
巡查计划
|
136
|
};
|
c293da23
刘淇
新园林init
|
137
|
|
8ddc6f6e
刘淇
登录 修改样式
|
138
|
// ========== 【核心登录方法】 ✅ 完整表单校验 + 登录逻辑,和工单页submit提交逻辑一致 ==========
|
c293da23
刘淇
新园林init
|
139
|
const handleLogin = async () => {
|
c293da23
刘淇
新园林init
|
140
|
try {
|
8ddc6f6e
刘淇
登录 修改样式
|
141
142
143
144
145
|
// ✅ 第一步:先执行表单整体校验,通过后再执行登录逻辑(和工单页submitWorkOrder写法一致)
await loginFormRef.value.validate();
isLoading.value = true;
// 执行登录请求
|
c293da23
刘淇
新园林init
|
146
147
148
149
150
|
await userStore.login({
username: form.account,
password: form.password
});
|
e6a04285
刘淇
单图情况 宽高70*70
|
151
|
uni.showToast({ title: '登录成功', icon: 'success', duration: 1000 });
|
c293da23
刘淇
新园林init
|
152
|
|
37c26bd3
刘淇
巡查计划
|
153
|
// 登录成功后跳转首页
|
c293da23
刘淇
新园林init
|
154
|
setTimeout(() => {
|
c293da23
刘淇
新园林init
|
155
156
157
158
|
uni.switchTab({
url: globalConfig.router.tabBarList[1].path,
fail: (err) => {
console.warn('tabBar跳转失败,切换为普通跳转:', err);
|
e6a04285
刘淇
单图情况 宽高70*70
|
159
|
uni.reLaunch({ url: '/pages/workbench/index' });
|
c293da23
刘淇
新园林init
|
160
161
|
}
});
|
e6a04285
刘淇
单图情况 宽高70*70
|
162
|
}, 1000);
|
c293da23
刘淇
新园林init
|
163
|
} catch (err) {
|
8ddc6f6e
刘淇
登录 修改样式
|
164
165
166
167
168
169
170
171
172
|
// ✅ 校验失败/登录失败 统一捕获提示,和工单页异常处理一致
if (!Array.isArray(err)) {
console.error('登录失败:', err);
uni.showToast({
title: err.message || '账号或密码错误,请重试',
icon: 'none',
duration: 2000
});
}
|
c293da23
刘淇
新园林init
|
173
174
175
176
177
178
179
|
} finally {
isLoading.value = false;
}
};
</script>
<style scoped lang="scss">
|
37c26bd3
刘淇
巡查计划
|
180
|
// 核心布局
|
c293da23
刘淇
新园林init
|
181
182
|
.login-page {
min-height: 100vh;
|
8ddc6f6e
刘淇
登录 修改样式
|
183
|
padding: 0;
|
c293da23
刘淇
新园林init
|
184
|
box-sizing: border-box;
|
8ddc6f6e
刘淇
登录 修改样式
|
185
186
187
|
overflow: hidden;
position: relative;
background: #f5f7fa;
|
37c26bd3
刘淇
巡查计划
|
188
189
|
}
|
8ddc6f6e
刘淇
登录 修改样式
|
190
191
|
// 顶部:从左到右 由浅到深 线性渐变 过渡自然柔和 无突兀色块
.top-title {
|
12e66ec8
刘淇
新增树
|
192
|
//background: linear-gradient(120deg, #4299e1 0%, #2970e8 50%, #2563eb 100%);
|
8ddc6f6e
刘淇
登录 修改样式
|
193
|
color: #fff;
|
12e66ec8
刘淇
新增树
|
194
|
padding: 220rpx 30rpx 200rpx;
|
8ddc6f6e
刘淇
登录 修改样式
|
195
|
text-align: left;
|
12e66ec8
刘淇
新增树
|
196
|
//border-bottom-left-radius: 120rpx;
|
8ddc6f6e
刘淇
登录 修改样式
|
197
198
|
position: relative;
z-index: 1;
|
12e66ec8
刘淇
新增树
|
199
200
201
|
//box-shadow: 0 25rpx 40rpx -15rpx rgba(37, 99, 235, 0.3);
background: url("https://img.jichengshanshui.com.cn:28207/appimg/bg.jpg") no-repeat;
background-size: 100% 100%;
|
8ddc6f6e
刘淇
登录 修改样式
|
202
|
.welcome-text {
|
12e66ec8
刘淇
新增树
|
203
|
font-size: 23px;
|
8ddc6f6e
刘淇
登录 修改样式
|
204
205
206
|
display: block;
margin-bottom: 10px;
font-weight: 500;
|
37c26bd3
刘淇
巡查计划
|
207
208
|
}
|
8ddc6f6e
刘淇
登录 修改样式
|
209
210
|
.platform-name {
margin-bottom: 10px;
|
12e66ec8
刘淇
新增树
|
211
|
font-size: 23px;
|
8ddc6f6e
刘淇
登录 修改样式
|
212
213
|
display: block;
opacity: 0.95;
|
37c26bd3
刘淇
巡查计划
|
214
215
216
|
}
}
|
c293da23
刘淇
新园林init
|
217
|
.login-form {
|
8ddc6f6e
刘淇
登录 修改样式
|
218
|
background-color: #fff;
|
12e66ec8
刘淇
新增树
|
219
220
221
222
|
padding: 20px 15px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06);
margin: -90px 20px 0;
|
37c26bd3
刘淇
巡查计划
|
223
224
|
position: relative;
z-index: 10;
|
8ddc6f6e
刘淇
登录 修改样式
|
225
|
box-sizing: border-box;
|
37c26bd3
刘淇
巡查计划
|
226
|
|
37c26bd3
刘淇
巡查计划
|
227
|
.login-title {
|
12e66ec8
刘淇
新增树
|
228
|
font-size: 19px;
|
37c26bd3
刘淇
巡查计划
|
229
|
font-weight: 600;
|
8ddc6f6e
刘淇
登录 修改样式
|
230
|
color: #666;
|
12e66ec8
刘淇
新增树
|
231
232
|
margin-bottom: 15px;
letter-spacing: 1px;
|
37c26bd3
刘淇
巡查计划
|
233
|
}
|
c293da23
刘淇
新园林init
|
234
235
|
}
|
8ddc6f6e
刘淇
登录 修改样式
|
236
237
|
// 适配表单校验的间距
:deep(.u-form-item) {
|
12e66ec8
刘淇
新增树
|
238
|
margin-bottom: 10px;
|
c293da23
刘淇
新园林init
|
239
|
position: relative;
|
8ddc6f6e
刘淇
登录 修改样式
|
240
|
}
|
c293da23
刘淇
新园林init
|
241
|
|
12e66ec8
刘淇
新增树
|
242
|
// 登录按钮
|
8ddc6f6e
刘淇
登录 修改样式
|
243
|
.login-btn {
|
12e66ec8
刘淇
新增树
|
244
|
margin-top: 20px;
|
8ddc6f6e
刘淇
登录 修改样式
|
245
|
width: 100%;
|
12e66ec8
刘淇
新增树
|
246
247
248
249
250
251
252
253
|
height: 44px;
line-height: 44px;
border-radius: 4px;
font-size: 16px;
background: #0A86F4;
box-shadow: 0px 4px 6px 1px rgba(25,94,215,0.5);
border-radius: 23px;
|
c293da23
刘淇
新园林init
|
254
255
|
}
|
12e66ec8
刘淇
新增树
|
256
|
|
8ddc6f6e
刘淇
登录 修改样式
|
257
258
259
|
.copyright {
width: 100%;
text-align: center;
|
12e66ec8
刘淇
新增树
|
260
|
font-size: 12px;
|
8ddc6f6e
刘淇
登录 修改样式
|
261
262
263
264
|
color: #999;
position: fixed;
bottom: 100px;
}
|
c293da23
刘淇
新园林init
|
265
|
</style>
|