|  |  | 
 |  |  |             <div class="wx_login_list"> | 
 |  |  |                 <div class="wx_login_list_item"> | 
 |  |  |                     <img src="@/assets/icon/login_ic_code@2x.png" alt="" /> | 
 |  |  |                     <input type="text" placeholder="企业代码" /> | 
 |  |  |                     <input type="text" v-model="from.companyId" placeholder="企业代码" /> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="wx_login_list_item"> | 
 |  |  |                     <img src="@/assets/icon/login_ic_phone@2x.png" alt="" /> | 
 |  |  |                     <input type="text" placeholder="手机号" /> | 
 |  |  |                     <input type="text" maxlength="11" v-model="from.username" placeholder="手机号" /> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="wx_login_list_item"> | 
 |  |  |                     <img src="@/assets/icon/login_ic_password@2x.png" alt="" /> | 
 |  |  |                     <input type="text" placeholder="密码" /> | 
 |  |  |                     <input type="password" v-model="from.password" placeholder="密码" /> | 
 |  |  |                 </div> | 
 |  |  |             </div> | 
 |  |  |             <div class="wx_login_footer"> | 
 |  |  |                 <div class="wx_login_footer_btn">立即登录</div> | 
 |  |  |                 <div class="wx_login_footer_btn" @click="login">立即登录</div> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |     </div> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <script setup lang="ts"> | 
 |  |  | import { onMounted, reactive } from 'vue'; | 
 |  |  | import { useRoute, useRouter } from 'vue-router'; | 
 |  |  | import { useStore } from 'vuex'; | 
 |  |  | import { wxLogin, wxAccountLogin, getUserInfo } from '@/apis/index'; | 
 |  |  | import { Toast } from 'vant'; | 
 |  |  |  | 
 |  |  | const route = useRoute() | 
 |  |  | const router = useRouter() | 
 |  |  | const store = useStore() | 
 |  |  |  | 
 |  |  | let from: any = reactive({ | 
 |  |  |     openid: '', | 
 |  |  |     unionid: '', | 
 |  |  |     companyId: '', | 
 |  |  |     username: '', | 
 |  |  |     password: '' | 
 |  |  | }) | 
 |  |  |  | 
 |  |  | const login = async () => { | 
 |  |  |     if (!from.openid) return Toast('openid不能为空') | 
 |  |  |     if (!from.unionid) return Toast('unionid不能为空') | 
 |  |  |     if (!from.companyId) return Toast('企业代码不能为空') | 
 |  |  |     if (!from.username) return Toast('手机号不能为空') | 
 |  |  |     if (!from.password) return Toast('密码不能为空') | 
 |  |  |     Toast.loading({ | 
 |  |  |         message: '登录中...', | 
 |  |  |         forbidClick: true | 
 |  |  |     }); | 
 |  |  |     let res = await wxAccountLogin(from) | 
 |  |  |     if (res.code === 200) { | 
 |  |  |         let info = await getUserInfo() | 
 |  |  |         if (info.code === 200) { | 
 |  |  |             await store.commit('setEntrance', 'DD') | 
 |  |  |             await store.commit('setUserInfo', info.data) | 
 |  |  |             await store.dispatch('getMenuList', 2) | 
 |  |  |             await router.replace('/workbench') | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |     Toast.clear(); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | onMounted(() => { | 
 |  |  |     wxLogin({ code: route.query.code }) | 
 |  |  |         .then(async (res) => { | 
 |  |  |             if (res.code === 200) { | 
 |  |  |                 // 免登录,直接跳首页 | 
 |  |  |                 if (res.data.loginStatus == 0) { | 
 |  |  |                     let info = await getUserInfo() | 
 |  |  |                     if (info.code === 200) { | 
 |  |  |                         await store.commit('setEntrance', 'DD') | 
 |  |  |                         await store.commit('setUserInfo', info.data) | 
 |  |  |                         await store.dispatch('getMenuList', 2) | 
 |  |  |                         await router.replace('/workbench') | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     from.openid = res.data.openid | 
 |  |  |                     from.unionid = res.data.unionid | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  | }) | 
 |  |  | </script> | 
 |  |  |  | 
 |  |  | <style lang="scss" scoped> |