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