提交 adecf774 作者: 施汉文

feat: 新增营销模块

上级 ded7e8cc
import request from '@/utils/request'
import store from '@/store/index'
import Cookies from 'js-cookie'
import request from '@/utils/request';
import store from '@/store/index';
import Cookies from 'js-cookie';
// 获取用户ID的函数,避免在模块加载时访问可能未初始化的 store
function getZwUserId() {
return Cookies.get('cser_id') ||
(store.state?.user?.userInfo?.id) ||
(store.state?.user?.cser_id)
return (
Cookies.get('cser_id') ||
store.state?.user?.userInfo?.id ||
store.state?.user?.cser_id
);
}
// 游戏业务所属的接口信息
// 所属分组下拉
function returnApi(api){
return '/sidebar' + api
function returnApi(api) {
return '/sidebar' + api;
}
export function cross_systemRequest(data) {
!data.noApi ? data.api = '/api' + data.api : ''
!data.noApi ? (data.api = '/api' + data.api) : '';
return request({
url: '/sidebar/cross_system/request',
method: 'post',
data
})
data,
});
}
// 请求角色详情
export function memberView(data) {
......@@ -27,11 +29,11 @@ export function memberView(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/view',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 修改手机号
......@@ -40,11 +42,11 @@ export function bindMobile(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/bindMobile',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 角色列表
......@@ -53,11 +55,11 @@ export function roleList(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/role/getList',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 绑定掌游账号
......@@ -65,8 +67,8 @@ export function zyouBind(data) {
return request({
url: returnApi('/external_user/zyouBind'),
method: 'post',
data
})
data,
});
}
// 订单列表
......@@ -75,11 +77,11 @@ export function orderList(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/order/list',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 订单金额
export function todayOrder(data) {
......@@ -87,11 +89,11 @@ export function todayOrder(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/todayOrder',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 补单和补回调
export function completionOrder(data) {
......@@ -99,11 +101,11 @@ export function completionOrder(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/order/completionOrder',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 退款提交申请
export function refundRequest(data) {
......@@ -111,11 +113,11 @@ export function refundRequest(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/order/addRefundRequest',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 退款申请记录
export function refundRecord(data) {
......@@ -123,11 +125,11 @@ export function refundRecord(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/order/getRefundRequestList',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 退款详情
export function refundRequestLog(data) {
......@@ -135,11 +137,11 @@ export function refundRequestLog(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/order/refundRequestProcess',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 下拉请求
export function selectSearch(data) {
......@@ -147,11 +149,11 @@ export function selectSearch(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/searchcondition/search',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 账号维度推广游戏列表
......@@ -160,11 +162,11 @@ export function memberExtensionGameList(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/memberExtensionGameList',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 充值
// 账号维度推广游戏列表
......@@ -173,11 +175,11 @@ export function getAmountByTime(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/getAmountByTime',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 违规记录
......@@ -186,11 +188,11 @@ export function violationList(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/violationList',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 重置密码
export function autoResetPassword(data) {
......@@ -198,19 +200,19 @@ export function autoResetPassword(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/autoResetPassword',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 重置密码加密
export function passwardEncryption(data) {
return request({
url: '/sidebar/session/zyouAutoResetPassword',
method: 'post',
data
})
data,
});
}
// VIP自助工具
......@@ -219,11 +221,11 @@ export function createVipUrl(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/createVipUrl',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 活动类型
......@@ -232,11 +234,11 @@ export function giftTypeList(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/searchcondition/search',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 充值活动列表
export function activeList(data) {
......@@ -244,11 +246,11 @@ export function activeList(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/getVipBagCodeRuleListByRole',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 活动详情
export function giftDetailsData(data) {
......@@ -256,11 +258,11 @@ export function giftDetailsData(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/getRoleConditionByRuleAndRole',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 申请礼包
......@@ -269,11 +271,11 @@ export function giftBagApply(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/giftBagApply',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 礼包检测
export function checkRoleReceivedBag(data) {
......@@ -281,11 +283,11 @@ export function checkRoleReceivedBag(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/role_gift_bag/checkRoleReceivedBag',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 礼包列表
export function emailGiftList(data) {
......@@ -293,11 +295,11 @@ export function emailGiftList(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/giftBagApplyIndex',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 易主标签查询
......@@ -306,11 +308,11 @@ export function getMemberLabel(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/getMemberLabel',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 修改易主标签
export function editMemberLabel(data) {
......@@ -318,11 +320,11 @@ export function editMemberLabel(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/editMemberLabel',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// // 转端接口
// export function getMemberLink(data) {
......@@ -343,11 +345,11 @@ export function getMemberLink(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/getMemberLink',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 转游接口
export function getLandingPageMemberLink(data) {
......@@ -355,11 +357,11 @@ export function getLandingPageMemberLink(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/getLandingPageMemberLink',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 转游接口
export function getLandingPageConfig(data) {
......@@ -367,11 +369,11 @@ export function getLandingPageConfig(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/member/getLandingPageConfig',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 渠道列表单独渠道KEY
......@@ -380,850 +382,959 @@ export function channelList(data) {
cross_systemRequest({
system: 'zhangyou',
api: '/channel/channelList',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 工单
// 任务列表
export function taskIndex(data) {
return new Promise((resovle, reject) => {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
cross_systemRequest({
system: 'zhangyou',
api: '/operator_task/index',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 任务详情
export function taskDetails(data) {
return new Promise((resovle, reject) => {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
cross_systemRequest({
system: 'zhangyou',
api: '/operator_task/info',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 分配
export function taskAssign(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/operator_task/assign',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 完成任务
export function taskTrack(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/operator_task/track',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 结果列表
export function taskRecord(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/operator_task/logs',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 备注
export function logsSave(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/operator_task_log/save',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 角色累充
export function RoleTodayOrder(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/role/todayOrder',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 用户充值
export function memberOrder(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/member/memberOrder',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 下拉加载
export function searchcondition(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/searchcondition/search',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 误操作列表
export function misoperationIndex(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/mistake_operation_request/list',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 添加误操作
export function addErrorHandle(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/mistake_operation_request/add',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
export function updateErrorHandle(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/misoperation/update',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 操作数量
export function numErrorHandle(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/misoperation/num',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 操作数量新
export function operationCount(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/mistake_operation_request/operationCount',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 任务消息读取
export function taskRead(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/operator_task/read',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 任务消息状态
export function taskReadStatus(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/operator_task/readStatus',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 撤回消息
export function cancelRefundRequest(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/order/cancelRefundRequest',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 举报列表
export function reportIndex(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/admin/report_request/list',
params: data,
noApi: true
noApi: true,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 玩家举报
export function playerReport(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/report_request/waitList',
params: data,
noApi: true
noApi: true,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 审批记录
export function reportProcess(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/report_request/process',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 撤销举报
export function reportCancel(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/report_request/cancel',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 新增举报
export function reportAdd(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/report_request/add',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 申诉列表
export function appealList(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/appeal_request/list',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 新增申诉
export function appealAdd(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/appeal_request/add',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 撤销申诉
export function appealCancel(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/appeal_request/cancel',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 申诉记录
export function appealProcess(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/appeal_request/process',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 玩家举报审批记录
export function gamerReportProcess(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/report_request/process',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 角色列表Holo 实时性较高
export function getRoleHoLo(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/role/getListHoLo',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 角色列表 待请求
export function memberTaskStatus(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/operator_task/memberTaskStatus',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 举报申请列表
export function report_request_list(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/report_request/list',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 举报申请驳回或者通过
export function report_request_approval(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/report_request/approval',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 游戏类型下的游戏列表 游戏类型:安卓 h5 ios
export function getTransferRecallGameList(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member/getTransferRecallGameList',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 转端和召回 游戏类型列表
export function getGameConfig(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/game/getGameConfig',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 召回的时候染色
export function recallChannelSeq(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/channel/recallChannelSeq',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 获取游戏信息
export function getGameInfo(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/game/info',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 新增渠道
export function addChannel(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/channel/addDistributorChannelByZm',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 一键发送召回渠道链接
export function quickRecallChannelLink(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/channel/quickRecallChannelLink',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 转端发送落地页
export function getLandingPageTransfer(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member/getLandingPageTransfer',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 工作台关联客服
export function bindUserSelfAdd(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member_bind_cser/selfAdd',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 关联客服列表
export function bindUserList(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member_bind_cser/list',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 新增关联客服
export function bindUserAdd(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member_bind_cser/add',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 删除关联客服
export function bindUserDelete(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member_bind_cser/delete',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 调用掌游的日志中心
export function getSystemModelLog(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member_bind_cser/getSystemModelLog',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
export function getMemberTransStatus(data) {
// 转端文档 获取W账号的转端状态 如果状态是 false 表示不允许转端 在工作台 发送游戏 里面转端里 点开发送的时候 提示 当前w账号不满足转端要求,请联系组长处理
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member/getMemberTransStatus',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
export function getTaskTracer(data) {
// 获取运营任务的跟进人 参数 member_id
data.zw_user_id = getZwUserId()
// 获取运营任务的跟进人 参数 member_id
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/operator_task/getTaskTracer',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 用户触达 发送客服号添加消息的日志
export function getTaskTracerTouch(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/operator_task_log/touch',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 添加一条任务跟进记录
export function getTaskTracerTouchAdd(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/operator_task_log/add',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 审批组流程下拉
export function approval_group_flow_list(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/approval_group_flow/options',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 审批人员表格
export function approval_group_flow_user(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/approval_group_flow/users',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 保存转端提交
export function approval_group_flow_add(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member_trans_request/add',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 转端申请列表
export function member_trans_request_list(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member_trans_request/list',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 转端申请审批记录
export function member_trans_request_process(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/member_trans_request/process',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 转区列表
export function transfer_server_request_list(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/transfer_server_request/list',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 转区申请
export function transfer_server_request_add(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/transfer_server_request/add',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 转区申请节点
export function transfer_server_request_process(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/transfer_server_request/process',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
export function getMainGameInfo(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/service_wechat/getMainGameInfo',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 掌游标签搜索
export function roleLabelSearch(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/role/labelSearch',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 掌游标签列表
export function roleGetRoleLabel(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/role/getRoleLabel',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 编辑角色标签
export function editRoleLabel(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/role/editRoleLabel',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 编辑角色标签
export function getRoleLabelCreate(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/role/getRoleLabelCreate',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
export function ruleList(data) {
data.zw_user_id = getZwUserId()
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/member_trans_request/ruleList',
params: data
params: data,
}).then((res) => {
resovle(res)
})
})
resovle(res);
});
});
}
// 查询客服未完成任务
export function getTaskTotal(data) {
data.zw_user_id = getZwUserId()
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/operator_task/getTaskTotal',
params: data
}).then((res) => {
resovle(res)
})
})
data.zw_user_id = getZwUserId();
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/operator_task/getTaskTotal',
params: data,
}).then((res) => {
resovle(res);
});
});
}
/**
* 当前w账号充值金额最靠前的有未推送的近期要开首条数据
* @param {{member_id}} data
* @returns
*/
export function getRoleRecentActivityOneApi(data) {
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/recent_activity/roleRecentActivityOne',
params: data,
})
.then((res) => {
resovle(res);
})
.catch((error) => {
reject(error);
});
});
}
/**
* 角色近期要开活动编辑
* @param {Object} data - 请求参数对象
* @param {string} data.role_id - 角色ID
* @param {string} data.open_activity_time - 活动开启时间
* @param {string} data.activity_rule_id - 活动规则ID
* @param {string} data.is_push - 是否推送(2=已推送,只能传2)
* @param {number} data.type - 操作类型(1=更新推送,2=更新备注)
* @param {string} data.remark - 备注信息
* @param {number} data.user_id - 操作人ID
* @param {string} data.user_name - 操作人姓名
* @returns {Promise} 返回Promise对象,包含请求结果
*/
export function getRoleRecentActivityEditApi(data) {
console.log(data, '===123123123123123===');
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/recent_activity/roleRecentActivityEdit',
params: data,
})
.then((res) => {
resovle(res);
})
.catch((error) => {
reject(error);
});
});
}
/**
* 角色近期要开列表
* @param {{role_id}} data
* @returns
*/
export function getRoleRecentActivityListApi(data) {
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/recent_activity/roleRecentActivityList',
params: data,
})
.then((res) => {
resovle(res);
})
.catch((error) => {
reject(error);
});
});
}
/**
* 角色近期活动列表
* @param {{role_id}} data
* @returns
*/
export function getRecentActivityListApi(data) {
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/recent_activity/recentActivityList',
params: data,
})
.then((res) => {
resovle(res);
})
.catch((error) => {
reject(error);
});
});
}
/**
* 账号近期要开活动数
* @param {{member_id}} data
* @returns
*/
export function getRoleRecentActivityNotPushNumApi(data) {
return new Promise((resovle, reject) => {
cross_systemRequest({
system: 'zhangyou',
api: '/api/recent_activity/roleRecentActivityNotPushNum',
params: data,
})
.then((res) => {
resovle(res);
})
.catch((error) => {
reject(error);
});
});
}
import request from '@/utils/request'
import store from '@/store/index'
import request from '@/utils/request';
import store from '@/store/index';
// 所属分组下拉
function returnApi(api){
return '/sidebar' + api
function returnApi(api) {
return '/sidebar' + api;
}
export function procedure_group(data) {
return request({
url: returnApi('/procedure_group/index'),
method: 'post',
data
})
data,
});
}
// 话术列表
export function procedureList(data) {
return request({
url: returnApi('/procedure/index'),
method: 'post',
data
})
data,
});
}
// 删除话术
......@@ -25,8 +25,8 @@ export function proceduredel(data) {
return request({
url: returnApi('/procedure/del'),
method: 'post',
data
})
data,
});
}
// 批量移动
......@@ -34,8 +34,8 @@ export function proceduremove(data) {
return request({
url: returnApi('/procedure/move'),
method: 'post',
data
})
data,
});
}
// 新增话术
......@@ -43,8 +43,8 @@ export function procedureadd(data) {
return request({
url: returnApi('/procedure/add'),
method: 'post',
data
})
data,
});
}
// 分组添加/修改
......@@ -52,8 +52,8 @@ export function procedure_groupAdd(data) {
return request({
url: returnApi('/procedure_group/add'),
method: 'post',
data
})
data,
});
}
// 分组删除
......@@ -61,8 +61,8 @@ export function procedure_groupDel(data) {
return request({
url: returnApi('/procedure_group/del'),
method: 'post',
data
})
data,
});
}
// 个人话术移到企业库
......@@ -70,8 +70,8 @@ export function addCompany(data) {
return request({
url: returnApi('/procedure/addCompany'),
method: 'post',
data
})
data,
});
}
// 个人话术详情
......@@ -79,8 +79,8 @@ export function procedureInfo(data) {
return request({
url: returnApi('/procedure/info'),
method: 'post',
data
})
data,
});
}
// 个人话术排序
......@@ -88,8 +88,8 @@ export function procedureSort(data) {
return request({
url: returnApi('/procedure/sort'),
method: 'post',
data
})
data,
});
}
// 个人话术租排序
......@@ -97,8 +97,8 @@ export function procedureGroupSort(data) {
return request({
url: returnApi('/procedure_group/sort'),
method: 'post',
data
})
data,
});
}
// 企业话术增至个人
......@@ -106,8 +106,8 @@ export function addToPersonal(data) {
return request({
url: returnApi('/procedure/addToPersonal'),
method: 'post',
data
})
data,
});
}
// 话术使用次数
......@@ -115,8 +115,8 @@ export function skillQuote(data) {
return request({
url: '/admin/procedure/quote',
method: 'post',
data
})
data,
});
}
/* ----------- 知识库的接口 ---------- */
......@@ -125,16 +125,16 @@ export function groupList(data) {
return request({
url: returnApi('/knowledge_group/index'),
method: 'post',
data
})
data,
});
}
// 知识库分组下拉
export function libraryIndex(data) {
return request({
url: returnApi('/knowledge_base/index'),
method: 'post',
data
})
data,
});
}
// 新增和编辑
......@@ -142,8 +142,8 @@ export function groupHandle(data) {
return request({
url: returnApi('/knowledge_group/add'),
method: 'post',
data
})
data,
});
}
// 删除分组
......@@ -151,63 +151,63 @@ export function groupDel(data) {
return request({
url: returnApi('/knowledge_group/del'),
method: 'post',
data
})
data,
});
}
// 新增知识库任务
export function addLibraryTask(data) {
return request({
url: returnApi('/knowledge_base/add'),
method: 'post',
data
})
data,
});
}
// 详情
export function libraryTaskView(data) {
return request({
url: returnApi('/knowledge_base/view'),
method: 'post',
data
})
data,
});
}
// 编辑
export function libraryTaskEdit(data) {
return request({
url: returnApi('/knowledge_base/edit'),
method: 'post',
data
})
data,
});
}
// 删除
export function libraryTaskDel(data) {
return request({
url: returnApi('/knowledge_base/del'),
method: 'post',
data
})
data,
});
}
// 批量删除
export function multipleDel(data) {
return request({
url: returnApi('/knowledge_base/batchDel'),
method: 'post',
data
})
data,
});
} // 导入
export function importData(data) {
return request({
url: returnApi('/knowledge_base/importKnowledgeBase'),
method: 'post',
data
})
data,
});
}
// 知识库计数
export function logClickTime(data) {
return request({
url: returnApi('/knowledge_base/logClickTime'),
method: 'post',
data
})
data,
});
}
// 问答模块
......@@ -215,18 +215,17 @@ export function Aihistory(data) {
return request({
url: returnApi('/corp_beta_question_log/history'),
method: 'post',
data
})
data,
});
}
// 同步知识库
export function asyncKnowledge(data) {
return request({
url: returnApi('/knowledge_base/syncToCorp'),
method: 'post',
data
})
data,
});
}
/* -------------------- 机器人知识库 ----------------------- */
......@@ -235,8 +234,8 @@ export function corp_robot_knowledge_add(data) {
return request({
url: returnApi('/corp_robot_knowledge_base/add'),
method: 'post',
data
})
data,
});
}
// 机器人知识库列表
......@@ -244,48 +243,48 @@ export function corp_robot_knowledge_list(data) {
return request({
url: returnApi('/corp_robot_knowledge_base/index'),
method: 'post',
data
})
data,
});
}
// 机器人知识库编辑
export function corp_robot_knowledge_edit(data) {
return request({
url: returnApi('/corp_robot_knowledge_base/edit'),
method: 'post',
data
})
data,
});
}
// 机器人知识库详情
export function corp_robot_knowledge_view(data) {
return request({
url: returnApi('/corp_robot_knowledge_base/view'),
method: 'post',
data
})
data,
});
}
// 机器人知识库删除
export function corp_robot_knowledge_del(data) {
return request({
url: returnApi('/corp_robot_knowledge_base/delete'),
method: 'post',
data
})
data,
});
}
// 机器人知识库批量删除
export function corp_robot_knowledge_batchDelete(data) {
return request({
url: returnApi('/corp_robot_knowledge_base/batchDelete'),
method: 'post',
data
})
data,
});
}
// 机器人知识库批量导入
export function corp_robot_knowledge_import(data) {
return request({
url: returnApi('/corp_robot_knowledge_base/import'),
method: 'post',
data
})
data,
});
}
/* --------------------机器人知识库分组-----------------------*/
// 知识库分组列表
......@@ -293,32 +292,32 @@ export function corp_robot_knowledge_group_index(data) {
return request({
url: returnApi('/corp_robot_knowledge_group/index'),
method: 'post',
data
})
data,
});
}
// 知识库分组新增
export function corp_robot_knowledge_group_add(data) {
return request({
url: returnApi('/corp_robot_knowledge_group/add'),
method: 'post',
data
})
data,
});
}
// 知识库分组编辑
export function corp_robot_knowledge_group_edit(data) {
return request({
url: returnApi('/corp_robot_knowledge_group/edit'),
method: 'post',
data
})
data,
});
}
// 知识库分组删除
export function corp_robot_knowledge_group_del(data) {
return request({
url: returnApi('/corp_robot_knowledge_group/delete'),
method: 'post',
data
})
data,
});
}
// AI问答对列表
......@@ -326,8 +325,8 @@ export function AI_list(data) {
return request({
url: returnApi('/corp_ai_question_answer/index'),
method: 'post',
data
})
data,
});
}
// 业务下拉
......@@ -335,8 +334,8 @@ export function search_condition(data) {
return request({
url: '/admin/search_condition',
method: 'post',
data
})
data,
});
}
// 智能体列表
......@@ -344,8 +343,8 @@ export function corp_beta_config(data) {
return request({
url: '/admin/corp_beta_config/index',
method: 'post',
data
})
data,
});
}
// 标记有用/无用
......@@ -353,22 +352,30 @@ export function markUseful(data) {
return request({
url: returnApi('/corp_ai_question_answer/markUseful'),
method: 'post',
data
})
data,
});
}
// 跨主体分组列表
export function cross_corp_robot_knowledge_group_index(data) {
return request({
url: returnApi('/corp_cross_knowledge_group/index'),
method: 'post',
data
})
data,
});
}
// 跨主体知识库分组列表
export function cross_corp_robot_knowledge_group_getList(data) {
return request({
url: returnApi('/corp_cross_knowledge_base/getList'),
method: 'post',
data
})
}
\ No newline at end of file
data,
});
}
// 营销面板-话术生成
export function getGenerateProcedureApi(data) {
return request({
url: returnApi('/corp_activity_procedure/generateProcedure'),
method: 'post',
data,
});
}
......@@ -2,19 +2,76 @@
<div class="details-user-info-role columnFlex">
<div v-loading="loading" class="detailsContent">
<div v-if="roleList.length > 0">
<p class="textInfo">角色充值金额信息会有5-10分钟延迟,请以订单信息为准</p>
<p class="textInfo">
角色充值金额信息会有5-10分钟延迟,请以订单信息为准
</p>
<el-collapse v-model="collapseActive" @change="handleChange">
<div v-for="(items, indexs) in roleList" :key="indexs" class="contentItem mb-[10px]">
<div
v-for="(items, indexs) in roleList"
:key="indexs"
class="contentItem mb-[10px]"
>
<div class="title"></div>
<el-collapse-item :name="items.id">
<template slot="title">
<div class="collapseTitle rowFlex columnCenter spaceBetween">
<!-- <div class="collapseTitle rowFlex columnCenter spaceBetween">
<p class="hidden">
{{ items.role_name }} - {{ items.server_name }} - {{
items.recharge_total ? items.recharge_total + '元' : '0元' }}
</p>
<el-button type="primary" size="mini" class="collapseTitleBtn"
@click.stop="appealLayer(items)">申诉</el-button>
</div> -->
<div class="flex w-[100%] justify-between">
<div>
<div>
<span>角色名:</span><span>{{ items.role_name }}</span>
</div>
<div>
<span>区服:</span><span>{{ items.server_name }}</span>
</div>
<div>
<span>充值金额:</span
><span>{{
items.recharge_total
? items.recharge_total + '元'
: '0元'
}}</span>
</div>
</div>
<div
class="flex-1 h-0 flex justify-end items-start pt-[10px]"
>
<el-button
type="primary"
size="mini"
class="collapseTitleBtn"
@click.stop="appealLayer(items)"
>申诉</el-button
>
<el-badge
:value="
roleRecentActivityNotPushNumInstance?.getNumByRoleId(
items.role_id
)
"
class="text-center leading-[0] ml-[8px]"
>
<el-button
type="primary"
size="mini"
@click.stop="
() =>
recentActivitiesPopupInstance.instance.open(
items.role_id,
`${items.role_name}-${items.server_name}-${items.recharge_total}元`
)
"
>
近期要开</el-button
>
</el-badge>
</div>
</div>
</template>
<div class="item rowFlex columnCenter spaceBetween">
......@@ -68,13 +125,25 @@
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">最近活跃时间:</span>
<p class="text">{{ $moment(items.last_login_time * 1000).format('YYYY-MM-DD HH:mm:ss') }}</p>
<p class="text">
{{
$moment(items.last_login_time * 1000).format(
'YYYY-MM-DD HH:mm:ss'
)
}}
</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">创建时间:</span>
<p class="text">{{ $moment(items.create_time * 1000).format('YYYY-MM-DD HH:mm:ss') }}</p>
<p class="text">
{{
$moment(items.create_time * 1000).format(
'YYYY-MM-DD HH:mm:ss'
)
}}
</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
......@@ -87,25 +156,37 @@
</div>
</el-collapse>
</div>
<div v-else-if="!loading && roleList.length == 0" class="noContent rowFlex allCenter">
<noContent title="暂无数据" description="当前没有任何数据,请稍后再试或联系管理员" />
<div
v-else-if="!loading && roleList.length == 0"
class="noContent rowFlex allCenter"
>
<noContent
title="暂无数据"
description="当前没有任何数据,请稍后再试或联系管理员"
/>
</div>
</div>
<appeal v-if="showAppeal" :show.sync="showAppeal" :appeal-info="appealInfo" />
<appeal
v-if="showAppeal"
:show.sync="showAppeal"
:appeal-info="appealInfo"
/>
</div>
</template>
<script>
import { mapState, mapMutations, mapActions } from 'vuex'
import { getRoleHoLo } from '@/api/game'
import noContent from '@/components/noContent.vue'
import appeal from './layer/appeal.vue'
import watchMember from '@/mixins/watchMember'
import { mapState, mapMutations, mapActions } from 'vuex';
import { getRoleHoLo } from '@/api/game';
import noContent from '@/components/noContent.vue';
import appeal from './layer/appeal.vue';
import watchMember from '@/mixins/watchMember';
import { createDetails } from '@/views/popup/RecentActivitiesPopup/index.js';
import { createRoleRecentActivityNotPushNum } from '@/views/hooks/useGetCount.js';
export default {
name: 'roleInfo',
components: {
noContent,
appeal
appeal,
},
data() {
return {
......@@ -118,58 +199,75 @@ export default {
pageInfo: {
page_size: 100,
page: 1,
total: 0
total: 0,
},
infoList: []
}
infoList: [],
recentActivitiesPopupInstance: null, //近期要开模块弹框
roleRecentActivityNotPushNumInstance: null, //侧边栏计数弹框
};
},
computed: {
...mapState('game', ['accountSelect'])
...mapState('game', ['accountSelect']),
},
mixins: [watchMember],
mounted() {
this.requestRoleList()
this.nowTime = new Date().getTime()
this.requestRoleList();
this.nowTime = new Date().getTime();
// 初始化创建角色最近活动未推送数量
this.initInstance();
},
methods: {
handleChange() {
//初始化创建模块
async initInstance() {
this.recentActivitiesPopupInstance = createDetails();
this.roleRecentActivityNotPushNumInstance =
await createRoleRecentActivityNotPushNum(this.accountSelect);
},
handleChange() {},
memberChange() {
this.requestRoleList()
this.requestRoleList();
},
// 申诉
appealLayer(item) {
this.appealInfo = item
this.showAppeal = true
this.appealInfo = item;
this.showAppeal = true;
},
requestRoleList() {
if (this.accountSelect === '') {
this.$message.warning('暂无关联的账号,请先去关联账号!')
return false
this.$message.warning('暂无关联的账号,请先去关联账号!');
return false;
}
this.loading = true
this.loading = true;
const data = {
api_search_name: '',
member_id: this.accountSelect,
search_type: 'list',
...this.pageInfo
}
getRoleHoLo(data).then(res => {
this.loading = false
if (res.status_code == 1) {
if (res.data.data.length > 0) {
this.roleList = res.data.data.sort((a, b) => { return Number(b.recharge_total) - Number(a.recharge_total) })
} else {
this.roleList = []
...this.pageInfo,
};
getRoleHoLo(data).then(
(res) => {
this.loading = false;
if (res.status_code == 1) {
if (res.data.data.length > 0) {
this.roleList = res.data.data.sort((a, b) => {
return Number(b.recharge_total) - Number(a.recharge_total);
});
} else {
this.roleList = [];
}
}
},
(err) => {
this.loading = false;
}
}, err => {
this.loading = false
})
}
}
}
);
},
},
beforeDestroy() {
this.recentActivitiesPopupInstance.destroy();
this.roleRecentActivityNotPushNumInstance?.destroy();
},
};
</script>
<style lang="scss" scoped>
.details-user-info-role {
......@@ -291,7 +389,26 @@ export default {
display: block;
}
}
::v-deep .el-collapse-item {
margin-bottom: 20px;
}
::v-deep .el-collapse-item__content {
padding-bottom: 10px;
}
::v-deep .el-collapse {
border: none;
}
::v-deep .el-collapse-item__header {
width: 100%;
height: auto;
background: #f9faff;
color: #333333;
padding-left: 10px;
font-size: 14px;
font-weight: 400;
}
/* 已移除局部 el-collapse 样式,使用全局样式 */
}
</style>
\ No newline at end of file
</style>
import { getRoleRecentActivityNotPushNumApi } from '@/api/game';
// 账号近期要开活动数
let roleRecentActivityNotPushNum = null;
let cacheMemberId = null;
function setCacheMemberId(member_id) {
cacheMemberId = member_id;
}
export async function queryRoleRecentActivityNotPushNum(member_id) {
const { data } = await getRoleRecentActivityNotPushNumApi({
member_id: member_id,
});
roleRecentActivityNotPushNum = data.data;
}
function validate(v) {
if (!roleRecentActivityNotPushNum)
throw new Error(`执行${v}前请先调用createRoleRecentActivityNotPushNum方法`);
}
export function getTotalNum() {
validate('getTotalNum');
return roleRecentActivityNotPushNum?.totalNum || null;
}
export function getNumByRoleId(role_id) {
validate('getNumByRoleId');
return (
roleRecentActivityNotPushNum?.roleNum.find(
(item) => item.role_id == role_id
)?.num || null
);
}
export function destroy() {
roleRecentActivityNotPushNum = null;
cacheMemberId = null;
}
export async function createRoleRecentActivityNotPushNum(member_id) {
if (member_id || member_id !== cacheMemberId) {
setCacheMemberId(member_id);
await queryRoleRecentActivityNotPushNum(member_id);
}
return {
queryRoleRecentActivityNotPushNum,
getTotalNum,
getNumByRoleId,
destroy,
};
}
<template>
<div v-loading="loading">
<div class="px-[20px] h-full space-y-[8px] rounded-[4px] overflow-y-auto">
<template v-if="list.length">
<div
class="bg-[#F7F8FA] min-h-[99px] p-[8px]"
v-for="item in list"
:key="item.id"
>
<div
class="text-[#131920] pb-[8px] text-[14px] border-b-[1px] border-solid border-[#E5E5E6]"
>
主服 {{ item.main_server_day }} 天开启{{ item.name }}活动
</div>
<div class="text-[13px] flex pt-[8px]">
<div class="text-[#6D7176] mr-[16px] flex-shrink-0">活动详情</div>
<div class="text-[#131920]">{{ item.detail }}</div>
</div>
</div>
</template>
<svg-icon v-else icon-class="noContent" class="text-[280px]" />
</div>
</div>
</template>
<script>
import { mapState } from 'vuex';
import { getRecentActivityListApi } from '@/api/game';
export default {
name: 'ActivityConfigurationList',
components: {},
props: ['role_id'],
data() {
return {
list: [],
loading: false,
};
},
computed: {
...mapState('game', ['gameUserInfo']),
},
methods: {
async getRecentActivityList() {
try {
this.loading = true;
const { data } = await getRecentActivityListApi({
role_id: this.role_id,
main_game_id: this.gameUserInfo.main_game_id,
weixin_blongs_id: this.gameUserInfo.weixin_blongs_id,
});
this.list = data.data;
} catch (error) {
} finally {
this.loading = false;
}
},
},
created() {
this.getRecentActivityList();
},
};
</script>
<style lang="scss" scoped></style>
<template>
<div v-loading="loading">
<div class="px-[20px] h-full gap-y-[8px] overflow-y-auto">
<template v-if="list.length">
<RecentActivities
@handleUpdate="query"
:item="item"
v-for="item in list"
:key="item.activity_rule_id"
/>
</template>
<svg-icon v-else icon-class="noContent" class="text-[280px]" />
</div>
</div>
</template>
<script>
import RecentActivities from '@/views/popup/RecentActivitiesPopup/templates/RecentActivities.vue';
import { getRoleRecentActivityListApi } from '@/api/game';
export default {
name: 'RecentActivitiesList',
components: { RecentActivities },
props: ['role_id'],
data() {
return {
list: [],
loading: false,
};
},
methods: {
async query() {
try {
this.loading = true;
const { data } = await getRoleRecentActivityListApi({
role_id: this.role_id,
});
this.list = data.data;
} catch (error) {
} finally {
this.loading = false;
}
},
},
created() {
this.query();
},
};
</script>
<style lang="scss" scoped></style>
// utils/componentHelper.js 或 useCreatePlayerDetails.js
import Vue from 'vue'
import RecentActivitiesPopup from './index.vue'
import store from '@/store' // 导入你的 Vuex store
export function createDetails(propsData = {}) {
const ComponentConstructor = Vue.extend(RecentActivitiesPopup)
const instance = new ComponentConstructor({
propsData,
// 手动注入 store
store
})
const mountNode = document.createElement('div')
document.querySelector('#recentActivitiesPopup').appendChild(mountNode)
instance.$mount(mountNode)
return {
instance,
destroy: () => {
instance.$destroy()
if (instance.$el && instance.$el.parentNode) {
instance.$el.parentNode.removeChild(instance.$el)
}
}
}
}
\ No newline at end of file
<template>
<div class="absolute z-10 top-0 left-0 h-full w-full bg-white" v-if="show">
<div
class="h-[60px] relative px-[18px] flex items-center border-b-[1px] border-solid border-[#e5e6eb]"
>
<i
class="el-icon-arrow-left text-[25px] hover:cursor-pointer"
@click="close"
></i>
<span
class="absolute left-1/2 top-1/2 transform -translate-x-1/2 -translate-y-1/2 text-[#323335] font-bold"
>{{ title }}</span
>
</div>
<el-tabs class="h-[40px]" v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="近期要开" name="0"> </el-tab-pane>
<el-tab-pane label="活动配置" name="1"> </el-tab-pane>
</el-tabs>
<RecentActivitiesList v-if="activeName === '0'" :role_id="role_id" />
<ActivityConfigurationList v-if="activeName === '1'" :role_id="role_id" />
</div>
</template>
<script>
import RecentActivitiesList from './components/RecentActivitiesList.vue';
import ActivityConfigurationList from './components/ActivityConfigurationList.vue';
export default {
name: 'RecentActivitiesPopup',
components: { RecentActivitiesList, ActivityConfigurationList },
data() {
return {
show: false,
activeName: '0',
role_id: '',
title: '',
};
},
methods: {
open(role_id, title) {
this.show = true;
this.role_id = role_id;
this.title = title;
},
handleClick() {},
close() {
this.show = false;
this.activeName = '0';
},
},
created() {},
};
</script>
<style lang="scss" scoped>
::v-deep .el-tabs__item {
padding: 0 20px !important;
}
</style>
<template>
<div
class="space-y-[12px] mt-[10px] !p-[8px] bg-[#F7F8FA] rounded-[4px] item"
>
<div>
<span class="label">近期要开:</span>
<el-popover
placement="top-start"
width="250"
trigger="hover"
:content="item.activity_rule_detail"
>
<span slot="reference">{{ item.activity_rule_name }}</span>
</el-popover>
</div>
<div>
<span class="label">开启时间:</span
><span>{{ item.open_activity_time }}</span>
</div>
<div>
<span class="label">关联客服:</span><span>{{ item.cser_name }}</span>
</div>
<div class="group">
<span class="label">备注:</span
><span v-show="!editShow">{{ item.remark }}</span>
<el-input
@blur="updated"
v-show="editShow"
type="textarea"
:rows="2"
placeholder="请输入内容"
v-model.trim="textarea"
>
</el-input>
<svg-icon
icon-class="edit"
class="icon invisible group-hover:visible"
style="font-size: 14px"
@click="editRemark"
/>
</div>
<div class="flex items-center">
<span class="label flex-shrink-0">推送状态:</span>
<span v-if="item.is_push === '2'">已推送</span>
<el-select
v-else
class="w-[70px]"
:clearable="false"
:value="item.is_push"
@change="handleChange"
>
<el-option label="未推送" value="1"> </el-option>
<el-option label="已推送" value="2"> </el-option>
</el-select>
</div>
<div class="flex items-center">
<span class="label flex-shrink-0">推送话术:</span>
<span
class="group flex-1 w-0 flex items-center"
v-if="pushLanguageTechnique"
>
<span class="truncate flex-1">{{ pushLanguageTechnique }}</span>
<i
class="el-icon-refresh mr-[8px] refreshList invisible group-hover:visible"
:class="isRefresh ? 'refreshListActive' : ''"
@click="refreshTag"
></i>
<svg-icon
icon-class="fuzhi"
class="icon invisible group-hover:visible"
style="font-size: 14px"
@click="copyText"
/>
</span>
<el-button
v-else
size="mini"
@click="queryGenerateProcedure"
:loading="isRefresh"
>生成话术</el-button
>
</div>
<slot></slot>
</div>
</template>
<script>
import { getRoleRecentActivityEditApi } from '@/api/game.js';
import { getGenerateProcedureApi } from '@/api/skill';
import { mapState } from 'vuex';
const UpdateType = {
PUSH: 1, //修改推送
REMARK: 2, //修改备注
};
export default {
name: 'RecentActivitiesTemplate',
emits: ['handleUpdate'],
components: {},
props: ['item'],
data() {
return {
editShow: false,
textarea: '',
isRefresh: false,
pushLanguageTechnique: '', //推送话术
};
},
computed: {
...mapState('common', ['zqUserInfo']),
...mapState('game', ['accountSelect', 'bindGameUserList']),
nowGameUserInfo() {
return {
member_id: this.accountSelect,
username: this.bindGameUserList.find(
(item) => item.member_id == this.accountSelect
)?.username,
};
},
},
methods: {
editRemark() {
this.editShow = true;
this.textarea = this.item.remark;
},
async updated() {
this.editShow = false;
if (this.textarea === this.item.remark) return;
this.edit(UpdateType.REMARK);
},
handleChange() {
this.edit(UpdateType.PUSH);
},
async edit(type) {
try {
await getRoleRecentActivityEditApi({
type,
role_id: this.item.role_id,
open_activity_time: this.item.open_activity_time,
remark: this.textarea,
activity_rule_id: this.item.activity_rule_id,
is_push: 2,
user_id: this.zqUserInfo.zq_user_id,
user_name: this.zqUserInfo.name,
});
this.$message.success('修改成功');
this.$emit('handleUpdate');
} catch (error) {
this.$message.error(error);
}
},
async queryGenerateProcedure() {
try {
this.isRefresh = true;
const { data } = await getGenerateProcedureApi({
...this.item,
...this.nowGameUserInfo,
});
this.pushLanguageTechnique = data.content;
} catch (error) {
} finally {
this.isRefresh = false;
}
},
async copyText() {
try {
await navigator.clipboard.writeText(this.pushLanguageTechnique);
this.$message.success('复制成功');
} catch (err) {
console.error('复制失败:', err);
}
},
refreshTag() {
this.queryGenerateProcedure();
},
},
created() {
console.log(this.nowGameUserInfo, 1111111);
},
};
</script>
<style lang="scss" scoped>
.item {
width: 100%;
height: auto;
font-size: 14px;
font-weight: 400;
color: #333333;
transition: all 0.5s;
position: relative;
cursor: pointer;
.label {
font-size: 14px;
color: #999999;
font-weight: 500;
margin-right: 8px;
}
.tag-icon {
cursor: pointer;
font-size: 14px;
color: #333333;
margin-right: 8px;
}
}
.refreshListActive {
animation: rotate 0.5s linear infinite;
}
.refreshList {
color: #00bf8a;
cursor: pointer;
font-size: 18px;
}
::v-deep .el-input__inner {
background-color: transparent;
border: 0;
box-shadow: none;
padding: 0;
}
::v-deep .el-select .el-input.is-focus .el-input__inner {
border-color: transparent !important;
box-shadow: none;
}
</style>
<template>
<!-- 营销面板组件 -->
<div class="item">
<div class="rowFlex columnCenter">
<span class="label">营销面板:</span>
<i
v-if="recentInfo.role_id"
:class="['el-icon-arrow-' + (active ? 'down' : 'right'), 'tag-icon']"
@click="handleClick"
></i>
</div>
<RecentActivities
v-if="recentInfo.role_id"
:item="recentInfo"
v-show="active"
@handleUpdate="getRoleData"
>
<el-button
type="text"
size="mini"
@click="
() =>
recentActivitiesPopupInstance.instance.open(
recentInfo.role_id,
popupTitle
)
"
>
查看更多 >
</el-button>
</RecentActivities>
</div>
</template>
<script>
import RecentActivities from '@/views/popup/RecentActivitiesPopup/templates/RecentActivities.vue';
import { createDetails } from '@/views/popup/RecentActivitiesPopup/index.js';
import { getRoleRecentActivityOneApi } from '@/api/game';
import { getRoleHoLo } from '@/api/game';
import { mapState } from 'vuex';
export default {
name: 'MarketingPanel',
components: { RecentActivities },
data() {
return {
active: true,
recentActivitiesPopupInstance: null, //近期要开模块弹框
recentInfo: {},
roleInfoList: [],
};
},
computed: {
...mapState('game', ['accountSelect']),
popupTitle() {
const findItem = this.roleInfoList.find(
(item) => item.role_id == this.recentInfo.role_id
);
if (findItem) {
return `${findItem.role_name}-${findItem.server_name}-${findItem.recharge_total}元`;
}
return;
},
},
methods: {
async queryGetRoleHoLo() {
const { data } = await getRoleHoLo({
page_size: 100,
page: 1,
member_id: this.accountSelect,
search_type: 'list',
});
this.roleInfoList = data.data;
},
handleClick() {
this.active = !this.active;
},
async getRoleData() {
const { data } = await getRoleRecentActivityOneApi({
member_id: this.accountSelect,
});
this.recentInfo = data.data;
},
},
created() {
this.getRoleData();
this.queryGetRoleHoLo();
},
mounted() {
this.recentActivitiesPopupInstance = createDetails({
gameUserInfoInject: this.gameUserInfoInject,
});
},
beforeDestroy() {
this.recentActivitiesPopupInstance.destroy();
},
};
</script>
<style lang="scss" scoped>
.item {
width: 100%;
height: auto;
font-size: 14px;
padding: 16px;
font-weight: 400;
color: #333333;
padding: 10px 0;
transition: all 0.5s;
position: relative;
cursor: pointer;
.label {
font-size: 14px;
color: #999999;
font-weight: 500;
margin-right: 8px;
}
.tag-icon {
cursor: pointer;
font-size: 14px;
color: #333333;
margin-right: 8px;
}
}
.refreshListActive {
animation: rotate 0.5s linear infinite;
}
.refreshList {
color: #3491fa;
cursor: pointer;
font-size: 18px;
}
</style>
<template>
<div class="gameUserDetails">
<!-- 智能标签 -->
<div class="item rowFlex columnCenter">
<div class="gameUserDetails">
<!-- 智能标签 -->
<div class="item rowFlex columnCenter">
<div class="rowFlex columnCenter">
<span class="label" style="min-width: 60px">智能标签:</span>
<p class="text">
<el-tag
v-for="(item, index) in chatUserDetails.intelligence_tag_group"
:key="index"
style="margin-right: 5px; margin-bottom: 5px"
>{{ item.name }}
</el-tag>
</p>
</div>
<el-popover
placement="top"
trigger="hover"
content="手动更新当前用户的智能标签,每个用户半个小时仅能更新一次"
>
<i
slot="reference"
class="el-icon-refresh refreshList"
:class="isRefresh ? 'refreshListActive' : ''"
@click="refreshTag"
></i>
</el-popover>
</div>
<ZyouTag :game-user-info="gameUserInfo" :account-select="accountSelect" />
<div v-if="accountSelect && accountSelect !== '' && gameUserInfo.username">
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label" style="min-width:60px;">智能标签:</span>
<p class="text">
<el-tag v-for="(item,index) in chatUserDetails.intelligence_tag_group" :key="index" style="margin-right:5px;margin-bottom:5px;">{{ item.name }} </el-tag>
</p>
<span class="label">账号:</span>
<p class="text">{{ gameUserInfo.username }}</p>
<span v-if="gameUserInfo.account_type == 2" class="account_type"
></span
>
</div>
<el-popover
placement="top"
trigger="hover"
content="手动更新当前用户的智能标签,每个用户半个小时仅能更新一次"
>
<i
slot="reference"
class="el-icon-refresh refreshList"
:class="isRefresh?'refreshListActive':''"
@click="refreshTag"
></i>
</el-popover>
</div>
<ZyouTag :game-user-info="gameUserInfo" :account-select="accountSelect" />
<div v-if="accountSelect && accountSelect!=='' && gameUserInfo.username">
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">账号:</span>
<p class="text">{{ gameUserInfo.username }}</p> <span v-if="gameUserInfo.account_type==2" class="account_type"></span>
</div>
<!-- 营销面板 -->
<MarketingPanel />
<!-- 充值金额 -->
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">充值金额:</span>
<p class="text">{{ gameUserInfo.real_recharge_total }}</p>
</div>
<!-- 充值金额 -->
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">充值金额:</span>
<p class="text">{{ gameUserInfo.real_recharge_total }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">是否易主:</span>
<p class="text">{{ change_user == 1 ? '是' : '否' }}</p>
<el-popconfirm
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
title="是否切换易主状态"
@confirm="changeUserFn"
>
<!-- changeUser -->
<div slot="reference" class="rowFlex columnCenter changeUser">
<p>
<i class="el-icon-sort-down"></i>
</p>
<p>
<i class="el-icon-sort-up"></i>
</p>
</div>
</el-popconfirm>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">是否易主:</span>
<p class="text">{{ change_user==1?'是':'否' }}</p>
<el-popconfirm
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
title="是否切换易主状态"
@confirm="changeUserFn"
>
<!-- changeUser -->
<div slot="reference" class="rowFlex columnCenter changeUser">
<p>
<i class="el-icon-sort-down"></i>
</p>
<p>
<i class="el-icon-sort-up"></i>
</p>
</div>
</el-popconfirm>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">白名单:</span>
<p class="text">{{ change_name == 1 ? '是' : '否' }}</p>
<el-popconfirm
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
title="是否切换白名单状态"
@confirm="changeNameFn"
>
<div slot="reference" class="rowFlex columnCenter changeUser">
<p>
<i class="el-icon-sort-down"></i>
</p>
<p>
<i class="el-icon-sort-up"></i>
</p>
</div>
</el-popconfirm>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">白名单:</span>
<p class="text">{{ change_name==1?'是':'否' }}</p>
<el-popconfirm
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
title="是否切换白名单状态"
@confirm="changeNameFn"
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">异常账号:</span>
<p class="text">{{ change_risk == 1 ? '是' : '否' }}</p>
<el-popconfirm
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
title="是否切换账号异常状态"
@confirm="changeRiskFn"
>
<div
v-if="change_risk == 0"
slot="reference"
class="rowFlex columnCenter changeUser"
>
<div slot="reference" class="rowFlex columnCenter changeUser">
<p>
<i class="el-icon-sort-down"></i>
</p>
<p>
<i class="el-icon-sort-up"></i>
</p>
</div>
</el-popconfirm>
</div>
<p>
<i class="el-icon-sort-down"></i>
</p>
<p>
<i class="el-icon-sort-up"></i>
</p>
</div>
</el-popconfirm>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">异常账号:</span>
<p class="text">{{ change_risk==1?'是':'否' }}</p>
<el-popconfirm
confirm-button-text="确定"
cancel-button-text="取消"
icon="el-icon-info"
title="是否切换账号异常状态"
@confirm="changeRiskFn"
>
<div v-if="change_risk==0" slot="reference" class="rowFlex columnCenter changeUser">
<p>
<i class="el-icon-sort-down"></i>
</p>
<p>
<i class="el-icon-sort-up"></i>
</p>
</div>
</el-popconfirm>
</div>
</div>
<div
v-if="gameUserInfo.role_info && gameUserInfo.role_info.role_level"
class="item rowFlex columnCenter spaceBetween"
>
<div class="rowFlex columnCenter">
<span class="label">等级:</span>
<p class="text">{{ gameUserInfo.role_info.role_level }}</p>
</div>
<div v-if="gameUserInfo.role_info && gameUserInfo.role_info.role_level " class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">等级:</span>
<p class="text">{{ gameUserInfo.role_info.role_level }}</p>
</div>
</div>
<div
v-if="
gameUserInfo.role_info &&
gameUserInfo.role_info.trans_check_status_text
"
class="item rowFlex columnCenter spaceBetween"
>
<div class="rowFlex columnCenter">
<span class="label">转端审核:</span>
<p class="text">
{{ gameUserInfo.role_info.trans_check_status_text }}
</p>
</div>
<div v-if="gameUserInfo.role_info && gameUserInfo.role_info.trans_check_status_text " class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">转端审核:</span>
<p class="text">{{ gameUserInfo.role_info.trans_check_status_text }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">近期是否被封禁:</span>
<p class="text">{{ gameUserInfo.is_banned == 1 ? '是' : '否' }}</p>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">近期是否被封禁:</span>
<p class="text">{{ gameUserInfo.is_banned==1?'是':'否' }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">真实姓名:</span>
<p class="text">{{ gameUserInfo.real_name }}</p>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">真实姓名:</span>
<p class="text">{{ gameUserInfo.real_name }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">CP角色ID:</span>
<p
v-if="gameUserInfo.role_info && gameUserInfo.role_info.cp_role_id"
class="text"
>
{{ gameUserInfo.role_info.cp_role_id }}
</p>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">CP角色ID:</span>
<p v-if="gameUserInfo.role_info && gameUserInfo.role_info.cp_role_id" class="text">{{ gameUserInfo.role_info.cp_role_id }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">是否愿意转端:</span>
<p class="text">
<el-radio-group
v-model="chatUserDetails.transferred"
@change="toTransfer"
>
<el-radio :label="0"></el-radio>
<el-radio :label="1"></el-radio>
</el-radio-group>
</p>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">是否愿意转端:</span>
<p class="text">
<el-radio-group v-model="chatUserDetails.transferred" @change="toTransfer">
<el-radio :label="0"></el-radio>
<el-radio :label="1"></el-radio>
</el-radio-group>
</p>
</div>
</div>
<div class="item rowFlex columnCenter">
<div class="rowFlex columnCenter">
<span class="label">手机号:</span>
<p v-if="!showUserMobile" class="text">{{ gameUserInfo.mobile }}</p>
</div>
<div class="item rowFlex columnCenter">
<div class="rowFlex columnCenter">
<span class="label">手机号:</span>
<p v-if="!showUserMobile" class="text">{{ gameUserInfo.mobile }}</p>
</div>
<el-input v-if="showUserMobile" v-model="newMobileValue" style="width: 120px; margin-left: 10px" @change="changeUserMobile" @blur="showUserMobile = false"></el-input>
<!-- 暂时禁止用户修改手机号 -->
<i class="el-icon-edit icon" style="font-size: 14px" @click="editUserMobile"></i>
<el-input
v-if="showUserMobile"
v-model="newMobileValue"
style="width: 120px; margin-left: 10px"
@change="changeUserMobile"
@blur="showUserMobile = false"
></el-input>
<!-- 暂时禁止用户修改手机号 -->
<i
class="el-icon-edit icon"
style="font-size: 14px"
@click="editUserMobile"
></i>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">注册游戏:</span>
<p class="text">{{ gameUserInfo.reg_game_name }}</p>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">注册游戏:</span>
<p class="text">{{ gameUserInfo.reg_game_name }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">主游戏:</span>
<p class="text">{{ gameUserInfo.main_game_name }}</p>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">主游戏:</span>
<p class="text">{{ gameUserInfo.main_game_name }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">登录系统:</span>
<p class="text">{{ gameUserInfo.last_login_os }}</p>
</div>
<div class="item rowFlex columnCenter spaceBetween">
</div>
<div
v-if="
gameUserInfo.service_wechat_number_info &&
gameUserInfo.service_wechat_number_info.length > 0
"
class="item rowFlex columnCenter spaceBetween"
>
<div class="rowFlex columnCenter" style="width: 100%">
<span class="label">客服微信号:</span>
<div class="rowFlex columnCenter">
<span class="label">登录系统:</span>
<p class="text">{{ gameUserInfo.last_login_os }}</p>
</div>
</div>
<div v-if="gameUserInfo.service_wechat_number_info && gameUserInfo.service_wechat_number_info.length>0" class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter" style="width:100%;">
<span class="label">客服微信号:</span>
<!-- 显示第一个微信号 -->
<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>
<span class="bradge">{{ gameUserInfo.service_wechat_number_info[0].type_name }}</span>
<div class="colorStatus rowFlex columnCenter" style="margin-left: 10px;">
<span v-if="gameUserInfo.service_wechat_number_info[0].loss_status==1" class="fail">{{ gameUserInfo.service_wechat_number_info[0].loss_status_text }}</span>
</div>
<p class="hidden wxName">
{{
gameUserInfo.service_wechat_number_info[0]
.service_wechat_number_name
}}({{
gameUserInfo.service_wechat_number_info[0].service_type_name
}})
</p>
<span class="bradge">{{
gameUserInfo.service_wechat_number_info[0].type_name
}}</span>
<div
class="colorStatus rowFlex columnCenter"
style="margin-left: 10px"
>
<span
v-if="
gameUserInfo.service_wechat_number_info[0].loss_status == 1
"
class="fail"
>{{
gameUserInfo.service_wechat_number_info[0].loss_status_text
}}</span
>
</div>
<!-- 如果有多个,显示 +n -->
<div v-if="gameUserInfo.service_wechat_number_info.length > 1">
<el-popover
placement="top"
trigger="hover"
width="300"
</div>
<!-- 如果有多个,显示 +n -->
<div v-if="gameUserInfo.service_wechat_number_info.length > 1">
<el-popover placement="top" trigger="hover" width="300">
<div
v-for="(
item, index
) in gameUserInfo.service_wechat_number_info.slice(1)"
:key="index"
class="rowFlex columnCenter"
style="margin-bottom: 10px"
>
<div v-for="(item,index) in gameUserInfo.service_wechat_number_info.slice(1)" :key="index" class="rowFlex columnCenter" style="margin-bottom:10px;">
<p class="hidden wxName">{{ item.service_wechat_number_name }}({{ item.service_type_name }})</p>
<span class="bradge">{{ item.type_name }}</span>
<div class="colorStatus rowFlex columnCenter" style="margin-left: 10px;">
<span v-if="item.loss_status==1" class="fail">{{ item.loss_status_text }}</span>
</div>
<p class="hidden wxName">
{{ item.service_wechat_number_name }}({{
item.service_type_name
}})
</p>
<span class="bradge">{{ item.type_name }}</span>
<div
class="colorStatus rowFlex columnCenter"
style="margin-left: 10px"
>
<span v-if="item.loss_status == 1" class="fail">{{
item.loss_status_text
}}</span>
</div>
<el-button slot="reference" type="text" style="font-size: 14px;">+{{ gameUserInfo.service_wechat_number_info.length - 1 }}</el-button>
</el-popover>
</div>
</div>
<el-button slot="reference" type="text" style="font-size: 14px"
>+{{
gameUserInfo.service_wechat_number_info.length - 1
}}</el-button
>
</el-popover>
</div>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">注册时间:</span>
<p class="text">{{ moment(gameUserInfo.reg_time * 1000).format('YYYY-MM-DD') }}</p>
</div>
</div>
<div class="item rowFlex columnCenter spaceBetween">
<div class="rowFlex columnCenter">
<span class="label">注册时间:</span>
<p class="text">
{{ moment(gameUserInfo.reg_time * 1000).format('YYYY-MM-DD') }}
</p>
</div>
</div>
</div>
</template>
<script>
import { bindMobile, getMemberLabel, editMemberLabel } from '@/api/game'
import { mapState, mapMutations } from 'vuex'
import { toTransfer, syncSessionIntelTag } from '@/api/works'
import moment from 'moment'
import ZyouTag from './ZyouTag.vue'
import { debounce } from '@/utils'
export default {
name: 'gameUserInfo',
components: {
ZyouTag
},
props: ['gameUserInfo', 'chatUserDetails'],
data() {
return {
moment,
showUserMobile: false,
change_user: 0,
change_name: 0,
change_risk: 0,
change_appraisal: 0,
newMobileValue: '',
isRefresh: false,
showWxNumber: true
}
},
computed: {
...mapState('game', ['accountSelect'])
</div>
</template>
<script>
import { bindMobile, getMemberLabel, editMemberLabel } from '@/api/game';
import { mapState, mapMutations } from 'vuex';
import { toTransfer, syncSessionIntelTag } from '@/api/works';
import MarketingPanel from './MarketingPanel.vue';
import moment from 'moment';
import ZyouTag from './ZyouTag.vue';
import { debounce } from '@/utils';
export default {
name: 'gameUserInfo',
components: {
ZyouTag,
MarketingPanel,
},
props: ['gameUserInfo', 'chatUserDetails'],
data() {
return {
moment,
showUserMobile: false,
change_user: 0,
change_name: 0,
change_risk: 0,
change_appraisal: 0,
newMobileValue: '',
isRefresh: false,
showWxNumber: true,
};
},
computed: {
...mapState('game', ['accountSelect']),
},
watch: {
accountSelect: {
handler: debounce(function (newVal, oldVal) {
if (newVal && newVal !== '' && newVal !== oldVal) {
this.getMemberLabel();
}
}, 200),
immediate: false,
},
watch: {
accountSelect: {
handler:debounce(function(newVal, oldVal) {
if (newVal && newVal !== "" && newVal !== oldVal) {
this.getMemberLabel()
}
},200),
immediate: false
},
mounted() {
this.$nextTick(() => {
if (this.accountSelect && this.accountSelect !== '') {
this.getMemberLabel();
}
},
mounted() {
this.$nextTick(() => {
if (this.accountSelect && this.accountSelect !== '') {
this.getMemberLabel()
});
},
methods: {
getMemberLabel() {
const data = {
member_id: this.accountSelect,
label_type: [2, 3, 4, 6],
};
getMemberLabel(data).then((res) => {
if (res?.data?.data?.length > 0) {
const change_user = res.data.data.find(
(item) => item.label_type == 2
);
const change_name = res.data.data.find(
(item) => item.label_type == 3
);
const change_risk = res.data.data.find(
(item) => item.label_type == 4
); // 风险用户
const change_appraisal = res.data.data.find(
(item) => item.label_type == 6
); // 石锤用户
this.change_user = change_user.label_value;
this.change_name = change_name.label_value;
this.change_risk = change_risk.label_value;
this.change_appraisal = change_appraisal.label_value;
this.$emit('changeAppraisal', this.change_appraisal);
} else {
this.change_user = 0;
this.change_name = 0;
this.change_risk = 0;
this.change_appraisal = 0;
this.$emit('changeAppraisal', this.change_appraisal);
}
})
});
},
methods: {
getMemberLabel() {
const data = {
member_id: this.accountSelect,
label_type: [2, 3, 4, 6]
// 白名单
changeNameFn() {
const data = {
member_id: this.accountSelect,
create_user: this.cser_name,
label_type: 3,
label_value: this.change_name == 1 ? 0 : 1,
};
editMemberLabel(data).then((res) => {
if (res.status_code == 1) {
this.$message.success(res.msg);
this.change_name == 1
? (this.change_name = 0)
: (this.change_name = 1);
}
getMemberLabel(data).then(res => {
if (res?.data?.data?.length > 0) {
const change_user = res.data.data.find(item => item.label_type == 2)
const change_name = res.data.data.find(item => item.label_type == 3)
const change_risk = res.data.data.find(item => item.label_type == 4)// 风险用户
const change_appraisal = res.data.data.find(item => item.label_type == 6)// 石锤用户
this.change_user = change_user.label_value
this.change_name = change_name.label_value
this.change_risk = change_risk.label_value
this.change_appraisal = change_appraisal.label_value
this.$emit('changeAppraisal', this.change_appraisal)
} else {
this.change_user = 0
this.change_name = 0
this.change_risk = 0
this.change_appraisal = 0
this.$emit('changeAppraisal', this.change_appraisal)
}
})
},
// 白名单
changeNameFn() {
const data = {
member_id: this.accountSelect,
create_user: this.cser_name,
label_type: 3,
label_value: this.change_name == 1 ? 0 : 1
}
editMemberLabel(data).then((res) => {
if (res.status_code == 1) {
this.$message.success(res.msg)
this.change_name == 1 ? this.change_name = 0 : this.change_name = 1
}
this.$emit('update:show', false)
})
},
// 异常账号
changeRiskFn() {
const data = {
member_id: this.accountSelect,
create_user: this.cser_name,
label_type: 4,
label_value: this.change_risk == 0 ? 1 : 0
}
editMemberLabel(data).then((res) => {
if (res.status_code == 1) {
this.$message.success(res.msg)
this.change_risk == 1 ? this.change_risk = 0 : this.change_risk = 1
}
this.$emit('update:show', false)
})
},
changeUserFn() {
const data = {
member_id: this.accountSelect,
create_user: this.cser_name,
label_type: 2,
label_value: this.change_user == 1 ? 0 : 1
}
editMemberLabel(data).then((res) => {
if (res.status_code == 1) {
this.$message.success(res.msg)
this.change_user == 1 ? this.change_user = 0 : this.change_user = 1
}
this.$emit('update:show', false)
})
},
toTransfer() {
const data = {
external_userid: this.chatUserDetails.external_userid,
userid: this.chatUserDetails.userid,
transferred: this.chatUserDetails.transferred
this.$emit('update:show', false);
});
},
// 异常账号
changeRiskFn() {
const data = {
member_id: this.accountSelect,
create_user: this.cser_name,
label_type: 4,
label_value: this.change_risk == 0 ? 1 : 0,
};
editMemberLabel(data).then((res) => {
if (res.status_code == 1) {
this.$message.success(res.msg);
this.change_risk == 1
? (this.change_risk = 0)
: (this.change_risk = 1);
}
toTransfer(data).then(res => {
if (res.status_code == 1) {
this.$message.success(res.msg)
}
})
},
// 修改用户手机号
changeUserMobile() {
if (!/^1((3[0-9])|(4[1579])|(5[0-9])|(6[6])|(7[0-9])|(8[0-9])|(9[0-9]))\d{8}$/.test(this.newMobileValue)) {
this.$message.warning('请填写正确的手机号')
return false
this.$emit('update:show', false);
});
},
changeUserFn() {
const data = {
member_id: this.accountSelect,
create_user: this.cser_name,
label_type: 2,
label_value: this.change_user == 1 ? 0 : 1,
};
editMemberLabel(data).then((res) => {
if (res.status_code == 1) {
this.$message.success(res.msg);
this.change_user == 1
? (this.change_user = 0)
: (this.change_user = 1);
}
this.gameUserInfo.mobile = this.newMobileValue.substr(0, 3) + '****' + this.newMobileValue.substr(7)
this.showUserMobile = false
const data = {
member_id: this.accountSelect,
mobile: this.newMobileValue
this.$emit('update:show', false);
});
},
toTransfer() {
const data = {
external_userid: this.chatUserDetails.external_userid,
userid: this.chatUserDetails.userid,
transferred: this.chatUserDetails.transferred,
};
toTransfer(data).then((res) => {
if (res.status_code == 1) {
this.$message.success(res.msg);
}
bindMobile(data).then((res) => {
if (res.status_code == 1) {
this.$message.success(res.msg)
}
})
},
editUserMobile() {
this.showUserMobile = true
},
async refreshTag() {
this.isRefresh = true
const data = {
corp_id: this.chatUserDetails.corp_id,
userid: this.chatUserDetails.userid,
external_userid: this.chatUserDetails.external_userid
});
},
// 修改用户手机号
changeUserMobile() {
if (
!/^1((3[0-9])|(4[1579])|(5[0-9])|(6[6])|(7[0-9])|(8[0-9])|(9[0-9]))\d{8}$/.test(
this.newMobileValue
)
) {
this.$message.warning('请填写正确的手机号');
return false;
}
this.gameUserInfo.mobile =
this.newMobileValue.substr(0, 3) +
'****' +
this.newMobileValue.substr(7);
this.showUserMobile = false;
const data = {
member_id: this.accountSelect,
mobile: this.newMobileValue,
};
bindMobile(data).then((res) => {
if (res.status_code == 1) {
this.$message.success(res.msg);
}
try {
const res = await syncSessionIntelTag(data)
if (res.status_code === 1) {
if (res.data.is_can_sync == 1) {
this.$message.success(res.msg)
this.$set(this.chatUserDetails, 'intelligence_tag_group', res.data.intel_tag)
} else {
this.$message.warning('每个用户半个小时仅能更新一次')
}
});
},
editUserMobile() {
this.showUserMobile = true;
},
async refreshTag() {
this.isRefresh = true;
const data = {
corp_id: this.chatUserDetails.corp_id,
userid: this.chatUserDetails.userid,
external_userid: this.chatUserDetails.external_userid,
};
try {
const res = await syncSessionIntelTag(data);
if (res.status_code === 1) {
if (res.data.is_can_sync == 1) {
this.$message.success(res.msg);
this.$set(
this.chatUserDetails,
'intelligence_tag_group',
res.data.intel_tag
);
} else {
this.$message.warning('每个用户半个小时仅能更新一次');
}
} catch (error) {
this.isRefresh = false
} finally {
this.isRefresh = false
}
} catch (error) {
this.isRefresh = false;
} finally {
this.isRefresh = false;
}
},
},
};
</script>
<style lang="scss" scoped>
.gameUserDetails {
width: 100%;
.changeUser {
font-size: 18px;
transform: rotate(90deg);
color: #3491fa;
margin-left: 10px;
margin-top: -5px;
:first-child {
margin-right: -5px;
}
}
</script>
<style lang="scss" scoped>
.gameUserDetails {
.item {
width: 100%;
.changeUser{
font-size: 18px;
transform: rotate(90deg);
color: #3491FA ;
height: auto;
font-size: 14px;
font-weight: 400;
color: #333333;
padding: 5px 0;
transition: all 0.5s;
position: relative;
cursor: pointer;
.tableImage {
width: 40px;
height: 40px;
border-radius: 6px;
margin-right: 5px;
}
.wxName {
max-width: 80%;
}
.bradge {
padding: 2px 5px;
border-radius: 3px;
background: #f4f4f5;
color: #909399;
margin-left: 10px;
margin-top: -5px;
:first-child{
margin-right: -5px;
}
}
.item {
width: 100%;
height: auto;
.showInputRemarkInput {
width: 200px;
margin-left: 10px;
}
.label {
color: #86909c;
font-size: 14px;
font-weight: 400;
}
.text {
color: #333333;
padding: 5px 0;
transition: all 0.5s;
position: relative;
margin-left: 3px;
word-break: break-all;
max-width: calc(100% - 20px);
}
.icon {
display: none;
position: absolute;
right: 0;
top: 12px;
}
.noBind {
width: 44px;
height: 22px;
border-radius: 4px;
border: 1px solid #3491fa;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #3491fa;
margin-left: 30px;
cursor: pointer;
.tableImage {
width: 40px;
height: 40px;
border-radius: 6px;
margin-right: 5px;
}
.wxName{
max-width: 80%;
}
.bradge{
padding: 2px 5px;
border-radius: 3px;
background: #f4f4f5;
color: #909399;
margin-left: 10px;
}
.showInputRemarkInput {
width: 200px;
margin-left: 10px;
}
.label {
color: #86909C;
font-size: 14px;
}
.text {
color: #333333;
margin-left: 3px;
word-break: break-all;
max-width: calc(100% - 20px);
}
.icon {
display: none;
position: absolute;
right: 0;
top: 12px;
}
.tags {
width: 250px;
margin-left: 10px;
.tagsItem {
width: 250px;
}
.noBind {
width: 44px;
.tag {
height: 22px;
line-height: 22px;
padding: 0 8px;
background: #ffffff;
border-radius: 4px;
border: 1px solid #3491FA ;
border: 1px solid rgba(0, 0, 0, 0.2);
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #3491FA ;
margin-left: 30px;
cursor: pointer;
}
.tags {
width: 250px;
margin-left: 10px;
.tagsItem {
width: 250px;
}
.tag {
height: 22px;
line-height: 22px;
padding: 0 8px;
background: #ffffff;
border-radius: 4px;
border: 1px solid rgba(0, 0, 0, 0.2);
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
margin-right: 10px;
margin-bottom: 10px;
}
color: #333333;
margin-right: 10px;
margin-bottom: 10px;
}
}
.item:hover .icon {
display: block;
}
.el-icon-sort-up{
font-size: 16px;
}
}
.refreshList {
color: #3491FA ;
cursor: pointer;
font-size: 18px;
margin-left: 20px;
.item:hover .icon {
display: block;
}
.refreshListActive{
animation:rotate 0.5s linear infinite ;
.el-icon-sort-up {
font-size: 16px;
}
@keyframes rotate {
0%{
transform: rotate(0deg);
}
100%{
transform: rotate(360deg);
}
}
.refreshList {
color: #3491fa;
cursor: pointer;
font-size: 18px;
margin-left: 20px;
}
.refreshListActive {
animation: rotate 0.5s linear infinite;
}
@keyframes rotate {
0% {
transform: rotate(0deg);
}
</style>
<style>
.wxName{
max-width: 80%;
}
.bradge{
padding: 2px 5px;
border-radius: 3px;
background: #f4f4f5;
color: #909399;
margin-left: 10px;
}
100% {
transform: rotate(360deg);
}
}
</style>
<style>
.wxName {
max-width: 80%;
}
.bradge {
padding: 2px 5px;
border-radius: 3px;
background: #f4f4f5;
color: #909399;
margin-left: 10px;
}
</style>
\ No newline at end of file
<template>
<div class="userInfo-content">
<div class="userInfo-content relative" id="recentActivitiesPopup">
<el-tabs v-model="activeTab" class="user-tabs">
<el-tab-pane label="客户信息" name="info">
<Info :chatUserDetails="chatUserInfo"/>
<Info :chatUserDetails="chatUserInfo" />
</el-tab-pane>
<el-tab-pane label="角色信息" name="role">
<template #label v-if="totalNum">
<el-badge :value="totalNum" class="text-center">
<p>角色信息</p>
</el-badge>
</template>
<roleInfo v-if="activeTab === 'role'" />
</el-tab-pane>
<el-tab-pane label="订单信息" name="order">
......@@ -17,52 +22,68 @@
</div>
</template>
<script>
import Info from './components/Info.vue'
import roleInfo from '@/views/roleInfo.vue'
import orderList from '@/views/orderList.vue'
import violationRecord from '@/views/ViolationRecord.vue'
import { mapState, mapMutations } from 'vuex'
import Cookies from 'js-cookie'
import Info from './components/Info.vue';
import roleInfo from '@/views/roleInfo.vue';
import orderList from '@/views/orderList.vue';
import violationRecord from '@/views/ViolationRecord.vue';
import { mapState, mapMutations } from 'vuex';
import { createRoleRecentActivityNotPushNum } from '@/views/hooks/useGetCount';
import Cookies from 'js-cookie';
export default {
name: 'userInfo',
components: {
Info,
roleInfo,
orderList,
violationRecord
violationRecord,
},
mounted() {
mounted() {},
watch: {
async accountSelect(newVal) {
await this.initInstance();
console.log(this.instance.getTotalNum(), '+++++++++++++++++++++++');
this.totalNum = this.instance.getTotalNum();
},
},
data() {
return {
activeTab: 'info'
}
activeTab: 'info',
instance: null,
totalNum: 0,
};
},
computed: {
...mapState('game', ['chatUserInfo']),
...mapState('game', ['chatUserInfo', 'accountSelect']),
},
created() {
// 初始化 vuex 中的值
},
mounted() {
this.$nextTick(() => {
this.initVuexValue()
})
this.initVuexValue();
});
},
methods: {
...mapMutations('user', ['set_userInfo']),
initVuexValue(){
async initInstance() {
this.instance = await createRoleRecentActivityNotPushNum(
this.accountSelect
);
},
initVuexValue() {
const userinfo = {
cser_id: Cookies.get('cser_id'),
cser_name: Cookies.get('cser_name'),
username: Cookies.get('cser_name'),
id: Cookies.get('cser_id'),
}
this.set_userInfo(userinfo)
}
}
}
};
this.set_userInfo(userinfo);
},
},
beforeDestroy() {
this.instance.destroy();
},
};
</script>
<style lang="scss" scoped>
......@@ -74,29 +95,33 @@ export default {
.user-tabs {
width: 100%;
::v-deep .el-tabs__header {
margin-bottom: 15px;
padding: 0 10px;
}
::v-deep .el-tabs__nav-wrap::after {
height: 1px;
}
::v-deep .el-tabs__item {
height: 40px;
line-height: 40px;
font-size: 14px;
}
::v-deep .el-tabs__active-bar {
height: 2px;
}
::v-deep .el-tabs__content {
height: calc(100% - 55px);
}
}
}
::v-deep .el-badge__content.is-fixed {
top: 8px;
right: 6px;
}
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论