diff --git a/buyer/src/components/mixes/talkIm.vue b/buyer/src/components/mixes/talkIm.vue new file mode 100644 index 00000000..a50e3cab --- /dev/null +++ b/buyer/src/components/mixes/talkIm.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/buyer/src/pages/GoodsDetail.vue b/buyer/src/pages/GoodsDetail.vue index 929db852..14870db6 100644 --- a/buyer/src/pages/GoodsDetail.vue +++ b/buyer/src/pages/GoodsDetail.vue @@ -22,7 +22,7 @@ {{ storeCollected? "已收藏店铺": "收藏店铺" }} - 联系客服 + 联系客服 @@ -50,8 +50,7 @@ import { getGoodsDistribution, } from "@/api/member"; import { getDetailById } from "@/api/shopentry"; -import { getIMDetail } from "@/api/common"; -import Storage from "../plugins/storage"; +import imTalk from '@/components/mixes/talkIm' export default { name: "GoodsDetail", beforeRouteEnter (to, from, next) { @@ -61,6 +60,7 @@ export default { created () { this.getGoodsDetail(); }, + mixins: [imTalk], data () { return { goodsMsg: {}, // 商品信息 @@ -68,49 +68,11 @@ export default { categoryBar: [], // 分类 storeCollected: false, // 商品收藏 storeMsg: {}, // 店铺信息 - IMLink: "", + }; }, methods: { - // 跳转im客服 - async IMService () { - // 获取访问Token - let accessToken = Storage.getItem("accessToken"); - await this.getIMDetailMethods(); - if (!accessToken) { - this.$Message.error("请登录后再联系客服"); - return; - } - window.open( - this.IMLink + - "?token=" + - accessToken + - "&id=" + - this.goodsMsg.data.storeId + - "&goodsId=" + - this.goodsMsg.data.goodsId + - "&skuId=" + - this.goodsMsg.data.id - ); - // window.open( - // 'http://192.168.0.139:8000/' + - // "?token=" + - // accessToken + - // "&id=" + - // this.goodsMsg.data.storeId + - // "&goodsId=" + - // this.goodsMsg.data.goodsId + - // "&skuId=" + - // this.goodsMsg.data.id - // ); - }, - // 获取im信息 - async getIMDetailMethods () { - let res = await getIMDetail(); - if (res.success) { - this.IMLink = res.result; - } - }, + // 点击规格 targetClickSku (val) { this.getGoodsDetail(val); @@ -165,11 +127,13 @@ export default { } }); } + if (!this.storeMsg) { // 获取店铺信息 getDetailById(this.goodsMsg.data.storeId).then((res) => { if (res.success) { this.storeMsg = res.result; + } }); } diff --git a/buyer/src/pages/Merchant.vue b/buyer/src/pages/Merchant.vue index e99caeef..3cf82442 100644 --- a/buyer/src/pages/Merchant.vue +++ b/buyer/src/pages/Merchant.vue @@ -14,7 +14,7 @@ :color="storeCollected ? '#ed3f14' : '#fff'"/>{{ storeCollected ? '已收藏店铺' : '收藏店铺' }} - 联系客服 @@ -106,8 +106,7 @@ \ No newline at end of file diff --git a/im/src/components/editor/MeEditor.vue b/im/src/components/editor/MeEditor.vue index 345297ba..0c301fed 100644 --- a/im/src/components/editor/MeEditor.vue +++ b/im/src/components/editor/MeEditor.vue @@ -173,7 +173,6 @@ export default { methods: { // 读取对话编辑草稿信息 并赋值给当前富文本 getDraftText (index_name) { - console.log("findTalk(index_name)", findTalk(index_name)); return findTalk(index_name)?.draft_text || ""; }, diff --git a/im/src/components/face.vue b/im/src/components/face.vue index 9f4d6709..2ef80ab3 100644 --- a/im/src/components/face.vue +++ b/im/src/components/face.vue @@ -1,5 +1,5 @@ diff --git a/im/src/core/lazy-use.js b/im/src/core/lazy-use.js index 43a07afd..38ea74d0 100644 --- a/im/src/core/lazy-use.js +++ b/im/src/core/lazy-use.js @@ -85,5 +85,4 @@ Vue.prototype.$alert = MessageBox.alert import Contextmenu from 'vue-contextmenujs' Vue.use(Contextmenu) -process.env.NODE_ENV !== 'production' && - console.warn('[Lumen-IM] NOTICE: element-ui use lazy-load.') + diff --git a/im/src/plugins/ws-socket.js b/im/src/plugins/ws-socket.js index 69a3ac8b..21ecd690 100644 --- a/im/src/plugins/ws-socket.js +++ b/im/src/plugins/ws-socket.js @@ -1,3 +1,6 @@ +import { Notification, MessageBox } from "element-ui"; +let wsSignIn; // ws 是否是掉线状态 +import store from "@/store"; class WsSocket { /** * Websocket 连接 @@ -25,7 +28,7 @@ class WsSocket { reconnect: { lockReconnect: false, setTimeout: null, // 计时器对象 - time: 5000, // 重连间隔时间 + time: 1000, // 重连间隔时间 number: 1000, // 重连次数 }, }; @@ -49,9 +52,9 @@ class WsSocket { // 定义 WebSocket 原生方法 this.events = Object.assign( { - onError: (evt) => { }, - onOpen: (evt) => { }, - onClose: (evt) => { }, + onError: (evt) => {}, + onOpen: (evt) => {}, + onClose: (evt) => {}, }, events ); @@ -63,7 +66,7 @@ class WsSocket { * @param {String} event 事件名 * @param {Function} callBack 回调方法 */ - on (event, callBack) { + on(event, callBack) { // 对应 socket-instance.js this.onCallBacks[event] = callBack; return this; @@ -72,7 +75,23 @@ class WsSocket { /** * 加载 WebSocket */ - loadSocket () { + loadSocket() { + /** + * 判断当前如果是掉线提示 + * 重连成功后关闭掉线提示,新增重连提示 + */ + if (wsSignIn) { + store.commit('SET_WS_STATUS',true); + wsSignIn.close(); + + Notification({ + title: "成功", + message: "重连成功", + type: "success", + position: "top-right", + duration: 1000, + }); + } // 判断当前是否已经连接 if (this.connect != null) { this.connect.close(); @@ -85,41 +104,74 @@ class WsSocket { connect.onopen = this.onOpen.bind(this); connect.onmessage = this.onMessage.bind(this); connect.onclose = this.onClose.bind(this); - this.connect = connect; + + store.commit('SET_WS_STATUS',false); } /** * 连接 Websocket */ - connection () { + connection() { this.loadSocket(); } /** * 掉线重连 Websocket */ - reconnect () { - console.log("掉线重连接"); + reconnect() { + + /** + * 长时间挂载页面中并且重连次数为空的时候进行提示 + */ + if (this.config.reconnect.number == 0) { + MessageBox("当前对话链接已失效,请从关闭重新进入。", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + closeOnPressEscape: false, + closeOnClickModal: false, + type: "warning", + }) + .then(() => { + window.close(); + Notification({ + title: "对话链接已失效提示", + message: "请手动关闭当前页面", + type: "error", + position: "top-right", + }); + }) + .catch(() => { + Notification({ + title: "对话链接已失效提示", + message: "请手动关闭当前页面", + type: "error", + position: "top-right", + }); + }); + return false; + } + // 掉线重连提示 + wsSignIn = Notification({ + title: "掉线重连接提示", + message: `网络连接已断开,正在尝试重新连接......`, + type: "error", + position: "top-right", + duration: 0, + }); + // 掉线更改消息状态 + store.commit('SET_WS_STATUS',true); let reconnect = this.config.reconnect; if (reconnect.lockReconnect || reconnect.number == 0) { return; } - this.config.reconnect.lockReconnect = true; - // 没连接上会一直重连,设置延迟避免请求过多 reconnect.setTimeout && clearTimeout(reconnect.setTimeout); - this.config.reconnect.setTimeout = setTimeout(() => { this.connection(); - this.config.reconnect.lockReconnect = false; this.config.reconnect.number--; - - console.log( - `网络连接已断开,正在尝试重新连接(${this.config.reconnect.number})...` - ); }, reconnect.time); } @@ -128,8 +180,7 @@ class WsSocket { * * @param {Object} evt Websocket 消息 */ - onParse (evt) { - + onParse(evt) { const res = JSON.parse(evt.data).result; //如果创建时间是时间戳类型则转换为 日期类型,否则新压入栈的消息的创建时间和从数据库读取出来的创建时间格式对不上,处理的时候会出异常。 @@ -145,7 +196,7 @@ class WsSocket { * @param format 转换格式 * @returns {*|string} */ - unixToDate (unix, format) { + unixToDate(unix, format) { if (!unix) return unix; let _format = format || "yyyy-MM-dd hh:mm:ss"; const d = new Date(unix); @@ -179,7 +230,7 @@ class WsSocket { * * @param {Object} evt Websocket 消息 */ - onOpen (evt) { + onOpen(evt) { this.events.onOpen(evt); if (this.config.heartbeat.enabled) { @@ -192,7 +243,7 @@ class WsSocket { * * @param {Object} evt Websocket 消息 */ - onClose (evt) { + onClose(evt) { console.log("关闭连接", evt); if (this.config.heartbeat.enabled) { clearInterval(this.config.heartbeat.setInterval); @@ -211,7 +262,7 @@ class WsSocket { * * @param {Object} evt Websocket 消息 */ - onError (evt) { + onError(evt) { this.events.onError(evt); } @@ -220,28 +271,30 @@ class WsSocket { * * @param {Object} evt Websocket 消息 */ - onMessage (evt) { + onMessage(evt) { let result = this.onParse(evt); - if (this.onParse(evt).text.includes('goodsName') || this.onParse(evt).text.includes('groupName')) { + if ( + this.onParse(evt).text.includes("goodsName") || + this.onParse(evt).text.includes("groupName") + ) { let params = { ...this.onParse(evt), - text: JSON.parse(this.onParse(evt).text) - } + text: JSON.parse(this.onParse(evt).text), + }; this.onCallBacks["event_talk"](params); } else { let params = { ...this.onParse(evt), - text: this.onParse(evt).text - } + text: this.onParse(evt).text, + }; this.onCallBacks["event_talk"](params); } // 指定推送消息 - } /** * WebSocket心跳检测 */ - heartbeat () { + heartbeat() { console.log("WebSocket心跳检测"); this.config.heartbeat.setInterval = setInterval(() => { this.connect.send("PING"); @@ -253,14 +306,14 @@ class WsSocket { * * @param {Object} message */ - send (message) { + send(message) { this.connect.send(JSON.stringify(message)); } /** * 关闭连接 */ - close () { + close() { this.connect.close(); } @@ -270,7 +323,7 @@ class WsSocket { * @param {String} event 事件名 * @param {Object} data 数据 */ - emit (event, data) { + emit(event, data) { if (this.connect && this.connect.readyState === 1) { this.connect.send(JSON.stringify(data)); } else { diff --git a/im/src/store/modules/dialogue.js b/im/src/store/modules/dialogue.js index 8876b364..259612e3 100644 --- a/im/src/store/modules/dialogue.js +++ b/im/src/store/modules/dialogue.js @@ -21,11 +21,15 @@ export default { float: "", }, ], - + webSocketWithOut:false, // ws 是否是掉线 无输出状态 // 对话索引(聊天对话的唯一索引) index_name: null, }, mutations: { + // 设置ws状态 + SET_WS_STATUS: (state,resource) =>{ + state.webSocketWithOut = resource + }, // 更新对话 UPDATE_DIALOGUE_MESSAGE (state, resource) { state.records = []; @@ -56,6 +60,8 @@ export default { // 推送对话记录 PUSH_DIALOGUE (state, record) { + record = {...record,webSocketStatus:state.webSocketWithOut} + console.log("推送对话",) state.records.push(record); }, diff --git a/im/src/store/modules/talk.js b/im/src/store/modules/talk.js index d52847d4..e7770c6f 100644 --- a/im/src/store/modules/talk.js +++ b/im/src/store/modules/talk.js @@ -37,6 +37,7 @@ const Talk = { talkNum: (state) => state.items.length, }, mutations: { + // 设置对话列表 SET_TALK_ITEMS (state, resource) { Vue.set(state, 'items', resource.items) diff --git a/im/src/store/modules/user.js b/im/src/store/modules/user.js index 995c4566..507a2f96 100644 --- a/im/src/store/modules/user.js +++ b/im/src/store/modules/user.js @@ -19,7 +19,6 @@ let state = { // 判断用户是否登录 if (getToken()) { let userInfo = getUserInfo(); - console.error(userInfo) state.name = userInfo.name; state.id = userInfo.id; state.face = userInfo.face ? userInfo.face : state.avatar; diff --git a/im/src/store/state.js b/im/src/store/state.js index e571ecaf..64c8f811 100644 --- a/im/src/store/state.js +++ b/im/src/store/state.js @@ -4,8 +4,6 @@ const defaultAvatar = require('@/assets/image/detault-avatar.jpg') const state = { socketStatus: false, website_name: process.env.VUE_APP_WEBSITE_NAME, - copyright: `©2020 - 2021 ${process.env.VUE_APP_WEBSITE_NAME} 在线聊天 Github源码`, - // 头像加载失败后的默认头像 defaultAvatar: "this.src='" + defaultAvatar + "'", } diff --git a/im/src/utils/request.js b/im/src/utils/request.js index 517b9d59..eedb8d92 100644 --- a/im/src/utils/request.js +++ b/im/src/utils/request.js @@ -14,6 +14,7 @@ const request = axios.create({ timeout: 20000, }); +let isRefreshing = false /** * 异常拦截处理器 * @@ -27,10 +28,12 @@ const errorHandler = (error) => { removeAll(); location.reload(); } else if (error.response.status == 403) { + if(!isRefreshing){ + /** * 403提示将重新从商家移动端进入当前页面 */ - MessageBox("当前登录已失效,请从商家管理后台重新登录。", "提示", { + MessageBox("当前登录已失效,请从关闭重新进入。", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", closeOnPressEscape: false, @@ -38,6 +41,7 @@ const errorHandler = (error) => { type: "warning", }) .then(() => { + isRefreshing = true window.close(); Notification({ title:"登录失效提示", @@ -45,9 +49,10 @@ const errorHandler = (error) => { type:"error", position: "top-right", }); + }) .catch(() => { - + isRefreshing = true Notification({ title:"登录失效提示", message: "请手动关闭当前页面", @@ -55,6 +60,8 @@ const errorHandler = (error) => { position: "top-right", }); }); + isRefreshing = false + } } else if(error.response.status == 400){ Notification({ message: error.response.data.message, diff --git a/im/src/views/message/index.vue b/im/src/views/message/index.vue index ba327c57..7b65757f 100644 --- a/im/src/views/message/index.vue +++ b/im/src/views/message/index.vue @@ -9,7 +9,7 @@

@@ -263,7 +263,7 @@ export default { }, unreadNum (value) { clearInterval(this.interval); - console.log("%c 更新未读消息", "color:#32ccbc"); + // console.log("%c 更新未读消息", "color:#32ccbc"); this.$store.commit("SET_UNREAD_NUM", value); if (value > 0) { diff --git a/manager/src/views/sys/setting-manage/setting/LOGISTICS_SETTING.vue b/manager/src/views/sys/setting-manage/setting/LOGISTICS_SETTING.vue index fda005fe..98a154a8 100644 --- a/manager/src/views/sys/setting-manage/setting/LOGISTICS_SETTING.vue +++ b/manager/src/views/sys/setting-manage/setting/LOGISTICS_SETTING.vue @@ -5,21 +5,40 @@ 快递鸟 快递100 + 顺丰 - + - + - + - + +

+ + + + + + + + + + + + + + + + +
@@ -36,12 +55,13 @@ export default { formValidate: { // 表单数据 type: "", kdniaoEbusinessID: "", - kdniaoAppKey: "" , - kuaidi100Customer: "" , - kuaidi100Key: "" ,}, + kdniaoAppKey: "", + kuaidi100Customer: "", + kuaidi100Key: "", + }, }; }, - props: ["res",'type'], + props: ["res", 'type'], created() { this.init(); }, @@ -49,7 +69,7 @@ export default { // 验证 submit(name) { let that = this; - if( handleSubmit(that, name )){ + if (handleSubmit(that, name)) { this.setupSetting() } }, @@ -83,15 +103,17 @@ export default { +} diff --git a/seller/src/api/common.js b/seller/src/api/common.js index 0b024239..5951ab3f 100644 --- a/seller/src/api/common.js +++ b/seller/src/api/common.js @@ -1,4 +1,4 @@ -import { commonUrl, getRequest, uploadFileRequest ,uploadFile} from "@/libs/axios"; +import { commonUrl, getRequest, uploadFileRequest, uploadFile, request} from "@/libs/axios"; // 通过id获取子地区 export const getChildRegion = (id) => { @@ -25,3 +25,10 @@ export const upLoadFileMethods = (bold) => { console.log(bold) return uploadFileRequest(uploadFile, bold); }; + +/** + * 发送短信验证码 + */ +export function sendSms (params) { + return getRequest(`${commonUrl}/common/common/sms/${params.verificationEnums}/${params.mobile}`,params); +} diff --git a/seller/src/api/index.js b/seller/src/api/index.js index 38e125cc..3c124882 100644 --- a/seller/src/api/index.js +++ b/seller/src/api/index.js @@ -37,6 +37,11 @@ export const login = params => { return postRequestWithNoTokenData("/passport/login/userLogin", params); }; +// 手机登陆 +export const storeSmsLogin = params => { + return postRequestWithNoToken("/passport/login/smsLogin", params); +}; + // 登出 export const logout = () => { return postRequest("/passport/login/logout"); @@ -50,7 +55,10 @@ export const userInfo = params => { export const userMsg = params => { return getRequest('/settings/storeSettings', params) } - +//验证短信验证码 +export const validateCode = params => { + return postRequestWithNoToken("/passport/login/resetByMobile", params); +}; // 初始化验证码 export const initCaptcha = params => { return getRequestWithNoToken("/common/captcha/init", params); @@ -107,6 +115,10 @@ export const sendCodeEmail = (email, params) => { export const editEmail = params => { return postRequest("/email/editEmail", params); }; +// 忘记密码并修改 +export const forgetAndModify = params => { + return postRequest("/passport/login/resetPassword", params); +}; // 个人中心修改密码 export const changePass = params => { return postRequest("/passport/login/modifyPass", params); diff --git a/seller/src/api/logistics.js b/seller/src/api/logistics.js index a74a861a..c0d7da8b 100644 --- a/seller/src/api/logistics.js +++ b/seller/src/api/logistics.js @@ -4,6 +4,7 @@ import { postRequest, putRequest, deleteRequest, + getRequestHasHeader, importRequest, getRequestWithNoToken } from "@/libs/axios"; @@ -35,4 +36,13 @@ export const getCheckedOn = params =>{ return getRequest(`/other/logistics/getCheckedFaceSheet`,params); } +//获取物流设置 +export const getLogisticsSetting = () =>{ + return getRequest(`/other/logistics/setting`); +} + +export const getShunFengFaceSheet = (url,headers) =>{ + return getRequestHasHeader(`${url}`,null,headers); +} + diff --git a/seller/src/api/order.js b/seller/src/api/order.js index ff709b67..0b20ac0f 100644 --- a/seller/src/api/order.js +++ b/seller/src/api/order.js @@ -81,6 +81,11 @@ export const orderDelivery = (sn, params) => { return postRequest(`/order/order/${sn}/delivery`, params); }; +// 订单发货 +export const orderShunFengDelivery = (sn) => { + return postRequest(`/order/order/${sn}/shunfeng/delivery`); +}; + // 获取商家选中的物流公司 export const getLogisticsChecked = () => { return getRequest(`/other/logistics/getChecked`); diff --git a/seller/src/libs/axios.js b/seller/src/libs/axios.js index 7642288c..031a79db 100644 --- a/seller/src/libs/axios.js +++ b/seller/src/libs/axios.js @@ -188,6 +188,38 @@ export const getRequest = (url, params, resBlob) => { return service(data); }; +export const getRequestHasHeader = (url, params, headers) => { + let accessToken = getStore("accessToken"); + let data = { + method: "get", + url: `${url}`, + params: params, + transformRequest: headers + ? undefined + : [ + function(data) { + let ret = ""; + for (let it in data) { + ret += + encodeURIComponent(it) + + "=" + + encodeURIComponent(data[it]) + + "&"; + } + ret = ret.substring(0, ret.length - 1); + return ret; + } + ], + headers: { + "Content-Type": "application/x-www-form-urlencoded", + accessToken: accessToken, + ...headers + }, + responseType: "blob" + }; + return service(data); +}; + export const postRequest = (url, params, headers) => { let accessToken = getStore("accessToken"); return service({ diff --git a/seller/src/router/index.js b/seller/src/router/index.js index 176eb936..7ab1a445 100644 --- a/seller/src/router/index.js +++ b/seller/src/router/index.js @@ -3,7 +3,7 @@ import ViewUI from 'view-design'; import Util from '../libs/util'; import VueRouter from 'vue-router'; import Cookies from 'js-cookie'; -import {routers} from './router'; +import { routers } from './router'; Vue.use(VueRouter); @@ -16,10 +16,10 @@ const RouterConfig = { /** * 解决重复点击菜单会控制台报错bug */ - const routerPush = VueRouter.prototype.push - VueRouter.prototype.push = function push(location) { - return routerPush.call(this, location).catch(error=> error) - } +const routerPush = VueRouter.prototype.push +VueRouter.prototype.push = function push(location) { + return routerPush.call(this, location).catch(error => error) +} export const router = new VueRouter(RouterConfig); @@ -32,10 +32,15 @@ router.beforeEach((to, from, next) => { const name = to.name; if (!Cookies.get('userInfoSeller') && name !== 'login') { - // 判断是否已经登录且前往的页面不是登录页 - next({ - name: 'login' - }); + if (name === 'forgetPassword') { + console.log(name) + Util.toDefaultPage([...routers], name, router, next); + } else { + // 判断是否已经登录且前往的页面不是登录页 + next({ + name: 'login' + }); + } } else if (Cookies.get('userInfoSeller') && name === 'login') { // 判断是否已经登录且前往的是登录页 Util.title(); diff --git a/seller/src/router/router.js b/seller/src/router/router.js index 61acc146..e47bb194 100644 --- a/seller/src/router/router.js +++ b/seller/src/router/router.js @@ -10,6 +10,11 @@ export const loginRouter = { }, component: () => import("@/views/login.vue") }; +export const forgetPasswordRouter = { + path: "/forgetPassword", + name: "forgetPassword", + component: () => import("@/views/ForgetPassword.vue") +}; // 作为Main组件的子页面展示但是不在左侧菜单显示的路由写在otherRouter里 export const otherRouter = { @@ -193,4 +198,4 @@ export const page500 = { component: () => import("@/views/error-page/500.vue") }; // 所有上面定义的路由都要写在下面的routers里 -export const routers = [loginRouter, otherRouter, page500, page403]; +export const routers = [loginRouter, forgetPasswordRouter, otherRouter, page500, page403]; diff --git a/seller/src/views/ForgetPassword.vue b/seller/src/views/ForgetPassword.vue new file mode 100644 index 00000000..8c706cc8 --- /dev/null +++ b/seller/src/views/ForgetPassword.vue @@ -0,0 +1,331 @@ + + + + + diff --git a/seller/src/views/home/home.vue b/seller/src/views/home/home.vue index 36f03b44..16e56e9a 100644 --- a/seller/src/views/home/home.vue +++ b/seller/src/views/home/home.vue @@ -21,7 +21,7 @@
店铺状态:{{ userData.storeDisable == 'OPEN' ? '开启中' : '关闭' }}
- +
@@ -207,7 +207,7 @@ import { getSellerHomeData, getHomeNotice } from "@/api/index"; import { getIMDetail } from "@/api/common" import { seeArticle } from "@/api/pages"; import Cookies from "js-cookie"; - +import { userMsg } from "@/api/index"; export default { name: "home", data () { @@ -221,8 +221,10 @@ export default { title: "", }, IMLink: "", + load:false, //加载Im }; }, + methods: { // 跳转页面 navigateTo (name) { @@ -249,16 +251,24 @@ export default { this.noticeFlage = true; } }, + + /** + * 点击登录im的时候需要去判断一下当前店铺信息是否失效 + * 失效的话重新请求刷新token保证最新的token去访问im + */ async im () { // 获取访问Token let accessToken = this.getStore("accessToken"); + this.load = true await this.getIMDetailMethods(); - let res = await getIMDetail(); - if (!accessToken) { - this.$Message.error("请登录后再联系客服"); - return; + const userInfo = await userMsg(); + this.load = false + if (userInfo.success && this.IMLink) { + window.open(`${this.IMLink}?token=` + accessToken); + } + else{ + this.$Message.error("请登录后再联系客服"); } - window.open(`${res.result}?token=` + accessToken); }, // 获取im信息 diff --git a/seller/src/views/login.vue b/seller/src/views/login.vue index e46cbc8e..64b05c3c 100644 --- a/seller/src/views/login.vue +++ b/seller/src/views/login.vue @@ -2,59 +2,58 @@