ソースを参照

随身邦登录

armg 6 日 前
コミット
368b5bb401

+ 2 - 1
.env

@@ -1,11 +1,12 @@
 VUE_APP_PublicTitle=AI设计
 #  DIS小程序appid:gh_4eaccc0824ca
 VUE_APP_BASE_DISID6=wx818da06b25f30cf5
-
 #企业微信 
 # 应用appID
 VUE_APP_APPID=ww5444eb205d75e730
 # 应用agentID
 VUE_APP_AGENTID=1000400
+# 随身帮登录密钥
+VUE_APP_SECRETKEY=AideSignSSB2026@WeCom_SecretKey
 
 

+ 1 - 1
package-lock.json

@@ -7575,7 +7575,7 @@
     },
     "js-md5": {
       "version": "0.7.3",
-      "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz",
+      "resolved": "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz",
       "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ=="
     },
     "js-message": {

+ 26 - 2
src/api/indexAI.js

@@ -29,7 +29,6 @@ const getAuthCredentials = () => {
 export function wecomAuth(query) {
     const { loginMark } = getAuthCredentials();
     query.append('loginMark', loginMark);
-    query.append("wxId", process.env.VUE_APP_APPID);
     // 遍历打印
     query.forEach((value, key) => {
         console.log(`${key}=${value}`);
@@ -41,6 +40,21 @@ export function wecomAuth(query) {
     })
 }
 
+// 2.随身邦用户认证
+export function doWxidLogin(query){
+    const { loginMark } = getAuthCredentials();
+    query.append('loginMark', loginMark);
+    // 遍历打印
+    query.forEach((value, key) => {
+        console.log(`${key}=${value}`);
+    });
+    return request({
+        url: '/aidesign/wecom/ssb',
+        method: 'post',
+        data: query
+    })
+}
+
 
 // 提交设计
 export function CreateDesign(query) {
@@ -311,6 +325,15 @@ export function AddTrackEvent(query) {
     })
 }
 
+// 获取产品列表
+export function GetProductInfo(query) {
+    return request({
+        url: '/aidesign/outside/GetProductInfo',
+        method: 'post',
+        data: query
+    })
+}
+
 //获取确认下单地址
 export function GetOrderAddress() {
     const formData = new FormData();
@@ -324,4 +347,5 @@ export function GetOrderAddress() {
         method: 'post',
         data: formData
     })
-}
+}
+

+ 101 - 20
src/router/index.ts

@@ -2,7 +2,8 @@ import Vue from "vue";
 import VueRouter from "vue-router";
 import layout from "@/layout/index.vue";
 import { checkWxWorkEnvAndUserCache } from '@/utils/index'
-import { checkLoginStatus, initGuidInfo, doWecomLogin, getQyCode } from '@/utils/wecomLogin.ts';
+import { checkLoginStatus, initGuidInfo, doWecomLogin, getQyCode, getGuid, getMD5 } from '@/utils/wecomLogin.ts';
+import { doWxidLogin } from "@/api/indexAI";
 Vue.use(VueRouter);
 
 const router = new VueRouter({
@@ -91,40 +92,51 @@ const router = new VueRouter({
     },
   ]
 });
