提交 4813cf77 作者: 毛细亚

合并分支 '1.2' 到 'release'

1.2

查看合并请求 !5
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"/><title>company_app</title><script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script><script defer="defer" src="static/js/chunk-vendors.b6398f5b.js"></script><script defer="defer" src="static/js/app.101d7d80.js"></script><link href="static/css/chunk-vendors.8e901099.css" rel="stylesheet"><link href="static/css/app.1b60c483.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but company_app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html> <!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"/><title>company_app</title><script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script><script defer="defer" src="static/js/chunk-vendors.72a90e47.js"></script><script defer="defer" src="static/js/app.003145b5.js"></script><link href="static/css/chunk-vendors.8e901099.css" rel="stylesheet"><link href="static/css/app.8a15faf7.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but company_app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
\ No newline at end of file \ No newline at end of file
# 客服休息状态功能文档
本文档描述了客服休息状态功能的实现方法和使用说明,该功能支持客服在忙碌或休息时暂时停止接收新消息。
## 功能概述
客服休息状态功能允许客服在午休或临时有事时设置自己为"休息中"状态,以便合理安排工作时间。同时,还提供了发送评价功能,方便客服向客户发送评价请求。
## 相关API
### 1. 获取客服休息状态
```javascript
import { getClientStatus } from '@/api/user.js'
// 获取客服休息状态
const response = await getClientStatus()
if (response.status_code === 1) {
const status = response.data.client_online_status
// status 可能的值:
// - online: 在线
// - offline: 离线
// - rest: 休息中
}
```
### 2. 开始休息
```javascript
import { client_session_rest } from '@/api/user.js'
// 开始休息
const response = await client_session_rest()
if (response.status_code === 1) {
// 休息开始成功
// 可以更新界面显示为"休息中"状态
}
```
### 3. 结束休息
```javascript
import { finishRest } from '@/api/user.js'
// 结束休息
const response = await finishRest()
if (response.status_code === 1) {
// 休息结束成功
// 可以更新界面显示为"在线"状态
}
```
### 4. 发送评价
```javascript
import { sendComment } from '@/api/user.js'
import { sendChatMessage } from '@/utils/index.js'
// 发送评价
const response = await sendComment({
corp_id: '企业ID',
external_userid: '外部联系人ID',
userid: '客服ID'
})
if (response.status_code === 1 && response.data.news) {
// 使用企业微信JSSDK发送评价
const result = await sendChatMessage(response.data.news, 'link')
if (result.success) {
// 评价发送成功
}
}
```
## 会话内容存档相关API
### 1. 检查客户是否同意聊天内容存档
```javascript
import { checkSingleAgree } from '@/api/user.js'
// 检查客户是否同意聊天内容存档
const response = await checkSingleAgree({
external_userid: '外部联系人ID',
userid: '客服ID'
})
if (response.status_code === 1) {
const agreeStatus = response.data.agree_status
// agreeStatus 可能的值:
// - Agreen: 已同意
// - Disagree: 未同意
}
```
### 2. 检查客服号是否开启会话内容存档
```javascript
import { checkUserPermit } from '@/api/user.js'
// 检查客服号是否开启会话内容存档
const response = await checkUserPermit({
userid: '客服ID'
})
if (response.status_code === 1) {
const hasPermit = response.data.has_permit
// hasPermit: true 已授权, false 未授权
}
```
### 3. 同步智能标签
```javascript
import { remarkSessionIntelTag } from '@/api/user.js'
// 同步智能标签
await remarkSessionIntelTag({
corp_id: '企业ID',
external_userid: '外部联系人ID',
userid: '客服ID'
})
```
## 使用示例
### 在Vue组件中整合所有功能
```javascript
import { mapState, mapMutations, mapActions } from 'vuex'
import {
getClientStatus,
remarkSessionIntelTag,
finishRest,
client_session_rest,
checkSingleAgree,
checkUserPermit,
sendComment
} from '@/api/user.js'
import { sendChatMessage } from '@/utils/index.js'
export default {
data() {
return {
// 相关状态
agreeStatus: '', // 用户是否同意聊天内容存档
hasPermit: false // 客服号是否开启会话内容存档权限
}
},
computed: {
...mapState('user', ['client_online_status', 'corp_id', 'external_userid', 'userid']),
// 状态文本转换
clientStatusText() {
const statusMap = {
'online': '在线',
'offline': '离线',
'rest': '休息中'
}
return statusMap[this.client_online_status] || '未知'
}
},
created() {
// 初始化企业微信SDK
this.initializeWecom()
// 获取各种状态
this.getInitialData()
},
methods: {
...mapActions('user', ['initWecom']),
// 获取初始数据
async getInitialData() {
// 实现获取状态逻辑
},
// 开始休息
async handleStartRest() {
// 实现开始休息逻辑
},
// 结束休息
async handleFinishRest() {
// 实现结束休息逻辑
},
// 发送评价
async handleSendComment() {
// 实现发送评价逻辑
}
}
}
```
## 界面展示
客服状态显示和按钮应该包含以下元素:
1. 当前状态显示:显示客服当前是"在线"、"离线"还是"休息中"
2. 休息相关按钮:
- 在线状态下显示"开始休息"按钮
- 休息中状态显示"结束休息"按钮
3. 发送评价按钮:用于向客户发送评价请求
4. 会话内容存档状态显示:
- 显示客户是否已开启会话内容存档
- 显示客服号是否已授权会话内容存档
## 注意事项
1. 客服在"休息中"状态时不能直接下线,必须先结束休息
2. 开始休息按钮悬停时应显示提示文字:"午休或者临时有事可点击休息"
3. 使用企业微信JSSDK前需确保已初始化成功
4. 所有状态变更应同步更新到Vuex store,以便在多个组件中共享
\ No newline at end of file
{
"recommendations": ["stagewise.stagewise-vscode-extension"]
}
\ No newline at end of file
...@@ -36,8 +36,9 @@ ...@@ -36,8 +36,9 @@
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.12.16", "@babel/core": "^7.12.16",
"@stagewise/toolbar": "^0.4.4", "@stagewise-plugins/vue": "^0.4.6",
"@stagewise/toolbar-vue": "^0.4.4", "@stagewise/toolbar": "^0.4.8",
"@stagewise/toolbar-vue": "^0.4.8",
"@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-router": "~5.0.0", "@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-plugin-vuex": "~5.0.0", "@vue/cli-plugin-vuex": "~5.0.0",
......
...@@ -84,12 +84,15 @@ importers: ...@@ -84,12 +84,15 @@ importers:
'@babel/core': '@babel/core':
specifier: ^7.12.16 specifier: ^7.12.16
version: 7.27.1 version: 7.27.1
'@stagewise-plugins/vue':
specifier: ^0.4.6
version: 0.4.6(@stagewise/toolbar@0.4.8)
'@stagewise/toolbar': '@stagewise/toolbar':
specifier: ^0.4.4 specifier: ^0.4.8
version: 0.4.4 version: 0.4.8
'@stagewise/toolbar-vue': '@stagewise/toolbar-vue':
specifier: ^0.4.4 specifier: ^0.4.8
version: 0.4.4(vue@2.7.16) version: 0.4.8(vue@2.7.16)
'@vue/cli-plugin-babel': '@vue/cli-plugin-babel':
specifier: ~5.0.0 specifier: ~5.0.0
version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.14)(lodash@4.17.21)(sass-loader@16.0.5(node-sass@4.14.1)(sass@1.89.0)(webpack@5.99.8))(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.2.3))(core-js@3.42.0)(vue@2.7.16) version: 5.0.8(@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.14)(lodash@4.17.21)(sass-loader@16.0.5(node-sass@4.14.1)(sass@1.89.0)(webpack@5.99.8))(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-sources@3.2.3))(core-js@3.42.0)(vue@2.7.16)
...@@ -809,13 +812,18 @@ packages: ...@@ -809,13 +812,18 @@ packages:
'@soda/get-current-script@1.0.2': '@soda/get-current-script@1.0.2':
resolution: {integrity: sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==} resolution: {integrity: sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==}
'@stagewise/toolbar-vue@0.4.4': '@stagewise-plugins/vue@0.4.6':
resolution: {integrity: sha512-0+r8SGExjz3+A64aMGgbg0clESg6yxZPwlO1aY+3bIwBjE+F/V3MetRE+5b7AuRKqEoz8GUXnll5O/zHIL+I3Q==} resolution: {integrity: sha512-Y/cdDLXDN2cusvpmFYxbQT1DEW1fYzoFjmsnXBth52sSLYNc83XXMTXt2kvYSGWOW+ZxM1Dj+T4eE9bY8b/QSA==}
peerDependencies:
'@stagewise/toolbar': 0.4.8
'@stagewise/toolbar-vue@0.4.8':
resolution: {integrity: sha512-Zvxz59apepocu2cOD8UqUWIF7fIABGr+DNDSmz6Kp2nf1APNmfiK3QJ52rI2PfVDG9jaSE56EfYUA0t1xFJLYw==}
peerDependencies: peerDependencies:
vue: '>=3.0.0' vue: '>=3.0.0'
'@stagewise/toolbar@0.4.4': '@stagewise/toolbar@0.4.8':
resolution: {integrity: sha512-hVxGqeYFx780m9SIv+YqhHx4o/fq94pMwr8OoemOCyOKozCGkvSIjpqkONvUyY5yWR+AVcop2p79LsSTdA6Etw==} resolution: {integrity: sha512-0ByvC4hYdHHf3rK5M+xSR9mipHYr8naNn2OgDBtv4DE0SoSCr08KfQtZ6VpsBNbOW/Mh1Y4c/AoWcyCTOc2ocA==}
'@trysound/sax@0.2.0': '@trysound/sax@0.2.0':
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
...@@ -1433,6 +1441,9 @@ packages: ...@@ -1433,6 +1441,9 @@ packages:
brace-expansion@1.1.11: brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
braces@3.0.3: braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'} engines: {node: '>=8'}
...@@ -6275,12 +6286,16 @@ snapshots: ...@@ -6275,12 +6286,16 @@ snapshots:
'@soda/get-current-script@1.0.2': {} '@soda/get-current-script@1.0.2': {}
'@stagewise/toolbar-vue@0.4.4(vue@2.7.16)': '@stagewise-plugins/vue@0.4.6(@stagewise/toolbar@0.4.8)':
dependencies:
'@stagewise/toolbar': 0.4.8
'@stagewise/toolbar-vue@0.4.8(vue@2.7.16)':
dependencies: dependencies:
'@stagewise/toolbar': 0.4.4 '@stagewise/toolbar': 0.4.8
vue: 2.7.16 vue: 2.7.16
'@stagewise/toolbar@0.4.4': {} '@stagewise/toolbar@0.4.8': {}
'@trysound/sax@0.2.0': {} '@trysound/sax@0.2.0': {}
...@@ -7324,6 +7339,12 @@ snapshots: ...@@ -7324,6 +7339,12 @@ snapshots:
balanced-match: 1.0.2 balanced-match: 1.0.2
concat-map: 0.0.1 concat-map: 0.0.1
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
optional: true
braces@3.0.3: braces@3.0.3:
dependencies: dependencies:
fill-range: 7.1.1 fill-range: 7.1.1
...@@ -8689,7 +8710,7 @@ snapshots: ...@@ -8689,7 +8710,7 @@ snapshots:
fs.realpath: 1.0.0 fs.realpath: 1.0.0
inflight: 1.0.6 inflight: 1.0.6
inherits: 2.0.4 inherits: 2.0.4
minimatch: 3.1.2 minimatch: 3.0.8
once: 1.4.0 once: 1.4.0
path-is-absolute: 1.0.1 path-is-absolute: 1.0.1
optional: true optional: true
...@@ -9625,7 +9646,7 @@ snapshots: ...@@ -9625,7 +9646,7 @@ snapshots:
minimatch@3.0.8: minimatch@3.0.8:
dependencies: dependencies:
brace-expansion: 1.1.11 brace-expansion: 1.1.12
optional: true optional: true
minimatch@3.1.2: minimatch@3.1.2:
...@@ -11776,7 +11797,7 @@ snapshots: ...@@ -11776,7 +11797,7 @@ snapshots:
wide-align@1.1.5: wide-align@1.1.5:
dependencies: dependencies:
string-width: 4.2.3 string-width: 1.0.2
optional: true optional: true
wildcard@2.0.1: {} wildcard@2.0.1: {}
......
...@@ -98,6 +98,10 @@ export default { ...@@ -98,6 +98,10 @@ export default {
path: '/quickSendGame' path: '/quickSendGame'
}, },
// { // {
// label: '任务列表',
// path: '/taskList'
// },
// {
// label: '通讯录', // label: '通讯录',
// path: '/addressBook' // path: '/addressBook'
// }, // },
......
...@@ -94,7 +94,7 @@ export function sendComment(data) { ...@@ -94,7 +94,7 @@ export function sendComment(data) {
export function client_session_rest(data) { export function client_session_rest(data) {
// 发送一个post请求,请求的url为'/sidebar/client_session/rest',请求的数据为data // 发送一个post请求,请求的url为'/sidebar/client_session/rest',请求的数据为data
return request({ return request({
url: '/sidebar/client_session/rest', url: '/sidebar/work_wei_xin/rest',
method: 'post', method: 'post',
data data
}) })
...@@ -120,7 +120,7 @@ export function remarkSessionIntelTag(data) { ...@@ -120,7 +120,7 @@ export function remarkSessionIntelTag(data) {
// 获取客户号的休息状态 // 获取客户号的休息状态
export function getClientStatus(data) { export function getClientStatus(data) {
return request({ return request({
url: '/sidebar/work_wei_xin/getClientStatus', url: '/sidebar/work_wei_xin/info',
method: 'post', method: 'post',
data data
}) })
......
...@@ -225,3 +225,21 @@ export function zyouGetMemberLink(data) { ...@@ -225,3 +225,21 @@ export function zyouGetMemberLink(data) {
data data
}) })
} }
// 我的任务获取红点数组
export function getTaskUnReadData(data) {
return request({
url: returnApi('/corp_zyou_bind/getTaskUnReadData'),
method: 'post',
data
})
}
// 我的任务小时红点数字
export function clearTaskUnReadData(data) {
return request({
url: returnApi('/corp_zyou_bind/clearTaskUnReadData'),
method: 'post',
data
})
}
\ No newline at end of file
...@@ -363,19 +363,13 @@ ...@@ -363,19 +363,13 @@
padding-bottom: 120px; padding-bottom: 120px;
.input { .input {
width: 250px; width: 250px;
::v-deep .el-input__inner {
width: vw(250);
}
::v-deep .el-button {
width: vw(76);
}
} }
.contnet { .contnet {
width: 100%; width: 100%;
height: auto; height: auto;
margin-top: 20px; margin-top: 20px;
.contnetLeft { .contnetLeft {
width: vw(500); width: auto;
height: 600px; height: 600px;
border-radius: 8px; border-radius: 8px;
border: 1px solid rgba(0, 0, 0, 0.06); border: 1px solid rgba(0, 0, 0, 0.06);
...@@ -384,7 +378,7 @@ ...@@ -384,7 +378,7 @@
padding-top: 40px; padding-top: 40px;
} }
.contnetRight { .contnetRight {
width: vw(260); width: 260px;
height: 600px; height: 600px;
border-radius: 8px; border-radius: 8px;
border: 1px solid rgba(0, 0, 0, 0.06); border: 1px solid rgba(0, 0, 0, 0.06);
......
...@@ -62,7 +62,7 @@ function createScrollHandler(el, binding, vnode) { ...@@ -62,7 +62,7 @@ function createScrollHandler(el, binding, vnode) {
const options = el.__infinite_scroll_options; const options = el.__infinite_scroll_options;
// 检查是否禁用 // 检查是否禁用
if (options.disabled) return; if (options && options.disabled) return;
const scrollContainer = el.__infinite_scroll_container; const scrollContainer = el.__infinite_scroll_container;
const isBottom = isScrollBottom(scrollContainer, el, options.distance); const isBottom = isScrollBottom(scrollContainer, el, options.distance);
......
...@@ -26,16 +26,26 @@ Vue.use(globalComponent).use(permission).use(clickagain).use(loadmore).use(scrol ...@@ -26,16 +26,26 @@ Vue.use(globalComponent).use(permission).use(clickagain).use(loadmore).use(scrol
import '@/utils/vconsoleCleanup' import '@/utils/vconsoleCleanup'
// 开发环境下初始化 stagewise 工具栏 // 开发环境下初始化 stagewise 工具栏
// if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
// import('@stagewise/toolbar').then(({ initToolbar }) => { import('@stagewise/toolbar-vue').then(({ StagewiseToolbar }) => {
// const stagewiseConfig = { import('@stagewise-plugins/vue').then(({ VuePlugin }) => {
// plugins: [] const stagewiseConfig = {
// }; plugins: [VuePlugin]
// initToolbar(stagewiseConfig); };
// }).catch(err => { // 动态创建并挂载 StagewiseToolbar 组件
// console.error('Failed to initialize stagewise toolbar:', err); const ToolbarConstructor = Vue.extend({
// }); render(h) {
// } return h(StagewiseToolbar, { props: { config: stagewiseConfig } });
}
});
const toolbarInstance = new ToolbarConstructor();
toolbarInstance.$mount();
document.body.appendChild(toolbarInstance.$el);
});
}).catch(err => {
console.error('Failed to initialize stagewise toolbar:', err);
});
}
// 开发环境不收集日志 // 开发环境不收集日志
if (process.env.NODE_ENV !== 'development') { if (process.env.NODE_ENV !== 'development') {
......
...@@ -11,6 +11,7 @@ import violationRecord from '../views/ViolationRecord.vue' ...@@ -11,6 +11,7 @@ import violationRecord from '../views/ViolationRecord.vue'
import taskRecord from '../views/taskRecord.vue' import taskRecord from '../views/taskRecord.vue'
import mailList from '@/views/mailList.vue' import mailList from '@/views/mailList.vue'
import quickSendGame from '@/views/quickSendGame.vue' import quickSendGame from '@/views/quickSendGame.vue'
// import taskList from '@/views/taskList.vue'
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
import store from '@/store' import store from '@/store'
Vue.use(VueRouter) Vue.use(VueRouter)
...@@ -77,6 +78,11 @@ const routes = [ ...@@ -77,6 +78,11 @@ const routes = [
name: 'quickSendGame', name: 'quickSendGame',
component: quickSendGame component: quickSendGame
}, },
// {
// path: '/taskList',
// name: 'taskList',
// component: taskList
// },
{ {
path: '/login', path: '/login',
name: 'login', name: 'login',
......
...@@ -14,6 +14,7 @@ const state = { ...@@ -14,6 +14,7 @@ const state = {
send_game_log: null, // 转游发送渠道新增日志发送信息 send_game_log: null, // 转游发送渠道新增日志发送信息
chatUserInfo: {}, // 当前选中的用户的详情 chatUserInfo: {}, // 当前选中的用户的详情
viewLoading:false, // 查看用户详情的时候 加载状态 viewLoading:false, // 查看用户详情的时候 加载状态
taskDetails: {}, // 任务详情
} }
const mutations = { const mutations = {
...@@ -34,6 +35,9 @@ const mutations = { ...@@ -34,6 +35,9 @@ const mutations = {
}, },
set_viewLoading(state, data) { set_viewLoading(state, data) {
state.viewLoading = data state.viewLoading = data
},
set_taskDetails(state, data) {
state.taskDetails = data
} }
} }
......
...@@ -31,6 +31,7 @@ const state = { ...@@ -31,6 +31,7 @@ const state = {
}, },
weixin_blongs_id_list:[], weixin_blongs_id_list:[],
isWecomSDKReady: false, // 添加企业微信 SDK 就绪状态 isWecomSDKReady: false, // 添加企业微信 SDK 就绪状态
client_online_status: '', // 客服休息状态: online上线 offline下线 rest休息中
// 六子的 用户id wm5rUgMgAAjqjOcqp8i3lEhFZDQieWug // 六子的 用户id wm5rUgMgAAjqjOcqp8i3lEhFZDQieWug
// 我的 userid JinDuoXia cser_id 4090 corp_id wweaefe716636df3d1 cser_id 4090 token token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJpc3MiOjQwOTAsImlhdCI6MTc0NzgxMjMxMiwiZXhwIjoxNzQ4NDE3MTEyLCJuYmYiOjE3NDc4MTIzMTIsInN1YiI6InRva2Vu6K6k6K-BIiwianRpIjoiMjBkOTY3MDZiYzI1MDdmY2MxOWI2MjU1YTM0YWQ3M2YifQ.yX7E7QHV7x2ubpa8iK3Avy794EiHNCaW2CtB4A4UQWo // 我的 userid JinDuoXia cser_id 4090 corp_id wweaefe716636df3d1 cser_id 4090 token token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJpc3MiOjQwOTAsImlhdCI6MTc0NzgxMjMxMiwiZXhwIjoxNzQ4NDE3MTEyLCJuYmYiOjE3NDc4MTIzMTIsInN1YiI6InRva2Vu6K6k6K-BIiwianRpIjoiMjBkOTY3MDZiYzI1MDdmY2MxOWI2MjU1YTM0YWQ3M2YifQ.yX7E7QHV7x2ubpa8iK3Avy794EiHNCaW2CtB4A4UQWo
} }
...@@ -73,6 +74,9 @@ const mutations = { ...@@ -73,6 +74,9 @@ const mutations = {
set_isWecomSDKReady(state, status) { set_isWecomSDKReady(state, status) {
state.isWecomSDKReady = status state.isWecomSDKReady = status
}, },
set_client_online_status(state, status) {
state.client_online_status = status
},
} }
const actions = { const actions = {
......
...@@ -700,7 +700,6 @@ li { ...@@ -700,7 +700,6 @@ li {
/* ----------------- el-collapse 组件全局样式 --------------------*/ /* ----------------- el-collapse 组件全局样式 --------------------*/
.el-collapse { .el-collapse {
.el-collapse-item { .el-collapse-item {
margin-bottom: 8px;
border-radius: 4px; border-radius: 4px;
overflow: hidden; overflow: hidden;
&__header { &__header {
...@@ -849,3 +848,7 @@ li { ...@@ -849,3 +848,7 @@ li {
font-weight: 500; font-weight: 500;
} }
} }
.el-input__icon{
line-height: 1;
}
...@@ -79,8 +79,10 @@ service.interceptors.response.use( ...@@ -79,8 +79,10 @@ service.interceptors.response.use(
if (res.status_code === -100) { if (res.status_code === -100) {
// 登录 过期 重新去登录 // 登录 过期 重新去登录
setTimeout(() => { setTimeout(() => {
if(process.env.NODE_ENV !== 'development'){
removeToken() removeToken()
window.location.href = window.location.origin +'/company_app/index.html?corp_id='+Cookies.get('corp_id') window.location.href = window.location.origin +'/company_app/index.html?corp_id='+Cookies.get('corp_id')
}
}, 2000); }, 2000);
return res return res
} }
......
...@@ -586,7 +586,7 @@ export default { ...@@ -586,7 +586,7 @@ export default {
.chatListItem { .chatListItem {
width: 100%; width: 100%;
height: 68px; height: 68px;
padding: 3px vw(20); padding: 3px 10px;
position: relative; position: relative;
cursor: pointer; cursor: pointer;
color: #333333; color: #333333;
...@@ -813,7 +813,7 @@ export default { ...@@ -813,7 +813,7 @@ export default {
} }
.trans-follow-1 { .trans-follow-1 {
width: vw(300); width: 300px;
min-height: fit-content; min-height: fit-content;
margin: 6px 0 12px 0; margin: 6px 0 12px 0;
padding: 12px 12px 2px 12px; padding: 12px 12px 2px 12px;
......
...@@ -516,7 +516,7 @@ export default { ...@@ -516,7 +516,7 @@ export default {
.chatListItem { .chatListItem {
width: 100%; width: 100%;
height: 68px; height: 68px;
padding: 3px vw(20); padding: 3px 10px;
position: relative; position: relative;
cursor: pointer; cursor: pointer;
color: #333333; color: #333333;
...@@ -743,7 +743,7 @@ export default { ...@@ -743,7 +743,7 @@ export default {
} }
.trans-follow-1 { .trans-follow-1 {
width: vw(300); width: 300px;
min-height: fit-content; min-height: fit-content;
margin: 6px 0 12px 0; margin: 6px 0 12px 0;
padding: 12px 12px 2px 12px; padding: 12px 12px 2px 12px;
......
...@@ -305,7 +305,7 @@ export default { ...@@ -305,7 +305,7 @@ export default {
position: relative; position: relative;
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 vw(20); padding: 0 10px;
height: 60px; height: 60px;
font-size: 18px; font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC; font-family: PingFangSC-Medium, PingFang SC;
...@@ -379,7 +379,7 @@ export default { ...@@ -379,7 +379,7 @@ export default {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: vw(10); margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
<el-form <el-form
ref="form" ref="form"
:model="form" :model="form"
label-position="top"
:rules="rules" :rules="rules"
label-width="120px" label-width="120px"
> >
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
<p v-if="bindGameUserList.length > 0" class="num"> <p v-if="bindGameUserList.length > 0" class="num">
总共{{ bindGameUserList.length }}个账号 总共{{ bindGameUserList.length }}个账号
</p> </p>
<el-button type="danger" style="margin-left: 10px;" size="mini" @click="logout">下线</el-button>
<addUser <addUser
:show.sync="showLayer" :show.sync="showLayer"
title="选择玩家" title="选择玩家"
...@@ -54,7 +53,8 @@ export default { ...@@ -54,7 +53,8 @@ export default {
...mapState('user', [ ...mapState('user', [
'userid', 'userid',
'corp_id', 'corp_id',
'external_userid' 'external_userid',
'client_online_status'
]), ]),
}, },
watch: { watch: {
...@@ -109,39 +109,6 @@ export default { ...@@ -109,39 +109,6 @@ export default {
} }
} }
}, },
logout(){
this.$confirm('确定下线吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.userLogout()
}).catch(() => {
this.$message({
type: 'info',
message: '已取消'
})
})
},
async userLogout(){
const data = {
userid: this.userid,
}
const res = await logout(data)
if(res.status_code === 1){
this.$message({
type: 'success',
message: '下线成功'
})
removeToken()
window.location.href = window.location.origin +'/company_app/index.html?corp_id='+this.corp_id
}else{
this.$message({
type: 'error',
message: '下线失败'
})
}
},
addNewUser() { addNewUser() {
console.log(11) console.log(11)
}, },
......
...@@ -109,8 +109,8 @@ ...@@ -109,8 +109,8 @@
cursor: pointer; cursor: pointer;
} }
.qrImage { .qrImage {
width: vw(140); width: 140px;
height: vw(140); height: 140px;
} }
.tableImage { .tableImage {
width: 30px; width: 30px;
......
...@@ -482,7 +482,7 @@ ...@@ -482,7 +482,7 @@
background: #fff; background: #fff;
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 vw(20); padding: 0 10px;
height: 60px; height: 60px;
font-size: 18px; font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC; font-family: PingFangSC-Medium, PingFang SC;
...@@ -561,7 +561,7 @@ ...@@ -561,7 +561,7 @@
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: vw(10); margin-right: 10px;
} }
.label { .label {
......
...@@ -627,7 +627,7 @@ ...@@ -627,7 +627,7 @@
.chatListItem { .chatListItem {
width: 100%; width: 100%;
height: 68px; height: 68px;
padding: 3px vw(20); padding: 3px 10px;
position: relative; position: relative;
cursor: pointer; cursor: pointer;
color: #333333; color: #333333;
...@@ -854,7 +854,7 @@ ...@@ -854,7 +854,7 @@
} }
.trans-follow-1 { .trans-follow-1 {
width: vw(300); width: 300px;
min-height: fit-content; min-height: fit-content;
margin: 6px 0 12px 0; margin: 6px 0 12px 0;
padding: 12px 12px 2px 12px; padding: 12px 12px 2px 12px;
......
...@@ -630,7 +630,7 @@ ...@@ -630,7 +630,7 @@
.chatListItem { .chatListItem {
width: 100%; width: 100%;
height: 68px; height: 68px;
padding: 3px vw(20); padding: 3px 10px;
position: relative; position: relative;
cursor: pointer; cursor: pointer;
color: #333333; color: #333333;
...@@ -857,7 +857,7 @@ ...@@ -857,7 +857,7 @@
} }
.trans-follow-1 { .trans-follow-1 {
width: vw(300); width: 300px;
min-height: fit-content; min-height: fit-content;
margin: 6px 0 12px 0; margin: 6px 0 12px 0;
padding: 12px 12px 2px 12px; padding: 12px 12px 2px 12px;
......
...@@ -200,7 +200,7 @@ ...@@ -200,7 +200,7 @@
overflow: auto; overflow: auto;
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 vw(20); padding: 0 10px;
height: 60px; height: 60px;
font-size: 18px; font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC; font-family: PingFangSC-Medium, PingFang SC;
...@@ -252,7 +252,7 @@ ...@@ -252,7 +252,7 @@
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: vw(10); margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
...@@ -270,10 +270,10 @@ ...@@ -270,10 +270,10 @@
top: 12px; top: 12px;
} }
.tags { .tags {
width: vw(300); width: 300px;
margin-left: 10px; margin-left: 10px;
.tagsItem { .tagsItem {
width: vw(300); width: 300px;
} }
.tag { .tag {
height: 22px; height: 22px;
......
...@@ -357,12 +357,12 @@ export default { ...@@ -357,12 +357,12 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.details { .details {
width: vw(444); width: 100%;
height: 100%; height: 100%;
background: #fff; background: #fff;
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 vw(20); padding: 0 10px;
height: 60px; height: 60px;
font-size: 18px; font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC; font-family: PingFangSC-Medium, PingFang SC;
...@@ -376,7 +376,7 @@ export default { ...@@ -376,7 +376,7 @@ export default {
} }
.content { .content {
width: 100%; width: 100%;
padding: vw(20); padding: 10px;
height: 100%; height: 100%;
background: red; background: red;
.contentItemTitle { .contentItemTitle {
...@@ -471,7 +471,7 @@ export default { ...@@ -471,7 +471,7 @@ export default {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: vw(10); margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
...@@ -489,10 +489,10 @@ export default { ...@@ -489,10 +489,10 @@ export default {
top: 12px; top: 12px;
} }
.tags { .tags {
width: vw(300); width:250px;
margin-left: 10px; margin-left: 10px;
.tagsItem { .tagsItem {
width: vw(300); width: 250px;
} }
.tag { .tag {
height: 22px; height: 22px;
...@@ -534,12 +534,12 @@ export default { ...@@ -534,12 +534,12 @@ export default {
margin-top: 20px; margin-top: 20px;
} }
.tagList { .tagList {
width: vw(130); width: 150px;
height: 100%; height: 100%;
position: relative; position: relative;
border-right: 1px solid #e0e0e0; border-right: 1px solid #e0e0e0;
.tagItem { .tagItem {
width: vw(128); width: 100px;
height: 36px; height: 36px;
background: #fff; background: #fff;
border-radius: 4px; border-radius: 4px;
...@@ -551,7 +551,7 @@ export default { ...@@ -551,7 +551,7 @@ export default {
margin-bottom: 6px; margin-bottom: 6px;
cursor: pointer; cursor: pointer;
.text { .text {
max-width: vw(90); max-width: 100px;
margin-left: 10px; margin-left: 10px;
} }
} }
......
...@@ -375,7 +375,7 @@ export default { ...@@ -375,7 +375,7 @@ export default {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: vw(10); margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
...@@ -393,10 +393,10 @@ export default { ...@@ -393,10 +393,10 @@ export default {
top: 12px; top: 12px;
} }
.tags { .tags {
width: vw(300); width: 300px;
margin-left: 10px; margin-left: 10px;
.tagsItem { .tagsItem {
width: vw(300); width: 300px;
} }
.tag { .tag {
height: 22px; height: 22px;
...@@ -439,13 +439,13 @@ export default { ...@@ -439,13 +439,13 @@ export default {
} }
.tagList { .tagList {
width: vw(130); width: 200px;
height: 100%; height: 100%;
position: relative; position: relative;
border-right: 1px solid #e0e0e0; border-right: 1px solid #e0e0e0;
.tagItem { .tagItem {
width: vw(128); width: 100px;
height: auto; height: auto;
background: #fff; background: #fff;
border-radius: 4px; border-radius: 4px;
...@@ -456,7 +456,7 @@ export default { ...@@ -456,7 +456,7 @@ export default {
margin-bottom: 6px; margin-bottom: 6px;
cursor: pointer; cursor: pointer;
.text { .text {
max-width: vw(90); max-width: 90px;
margin-left: 5px; margin-left: 5px;
} }
.tagItemGroup { .tagItemGroup {
......
...@@ -354,12 +354,12 @@ export default { ...@@ -354,12 +354,12 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.details { .details {
width: vw(444); width: 100%;
height: 100%; height: 100%;
background: #fff; background: #fff;
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 vw(20); padding: 0 10px;
height: 60px; height: 60px;
font-size: 18px; font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC; font-family: PingFangSC-Medium, PingFang SC;
...@@ -373,7 +373,7 @@ export default { ...@@ -373,7 +373,7 @@ export default {
} }
.content { .content {
width: 100%; width: 100%;
padding: vw(20); padding: 10px;
height: 100%; height: 100%;
background: red; background: red;
.contentItemTitle { .contentItemTitle {
...@@ -468,7 +468,7 @@ export default { ...@@ -468,7 +468,7 @@ export default {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: vw(10); margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
...@@ -486,10 +486,10 @@ export default { ...@@ -486,10 +486,10 @@ export default {
top: 12px; top: 12px;
} }
.tags { .tags {
width: vw(300); width:260px;
margin-left: 10px; margin-left: 10px;
.tagsItem { .tagsItem {
width: vw(300); width: 260px;
} }
.tag { .tag {
height: 22px; height: 22px;
...@@ -531,12 +531,12 @@ export default { ...@@ -531,12 +531,12 @@ export default {
margin-top: 20px; margin-top: 20px;
} }
.tagList { .tagList {
width: vw(130); width: 140px;
height: 100%; height: 100%;
position: relative; position: relative;
border-right: 1px solid #e0e0e0; border-right: 1px solid #e0e0e0;
.tagItem { .tagItem {
width: vw(128); width: 100px;
height: 36px; height: 36px;
background: #fff; background: #fff;
border-radius: 4px; border-radius: 4px;
...@@ -548,7 +548,7 @@ export default { ...@@ -548,7 +548,7 @@ export default {
margin-bottom: 6px; margin-bottom: 6px;
cursor: pointer; cursor: pointer;
.text { .text {
max-width: vw(90); max-width: 90px;
margin-left: 10px; margin-left: 10px;
} }
} }
......
...@@ -413,8 +413,7 @@ export default { ...@@ -413,8 +413,7 @@ export default {
.search-type-select { .search-type-select {
width: 80px; width: 80px;
flex-shrink: 0; margin-right: -10px;
::v-deep .el-input__inner { ::v-deep .el-input__inner {
border: 1px solid #dcdcdc; border: 1px solid #dcdcdc;
border-radius: 4px; border-radius: 4px;
...@@ -425,7 +424,6 @@ export default { ...@@ -425,7 +424,6 @@ export default {
.search-input { .search-input {
flex: 1; flex: 1;
::v-deep .el-input__inner { ::v-deep .el-input__inner {
border: 1px solid #dcdcdc; border: 1px solid #dcdcdc;
border-radius: 4px; border-radius: 4px;
......
...@@ -470,7 +470,7 @@ export default { ...@@ -470,7 +470,7 @@ export default {
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 vw(20); padding: 0 10px;
height: 60px; height: 60px;
font-size: 18px; font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC; font-family: PingFangSC-Medium, PingFang SC;
...@@ -559,7 +559,7 @@ export default { ...@@ -559,7 +559,7 @@ export default {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: vw(10); margin-right: 10px;
} }
.label { .label {
......
...@@ -105,7 +105,7 @@ export default { ...@@ -105,7 +105,7 @@ export default {
} }
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 vw(20); padding: 0 10px;
height: 60px; height: 60px;
font-size: 18px; font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC; font-family: PingFangSC-Medium, PingFang SC;
......
...@@ -66,7 +66,7 @@ export default { ...@@ -66,7 +66,7 @@ export default {
} }
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 vw(20); padding: 0 10px;
height: 60px; height: 60px;
font-size: 18px; font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC; font-family: PingFangSC-Medium, PingFang SC;
......
...@@ -453,7 +453,7 @@ export default { ...@@ -453,7 +453,7 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.task-info-container { .task-info-container {
width: vw(424); width: 100%;
height: 100%; height: 100%;
background: #fff; background: #fff;
margin-left: 2px; margin-left: 2px;
...@@ -461,7 +461,7 @@ export default { ...@@ -461,7 +461,7 @@ export default {
overflow: hidden; overflow: hidden;
.detailsTitle { .detailsTitle {
width: 100%; width: 100%;
padding: 0 vw(20); padding: 0 10px;
height: 60px; height: 60px;
font-size: 18px; font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC; font-family: PingFangSC-Medium, PingFang SC;
...@@ -529,7 +529,7 @@ export default { ...@@ -529,7 +529,7 @@ export default {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: vw(10); margin-right: 10px;
} }
.label { .label {
color: #999999; color: #999999;
......
...@@ -172,9 +172,9 @@ ...@@ -172,9 +172,9 @@
</div> </div>
</div> </div>
<div v-if="gameUserInfo.service_wechat_number_info && gameUserInfo.service_wechat_number_info.length>0" class="item rowFlex columnCenter spaceBetween"> <div v-if="gameUserInfo.service_wechat_number_info && gameUserInfo.service_wechat_number_info.length>0" class="item rowFlex columnCenter spaceBetween">
<div class="columnFlex " style="width:100%;"> <div class="rowFlex columnCenter" style="width:100%;">
<span class="label">客服微信号:</span> <span class="label">客服微信号:</span>
<div class="rowFlex columnCenter" style="margin-top:10px;width:100%;"> <div class="rowFlex columnCenter">
<!-- 显示第一个微信号 --> <!-- 显示第一个微信号 -->
<div class="rowFlex columnCenter"> <div class="rowFlex columnCenter">
<p class="hidden wxName">{{ gameUserInfo.service_wechat_number_info[0].service_wechat_number_name }}({{ gameUserInfo.service_wechat_number_info[0].service_type_name }})</p> <p class="hidden wxName">{{ gameUserInfo.service_wechat_number_info[0].service_wechat_number_name }}({{ gameUserInfo.service_wechat_number_info[0].service_type_name }})</p>
...@@ -430,7 +430,7 @@ import { debounce } from '@/utils' ...@@ -430,7 +430,7 @@ import { debounce } from '@/utils'
margin-left: 10px; margin-left: 10px;
} }
.showInputRemarkInput { .showInputRemarkInput {
width: vw(220); width: 200px;
margin-left: 10px; margin-left: 10px;
} }
.label { .label {
...@@ -462,10 +462,10 @@ import { debounce } from '@/utils' ...@@ -462,10 +462,10 @@ import { debounce } from '@/utils'
cursor: pointer; cursor: pointer;
} }
.tags { .tags {
width: vw(300); width: 250px;
margin-left: 10px; margin-left: 10px;
.tagsItem { .tagsItem {
width: vw(300); width: 250px;
} }
.tag { .tag {
height: 22px; height: 22px;
......
...@@ -169,10 +169,10 @@ ...@@ -169,10 +169,10 @@
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 6px; border-radius: 6px;
margin-right: vw(10); margin-right: 10px;
} }
.showInputRemarkInput { .showInputRemarkInput {
width: vw(220); width: 200px;
margin-left: 10px; margin-left: 10px;
} }
.label { .label {
...@@ -204,10 +204,10 @@ ...@@ -204,10 +204,10 @@
cursor: pointer; cursor: pointer;
} }
.tags { .tags {
width: vw(300); width: 250px;
margin-left: 10px; margin-left: 10px;
.tagsItem { .tagsItem {
width: vw(300); width: 250px;
} }
.tag { .tag {
height: 22px; height: 22px;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论