export default OakComponent({ entity: 'wechatLogin', projection: { id: 1, expired: 1, expiresAt: 1, userId: 1, type: 1, qrCodeType: 1, successed: 1, }, isList: false, properties: { wechatLoginResultPage: '/wechatLogin/confirm', // wechatLogin 结果页面,默认使用wechatLogin 确认页面 wechatUserLoginPage: '/wechatUser/login', }, formData({ data: wechatLogin, features }) { const loginUserId = features.token.getUserId(true); const user = wechatLogin?.user; const userId = wechatLogin?.userId; const type = wechatLogin?.type; const application = features.application.getApplication(); const appId = application?.config?.appId; return { type, userId, expired: wechatLogin?.expired, expiresAt: wechatLogin?.expiresAt, successed: wechatLogin?.successed, loginUserId, appId, }; }, methods: { getCodeAndRedirect() { const { wechatLoginResultPage, wechatUserLoginPage } = this.props; const wechatLoginId = this.props.oakId; const state = encodeURIComponent(`${wechatLoginResultPage}?oakId=${wechatLoginId}`); const { appId } = this.state; const host = window.location.host; const protocol = window.location.protocol === 'https:' ? 'https' : 'http'; const redirectUri = encodeURIComponent(`${protocol}://${host}${wechatUserLoginPage}?wechatLoginId=${wechatLoginId}`); window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_userinfo&state=${state}#wechat_redirect`; }, async loginByWechatMp() { const { loginUserId } = this.state; if (!loginUserId) { // 先小程序登录 await this.features.token.loginWechatMp(); } await this.features.token.loginWechatMp({ wechatLoginId: this.props.oakId }); this.refresh(); } }, });