hongxudong 2 лет назад
Родитель
Сommit
0b1d719833
6 измененных файлов с 118 добавлено и 84 удалено
  1. 2 1
      public/index.html
  2. 5 0
      src/api/base.js
  3. 35 7
      src/api/system/user/login.js
  4. 2 1
      src/router/routers.js
  5. 31 26
      src/store/module/user.js
  6. 43 49
      src/view/login/login.vue

+ 2 - 1
public/index.html

@@ -10,7 +10,8 @@
 <!--    <script charset="utf-8" src="https://map.qq.com/api/gljs?v=2.exp&key=M2YBZ-ZPBW6-TVJSU-EKRO5-CNEK2-GVBDF"></script>-->
 <!--<script src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=6UIRYgyb7jno5rOuGvz9o75vPYo4Crbl"></script>-->
 <!--    企业微信扫码登录-->
-    <script src="https://wwcdn.weixin.qq.com/node/wework/wwopen/js/wwLogin-1.2.7.js"></script>
+<!--    <script src="https://wwcdn.weixin.qq.com/node/wework/wwopen/js/wwLogin-1.2.7.js"></script>-->
+
     <!--  小程序SDK  -->
     <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
     <title></title>

+ 5 - 0
src/api/base.js

@@ -5,6 +5,11 @@ import router from '@/router'
 import {localRead} from "@/libs/base/util";
 
 export const request = (url, data, method, token) => {
+  //拼接业务服务编码
+  if (store.state.user.svcCode) {
+    url = url.replace('mdm-server', 'mdm-server' + '-' + store.state.user.svcCode.replace('_', '-'))
+  }
+
   // if (data && !data.dealerId && store.state.user.loginType == 1 && url !== 'file/get_qr_code_url'){
   //   data.dealerId = store.state.user.dealerId
   // }

+ 35 - 7
src/api/system/user/login.js

@@ -8,17 +8,17 @@ import store from '@/store'
 import qs from 'qs';
 import {localRead} from "@/libs/base/util";
 
-export const login = ({ftyCode, userCode, userPwd,appCode}) => {
+export const login = ({userCode, userPwd}) => {
 
   const data = {
-    'grant_type': 'password',
-    'client_id': 'f3ed0d90-3fc8-4eba-b83c-a0cfe54c174d',
-    'client_secret': '78e238b4-c199-49ad-b619-69b6a78959d8',
-    'ftycode': ftyCode,
-    'username': userCode,
+    // 'grant_type': 'password',
+    // 'client_id': 'f3ed0d90-3fc8-4eba-b83c-a0cfe54c174d',
+    // 'client_secret': '78e238b4-c199-49ad-b619-69b6a78959d8',
+    // 'ftycode': ftyCode,
+    'phone': userCode,
     'password': md5(userPwd),
     'lang':localRead('local_lan'),
-    'appcode':appCode,
+    // 'appcode':appCode,
   }
 
   return new Promise(resolve => {
@@ -970,3 +970,31 @@ export const restoreTrash = msg_id => {
     }
   })
 }
+
+/**
+ * @desc   : 获取二维码
+ * @author : 洪旭东
+ * @date   : 2024-02-20 09:38
+ */
+export const getQrCode = uuid => {
+  return axios.request({
+    url: `oauth-server/oauth/qrcode?uuid=${uuid}`,
+    method: 'post',
+    data: {
+    }
+  })
+}
+
+/**
+ * @desc   : 验证当前扫码登录是否成功
+ * @author : 洪旭东
+ * @date   : 2024-02-20 10:42
+ */
+export const checkLoginOpenId = uuid => {
+  return axios.request({
+    url: `oauth-server/oauth/check?uuid=${uuid}`,
+    method: 'post',
+    data: {
+    }
+  })
+}

+ 2 - 1
src/router/routers.js

@@ -23,7 +23,8 @@ let menu = [
     name: 'login',
     meta: {
       title: 'Login - 登录',
-      hideInMenu: true
+      hideInMenu: true,
+      notCache: true
     },
     component: () => import('@/view/login/login.vue')
   },

+ 31 - 26
src/store/module/user.js

@@ -62,6 +62,8 @@ export default {
     roleName: null,
     // 系统参数
     setting: {},
+    // 服务代码
+    svcCode: ''
   },
   mutations: {
     setUserPwd(state, userPwd) {
@@ -107,14 +109,14 @@ export default {
     setAppCode(state, appCode) {
       state.appCode = appCode
     },
-    setFtyId(state, ftyId) {
-      state.ftyId = ftyId
+    setCpId(state, cpId) {
+      state.cpId = cpId
     },
-    setFtyCode(state, ftyCode) {
-      state.ftyCode = ftyCode
+    setCpCode(state, cpCode) {
+      state.cpCode = cpCode
     },
-    setFtyName(state, ftyName) {
-      state.ftyName = ftyName
+    setCpName(state, cpName) {
+      state.cpName = cpName
     },
     setAccess(state, access) {
       state.access = access || []
@@ -161,6 +163,9 @@ export default {
     setPwdDate(state,pwdDate){
       state.pwdDate = pwdDate
     },
+    setSvcCode(state, svcCode){
+      state.svcCode = svcCode
+    }
   },
   getters: {
     messageUnreadCount: state => state.messageUnreadList.length,
@@ -185,14 +190,12 @@ export default {
       })
     },
     // 登录
-    handleLogin({commit}, {ftyCode, userCode, userPwd, appCode}) {
+    handleLogin({commit}, {userCode, userPwd}) {
       userCode = userCode.trim()
       return new Promise((resolve, reject) => {
         login({
-          ftyCode,
           userCode,
           userPwd,
-          appCode
         }).then(res => {
           const data = res.data
           if (data) {
@@ -216,11 +219,11 @@ export default {
       sessionStorage.setItem('online', 'true')
       sessionStorage.setItem('login', 'login')
       sessionStorage.setItem('token', data.accessToken)
-      commit('setId', data.user.userId)
-      commit('setUserCode', data.user.userCode)
-      commit('setUserName', data.user.userName)
+      commit('setId', data.userId)
+      commit('setUserCode', data.userPhone)
+      commit('setUserName', data.userName)
       commit('setToken', data.accessToken)
-      commit('setLoginType', data.user.sysId)
+      // commit('setLoginType', data.user.sysId)
       // todo 前台保存权限
       // commit('setAccess', data.user.funCodeList)
       let menu = data.menu;
@@ -236,24 +239,26 @@ export default {
       // 处理数据
       menu = handleMenu(menu);
       let arr = convertToChildrenMain(menu,'parentId','id','objectPaths');
-      console.log('menu', menu, arr)
+      // console.log('menu', menu, arr)
       commit('setMenuList', arr.copy())
       sessionStorage.setItem('route', JSON.stringify(arr))
       router.addRoutes(filterAsyncRouter(arr,menu))
       commit('setAvator', maxLogo)
-      commit('setFlgInitPwd', data.user.flgInitPwd)
-      commit('setOrgId', data.user.orgId)
-      commit('setOrgName', data.user.orgName)
-      commit('setFtyId', data.user.ftyId)
-      commit('setFtyCode', data.user.ftyCode)
-      commit('setFtyName', data.user.ftyName)
-      commit('setStaffId', data.user.staffId)
-      commit('setStaffName', data.user.staffName)
-      commit('setRoleIds', data.user.roleIds)
-      commit('setUserTableSetting', data.userTableSetting)
+      // commit('setFlgInitPwd', data.user.flgInitPwd)
+      // commit('setOrgId', data.user.orgId)
+      // commit('setOrgName', data.user.orgName)
+      commit('setCpId', data.company.cpId)
+      commit('setCpCode', data.company.cpCode)
+      commit('setCpName', data.company.cpName)
+      commit('setSvcCode', data.company.svcCode)
+
+      // commit('setStaffId', data.user.staffId)
+      // commit('setStaffName', data.user.staffName)
+      // commit('setRoleIds', data.user.roleIds)
+      // commit('setUserTableSetting', data.userTableSetting)
       //菜单类型 默认抽屉
-      commit('setMenuType', data.menuType || 'drawer')
-      commit('setPwdDate', data.user.pwdDate)
+      // commit('setMenuType', data.menuType || 'drawer')
+      // commit('setPwdDate', data.user.pwdDate)
     },
 
     /**

+ 43 - 49
src/view/login/login.vue

@@ -38,42 +38,23 @@
 <!--          <div style="width: 90%;display: flex;justify-content: end">-->
 <!--            {{ this.$config.loginSubTitle }}-->
 <!--          </div>-->
-          <!--        <div class="tab-class">-->
-          <!--          <div :class="active == 0? 'btn-active-class':'btn-class' " id="user" @click="changeMode">密码登录</div>-->
-          <!--          <div :class="active == 1? 'btn-active-class':'btn-class' " id="scan" @click="changeMode">扫码登录</div>-->
-          <!--        </div>-->
+                  <div class="tab-class">
+                    <div :class="active == 0? 'btn-active-class':'btn-class' " id="user" @click="changeMode">密码登录</div>
+                    <div :class="active == 1? 'btn-active-class':'btn-class' " id="scan" @click="changeMode">扫码登录</div>
+                  </div>
           <div v-show="active == 0" class="content">
             <login-form @on-success-valid="handleSubmit" :loading="loading"></login-form>
           </div>
-          <div v-show="active == 1" class="scan">
-            <div class="qr_login" id="qr_login">
-            </div>
-            <!--          <div style="padding-top: 5px"><b>只支持集团企微扫描登录</b></div>-->
+          <div v-show="active == 1" id="scan-login" style="text-align: center; padding: 21px">
+            <img :src="qrcodeUrl" style="width: 250px;height: 250px" v-if="qrcodeUrl"/>
           </div>
 
           <div style="display: flex;justify-content: end;width: 98%">
             ©2024 东科软件 All rights reserved
           </div>
-          <!--                <Card>-->
-          <!--                  <Tabs v-model="tabName" type="card" :capture-focus="true">-->
-          <!--                    &lt;!&ndash;账号登录&ndash;&gt;-->
-          <!--                    <TabPane :label="$t('code_login')" name="name1">-->
-          <!--                      <login-form @on-success-valid="handleSubmit" :loading="loading"></login-form>-->
-          <!--                    </TabPane>-->
-          <!--                    &lt;!&ndash;扫码登录&ndash;&gt;-->
-          <!--                    <TabPane :label="$t('scan_code_login')" name="name2" style="text-align: center;align-self: center;">-->
-          <!--        &lt;!&ndash;              <img src="./../../assets/images/qrcode-wechat-top.png"/>&ndash;&gt;-->
-          <!--                      <div class="qr_login" id="qr_login" v-show="tabName === 'name2'"></div>-->
-          <!--                      <b>只支持集团企微扫描登录</b>-->
-          <!--                    </TabPane>-->
-          <!--                  </Tabs>-->
-          <!--                </Card>-->
         </div>
       </div>
     </div>
-    <!--    <div class="login_foot_pic">-->
-    <!--      <div class="logo"></div>-->
-    <!--    </div>-->
   </div>
 </template>
 
@@ -83,10 +64,12 @@ import {mapActions} from 'vuex'
 import dk_logo from '@/assets/images/dongke_logo.png'
 import dk_mini from '@/assets/images/iboss_mini.png'
 import {localRead, localSave} from "@/libs/base/util";
+import { getQrCode, checkLoginOpenId } from '@/api/system/user/login'
+import uuidv4 from 'uuid/v4'
 
 export default {
   components: {
-    LoginForm,
+    LoginForm
   },
   data() {
     let self = this
@@ -99,6 +82,11 @@ export default {
       active: 0,// 默认在账户登录
       lang: self.$config.currentLang,
       langList: self.$config.languages,
+      getQrCode: getQrCode,
+      checkLoginOpenId: checkLoginOpenId,
+      loginUuid: null,
+      qrcodeUrl: null,
+      interval: null
     }
   },
   methods: {
@@ -114,9 +102,24 @@ export default {
     changeMode(e) {
       if (e.target.id == 'user') {
         this.active = 0;
+        clearInterval(this.interval)
       } else {
-        this.initQvScan()
         this.active = 1;
+        let _this = this
+        this.interval = setInterval(() => {
+          _this.checkLoginOpenId(_this.loginUuid).then(r=>{
+            let res = r.data
+            if (res.code === _this.$config.SUCCESS_CODE) {
+              clearInterval(_this.interval)
+              _this.afterLogin(res.data)
+              this.$router.push({
+                name: this.$config.homeName
+              })
+            } else if (res.code === 1015){
+              _this.$Message.warning(res.message)
+            }
+          })
+        }, 3000)
       }
     },
     /**
@@ -140,6 +143,7 @@ export default {
         this.$Message.destroy()
         if (res.code === 200) {
           if (res.data) {
+            clearInterval(this.interval)
             this.afterLogin(res.data)
           }
           this.$router.push({
@@ -152,28 +156,6 @@ export default {
         this.loading = false
       })
     },
-    /**
-     * @desc   : 企业微信扫码
-     * @author : 洪旭东
-     * @date   : 2022-08-11 09:02
-     */
-    initQvScan() {
-      this.$nextTick(() => {
-        let url = window.location.href.replace(this.$route.name === 'login_hegii' ? 'login/hegii' : 'login', 'login/qv')
-        let wwLogin = new WwLogin({
-          "id": "qr_login",
-          "appid": this.$config.qvScanAppId,
-          "agentid": this.$config.qvScanAgentId,
-          "redirect_uri": encodeURI(url),
-          "state": this.$route.name,
-        });
-        // 修改iframe大小
-        if (wwLogin) {
-          wwLogin.frame.height = '290px';
-          wwLogin.frame.width = '240px';
-        }
-      })
-    },
   },
   created() {
     localSave('tagNaveList', '[]'); // 清除顶部tag
@@ -185,8 +167,20 @@ export default {
       this.lang = this.$config.currentLang
       localSave('local', this.lang);// 设置语言的缓存
     }
+
+    //生成uuid并获取二维码
+    this.loginUuid = uuidv4()
+    this.getQrCode(this.loginUuid).then(r=>{
+      let res = r.data
+      if (res.code === this.$config.SUCCESS_CODE) {
+        this.qrcodeUrl = res.data
+      } else {
+        this.$Message.warning(res.message)
+      }
+    })
   },
   beforeDestroy() {
+    clearInterval(this.interval)
   },
   mounted() {
     let message = this.$route.params.message