|
1
|
<template>
|
1
|
<template>
|
|
2
|
- <view class="normal-login-container">
|
|
|
|
3
|
- <view class="logo-content align-center justify-center flex">
|
|
|
|
4
|
- <image style="width: 100rpx;height: 100rpx;" :src="globalConfig.appInfo.logo" mode="widthFix">
|
|
|
|
5
|
- </image>
|
|
|
|
6
|
- <text class="title">{{globalConfig.appInfo.name}}</text>
|
2
|
+ <view class="login-page">
|
|
|
|
3
|
+ <!-- 自定义头部 -->
|
|
|
|
4
|
+ <view class="header">
|
|
|
|
5
|
+ <image class="header-bg" src="./header_bg.png" />
|
|
|
|
6
|
+ <view class="header-content">
|
|
|
|
7
|
+ <image class="header-logo" src="/static/logo201.png" mode="widthFix" />
|
|
|
|
8
|
+ <text class="header-title">欢迎登录楚江销售系统</text>
|
|
|
|
9
|
+ </view>
|
|
7
|
</view>
|
10
|
</view>
|
|
8
|
- <view class="login-form-content">
|
|
|
|
9
|
- <view class="input-item flex align-center">
|
|
|
|
10
|
- <view class="iconfont icon-user icon"></view>
|
|
|
|
11
|
- <input v-model="loginForm.username" class="input" type="text" placeholder="请输入账号" maxlength="30" />
|
11
|
+
|
|
|
|
12
|
+ <!-- 表单区 -->
|
|
|
|
13
|
+ <view class="form">
|
|
|
|
14
|
+ <view class="input-item">
|
|
|
|
15
|
+ <input v-model="loginForm.username" class="input" type="text" placeholder="请输入账号" placeholder-style="color:#aaa;" maxlength="30" />
|
|
12
|
</view>
|
16
|
</view>
|
|
13
|
- <view class="input-item flex align-center">
|
|
|
|
14
|
- <view class="iconfont icon-password icon"></view>
|
|
|
|
15
|
- <input v-model="loginForm.password" type="password" class="input" placeholder="请输入密码" maxlength="20" />
|
17
|
+ <view class="input-item">
|
|
|
|
18
|
+ <input v-model="loginForm.password" type="password" class="input" placeholder="请输入密码" placeholder-style="color:#aaa;" maxlength="20" />
|
|
16
|
</view>
|
19
|
</view>
|
|
17
|
- <view class="input-item flex align-center" style="width: 60%;margin: 0px;" v-if="captchaEnabled">
|
|
|
|
18
|
- <view class="iconfont icon-code icon"></view>
|
|
|
|
19
|
- <input v-model="loginForm.captcha" type="text" class="input" placeholder="请输入验证码" maxlength="4" />
|
|
|
|
20
|
- <view class="login-code">
|
|
|
|
21
|
- <image :src="codeUrl" @click="getCode" class="login-code-img"></image>
|
|
|
|
22
|
- </view>
|
20
|
+ <view class="input-row" v-if="captchaEnabled">
|
|
|
|
21
|
+ <input v-model="loginForm.captcha" type="text" class="input" placeholder="请输入验证码" placeholder-style="color:#aaa;" maxlength="4" />
|
|
|
|
22
|
+ <image :src="codeUrl" @click="getCode" class="captcha-img" />
|
|
23
|
</view>
|
23
|
</view>
|
|
24
|
- <view class="action-btn">
|
|
|
|
25
|
- <button @click="handleLogin" class="login-btn cu-btn block bg-blue lg round">登录</button>
|
24
|
+
|
|
|
|
25
|
+ <view class="agree-row">
|
|
|
|
26
|
+ <uni-data-checkbox v-model="agreeVal" :localdata="agreeOptions" :multiple="true" />
|
|
|
|
27
|
+ <text @click="handleUserAgrement" class="link">《用户协议》</text>
|
|
|
|
28
|
+ <text @click="handlePrivacy" class="link">《隐私协议》</text>
|
|
26
|
</view>
|
29
|
</view>
|
|
|
|
30
|
+
|
|
|
|
31
|
+ <button @click="handleLogin" :disabled="Array.isArray(agreeVal) ? agreeVal.length===0 : !agreeVal" class="login-btn">立即登录</button>
|
|
|
|
32
|
+
|
|
27
|
<view class="reg text-center" v-if="register">
|
33
|
<view class="reg text-center" v-if="register">
|
|
28
|
<text class="text-grey1">没有账号?</text>
|
34
|
<text class="text-grey1">没有账号?</text>
|
|
29
|
<text @click="handleUserRegister" class="text-blue">立即注册</text>
|
35
|
<text @click="handleUserRegister" class="text-blue">立即注册</text>
|
|
30
|
</view>
|
36
|
</view>
|
|
31
|
- <view class="xieyi text-center">
|
|
|
|
32
|
- <text class="text-grey1">登录即代表同意</text>
|
|
|
|
33
|
- <text @click="handleUserAgrement" class="text-blue">《用户协议》</text>
|
|
|
|
34
|
- <text @click="handlePrivacy" class="text-blue">《隐私协议》</text>
|
|
|
|
35
|
- </view>
|
|
|
|
36
|
</view>
|
37
|
</view>
|
|
37
|
-
|
|
|
|
38
|
</view>
|
38
|
</view>
|
|
39
|
</template>
|
39
|
</template>
|
|
40
|
|
40
|
|
|
41
|
<script>
|
41
|
<script>
|
|
42
|
- import {
|
|
|
|
43
|
- getCodeImg
|
|
|
|
44
|
- } from '@/api/login'
|
42
|
+ import { getCodeImg } from '@/api/login'
|
|
45
|
import config from '@/config'
|
43
|
import config from '@/config'
|
|
46
|
export default {
|
44
|
export default {
|
|
47
|
data() {
|
45
|
data() {
|
|
@@ -50,6 +48,8 @@ |
|
@@ -50,6 +48,8 @@ |
|
50
|
globalConfig: getApp().globalData.config,
|
48
|
globalConfig: getApp().globalData.config,
|
|
51
|
codeUrl: "",
|
49
|
codeUrl: "",
|
|
52
|
captchaEnabled: false,
|
50
|
captchaEnabled: false,
|
|
|
|
51
|
+ agreeVal: [],
|
|
|
|
52
|
+ agreeOptions: [{ text: '已预览并同意', value: '1' }],
|
|
53
|
// 用户注册开关
|
53
|
// 用户注册开关
|
|
54
|
register: false,
|
54
|
register: false,
|
|
55
|
//默认登录账号和密码
|
55
|
//默认登录账号和密码
|
|
@@ -72,7 +72,6 @@ |
|
@@ -72,7 +72,6 @@ |
|
72
|
// 隐私协议
|
72
|
// 隐私协议
|
|
73
|
handlePrivacy() {
|
73
|
handlePrivacy() {
|
|
74
|
let site = this.globalConfig.appInfo.agreements[0]
|
74
|
let site = this.globalConfig.appInfo.agreements[0]
|
|
75
|
-
|
|
|
|
76
|
this.$tab.navigateTo('/pages/common/webview/index?title=' + site.title + '&url=' + site.url)
|
75
|
this.$tab.navigateTo('/pages/common/webview/index?title=' + site.title + '&url=' + site.url)
|
|
77
|
},
|
76
|
},
|
|
78
|
// 用户协议
|
77
|
// 用户协议
|
|
@@ -83,7 +82,6 @@ |
|
@@ -83,7 +82,6 @@ |
|
83
|
// 获取图形验证码
|
82
|
// 获取图形验证码
|
|
84
|
getCode() {
|
83
|
getCode() {
|
|
85
|
getCodeImg().then(res => {
|
84
|
getCodeImg().then(res => {
|
|
86
|
- console.log('getCodeImgres', res)
|
|
|
|
87
|
this.captchaEnabled = res.data.captchaEnabled === undefined ? true : res.data.captchaEnabled
|
85
|
this.captchaEnabled = res.data.captchaEnabled === undefined ? true : res.data.captchaEnabled
|
|
88
|
if (this.captchaEnabled) {
|
86
|
if (this.captchaEnabled) {
|
|
89
|
this.codeUrl = res.data.image
|
87
|
this.codeUrl = res.data.image
|
|
@@ -117,91 +115,115 @@ |
|
@@ -117,91 +115,115 @@ |
|
117
|
},
|
115
|
},
|
|
118
|
// 登录成功后,处理函数
|
116
|
// 登录成功后,处理函数
|
|
119
|
loginSuccess(result) {
|
117
|
loginSuccess(result) {
|
|
120
|
- // alert("登录成功")
|
|
|
|
121
|
- //跳转到首页
|
|
|
|
122
|
this.$tab.reLaunch('/pages/index')
|
118
|
this.$tab.reLaunch('/pages/index')
|
|
123
|
-
|
|
|
|
124
|
}
|
119
|
}
|
|
125
|
}
|
120
|
}
|
|
126
|
}
|
121
|
}
|
|
127
|
</script>
|
122
|
</script>
|
|
128
|
|
123
|
|
|
129
|
-<style lang="scss">
|
|
|
|
130
|
- page {
|
|
|
|
131
|
- background-color: #ffffff;
|
|
|
|
132
|
- }
|
|
|
|
133
|
-
|
|
|
|
134
|
- .normal-login-container {
|
|
|
|
135
|
- width: 100%;
|
124
|
+<style scoped lang="scss">
|
|
|
|
125
|
+ page { background-color: #fff; }
|
|
136
|
|
126
|
|
|
137
|
- .logo-content {
|
|
|
|
138
|
- width: 100%;
|
|
|
|
139
|
- font-size: 21px;
|
|
|
|
140
|
- text-align: center;
|
|
|
|
141
|
- padding-top: 15%;
|
127
|
+ .login-page { width: 100%; height: 100%; }
|
|
142
|
|
128
|
|
|
143
|
- image {
|
|
|
|
144
|
- border-radius: 4px;
|
|
|
|
145
|
- }
|
|
|
|
146
|
-
|
|
|
|
147
|
- .title {
|
|
|
|
148
|
- margin-left: 10px;
|
|
|
|
149
|
- }
|
129
|
+ .header {
|
|
|
|
130
|
+ position: relative;
|
|
|
|
131
|
+ height: 500rpx;
|
|
|
|
132
|
+ overflow: hidden;
|
|
|
|
133
|
+ background: pink;
|
|
|
|
134
|
+ &-bg {
|
|
|
|
135
|
+ width: 100%;
|
|
|
|
136
|
+ height: 100%;
|
|
|
|
137
|
+ }
|
|
|
|
138
|
+ &-content {
|
|
|
|
139
|
+ position: absolute;
|
|
|
|
140
|
+ left: 0;
|
|
|
|
141
|
+ right: 0;
|
|
|
|
142
|
+ top: 192rpx;
|
|
|
|
143
|
+ display: flex;
|
|
|
|
144
|
+ flex-direction: column;
|
|
|
|
145
|
+ align-items: center;
|
|
|
|
146
|
+ justify-content: center;
|
|
|
|
147
|
+ }
|
|
|
|
148
|
+ &-logo {
|
|
|
|
149
|
+ width: 298rpx; height: 120rpx;
|
|
|
|
150
|
+ margin-bottom: 60rpx;
|
|
|
|
151
|
+ }
|
|
|
|
152
|
+ &-title {
|
|
|
|
153
|
+ height: 60rpx;
|
|
|
|
154
|
+ font-weight: 600;
|
|
|
|
155
|
+ font-size: 44rpx;
|
|
|
|
156
|
+ color: rgba(0,0,0,0.9);
|
|
|
|
157
|
+ line-height: 60rpx;
|
|
|
|
158
|
+ }
|
|
|
|
159
|
+ }
|
|
|
|
160
|
+
|
|
|
|
161
|
+ .form {
|
|
|
|
162
|
+ margin: 34rpx auto 0;
|
|
|
|
163
|
+ width: 626rpx;
|
|
|
|
164
|
+ }
|
|
|
|
165
|
+ .input-item {
|
|
|
|
166
|
+ margin-bottom: 40rpx;
|
|
|
|
167
|
+ background-color: #fff;
|
|
|
|
168
|
+ border: 1px solid #F1F1F1;
|
|
|
|
169
|
+ height: 96rpx;
|
|
|
|
170
|
+ border-radius: 8rpx;
|
|
|
|
171
|
+ display: flex;
|
|
|
|
172
|
+ align-items: center;
|
|
|
|
173
|
+ }
|
|
|
|
174
|
+ .input { width: 100%; font-size: 32rpx; padding: 0 24rpx; }
|
|
|
|
175
|
+ .input-row {
|
|
|
|
176
|
+ margin: 30rpx auto;
|
|
|
|
177
|
+ display: flex;
|
|
|
|
178
|
+ align-items: center;
|
|
|
|
179
|
+ background-color: #fff;
|
|
|
|
180
|
+ border: 1px solid #e5e7eb;
|
|
|
|
181
|
+ height: 88rpx;
|
|
|
|
182
|
+ border-radius: 18rpx;
|
|
|
|
183
|
+ }
|
|
|
|
184
|
+ .captcha-img { width: 200rpx; height: 88rpx; border-left: 1px solid #e5e7eb; }
|
|
|
|
185
|
+
|
|
|
|
186
|
+ .agree-row {
|
|
|
|
187
|
+ display: flex;
|
|
|
|
188
|
+ align-items: center;
|
|
|
|
189
|
+ color: rgba(0,0,0,0.9);
|
|
|
|
190
|
+ margin-top: 8rpx;
|
|
|
|
191
|
+ font-size: 28rpx;
|
|
|
|
192
|
+
|
|
|
|
193
|
+ .link {
|
|
|
|
194
|
+ color: #3D48A3;
|
|
|
|
195
|
+ }
|
|
|
|
196
|
+ /* 关键修改:使用深度选择器修改checkbox样式 */
|
|
|
|
197
|
+ ::v-deep .uni-data-checkbox {
|
|
|
|
198
|
+ /* 未选中时的颜色 */
|
|
|
|
199
|
+ --checkbox-border-color: #ccc;
|
|
|
|
200
|
+ /* 选中后的颜色 */
|
|
|
|
201
|
+ --checkbox-active-color: red;
|
|
|
|
202
|
+ /* 选中后的背景色 */
|
|
|
|
203
|
+ --checkbox-background-color: ;
|
|
150
|
}
|
204
|
}
|
|
151
|
|
205
|
|
|
152
|
- .login-form-content {
|
|
|
|
153
|
- text-align: center;
|
|
|
|
154
|
- margin: 20px auto;
|
|
|
|
155
|
- margin-top: 15%;
|
|
|
|
156
|
- width: 80%;
|
|
|
|
157
|
-
|
|
|
|
158
|
- .input-item {
|
|
|
|
159
|
- margin: 20px auto;
|
|
|
|
160
|
- background-color: #f5f6f7;
|
|
|
|
161
|
- height: 45px;
|
|
|
|
162
|
- border-radius: 20px;
|
|
|
|
163
|
-
|
|
|
|
164
|
- .icon {
|
|
|
|
165
|
- font-size: 38rpx;
|
|
|
|
166
|
- margin-left: 10px;
|
|
|
|
167
|
- color: #999;
|
|
|
|
168
|
- }
|
|
|
|
169
|
-
|
|
|
|
170
|
- .input {
|
|
|
|
171
|
- width: 100%;
|
|
|
|
172
|
- font-size: 14px;
|
|
|
|
173
|
- line-height: 20px;
|
|
|
|
174
|
- text-align: left;
|
|
|
|
175
|
- padding-left: 15px;
|
|
|
|
176
|
- }
|
|
|
|
177
|
-
|
|
|
|
178
|
- }
|
|
|
|
179
|
-
|
|
|
|
180
|
- .login-btn {
|
|
|
|
181
|
- margin-top: 40px;
|
|
|
|
182
|
- height: 45px;
|
|
|
|
183
|
- }
|
|
|
|
184
|
-
|
|
|
|
185
|
- .reg {
|
|
|
|
186
|
- margin-top: 15px;
|
|
|
|
187
|
- }
|
|
|
|
188
|
-
|
|
|
|
189
|
- .xieyi {
|
|
|
|
190
|
- color: #333;
|
|
|
|
191
|
- margin-top: 20px;
|
|
|
|
192
|
- }
|
|
|
|
193
|
-
|
|
|
|
194
|
- .login-code {
|
|
|
|
195
|
- height: 38px;
|
|
|
|
196
|
- float: right;
|
|
|
|
197
|
-
|
|
|
|
198
|
- .login-code-img {
|
|
|
|
199
|
- height: 38px;
|
|
|
|
200
|
- position: absolute;
|
|
|
|
201
|
- margin-left: 10px;
|
|
|
|
202
|
- width: 200rpx;
|
|
|
|
203
|
- }
|
|
|
|
204
|
- }
|
206
|
+ /* 调整checkbox与文字的对齐方式 */
|
|
|
|
207
|
+ ::v-deep .uni-data-checkbox__icon {
|
|
|
|
208
|
+ margin-right: 6rpx;
|
|
205
|
}
|
209
|
}
|
|
206
|
}
|
210
|
}
|
|
207
|
-</style> |
|
|
|
|
|
211
|
+
|
|
|
|
212
|
+ .login-btn {
|
|
|
|
213
|
+ width: 100%;
|
|
|
|
214
|
+ height: 88rpx;
|
|
|
|
215
|
+ line-height: 88rpx;
|
|
|
|
216
|
+ border-radius: 8rpx;
|
|
|
|
217
|
+ margin-top: 64rpx;
|
|
|
|
218
|
+ background-color: #3D48A3;
|
|
|
|
219
|
+ color: #fff;
|
|
|
|
220
|
+ font-size: 32rpx;
|
|
|
|
221
|
+ text-align: center;
|
|
|
|
222
|
+ }
|
|
|
|
223
|
+ .login-btn[disabled] {
|
|
|
|
224
|
+ background-color: rgba(61,72,163,0.5);
|
|
|
|
225
|
+ color: #fff;
|
|
|
|
226
|
+ }
|
|
|
|
227
|
+
|
|
|
|
228
|
+ .reg { margin-top: 20rpx; text-align: center; }
|
|
|
|
229
|
+</style> |