+// 会话缓存key:登录方式标记
+const STORAGE_LOGIN_TYPE_KEY = 'loginMode';
+// 登录方式枚举
+const LOGIN_MODE = {
+  NEW: 'wxidLogin', // 新登录方式 (loginType=2)
+  OLD: 'codeLogin'  // 旧登录方式 (默认/其他loginType)
+};
+
 // 全局前置守卫:只对需要登录的页面进行登录校验
 router.beforeEach((to, from, next) => {
+  // console.log("from=",from)
+  console.log("to=", to)
   // console.log("-------页面链接=", window.location.href)
   if (!to.meta || (to.meta && !to.meta.requiresAuth)) {
     next();
     return;
   }
   try {
-    checkWxWorkEnvAndUserCache();//先判断企微环境
+    //先判断企微环境
+    checkWxWorkEnvAndUserCache();
+    //验证时间戳和token
     initGuidInfo();
     const isLoggedIn = checkLoginStatus();
     if (isLoggedIn) {
       next();
       return;
     }
-    const code = to.query.code as string;
-    let finalCode;
-    if (Array.isArray(code)) {
-      finalCode = code.length > 0 ? code[code.length - 1] : null;
-    } else {
-      finalCode = code || null;
-    }
-    if (finalCode) {
-      doWecomLogin(finalCode)
-        .then(() => {
-          next();
-          console.log(`登录成功,即将进入 ${to.path}`);
-        })
-        .catch(() => {
-          next({ path: "/error" });
-        });
+    // 获取并处理 loginType,区分登录方式
+    const { loginType, wxid } = to.query;
+    const isNewLoginMode = loginType && String(loginType) === '2';
+    if (isNewLoginMode) {
+      if (wxid) {
+        // 新登录方式:loginType存在且等于2
+        sessionStorage.setItem(STORAGE_LOGIN_TYPE_KEY, LOGIN_MODE.NEW);
+        console.log('-----当前为【新登录方式】,执行强制登录校验');
+        handleNewLoginMode(to, next, wxid);
+      } else {
+        sessionStorage.setItem("errorMsgTit", '参数缺失,无权限');
+        next({ path: "/error" });
+      }
     } else {
-      console.log(`访问 ${to.path} 需登录,正在跳转到授权页面`);
-      getQyCode();
+      // 旧登录方式:无loginType / loginType≠2
+      sessionStorage.setItem(STORAGE_LOGIN_TYPE_KEY, LOGIN_MODE.OLD);
+      console.log('🔑 当前为【旧登录方式】,执行原有企微登录逻辑');
+      handleOldWecomLoginMode(to, next);
     }
   } catch (error) {
     console.error("登录校验过程异常:", error);
@@ -132,4 +144,73 @@ router.beforeEach((to, from, next) => {
   }
 });
 
+
+/**
+ * 新登录方式处理:强制检测登录 → 获取Token → 缓存 → 放行/失败跳转
+ * @param to 目标路由
+ * @param next 路由放行方法
+ */
+function handleNewLoginMode(to, next, wxId) {
+  try {
+    // 【核心】新登录方式的登录校验+获取Token逻辑
+    // 替换为你的「新登录接口」,Promise异步处理
+    const formData = new FormData();
+    const timestamp = new Date().getTime().toString();
+    const nonce = getGuid();
+    const sign = getMD5(nonce, timestamp, wxId);
+    formData.append('wxId', wxId);
+    formData.append('timestamp', timestamp);
+    formData.append('nonce', nonce);
+    formData.append('sign', sign);
+    doWxidLogin(formData)
+      .then((res) => {
+        if (res && res.StatusCode === 200 && res.Data && res.Data.token) {
+        console.log("res=",res)
+          window.localStorage.setItem('AIToken', res.Data.token);
+          window.localStorage.setItem('isRefreshProvider', res.Data.isRefreshProvider);
+          console.log(`新登录成功,Token已缓存,即将进入 ${to.path}`);
+          // next({ path: to.path, query: {}, replace: true });
+          next();
+        } else {
+          throw new Error('新登录失败,未获取到Token');
+        }
+      })
+      .catch(() => {
+        // 登录失败:跳转错误页
+        next({ path: "/error", replace: true });
+      });
+  } catch (err) {
+    console.error('新登录方式处理异常:', err);
+    next({ path: "/error", replace: true });
+  }
+}
+
+/**
+ * 旧登录方式处理:原有企微code授权登录逻辑
+ * @param to 目标路由
+ * @param next 路由放行方法
+ */
+function handleOldWecomLoginMode(to, next) {
+  const code = to.query.code as string;
+  let finalCode;
+  if (Array.isArray(code)) {
+    finalCode = code.length > 0 ? code[code.length - 1] : null;
+  } else {
+    finalCode = code || null;
+  }
+  if (finalCode) {
+    doWecomLogin(finalCode)
+      .then(() => {
+        next();
+        console.log(`登录成功,即将进入 ${to.path}`);
+      })
+      .catch(() => {
+        next({ path: "/error" });
+      });
+  } else {
+    console.log(`访问 ${to.path} 需登录,正在跳转到授权页面`);
+    getQyCode();
+  }
+}
+
 export default router;

+ 38 - 1
src/utils/index.ts

@@ -71,6 +71,44 @@ export const getWecomType = (agentFrom: string) => {
   }
 }
 
+export const getWecomTypeName = (agentFrom: string) => {
+  switch (agentFrom) {
+    case 'ssb':
+      return '经销商随身邦';
+    case 'hbs':
+      return '好邦手';
+    case 'stoneLikePaint':
+      return '服务商随身邦';
+    case 'goldShop':
+      return '金牌店随身邦';
+    case 'dg':
+      return '导购运营平台';
+    case 'xlskf':
+      return '新零售客服';
+    default:
+      return '新零售客服';
+  }
+}
+
+export const getAgentFrom = (WecomType: number) => {
+  switch (WecomType) {
+    case 0://经销商
+      return 'ssb';
+    case 1://好邦手
+      return 'hbs';
+    case 2://服务商
+      return 'stoneLikePaint';
+    case 3://金牌店
+      return 'goldShop';
+    case 4://导购
+      return 'dg';
+    case 5://新零售客服
+      return 'xlskf';
+    default:
+      return 'xlskf'; // 默认为经销商
+  }
+}
+
 
 export const toLBHome = () => {
   router.replace('/');
@@ -182,7 +220,6 @@ export const checkWxWorkEnvAndUserCache = () => {
   try {
     const currentHost = window.location.hostname;
     const isLocalDev = currentHost === 'localhost' || currentHost.startsWith('192.168.101');
-    console.log("isLocalDev=", isLocalDev);
     if (isLocalDev) {
       return;
     }

+ 25 - 3
src/utils/wecomLogin.ts

@@ -1,6 +1,7 @@
 
 import { wecomAuth } from "@/api/indexAI";
-import router from '@/router'; // 导入你的路由实例
+import router from '@/router';
+import md5 from 'js-md5';
 // 企业微信登录相关类型定义(无变化,无需可选链)
 export interface GuidInfo {
     guid: string;
@@ -60,7 +61,7 @@ export const initGuidInfo = (): void => {
  * @param code 企业微信授权返回的 code
  * @returns {Promise<void>}
  */
-export const doWecomLogin = async (code: string): Promise<void> => {
+export const doWecomLogin = async (code: string, wxId?: string): Promise<void> => {
     if (isLogging) return; // 正在登录中,忽略重复调用
     isLogging = true;
     try {
@@ -76,15 +77,20 @@ export const doWecomLogin = async (code: string): Promise<void> => {
         window.localStorage.setItem('lastCode', JSON.stringify({ code }));
         const formData = new FormData();
         formData.append('code', code);
+        if (wxId) {
+            formData.append("wxId", wxId);
+        } else {
+            formData.append("wxId", process.env.VUE_APP_APPID);
+        }
         // 调用接口兑换 AIToken
         const res = await wecomAuth(formData);
         if (res && res.StatusCode === 200 && res.Data && res.Data.token) {
             window.localStorage.setItem('AIToken', res.Data.token);
+            window.localStorage.setItem('isRefreshProvider', res.Data.isRefreshProvider);
             // 处理身份,身份可能为多个,只能按身份权限大小来固定为某个身份;
             if (res.Data.userType) {
                 // 使用位运算
                 const ROLE_CONFIG = [
-                    { bit: 0, code: '', desc: '无' }, 
                     { bit: 1 << 0, code: 'ssb', desc: '经销商' },             // 1 
                     { bit: 1 << 1, code: 'hbs', desc: '立邦用户' },           // 2
                     { bit: 1 << 2, code: 'stoneLikePaint', desc: '服务商' },  // 4 
@@ -93,7 +99,9 @@ export const doWecomLogin = async (code: string): Promise<void> => {
                     { bit: 1 << 5, code: 'xlskf', desc: '新零售客服' }         // 32
                 ];
                 const userType = Number(res.Data.userType);
+                console.log("userType=", userType);
                 const matchRole = ROLE_CONFIG.find(item => (userType & item.bit) === item.bit);
+                console.log("matchRole=", matchRole)
                 const agent = matchRole && matchRole.code || 'xlskf';
                 window.localStorage.setItem('agentFrom', agent);
                 window.localStorage.setItem('agentFromAI', agent);
@@ -144,6 +152,20 @@ export const getQyCode = () => {
     window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${url}&response_type=code&scope=snsapi_base&state=&agentid=${agentid}&t=${new Date().getTime()}#wechat_redirect`;
 }
 
+/**
+ * 生成指定规则的MD5签名
+ * @param nonce 随机串 (如:8a2d9f7c3b5e10s6g9h2j4k8l0z7x5c3v)
+ * @param timestamp 时间戳 (如:1736000000000)
+ * @param wxId wx标识 (如:zhangsan123)
+ * @returns 32位大写MD5加密字符串
+ */
+export const getMD5 = (nonce: string, timestamp: string, wxId: string): string => {
+    // 严格按规则拼接参数字符串:nonce=xxx&timestamp=xxx&wxId=xxx&key=xxx
+    const signStr = `nonce=${nonce}&timestamp=${timestamp}&wxId=${wxId}&key=${process.env.VUE_APP_SECRETKEY}`;
+    const md5Result = md5(signStr);
+    return md5Result;
+};
+
 // utils/authLock.js
 export const authLock = {
     // 内存锁:实时判断

+ 9 - 9
src/views/AIDesign/GeneratePlan.vue

@@ -157,15 +157,15 @@ export default class GeneratePlan extends Vue {
     private getPicList() {
         let that = this;
         const formData = new FormData();
-        const userInfo: any = JSON.parse(window.localStorage.getItem("userInfoV1")!);
-        let roleIdArray = [];
-        if (userInfo.roles.length > 0) {
-            userInfo.roles.forEach(item => {
-                roleIdArray.push(item.roleId);
-            })
-        }
-        formData.append('roleIds', roleIdArray.join(','));
-        formData.append('WXuserid', userInfo.loginName);
+        // const userInfo: any = JSON.parse(window.localStorage.getItem("userInfoV1")!);
+        // let roleIdArray = [];
+        // if (userInfo.roles.length > 0) {
+        //     userInfo.roles.forEach(item => {
+        //         roleIdArray.push(item.roleId);
+        //     })
+        // }
+        // formData.append('roleIds', roleIdArray.join(','));
+        // formData.append('WXuserid', userInfo.loginName);
         formData.append('baseType', 0);//必填 0外墙 1内墙
         const agentFrom = window.localStorage.getItem('agentFromAI');
         const wecomType = getWecomType(agentFrom);

+ 5 - 2
src/views/AIDesign/design.vue

@@ -1122,7 +1122,9 @@ export default class extends Vue {
     formData.append('baseType', 0);
     // formData.append('wecomType', this.wecomType);
     // const isRefresh = userInfo.isRefreshProvider === '是' ? 1 : 0;//0=否 1=是
-    // formData.append('isRefresh', isRefresh);
+    const isRefreshProvider = window.localStorage.getItem("isRefreshProvider");
+    const isRefresh = isRefreshProvider === '是' ? 1 : 0;//0=否 1=是
+    formData.append('isRefresh', isRefresh);
     GetDictList(formData).then(response => {
       if (response.StatusCode == 200) {
         that.isNeedProject = response.Data.isNeedProject;
@@ -1170,7 +1172,8 @@ export default class extends Vue {
         console.log(response.Info);
       }
     }).catch((err) => {
-      that.$toast(err)
+      console.log("=======err=",err)
+      // that.$toast(err)
     })
   }
   // 初始化外墙质感

+ 5 - 25
src/views/AIDesign/diagnoseResult.vue

@@ -101,13 +101,13 @@
                                         <div class="detail-title">潜在危害</div>
                                         <div v-for="(hazard, i) in item.Hazards" :key="'hazards' + i" :value="hazard"
                                             class="detail-item hazard-item">
-                                            <van-icon name="warning-o"/>
+                                            <van-icon name="warning-o" />
                                             {{ hazard }}
                                         </div>
                                         <!-- 修复工艺 -->
                                         <div class="detail-title">推荐修复工艺</div>
                                         <div class="detail-item" v-for="(items, indexs) in item.RepairProcesses"
-                                        :key="'RepairProcesses' + indexs">
+                                            :key="'RepairProcesses' + indexs">
                                             {{ indexs + 1 }}.{{ items }}
                                         </div>
                                     </section>
@@ -253,32 +253,12 @@ export default class DiagnosisPage extends Vue {
     private aiImg = "https://p9-flow-imagex-sign.byteimg.com/tos-cn-i-a9rns2rl98/rc_gen_image/7b6fbb743f984de4b6a2ed36e0b69c95preview.jpeg~tplv-a9rns2rl98-downsize_watermark_1_5_b.png?rcl=202511241033234D2C3B74A04216BD29F0&rk3s=8e244e95&rrcfp=ddbb2dc7&x-expires=2079311619&x-signature=LmTn71nSgdI%2F5kcqJ8L561SedVQ%3D"
     private longPressTimer: NodeJS.Timeout | null = null; // 长按计时器
     private canvasImg = null;
-    //开始长按(原生方式)
-    // private startLongPress(e: Event, type: string): void {
-    //     let that = this;
-    //     this.appearPosterFlag = false;
-    //     this.longPressTimer = setTimeout(() => {
-    //         that.handleLongPress(e);
-    //     }, 1000);
-    // }
-
-    //结束长按(原生方式)
-    // private endLongPress(): void {
-    //     this.appearPosterFlag = true;
-    //     if (this.longPressTimer) {
-    //         clearTimeout(this.longPressTimer);
-    //         this.longPressTimer = null;
-    //     }
-
-    // }
     // 页面挂载时请求数据
     created() {
+        // 存下用户来源,无WecomType即为新零售客服
+        const userWecomType = this.$route.query.WecomType || '5';
+        sessionStorage.setItem("userWecomType", userWecomType);
         getWxconfig();
-        if (this.$route.query.WecomType) {
-            sessionStorage.setItem("WecomType", this.$route.query.WecomType);
-        } else {
-            sessionStorage.removeItem("WecomType");
-        }
     }
     activated() {
         // 初始化数据

+ 5 - 5
src/views/AIDesign/index.vue

@@ -40,7 +40,7 @@
       </div>
 
       <!-- 五行推荐 -->
-      <div class="card card-five-element" @click="handleFiveElementClick">
+      <!-- <div class="card card-five-element" @click="handleFiveElementClick">
         <div class="card-content">
           <div class="card-title" style="color: #635A30;">五行推荐(规划中)</div>
           <div class="card-desc" style="color: #8F865B;">根据五行推荐最适合的颜色</div>
@@ -48,7 +48,7 @@
         <div class="card-icon">
           <img src="@/assets/AIDesign/five-element-planet.png" alt="五行图标" />
         </div>
-      </div>
+      </div> -->
     </div>
 
     <!-- 内墙-功能卡片区域 -->
@@ -112,9 +112,9 @@ export default class extends Vue {
     } else {
       this.currentTab = 'outside';
     }
-    // 存下用户来源,无agent即为新零售客服
-    const agent = this.$route.query.agent || 'xlskf';
-    sessionStorage.setItem("userWecomType", getWecomType(agent))
+    // 存下用户来源,无WecomType即为新零售客服
+    const userWecomType = this.$route.query.WecomType || '5';
+    sessionStorage.setItem("userWecomType", userWecomType);
   }
   handleTabChange(tabType: 'outside' | 'inside'): void {
     this.currentTab = tabType;

+ 3 - 2
src/views/AIDesign/insideDesign.vue

@@ -726,8 +726,9 @@ export default class extends Vue {
     const agentFrom = window.localStorage.getItem('agentFromAI');
     // const wecomType = getWecomType(agentFrom);
     // formData.append('wecomType', 5);
-    // const isRefresh = userInfo.isRefreshProvider === '是' ? 1 : 0;//0=否 1=是
-    // formData.append('isRefresh', isRefresh);
+    const isRefreshProvider = window.localStorage.getItem("isRefreshProvider");
+    const isRefresh = isRefreshProvider === '是' ? 1 : 0;//0=否 1=是
+    formData.append('isRefresh', isRefresh);
     GetDictList(formData).then(response => {
       if (response.StatusCode == 200) {
         if (response.Data && response.Data.dict) {

+ 22 - 8
src/views/AIDesign/result.vue

@@ -42,14 +42,14 @@
       <!-- 功能按钮组 -->
       <!-- 外墙 -->
       <div class="button-group-outside" v-if="wallType === 'outside'">
-        <button class="action-button-big flex-center" @click="handleAIfun"
+        <!-- <button class="action-button-big flex-center" @click="handleAIfun"
           v-if="agentFrom === 'stoneLikePaint' && allRes && allRes.F_DesignStyle != 'CHANGE_COLOR'">
           <img src="@/assets/AIDesign/file-excel-2-line.png" class="icon" />
           <div>
             <div class="title">确认AI设计</div>
             <div class="text">生成解决方案</div>
           </div>
-        </button>
+        </button> -->
         <div class="flex-between">
           <button class="action-button-middle flex-center" :disabled="regenerateDisable"
             :class="regenerateDisable == true ? 'save-button-disabled' : ''" @click="regenerate">
@@ -148,11 +148,10 @@ export default class extends Vue {
   private serviceCodeArray = [];
   private allRes = null;
   created() {
-    if (this.$route.query.WecomType) {
-      sessionStorage.setItem("WecomType", this.$route.query.WecomType);
-    } else {
-      sessionStorage.removeItem("WecomType");
-    }
+    console.log("this.$route",this.$route)
+    // 存下用户来源,无WecomType即为新零售客服
+    const userWecomType = this.$route.query.WecomType || '5';
+    sessionStorage.setItem("userWecomType", userWecomType);
     getWxconfig();
     // this.getServiceCode();
   }
@@ -586,9 +585,24 @@ export default class extends Vue {
     // console.log('转人工设计');
     // 实现转人工设计逻辑
     // that.$magnetlogadd.setLog('AI外墙设计-转人工设计', function () {
-        toXiaoChengxu(`${process.env.VUE_APP_BASE_DISID6}`);
+      toXiaoChengxu(`${process.env.VUE_APP_BASE_DISID6}`);
     // })
   }
+
+  private handleAIfun() {
+    const formData = new FormData();
+    formData.append('eventname', '确认AI设计');//事件名称
+    formData.append('eventtype', 'click');//事件类型
+    formData.append('menupath', '外墙质感/结果页/确认AI设计');//完整菜单路径
+    const eventdataObj = {
+      wecomType: getWecomTypeName(window.localStorage.getItem('agentFromAI')),
+    };
+    formData.append('eventdata', JSON.stringify(eventdataObj));//事件数据
+    AddTrackEvent(formData)//埋点
+    let allRes = JSON.stringify(this.allRes);
+    sessionStorage.setItem("planParams", allRes);
+    this.$router.push({ path: '/AIDesign/GeneratePlan' });
+  }
 }
 </script>
 

+ 9 - 9
src/views/login/index.vue

@@ -1,8 +1,7 @@
 <template>
   <div>
     <div class="login">
-      <button @click="onSubmit1">虚拟登录</button>
-      <!-- <van-form @submit="onSubmit" style="width: 100%;">
+      <van-form @submit="onSubmit1" style="width: 100%;">
         <van-field
           v-model="username"
           name="username"
@@ -10,15 +9,15 @@
           placeholder="请输入用户名"
           :rules="[{ required: true, message: '请输入用户名' }]"
         />
-        <van-field
+        <!-- <van-field
           v-model="password"
           type="password"
           name="password"
           label="密码"
           placeholder="请输入密码"
           :rules="[{ required: true, message: '请输入密码' }]"
-        />
-        <div class="agent-box">
+        /> -->
+        <!-- <div class="agent-box">
           <div class="left-label">应用入口:</div>
           <el-select v-model="agentValue" placeholder="请选择" size="small">
             <el-option
@@ -28,13 +27,13 @@
                     :value="item.value">
             </el-option>
           </el-select>
-        </div>
+        </div> -->
         <div style="margin: 16px;">
           <van-button round block type="info" native-type="submit">
-            提交
+            虚拟登录
           </van-button>
         </div>
-      </van-form> -->
+      </van-form>
     </div>
   </div>
 </template>
@@ -109,8 +108,9 @@ export default class extends Vue {
     }
   }
   onSubmit1() {
+    window.localStorage.clear();
     initGuidInfo();
-    doWecomLogin('QWert!@345')
+    doWecomLogin('QWert!@345',this.username)
       .then(() => {
         this.$router.push('/');
         console.log(`模拟登录成功`);

+ 0 - 1
vue.config.js

@@ -55,7 +55,6 @@ module.exports = {
     open: true,
     proxy: {
       '/aidesign': {
-        // target: 'https://aidesign.nipponpaint.com.cn',//正式
         target: 'https://aidesigntest.nipponpaint.com.cn',//测试
         changeOrigin: true,
         secure: true