修复谷歌登录

This commit is contained in:
X1627315083
2025-09-22 14:09:08 +08:00
parent ab2bdc25f7
commit da241402f2
4 changed files with 62 additions and 26 deletions

3
components.d.ts vendored
View File

@@ -10,10 +10,12 @@ declare module 'vue' {
export interface GlobalComponents { export interface GlobalComponents {
ABadge: typeof import('ant-design-vue/es')['Badge'] ABadge: typeof import('ant-design-vue/es')['Badge']
ACheckbox: typeof import('ant-design-vue/es')['Checkbox'] ACheckbox: typeof import('ant-design-vue/es')['Checkbox']
AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider']
ADrawer: typeof import('ant-design-vue/es')['Drawer'] ADrawer: typeof import('ant-design-vue/es')['Drawer']
AImage: typeof import('ant-design-vue/es')['Image'] AImage: typeof import('ant-design-vue/es')['Image']
AInputNumber: typeof import('ant-design-vue/es')['InputNumber'] AInputNumber: typeof import('ant-design-vue/es')['InputNumber']
AModal: typeof import('ant-design-vue/es')['Modal'] AModal: typeof import('ant-design-vue/es')['Modal']
APagination: typeof import('ant-design-vue/es')['Pagination']
APopover: typeof import('ant-design-vue/es')['Popover'] APopover: typeof import('ant-design-vue/es')['Popover']
ARangePicker: typeof import('ant-design-vue/es')['RangePicker'] ARangePicker: typeof import('ant-design-vue/es')['RangePicker']
ASelect: typeof import('ant-design-vue/es')['Select'] ASelect: typeof import('ant-design-vue/es')['Select']
@@ -25,6 +27,7 @@ declare module 'vue' {
ATabPane: typeof import('ant-design-vue/es')['TabPane'] ATabPane: typeof import('ant-design-vue/es')['TabPane']
ATabs: typeof import('ant-design-vue/es')['Tabs'] ATabs: typeof import('ant-design-vue/es')['Tabs']
AUpload: typeof import('ant-design-vue/es')['Upload'] AUpload: typeof import('ant-design-vue/es')['Upload']
ElCascader: typeof import('element-plus/es')['ElCascader']
RouterLink: typeof import('vue-router')['RouterLink'] RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView'] RouterView: typeof import('vue-router')['RouterView']
} }

View File

@@ -27,10 +27,10 @@
<div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div> <div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div>
<div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div> <div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div>
</div> --> </div> -->
<div class="gmail_btn" @click="toGmailLogin"> <div class="gmail_btn">
<div v-if="!userDetail.accountExtendList?.Google" class="gallery_btn forbidden">{{ $t('frontPage.BindNow') }}</div> <div v-if="!userDetail.accountExtendList?.Google" class="gallery_btn">{{ $t('frontPage.BindNow') }}</div>
<!-- <div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div> --> <div v-show="!userDetail.accountExtendList?.Google" id="g_id_bind"></div>
<div v-if="userDetail.accountExtendList?.Google" class="gallery_btn forbidden" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div> <div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div>
<!-- <div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div> --> <!-- <div v-if="userDetail.accountExtendList?.Google" class="gallery_btn" @click="ungroupGoogleModel">{{ $t('frontPage.Unbind') }}</div> -->
</div> </div>
</div> </div>
@@ -138,12 +138,13 @@ export default defineComponent({
bindPageDom.bindEmail.init('Modify') bindPageDom.bindEmail.init('Modify')
} }
const toGmailLogin = ()=>{
message.info(t('account.canNotUtilize'))
}
onMounted(async ()=>{ onMounted(async ()=>{
return let GOOGLE_CLIENT_ID
let GOOGLE_CLIENT_ID = '29310152396-nnsd3h533fld665oguu8ovrt1nukmt46.apps.googleusercontent.com' if(import.meta.env.VITE_USER_NODE_ENV == 'development'){
GOOGLE_CLIENT_ID = '157095842121-kdd1fdf8m8nudvj9sprstb2k2prnf9e4.apps.googleusercontent.com'
}else{
GOOGLE_CLIENT_ID = '29310152396-nnsd3h533fld665oguu8ovrt1nukmt46.apps.googleusercontent.com'
}
var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`); var existingScript = document.querySelector(`script[src="${data.scriptSrc}"]`);
if(!window.isAddGmail){ if(!window.isAddGmail){
if(!existingScript){ if(!existingScript){
@@ -206,7 +207,6 @@ export default defineComponent({
ungroupGoogleModel, ungroupGoogleModel,
ungroupWeiXinModel, ungroupWeiXinModel,
modifyEmail, modifyEmail,
toGmailLogin,
} }
}, },
data(){ data(){
@@ -271,14 +271,21 @@ export default defineComponent({
} }
>.gmail_btn{ >.gmail_btn{
position: relative; position: relative;
border-radius: 4rem;
overflow: hidden;
> .gallery_btn{
position: relative;
z-index: 2;
pointer-events: none;
}
#g_id_bind{ #g_id_bind{
position: absolute; position: absolute;
left: 0; left: 0;
top: 0; top: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
opacity: 0; // opacity: 0;
z-index: 2; z-index: 1;
:deep(.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe){ :deep(.nsm7Bb-HzV7m-LgbsSe.Bz112c-LgbsSe){
width: 100%; width: 100%;
} }

View File

@@ -3,8 +3,8 @@
<!-- 谷歌登录 --> <!-- 谷歌登录 -->
<div class="g_id_signin" id="g_id_signin"> <div class="g_id_signin" id="g_id_signin">
</div> </div>
<div class="icon">
<!-- <div class="icon" @click="toGmailLogin"> --> <!-- <div class="icon" @click="toGmailLogin"> -->
<div class="icon">
<img src="@/assets/images/loginPage/gmailIcon.svg" alt=""> <img src="@/assets/images/loginPage/gmailIcon.svg" alt="">
<span>{{ $props.text }}</span> <span>{{ $props.text }}</span>
</div> </div>
@@ -26,6 +26,20 @@
}, },
setup(props, { emit }) { setup(props, { emit }) {
const {t} = useI18n() const {t} = useI18n()
function decodeJWT(token) {
let base64Url = token.split(".")[1];
let base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
let jsonPayload = decodeURIComponent(
atob(base64)
.split("")
.map(function (c) {
return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
})
.join("")
);
return JSON.parse(jsonPayload);
}
const handleCredentialResponse = async (response) => { const handleCredentialResponse = async (response) => {
// 获取回调响应的凭证数据 然后拿这个凭证给后台后台jwt进行解析获取登录信息 // 获取回调响应的凭证数据 然后拿这个凭证给后台后台jwt进行解析获取登录信息
console.log("Encoded JWT ID token: " + response.credential); console.log("Encoded JWT ID token: " + response.credential);
@@ -63,11 +77,11 @@
window.isAddGmail = true window.isAddGmail = true
await new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
const script = document.createElement("script"); const script = document.createElement("script");
script.src = data.scriptSrc
script.onload=()=>{ script.onload=()=>{
resolve() resolve()
} }
document.body.appendChild(script); document.body.appendChild(script);
script.src = data.scriptSrc
}) })
} }
window.google.accounts.id.initialize({ window.google.accounts.id.initialize({
@@ -79,15 +93,16 @@
ux_mode:"popup", ux_mode:"popup",
itp_support:true, itp_support:true,
}); });
console.log(document.querySelector('.Container #g_id_signin'))
window.google.accounts.id.renderButton( window.google.accounts.id.renderButton(
document.querySelector('.Container #g_id_signin'), document.querySelector('.Container #g_id_signin'),
{ {
type:"standard",//icon为只有一个icon type:"standard",//icon为只有一个icon
shape:"circle", shape:"circle",
theme:"outline", theme:"outline",
size:"large", size:"large",
logo_alignment:"center", logo_alignment:"center",
}); });
} }
} }
const toGmailLogin = ()=>{ const toGmailLogin = ()=>{
@@ -132,7 +147,6 @@
// width: 100%; // width: 100%;
// height: 100%; // height: 100%;
// } // }
// } // }
.icon{ .icon{
// width: 40px; // width: 40px;
@@ -176,15 +190,20 @@
position: absolute; position: absolute;
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow: hidden; // overflow: hidden;
top: 0; top: 0;
left: 0; left: 0;
opacity: 0; // opacity: 0;
.S9gUrf-YoZ4jf{ .S9gUrf-YoZ4jf{
} }
:deep(.S9gUrf-YoZ4jf){ :deep(.S9gUrf-YoZ4jf){
width: 100%; width: 100%;
height: 100%; height: 100%;
iframe{
zoom: 3;
}
} }
} }
&:hover{ &:hover{

View File

@@ -408,6 +408,7 @@ export default defineComponent({
if(res.errCode == 0){ if(res.errCode == 0){
file.imgUrl = res.data.url; file.imgUrl = res.data.url;
file.id = res.data.id file.id = res.data.id
data.currentList.forEach((listItem:any)=>listItem.isChecked = false)
data.fileList.forEach((listItem:any)=>{ data.fileList.forEach((listItem:any)=>{
if(listItem.id == file.id){ if(listItem.id == file.id){
listItem.isChecked = true listItem.isChecked = true
@@ -415,7 +416,6 @@ export default defineComponent({
listItem.isChecked = false listItem.isChecked = false
} }
}) })
data.currentList.forEach((listItem:any)=>listItem.isChecked = false)
file.type = 'ProductElement' file.type = 'ProductElement'
// if(props.productimgMenu.value == 'Relight'){ // if(props.productimgMenu.value == 'Relight'){
// file.type = "ToProductImage" // file.type = "ToProductImage"
@@ -553,6 +553,13 @@ export default defineComponent({
watch(()=>store.state.HomeStoreModule.uploadElement.length,(newVal,oldVal)=>{ watch(()=>store.state.HomeStoreModule.uploadElement.length,(newVal,oldVal)=>{
if(props.isDesignPage)return if(props.isDesignPage)return
data.fileList = store.state.HomeStoreModule.uploadElement data.fileList = store.state.HomeStoreModule.uploadElement
data.fileList.forEach((listItem:any)=>{
if(listItem.id == data.selectImg.id){
listItem.isChecked = true
}else{
listItem.isChecked = false
}
})
}) })
watch(()=>data.noLikeList.length,(newVal,oldVal)=>{ watch(()=>data.noLikeList.length,(newVal,oldVal)=>{
nextTick(()=>{ nextTick(()=>{