feat: 圈子对接
This commit is contained in:
parent
23274c3d4a
commit
74dcb70174
@ -1,7 +1,7 @@
|
||||
ENV = 'development'
|
||||
|
||||
# 接口地址
|
||||
VUE_APP_BASE_API = 'https://lczqvideodev.test.upchina.com'
|
||||
VUE_APP_BASE_API = 'http://8.138.144.54:8080'
|
||||
VUE_APP_WS_API = 'ws://localhost:8000'
|
||||
|
||||
# 是否启用 babel-plugin-dynamic-import-node插件
|
||||
|
||||
145
src/api/circle.js
Normal file
145
src/api/circle.js
Normal file
@ -0,0 +1,145 @@
|
||||
import request from "@/utils/request";
|
||||
|
||||
// 后台查询交易圈列表
|
||||
export function getCircleList(data) {
|
||||
return request({
|
||||
url: "/admin/group/info/list",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 后台保存交易圈
|
||||
export function saveCircle(data) {
|
||||
return request({
|
||||
url: "/admin/group/info/save",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 后台更新交易圈
|
||||
export function updateCircle(data) {
|
||||
return request({
|
||||
url: "/admin/group/info/update",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 后台更新交易圈状态
|
||||
export function updateCircleStatus(data) {
|
||||
return request({
|
||||
url: "/admin/group/info/updateStatus",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 后台查询交易圈详情
|
||||
export function getCircleDetail(data) {
|
||||
return request({
|
||||
url: "/admin/group/info/get",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 设置互动状态
|
||||
export function setInteractiveStatus(data) {
|
||||
return request({
|
||||
url: "/admin/group/message/setInteractiveStatus",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 设置私聊状态
|
||||
export function setPrivateStatus(data) {
|
||||
return request({
|
||||
url: "/admin/group/message/setPrivateStatus",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 设置显示圈子人数
|
||||
export function setShowMemberCount(data) {
|
||||
return request({
|
||||
url: "/admin/group/message/setShowMemberCount",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 后台更新互动消息状态
|
||||
export function updateMessageStatus(data) {
|
||||
return request({
|
||||
url: "/admin/group/message/updateStatus",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 设置显示昵称
|
||||
export function setShowNickName(data) {
|
||||
return request({
|
||||
url: "/admin/group/message/setShowNickName",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 设置先审后发
|
||||
export function setFirstAudit(data) {
|
||||
return request({
|
||||
url: "/admin/group/message/setFirstAudit",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 后台获取互动消息
|
||||
export function getMessageList(data) {
|
||||
return request({
|
||||
url: "/admin/group/message/getMessageList",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 后台发送互动消息
|
||||
export function sendAdvisorMessage(data) {
|
||||
return request({
|
||||
url: "/admin/group/message/sendAdvisorMessage",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 后台获取私聊列表
|
||||
export function getPrivateChatList(data) {
|
||||
return request({
|
||||
url: "/admin/group/message/getPrivateChatList",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 后台设置消息精选
|
||||
export function setMessageRecommend(data) {
|
||||
return request({
|
||||
url: "/admin/group/message/setMessageRecommend",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
|
||||
// 后台设置交易圈公告
|
||||
export function setNotice(data) {
|
||||
return request({
|
||||
url: "/admin/group/info/setNotice",
|
||||
method: "post",
|
||||
data
|
||||
});
|
||||
}
|
||||
@ -1,654 +1,663 @@
|
||||
import request from '@/utils/request'
|
||||
import request from "@/utils/request";
|
||||
|
||||
//
|
||||
export function getInfoList(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/info/list',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/info/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台查询专栏列表
|
||||
export function getColumnList(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/column/list',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/column/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 后台创建视频直播
|
||||
export function save(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/info/save',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/info/save",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
export function batchSave(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/info/batchSave',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/info/batchSave",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 后台更新视频信息
|
||||
export function update(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/info/update',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/info/update",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 后台标签列表
|
||||
export function tagList(data) {
|
||||
return request({
|
||||
url: '/admin/common/tag/list',
|
||||
method: 'post',
|
||||
url: "/admin/common/tag/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台标签列表
|
||||
export function uploadSign(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/uploadSign',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/uploadSign",
|
||||
method: "get",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 后台标签列表
|
||||
export function librarySave(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/library/save',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/library/save",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台标签列表
|
||||
export function livePlayInfo(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/playInfo',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/playInfo",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 后台标签列表
|
||||
export function infoSubmit(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/info/submit',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/info/submit",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 行为数据统计
|
||||
export function cartList(params) {
|
||||
return request({
|
||||
url: '/app/video/live/cartList',
|
||||
method: 'get',
|
||||
url: "/app/video/live/cartList",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
export function infoGet(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/info/get',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/info/get",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台撤回操作
|
||||
export function infoRecall(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/info/recall',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/info/recall",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
export function behaviorStatistic(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/behavior-statistic',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/behavior-statistic",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
// 客户数据统计
|
||||
export function behaviorUser(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/behavior-user-of-one',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/behavior-user-of-one",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 行为数据统计详情(某直播客户统计)
|
||||
export function behaviorStaff(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/behavior-staff-of-one',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/behavior-staff-of-one",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台审核视频直播
|
||||
export function updateStatus(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/info/updateStatus',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/info/updateStatus",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 后台保存推荐位
|
||||
export function recommendSave(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/info/recommend',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/info/recommend",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 后台保存推荐位
|
||||
export function rLiveWsConfig(params) {
|
||||
return request({
|
||||
url: '/admin/common/getWebSocketConf',
|
||||
method: 'get',
|
||||
url: "/admin/common/getWebSocketConf",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
export function uVideoControl(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/info/control',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/info/control",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
export function getPlayerSign(data) {
|
||||
return request({
|
||||
url: '/admin/video/playerSign',
|
||||
method: 'post',
|
||||
url: "/admin/video/playerSign",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
export function videoMessage(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/message/list',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/message/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台删除互动消息
|
||||
export function messageDelete(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/message/delete',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/message/delete",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台发送互动消息
|
||||
export function messageSend(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/message/send',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/message/send",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 添加用户禁言
|
||||
export function addCommentBlack(data) {
|
||||
return request({
|
||||
url: '/admin/comment/addCommentBlack',
|
||||
method: 'post',
|
||||
url: "/admin/comment/addCommentBlack",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 解除用户禁言
|
||||
export function removeCommentBlack(params) {
|
||||
return request({
|
||||
url: '/admin/comment/removeCommentBlack',
|
||||
method: 'get',
|
||||
url: "/admin/comment/removeCommentBlack",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 中台查询禁言列表
|
||||
export function queryCommentBlackList(params) {
|
||||
return request({
|
||||
url: "/admin/comment/queryCommentBlackList",
|
||||
method: "get",
|
||||
params
|
||||
});
|
||||
}
|
||||
|
||||
// 购物车上下架
|
||||
export function cartUpdateStatus(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/cart/updateStatus',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/cart/updateStatus",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 购物车修改可销售数量
|
||||
export function updateSaleLimit(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/cart/updateSaleLimit',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/cart/updateSaleLimit",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 后台停止互动
|
||||
export function messageForbidden(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/message/forbidden',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/message/forbidden",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台查询观点包列表
|
||||
export function packageList(data) {
|
||||
return request({
|
||||
url: '/admin/view/package/list',
|
||||
method: 'post',
|
||||
url: "/admin/view/package/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 购物车推荐
|
||||
export function cartRecommend(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/cart/recommend',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/cart/recommend",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台推荐产品消息
|
||||
export function productMessage(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/message/productMessage',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/message/productMessage",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台查询专栏详情
|
||||
export function columnGet(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/column/get',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/column/get",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台查询专栏列表
|
||||
export function columnList(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/column/list',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/column/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台创建视频专栏
|
||||
export function columnSave(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/column/save',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/column/save",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台推荐视频专栏
|
||||
export function columnRecommend(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/column/recommend',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/column/recommend",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 专栏状态修改
|
||||
export function columnUpdateStatus(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/column/updateStatus',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/column/updateStatus",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 风控列表
|
||||
export function riskList(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/risk-list',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/risk-list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 直播活动列表
|
||||
export function activityList(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/activity/list',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/activity/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 新增活动
|
||||
export function activitySave(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/activity/save',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/activity/save",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 活动状态修改
|
||||
export function activityUpdateStatus(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/activity/updateStatus',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/activity/updateStatus",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台部门(营业部、分公司)列表查询
|
||||
export function deptColumnList(params) {
|
||||
return request({
|
||||
url: '/admin/rbac/dept/common/list',
|
||||
method: 'get',
|
||||
url: "/admin/rbac/dept/common/list",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
// 视频直播数据概况(已对接订单)
|
||||
export function dataOverview(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/data-overview',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/data-overview",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 视频直播实时趋势
|
||||
export function nowTrend(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/nowTrend',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/nowTrend",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
// 客户管理列表
|
||||
export function customerList(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/customer/list',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/customer/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 客户详情
|
||||
export function customerDetails(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/customer/details',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/customer/details",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
// 直播观看记录
|
||||
export function videoReadRecord(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/customer/video-read-record',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/customer/video-read-record",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 公开、关闭消息
|
||||
export function messageOpen(data) {
|
||||
return request({
|
||||
url: '/admin/chat/message/open',
|
||||
method: 'post',
|
||||
url: "/admin/chat/message/open",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 关键行为提醒列表
|
||||
export function notifyList(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/behavior/notify/list',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/behavior/notify/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 创建问卷
|
||||
export function questionSave(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/question/save',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/question/save",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 问卷列表
|
||||
export function questionList(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/question/list',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/question/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 问卷状态修改
|
||||
export function questionUpdateStatus(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/question/updateStatus',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/question/updateStatus",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 问卷详情
|
||||
export function questionDetails(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/question/details',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/question/details",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 问卷导出
|
||||
export function questionExport(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/question/export',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/question/export",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
// 视频直播开启消息审核
|
||||
export function openMessAudit(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/openMessAudit',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/openMessAudit",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 生成短链
|
||||
export function urlResize(data) {
|
||||
return request({
|
||||
url: '/admin/url/resize',
|
||||
method: 'post',
|
||||
url: "/admin/url/resize",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 查询历史消息数
|
||||
export function messageCountApi(params) {
|
||||
return request({
|
||||
url: '/admin/chat/message/count',
|
||||
method: 'get',
|
||||
url: "/admin/chat/message/count",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
// 查询腾讯云在线人数
|
||||
export function txonline(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/txonline',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/txonline",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
// 点击转码直播视频
|
||||
export function liveProcess(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/process',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/process",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
// 转码视频下载地址
|
||||
export function videoDownload(params) {
|
||||
return request({
|
||||
url: '/admin/video/download',
|
||||
method: 'get',
|
||||
url: "/admin/video/download",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 查询视频转码进度
|
||||
export function videoDownProgress(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/download/progress',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/download/progress",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
// 获取投顾互动消息
|
||||
export function advisorMessageList(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/advisorMessage/list',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/advisorMessage/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 后台查询课程列表
|
||||
export function courseInfoList(data) {
|
||||
return request({
|
||||
url: '/admin/course/info/list',
|
||||
method: 'post',
|
||||
url: "/admin/course/info/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 后台查询合集列表
|
||||
export function serialInfoList(data) {
|
||||
return request({
|
||||
url: '/admin/serial/info/list',
|
||||
method: 'post',
|
||||
url: "/admin/serial/info/list",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 修改互动类型
|
||||
export function updateInteractType(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/updateInteractType',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/updateInteractType",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
// 设置首页参数
|
||||
export function setMainPageParam(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/setMainPageParam',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/setMainPageParam",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 修改二维码开关
|
||||
export function updateQWParam(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/updateQWParam',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/updateQWParam",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 购物车产品推送
|
||||
export function cartPush(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/cart/push',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/cart/push",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 终端类型统计
|
||||
export function queryUserClientType(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/clientType',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/clientType",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 查询上次转推信息
|
||||
export function getLastPush(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/getLastPush',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/getLastPush",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 删除转推信息
|
||||
export function deletePush(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/deletePush',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/deletePush",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 保存转推信息
|
||||
export function savePush(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/savePush',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/savePush",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 保存转推信息
|
||||
export function cancelPush(params) {
|
||||
return request({
|
||||
url: '/admin/video/live/cart/cancelPush',
|
||||
method: 'get',
|
||||
url: "/admin/video/live/cart/cancelPush",
|
||||
method: "get",
|
||||
params
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 查询混流详情
|
||||
export function getMixData(data) {
|
||||
return request({
|
||||
url: '/admin/video/mix/get',
|
||||
method: 'post',
|
||||
url: "/admin/video/mix/get",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 保存混流信息
|
||||
export function saveMixData(data) {
|
||||
return request({
|
||||
url: '/admin/video/mix/save',
|
||||
method: 'post',
|
||||
url: "/admin/video/mix/save",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 修改混流主画面显示
|
||||
export function updateMixShowMain(data) {
|
||||
return request({
|
||||
url: '/admin/video/mix/updateShowMain',
|
||||
method: 'post',
|
||||
url: "/admin/video/mix/updateShowMain",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 修改混流连麦状态
|
||||
export function updateMixStatus(data) {
|
||||
return request({
|
||||
url: '/admin/video/mix/updateStatus',
|
||||
method: 'post',
|
||||
url: "/admin/video/mix/updateStatus",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// 修改是否显示完整昵称
|
||||
export function showNickname(data) {
|
||||
return request({
|
||||
url: '/admin/video/live/showNickname',
|
||||
method: 'post',
|
||||
url: "/admin/video/live/showNickname",
|
||||
method: "post",
|
||||
data
|
||||
})
|
||||
});
|
||||
}
|
||||
BIN
src/assets/images/defaultAvatar/assistant.png
Normal file
BIN
src/assets/images/defaultAvatar/assistant.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.9 KiB |
BIN
src/assets/images/defaultAvatar/student.png
Normal file
BIN
src/assets/images/defaultAvatar/student.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.9 KiB |
BIN
src/assets/images/defaultAvatar/teacher.png
Normal file
BIN
src/assets/images/defaultAvatar/teacher.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.1 KiB |
@ -1,6 +1,14 @@
|
||||
import variables from '@/assets/styles/element-variables.scss'
|
||||
import defaultSettings from '@/settings'
|
||||
const { tagsView, fixedHeader, sidebarLogo, showFooter, footerTxt, caseNumber } = defaultSettings
|
||||
import Config from "@/config";
|
||||
import variables from "@/assets/styles/element-variables.scss";
|
||||
import defaultSettings from "@/settings";
|
||||
const {
|
||||
tagsView,
|
||||
fixedHeader,
|
||||
sidebarLogo,
|
||||
showFooter,
|
||||
footerTxt,
|
||||
caseNumber
|
||||
} = defaultSettings;
|
||||
|
||||
const state = {
|
||||
theme: variables.theme,
|
||||
@ -10,27 +18,27 @@ const state = {
|
||||
sidebarLogo: sidebarLogo,
|
||||
showFooter: showFooter,
|
||||
footerTxt: footerTxt,
|
||||
caseNumber: caseNumber
|
||||
}
|
||||
caseNumber: caseNumber,
|
||||
settingToC: Config.settingToC
|
||||
};
|
||||
|
||||
const mutations = {
|
||||
CHANGE_SETTING: (state, { key, value }) => {
|
||||
if (state.hasOwnProperty(key)) {
|
||||
state[key] = value
|
||||
state[key] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const actions = {
|
||||
changeSetting({ commit }, data) {
|
||||
commit('CHANGE_SETTING', data)
|
||||
commit("CHANGE_SETTING", data);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export default {
|
||||
namespaced: true,
|
||||
state,
|
||||
mutations,
|
||||
actions
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
@ -4,6 +4,7 @@ import { getToken, setToken, removeToken } from "@/utils/auth";
|
||||
// import checkPermission from '@/utils/permission'
|
||||
import { decrypt } from "@/utils/rsaEncrypt";
|
||||
import { Message } from "element-ui";
|
||||
import router from "@/router/routers";
|
||||
|
||||
export const setUserInfo = (res, commit) => {
|
||||
// 如果没有任何权限,则赋予一个默认的权限,避免请求死循环
|
||||
@ -62,6 +63,7 @@ const user = {
|
||||
actions: {
|
||||
// 登录
|
||||
Login({ commit }, userInfo) {
|
||||
debugger;
|
||||
// console.log('userInfo ==>', userInfo)
|
||||
const {
|
||||
loginName,
|
||||
@ -127,9 +129,10 @@ const user = {
|
||||
commit("SET_SYSTEM_SAFETY", {});
|
||||
localStorage.setItem("isFirst", 0);
|
||||
removeToken();
|
||||
location.href = `${window.config.webAuthUrl}?redirecturl=${
|
||||
location.origin
|
||||
}/syzbadmin`;
|
||||
// location.href = `${window.config.webAuthUrl}?redirecturl=${
|
||||
// location.origin
|
||||
// }/syzbadmin`;
|
||||
router.push("/login");
|
||||
resolve();
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
|
||||
@ -4,8 +4,8 @@ import Config from "@/settings";
|
||||
const TokenKey = Config.TokenKey;
|
||||
|
||||
export function getToken() {
|
||||
// return Cookies.get(TokenKey)
|
||||
return "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJiYWNrZW5kVXNlciI6IntcImRlcHRJZFwiOlwiMVwiLFwibG9naW5JZFwiOjEsXCJyb2xlc1wiOlsxXSxcInVzZXJJZFwiOjEsXCJ1c2VyTmFtZVwiOlwiYWRtaW5cIn0iLCJleHAiOjE3Mzg1MDYxNDd9.jRG7GUOTYi9xOy15hA5Wbm4eqe13Ao643vx20W1BJD8";
|
||||
return Cookies.get(TokenKey);
|
||||
// return "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJiYWNrZW5kVXNlciI6IntcImRlcHRJZFwiOlwiMVwiLFwibG9naW5JZFwiOjEsXCJyb2xlc1wiOlsxXSxcInVzZXJJZFwiOjEsXCJ1c2VyTmFtZVwiOlwiYWRtaW5cIn0iLCJleHAiOjE3Mzg2NjgzNDN9.1M4z2E4gSBmqAvkX6qJNHNTG5DXDJs0SC14qH-3jC9Y";
|
||||
}
|
||||
|
||||
export function setToken(token, rememberMe) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import axios from "axios";
|
||||
import router from "@/router/routers";
|
||||
import { Notification } from "element-ui";
|
||||
import { Notification, Message } from "element-ui";
|
||||
import store from "../store";
|
||||
import { getToken } from "@/utils/auth";
|
||||
import Config from "@/settings";
|
||||
|
||||
@ -1,14 +1,31 @@
|
||||
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'
|
||||
import JSEncrypt from "jsencrypt/bin/jsencrypt";
|
||||
|
||||
// 密钥对生成 http://web.chacuo.net/netrsakeypair
|
||||
|
||||
const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANL378k3RiZHWx5AfJqdH9xRNBmD9wGD\n' +
|
||||
'2iRe41HdTNF8RUhNnHit5NpMNtGL0NPTSSpPjjI1kJfVorRvaQerUgkCAwEAAQ=='
|
||||
const publicKey =
|
||||
"MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANL378k3RiZHWx5AfJqdH9xRNBmD9wGD\n" +
|
||||
"2iRe41HdTNF8RUhNnHit5NpMNtGL0NPTSSpPjjI1kJfVorRvaQerUgkCAwEAAQ==";
|
||||
|
||||
const privateKey =
|
||||
"MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8\n" +
|
||||
"mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9p\n" +
|
||||
"B6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue\n" +
|
||||
"/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZ\n" +
|
||||
"UBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6\n" +
|
||||
"vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha\n" +
|
||||
"4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3\n" +
|
||||
"tTbklZkD2A==";
|
||||
|
||||
// 加密
|
||||
export function encrypt(txt) {
|
||||
const encryptor = new JSEncrypt()
|
||||
encryptor.setPublicKey(publicKey) // 设置公钥
|
||||
return encryptor.encrypt(txt) // 对需要加密的数据进行加密
|
||||
const encryptor = new JSEncrypt();
|
||||
encryptor.setPublicKey(publicKey); // 设置公钥
|
||||
return encryptor.encrypt(txt); // 对需要加密的数据进行加密
|
||||
}
|
||||
|
||||
// 解密
|
||||
export function decrypt(txt) {
|
||||
const encryptor = new JSEncrypt();
|
||||
encryptor.setPrivateKey(privateKey);
|
||||
return encryptor.decrypt(txt);
|
||||
}
|
||||
|
||||
@ -1,18 +1,31 @@
|
||||
<template>
|
||||
<el-select v-model="mValue" :disabled="disabled" v-bind="$attrs" style="width: 100%;" v-on="$listeners" clearable>
|
||||
<el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id" />
|
||||
<el-select
|
||||
v-model="mValue"
|
||||
:disabled="disabled"
|
||||
v-bind="$attrs"
|
||||
style="width: 100%;"
|
||||
v-on="$listeners"
|
||||
clearable
|
||||
:placeholder="placeholder"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in options"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { tgList } from '@/api/adviser.js'
|
||||
import { tgList } from "@/api/adviser.js";
|
||||
|
||||
export default {
|
||||
name: 'AdviserSelect',
|
||||
name: "AdviserSelect",
|
||||
props: {
|
||||
value: {
|
||||
type: [String, Number],
|
||||
default: ''
|
||||
default: ""
|
||||
},
|
||||
deptId: {
|
||||
type: [String, Number],
|
||||
@ -20,7 +33,7 @@ export default {
|
||||
},
|
||||
name: {
|
||||
type: [String, Object],
|
||||
default: ''
|
||||
default: ""
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
@ -30,46 +43,60 @@ export default {
|
||||
// 是否过滤掉自己 1:过滤 2:不过滤
|
||||
type: Number,
|
||||
default: 2
|
||||
},
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: "请选择"
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
options: []
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
deptId() {
|
||||
this.getTgList();
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
mValue: {
|
||||
get() {
|
||||
return this.value
|
||||
return this.value;
|
||||
},
|
||||
set(val) {
|
||||
this.$emit('update:value', val)
|
||||
this.$emit("update:value", val);
|
||||
|
||||
const item = this.options.find(item => item.id === val)
|
||||
const item = this.options.find(item => item.id === val);
|
||||
if (item) {
|
||||
this.$emit('update:name', item.name)
|
||||
this.$emit("update:name", item.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
tgList({
|
||||
current: 1,
|
||||
size: 9999,
|
||||
status: 3,
|
||||
userType: 1,
|
||||
deptId: this.deptId,
|
||||
filterSelf: this.filterSelf
|
||||
}).then(res => {
|
||||
this.options = res.data.list
|
||||
if (!this.disabled && this.options.length === 1) {
|
||||
const item = this.options[0]
|
||||
this.mValue = item.id
|
||||
this.$emit('update:value', item.id)
|
||||
this.$emit('update:name', item.name)
|
||||
this.$emit('init', item)
|
||||
}
|
||||
})
|
||||
this.getTgList();
|
||||
},
|
||||
methods: {
|
||||
getTgList() {
|
||||
tgList({
|
||||
current: 1,
|
||||
size: 9999,
|
||||
status: 3,
|
||||
userType: 1,
|
||||
deptId: this.deptId,
|
||||
filterSelf: this.filterSelf
|
||||
}).then(res => {
|
||||
this.options = res.data.list;
|
||||
if (!this.disabled && this.options.length === 1) {
|
||||
const item = this.options[0];
|
||||
this.mValue = item.id;
|
||||
this.$emit("update:value", item.id);
|
||||
this.$emit("update:name", item.name);
|
||||
this.$emit("init", item);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@ -1,7 +1,12 @@
|
||||
<template>
|
||||
<div class="message-send">
|
||||
<div class="msg-content">
|
||||
<el-input type="textarea" rows="5" placeholder="文本输入区" />
|
||||
<el-input
|
||||
type="textarea"
|
||||
v-model="content"
|
||||
rows="5"
|
||||
placeholder="文本输入区"
|
||||
/>
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
:headers="headers"
|
||||
@ -15,27 +20,54 @@
|
||||
</el-upload>
|
||||
</div>
|
||||
<div class="msg-opt">
|
||||
<el-checkbox v-model="checked">设为精选</el-checkbox>
|
||||
<el-dropdown split-button type="primary" @click="handleClick">
|
||||
<el-checkbox v-model="isRecommend" :false-label="2" :true-label="1"
|
||||
>设为精选</el-checkbox
|
||||
>
|
||||
<el-dropdown
|
||||
split-button
|
||||
type="primary"
|
||||
@click="sendAdvisorMessage(1)"
|
||||
:disabled="!content"
|
||||
>
|
||||
发送并推送
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<!-- <el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item>仅发送</el-dropdown-item>
|
||||
<el-dropdown-item>定时发送</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown-menu> -->
|
||||
</el-dropdown>
|
||||
<el-button
|
||||
type="primary"
|
||||
:disabled="!imageUrl"
|
||||
@click="sendAdvisorMessage(2)"
|
||||
>发送图片</el-button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { sendAdvisorMessage } from "@/api/circle.js";
|
||||
import { getToken } from "@/utils/auth";
|
||||
export default {
|
||||
props: {
|
||||
interactiveType: {
|
||||
type: Number // 交互类型:1群聊;2私聊
|
||||
},
|
||||
groupId: {
|
||||
type: Number
|
||||
},
|
||||
replyId: {
|
||||
type: Number
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
headers: {
|
||||
Authorization: "Bearer " + getToken(),
|
||||
"X-File-Size": 0
|
||||
},
|
||||
imageUrl: ""
|
||||
imageUrl: "",
|
||||
content: "",
|
||||
isRecommend: 2
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
@ -54,6 +86,28 @@ export default {
|
||||
return flase;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
async sendAdvisorMessage(contentType) {
|
||||
let ret = await sendAdvisorMessage({
|
||||
content: contentType === 1 ? this.content : this.imageUrl,
|
||||
groupId: this.groupId,
|
||||
isRecommend: this.isRecommend,
|
||||
interactiveType: this.interactiveType,
|
||||
replyId: this.replyId,
|
||||
contentType
|
||||
});
|
||||
if (ret && ret.code === 0) {
|
||||
this.$message({
|
||||
message: "发送成功",
|
||||
type: "success"
|
||||
});
|
||||
if (contentType === 1) {
|
||||
this.content = "";
|
||||
} else {
|
||||
this.imageUrl = "";
|
||||
}
|
||||
this.$emit("sendCallBack", {});
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -75,22 +129,22 @@ export default {
|
||||
.avatar-uploader-icon {
|
||||
font-size: 28px;
|
||||
color: #8c939d;
|
||||
width: 116px;
|
||||
height: 116px;
|
||||
line-height: 116px;
|
||||
width: 108px;
|
||||
height: 108px;
|
||||
line-height: 108px;
|
||||
text-align: center;
|
||||
}
|
||||
.avatar {
|
||||
width: 116px;
|
||||
height: 116px;
|
||||
width: 108px;
|
||||
height: 108px;
|
||||
display: block;
|
||||
}
|
||||
.msg-content {
|
||||
display: flex;
|
||||
::v-deep .el-upload--picture-card {
|
||||
width: 116px;
|
||||
height: 116px;
|
||||
line-height: 116px;
|
||||
width: 108px;
|
||||
height: 108px;
|
||||
line-height: 108px;
|
||||
}
|
||||
}
|
||||
.msg-opt {
|
||||
@ -101,5 +155,8 @@ export default {
|
||||
::v-deep .el-checkbox {
|
||||
margin-right: 16px;
|
||||
}
|
||||
::v-deep .el-dropdown {
|
||||
margin-right: 16px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -1,61 +1,181 @@
|
||||
<template>
|
||||
<ul class="news-list">
|
||||
<li>
|
||||
<div class="new-header">
|
||||
<img />
|
||||
<div class="news-info">
|
||||
<div class="news-user">
|
||||
<h5>地理团队至安全</h5>
|
||||
<label>老师</label>
|
||||
<span><i>1</i>/4</span>
|
||||
<span>已读</span>
|
||||
</div>
|
||||
<p>2021-10-22</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="new-content">
|
||||
<p>同学们早上好</p>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="new-header">
|
||||
<img />
|
||||
<div class="news-info">
|
||||
<div class="news-info-top">
|
||||
<div class="news-user">
|
||||
<h5>地理团队至安全</h5>
|
||||
<label>老师</label>
|
||||
<span><i>1</i>/4</span>
|
||||
<span>已读</span>
|
||||
</div>
|
||||
<div class="news-opt">
|
||||
<el-link type="success">设为精选</el-link>
|
||||
<el-link type="success">引用</el-link>
|
||||
<el-link type="success">取消审核</el-link>
|
||||
<el-link type="success">通过审核</el-link>
|
||||
<div class="news-list-wrap">
|
||||
<ul
|
||||
class="news-list"
|
||||
infinite-scroll-disabled="disabled"
|
||||
v-infinite-scroll="getMessageList"
|
||||
infinite-scroll-immediate="false"
|
||||
>
|
||||
<li v-for="(item, index) in list" :key="item.id">
|
||||
<div class="new-header">
|
||||
<img
|
||||
v-if="item.userType === 1"
|
||||
:src="item.advisor ? item.advisor.avatar : defaultAvatar.teacher"
|
||||
/>
|
||||
<img v-else-if="item.userType === 3" :src="defaultAvatar.assistant" />
|
||||
<img v-else-if="item.userType === 2" :src="defaultAvatar.student" />
|
||||
<div class="news-info">
|
||||
<div class="news-info-top">
|
||||
<div class="news-user">
|
||||
<h5>{{ item.userName }}</h5>
|
||||
<label
|
||||
v-if="[1, 3].includes(item.userType)"
|
||||
:class="[item.userType === 1 ? 'blue' : 'orange']"
|
||||
>{{ item.userType === 1 ? "老师" : "助教" }}</label
|
||||
>
|
||||
<span><i>1</i>/4</span>
|
||||
<span>已读</span>
|
||||
</div>
|
||||
<div class="news-opt">
|
||||
<el-link type="success" @click="setMessageRecommend(item)">{{
|
||||
item.isRecommend === 1 ? "取消精选" : "设为精选"
|
||||
}}</el-link>
|
||||
<el-link
|
||||
type="success"
|
||||
v-if="item.userType === 2"
|
||||
@click="setReplyMsg(item)"
|
||||
>引用</el-link
|
||||
>
|
||||
<el-link
|
||||
type="success"
|
||||
v-if="item.userType === 2 && item.isOpen === 1"
|
||||
>取消审核</el-link
|
||||
>
|
||||
<el-link
|
||||
type="success"
|
||||
v-else-if="item.userType === 2 && item.isOpen === 2"
|
||||
>通过审核</el-link
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<p>{{ item.createTime }}</p>
|
||||
</div>
|
||||
<p>2021-10-22</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="new-content">
|
||||
<img
|
||||
src="http://gips0.baidu.com/it/u=1690853528,2506870245&fm=3028&app=3028&f=JPEG&fmt=auto?w=1024&h=1024"
|
||||
alt=""
|
||||
/>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="new-content">
|
||||
<p v-if="item.contentType === 1">{{ item.content }}</p>
|
||||
<img v-else :src="item.content" alt="" />
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="load-tip" v-if="loading">加载中...</p>
|
||||
<p class="load-tip" v-if="!hasNext">没有更多了...</p>
|
||||
<p class="load-tip" v-else-if="!loading && hasNext">下拉加载更多...</p>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getMessageList } from "@/api/circle.js";
|
||||
import { setMessageRecommend } from "@/api/circle";
|
||||
export default {
|
||||
props: {
|
||||
groupId: {
|
||||
type: Number
|
||||
},
|
||||
type: {
|
||||
// 查询类型:1全部;2投顾;3用户;4精选;5私聊
|
||||
type: Number
|
||||
},
|
||||
newMsg: {
|
||||
type: Object
|
||||
},
|
||||
userId: {
|
||||
// 私聊用户id
|
||||
type: Number
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
keyword: "",
|
||||
list: [],
|
||||
loading: true,
|
||||
hasNext: true,
|
||||
defaultAvatar: {
|
||||
teacher: require("@/assets/images/defaultAvatar/teacher.png"),
|
||||
student: require("@/assets/images/defaultAvatar/student.png"),
|
||||
assistant: require("@/assets/images/defaultAvatar/assistant.png")
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
disabled() {
|
||||
return this.loading || !this.hasNext;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
groupId() {
|
||||
this.searchMsg("");
|
||||
},
|
||||
newMsg(msg) {
|
||||
if (
|
||||
this.type === 1 ||
|
||||
(this.type === 2 && msg.userType === 1) ||
|
||||
(this.type === 4 && msg.isRecommend === 1)
|
||||
)
|
||||
this.list.unshift(msg);
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.searchMsg("");
|
||||
},
|
||||
methods: {
|
||||
async getMessageList() {
|
||||
debugger;
|
||||
this.loading = true;
|
||||
let ret = await getMessageList({
|
||||
groupId: this.groupId,
|
||||
keyword: this.keyword,
|
||||
lastId:
|
||||
this.list && this.list.length
|
||||
? this.list[this.list.length - 1].id
|
||||
: "",
|
||||
size: 10,
|
||||
type: this.type,
|
||||
userId: this.userId
|
||||
}).catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
if (ret && ret.code === 0) {
|
||||
this.list = this.list.concat(ret.data.list);
|
||||
this.hasNext = ret.data.hasNext;
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
searchMsg(keyword) {
|
||||
if (this.groupId) {
|
||||
this.keyword = keyword;
|
||||
this.list = [];
|
||||
this.getMessageList();
|
||||
}
|
||||
},
|
||||
setReplyMsg(item) {
|
||||
this.$emit("setReplyMsg", item);
|
||||
},
|
||||
async setMessageRecommend(item) {
|
||||
let ret = await setMessageRecommend({
|
||||
isRecommend: item.isRecommend === 1 ? 2 : 1,
|
||||
messageId: item.id
|
||||
});
|
||||
if (ret && ret.code === 0) {
|
||||
this.$message({
|
||||
message: "设置成功",
|
||||
type: "success"
|
||||
});
|
||||
item.isRecommend = item.isRecommend === 1 ? 2 : 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.news-list {
|
||||
.news-list-wrap {
|
||||
height: 600px;
|
||||
overflow-y: scroll;
|
||||
background: #fff;
|
||||
}
|
||||
.news-list {
|
||||
list-style: none;
|
||||
padding: 10px;
|
||||
margin: 0;
|
||||
flex: 1;
|
||||
min-height: 500px;
|
||||
overflow-y: scroll;
|
||||
li {
|
||||
margin: 0;
|
||||
border-bottom: 1px dashed #999;
|
||||
@ -116,4 +236,8 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.load-tip {
|
||||
text-align: center;
|
||||
line-height: 50px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -5,17 +5,26 @@
|
||||
<el-button size="mini" type="primary" @click="closePrivateChat"
|
||||
>返回群聊</el-button
|
||||
>
|
||||
<h5>凌琳(131212)</h5>
|
||||
<h5>{{ userInfo.userName }}</h5>
|
||||
</div>
|
||||
<div>私聊中</div>
|
||||
</div>
|
||||
<newsList />
|
||||
<newsList :type="5" :groupId="groupId" :userId="userInfo.userId" />
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import newsList from "./newsList.vue";
|
||||
export default {
|
||||
components: { newsList },
|
||||
props: {
|
||||
groupId: {
|
||||
type: Number
|
||||
},
|
||||
userInfo: {
|
||||
type: Object,
|
||||
default: () => {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
closePrivateChat() {
|
||||
this.$emit("closePrivateChat");
|
||||
@ -48,4 +57,7 @@ export default {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
::v-deep .news-list-wrap {
|
||||
height: 587px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -5,26 +5,72 @@
|
||||
<el-button type="primary" size="mini">搜索</el-button>
|
||||
</div>
|
||||
<ul>
|
||||
<li @click="toPrivateChat">
|
||||
<div>
|
||||
<el-badge is-dot class="item"><img src="" alt=""/></el-badge>
|
||||
<li
|
||||
@click="toPrivateChat(item)"
|
||||
v-for="(item, index) in list"
|
||||
:key="item.id"
|
||||
>
|
||||
<div class="left">
|
||||
<div class="portrait">
|
||||
<el-badge is-dot class="item"
|
||||
><img :src="defaultAvatar.student" alt=""
|
||||
/></el-badge>
|
||||
</div>
|
||||
<div class="user-info">
|
||||
<p>{{ item.userName }}</p>
|
||||
<p v-if="item.contentType === 1">{{ item.content }}</p>
|
||||
<p v-if="item.contentType === 2">[图片]</p>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<p>1234</p>
|
||||
<p>小可爱</p>
|
||||
</div>
|
||||
<div>
|
||||
<p>2012-12-22 13:12:23</p>
|
||||
<div class="time">
|
||||
{{ item.createTime }}
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getPrivateChatList } from "@/api/circle.js";
|
||||
export default {
|
||||
props: {
|
||||
groupId: {
|
||||
type: Number
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
defaultAvatar: {
|
||||
teacher: require("@/assets/images/defaultAvatar/teacher.png"),
|
||||
student: require("@/assets/images/defaultAvatar/student.png"),
|
||||
assistant: require("@/assets/images/defaultAvatar/assistant.png")
|
||||
},
|
||||
list: []
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
groupId() {
|
||||
this.getPrivateChatList();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
toPrivateChat() {
|
||||
this.$emit("toPrivateChat");
|
||||
this.$emit("toPrivateChat", item);
|
||||
},
|
||||
async getPrivateChatList() {
|
||||
this.loading = true;
|
||||
let ret = await getPrivateChatList({
|
||||
id: this.groupId
|
||||
}).catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
if (ret && ret.code === 0) {
|
||||
this.list = ret.data;
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
searchMsg() {
|
||||
this.list = [];
|
||||
this.getMessageList();
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -50,33 +96,37 @@ ul {
|
||||
display: flex;
|
||||
border-bottom: 1px dashed #999;
|
||||
cursor: pointer;
|
||||
& > div {
|
||||
padding: 8px 0;
|
||||
.left {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
padding: 6px 0;
|
||||
}
|
||||
& > div:nth-child(1) {
|
||||
width: 36px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
& > div:nth-child(2) {
|
||||
width: 220px;
|
||||
}
|
||||
& > div:nth-child(5) {
|
||||
flex: 1;
|
||||
text-align: right;
|
||||
}
|
||||
p {
|
||||
.portrait {
|
||||
::v-deep .el-badge,
|
||||
img {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
margin-right: 6px;
|
||||
}
|
||||
.user-info {
|
||||
p {
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
line-height: 14px;
|
||||
width: 200px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
p:nth-child(1) {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
}
|
||||
.time {
|
||||
width: 150px;
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
line-height: 16px;
|
||||
}
|
||||
::v-deep .el-badge,
|
||||
img {
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -57,6 +57,54 @@
|
||||
</dl>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {
|
||||
queryCommentBlackList,
|
||||
addCommentBlack,
|
||||
removeCommentBlack
|
||||
} from "@/api/videoLive";
|
||||
export default {
|
||||
methods: {
|
||||
setCommentBlack() {
|
||||
this.$confirm(`您确定${item.isForbid === 2 ? "禁言" : "取消禁言"}?`, {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
.then(() => {
|
||||
if (item.isForbid === 2) {
|
||||
addCommentBlack(data).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
message: "禁言成功",
|
||||
showClose: false,
|
||||
type: "success"
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
removeCommentBlack({ phone: item.userId }).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
message: "取消禁言成功",
|
||||
showClose: false,
|
||||
type: "success"
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
async getCommentBlackList() {
|
||||
let ret = await CommentBlackList({
|
||||
size: 10,
|
||||
current: 1
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.search {
|
||||
display: flex;
|
||||
|
||||
@ -1,62 +1,132 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="search">
|
||||
<el-input size="mini" placeholder="" />
|
||||
<el-button type="primary" size="mini">搜索</el-button>
|
||||
<el-input size="mini" v-model="keyword" placeholder="" />
|
||||
<el-button type="primary" size="mini" @click="searchMsg">搜索</el-button>
|
||||
</div>
|
||||
<ul class="news-list">
|
||||
<li>
|
||||
<div class="new-header">
|
||||
<img />
|
||||
<div class="news-info">
|
||||
<div class="news-user">
|
||||
<h5>地理团队至安全</h5>
|
||||
<label>老师</label>
|
||||
<span><i>1</i>/4</span>
|
||||
<span>已读</span>
|
||||
</div>
|
||||
<p>2021-10-22</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="new-content">
|
||||
<p>同学们早上好</p>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="new-header">
|
||||
<img />
|
||||
<div class="news-info">
|
||||
<div class="news-info-top">
|
||||
<div class="news-user">
|
||||
<h5>地理团队至安全</h5>
|
||||
<label>老师</label>
|
||||
<span><i>1</i>/4</span>
|
||||
<span>已读</span>
|
||||
</div>
|
||||
<div class="news-opt">
|
||||
<div class="flex">
|
||||
<el-link type="success">引用</el-link>
|
||||
<el-link type="success">取消审核</el-link>
|
||||
<div class="news-list-wrap">
|
||||
<ul
|
||||
class="news-list"
|
||||
infinite-scroll-disabled="disabled"
|
||||
v-infinite-scroll="getMessageList"
|
||||
infinite-scroll-immediate="false"
|
||||
>
|
||||
<li v-for="(item, index) in list" :key="index">
|
||||
<div class="new-header">
|
||||
<img :src="defaultAvatar.student" />
|
||||
<div class="news-info">
|
||||
<div class="news-info-top">
|
||||
<div class="news-user">
|
||||
<h5>{{ item.userName }}</h5>
|
||||
<label
|
||||
v-if="[1, 3].includes(item.userType)"
|
||||
:class="[item.userType === 1 ? 'blue' : 'orange']"
|
||||
>{{ item.userType === 1 ? "老师" : "助教" }}</label
|
||||
>
|
||||
<span><i>1</i>/4</span>
|
||||
<span>已读</span>
|
||||
</div>
|
||||
<div class="flex">
|
||||
<el-link type="success">私聊</el-link>
|
||||
<el-link type="success">取消禁言</el-link>
|
||||
<div class="news-opt">
|
||||
<div class="flex">
|
||||
<el-link type="success" @click="setReplyMsg(item)"
|
||||
>引用</el-link
|
||||
>
|
||||
<el-link type="success">取消审核</el-link>
|
||||
</div>
|
||||
<div class="flex">
|
||||
<el-link type="success" @click="toPrivateChat(item)"
|
||||
>私聊</el-link
|
||||
>
|
||||
<el-link type="success">取消禁言</el-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p>{{ item.createTime }}</p>
|
||||
</div>
|
||||
<p>2021-10-22</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="new-content">
|
||||
<img
|
||||
src="http://gips0.baidu.com/it/u=1690853528,2506870245&fm=3028&app=3028&f=JPEG&fmt=auto?w=1024&h=1024"
|
||||
alt=""
|
||||
/>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="new-content">
|
||||
<p v-if="item.contentType === 1">{{ item.content }}</p>
|
||||
<img v-else :src="item.content" alt="" />
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<p class="load-tip" v-if="loading">加载中...</p>
|
||||
<p class="load-tip" v-if="!hasNext">没有更多了...</p>
|
||||
<p class="load-tip" v-else-if="!loading && hasNext">下拉加载更多...</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { getMessageList } from "@/api/circle.js";
|
||||
export default {
|
||||
props: {
|
||||
groupId: {
|
||||
type: Number
|
||||
},
|
||||
newMsg: {
|
||||
type: Object
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
keyword: "",
|
||||
list: [],
|
||||
loading: true,
|
||||
hasNext: true,
|
||||
defaultAvatar: {
|
||||
teacher: require("@/assets/images/defaultAvatar/teacher.png"),
|
||||
student: require("@/assets/images/defaultAvatar/student.png"),
|
||||
assistant: require("@/assets/images/defaultAvatar/assistant.png")
|
||||
}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
disabled() {
|
||||
return this.loading || !this.hasNext;
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
groupId() {
|
||||
this.getMessageList();
|
||||
},
|
||||
newMsg(msg) {
|
||||
if (msg.userType === 2) this.list.unshift(msg);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getMessageList() {
|
||||
this.loading = true;
|
||||
let ret = await getMessageList({
|
||||
groupId: this.groupId,
|
||||
keyword: this.keyword,
|
||||
lastId:
|
||||
this.list && this.list.length
|
||||
? this.list[this.list.length - 1].id
|
||||
: "",
|
||||
size: 10,
|
||||
type: 3 // 查询类型:1全部;2投顾;3用户;4精选
|
||||
}).catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
if (ret && ret.code === 0) {
|
||||
this.list = this.list.concat(ret.data.list);
|
||||
this.hasNext = ret.data.hasNext;
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
searchMsg() {
|
||||
this.list = [];
|
||||
this.getMessageList();
|
||||
},
|
||||
setReplyMsg(item) {
|
||||
this.$emit("setReplyMsg", item);
|
||||
},
|
||||
toPrivateChat(item) {
|
||||
this.$emit("toPrivateChat", item);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.search {
|
||||
display: flex;
|
||||
@ -65,13 +135,16 @@
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
.news-list-wrap {
|
||||
height: 562px;
|
||||
overflow-y: scroll;
|
||||
background: #fff;
|
||||
}
|
||||
.news-list {
|
||||
background: #fff;
|
||||
list-style: none;
|
||||
padding: 10px;
|
||||
margin: 0;
|
||||
min-height: 500px;
|
||||
overflow-y: scroll;
|
||||
li {
|
||||
margin: 0;
|
||||
border-bottom: 1px dashed #999;
|
||||
@ -140,4 +213,8 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.load-tip {
|
||||
text-align: center;
|
||||
line-height: 50px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -2,68 +2,105 @@
|
||||
<div class="app-container">
|
||||
<div class="circle-change">
|
||||
<h3>圈子消息</h3>
|
||||
<el-form :inline="true" size="mini" :model="formInline" class="my-form">
|
||||
<el-form-item label="">
|
||||
<el-select v-model="formInline.region" placeholder="团队">
|
||||
<el-option label="区域一" value="shanghai"></el-option>
|
||||
<el-option label="区域二" value="beijing"></el-option>
|
||||
</el-select>
|
||||
<el-form :inline="true" size="mini" class="my-form">
|
||||
<el-form-item>
|
||||
<el-input :value="detail.advisor.deptName" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="">
|
||||
<el-select v-model="formInline.region" placeholder="主播">
|
||||
<el-option label="区域一" value="shanghai"></el-option>
|
||||
<el-option label="区域二" value="beijing"></el-option>
|
||||
</el-select>
|
||||
<el-form-item>
|
||||
<el-input :value="detail.advisor.showName" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="">
|
||||
<el-select v-model="formInline.region" placeholder="圈子">
|
||||
<el-option label="区域一" value="shanghai"></el-option>
|
||||
<el-option label="区域二" value="beijing"></el-option>
|
||||
<el-form-item>
|
||||
<el-select
|
||||
v-model="changeGroupId"
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
placeholder="请输入关键词"
|
||||
:remote-method="getCircleList"
|
||||
>
|
||||
<el-option
|
||||
:key="detail.id"
|
||||
:label="detail.name"
|
||||
:value="detail.id"
|
||||
disabled
|
||||
>
|
||||
</el-option>
|
||||
<el-option
|
||||
v-for="item in circleOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="onSubmit">切换</el-button>
|
||||
<el-button type="primary" :disabled="changeGroupId === detail.id"
|
||||
>切换</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="circle-main">
|
||||
<div class="circle-main-header">
|
||||
<div class="circle-info">
|
||||
<img src="" alt="" />
|
||||
<img :src="detail.coverImage" alt="" />
|
||||
<div>
|
||||
<h4>独立团专栏</h4>
|
||||
<p>这里是介绍这是介绍是的是的</p>
|
||||
<h4>{{ detail.name }}</h4>
|
||||
<p>{{ detail.remark }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="circle-set">
|
||||
<div class="set-item-wrap">
|
||||
<div class="set-item mb10">
|
||||
<label>开放观众发言:</label>
|
||||
<el-switch v-model="value1"> </el-switch>
|
||||
<el-switch
|
||||
v-model="detail.interactiveStatus"
|
||||
:active-value="1"
|
||||
:inactive-value="2"
|
||||
@change="changeSwitch(1)"
|
||||
>
|
||||
</el-switch>
|
||||
</div>
|
||||
<div class="set-item">
|
||||
<label>先审后发:</label>
|
||||
<el-switch v-model="value1"> </el-switch>
|
||||
<el-switch
|
||||
v-model="detail.firstAudit"
|
||||
:active-value="1"
|
||||
:inactive-value="2"
|
||||
@change="changeSwitch(2)"
|
||||
>
|
||||
</el-switch>
|
||||
</div>
|
||||
</div>
|
||||
<div class="set-item-wrap">
|
||||
<div class="set-item mb10">
|
||||
<label>隐藏用户昵称:</label>
|
||||
<el-switch v-model="value1"> </el-switch>
|
||||
<el-switch
|
||||
v-model="detail.showNickName"
|
||||
:active-value="2"
|
||||
:inactive-value="1"
|
||||
@change="changeSwitch(3)"
|
||||
>
|
||||
</el-switch>
|
||||
</div>
|
||||
<div class="set-item">
|
||||
<label>隐藏圈子人数:</label>
|
||||
<el-switch v-model="value1"> </el-switch>
|
||||
<el-switch
|
||||
v-model="detail.showMemberCount"
|
||||
:active-value="2"
|
||||
:inactive-value="1"
|
||||
@change="changeSwitch(4)"
|
||||
>
|
||||
</el-switch>
|
||||
</div>
|
||||
</div>
|
||||
<el-badge is-dot class="item">
|
||||
<img
|
||||
class="icon"
|
||||
@click="setNotice"
|
||||
src="@/assets/images/trumpet.png"
|
||||
alt=""
|
||||
/>
|
||||
</el-badge>
|
||||
<img
|
||||
class="icon"
|
||||
@click="setNotice"
|
||||
src="@/assets/images/trumpet.png"
|
||||
alt=""
|
||||
/>
|
||||
<img
|
||||
class="icon"
|
||||
src="@/assets/images/data.png"
|
||||
@ -76,27 +113,40 @@
|
||||
<div class="circle-interact" v-if="chatType === 1">
|
||||
<div class="circle-interact-header">
|
||||
<ul class="tabs">
|
||||
<li class="active">老师</li>
|
||||
<li>全部</li>
|
||||
<li>精选</li>
|
||||
<li
|
||||
:class="[msgType === item.id ? 'active' : '']"
|
||||
v-for="(item, index) in msgTabs"
|
||||
:key="item.id"
|
||||
@click="msgType = item.id"
|
||||
>
|
||||
{{ item.name }}
|
||||
</li>
|
||||
</ul>
|
||||
<el-form
|
||||
:inline="true"
|
||||
size="mini"
|
||||
:model="formInline"
|
||||
class="my-form"
|
||||
>
|
||||
<el-form :inline="true" size="mini" class="my-form">
|
||||
<el-form-item label="">
|
||||
<el-input placeholder="请输入内容搜索" />
|
||||
<el-input v-model="msgKeyWord" placeholder="请输入内容搜索" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="onSubmit">搜索</el-button>
|
||||
<el-button type="primary" @click="onSearch">搜索</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<newsList />
|
||||
<newsList
|
||||
v-for="(item, index) in msgTabs"
|
||||
:ref="`newsListRef${item.id}`"
|
||||
:groupId="detail.id"
|
||||
:type="item.id"
|
||||
v-show="msgType === item.id"
|
||||
@setReplyMsg="setReplyMsg"
|
||||
:newMsg="newMsg"
|
||||
/>
|
||||
</div>
|
||||
<privateChat v-else @closePrivateChat="() => (chatType = 1)" />
|
||||
<privateChat
|
||||
:userInfo="privateUserInfo"
|
||||
:groupId="detail.id"
|
||||
v-else
|
||||
@closePrivateChat="() => (chatType = 1)"
|
||||
/>
|
||||
<div class="circle-user">
|
||||
<ul class="tabs">
|
||||
<li
|
||||
@ -117,35 +167,69 @@
|
||||
>
|
||||
私聊列表
|
||||
</li>
|
||||
<li :class="[userTabIndex === 3 ? 'active' : '']">禁言列表</li>
|
||||
<li
|
||||
:class="[userTabIndex === 3 ? 'active' : '']"
|
||||
@click="userTabIndex = 3"
|
||||
>
|
||||
禁言列表
|
||||
</li>
|
||||
</ul>
|
||||
<userLnteractList v-if="userTabIndex === 0" />
|
||||
<userList v-if="userTabIndex === 1" />
|
||||
<privateList
|
||||
v-if="userTabIndex === 2"
|
||||
<userLnteractList
|
||||
v-show="userTabIndex === 0"
|
||||
:groupId="detail.id"
|
||||
:newMsg="newMsg"
|
||||
@setReplyMsg="setReplyMsg"
|
||||
@toPrivateChat="toPrivateChat"
|
||||
/>
|
||||
<userList v-if="userTabIndex === 1" type="1" />
|
||||
<privateList
|
||||
v-show="userTabIndex === 2"
|
||||
:groupId="detail.id"
|
||||
@toPrivateChat="toPrivateChat"
|
||||
/>
|
||||
<userList
|
||||
v-if="userTabIndex === 4"
|
||||
@toPrivateChat="toPrivateChat"
|
||||
type="2"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="quote">
|
||||
<div class="quote" v-if="replyMsg.id">
|
||||
<div class="quote-content">
|
||||
<label>用户:</label>
|
||||
<p>萨达鲁大师克拉岛奥德赛拉</p>
|
||||
<p>[图片]</p>
|
||||
<label>用户:{{ replyMsg.userName }}</label>
|
||||
<p v-if="replyMsg.contentType === 1">{{ replyMsg.content }}</p>
|
||||
<p v-else-if="replyMsg.contentType === 2">[图片]</p>
|
||||
</div>
|
||||
<i class="el-icon-close"></i>
|
||||
</div>
|
||||
<messageSend />
|
||||
<messageSend
|
||||
v-if="detail.status === 3"
|
||||
:replyId="replyMsg.id"
|
||||
:interactiveType="chatType"
|
||||
:groupId="detail.id"
|
||||
@sendCallBack="setReplyMsg"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {
|
||||
getCircleList,
|
||||
getCircleDetail,
|
||||
setFirstAudit,
|
||||
setInteractiveStatus,
|
||||
setShowMemberCount,
|
||||
setShowNickName,
|
||||
setNotice
|
||||
} from "@/api/circle.js";
|
||||
import newsList from "./components/newsList.vue";
|
||||
import userLnteractList from "./components/userLnteractList.vue";
|
||||
import userList from "./components/userList.vue";
|
||||
import privateList from "./components/privateList";
|
||||
import messageSend from "./components/messageSend.vue";
|
||||
import privateChat from "./components/privateChat.vue";
|
||||
import { mapGetters } from "vuex";
|
||||
import webSocketConnect from "./mixins/webSocketConnect";
|
||||
export default {
|
||||
components: {
|
||||
newsList,
|
||||
@ -157,12 +241,47 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
formInline: {},
|
||||
changeGroupId: "",
|
||||
msgTabs: [
|
||||
{ name: "老师", id: 2 },
|
||||
{ name: "全部", id: 1 },
|
||||
{ name: "精选", id: 4 }
|
||||
],
|
||||
msgType: 1,
|
||||
userTabIndex: 0,
|
||||
chatType: 1
|
||||
chatType: 1, // 1 群聊 2 私聊
|
||||
detail: {
|
||||
advisor: {}
|
||||
},
|
||||
circleOptions: [],
|
||||
msgKeyWord: "",
|
||||
replyMsg: {}, // 引用的消息
|
||||
newMsg: {}
|
||||
};
|
||||
},
|
||||
mixins: [webSocketConnect],
|
||||
computed: {
|
||||
...mapGetters(["user"])
|
||||
},
|
||||
async created() {
|
||||
await this.getCircleDetail();
|
||||
this.getCircleList();
|
||||
},
|
||||
methods: {
|
||||
async getCircleList(name) {
|
||||
const ret = await getCircleList({
|
||||
advisorId: this.detail.advisor.id,
|
||||
current: 1,
|
||||
name,
|
||||
size: 10,
|
||||
userType: this.user.user.userType
|
||||
});
|
||||
if (ret && ret.code === 0) {
|
||||
this.circleOptions = ret.data.list.filter(
|
||||
item => item.id !== this.detail.id
|
||||
);
|
||||
}
|
||||
},
|
||||
setNotice() {
|
||||
this.$prompt("", "圈子公告", {
|
||||
confirmButtonText: "确定",
|
||||
@ -170,11 +289,17 @@ export default {
|
||||
inputType: "textarea",
|
||||
inputPlaceholder: "请输入公告内容,500字以内"
|
||||
})
|
||||
.then(({ value }) => {
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "你的邮箱是: " + value
|
||||
.then(async ({ value }) => {
|
||||
let ret = await setNotice({
|
||||
id: this.detail.id,
|
||||
notice: value
|
||||
});
|
||||
if (ret && ret.code === 0) {
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "公告设置成功"
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
this.$message({
|
||||
@ -183,8 +308,66 @@ export default {
|
||||
});
|
||||
});
|
||||
},
|
||||
toPrivateChat() {
|
||||
toPrivateChat(userInfo) {
|
||||
this.privateUserInfo = userInfo;
|
||||
this.chatType = 2;
|
||||
},
|
||||
async getCircleDetail() {
|
||||
console.log(this.$route);
|
||||
let ret = await getCircleDetail({ id: this.$route.params.id });
|
||||
if (ret && ret.code === 0) {
|
||||
this.detail = ret.data;
|
||||
this.changeGroupId = this.detail.id;
|
||||
this.connect(this.detail.id);
|
||||
}
|
||||
},
|
||||
async changeSwitch(type) {
|
||||
const option = {
|
||||
1: {
|
||||
// 开放观众发言
|
||||
key: "interactiveStatus",
|
||||
fn: setInteractiveStatus
|
||||
},
|
||||
2: {
|
||||
// 先审后发
|
||||
key: "firstAudit",
|
||||
fn: setFirstAudit
|
||||
},
|
||||
3: {
|
||||
// 隐藏用户昵称
|
||||
key: "showNickName",
|
||||
fn: setShowNickName
|
||||
},
|
||||
4: {
|
||||
// 隐藏用户昵称
|
||||
key: "showMemberCount",
|
||||
fn: setShowMemberCount
|
||||
}
|
||||
};
|
||||
let ret = await option[type].fn({
|
||||
groupId: this.detail.id,
|
||||
status: this.detail[option[type].key]
|
||||
});
|
||||
if (!ret && ret.code !== 0) {
|
||||
}
|
||||
},
|
||||
onSearch() {
|
||||
this.$refs[`newsListRef${this.msgType}`][0].searchMsg(this.msgKeyWord);
|
||||
},
|
||||
handleGroupChatTopic(msg) {
|
||||
console.log("handleGroupChatTopic", msg);
|
||||
debugger;
|
||||
const body = JSON.parse(msg.body);
|
||||
if ([1].includes(body.type)) {
|
||||
// 1 文字消息和图片消息
|
||||
this.newMsg = JSON.parse(msg.body).data;
|
||||
}
|
||||
},
|
||||
handlePrivateChatTopic(msg) {
|
||||
console.log("handlePrivateChatTopic", msg);
|
||||
},
|
||||
setReplyMsg(msg) {
|
||||
this.replyMsg = msg;
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -314,6 +497,9 @@ export default {
|
||||
padding: 10px;
|
||||
.quote-content {
|
||||
display: flex;
|
||||
p {
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
i {
|
||||
cursor: pointer;
|
||||
|
||||
80
src/views/circle/detail/mixins/webSocketConnect.js
Normal file
80
src/views/circle/detail/mixins/webSocketConnect.js
Normal file
@ -0,0 +1,80 @@
|
||||
import { Client } from "@stomp/stompjs";
|
||||
import { rLiveWsConfig } from "@/api/videoLive";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
stompClient: null
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
async getConnectConfig(id) {
|
||||
const res = await rLiveWsConfig({ id, type: 9 });
|
||||
if (!this.stompClient && res && res.code === 0 && res.data) {
|
||||
this.connect({ ...res.data, id });
|
||||
}
|
||||
},
|
||||
// websock 链接
|
||||
connect(id) {
|
||||
const brokerUrl =
|
||||
process.env.NODE_ENV === "development"
|
||||
? "ws://8.138.144.54:8080/tgim/chat"
|
||||
: `${location.protocol === "http:" ? "ws://" : "wss://"}${
|
||||
location.host
|
||||
}/tgim/chat`;
|
||||
// 后端群组消息
|
||||
const groupChatTopic = `/admin/group/topic/${id}`;
|
||||
// 私聊消息
|
||||
const privateChatTopic = `/admin/private/topic/${id}`;
|
||||
|
||||
const sessionId = Math.random()
|
||||
.toString(36)
|
||||
.substring(2, 8);
|
||||
if (window.location.protocol === "http:") {
|
||||
console.log("当前URL是HTTP");
|
||||
} else if (window.location.protocol === "https:") {
|
||||
console.log("当前URL是HTTPS");
|
||||
brokerUrl = brokerUrl.replace("ws://", "wss://");
|
||||
}
|
||||
this.stompClient = new Client({
|
||||
brokerURL: brokerUrl,
|
||||
connectHeaders: {
|
||||
sessionId,
|
||||
productType: 41, // 视频ProductType=3
|
||||
Authorization: "Bearer " + this.$store.state.user.token,
|
||||
productId: id
|
||||
},
|
||||
debug: function(str) {
|
||||
console.log("debug: " + str);
|
||||
},
|
||||
reconnectDelay: 5000,
|
||||
heartbeatIncoming: 10000,
|
||||
heartbeatOutgoing: 10000,
|
||||
discardWebsocketOnCommFailure: true
|
||||
});
|
||||
this.stompClient.onConnect = async frame => {
|
||||
console.log("链接成功");
|
||||
console.log("Connected: ", frame);
|
||||
// 后端群组消息
|
||||
this.stompClient &&
|
||||
this.stompClient.subscribe(groupChatTopic, msg => {
|
||||
this.handleGroupChatTopic(msg);
|
||||
});
|
||||
// 后端私聊消息
|
||||
this.stompClient &&
|
||||
this.stompClient.subscribe(privateChatTopic, msg => {
|
||||
this.handlePrivateChatTopic(msg);
|
||||
});
|
||||
};
|
||||
this.stompClient.onStompError = error => {
|
||||
console.log("onStompError", error);
|
||||
};
|
||||
this.stompClient.onDisconnect = error => {
|
||||
console.log("onDisconnect", error);
|
||||
};
|
||||
this.stompClient.onWebSocketClose = error => {
|
||||
console.log("onWebSocketClose", error);
|
||||
};
|
||||
this.stompClient.activate();
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -2,14 +2,14 @@
|
||||
<div class="app-container">
|
||||
<div class="head-container">
|
||||
<el-input
|
||||
v-model="columnName"
|
||||
v-model="params.name"
|
||||
clearable
|
||||
placeholder="请输入课程名称"
|
||||
placeholder="请输入圈子名称"
|
||||
style="width: 200px;margin-right: 10px"
|
||||
/>
|
||||
<el-select
|
||||
v-if="!yinxiao"
|
||||
v-model="columnStatus"
|
||||
v-model="params.status"
|
||||
placeholder="请选择状态"
|
||||
style="width: 200px;margin-right: 10px"
|
||||
clearable
|
||||
@ -34,7 +34,7 @@
|
||||
style="width: 100%;"
|
||||
>
|
||||
<el-table-column label="序号" align="center" type="index" fixed />
|
||||
<el-table-column prop="name" label="课程名称" width="180">
|
||||
<el-table-column prop="name" label="交易圈名称" width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="text"
|
||||
@ -58,8 +58,6 @@
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="contentCount" label="内容数" width="80">
|
||||
</el-table-column>
|
||||
<el-table-column prop="createUserName" label="创建人" width="180">
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" label="创建时间" width="180">
|
||||
@ -130,7 +128,7 @@
|
||||
type="text"
|
||||
size="mini"
|
||||
@click="copyUrl($event, scope.row)"
|
||||
>复制课程链接</el-button
|
||||
>复制圈子链接</el-button
|
||||
>
|
||||
<el-button
|
||||
v-if="yunyin && scope.row.status === 5"
|
||||
@ -165,42 +163,51 @@
|
||||
append-to-body
|
||||
width="700px"
|
||||
>
|
||||
<el-form label-width="80px">
|
||||
<el-form-item label="圈子名称">
|
||||
<el-form label-width="80px" ref="ruleForm" :model="form" :rules="rules">
|
||||
<el-form-item label="圈子名称" prop="name">
|
||||
<el-input
|
||||
v-model="form.name"
|
||||
clearable
|
||||
placeholder="请输入课程名称"
|
||||
placeholder="请输入圈子名称"
|
||||
:maxlength="20"
|
||||
show-word-limit
|
||||
:disabled="isAdjust || isReadOnly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="圈子投顾">
|
||||
<el-form-item label="圈子投顾" prop="advisorId">
|
||||
<div class="flex">
|
||||
<el-select v-model="value" placeholder="请选择机构">
|
||||
<!-- <el-select
|
||||
v-model="form.deptId"
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
placeholder="请选择机构"
|
||||
:remote-method="getDeptList"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in options"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-for="item in deptList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-select v-model="value" placeholder="请选择投顾">
|
||||
<el-option
|
||||
v-for="item in options"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-select> -->
|
||||
<adviser-select
|
||||
v-model="form.advisorId"
|
||||
placeholder="请选择投顾"
|
||||
:dept-id="user.user.deptId"
|
||||
:disabled="tougu"
|
||||
@init="
|
||||
item => {
|
||||
form.advisorId = item.id;
|
||||
}
|
||||
"
|
||||
></adviser-select>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="适用人群">
|
||||
<el-form-item label="适用人群" prop="applicableUser">
|
||||
<el-input
|
||||
v-model="form.remark"
|
||||
v-model="form.applicableUser"
|
||||
clearable
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 10 }"
|
||||
@ -210,7 +217,7 @@
|
||||
placeholder="请输入适用人群"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="圈子服务简介">
|
||||
<el-form-item label="圈子服务简介" prop="remark">
|
||||
<el-input
|
||||
v-model="form.remark"
|
||||
clearable
|
||||
@ -230,7 +237,7 @@
|
||||
@image-added="handleImageAdded"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="封面图">
|
||||
<el-form-item label="封面图" prop="coverImage">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
:show-file-list="false"
|
||||
@ -247,20 +254,14 @@
|
||||
:src="form.coverImage"
|
||||
class="avatar"
|
||||
/>
|
||||
<el-button v-else type="primary">上传图片</el-button>
|
||||
<el-button size="mini" v-else type="primary">上传图片</el-button>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="讲师设置">
|
||||
<adviser-select
|
||||
v-model="form.advisorId"
|
||||
:disabled="isAdjust || isReadOnly || !zhujiao || form.id"
|
||||
:dept-id="user.user.deptId"
|
||||
@init="
|
||||
item => {
|
||||
form.advisorId = item.id;
|
||||
}
|
||||
"
|
||||
></adviser-select>
|
||||
<el-form-item label="私聊状态">
|
||||
<el-radio-group v-model="form.privateChatStatus">
|
||||
<el-radio :label="1">开启</el-radio>
|
||||
<el-radio :label="2">关闭</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="圈子类型">
|
||||
<el-radio-group
|
||||
@ -271,7 +272,11 @@
|
||||
<el-radio label="0">免费</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="authority === '1'" label="权限号">
|
||||
<el-form-item
|
||||
v-if="authority === '1'"
|
||||
label="权限号"
|
||||
prop="authorityId"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.authorityId"
|
||||
:disabled="isAdjust || isReadOnly"
|
||||
@ -284,32 +289,41 @@
|
||||
<el-option label="支付页链接" value="2"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="authority === '1'" label="链接地址">
|
||||
<template v-if="linkType == '1'">
|
||||
<page-select
|
||||
v-model="form.pageId"
|
||||
:disabled="isAdjust || isReadOnly"
|
||||
/>
|
||||
</template>
|
||||
<template v-if="linkType == '2'">
|
||||
<el-input
|
||||
v-model="form.paymentUrl"
|
||||
:disabled="isAdjust || isReadOnly"
|
||||
/>
|
||||
</template>
|
||||
<el-form-item
|
||||
v-if="authority === '1' && linkType == '1'"
|
||||
label="链接地址"
|
||||
prop="pageId"
|
||||
>
|
||||
<page-select
|
||||
v-model="form.pageId"
|
||||
:disabled="isAdjust || isReadOnly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="authority === '1' && linkType == '2'"
|
||||
label="链接地址"
|
||||
prop="paymentUrl"
|
||||
>
|
||||
<el-input
|
||||
v-model="form.paymentUrl"
|
||||
:disabled="isAdjust || isReadOnly"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-row v-if="authority === '1'">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="价格">
|
||||
<el-input
|
||||
<el-form-item label="价格" prop="originalPrice">
|
||||
<el-input-number
|
||||
:min="0"
|
||||
v-model="form.originalPrice"
|
||||
:disabled="isAdjust || isReadOnly"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="活动价">
|
||||
<el-input
|
||||
<el-form-item label="活动价" prop="activityPrice">
|
||||
<el-input-number
|
||||
min="0"
|
||||
:max="form.originalPrice"
|
||||
v-model="form.activityPrice"
|
||||
:disabled="isAdjust || isReadOnly"
|
||||
/>
|
||||
@ -362,9 +376,9 @@
|
||||
<!-- 分页器 -->
|
||||
<el-pagination
|
||||
style="margin-top: 50px;"
|
||||
:current-page="page"
|
||||
:current-page="params.current"
|
||||
:page-sizes="[10, 20, 30, 40]"
|
||||
:page-size="100"
|
||||
:page-size="params.size"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="total"
|
||||
@size-change="sizeChange"
|
||||
@ -375,14 +389,14 @@
|
||||
|
||||
<script>
|
||||
import { mapGetters } from "vuex";
|
||||
// import { queryTagList, tagSave, tagUpdate, updateStatus } from "@/api/tag.js";
|
||||
import { getToken } from "@/utils/auth";
|
||||
import {
|
||||
getCourseList,
|
||||
saveCourse,
|
||||
updateCourse,
|
||||
updateCourseStatus
|
||||
} from "@/api/course.js";
|
||||
getCircleList,
|
||||
saveCircle,
|
||||
updateCircle,
|
||||
updateCircleStatus
|
||||
} from "@/api/circle.js";
|
||||
import { getDepts } from "@/api/channel";
|
||||
import { urlResize } from "@/api/videoLive.js";
|
||||
import { handleClipboard } from "@/views/liveBroadcast/manage/config.js";
|
||||
import AdviserSelect from "@/views/adviser/components/select.vue";
|
||||
@ -425,18 +439,15 @@ export default {
|
||||
loading: false,
|
||||
delLoading: false,
|
||||
editLoading: false,
|
||||
newTag: "",
|
||||
total: 0,
|
||||
page: 1,
|
||||
params: {
|
||||
current: 1,
|
||||
size: 10,
|
||||
name: "",
|
||||
status: ""
|
||||
},
|
||||
size: 10,
|
||||
data: [],
|
||||
advisorList: [],
|
||||
tag: {
|
||||
id: "",
|
||||
name: ""
|
||||
},
|
||||
columnName: "",
|
||||
columnStatus: undefined,
|
||||
RISK_LEVEL,
|
||||
riskLevelList: {
|
||||
0: "低风险",
|
||||
@ -454,17 +465,47 @@ export default {
|
||||
5: "已下架",
|
||||
6: "已删除"
|
||||
},
|
||||
deptList: [], // 机构列表
|
||||
form: {
|
||||
advisorId: "",
|
||||
name: "",
|
||||
type: 1,
|
||||
remark: "",
|
||||
coverImage: "",
|
||||
pageId: "",
|
||||
paymentUrl: "",
|
||||
authorityId: "",
|
||||
riskLevel: "",
|
||||
weight: null
|
||||
privateChatStatus: 1
|
||||
},
|
||||
rules: {
|
||||
name: [{ required: true, message: "请输入圈子名称", trigger: "blur" }],
|
||||
advisorId: [
|
||||
{ required: true, message: "请选择圈子投顾", trigger: "blur" }
|
||||
],
|
||||
applicableUser: [
|
||||
{ required: true, message: "请输入适用人群", trigger: "blur" }
|
||||
],
|
||||
remark: [
|
||||
{ required: true, message: "请输入圈子服务简介", trigger: "blur" }
|
||||
],
|
||||
coverImage: [
|
||||
{ required: true, message: "请上传封面图", trigger: "blur" }
|
||||
],
|
||||
authorityId: [
|
||||
{ required: true, message: "请输入权限号", trigger: "blur" }
|
||||
],
|
||||
originalPrice: [
|
||||
{ required: true, message: "请输入价格", trigger: "blur" }
|
||||
],
|
||||
activityPrice: [
|
||||
{ required: true, message: "请输入活动价", trigger: "blur" }
|
||||
],
|
||||
pageId: [
|
||||
{ required: true, message: "请选择链接地址", trigger: "blur" }
|
||||
],
|
||||
paymentUrl: [
|
||||
{ required: true, message: "请输入链接地址", trigger: "blur" }
|
||||
]
|
||||
},
|
||||
authority: "1",
|
||||
linkType: "1",
|
||||
@ -488,23 +529,32 @@ export default {
|
||||
return role ? `${role}列表` : "";
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"form.deptId"() {
|
||||
this.form.advisorId = "";
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.getLists(1);
|
||||
this.getDeptList();
|
||||
},
|
||||
|
||||
methods: {
|
||||
async getDeptList(keyword) {
|
||||
let ret = await getDepts({ keyword });
|
||||
if (ret && ret.code === 0) {
|
||||
this.deptList = ret.data;
|
||||
}
|
||||
},
|
||||
async getLists(val) {
|
||||
if (val) {
|
||||
this.page = 1;
|
||||
this.params.current = 1;
|
||||
}
|
||||
this.loading = true;
|
||||
const { data } = await getCourseList({
|
||||
current: this.page,
|
||||
name: this.columnName,
|
||||
size: this.size,
|
||||
status: this.status || this.columnStatus,
|
||||
userType: this.userType || this.user.user.userType
|
||||
});
|
||||
const { data } = await getCircleList(
|
||||
Object.assign({}, this.params, {
|
||||
userType: this.userType || this.user.user.userType
|
||||
})
|
||||
);
|
||||
this.data = data.list;
|
||||
this.total = data.total;
|
||||
this.loading = false;
|
||||
@ -554,7 +604,8 @@ export default {
|
||||
pageId: "",
|
||||
paymentUrl: "",
|
||||
authorityId: "",
|
||||
riskLevel: ""
|
||||
riskLevel: "",
|
||||
privateChatStatus: "1"
|
||||
};
|
||||
if (!this.form.advisorId && this.user.advisorInfo) {
|
||||
this.form.advisorId = this.user.advisorInfo.id;
|
||||
@ -577,7 +628,7 @@ export default {
|
||||
});
|
||||
return false;
|
||||
}
|
||||
const data = await updateCourseStatus({
|
||||
const data = await updateCircleStatus({
|
||||
...this.adjustForm,
|
||||
id: this.form.id
|
||||
});
|
||||
@ -591,79 +642,50 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.form.name) {
|
||||
this.$message({
|
||||
message: "课程名称不能为空",
|
||||
type: "error"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if (!this.form.remark) {
|
||||
this.$message({
|
||||
message: "课程简介不能为空",
|
||||
type: "error"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if (!this.form.coverImage) {
|
||||
this.$message({
|
||||
message: "封面图不能为空",
|
||||
type: "error"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
this.$refs.ruleForm.validate(async valid => {
|
||||
if (valid) {
|
||||
if (this.authority === "0") {
|
||||
this.form.authorityId = "";
|
||||
this.form.pageId = "";
|
||||
this.form.paymentUrl = "";
|
||||
this.form.originalPrice = "";
|
||||
this.form.discountPrice = "";
|
||||
} else if (!this.form.authorityId) {
|
||||
this.$message({
|
||||
message: "请输入权限号",
|
||||
type: "error"
|
||||
});
|
||||
return false;
|
||||
} else if (this.linkType === "2") {
|
||||
if (!this.form.paymentUrl) {
|
||||
this.$message({
|
||||
message: "请输入支付链接",
|
||||
type: "error"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
this.form.pageId = "";
|
||||
delete this.form.page;
|
||||
} else {
|
||||
this.form.paymentUrl = "";
|
||||
}
|
||||
|
||||
if (!this.form.advisorId) {
|
||||
if (this.user.advisorInfo) {
|
||||
this.form.advisorId = this.user.advisorInfo.id;
|
||||
} else {
|
||||
this.$message({
|
||||
message: "请选择讲师",
|
||||
type: "error"
|
||||
});
|
||||
return false;
|
||||
const data = this.form.id
|
||||
? await updateCircle(this.form)
|
||||
: await saveCircle(this.form);
|
||||
if (data.code === 0) {
|
||||
if (this.form.id) {
|
||||
this.$message.success("修改成功");
|
||||
} else {
|
||||
this.$message.success("新增成功");
|
||||
}
|
||||
this.cancel();
|
||||
this.getLists();
|
||||
} else {
|
||||
this.$message.error(data.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (this.authority === "0") {
|
||||
this.form.authorityId = "";
|
||||
this.form.pageId = "";
|
||||
this.form.paymentUrl = "";
|
||||
this.form.originalPrice = "";
|
||||
this.form.discountPrice = "";
|
||||
} else if (!this.form.authorityId) {
|
||||
this.$message({
|
||||
message: "请输入权限号",
|
||||
type: "error"
|
||||
});
|
||||
return false;
|
||||
} else if (this.linkType === "2") {
|
||||
if (!this.form.paymentUrl) {
|
||||
this.$message({
|
||||
message: "请输入支付链接",
|
||||
type: "error"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
this.form.pageId = "";
|
||||
delete this.form.page;
|
||||
} else {
|
||||
this.form.paymentUrl = "";
|
||||
}
|
||||
|
||||
const data = this.form.id
|
||||
? await updateCourse(this.form)
|
||||
: await saveCourse(this.form);
|
||||
if (data.code === 0) {
|
||||
if (this.form.id) {
|
||||
this.$message.success("修改成功");
|
||||
} else {
|
||||
this.$message.success("新增成功");
|
||||
}
|
||||
this.cancel();
|
||||
this.getLists();
|
||||
} else {
|
||||
this.$message.error(data.message);
|
||||
}
|
||||
});
|
||||
},
|
||||
async detail(row) {
|
||||
this.$router.push("/circle/detail/" + row.id);
|
||||
@ -690,12 +712,12 @@ export default {
|
||||
event,
|
||||
reason: ""
|
||||
};
|
||||
const data = await updateCourseStatus(params);
|
||||
const data = await updateCircleStatus(params);
|
||||
// console.log(data)
|
||||
if (data.code === 0) {
|
||||
this.$message.success("操作成功");
|
||||
if (this.data.length === 1 && this.page !== 1) {
|
||||
this.page -= 1;
|
||||
if (this.data.length === 1 && this.params.current !== 1) {
|
||||
this.params.current -= 1;
|
||||
}
|
||||
this.getLists();
|
||||
} else {
|
||||
@ -706,21 +728,25 @@ export default {
|
||||
},
|
||||
async copyUrl(event, item) {
|
||||
const currentTarget = event.currentTarget;
|
||||
let url = item.authorityId
|
||||
? `/circle?id=${item.id}&saleUserId=${this.user.user.id}`
|
||||
: `/circle/interact?id=${item.id}&saleUserId=${this.user.user.id}`;
|
||||
const ret = await urlResize({
|
||||
url: `/courseDetail?id=${item.id}&saleUserId=${this.user.user.id}`
|
||||
url
|
||||
});
|
||||
|
||||
if (ret.code === 0) {
|
||||
handleClipboard(ret.data, event, currentTarget);
|
||||
}
|
||||
},
|
||||
// 分页器
|
||||
sizeChange(e) {
|
||||
this.page = 1;
|
||||
this.params.current = 1;
|
||||
this.size = e;
|
||||
this.getLists();
|
||||
},
|
||||
pageChange(e) {
|
||||
this.page = e;
|
||||
this.params.current = e;
|
||||
this.getLists();
|
||||
},
|
||||
handlePictureCardPreview() {},
|
||||
@ -814,7 +840,7 @@ export default {
|
||||
height: 178px;
|
||||
display: block;
|
||||
}
|
||||
.flx {
|
||||
.flex {
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -230,33 +230,10 @@
|
||||
</div>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="!settingToC" label="标签">
|
||||
<el-select
|
||||
v-model="ruleForm.tagIdList"
|
||||
filterable
|
||||
remote
|
||||
multiple
|
||||
reserve-keyword
|
||||
placeholder="请选择标签"
|
||||
:remote-method="remoteMethodTag"
|
||||
:loading="loading"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in optionsTag"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="观看限制" prop="limitType">
|
||||
<el-radio-group v-model="ruleForm.limitType">
|
||||
<el-radio :label="1">无限制</el-radio>
|
||||
<el-radio v-if="!settingToC" :label="2">手机号登录</el-radio>
|
||||
<el-radio :label="3">邀请码观看</el-radio>
|
||||
<el-radio v-if="!settingToC" :label="4">微信授权</el-radio>
|
||||
<el-radio v-if="!settingToC" :label="5">产品专属直播</el-radio>
|
||||
<el-radio :label="6">权限判定</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
@ -324,10 +301,7 @@
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<!-- c端添加H5按钮 -->
|
||||
<el-form-item
|
||||
v-if="ruleForm.isCart === 1 && settingToC"
|
||||
prop="cartList"
|
||||
>
|
||||
<el-form-item v-if="ruleForm.isCart === 1" prop="cartList">
|
||||
<el-button type="primary" @click="dialogFormVisible = true"
|
||||
>添加自定义产品</el-button
|
||||
>
|
||||
@ -436,65 +410,6 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
<!-- 讲师设置 -->
|
||||
<!-- <el-form-item label="讲师设置" prop="teacherId">
|
||||
<adviser-select v-model="ruleForm.teacherId" :dept-id="user.user.deptId"
|
||||
:disabled="!($route.query.isZj === '1' || ($route.query.type === '2' || $route.query.type === '3'))"
|
||||
@init="(item) => { ruleForm.teacherId = item.id }"
|
||||
@change="() => { ruleForm.serialIds = []; ruleForm.courseIds = []; }"></adviser-select>
|
||||
</el-form-item> -->
|
||||
<el-form-item v-if="ruleForm.isCart === 1 && !settingToC">
|
||||
<el-select
|
||||
v-model="ruleForm.cartProductType"
|
||||
placeholder="请选择配置的产品类型"
|
||||
style="margin-bottom:20px;"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in productTypeList"
|
||||
:key="index"
|
||||
:label="item.productName"
|
||||
:value="item.productType"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-select
|
||||
v-model="ruleForm.productListId"
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
placeholder="请选择产品"
|
||||
:remote-method="remoteMethodProduct"
|
||||
:loading="loadingProduct"
|
||||
prop="columnId"
|
||||
@change="changeItem"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in productList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
:disabled="
|
||||
(ruleForm.cartList || [])
|
||||
.map(item => item.productId)
|
||||
.includes(item.id)
|
||||
"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
<div>
|
||||
<el-tag
|
||||
v-for="(tag, index) in ruleForm.cartList"
|
||||
:key="tag.name"
|
||||
:disabled="$route.query.type === '2' || $route.query.type === '3'"
|
||||
style="margin-right:10px"
|
||||
:closable="!['2', '3'].includes($route.query.type)"
|
||||
type="success"
|
||||
@close="deleteCart(index, tag.id)"
|
||||
>
|
||||
{{ tag.name }}
|
||||
</el-tag>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="风险等级">
|
||||
<el-select
|
||||
@ -992,12 +907,12 @@ export default {
|
||||
this.ruleForm.productType = null;
|
||||
}
|
||||
|
||||
if (this.settingToC && this.ruleForm.isCart === 1) {
|
||||
if (this.ruleForm.isCart === 1) {
|
||||
this.ruleForm.cartList.forEach((item, index) => {
|
||||
item.productId = index + 1;
|
||||
});
|
||||
}
|
||||
if (this.settingToC && this.ruleForm.limitType === 1) {
|
||||
if (this.ruleForm.limitType === 1) {
|
||||
this.ruleForm.limitType === 2;
|
||||
}
|
||||
// 合集id
|
||||
@ -1235,7 +1150,7 @@ export default {
|
||||
// this.optionsTag = [];
|
||||
res.data.tagIdList = [];
|
||||
}
|
||||
if (this.settingToC && res.data.limitType === 2) {
|
||||
if (res.data.limitType === 2) {
|
||||
res.data.limitType === 1;
|
||||
}
|
||||
res.data.isShow = res.data.isDisplay;
|
||||
@ -1556,9 +1471,6 @@ export default {
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
settingToC: state => state.settings.settingToC
|
||||
}),
|
||||
...mapGetters(["user"]),
|
||||
isCopy() {
|
||||
return this.$route.query.isCopy;
|
||||
|
||||
@ -1325,7 +1325,6 @@
|
||||
<script>
|
||||
import {
|
||||
infoGet,
|
||||
rLiveWsConfig,
|
||||
uVideoControl,
|
||||
livePlayInfo,
|
||||
getPlayerSign,
|
||||
@ -1569,8 +1568,8 @@ export default {
|
||||
// "直播消息",
|
||||
],
|
||||
isShow: false,
|
||||
defaultImg: require("@/assets/logo/people.png"),
|
||||
userDefault: require("@/assets/logo/userDefault.png"),
|
||||
defaultImg: require("@/assets/images/defaultAvatar/assistant.png"),
|
||||
userDefault: require("@/assets/images/defaultAvatar/student.png"),
|
||||
messageCount: 0,
|
||||
dialogVisible: false,
|
||||
iframeUrl: "", // 你想在iframe中打开的网址
|
||||
@ -1997,9 +1996,20 @@ export default {
|
||||
return false;
|
||||
},
|
||||
async getConnectConfig(id) {
|
||||
const res = await rLiveWsConfig({ id, type: 3 });
|
||||
if (!this.stompClient) {
|
||||
this.connect({ ...res.data, id });
|
||||
this.connect({
|
||||
brokerUrl:
|
||||
process.env.NODE_ENV === "development"
|
||||
? "ws://8.138.144.54:8080/tgim/chat"
|
||||
: `${location.protocol === "http:" ? "ws://" : "wss://"}${
|
||||
location.host
|
||||
}/tgim/chat`,
|
||||
adminUserTopic: `/admin/user/topic/${id}`,
|
||||
chatSubscribeDest: `/sub/video/${id}`,
|
||||
notifySubscribeDest: `/sub/notify/${id}`,
|
||||
videoOnlineNotifyTopic: `/admin/audience/${id}`,
|
||||
id
|
||||
});
|
||||
}
|
||||
},
|
||||
playLiveStream() {
|
||||
@ -2034,7 +2044,7 @@ export default {
|
||||
sessionId,
|
||||
productType: 3, // 视频ProductType=3
|
||||
Authorization: "Bearer " + this.$store.state.user.token,
|
||||
GroupId: id
|
||||
productId: id
|
||||
},
|
||||
debug: function(str) {
|
||||
console.log("debug: " + str);
|
||||
|
||||
@ -1,85 +1,128 @@
|
||||
<template>
|
||||
<div class="login" :style="'background-image:url('+ Background +');'">
|
||||
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-position="left" label-width="0px" class="login-form">
|
||||
<div class="login" :style="'background-image:url(' + Background + ');'">
|
||||
<el-form
|
||||
ref="loginForm"
|
||||
:model="loginForm"
|
||||
:rules="loginRules"
|
||||
label-position="left"
|
||||
label-width="0px"
|
||||
class="login-form"
|
||||
>
|
||||
<h3 class="title">
|
||||
ELADMIN 后台管理系统
|
||||
后台管理系统
|
||||
</h3>
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
|
||||
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
|
||||
<el-input
|
||||
v-model="loginForm.username"
|
||||
type="text"
|
||||
auto-complete="off"
|
||||
placeholder="账号"
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="user"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="password">
|
||||
<el-input v-model="loginForm.password" type="password" auto-complete="off" placeholder="密码" @keyup.enter.native="handleLogin">
|
||||
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
|
||||
<el-input
|
||||
v-model="loginForm.password"
|
||||
type="password"
|
||||
auto-complete="off"
|
||||
placeholder="密码"
|
||||
@keyup.enter.native="handleLogin"
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="password"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code">
|
||||
<el-input v-model="loginForm.code" auto-complete="off" placeholder="验证码" style="width: 63%" @keyup.enter.native="handleLogin">
|
||||
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
|
||||
<el-form-item prop="captcha">
|
||||
<el-input
|
||||
v-model="loginForm.captcha"
|
||||
auto-complete="off"
|
||||
placeholder="验证码"
|
||||
style="width: 63%"
|
||||
@keyup.enter.native="handleLogin"
|
||||
>
|
||||
<svg-icon
|
||||
slot="prefix"
|
||||
icon-class="validCode"
|
||||
class="el-input__icon input-icon"
|
||||
/>
|
||||
</el-input>
|
||||
<div class="login-code">
|
||||
<img :src="codeUrl" @click="getCode">
|
||||
<img :src="codeUrl" @click="getCode" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-checkbox v-model="loginForm.rememberMe" style="margin:0 0 25px 0;">
|
||||
记住我
|
||||
</el-checkbox>
|
||||
<el-form-item style="width:100%;">
|
||||
<el-button :loading="loading" size="medium" type="primary" style="width:100%;" @click.native.prevent="handleLogin">
|
||||
<el-button
|
||||
:loading="loading"
|
||||
size="medium"
|
||||
type="primary"
|
||||
style="width:100%;"
|
||||
@click.native.prevent="handleLogin"
|
||||
>
|
||||
<span v-if="!loading">登 录</span>
|
||||
<span v-else>登 录 中...</span>
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- 底部 -->
|
||||
<div v-if="$store.state.settings.showFooter" id="el-login-footer">
|
||||
<span v-html="$store.state.settings.footerTxt" />
|
||||
<span v-if="$store.state.settings.caseNumber"> ⋅ </span>
|
||||
<a href="https://beian.miit.gov.cn/#/Integrated/index" target="_blank">{{ $store.state.settings.caseNumber }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { encrypt } from '@/utils/rsaEncrypt'
|
||||
import Config from '@/settings'
|
||||
import { getCodeImg } from '@/api/login'
|
||||
import Cookies from 'js-cookie'
|
||||
import qs from 'qs'
|
||||
import Background from '@/assets/images/background.jpeg'
|
||||
import { encrypt } from "@/utils/rsaEncrypt";
|
||||
import Config from "@/settings";
|
||||
import { getCodeImg } from "@/api/login";
|
||||
import Cookies from "js-cookie";
|
||||
import qs from "qs";
|
||||
import Background from "@/assets/images/background.jpeg";
|
||||
export default {
|
||||
name: 'Login',
|
||||
name: "Login",
|
||||
data() {
|
||||
return {
|
||||
Background: Background,
|
||||
codeUrl: '',
|
||||
cookiePass: '',
|
||||
codeUrl: "",
|
||||
cookiePass: "",
|
||||
loginForm: {
|
||||
username: 'admin',
|
||||
password: '123456',
|
||||
username: "admin",
|
||||
password: "123456",
|
||||
rememberMe: false,
|
||||
code: '',
|
||||
uuid: ''
|
||||
captcha: "",
|
||||
uuid: ""
|
||||
},
|
||||
loginRules: {
|
||||
username: [{ required: true, trigger: 'blur', message: '用户名不能为空' }],
|
||||
password: [{ required: true, trigger: 'blur', message: '密码不能为空' }],
|
||||
code: [{ required: true, trigger: 'change', message: '验证码不能为空' }]
|
||||
username: [
|
||||
{ required: true, trigger: "blur", message: "用户名不能为空" }
|
||||
],
|
||||
password: [
|
||||
{ required: true, trigger: "blur", message: "密码不能为空" }
|
||||
],
|
||||
captcha: [
|
||||
{ required: true, trigger: "change", message: "验证码不能为空" }
|
||||
]
|
||||
},
|
||||
loading: false,
|
||||
redirect: undefined
|
||||
}
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
$route: {
|
||||
handler: function(route) {
|
||||
const data = route.query
|
||||
const data = route.query;
|
||||
if (data && data.redirect) {
|
||||
this.redirect = data.redirect
|
||||
delete data.redirect
|
||||
if (JSON.stringify(data) !== '{}') {
|
||||
this.redirect = this.redirect + '&' + qs.stringify(data, { indices: false })
|
||||
this.redirect = data.redirect;
|
||||
delete data.redirect;
|
||||
if (JSON.stringify(data) !== "{}") {
|
||||
this.redirect =
|
||||
this.redirect + "&" + qs.stringify(data, { indices: false });
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -88,127 +131,138 @@ export default {
|
||||
},
|
||||
created() {
|
||||
// 获取验证码
|
||||
this.getCode()
|
||||
this.getCode();
|
||||
// 获取用户名密码等Cookie
|
||||
this.getCookie()
|
||||
this.getCookie();
|
||||
// token 过期提示
|
||||
this.point()
|
||||
this.point();
|
||||
},
|
||||
methods: {
|
||||
getCode() {
|
||||
getCodeImg().then(res => {
|
||||
this.codeUrl = res.img
|
||||
this.loginForm.uuid = res.uuid
|
||||
})
|
||||
this.codeUrl = res.data.img;
|
||||
this.loginForm.uuid = res.data.uuid;
|
||||
});
|
||||
},
|
||||
getCookie() {
|
||||
const username = Cookies.get('username')
|
||||
let password = Cookies.get('password')
|
||||
const rememberMe = Cookies.get('rememberMe')
|
||||
const username = Cookies.get("username");
|
||||
let password = Cookies.get("password");
|
||||
const rememberMe = Cookies.get("rememberMe");
|
||||
// 保存cookie里面的加密后的密码
|
||||
this.cookiePass = password === undefined ? '' : password
|
||||
password = password === undefined ? this.loginForm.password : password
|
||||
this.cookiePass = password === undefined ? "" : password;
|
||||
password = password === undefined ? this.loginForm.password : password;
|
||||
this.loginForm = {
|
||||
username: username === undefined ? this.loginForm.username : username,
|
||||
password: password,
|
||||
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
|
||||
code: ''
|
||||
}
|
||||
captcha: ""
|
||||
};
|
||||
},
|
||||
handleLogin() {
|
||||
this.$refs.loginForm.validate(valid => {
|
||||
const user = {
|
||||
username: this.loginForm.username,
|
||||
loginName: this.loginForm.username,
|
||||
password: this.loginForm.password,
|
||||
rememberMe: this.loginForm.rememberMe,
|
||||
code: this.loginForm.code,
|
||||
captcha: this.loginForm.captcha,
|
||||
uuid: this.loginForm.uuid
|
||||
}
|
||||
};
|
||||
if (user.password !== this.cookiePass) {
|
||||
user.password = encrypt(user.password)
|
||||
user.password = encrypt(user.password);
|
||||
}
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
this.loading = true;
|
||||
if (user.rememberMe) {
|
||||
Cookies.set('username', user.username, { expires: Config.passCookieExpires })
|
||||
Cookies.set('password', user.password, { expires: Config.passCookieExpires })
|
||||
Cookies.set('rememberMe', user.rememberMe, { expires: Config.passCookieExpires })
|
||||
Cookies.set("username", user.username, {
|
||||
expires: Config.passCookieExpires
|
||||
});
|
||||
Cookies.set("password", user.password, {
|
||||
expires: Config.passCookieExpires
|
||||
});
|
||||
Cookies.set("rememberMe", user.rememberMe, {
|
||||
expires: Config.passCookieExpires
|
||||
});
|
||||
} else {
|
||||
Cookies.remove('username')
|
||||
Cookies.remove('password')
|
||||
Cookies.remove('rememberMe')
|
||||
Cookies.remove("username");
|
||||
Cookies.remove("password");
|
||||
Cookies.remove("rememberMe");
|
||||
}
|
||||
this.$store.dispatch('Login', user).then(() => {
|
||||
this.loading = false
|
||||
this.$router.push({ path: this.redirect || '/' })
|
||||
}).catch(() => {
|
||||
this.loading = false
|
||||
this.getCode()
|
||||
})
|
||||
this.$store
|
||||
.dispatch("Login", user)
|
||||
.then(() => {
|
||||
this.loading = false;
|
||||
this.$router.push({ path: this.redirect || "/" });
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
this.getCode();
|
||||
});
|
||||
} else {
|
||||
console.log('error submit!!')
|
||||
return false
|
||||
console.log("error submit!!");
|
||||
return false;
|
||||
}
|
||||
})
|
||||
});
|
||||
},
|
||||
point() {
|
||||
const point = Cookies.get('point') !== undefined
|
||||
const point = Cookies.get("point") !== undefined;
|
||||
if (point) {
|
||||
this.$notify({
|
||||
title: '提示',
|
||||
message: '当前登录状态已过期,请重新登录!',
|
||||
type: 'warning',
|
||||
title: "提示",
|
||||
message: "当前登录状态已过期,请重新登录!",
|
||||
type: "warning",
|
||||
duration: 5000
|
||||
})
|
||||
Cookies.remove('point')
|
||||
});
|
||||
Cookies.remove("point");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style rel="stylesheet/scss" lang="scss">
|
||||
.login {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
background-size: cover;
|
||||
}
|
||||
.title {
|
||||
margin: 0 auto 30px auto;
|
||||
text-align: center;
|
||||
color: #707070;
|
||||
}
|
||||
.login {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
background-size: cover;
|
||||
}
|
||||
.title {
|
||||
margin: 0 auto 30px auto;
|
||||
text-align: center;
|
||||
color: #707070;
|
||||
}
|
||||
|
||||
.login-form {
|
||||
border-radius: 6px;
|
||||
background: #ffffff;
|
||||
width: 385px;
|
||||
padding: 25px 25px 5px 25px;
|
||||
.el-input {
|
||||
height: 38px;
|
||||
input {
|
||||
height: 38px;
|
||||
}
|
||||
}
|
||||
.input-icon{
|
||||
height: 39px;width: 14px;margin-left: 2px;
|
||||
}
|
||||
}
|
||||
.login-tip {
|
||||
font-size: 13px;
|
||||
text-align: center;
|
||||
color: #bfbfbf;
|
||||
}
|
||||
.login-code {
|
||||
width: 33%;
|
||||
display: inline-block;
|
||||
.login-form {
|
||||
border-radius: 6px;
|
||||
background: #ffffff;
|
||||
width: 385px;
|
||||
padding: 25px 25px 5px 25px;
|
||||
.el-input {
|
||||
height: 38px;
|
||||
float: right;
|
||||
img{
|
||||
cursor: pointer;
|
||||
vertical-align:middle
|
||||
input {
|
||||
height: 38px;
|
||||
}
|
||||
}
|
||||
.input-icon {
|
||||
height: 39px;
|
||||
width: 14px;
|
||||
margin-left: 2px;
|
||||
}
|
||||
}
|
||||
.login-tip {
|
||||
font-size: 13px;
|
||||
text-align: center;
|
||||
color: #bfbfbf;
|
||||
}
|
||||
.login-code {
|
||||
width: 33%;
|
||||
display: inline-block;
|
||||
height: 38px;
|
||||
float: right;
|
||||
img {
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user