kefu/static/templates/default/setting_bottom.html

2262 lines
97 KiB
HTML
Raw Normal View History

2024-12-10 02:50:12 +00:00
{{define "setting_bottom"}}
<script src="/static/js/functions.js?v=1.0.1"></script>
<script src="/static/js/chat-lang.js?v=1.0.0"></script>
<script>
var ACTION = "{{.action}}";
let url = getQuery("url")
if (url != "") ACTION = url;
var LANG = checkLang();
var KefuCleanBtn = '{{.KefuCleanBtn}}';
</script>
<script>
var app = new Vue({
el: '#app',
delimiters: ["<{", "}>"],
data: {
host: getBaseUrl(),
flyLang: KEFU_LANG[LANG],
iframeUrl: "/setting_welcome",
tabIndex: "1-5",
fullscreenLoading: false,
loading: null,
adminAvator: "",
adminRole: "",
openIndex: [1, 3],
tabActive: "basicTab",
rules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
],
name: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
],
avator: [
{ required: true, message: '请选择头像', trigger: 'blur' },
],
role_id: [
{ required: true, message: '请选择角色', trigger: 'blur' },
],
nickname: [
{ required: true, message: '请输入昵称', trigger: 'blur' },
],
},
kefuList: {
page: 1,
count: 0,
pagesize: 0,
list: [],
},
kefuDialog: false,
kefuSetting: [],
kefuForm: {
id: "",
name: "",
password: "",
avator: "",
nickname: "",
role_name: "",
role_id: "",
},
roleList: [],
configList: [],
entConfigList: [
{ conf_name: "百度文本审核(API_KEY)仅开启AI回复时有效", conf_key: "BaiduCheckApiKey", conf_value: "" },
{ conf_name: "百度文本审核(SECRET_KEY)仅开启AI回复时有效", conf_key: "BaiduCheckSecretKey", conf_value: "" },
{ conf_name: "百度文本审核时屏蔽流式输出仅开启AI回复时有效", conf_key: "BaiduCheckDisableStream", conf_value: "" },
{ conf_name: "百度翻译AppID", conf_key: "BaiduFanyiAppId", conf_value: "" },
{ conf_name: "百度翻译密钥", conf_key: "BaiduFanyiAppSec", conf_value: "" },
{ conf_name: "百度翻译(是否自动翻译)", conf_key: "BaiduFanyiAuto", conf_value: "" },
{ conf_name: "选择翻译源(gpt或baidu)", conf_key: "FanyiSource", conf_value: "" },
{ conf_name: "微信网页授权回跳域名(例: https://当前域名http/https必须加)", conf_key: "WechatHost", conf_value: "" },
{ conf_name: "微信授权文件( 公众号需要验证域名权限 )", conf_key: "WechatAuthFile", conf_value: "" },
{ conf_name: "微信菜单JSON <a href='/setting_wechat_menu'>可视化编辑</a>", conf_key: "WechatMenu", conf_value: "" },
{ conf_name: "访客接受营销会员模板ID", conf_key: "WechatCustomerTemplateId", conf_value: "" },
{ conf_name: "企业微信内部群通知机器人Webhookurl", conf_key: "WorkWechatWebHookUrl", conf_value: "" },
{ conf_name: "企业微信(CorpId)", conf_key: "WorkWechatCorpid", conf_value: "" },
{ conf_name: "企业微信应用(AgentId)", conf_key: "WorkWechatAppAgentId", conf_value: "" },
{ conf_name: "企业微信应用(Secret)", conf_key: "WorkWechatAppSecret", conf_value: "" },
{ conf_name: "企业微信应用接收消息Token", conf_key: "WorkWechatAppToken", conf_value: "" },
{ conf_name: "企业微信应用接收消息EncodingAESKey", conf_key: "WorkWechatAppEncodingAESKey", conf_value: "" },
{ conf_name: "微信小程序AppId (WechatMiniAppId)", conf_key: "WechatMiniAppId", conf_value: "" },
{ conf_name: "微信小程序AppSecret (WechatMiniAppSecret)", conf_key: "WechatMiniAppSecret", conf_value: "" },
{ conf_name: "微信小程序Token (WechatMiniToken)", conf_key: "WechatMiniToken", conf_value: "" },
{ conf_name: "落地域名( 访问后跳转的最终域名,确认该域名已解析绑定到客服平台 )", conf_key: "VisitorLandHost", conf_value: "" },
{ conf_name: "邮箱(SMTP地址, 例: smtp.qq.com:465)", conf_key: "NoticeEmailSmtp", conf_value: "" },
{ conf_name: "邮箱(邮箱名, 例: xxxxx@qq.com)", conf_key: "NoticeEmailAddress", conf_value: "" },
{ conf_name: "邮箱(授权码, 例: ubbabcdefocbfce)", conf_key: "NoticeEmailPassword", conf_value: "" },
{ conf_name: "关闭用户时提示语", conf_key: "CloseVisitorMessage", conf_value: "" },
{ conf_name: "访客到来强提醒 (on开启;off关闭)", conf_key: "VisitorForceAlert", conf_value: "off" },
{ conf_name: "访客新消息强提醒 (on开启;off关闭)", conf_key: "VisitorMessageAlert", conf_value: "off" },
{ conf_name: "更换客服端新消息提示声音(音频文件路径)", conf_key: "KefuAlertSound", conf_value: "/static/images/alert2.ogg" },
{ conf_name: "更换客服端新访客提示声音(音频文件路径)", conf_key: "visitorLoginSound", conf_value: "/static/images/alert.mp3" },
{ conf_name: "企业公告语", conf_key: "VisitorNotice", conf_value: "" },
{ conf_name: "企业签名简介", conf_key: "KefuIntroduce", conf_value: "" },
{ conf_name: "常问关键词(以英文逗号,分割)", conf_key: "VisitorQaKeywords", conf_value: "" },
{ conf_name: "自动欢迎 (on只弹一次;off每次都弹;默认每次都弹)", conf_key: "AutoWelcome", conf_value: "" },
{ conf_name: "自动弹窗延迟时间毫秒比如1000是1秒", conf_key: "AutoOpenDialogTime", conf_value: "" },
{ conf_name: "第三方订单列表接口地址", conf_key: "OrdersListApi", conf_value: "" },
{ conf_name: "智能机器人名称", conf_key: "RobotName", conf_value: "" },
{ conf_name: "智能机器人头像", conf_key: "RobotAvator", conf_value: "" },
{ conf_name: "机器人接待方式", conf_key: "RobotStatus", conf_value: "" },
{ conf_name: "机器人无法回答时提示语", conf_key: "RobotNoAnswer", conf_value: "" },
{ conf_name: "转接人工客服关键词(多个关键词英文逗号分割,例如:人工,转人工)", conf_key: "TurnToMan", conf_value: "" },
{ conf_name: "访客自动断线时间单位秒默认20分钟", conf_key: "VisitorTimeout", conf_value: "" },
{ conf_name: "访客Cookie有效期单位秒默认不填是100年", conf_key: "VisitorCookie", conf_value: "" },
// {conf_name: "客服同时接待访客数上限(默认不限)", conf_key: "VisitorMaxNum", conf_value: ""},
{ conf_name: "客服接待访客数上限文案", conf_key: "VisitorMaxNumNotice", conf_value: "" },
{ conf_name: "访客端关注公众号登录功能true开启留空或者false 关闭)", conf_key: "ScanWechatQrcode", conf_value: "" },
{ conf_name: "访客认证功能接口访客id进行自有系统认证填写接口地址", conf_key: "VisitorAuthApi", conf_value: "" },
{ conf_name: "客服全部离线时的提示语(留空不提示)", conf_key: "KefuOfflineNotice", conf_value: "" },
{ conf_name: "企业微信客服机器人回答之前的提示语", conf_key: "QiyeWechatKefuPreRobot", conf_value: "" },
{ conf_name: "JS接口Hook", conf_key: "JsHook", conf_value: "" },
{ conf_name: "IFRAME接入页面标题", conf_key: "IframePageTitle", conf_value: "" },
{ conf_name: "IFRAME接入页面地址", conf_key: "IframePageUrl", conf_value: "" },
{ conf_name: "IFRAME接入2页面标题", conf_key: "IframePageTitle2", conf_value: "" },
{ conf_name: "IFRAME接入2页面地址", conf_key: "IframePageUrl2", conf_value: "" },
{ conf_name: "访客消息回调", conf_key: "VisitorMessageCallUrl", conf_value: "" },
{ conf_name: "客服消息回调", conf_key: "KefuMessageCallUrl", conf_value: "" },
{ conf_name: "易支付商户ID", conf_key: "Nan66Shopid", conf_value: "" },
{ conf_name: "易支付API接口地址", conf_key: "Nan66Api", conf_value: "" },
{ conf_name: "易支付商户密钥", conf_key: "Nan66ShopSecret", conf_value: "" },
],
configs: [],
roleDialog: false,
noticeList: [],
wechatWelcomes: [],
welcomeDialog: false,
ipblackList: [],
ipAddress: "",
ipAddressName: "",
welcomeForm: {
content: "",
keyword: "",
delay_second: 3,
},
// roleForm:{
// id:"",
// name:"",
// method:"",
// path:"",
// },
statistics: {},
commentStatistics: {},
modifyPass: {
old_pass: "",
new_pass: "",
confirm_new_pass: ""
},
modifyPassRules: {
new_pass: [
{ required: true, message: '密码不能为空', trigger: 'blur' },
],
confirm_new_pass: [
{ required: true, message: '确认密码不能为空', trigger: 'blur' },
],
},
menuStoreShow: false,
menuAdminShow: false,
deployTitle: "",
nickname: "",
kefuId: "",
kefuName: "",
entId: "",
avatarUrl: "",
kefuMessages: {
page: 1,
count: 0,
pagesize: 0,
list: [],
kefuid: "",
},
visitorMessages: {
page: 1,
count: 0,
pagesize: 0,
list: [],
visitor_id: "",
},
kefuListAll: {
page: 1,
count: 0,
pagesize: 0,
list: [],
},
visitorListAll: {
page: 1,
count: 0,
pagesize: 0,
list: [],
},
visitorExtAll: {
page: 1,
count: 0,
pagesize: 0,
list: [],
},
rate: {
page: 1,
count: 0,
pagesize: 0,
list: [],
},
cateDialog: false,
cateForm: {
id: "",
cate_name: "",
is_top: 0,
},
article: {
title: "",
content: "",
},
visitor: {
visitor_id: "",
refer: "",
client_ip: "",
city: "",
status: "",
source_ip: "",
created_at: "",
osVersion: "",
browser: "",
wechat_oauth: "",
},
visitorExtra: [],
articleCate: [],
articleList: [],
articleCateId: 0,
articleDialog: false,
kefuInfo: {},
visitorAttrs: {},
visitorAttrDialog: false,
visitorMessageDialog: false,
visitorIdMessage: "",
visitorSearch: {},
kefuSearch: {},
kefuMessageDialog: false,
welcomeWechatDialog: false,
kefuIdMessage: "",
allTags: [],
editor: null,
uploadWechatUrl: "/kefu/uploadWechatAuthFile?token=" + localStorage.getItem("token"),
uploadAvatorUrl: "/kefu/uploadAvator?token=" + localStorage.getItem("token"),
uploadQdrantUrl: "/kefu/collectUpload?token=" + localStorage.getItem("token"),
newsList: {},
newsDialog: false,
newsForm: {
id: "",
tag: "",
title: "",
content: "",
},
logList: {},
wechatServerUrl: "",
wechatVisitorUrl: "",
visitorUrl: "",
settingCharge: {
username: "",
money: "",
payment: "alipay",
},
customers: {
page: 1,
count: 0,
pagesize: 0,
list: [],
},
KefuCleanBtn: KefuCleanBtn,
sms: {
txt: KEFU_LANG[LANG].sendSms,
disable: false,
count: 60,
code: "",
bind: false,
},
//访客监控列表
monitorList: [],
// 设置重连时间间隔(单位:毫秒)
RECONNECT_INTERVAL: 1000,
// 设置最大重连次数
MAX_RECONNECT_TIMES: 30,
reconnectTimes: 0,
ws: null,
//机器人客服设置
robotInfo: {
name: "",
avator: "/static/images/robot.png",
status: 1,
noAnswer: "",
transferKefu: "",
},
//固定营销话术
marketing: "",
//大模型相关
bigModel: {
name: "gpt-3.5-turbo-16k",
embedding: "text-embedding-ada-002",
},
//openai
chatGPT: {
url: "",
secret: "",
prompt: "",
system: "",
thirdSearchUrl: "",
qdrantStatus: "",
qdrantAICollect: "",
isHistory: false,
historyNum: "",
score: "",
searchEmptyInterrupt: false,
revQuestion: "",
},
//钉钉
ding: {
robotCode: "",
appKey: "",
appSecret: "",
},
//顾客相关设置
consumers: {
dialog: false,
formRule: {
realname: [
{ required: true, message: '称呼不能为空', trigger: 'blur' },
],
consumer_sn: [
{ required: true, message: '唯一ID不能为空', trigger: 'blur' },
],
},
form: {},
page: 1,
count: 0,
pagesize: 0,
list: [],
},
//学习库
learns: {
page: 1,
count: 0,
pagesize: 20,
list: [],
},
//知识库
articles: {
page: 1,
count: 0,
pagesize: 20,
list: [],
orderBy: "",
search: "",
},
keywordFinalReply: "",
robotCard: "",
//微信客服
kefuWework: {
corpid: "",
encodingAESKey: "",
url: "",
secret: "",
token: "",
link: "",
},
kefuWeworkList: [],
//企业微信
wework: {
webhook: "",
corpid: "",
agentid: "",
secret: "",
token: "",
encodingAESKey: "",
},
//微信小程序
wechatMini: {
appid: "",
appsecret: "",
token: "",
templateId: "",
pages: "",
},
//微信公众号
wechatOfficial: {
appid: "",
appsecret: "",
token: "",
kefuTemplateId: "",
kefuTemplateColumn: "",
isReply: "off",
menu: "",
},
//易支付
yiPay: {
shopId: "", api: "", notifyUrl: "", shopSecret: "",
},
//日期选择器
pickerOptions: {
shortcuts: [{
text: '最近一周',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
end.setTime(end.getTime() + 3600 * 1000 * 24);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近一个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
end.setTime(end.getTime() + 3600 * 1000 * 24);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近三个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
end.setTime(end.getTime() + 3600 * 1000 * 24);
picker.$emit('pick', [start, end]);
}
}]
},
workTimeSetting: {
workTimeStatus: "no",
workDay: ['星期一', '星期二', '星期三', '星期四', '星期五'],
morningWorkTime: ["2024-01-26 08:30", "2024-01-26 12:00"],
afternoonWorkTime: ["2024-01-26 13:30", "2024-01-26 18:00"],
otherWorkTime: "",
afterWorkMessage: "非常抱歉,当前为非工作时间,请在工作时间内(周一至周五,上午[08:30-12:00],下午[13:30-18:00])与我们联系!",
},
workDaies: ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'],
//翻译设置
fanyiSource: "",
baiduFanyiAppId: "",
baiduFanyiAppSec: '',
baiduFanyiAuto: "",
//同时接待数上限
maxReceiveNum: "",
},
methods: {
//跳转
openUrl(url) {
//window.location.href=url;
this.iframeUrl = url;
},
//跳转
openSelfUrl(url) {
window.location.href = url;
//this.iframeUrl=url;
},
//返回
goBack() {
window.history.back();
},
//初始化数据
initInfo() {
console.log("ACTION", ACTION);
let _this = this;
this.sendAjax("/kefu/kefuinfo", "get", {}, function (result) {
if (result.role_id == 2) {
_this.menuStoreShow = true;
}
if (result.role_id == 1) {
_this.menuAdminShow = true;
}
_this.kefuInfo = result;
_this.kefuId = result.name;
_this.kefuName = result.name;
_this.entId = result.ent_id;
_this.nickname = result.nickname;
_this.visitorUrl = _this.host + '/chatIndex?kefu_id=' + result.name + '&ent_id=' + result.ent_id;
_this.wechatServerUrl = _this.host + '/wechat/server/' + result.ent_id + '/' + result.name;
_this.wechatVisitorUrl = _this.host + '/wechatIndex?ent_id=' + result.ent_id + '&kefu_id=' + result.name;
_this.connect();
});
if (ACTION == "extend") {
this.iframeUrl = "extend_fastgpt"
2024-12-18 02:56:53 +00:00
}
if (ACTION == "digital_human") {
2024-12-26 08:52:55 +00:00
this.iframeUrl = "digital_human_base_setting"
2024-12-18 02:56:53 +00:00
2024-12-10 02:50:12 +00:00
}
if (ACTION == "setting_deploy") {
}
if (ACTION == "setting_avator") {
this.sendAjax("/kefu/kefuinfo", "get", {}, function (result) {
_this.kefuInfo = result;
_this.avatarUrl = result.avator;
});
}
if (ACTION == "setting_kefu_list") {
var page = this.getQueryVariable("page");
if (!page) page = 1;
this.kefuListOwnPage(page);
//let _this=this;
//_this.kefuListOwnPage(_this.kefuList.page)
this.sendAjax("/kefu/roleList", "get", {}, function (result) {
_this.roleList = result;
});
}
if (ACTION == "setting_user_all") {
var page = this.getQueryVariable("page");
if (!page) page = 1;
this.kefuListAllPage(page)
}
if (ACTION == "setting_visitor_list") {
var page = this.getQueryVariable("page");
if (!page) page = 1;
this.visitorListAllPage(page)
this.getTags();
this.getMonitorList();
}
if (ACTION == "roles_list") {
this.sendAjax("/roles", "get", {}, function (result) {
_this.roleList = result;
});
}
if (ACTION == "setting_statistics") {
this.checkAuth();
this.sendAjax("/statistics", "get", {}, function (result) {
_this.statistics = result;
});
this.sendAjax("/kefu/commentStatistics", "get", {}, function (result) {
_this.commentStatistics = result;
});
}
if (ACTION == "setting_welcome") {
this.getConfigs();
this.getWelcomes();
}
if (ACTION == "setting_wechat") {
this.getConfigs(function () {
_this.getKefuWeworkConfig();
});
this.getKefuWeworkList();
}
if (ACTION == "setting_ipblack") {
this.sendAjax("/system/ipblacks", "get", { page: 1, pagesize: 100000 }, function (result) {
_this.ipblackList = result.list;
});
}
if (ACTION == "setting_config") {
this.sendAjax("/admin/configs", "get", {}, function (result) {
_this.configList = result;
});
}
if (ACTION == "setting_configs") {
this.sendAjax("/kefu/ent_configs", "get", {}, function (result) {
var temp = {};
for (i in result) {
temp[result[i].conf_key] = result[i];
}
console.log(temp);
for (i in _this.entConfigList) {
var value = "";
if (temp[_this.entConfigList[i].conf_key]) {
value = temp[_this.entConfigList[i].conf_key].conf_value;
}
_this.entConfigList[i].conf_value = value;
}
});
}
if (ACTION == "setting_news") {
this.getNews();
}
if (ACTION == "setting_kefu_message") {
var id = this.getQueryVariable("id");
var page = this.getQueryVariable("page");
this.kefuMessages.kefuid = id;
this.kefuMessagesPage(page);
}
if (ACTION == "setting_visitor_message") {
var visitor = this.getQueryVariable("visitor");
var page = this.getQueryVariable("page");
this.visitorMessages.visitor_id = visitor;
this.visitorMessagesPage(page);
this.getVisitorInfo(visitor);
this.getWechatOauth(visitor);
}
if (ACTION == "setting_articles") {
this.getArticleCate();
this.getArticle(1);
this.getLearns(1);
_this.getConfigs(function () {
_this.keywordFinalReply = _this.getConfig("KeywordFinalReply");
});
}
if (ACTION == "setting_pay_config") {
_this.getConfigs(function () {
_this.yiPay.shopId = _this.getConfig("Nan66Shopid");
_this.yiPay.shopSecret = _this.getConfig("Nan66ShopSecret");
_this.yiPay.api = _this.getConfig("Nan66Api");
_this.yiPay.notifyUrl = _this.getConfig("Nan66NotifyUrl");
});
}
if (ACTION == "setting_logs") {
this.getLogs();
}
if (ACTION == "setting_robot") {
this.getRobotInfo();
_this.getConfigs(function () {
_this.chatGPT.url = _this.getConfig("chatGPTUrl");
_this.chatGPT.secret = _this.getConfig("chatGPTSecret");
_this.chatGPT.prompt = _this.getConfig("chatGPTPrompt");
_this.chatGPT.system = _this.getConfig("chatGPTSystem");
_this.chatGPT.thirdSearchUrl = _this.getConfig("ThirdSearchUrl");
_this.chatGPT.qdrantAICollect = _this.getConfig("QdrantAICollect");
_this.chatGPT.qdrantStatus = _this.getConfig("QdrantAIStatus");
_this.chatGPT.score = _this.getConfig("QdrantScore");
_this.chatGPT.isHistory = _this.getConfig("chatGPTHistory");
_this.chatGPT.historyNum = _this.getConfig("QdrantHistoryNum");
_this.chatGPT.isHistory = _this.getConfig("chatGPTHistory");
_this.chatGPT.searchEmptyInterrupt = _this.getConfig("SearchEmptyInterrupt");
_this.chatGPT.revQuestion = _this.getConfig("chatGPTRevQuestion");
_this.ding.appKey = _this.getConfig("DingAppKey");
_this.ding.appSecret = _this.getConfig("DingAppSecret");
_this.ding.robotCode = _this.getConfig("DingRobotCode");
_this.bigModel.name = _this.getConfig("BigModelName");
if (_this.getConfig("EmbeddingModelName") != "") _this.bigModel.embedding = _this.getConfig("EmbeddingModelName");
_this.marketing = _this.getConfig("Marketing");
});
}
if (ACTION == "setting_llm") {
this.getRobotInfo();
_this.getConfigs(function () {
_this.chatGPT.url = _this.getConfig("chatGPTUrl");
_this.chatGPT.secret = _this.getConfig("chatGPTSecret");
_this.chatGPT.prompt = _this.getConfig("chatGPTPrompt");
_this.chatGPT.system = _this.getConfig("chatGPTSystem");
_this.chatGPT.thirdSearchUrl = _this.getConfig("ThirdSearchUrl");
_this.chatGPT.qdrantAICollect = _this.getConfig("QdrantAICollect");
_this.chatGPT.qdrantStatus = _this.getConfig("QdrantAIStatus");
_this.chatGPT.score = _this.getConfig("QdrantScore");
_this.chatGPT.isHistory = _this.getConfig("chatGPTHistory");
_this.chatGPT.historyNum = _this.getConfig("QdrantHistoryNum");
_this.chatGPT.isHistory = _this.getConfig("chatGPTHistory");
_this.chatGPT.searchEmptyInterrupt = _this.getConfig("SearchEmptyInterrupt");
_this.chatGPT.revQuestion = _this.getConfig("chatGPTRevQuestion");
_this.bigModel.name = _this.getConfig("BigModelName");
if (_this.getConfig("EmbeddingModelName") != "") _this.bigModel.embedding = _this.getConfig("EmbeddingModelName");
});
}
if (ACTION == "setting_visitor_ext" || ACTION == "setting_service_statistic") {
var page = this.getQueryVariable("page");
if (!page) page = 1;
this.visitorExtAllPage(page)
}
if (ACTION == "setting_service_statistic") {
var page = this.getQueryVariable("page");
if (!page) page = 1;
this.ratePage(page)
}
if (ACTION == "setting_customer") {
this.getCustomers(1);
this.getConsumers(1);
}
if (ACTION == "setting_marketing") {
this.sendAjax("/kefu/kefuList", "get", { page: 1, pagesize: 1000000, kefu_name: this.kefuSearch.name }, function (result) {
var list = [];
for (var i in result.list) {
if (result.list[i].pid == 1) {
list.push(result.list[i])
}
}
_this.kefuList.list = list;
});
}
if (ACTION == "setting_company") {
this.getWorkTime();
}
},
kefuMessagesPage(page) {
var _this = this;
this.sendAjax("/kefulist_message", "get", { id: this.kefuMessages.kefuid, page: page, pagesize: 30 }, function (result) {
var list = result.list;
_this.kefuMessages.count = result.count;
for (var i in list) {
list[i].content = replaceSpecialTag(list[i].content);
}
list.sort(function (a, b) {
return a.id - b.id;
});
_this.kefuMessages.list = list;
_this.kefuMessages.page = result.page;
_this.kefuMessages.pagesize = result.pagesize;
});
},
visitorMessagesPage(page) {
var _this = this;
this.sendAjax("/visitorlist_message", "get", { visitor_id: this.visitorMessages.visitor_id, page: page }, function (result) {
var list = result.list;
for (var i in list) {
// var visitorAvator=result.list[i].visitor_avator;
// var kefuAvator=result.list[i].kefu_avator;
// var visitorName=result.list[i].visitor_name;
// var kefuName=result.list[i].kefu_name;
// if(result.list[i].mes_type=='visitor'){
// result.list[i].kefu_avator=visitorAvator;
// result.list[i].kefu_name=visitorName;
// result.list[i].visitor_name=kefuName;
// result.list[i].visitor_avator=kefuAvator;
// }
list[i].content = replaceContent(list[i].content);
}
list.sort(function (a, b) {
return a.id - b.id;
});
_this.visitorMessages.list = list;
_this.visitorMessages.count = result.count;
_this.visitorMessages.page = result.page;
_this.visitorMessages.pagesize = result.pagesize;
});
},
kefuListAllPage(page) {
var _this = this;
this.sendAjax("/kefulist?page=" + page, "get", {}, function (result) {
_this.kefuListAll.list = result.list;
_this.kefuListAll.count = result.count;
_this.kefuListAll.page = result.page;
_this.kefuListAll.pagesize = result.pagesize;
});
},
kefuListOwnPage(page) {
var _this = this;
this.sendAjax("/kefu/kefuList", "get", {
page: page,
pagesize: 20,
kefu_name: this.kefuSearch.name,
email: this.kefuSearch.email,
tel: this.kefuSearch.tel,
}, function (result) {
for (var i in result.list) {
result.list[i].updated_at = dateFormat("YYYY-mm-dd HH:MM:SS", new Date(result.list[i].updated_at));
result.list[i].created_at = dateFormat("YYYY-mm-dd HH:MM:SS", new Date(result.list[i].created_at));
if (result.list[i].status == 0) {
result.list[i].status = true;
} else {
result.list[i].status = false;
}
}
_this.kefuList.list = result.list;
_this.kefuList.count = result.count;
_this.kefuList.page = result.page;
_this.kefuList.pagesize = result.pagesize;
});
},
visitorListAllPage(page) {
var _this = this;
var parames = {
orderBy: "created_at", pagesize: 15, visitorMessage: this.visitorSearch.message, visitorName: this.visitorSearch.name,
visitorTag: this.visitorSearch.tag,
};
if (this.visitorSearch.updateTime) {
parames.updateTime = this.visitorSearch.updateTime.join("~");
}
if (this.visitorSearch.createTime) {
parames.createTime = this.visitorSearch.createTime.join("~");
}
this.sendAjax("/kefu/visitorList?page=" + page, "get", parames, function (result) {
for (var i in result.list) {
result.list[i].updated_at = dateFormat("YYYY-mm-dd HH:MM:SS", new Date(result.list[i].updated_at));
result.list[i].created_at = dateFormat("YYYY-mm-dd HH:MM:SS", new Date(result.list[i].created_at));
result.list[i].last_message = replaceSpecialTag(result.list[i].last_message);
}
_this.visitorListAll.list = result.list;
_this.visitorListAll.count = result.count;
_this.visitorListAll.page = result.page;
_this.visitorListAll.pagesize = result.pagesize;
});
},
//访客来源
visitorExtAllPage(page) {
var _this = this;
var parames = {
pagesize: 15,
page: page,
title: this.kefuSearch.title,
refer_title: this.kefuSearch.refer_title,
};
this.sendAjax("/kefu/visitorExtList", "get", parames, function (result) {
_this.visitorExtAll.list = result.list;
_this.visitorExtAll.count = result.count;
_this.visitorExtAll.page = result.page;
_this.visitorExtAll.pagesize = result.pagesize;
});
},
//评价列表
ratePage(page) {
var _this = this;
var parames = { pagesize: 15, page: page };
this.sendAjax("/kefu/rateList", "get", parames, function (result) {
_this.rate.list = result.list;
_this.rate.count = result.count;
_this.rate.page = result.page;
_this.rate.pagesize = result.pagesize;
});
},
sendAjax(url, method, params, callback) {
let _this = this;
$.ajax({
type: method,
url: url,
data: params,
headers: {
"token": localStorage.getItem("token")
},
error: function (res) {
_this.$message({
message: res.responseText,
type: 'error'
});
},
success: function (data) {
_this.fullscreenLoading = false
if (data.code == 200 || data.code == 20000) {
if (data.result != null) {
callback(data.result);
} else {
callback(data);
}
return;
}
_this.$message({
message: data.msg,
type: 'error'
});
}
});
},
//添加客服的dialog
addKefu() {
this.kefuForm = {
id: "",
name: "",
password: "",
avator: "",
};
this.kefuDialog = true;
},
//添加分类的dialog
addCate() {
this.cateForm = {
id: "",
cate_name: "",
is_top: 0,
};
this.cateDialog = true;
},
//提交客服表单
submitKefuForm(formName) {
let _this = this;
this.$refs[formName].validate((valid) => {
if (valid) {
this.sendAjax("/kefu/kefuInfo", "POST", _this.kefuForm, function (result) {
_this.kefuDialog = false;
_this.kefuListOwnPage(_this.kefuList.page);
});
} else {
return false;
}
});
},
switchUserStatus: function (status, id) {
if (status) {
status = 0;
} else {
status = 1;
}
var _this = this;
this.sendAjax("/kefu/kefuStatus", "POST", { status: status, id: id }, function (result) {
//_this.kefuListOwnPage(_this.kefuList.page);
});
},
//获取新闻
getNews(page) {
var _this = this;
this.sendAjax("/other/news", "get", { page: page, pagesize: 20 }, function (result) {
_this.newsList = result;
});
},
//获取日子列表
getLogs(page) {
var _this = this;
this.sendAjax("/kefu/logs", "get", { page: page, pagesize: 20 }, function (result) {
_this.logList = result;
});
},
//提交表单
saveNews(formName) {
let _this = this;
this.newsForm.content = this.editor.txt.html();
this.sendAjax("/system/saveNews", "POST", _this.newsForm, function (result) {
_this.newsDialog = false;
_this.getNews();
});
},
//删除访客聊天记录
deleteNews(id) {
var _this = this;
this.$confirm('此操作将删除内容, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
_this.sendAjax("/system/delNews", "get", { id: id }, function (result) {
_this.$message({
type: 'success',
message: result.msg
});
_this.getNews();
});
});
},
//提交欢迎表单
submitWelcomeForm(formName, isWechat) {
let _this = this;
if (!isWechat) {
_this.welcomeForm.content = this.editor.txt.html();
}
this.sendAjax("/kefu/notice", "POST", _this.welcomeForm, function (result) {
_this.welcomeDialog = false;
_this.welcomeWechatDialog = false;
_this.getWelcomes();
});
},
//获取客服
getKefu(kefuId) {
let _this = this;
this.sendAjax("/kefu/kefuSetting", "GET", { kefu_id: kefuId }, function (result) {
_this.kefuDialog = true;
_this.kefuForm = result.user;
_this.kefuSetting = result.settings;
_this.maxReceiveNum = _this.getConfigByAdmin("VisitorMaxNum");
_this.kefuForm.password = "";
});
},
//删除客服
deleteKefu(kefuId) {
var _this = this;
this.$confirm('此操作将删除该用户, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
_this.sendAjax("/kefu/kefuInfo?id=" + kefuId, "DELETE", { id: kefuId }, function (result) {
_this.kefuDialog = false;
_this.kefuListOwnPage(_this.kefuList.page);
});
});
},
//删除访客
deleteVisitor(visitorId) {
var _this = this;
this.$confirm('此操作将删除访客, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
this.sendAjax("/kefu/delVisitor?visitor_id=" + visitorId, "DELETE", {}, function (result) {
var page = _this.visitorListAll.page;
if (!page) page = 1;
_this.visitorListAllPage(page);
});
});
},
//删除访客聊天记录
deleteVisitorMessage(visitorId) {
var _this = this;
this.$confirm('此操作将清除访客所有记录, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
_this.sendAjax("/kefu/delVisitorMessage", "get", { visitor_id: visitorId }, function (result) {
_this.$message({
type: 'success',
message: '删除成功!'
});
var page = _this.visitorListAll.page;
if (!page) page = 1;
_this.visitorListAllPage(page);
});
});
},
//获取欢迎
getWelcomes() {
var _this = this;
_this.noticeList = [];
_this.wechatWelcomes = [];
this.sendAjax("/kefu/notices", "get", {}, function (result) {
for (var key in result) {
if (result[key]['keyword'] == "welcome") {
_this.noticeList.push(result[key]);
}
if (result[key]['keyword'] == "wechat") {
_this.wechatWelcomes.push(result[key]);
}
}
});
},
//删除欢迎
deleteWelcome(id) {
let _this = this;
this.sendAjax("/kefu/notice?id=" + id, "DELETE", { id: id }, function (result) {
_this.getWelcomes();
});
},
//删除ip
deleteIpblack(ip) {
let _this = this;
this.sendAjax("/kefu/ipblack?ip=" + ip, "DELETE", { ip: ip }, function (result) {
_this.sendAjax("/system/ipblacks", "get", { page: 1, pagesize: 100000 }, function (result) {
_this.ipblackList = result.list;
});
});
},
// //配置角色权限
// showAuthDialog(id,name,method,path){
// this.roleForm.id=id
// this.roleForm.name=name
// this.roleForm.method=method
// this.roleForm.path=path
// this.roleDialog=true;
// },
//设置配置项
setConfigItem(key, value) {
let _this = this;
this.sendAjax("/admin/config", "POST", { key: key, value: value }, function (result) {
_this.sendAjax("/admin/configs", "get", {}, function (result) {
_this.configList = result;
});
_this.$message({
message: "更新成功",
type: 'success'
});
});
},
//设置配置项
setEntConfigItem(name, key, value) {
let _this = this;
this.$confirm('此操作修改配置, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
_this.sendAjax("/kefu/entConfigs", "POST", { name: name, key: key, value: value }, function (result) {
_this.$message({
message: "success",
type: 'success'
});
_this.setConfig(key, value);
});
});
},
//设置配置项
setEntConfigItemByAdmin(entId, name, key, value) {
let _this = this;
this.$confirm('此操作修改配置, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
_this.sendAjax("/system/entConfigs", "POST", { ent_id: entId, name: name, key: key, value: value }, function (result) {
_this.$message({
message: "success",
type: 'success'
});
});
});
},
//设置配置项
setWelcomeItem(id, content, delay_second) {
let _this = this;
this.sendAjax("/kefu/updateNotice", "POST", { id: id, content: content, delay_second: delay_second }, function (result) {
_this.$message({
message: "更新成功",
type: 'success'
});
});
},
// //提交角色表单
// submitRoleForm(formName){
// let _this=this;
// this.$refs[formName].validate((valid) => {
// if (valid) {
// this.sendAjax("/role","POST",_this.roleForm,function(result){
// _this.roleDialog=false;
// _this.sendAjax("/roles","get",{},function(result){
// _this.roleList=result;
// });
// _this.$message({
// message: result.msg,
// type: 'success'
// });
// });
// } else {
// return false;
// }
// });
// },
// //提交首页表单
// setPageIndex(){
// let _this=this;
// this.sendAjax("/about","POST",this.pageindex,function(result){
// _this.$message({
// message: "编辑成功",
// type: 'success'
// });
// });
// },
//修改密码
setModifyPass() {
let _this = this;
this.$refs['modifyPassForm'].validate((valid) => {
if (!valid) {
return false;
} else {
this.sendAjax("/kefu/modifypass", "POST", _this.modifyPass, function (result) {
_this.$message({
message: "修改成功",
type: 'success'
});
_this.modifyPass.new_pass = _this.modifyPass.old_pass = _this.modifyPass.confirm_new_pass = ""
});
}
});
},
//修改密码
setModifyAvatar() {
let _this = this;
this.sendAjax("/modifyavator", "POST", { avator: _this.avatarUrl }, function (result) {
_this.$message({
message: "修改成功",
type: 'success'
});
});
},
//修改商户资料
modifyKefuInfo() {
let _this = this;
this.sendAjax("/kefu/modifyUser", "POST",
{
avator: _this.kefuInfo.avator,
nickname: _this.kefuInfo.nickname,
company_pic: _this.kefuInfo.company_pic
}, function (result) {
_this.$message({
message: "修改成功",
type: 'success'
});
_this.sendAjax("/kefu/kefuinfo", "get", {}, function (result) {
_this.kefuInfo = result;
});
});
},
handleAvatarSuccess(res, file) {
var _this = this;
console.log(res, file);
if (res.code != 200) {
_this.$message({
message: res.msg,
type: 'error'
});
return;
}
this.kefuInfo.avator = res.result.path;
},
handleRobotAvatarSuccess(res, file) {
var _this = this;
console.log(res, file);
if (res.code != 200) {
_this.$message({
message: res.msg,
type: 'error'
});
return;
}
this.robotInfo.avator = res.result.path;
},
beforeAvatarUpload(file) {
var isLt2M = file.size / 1024 / 1024 < 1;
if (!isLt2M) {
this.$message.error('上传头像图片大小不能超过 1MB!');
}
return isLt2M;
},
handleCompanyPicSuccess(res, file) {
var _this = this;
console.log(res, file);
if (res.code != 200) {
_this.$message({
message: res.msg,
type: 'error'
});
return;
}
this.kefuInfo.company_pic = getImageUrl(res.result.path, getBaseUrl());
},
checkAuth() {
let _this = this;
$.ajax({
type: "post",
url: "/check_auth",
headers: {
"token": localStorage.getItem("token")
},
success: function (data) {
if (data.code != 200) {
window.location.href = "/ironMan/signInx";
} else {
_this.adminAvator = data.result.avator;
_this.adminRole = data.result.nick_name + "-" + data.result.role_name;
}
}
});
},
//获取知识库分类
getArticleCate() {
var _this = this;
this.sendAjax("/ent/article_cate", "get", {}, function (result) {
_this.articleCate = result;
});
},
setArticleCate(row) {
this.articleCateId = row.id;
this.getArticle(1);
},
//排序知识库
getSortArticle(column) {
console.log(1111);
let prop = column.prop;
let order = column.order == "ascending" ? "asc" : "desc";
this.articles.prop = prop;
this.articles.order = order;
this.getArticle(1);
},
//获取知识库
getArticle(page) {
var _this = this;
var params = {};
params = {
pagesize: this.articles.pagesize,
page: page,
prop: this.articles.prop,
order: this.articles.order,
};
if (this.articleCateId != 0) {
params.cat_id = this.articleCateId;
}
this.sendAjax("/ent/article_list", "get", params, function (result) {
// result.list=foreachArray(result.list,function(row){
// row['title']=splitString(row["title"],",");
// return row;
// });
_this.articles.list = result.list;
_this.articles.count = result.count;
_this.articles.pagesize = result.pagesize;
//_this.articleList=result;
});
},
//导出知识库excel
getArticleExcel() {
this.listLoading = this.$loading({
lock: true,
text: "正在导出excel",
});
var _this = this;
var params = {};
params = {
pagesize: 5000,
page: 1,
prop: this.articles.prop,
order: this.articles.order,
};
if (this.articleCateId != 0) {
params.cat_id = this.articleCateId;
}
this.sendAjax("/ent/article_list", "get", params, function (result) {
let ret = result.list
if (ret) {
let data = [['关键词', '回复内容']];
for (let i in ret) {
data.push([ret[i].title, ret[i].content]);
}
const worksheet = XLSX.utils.aoa_to_sheet(data);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
XLSX.writeFile(workbook, '自动回复.xlsx');
_this.listLoading.close();
}
});
},
//
splitString(str, split) {
return splitString(str, split);
},
//获取营销会员
getCustomers(page) {
var _this = this;
var params = {};
params = { pagesize: 10, page: page };
this.sendAjax("/kefu/customerList", "get", params, function (result) {
_this.customers = result;
});
},
//删除知识库分类
delArticleCate(id) {
var _this = this;
this.$confirm('此操作将删除本分类所有回复, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
var params = { id: id };
_this.sendAjax("/kefu/delArticleCate", "get", params, function (result) {
_this.getArticleCate();
_this.getArticle(1);
});
});
},
//置顶或取消置顶
setArticleCateTop(id, isTop) {
var _this = this;
var params = { id: id, is_top: isTop };
_this.sendAjax("/kefu/articleCateTop", "get", params, function (result) {
_this.getArticleCate();
_this.getArticle(1);
});
},
//删除知识库
delArticle(id) {
var _this = this;
this.$confirm('此操作将删除关键词回复, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
var params = { id: id };
this.sendAjax("/kefu/delArticle", "get", params, function (result) {
_this.getArticle(1);
});
});
},
//增加知识库分类
addArticleCate() {
var _this = this;
this.sendAjax("/kefu/addArticleCate", "POST", { id: this.cateForm.id, name: this.cateForm.cat_name }, function (data) {
_this.cateDialog = false;
_this.getArticleCate();
});
},
//增加文章
addArticle() {
var _this = this;
if (Array.isArray(this.article.title)) {
this.article.title = this.article.title.join(",");
} else {
this.article.title = this.article.title.replace("", ",");
}
if (!this.article.cat_id) {
this.$message({
message: "请先创建并选择分类!",
type: 'error'
});
return;
}
this.article.title = trim(this.article.title, ",");
this.article.content = this.editor.txt.html();
this.sendAjax("/kefu/addArticle", "POST", this.article, function (data) {
_this.articleDialog = false;
if (!_this.article.id) _this.getArticle(1);
_this.article = {};
});
},
//访客搜索
searchVisitor() {
var _this = this;
_this.visitorListAll.page = 1;
var parames = {
pagesize: 15, visitorMessage: this.visitorSearch.message, visitorName: this.visitorSearch.name,
visitorTag: this.visitorSearch.tag
};
if (this.visitorSearch.updateTime) {
parames.updateTime = this.visitorSearch.updateTime.join("~");
}
if (this.visitorSearch.createTime) {
parames.createTime = this.visitorSearch.createTime.join("~");
}
this.sendAjax("/kefu/visitorList?page=" + _this.visitorListAll.page, "get", parames, function (result) {
_this.visitorListAll.list = result.list;
_this.visitorListAll.count = result.count;
_this.visitorListAll.page = result.page;
_this.visitorListAll.pagesize = result.pagesize;
});
},
//获取所有标签
getTags() {
var _this = this;
sendAjax("/kefu/tags", "GET", {
}, function (data) {
_this.allTags = data.result;
})
},
GetRequest() {
var str = location.href
var num = str.indexOf("#");
if (num < 0) {
return "";
}
str = str.substr(num + 1);
return str;
},
getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) { return pair[1]; }
}
return (false);
},
//修改密码
getVisitorAttr(visitorId) {
var _this = this;
_this.visitorAttrDialog = true;
this.sendAjax("/kefu/visitor_attr", "get", { visitor_id: visitorId }, function (result) {
_this.visitorAttrs = result;
});
},
switchLang(command) {
setLocalStorage("lang", command);
document.location.reload();
},
//复制文本
copyText(text) {
copyText(text);
this.$message({
message: "ok",
type: 'success'
});
},
destoryEditor() {
this.welcomeForm.content = "";
this.welcomeForm.id = "";
this.welcomeForm.keyword = "";
this.newForm = {};
if (!this.editor) {
return;
}
this.editor.destroy();
this.editor = null;
},
initEditor(idName) {
if (!idName) idName = "#welcomeEditor";
const E = window.wangEditor
this.editor = new E(idName);
// 配置 server 接口地址
this.editor.config.uploadImgServer = '/kefu/editorUploadImg?token=' + localStorage.getItem("token");
this.editor.config.height = 240;
this.editor.config.uploadImgMaxSize = 1 * 1024 * 1024; // 1M
this.editor.config.uploadFileName = 'imgfile';
this.editor.config.uploadImgHooks = {
// 图片上传并返回了结果,图片插入已成功
success: function (xhr) {
console.log('success', xhr)
},
// 图片上传并返回了结果,但图片插入时出错了
fail: function (xhr, editor, resData) {
console.log('fail', resData)
},
// 上传图片出错,一般为 http 请求的错误
error: function (xhr, editor, resData) {
console.log('error', xhr, resData)
},
// 上传图片超时
timeout: function (xhr) {
console.log('timeout')
},
// 图片上传并返回了结果,想要自己把图片插入到编辑器中
// 例如服务器端返回的不是 { errno: 0, data: [...] } 这种格式,可使用 customInsert
customInsert: function (insertImgFn, result) {
// result 即服务端返回的接口
console.log('customInsert', result);
insertImgFn(getImageUrl(result.data.url, getBaseUrl()));
}
}
let isHTML = false;
const { BtnMenu } = E
class htmlMenu extends BtnMenu {
constructor(editor) {
const $elem = E.$(
`<div class="w-e-menu" style="font-size: 12px">HTML</div>`
)
super($elem, editor)
}
clickHandler() {
let source = this.editor.txt.html();
if (source) {
isHTML = !isHTML;
}
if (isHTML) {
source = source.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/ /g, "&nbsp;");
} else {
source = this.editor.txt.text().replace(/&lt;/ig, "<").replace(/&gt;/ig, ">").replace(/&nbsp;/ig, " ")
}
this.editor.txt.html(source);
this.tryChangeActive();
// console.log(source);
}
tryChangeActive() {
if (isHTML) {
this.active()
} else {
this.unActive()
}
}
}
// 注册菜单
const menuKey = 'htmlMenuKey' // 菜单 key ,各个菜单不能重复
this.editor.menus.extend('htmlMenuKey', htmlMenu)
// 将菜单加入到 editor.config.menus 中
// 也可以通过配置 menus 调整菜单的顺序,参考【配置菜单】部分的文档
this.editor.config.menus = this.editor.config.menus.concat(menuKey)
//editor.create()
// this.editor.config.menus = [
// 'head',
// 'bold',
// 'fontSize',
// 'fontName',
// 'italic',
// 'underline',
// 'strikeThrough',
// 'indent',
// 'lineHeight',
// 'foreColor',
// 'backColor',
// 'link',
// 'justify',
// 'emoticon',
// 'table',
// 'splitLine',
// 'undo',
// 'redo',
// ]
this.editor.create();
},
//上传授权文件后的回调
uploadWechatAuthfileCallback: function (response, file, fileList) {
if (response.code != 200) {
this.$message({
message: response.msg,
type: 'error'
});
return;
}
this.$message({
message: response.msg,
type: 'success'
});
for (var i in this.entConfigList) {
if (this.entConfigList[i].conf_key == "WechatAuthFile") {
this.entConfigList[i].conf_value = response.result.path;
}
}
},
//获取访客信息
getVisitorInfo(visitor_id) {
var _this = this;
$.ajax({
type: "get",
url: "/kefu/visitor",
data: { visitorId: visitor_id },
headers: {
"token": localStorage.getItem("token")
},
success: function (data) {
if (data.result != null) {
let r = data.result;
_this.visitor.visitor_id = r.visitor_id;
_this.visitor.source_ip = r.source_ip;
_this.visitor.created_at = data.create_time;
_this.visitor.updated_at = data.last_time;
_this.visitor.osVersion = data.os_version;
_this.visitor.browser = data.browser;
_this.visitor.city = r.city;
if (r.refer != "") {
_this.visitor.refer = r.refer
} else {
_this.visitor.refer = "-";
}
//_this.visitor.visitor_id=r.visitor_id;
_this.chatTitle = "#" + r.id + "|" + r.name;
_this.chatTitleType = "success";
_this.visitorExtra = [];
if (r.extra != "") {
var extra = JSON.parse(b64ToUtf8(r.extra));
if (typeof extra == "string") {
extra = JSON.parse(extra);
}
for (var key in extra) {
if (extra[key] == "") {
extra[key] = "无";
}
if (key == "visitorAvatar" || key == "visitorName" || key == "visitorProduct") continue;
var temp = { key: key, val: extra[key] }
_this.visitorExtra.push(temp);
}
}
}
if (data.code != 200) {
_this.$message({
message: data.msg,
type: 'error'
});
}
}
});
},
//获取访客信息
getWechatOauth(visitor_id) {
var _this = this;
$.ajax({
type: "get",
url: "/wechat/oauth",
data: { visitor_id: visitor_id },
headers: {
"token": localStorage.getItem("token")
},
success: function (data) {
if (data.code == 400) {
_this.visitor.wechat_oauth = "未绑定"
} else {
_this.visitor.wechat_oauth = "已绑定"
}
}
});
},
//关闭服务
stopServer() {
var _this = this;
this.sendAjax("/system/stop", "get", {}, function (res) {
_this.$message({
message: "服务在守护模式下会重启,非守护则直接关闭",
type: 'success'
});
});
},
//更新过期时间
updateUserExpired(kefuName, expiredTime) {
var _this = this;
this.sendAjax("/kefu/kefuExpiredTime", "POST", { name: kefuName, expired_time: expiredTime }, function (result) {
_this.kefuListOwnPage(_this.kefuList.page);
});
},
//删除访客聊天记录
delThisTag(id) {
var _this = this;
this.$confirm('此操作将删除tag, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
_this.sendAjax("/kefu/delThisTag", "get", { tag_id: id }, function (result) {
_this.$message({
type: 'success',
message: result.msg
});
_this.getTags();
});
});
},
//删除营销会员
deleteCustomer(id) {
var _this = this;
this.$confirm('此操作将删除会员, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
_this.sendAjax("/kefu/deleteCustomer", "get", { id: id }, function (result) {
_this.$message({
type: 'success',
message: result.msg
});
_this.getCustomers(_this.customers.page);
});
});
},
//导出访客记录
exportVisitorMessage(visitorId) {
window.open("/kefu/exportVisitorMessage?token=" + localStorage.getItem("token") + "&visitor_id=" + visitorId)
},
//充值
userCharge(id) {
var _this = this;
this.$confirm('此操作将为用户充值, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
var data = {
"kefu_name": _this.settingCharge.username,
"money": _this.settingCharge.money,
"payment": _this.settingCharge.payment,
}
_this.sendAjax("/system/userCharge", "post", data, function (result) {
_this.$message({
type: 'success',
message: result.msg
});
});
});
},
//生成永久带参二维码
userWeixinMarketing(kefuName) {
var _this = this;
this.$confirm('此操作将为用户生成永久带参二维码, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
if (!kefuName) {
kefuName = _this.settingCharge.username;
}
var data = {
"kefu_name": kefuName
}
_this.sendAjax("/admin/userMarketingQrcode", "post", data, function (result) {
var avator = result.logo;
var html = `
<div style="width:390px;height: 390px;position: relative">
<img src="`+ result.url + `" style="width:390px;height: 390px;position: absolute;top: 0;left: 0;"/>
<img src="`+ avator + `" style="top:50%;margin-top:-30px;left:50%;margin-left:-30px;position:absolute;border:2px solid #fff;width: 60px;height:60px;border-radius: 8px;"/>
</div>
`;
_this.$alert(html, "请将二维码截图保存到本地", {
dangerouslyUseHTMLString: true,
});
_this.$message({
type: 'success',
message: "请将二维码截图保存到本地"
});
});
});
},
//获取短信验证码
getSmsCode() {
var _this = this;
params = { phone: this.kefuInfo.tel };
this.sendAjax("/kefu/sendSms", "get", params, function (data) {
_this.$message({
message: data.msg,
type: 'success'
});
_this.sms.disable = true;
_this.sms.txt = _this.sms.count + 's后重发'
var countDown = setInterval(function () {
if (_this.sms.count < 1) {
_this.sms.disable = false;
_this.sms.txt = _this.flyLang.sendSms;
_this.sms.count = 60;
clearInterval(countDown);
} else {
_this.sms.disable = true
_this.sms.txt = --_this.sms.count + 's后重发'
}
}, 1000);
});
},
//绑定手机号
postBindTel() {
var _this = this;
var params = { phone: this.kefuInfo.tel, code: this.sms.code };
this.sendAjax("/kefu/bindTel", "post", params, function (result) {
_this.$message({
message: "绑定成功!",
type: 'success'
});
});
},
//提交IP黑名单
postIpBlack() {
var _this = this;
this.sendAjax("/system/ipblacks", "post", {
ip: this.ipAddress,
name: this.ipAddressName
}, function () {
_this.$message({
message: "ok",
type: 'success'
});
_this.sendAjax("/system/ipblacks", "get", { page: 1, pagesize: 100000 }, function (result) {
_this.ipblackList = result.list;
});
});
},
//获取监控列表
getMonitorList() {
var _this = this;
this.sendAjax("/kefu/monitorList", "get", {}, function (result) {
_this.monitorList = result;
});
},
//设置机器人信息
getRobotInfo() {
let _this = this;
this.sendAjax("/kefu/robotInfo", "GET", {}, function (result) {
result.avator = result.avator != "" ? result.avator : _this.kefuInfo.avator;
result.name = result.name != "" ? result.name : _this.kefuInfo.nickname;
let status = result.status == "" ? "1" : result.status;
result.status = status;
_this.robotInfo = result;
});
},
//设置机器人信息
setRobotInfo() {
let _this = this;
this.sendAjax("/kefu/setRobotInfo", "POST", this.robotInfo, function (result) {
_this.$message({
message: "修改成功",
type: 'success'
});
_this.getRobotInfo();
});
},
//设置机器人卡片
setRobotCard() {
let card = this.editor.txt.html();
this.setEntConfigItem("机器人卡片", "RobotCard", card);
},
/**
* 连接websocket
*/
connect() {
var _this = this;
var domain = getDomainFromUrl("");
var protocol = getProtocolFromUrl("");
var wsProtocol = "ws://";
if (protocol == "https") {
wsProtocol = "wss://";
}
let ws = new WebSocket(wsProtocol + domain + "/ws_kefu?token=" + localStorage.getItem("token"));
ws.onopen = function () {
console.log('WebSocket 连接已打开');
_this.reconnectTimes = 0;
};
ws.onclose = function () {
console.log('WebSocket 连接已关闭');
// 尝试重连
_this.reconnect();
};
ws.onmessage = function (event) {
console.log(`收到服务器的消息:${event.data}`);
// 解析消息
const message = JSON.parse(event.data);
//监控列表删除
if (message.type === 'monitorOffline') {
let id = message.data.UinqId;
_this.monitorList = removeObjects(_this.monitorList, "UinqId", id);
}
//监控列表增加
if (message.type === 'monitorOnline') {
let obj = message.data;
_this.monitorList.push(obj);
}
};
_this.ws = ws;
},
// 尝试重连
reconnect() {
var _this = this;
if (_this.reconnectTimes >= _this.MAX_RECONNECT_TIMES) {
console.log('重连失败');
return;
}
_this.reconnectTimes++;
console.log(`正在尝试重连(第 ${_this.reconnectTimes} 次)`);
setTimeout(function () {
_this.connect();
}, _this.RECONNECT_INTERVAL);
},
copyText(text) {
copyText(text);
this.$message({
message: "success",
type: 'success'
});
},
replaceSpecialTag(html) {
return replaceSpecialTag(html);
},
//编辑顾客
getConsumer(row) {
this.consumers.form = row;
this.consumers.dialog = true;
},
//设置顾客信息
setConsumerForm(formName) {
let _this = this;
this.$refs[formName].validate((valid) => {
if (!valid) {
return false;
} else {
this.sendAjax("/kefu/setConsumers", "POST", this.consumers.form, function (result) {
_this.consumers.dialog = false;
_this.getConsumers(_this.consumers.page);
_this.$message({
message: "success",
type: 'success'
});
});
}
});
},
//获取顾客列表
getConsumers(page) {
let _this = this;
let params = {};
params = { pagesize: 10, page: page };
this.sendAjax("/kefu/consumers", "GET", params, function (result) {
_this.consumers.count = result.count;
_this.consumers.list = result.list;
_this.consumers.page = result.page;
_this.consumers.pagesize = result.pagesize;
});
},
//删除顾客
delConsumers(id) {
var _this = this;
this.$confirm('此操作将删除顾客, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(function () {
_this.sendAjax("/kefu/delConsumers", "get", { id: id }, function (result) {
_this.$message({
type: 'success',
message: result.msg
});
_this.getConsumers(_this.consumers.page);
});
});
},
//学习库列表
getLearns(page) {
let _this = this;
let params = {};
params = { pagesize: this.learns.pagesize, page: page };
this.sendAjax("/kefu/learns", "GET", params, function (result) {
_this.learns.count = result.count;
_this.learns.list = result.list;
_this.learns.page = result.page;
_this.learns.pagesize = result.pagesize;
});
},
//补充知识库
learnToArticle(content) {
this.article.title = content;
this.article.search_type = 1;
this.articleDialog = true;
},
//切换知识库解决状态
switchLearnStatus: function (status, id) {
var _this = this;
this.sendAjax("/kefu/learnStatus", "POST", { status: status, id: id }, function (result) {
});
},
//处理tab切换
handleTabClick(tab, event) {
if (tab.name == "learnList") {
this.getLearns(1);
}
if (tab.name == "articleList") {
this.getArticleCate();
this.getArticle(1);
}
if (tab.name == "robotCard") {
if (!this.editor) this.initEditor();
this.editor.txt.html(this.getConfig("RobotCard"));
}
//离线时回复
if (tab.name == "offlineSetting") {
if (!this.editor) this.initEditor("#offlineSettingEditor");
this.editor.txt.html(this.getConfig("KefuOfflineNotice"));
}
},
setRobotCardSource() {
if (this.robotCard != "") {
this.robotCard = "";
} else {
this.robotCard = this.editor.txt.html();
}
},
//获取配置
getConfigs(callback) {
var _this = this;
this.sendAjax("/kefu/ent_configs", "get", {}, function (result) {
_this.configs = result;
if (callback) callback();
});
},
getConfig(key) {
for (index in this.configs) {
if (key == this.configs[index].conf_key) {
return this.configs[index].conf_value;
}
}
return "";
},
getConfigByAdmin(key) {
for (index in this.kefuSetting) {
if (key == this.kefuSetting[index].conf_key) {
return this.kefuSetting[index].conf_value;
}
}
return "";
},
setConfig(key, value) {
for (index in this.configs) {
if (key == this.configs[index].conf_key) {
this.configs[index].conf_value = value;
return;
}
}
return "";
},
//获取微信客服配置
getKefuWeworkConfig() {
this.kefuWework.corpid = this.getConfig("kefuWeworkCorpid");
this.kefuWework.secret = this.getConfig("kefuWeworkSecret");
this.kefuWework.token = this.getConfig("kefuWeworkToken");
this.kefuWework.encodingAESKey = this.getConfig("kefuWeworkEncodingAESKey");
this.wework.corpid = this.getConfig("WorkWechatCorpid");
this.wework.webhook = this.getConfig("WorkWechatWebHookUrl");
this.wework.agentid = this.getConfig("WorkWechatAppAgentId");
this.wework.secret = this.getConfig("WorkWechatAppSecret");
this.wework.encodingAESKey = this.getConfig("WorkWechatAppEncodingAESKey");
this.wework.token = this.getConfig("WorkWechatAppToken");
this.wechatMini.appid = this.getConfig("WechatMiniAppId");
this.wechatMini.appsecret = this.getConfig("WechatMiniAppSecret");
this.wechatMini.token = this.getConfig("WechatMiniToken");
this.wechatMini.templateId = this.getConfig("WechatMiniTemplateId");
this.wechatMini.pages = this.getConfig("WechatMiniPages");
this.wechatOfficial.appid = this.getConfig("WechatAppId");
this.wechatOfficial.appsecret = this.getConfig("WechatAppSecret");
this.wechatOfficial.token = this.getConfig("WechatAppToken");
this.wechatOfficial.kefuTemplateId = this.getConfig("WechatMessageTemplateId");
this.wechatOfficial.kefuTemplateColumn = this.getConfig("WechatMessageTemplateColumn");
this.wechatOfficial.isReply = this.getConfig("WechatKefu");
this.wechatOfficial.menu = this.getConfig("WechatMenu");
},
//获取微信客服列表
getKefuWeworkList() {
let _this = this;
this.sendAjax("/kefu/kefuWeworkList", "GET", {}, function (res) {
let weworkRet = JSON.parse(res);
console.log(weworkRet);
if (weworkRet.errcode != 0) {
_this.$message({
message: weworkRet.errmsg,
type: 'error'
});
return;
}
_this.kefuWeworkList = weworkRet.account_list;
});
},
//获取微信客服链接
getKefuWeworkLink(openKfId) {
let _this = this;
this.sendAjax("/kefu/kefuWeworkLink", "GET", { open_kfid: openKfId }, function (res) {
let weworkRet = JSON.parse(res);
console.log(weworkRet);
_this.kefuWework.link = weworkRet.url;
});
},
//生成微信公众号菜单
mkWechatMenu() {
let _this = this;
this.sendAjax("/kefu/mkWechatMenu", "GET", {}, function (res) {
_this.$message({
message: "创建成功",
type: 'success'
});
});
},
//删除微信公众号菜单
delWechatMenu() {
let _this = this;
this.sendAjax("/kefu/delWechatMenu", "GET", {}, function (res) {
_this.$message({
message: "success",
type: 'success'
});
});
},
//搜索知识库
searchArticle() {
if (!this.articles.search) return;
let _this = this;
this.sendAjax("/2/searchQuestion", "GET", {
"ent_id": this.entId,
"content": this.articles.search,
}, function (res) {
console.log(res);
_this.articles.list = res;
});
},
//上传文件失败
uploadQdrantSuccess(response, file, fileList) {
this.loading.close();
if (response.code == 20000) {
this.$message({
message: "上传成功",
type: 'success'
});
} else {
this.$message({
message: response.msg,
type: 'error'
});
}
},
//上传文件失败
uploadQdrantError() {
this.loading.close();
},
//上传之前
beforeuploadQdrant(file) {
if (!this.chatGPT.qdrantAICollect) {
this.$message.error('管理员开通向量知识库集合权限后才能使用!');
return false;
}
var isLt2M = file.size / 1024 / 1024 < 1;
if (!isLt2M) {
this.$message.error('上传文档大小不能超过 1MB!');
return false;
}
this.loading = this.$loading({
lock: true,
text: "上传中",
});
let ext = file.name.substring(file.name.lastIndexOf(".") + 1);
if (ext != 'xlsx') {
this.$message.error('上传文件只能是 .xlsx 格式!');
this.loading.close();
return false;
}
},
//设置接待时间
postWorkTime() {
let workDay = this.workTimeSetting.workDay.join("|");
let morningWorkTime = this.workTimeSetting.morningWorkTime.join("|");
let afternoonWorkTime = this.workTimeSetting.afternoonWorkTime.join("|");
let otherWorkTime = this.workTimeSetting.otherWorkTime;
if (otherWorkTime) {
otherWorkTime = otherWorkTime.join("|");
}
let _this = this;
this.sendAjax("/kefu/postWorkTime", "POST", {
workDay: workDay,
morningWorkTime: morningWorkTime,
afternoonWorkTime: afternoonWorkTime,
otherWorkTime: otherWorkTime,
workTimeStatus: this.workTimeSetting.workTimeStatus,
afterWorkMessage: this.workTimeSetting.afterWorkMessage,
}, function (res) {
_this.getWorkTime();
_this.$message({
message: "success",
type: 'success'
});
});
}
, getWorkTime() {
let _this = this;
this.getConfigs(function () {
_this.workTimeSetting.workTimeStatus = _this.getConfig("workTimeStatus");
let morningWorkTime = _this.getConfig("morningWorkTime");
if (morningWorkTime) {
_this.workTimeSetting.morningWorkTime = morningWorkTime.split("|");
}
let afternoonWorkTime = _this.getConfig("afternoonWorkTime");
if (afternoonWorkTime) {
_this.workTimeSetting.afternoonWorkTime = afternoonWorkTime.split("|");
}
let otherWorkTime = _this.getConfig("otherWorkTime");
if (otherWorkTime) {
_this.workTimeSetting.otherWorkTime = otherWorkTime.split("|");
}
let workDay = _this.getConfig("workDay");
if (workDay) {
_this.workTimeSetting.workDay = workDay.split("|");
}
let afterWorkMessage = _this.getConfig("afterWorkMessage");
if (afterWorkMessage) {
_this.workTimeSetting.afterWorkMessage = afterWorkMessage;
}
_this.fanyiSource = _this.getConfig("FanyiSource");
_this.baiduFanyiAuto = _this.getConfig("BaiduFanyiAuto");
_this.baiduFanyiAppId = _this.getConfig("BaiduFanyiAppId");
_this.baiduFanyiAppSec = _this.getConfig("BaiduFanyiAppSec");
});
},
},
mounted: function () {
let url = getQuery("url")
if (url != "") {
this.iframeUrl = url;
if (url == "setting_welcome") this.tabIndex = "1-5";
if (url == "setting_deploy") {
this.tabIndex = "3-4";
this.openIndex = [3];
}
}
this.initInfo();
let tabActive = getQuery("tab");
if (tabActive != "") this.tabActive = tabActive;
},
created: function () {
// if(ACTION=="setting"){
// this.showNotice();
// }
}
})
</script>
</html>
{{end}}