@lambo-design/login-form 1.0.0-beta.36 → 1.0.0-beta.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/login-form.vue +6 -1
- package/src/login-qr.vue +106 -24
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lambo-design/login-form",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.39",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"author": "lambo",
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"registry": "https://registry.npmjs.org/"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
|
-
"@lambo-design/
|
|
14
|
-
"@lambo-design/
|
|
13
|
+
"@lambo-design/shared": "^1.0.0-beta.364",
|
|
14
|
+
"@lambo-design/core": "^4.7.1-beta.178"
|
|
15
15
|
},
|
|
16
16
|
"scripts": {
|
|
17
17
|
"release": "pnpm release-beta && git push --follow-tags && pnpm re-publish",
|
package/src/login-form.vue
CHANGED
|
@@ -332,7 +332,7 @@ export default {
|
|
|
332
332
|
this.$Message.error(this.t('login-form.box.form-rule-click-login'));
|
|
333
333
|
}
|
|
334
334
|
if (valid && ((this.captchaMethod == this.t('login-form.other.captcha-method-slide-image')
|
|
335
|
-
&& this.isSlideVerify) || (isWordClickMethod && this.isWordClickVerify)
|
|
335
|
+
&& this.isSlideVerify) || (isWordClickMethod && this.isWordClickVerify)
|
|
336
336
|
|| (!isWordClickMethod && this.captchaMethod != this.t('login-form.other.captcha-method-slide-image')))) {
|
|
337
337
|
let params = {
|
|
338
338
|
userName: this.form.userName,
|
|
@@ -377,6 +377,11 @@ export default {
|
|
|
377
377
|
mounted() {
|
|
378
378
|
this.getCaptcha();
|
|
379
379
|
this.getLocalStorage();
|
|
380
|
+
// 新增:初始化时检查 channelDataList
|
|
381
|
+
if (this.channelDataList && this.channelDataList.length > 0 && !this.selectedLoginMethod) {
|
|
382
|
+
this.selectedLoginMethod = this.channelDataList[0].channelName;
|
|
383
|
+
this.$emit('login-method-change', this.selectedLoginMethod);
|
|
384
|
+
}
|
|
380
385
|
}
|
|
381
386
|
}
|
|
382
387
|
</script>
|
package/src/login-qr.vue
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="lambo-login-qrcode">
|
|
2
|
+
<div class="lambo-login-qrcode" :class="wxQrClass">
|
|
3
3
|
<!-- 二维码加载状态 -->
|
|
4
4
|
<div v-if="loading" class="qrcode-loading">
|
|
5
5
|
<Icon type="ios-loading" size="24" spin></Icon>
|
|
@@ -60,6 +60,22 @@ export default {
|
|
|
60
60
|
qrType:{
|
|
61
61
|
type: Array,
|
|
62
62
|
default: ['0','1']
|
|
63
|
+
},
|
|
64
|
+
// 企业微信登录模式: 'saas' (SaaS版) 或 'private' (私有化版)
|
|
65
|
+
wxLoginMode: {
|
|
66
|
+
type: String,
|
|
67
|
+
default: 'saas',
|
|
68
|
+
validator: (value) => ['saas', 'private'].includes(value)
|
|
69
|
+
},
|
|
70
|
+
// 私有化版本配置(当 wxLoginMode 为 'private' 时使用)
|
|
71
|
+
privateWxConfig: {
|
|
72
|
+
type: Object,
|
|
73
|
+
default: () => ({
|
|
74
|
+
appId: '',
|
|
75
|
+
agentId: '',
|
|
76
|
+
redirectUri: '',
|
|
77
|
+
sdkUrl: ''
|
|
78
|
+
})
|
|
63
79
|
}
|
|
64
80
|
},
|
|
65
81
|
data() {
|
|
@@ -80,6 +96,9 @@ export default {
|
|
|
80
96
|
},
|
|
81
97
|
isDd(){
|
|
82
98
|
return _.some(this.qrType, (item) => item ==='1');
|
|
99
|
+
},
|
|
100
|
+
wxQrClass() {
|
|
101
|
+
return this.wxLoginMode === 'private' ? 'wx-private' : ''
|
|
83
102
|
}
|
|
84
103
|
},
|
|
85
104
|
mounted() {
|
|
@@ -93,12 +112,19 @@ export default {
|
|
|
93
112
|
methods: {
|
|
94
113
|
loadWxWorkSdk() {
|
|
95
114
|
return new Promise((resolve) => {
|
|
96
|
-
if (typeof ww !== 'undefined') {
|
|
115
|
+
if (typeof ww !== 'undefined' || typeof WwLogin !== 'undefined') {
|
|
97
116
|
resolve();
|
|
98
117
|
return;
|
|
99
118
|
}
|
|
100
119
|
const script = document.createElement('script');
|
|
101
|
-
|
|
120
|
+
// 根据登录模式选择不同的SDK
|
|
121
|
+
if (this.wxLoginMode === 'private') {
|
|
122
|
+
// 私有化版本SDK,优先使用传入的地址
|
|
123
|
+
script.src = this.privateWxConfig.sdkUrl;
|
|
124
|
+
} else {
|
|
125
|
+
// SaaS版本SDK
|
|
126
|
+
script.src = 'https://wwcdn.weixin.qq.com/node/open/js/wecom-jssdk-2.3.3.js';
|
|
127
|
+
}
|
|
102
128
|
script.onload = resolve;
|
|
103
129
|
document.head.appendChild(script);
|
|
104
130
|
});
|
|
@@ -126,10 +152,39 @@ export default {
|
|
|
126
152
|
if (!document.getElementById('ww_login') || this.wwLoginInstance) {
|
|
127
153
|
return;
|
|
128
154
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
155
|
+
|
|
156
|
+
if (this.wxLoginMode === 'private') {
|
|
157
|
+
// 私有化版本初始化
|
|
158
|
+
await this.initPrivateWwLogin();
|
|
159
|
+
} else {
|
|
160
|
+
// SaaS版本初始化
|
|
161
|
+
await this.initSaasWwLogin();
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
|
|
165
|
+
// 私有化版本企业微信登录初始化
|
|
166
|
+
async initPrivateWwLogin() {
|
|
167
|
+
try {
|
|
168
|
+
this.wwLoginInstance = window.WwLogin({
|
|
169
|
+
"id": "ww_login",
|
|
170
|
+
"appid": this.privateWxConfig.appId,
|
|
171
|
+
"agentid": this.privateWxConfig.agentId,
|
|
172
|
+
"redirect_uri": this.privateWxConfig.redirectUri,
|
|
173
|
+
"state": 'state_' + Date.now(),
|
|
174
|
+
"href": ""
|
|
175
|
+
});
|
|
176
|
+
console.log('✅ 私有化企业微信登录组件初始化成功');
|
|
177
|
+
} catch (error) {
|
|
178
|
+
console.error('❌ 初始化私有化企业微信登录组件失败:', error);
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
// SaaS版本企业微信登录初始化
|
|
183
|
+
async initSaasWwLogin() {
|
|
184
|
+
let appId;
|
|
185
|
+
let agentId;
|
|
186
|
+
let res = await ajax.get(config.authServerContext + '/sso/wxcp/getWxInfo');
|
|
187
|
+
if (res.data.code === 1) {
|
|
133
188
|
appId = res.data.data.appId;
|
|
134
189
|
agentId = res.data.data.agentId;
|
|
135
190
|
}
|
|
@@ -150,9 +205,9 @@ export default {
|
|
|
150
205
|
onLoginSuccess: this.handleLoginSuccess,
|
|
151
206
|
onLoginFail: this.handleLoginFail
|
|
152
207
|
});
|
|
153
|
-
console.log('✅ 企业微信登录组件初始化成功');
|
|
208
|
+
console.log('✅ SaaS企业微信登录组件初始化成功');
|
|
154
209
|
} catch (error) {
|
|
155
|
-
console.error('❌
|
|
210
|
+
console.error('❌ 初始化SaaS企业微信登录组件失败:', error);
|
|
156
211
|
}
|
|
157
212
|
},
|
|
158
213
|
handleLoginSuccess({ code }) {
|
|
@@ -437,13 +492,50 @@ export default {
|
|
|
437
492
|
|
|
438
493
|
|
|
439
494
|
/* 企业微信登录组件容器 */
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
495
|
+
.wx-saas {
|
|
496
|
+
#ww_login {
|
|
497
|
+
width: 100% !important;
|
|
498
|
+
max-width: 220px !important;
|
|
499
|
+
margin: 0 auto !important;
|
|
500
|
+
display: block !important;
|
|
501
|
+
}
|
|
502
|
+
.lambo-login-qrcode ::v-deep #ww_login iframe,
|
|
503
|
+
.qrcode-img-wrapper ::v-deep iframe {
|
|
504
|
+
position: relative;
|
|
505
|
+
top: -60px !important;
|
|
506
|
+
height: 360px !important;
|
|
507
|
+
border: none !important;
|
|
508
|
+
width: 100% !important;
|
|
509
|
+
overflow: hidden !important;
|
|
510
|
+
}
|
|
445
511
|
}
|
|
512
|
+
.wx-private {
|
|
513
|
+
#ww_login {
|
|
514
|
+
width: 100% !important;
|
|
515
|
+
margin: 0 auto !important;
|
|
516
|
+
display: block !important;
|
|
517
|
+
}
|
|
518
|
+
.lambo-login-qrcode ::v-deep #ww_login iframe,
|
|
519
|
+
.qrcode-img-wrapper ::v-deep iframe {
|
|
520
|
+
position: relative;
|
|
521
|
+
top: 25px !important;
|
|
522
|
+
height: 400px !important;
|
|
523
|
+
border: none !important;
|
|
524
|
+
width: 100% !important;
|
|
525
|
+
overflow: hidden !important;
|
|
526
|
+
}
|
|
446
527
|
|
|
528
|
+
.qrcode-img-wrapper {
|
|
529
|
+
height: 400px !important;
|
|
530
|
+
min-height: 260px !important;
|
|
531
|
+
display: flex;
|
|
532
|
+
justify-content: center;
|
|
533
|
+
align-items: center;
|
|
534
|
+
overflow: hidden;
|
|
535
|
+
width: 100%;
|
|
536
|
+
position: relative;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
447
539
|
/* 钉钉登录组件容器 */
|
|
448
540
|
#dingtalk_login {
|
|
449
541
|
width: 100% !important;
|
|
@@ -454,16 +546,6 @@ export default {
|
|
|
454
546
|
overflow: hidden;
|
|
455
547
|
}
|
|
456
548
|
|
|
457
|
-
.lambo-login-qrcode ::v-deep #ww_login iframe,
|
|
458
|
-
.qrcode-img-wrapper ::v-deep iframe {
|
|
459
|
-
position: relative;
|
|
460
|
-
top: -60px !important;
|
|
461
|
-
height: 360px !important;
|
|
462
|
-
border: none !important;
|
|
463
|
-
width: 100% !important;
|
|
464
|
-
overflow: hidden !important;
|
|
465
|
-
}
|
|
466
|
-
|
|
467
549
|
/* 钉钉iframe样式 - 减少上方留白 */
|
|
468
550
|
.lambo-login-qrcode ::v-deep #dingtalk_login iframe,
|
|
469
551
|
.qrcode-img-wrapper ::v-deep iframe {
|