fix: add aicss path prefix

This commit is contained in:
goder-zhang 2026-02-14 15:44:21 +00:00
parent 25d823769f
commit 2e7fb387cf
18 changed files with 139 additions and 134 deletions

View File

@ -10,6 +10,7 @@ import (
"log" "log"
"net/http" "net/http"
"os" "os"
"path"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -54,10 +55,13 @@ func run() {
log.Println("start server...\r\ngohttp://" + baseServer) log.Println("start server...\r\ngohttp://" + baseServer)
tools.Logger().Println("start server...\r\ngohttp://" + baseServer) tools.Logger().Println("start server...\r\ngohttp://" + baseServer)
engine := gin.Default() var (
engine = gin.Default()
basePath = "aicss"
)
engine.LoadHTMLGlob("static/templates/*") engine.LoadHTMLGlob("static/templates/*")
engine.Static("/assets", "./static") engine.Static(path.Join(basePath, "/assets"), "./static")
engine.Static("/static", "./static") engine.Static(path.Join(basePath, "/static"), "./static")
engine.Use(tools.Session("gofly")) engine.Use(tools.Session("gofly"))
engine.Use(middleware.CrossSite) engine.Use(middleware.CrossSite)
//性能监控 //性能监控
@ -66,8 +70,9 @@ func run() {
//记录日志 //记录日志
engine.Use(middleware.NewMidLogger()) engine.Use(middleware.NewMidLogger())
engine.Use(xpink_auth.MiddlewareSetIdentity) engine.Use(xpink_auth.MiddlewareSetIdentity)
router.InitViewRouter(engine) routerGroup := engine.Group(basePath)
router.InitApiRouter(engine) router.InitViewRouter(routerGroup)
router.InitApiRouter(routerGroup)
//记录pid //记录pid
os.WriteFile("gofly.sock", []byte(fmt.Sprintf("%d,%d", os.Getppid(), os.Getpid())), 0666) os.WriteFile("gofly.sock", []byte(fmt.Sprintf("%d,%d", os.Getppid(), os.Getpid())), 0666)
//限流类 //限流类

View File

@ -183,7 +183,7 @@ func PostKefuRegister(c *gin.Context) {
name := c.PostForm("username") name := c.PostForm("username")
password := c.PostForm("password") password := c.PostForm("password")
nickname := c.PostForm("nickname") nickname := c.PostForm("nickname")
avatar := "/static/images/4.jpg" avatar := "/aicss/static/images/4.jpg"
if name == "" || password == "" { if name == "" || password == "" {
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{

View File

@ -2,6 +2,7 @@ package controller
import ( import (
"ai-css/models" "ai-css/models"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )

View File

@ -64,9 +64,9 @@ func PostVisitorLogin(c *gin.Context) {
avator := "" avator := ""
userAgent := c.GetHeader("User-Agent") userAgent := c.GetHeader("User-Agent")
if tools.IsMobile(userAgent) { if tools.IsMobile(userAgent) {
avator = "/static/images/1.png" avator = "/aicss/static/images/1.png"
} else { } else {
avator = "/static/images/2.png" avator = "/aicss/static/images/2.png"
} }
toId := c.PostForm("to_id") toId := c.PostForm("to_id")

View File

@ -8,7 +8,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
func InitApiRouter(engine *gin.Engine) { func InitApiRouter(engine *gin.RouterGroup) {
//路由分组 //路由分组
v2 := engine.Group("/2") v2 := engine.Group("/2")
{ {

View File

@ -3,10 +3,11 @@ package router
import ( import (
"ai-css/middleware" "ai-css/middleware"
"ai-css/tmpl" "ai-css/tmpl"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
func InitViewRouter(engine *gin.Engine) { func InitViewRouter(engine *gin.RouterGroup) {
engine.GET("/", tmpl.PageIndex) engine.GET("/", tmpl.PageIndex)
engine.GET("/login", tmpl.PageLogin) engine.GET("/login", tmpl.PageLogin)

View File

@ -94,7 +94,7 @@ var faceTitles = ["[微笑]", "[嘻嘻]", "[哈哈]", "[可爱]", "[可怜]", "[
function placeFace() { function placeFace() {
var faces=[]; var faces=[];
for(var i=0;i<faceTitles.length;i++){ for(var i=0;i<faceTitles.length;i++){
faces[faceTitles[i]]="/static/images/face/"+i+".gif"; faces[faceTitles[i]]="/aicss/static/images/face/"+i+".gif";
} }
return faces; return faces;
} }
@ -129,49 +129,49 @@ function replaceAttachment(str){
var imgSrc=""; var imgSrc="";
switch(info.ext){ switch(info.ext){
case ".mp3": case ".mp3":
imgSrc="/static/images/ext/MP3.png"; imgSrc="/aicss/static/images/ext/MP3.png";
break; break;
case ".zip": case ".zip":
imgSrc="/static/images/ext/ZIP.png"; imgSrc="/aicss/static/images/ext/ZIP.png";
break; break;
case ".txt": case ".txt":
imgSrc="/static/images/ext/TXT.png"; imgSrc="/aicss/static/images/ext/TXT.png";
break; break;
case ".7z": case ".7z":
imgSrc="/static/images/ext/7z.png"; imgSrc="/aicss/static/images/ext/7z.png";
break; break;
case ".bpm": case ".bpm":
imgSrc="/static/images/ext/BMP.png"; imgSrc="/aicss/static/images/ext/BMP.png";
break; break;
case ".png": case ".png":
imgSrc="/static/images/ext/PNG.png"; imgSrc="/aicss/static/images/ext/PNG.png";
break; break;
case ".jpg": case ".jpg":
imgSrc="/static/images/ext/JPG.png"; imgSrc="/aicss/static/images/ext/JPG.png";
break; break;
case ".jpeg": case ".jpeg":
imgSrc="/static/images/ext/JPEG.png"; imgSrc="/aicss/static/images/ext/JPEG.png";
break; break;
case ".pdf": case ".pdf":
imgSrc="/static/images/ext/PDF.png"; imgSrc="/aicss/static/images/ext/PDF.png";
break; break;
case ".doc": case ".doc":
imgSrc="/static/images/ext/DOC.png"; imgSrc="/aicss/static/images/ext/DOC.png";
break; break;
case ".docx": case ".docx":
imgSrc="/static/images/ext/DOCX.png"; imgSrc="/aicss/static/images/ext/DOCX.png";
break; break;
case ".rar": case ".rar":
imgSrc="/static/images/ext/RAR.png"; imgSrc="/aicss/static/images/ext/RAR.png";
break; break;
case ".xlsx": case ".xlsx":
imgSrc="/static/images/ext/XLSX.png"; imgSrc="/aicss/static/images/ext/XLSX.png";
break; break;
case ".csv": case ".csv":
imgSrc="/static/images/ext/XLSX.png"; imgSrc="/aicss/static/images/ext/XLSX.png";
break; break;
default: default:
imgSrc="/static/images/ext/default.png"; imgSrc="/aicss/static/images/ext/default.png";
break; break;
} }
var html= `<div onclick="window.open('`+info.path+`')" class="productCard"> var html= `<div onclick="window.open('`+info.path+`')" class="productCard">

View File

@ -25,7 +25,7 @@ GOFLY.init=function(config){
if (typeof config.GOFLY_URL!="undefined"){ if (typeof config.GOFLY_URL!="undefined"){
this.GOFLY_URL=config.GOFLY_URL.replace(/([\w\W]+)\/$/,"$1"); this.GOFLY_URL=config.GOFLY_URL.replace(/([\w\W]+)\/$/,"$1");
} }
this.dynamicLoadCss(this.GOFLY_URL+"/static/css/gofly-front.css?v=1"); this.dynamicLoadCss(this.GOFLY_URL+"/aicss/static/css/gofly-front.css?v=1");
if (typeof config.GOFLY_KEFU_ID!="undefined"){ if (typeof config.GOFLY_KEFU_ID!="undefined"){
this.GOFLY_KEFU_ID=config.GOFLY_KEFU_ID; this.GOFLY_KEFU_ID=config.GOFLY_KEFU_ID;
@ -50,7 +50,7 @@ GOFLY.init=function(config){
this.GOFLY_EXTRA.host=document.location.href; this.GOFLY_EXTRA.host=document.location.href;
this.GOFLY_EXTRA=JSON.stringify(_this.GOFLY_EXTRA); this.GOFLY_EXTRA=JSON.stringify(_this.GOFLY_EXTRA);
this.dynamicLoadJs(this.GOFLY_URL+"/assets/js/functions.js?v=1",function(){ this.dynamicLoadJs(this.GOFLY_URL+"/aicss/assets/js/functions.js?v=1",function(){
if (typeof config.GOFLY_LANG!="undefined"){ if (typeof config.GOFLY_LANG!="undefined"){
_this.GOFLY_LANG=config.GOFLY_LANG; _this.GOFLY_LANG=config.GOFLY_LANG;
}else{ }else{

View File

@ -54,19 +54,19 @@ KEFU.init=function(config){
if (typeof config.KEFU_URL!="undefined"){ if (typeof config.KEFU_URL!="undefined"){
this.KEFU_URL=config.KEFU_URL.replace(/([\w\W]+)\/$/,"$1"); this.KEFU_URL=config.KEFU_URL.replace(/([\w\W]+)\/$/,"$1");
} }
this.dynamicLoadCss(this.KEFU_URL+"/static/css/kefu-front.css?v="+Date.now()); this.dynamicLoadCss(this.KEFU_URL+"/aicss/static/css/kefu-front.css?v="+Date.now());
this.dynamicLoadCss(this.KEFU_URL+"/static/css/layui/css/layui.css?v="+Date.now()); this.dynamicLoadCss(this.KEFU_URL+"/aicss/static/css/layui/css/layui.css?v="+Date.now());
var refer=document.referrer?document.referrer:"none"; var refer=document.referrer?document.referrer:"none";
this.KEFU_EXTRA.refer=refer; this.KEFU_EXTRA.refer=refer;
this.KEFU_EXTRA.host=document.location.href; this.KEFU_EXTRA.host=document.location.href;
this.KEFU_EXTRA=JSON.stringify(_this.KEFU_EXTRA); this.KEFU_EXTRA=JSON.stringify(_this.KEFU_EXTRA);
this.dynamicLoadJs(this.KEFU_URL+"/static/js/functions.js?v=1",function(){ this.dynamicLoadJs(this.KEFU_URL+"/aicss/static/js/functions.js?v=1",function(){
_this.dynamicLoadJs("https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js",function () { _this.dynamicLoadJs("https://cdn.staticfile.org/jquery/3.6.0/jquery.min.js",function () {
jQuery.noConflict(); jQuery.noConflict();
_this.dynamicLoadJs(_this.KEFU_URL+"/static/js/layer/layer.js",function () { _this.dynamicLoadJs(_this.KEFU_URL+"/aicss/static/js/layer/layer.js",function () {
_this.jsCallBack(); _this.jsCallBack();
}); });
}); });
@ -292,7 +292,7 @@ KEFU.layerOpen=function (width,height,offset){
var title=` var title=`
<div class="kfBar"> <div class="kfBar">
<div class="kfBarAvator"> <div class="kfBarAvator">
<img src="`+this.KEFU_URL+`/static/images/4.jpg" class="kfBarLogo"> <img src="`+this.KEFU_URL+`/aicss/static/images/4.jpg" class="kfBarLogo">
</div> </div>
<div class="kfBarText"> <div class="kfBarText">

View File

@ -62,7 +62,7 @@
} }
} }
</style> </style>
<link rel="icon" href="/static/images/favicon.ico"> <link rel="icon" href="/aicss/static/images/favicon.ico">
</head> </head>
<body> <body>
<div id="app" class="signin"> <div id="app" class="signin">
@ -107,7 +107,7 @@
phone:this.kefuForm.phone, phone:this.kefuForm.phone,
password:this.kefuForm.password, password:this.kefuForm.password,
}; };
$.post("/2/bindOfficial", data, function (data) { $.post("/aicss/2/bindOfficial", data, function (data) {
if (data == "success") { if (data == "success") {
_this.$message({ _this.$message({
message: "认证成功!", message: "认证成功!",

View File

@ -4,14 +4,14 @@
<meta name="description" content=""> <meta name="description" content="">
<meta name="author" content=""> <meta name="author" content="">
<title>GOFLY - Open Source Customer Support System</title> <title>GOFLY - Open Source Customer Support System</title>
<link rel="stylesheet" href="/static/cdn/element-ui/2.15.1/theme-chalk/index.min.css"> <link rel="stylesheet" href="/aicss/static/cdn/element-ui/2.15.1/theme-chalk/index.min.css">
<script src="/static/cdn/vue/2.6.11/vue.min.js"></script> <script src="/aicss/static/cdn/vue/2.6.11/vue.min.js"></script>
<script src="/static/cdn/element-ui/2.15.1/index.js"></script> <script src="/aicss/static/cdn/element-ui/2.15.1/index.js"></script>
<script src="/static/cdn/jquery/3.6.0/jquery.min.js"></script> <script src="/aicss/static/cdn/jquery/3.6.0/jquery.min.js"></script>
<link rel="stylesheet" href="/static/css/common.css?v=dgftr65ujhfg"> <link rel="stylesheet" href="/aicss/static/css/common.css?v=dgftr65ujhfg">
<script src="/assets/js/functions.js"></script> <script src="/aicss/assets/js/functions.js"></script>
<script src="/assets/js/reconnecting-websocket.min.js"></script> <script src="/aicss/assets/js/reconnecting-websocket.min.js"></script>
<link rel="stylesheet" href="/static/css/icon/iconfont.css?v=fgjlgfda"/> <link rel="stylesheet" href="/aicss/static/css/icon/iconfont.css?v=fgjlgfda"/>
<style> <style>
html, body {overflow:hidden;height: 100%;padding: 0;margin: 0;background-color: #f5f5f5;} html, body {overflow:hidden;height: 100%;padding: 0;margin: 0;background-color: #f5f5f5;}
.el-row{width:100%} .el-row{width:100%}
@ -125,11 +125,11 @@
</el-tooltip> </el-tooltip>
<el-tooltip content="Upload Image" placement="top"> <el-tooltip content="Upload Image" placement="top">
<div class="iconBtn el-icon-picture" id="uploadImg" v-on:click="uploadImg('/uploadimg')" style="font-size: 24px;"></div> <div class="iconBtn el-icon-picture" id="uploadImg" v-on:click="uploadImg('/aicss/uploadimg')" style="font-size: 24px;"></div>
</el-tooltip> </el-tooltip>
<el-tooltip content="Upload File" placement="top"> <el-tooltip content="Upload File" placement="top">
<div class="iconBtn el-icon-upload" id="uploadFile" v-on:click="uploadFile('/uploadfile')" style="font-size: 26px;"></div> <div class="iconBtn el-icon-upload" id="uploadFile" v-on:click="uploadFile('/aicss/uploadfile')" style="font-size: 26px;"></div>
</el-tooltip> </el-tooltip>
</div> </div>
@ -252,15 +252,15 @@
<!-- Image Preview --> <!-- Image Preview -->
<div id="bigPic" class="bigPic"> <div id="bigPic" class="bigPic">
<img src="/static/images/3.jpg"/> <img src="/aicss/static/images/3.jpg"/>
</div> </div>
<!-- Audio Elements --> <!-- Audio Elements -->
<audio id="chatMessageAudio"> <audio id="chatMessageAudio">
<source id="chatMessageAudioSource" src="/static/images/alert2.ogg" type="audio/mpeg" /> <source id="chatMessageAudioSource" src="/aicss/static/images/alert2.ogg" type="audio/mpeg" />
</audio> </audio>
<audio id="chatMessageSendAudio"> <audio id="chatMessageSendAudio">
<source id="chatMessageSendAudioSource" src="/static/images/sent.ogg" type="audio/mpeg" /> <source id="chatMessageSendAudioSource" src="/aicss/static/images/sent.ogg" type="audio/mpeg" />
</audio> </audio>
<!-- Transfer Dialog --> <!-- Transfer Dialog -->
@ -321,7 +321,7 @@
rightTabActive:"visitorInfo", rightTabActive:"visitorInfo",
users:[], users:[],
usersMap:[], usersMap:[],
server:getWsBaseUrl()+"/ws_kefu?aicss-token="+localStorage.getItem("aicss-token"), server:getWsBaseUrl()+"/aicss/ws_kefu?aicss-token="+localStorage.getItem("aicss-token"),
//server:getWsBaseUrl()+"/chat_server", //server:getWsBaseUrl()+"/chat_server",
socket:null, socket:null,
socketClosed:false, socketClosed:false,
@ -420,7 +420,7 @@
confirmButtonText: '确定', confirmButtonText: '确定',
callback:function () { callback:function () {
localStorage.removeItem("aicss-token"); localStorage.removeItem("aicss-token");
window.location.href="/login"; window.location.href="/aicss/login";
} }
}); });
@ -532,7 +532,7 @@
mes.from_id = this.kfConfig.id; mes.from_id = this.kfConfig.id;
mes.to_id = this.currentGuest; mes.to_id = this.currentGuest;
mes.content = this.messageContent; mes.content = this.messageContent;
this.sendAjax("/kefu/message","POST",mes,function(res){ this.sendAjax("/aicss/kefu/message","POST",mes,function(res){
_this.sendDisabled=false; _this.sendDisabled=false;
if(res.code!=200){ if(res.code!=200){
_this.$message({ _this.$message({
@ -638,7 +638,7 @@
let _this=this; let _this=this;
$.ajax({ $.ajax({
type:"get", type:"get",
url:"/kefuinfo", url:"/aicss/kefuinfo",
headers:{ headers:{
"aicss-token":localStorage.getItem("aicss-token") "aicss-token":localStorage.getItem("aicss-token")
}, },
@ -663,7 +663,7 @@
let _this=this; let _this=this;
$.ajax({ $.ajax({
type:"get", type:"get",
url:"/visitors_kefu_online", url:"/aicss/visitors_kefu_online",
headers:{ headers:{
"aicss-token":localStorage.getItem("aicss-token") "aicss-token":localStorage.getItem("aicss-token")
}, },
@ -681,7 +681,7 @@
}); });
} }
if(data.code==400){ if(data.code==400){
window.location.href="/login"; window.location.href="/aicss/login";
} }
} }
}); });
@ -693,7 +693,7 @@
visitor_id: this.currentGuest, visitor_id: this.currentGuest,
} }
let _this=this; let _this=this;
$.get("/2/messagesPages",params,function(res){ $.get("/aicss/2/messagesPages",params,function(res){
let msgList=res.result.list; let msgList=res.result.list;
if(msgList.length>=_this.messages.pagesize){ if(msgList.length>=_this.messages.pagesize){
_this.showLoadMore=true; _this.showLoadMore=true;
@ -727,7 +727,7 @@
let _this=this; let _this=this;
$.ajax({ $.ajax({
type:"get", type:"get",
url:"/messages?visitorId="+visitorId, url:"/aicss/messages?visitorId="+visitorId,
headers:{ headers:{
"aicss-token":localStorage.getItem("aicss-token") "aicss-token":localStorage.getItem("aicss-token")
}, },
@ -765,7 +765,7 @@
}); });
} }
if(data.code==400){ if(data.code==400){
window.location.href="/login"; window.location.href="/aicss/login";
} }
} }
}); });
@ -775,7 +775,7 @@
let _this=this; let _this=this;
$.ajax({ $.ajax({
type:"get", type:"get",
url:"/visitor", url:"/aicss/visitor",
data:{visitorId:vid}, data:{visitorId:vid},
headers:{ headers:{
"aicss-token":localStorage.getItem("aicss-token") "aicss-token":localStorage.getItem("aicss-token")
@ -826,7 +826,7 @@
let _this=this; let _this=this;
$.ajax({ $.ajax({
type:"get", type:"get",
url:"/2/message_close", url:"/aicss/2/message_close",
data:{visitor_id:visitorId}, data:{visitor_id:visitorId},
headers:{ headers:{
"aicss-token":localStorage.getItem("aicss-token") "aicss-token":localStorage.getItem("aicss-token")
@ -862,7 +862,7 @@
let _this=this; let _this=this;
$.ajax({ $.ajax({
type:"get", type:"get",
url:"/visitors", url:"/aicss/visitors",
data:{page:page}, data:{page:page},
headers:{ headers:{
"aicss-token":localStorage.getItem("aicss-token") "aicss-token":localStorage.getItem("aicss-token")
@ -991,7 +991,7 @@
let _this=this; let _this=this;
$.ajax({ $.ajax({
type:"post", type:"post",
url:"/ipblack", url:"/aicss/ipblack",
data:{ip:ip}, data:{ip:ip},
headers:{ headers:{
"aicss-token":localStorage.getItem("aicss-token") "aicss-token":localStorage.getItem("aicss-token")
@ -1030,7 +1030,7 @@
var formData = new FormData(); var formData = new FormData();
formData.append('imgfile', file); formData.append('imgfile', file);
$.ajax({ $.ajax({
url: '/uploadimg', url: '/aicss/uploadimg',
type: "post", type: "post",
data: formData, data: formData,
contentType: false, contentType: false,
@ -1071,14 +1071,14 @@
transKefu(){ transKefu(){
this.transKefuDialog=true; this.transKefuDialog=true;
var _this=this; var _this=this;
this.sendAjax("/other_kefulist","get",{},function(result){ this.sendAjax("/aicss/other_kefulist","get",{},function(result){
_this.otherKefus=result; _this.otherKefus=result;
}); });
}, },
//转移访客客服 //转移访客客服
transKefuVisitor(kefu,visitorId){ transKefuVisitor(kefu,visitorId){
var _this=this; var _this=this;
this.sendAjax("/trans_kefu","get",{kefu_id:kefu,visitor_id:visitorId},function(result){ this.sendAjax("/aicss/trans_kefu","get",{kefu_id:kefu,visitor_id:visitorId},function(result){
//_this.otherKefus=result; //_this.otherKefus=result;
_this.transKefuDialog = false _this.transKefuDialog = false
}); });
@ -1086,7 +1086,7 @@
//保存回复分组 //保存回复分组
addReplyGroup(){ addReplyGroup(){
var _this=this; var _this=this;
this.sendAjax("/reply","post",{group_name:_this.groupName},function(result){ this.sendAjax("/aicss/reply","post",{group_name:_this.groupName},function(result){
//_this.otherKefus=result; //_this.otherKefus=result;
_this.replyGroupDialog = false _this.replyGroupDialog = false
_this.groupName=""; _this.groupName="";
@ -1096,7 +1096,7 @@
//添加回复内容 //添加回复内容
addReplyContent(){ addReplyContent(){
var _this=this; var _this=this;
this.sendAjax("/reply_content","post",{group_id:_this.groupId,item_name:_this.replyTitle,content:_this.replyContent},function(result){ this.sendAjax("/aicss/reply_content","post",{group_id:_this.groupId,item_name:_this.replyTitle,content:_this.replyContent},function(result){
//_this.otherKefus=result; //_this.otherKefus=result;
_this.replyContentDialog = false _this.replyContentDialog = false
_this.replyContent=""; _this.replyContent="";
@ -1106,21 +1106,21 @@
//获取快捷回复 //获取快捷回复
getReplys(){ getReplys(){
var _this=this; var _this=this;
this.sendAjax("/replys","get",{},function(result){ this.sendAjax("/aicss/replys","get",{},function(result){
_this.replys=result; _this.replys=result;
}); });
}, },
//删除回复 //删除回复
deleteReplyGroup(id){ deleteReplyGroup(id){
var _this=this; var _this=this;
this.sendAjax("/reply?id="+id,"delete",{},function(result){ this.sendAjax("/aicss/reply?id="+id,"delete",{},function(result){
_this.getReplys(); _this.getReplys();
}); });
}, },
//删除回复 //删除回复
deleteReplyContent(id){ deleteReplyContent(id){
var _this=this; var _this=this;
this.sendAjax("/reply_content?id="+id,"delete",{},function(result){ this.sendAjax("/aicss/reply_content?id="+id,"delete",{},function(result){
_this.getReplys(); _this.getReplys();
}); });
}, },
@ -1133,7 +1133,7 @@
reply_title:this.replyTitle, reply_title:this.replyTitle,
reply_content:this.replyContent reply_content:this.replyContent
} }
this.sendAjax("/reply_content_save","post",data,function(result){ this.sendAjax("/aicss/reply_content_save","post",data,function(result){
_this.editReplyContentDialog=false; _this.editReplyContentDialog=false;
_this.getReplys(); _this.getReplys();
}); });
@ -1152,7 +1152,7 @@
if(this.replySearch==""){ if(this.replySearch==""){
_this.replySearchList=[]; _this.replySearchList=[];
} }
this.sendAjax("/reply_search","post",{search:this.replySearch},function(result){ this.sendAjax("/aicss/reply_search","post",{search:this.replySearch},function(result){
_this.replySearchList=result; _this.replySearchList=result;
for (var i in result) { for (var i in result) {
_this.replySearchListActive.push(result[i].group_id); _this.replySearchListActive.push(result[i].group_id);
@ -1162,15 +1162,15 @@
//获取黑名单 //获取黑名单
getIpblacks(){ getIpblacks(){
var _this=this; var _this=this;
this.sendAjax("/ipblacks","get",{},function(result){ this.sendAjax("/aicss/ipblacks","get",{},function(result){
_this.ipBlacks=result; _this.ipBlacks=result;
}); });
}, },
//删除黑名单 //删除黑名单
delIpblack(ip){ delIpblack(ip){
let _this=this; let _this=this;
this.sendAjax("/ipblack?ip="+ip,"DELETE",{ip:ip},function(result){ this.sendAjax("/aicss/ipblack?ip="+ip,"DELETE",{ip:ip},function(result){
_this.sendAjax("/ipblacks","get",{},function(result){ _this.sendAjax("/aicss/ipblacks","get",{},function(result){
_this.ipBlacks=result; _this.ipBlacks=result;
}); });
}); });

View File

@ -72,17 +72,17 @@
applyBodyClass(); applyBodyClass();
})(); })();
</script> </script>
<link rel="stylesheet" href="/static/cdn/element-ui/2.15.1/theme-chalk/index.min.css"> <link rel="stylesheet" href="/aicss/static/cdn/element-ui/2.15.1/theme-chalk/index.min.css">
<script src="/static/cdn/vue/2.6.11/vue.min.js"></script> <script src="/aicss/static/cdn/vue/2.6.11/vue.min.js"></script>
<script src="/static/cdn/element-ui/2.15.1/index.js"></script> <script src="/aicss/static/cdn/element-ui/2.15.1/index.js"></script>
<script src="/static/cdn/jquery/3.6.0/jquery.min.js"></script> <script src="/aicss/static/cdn/jquery/3.6.0/jquery.min.js"></script>
<script src="/assets/js/functions.js?v=fgffdwersdccvcbv"></script> <script src="/aicss/assets/js/functions.js?v=fgffdwersdccvcbv"></script>
<script src="/assets/js/reconnecting-websocket.min.js"></script> <script src="/aicss/assets/js/reconnecting-websocket.min.js"></script>
<link rel="stylesheet" href="/static/css/common.css?v=sdsderfrgfgdfdf" /> <link rel="stylesheet" href="/aicss/static/css/common.css?v=sdsderfrgfgdfdf" />
<link rel="stylesheet" href="/static/css/icono.min.css" /> <link rel="stylesheet" href="/aicss/static/css/icono.min.css" />
<link rel="stylesheet" href="/static/css/icon/iconfont.css?v=fgjlgfda"/> <link rel="stylesheet" href="/aicss/static/css/icon/iconfont.css?v=fgjlgfda"/>
<link rel="stylesheet" href="/static/css/dark-mode.css" /> <link rel="stylesheet" href="/aicss/static/css/dark-mode.css" />
</head> </head>
<body class="visitorBody"> <body class="visitorBody">
<div id="app" class="chatCenter"> <div id="app" class="chatCenter">
@ -216,7 +216,7 @@
delimiters:["<{","}>"], delimiters:["<{","}>"],
data: { data: {
window:window, window:window,
server:getWsBaseUrl()+"/ws_visitor", server:getWsBaseUrl()+"/aicss/ws_visitor",
socket:null, socket:null,
msgList:[], msgList:[],
msgListNum:[], msgListNum:[],
@ -368,8 +368,7 @@
mes.from_id = this.visitor.visitor_id; mes.from_id = this.visitor.visitor_id;
mes.to_id = this.visitor.to_id; mes.to_id = this.visitor.to_id;
mes.content = this.messageContent; mes.content = this.messageContent;
this.messageContent = "" $.post("/aicss/2/message",mes,function(res){
$.post("/2/message",mes,function(res){
_this.sendDisabled=false; _this.sendDisabled=false;
if(res.code!=200){ if(res.code!=200){
_this.msgList.pop(); _this.msgList.pop();
@ -398,7 +397,7 @@
} }
let _this=this; let _this=this;
var extra=getQuery("extra"); var extra=getQuery("extra");
$.post("/visitor_login",{visitor_id:visitor_id,refer:REFER,to_id:to_id,extra:extra},function(res){ $.post("/aicss/visitor_login",{visitor_id:visitor_id,refer:REFER,to_id:to_id,extra:extra},function(res){
if(res.code!=200){ if(res.code!=200){
_this.$message({ _this.$message({
message: res.msg, message: res.msg,
@ -420,7 +419,7 @@
visitor_id: this.visitor.visitor_id, visitor_id: this.visitor.visitor_id,
} }
let _this=this; let _this=this;
$.get("/2/messagesPages",params,function(res){ $.get("/aicss/2/messagesPages",params,function(res){
let msgList=res.result.list; let msgList=res.result.list;
if(msgList.length>=_this.messages.pagesize){ if(msgList.length>=_this.messages.pagesize){
_this.showLoadMore=true; _this.showLoadMore=true;
@ -474,7 +473,7 @@
}, },
getNotice : function (){ getNotice : function (){
let _this=this; let _this=this;
$.get("/notice?kefu_id="+KEFU_ID,function(res) { $.get("/aicss/notice?kefu_id="+KEFU_ID,function(res) {
var code=res.code; var code=res.code;
if(code!=200) return; if(code!=200) return;
_this.kefuInfo=res.result; _this.kefuInfo=res.result;
@ -633,7 +632,7 @@
var formData = new FormData(); var formData = new FormData();
formData.append('imgfile', file); formData.append('imgfile', file);
$.ajax({ $.ajax({
url: '/uploadimg', url: '/aicss/uploadimg',
type: "post", type: "post",
data: formData, data: formData,
contentType: false, contentType: false,
@ -657,10 +656,10 @@
}); });
}, },
alertSound:function(){ alertSound:function(){
alertSound("chatMessageAudio",'/static/images/alert2.ogg'); alertSound("chatMessageAudio",'/aicss/static/images/alert2.ogg');
}, },
sendSound:function(){ sendSound:function(){
alertSound("chatMessageSendAudio",'/static/images/sent.ogg'); alertSound("chatMessageSendAudio",'/aicss/static/images/sent.ogg');
}, },
sendAjax:function(url,method,params,callback){ sendAjax:function(url,method,params,callback){
let _this=this; let _this=this;

View File

@ -5,12 +5,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content=""> <meta name="description" content="">
<title>Go Open Source Live Chat Software</title> <title>Go Open Source Live Chat Software</title>
<link rel="stylesheet" href="/static/cdn/element-ui/2.15.1/theme-chalk/index.min.css"> <link rel="stylesheet" href="/aicss/static/cdn/element-ui/2.15.1/theme-chalk/index.min.css">
<script src="/static/cdn/vue/2.6.11/vue.min.js"></script> <script src="/aicss/static/cdn/vue/2.6.11/vue.min.js"></script>
<script src="/static/cdn/element-ui/2.15.1/index.js"></script> <script src="/aicss/static/cdn/element-ui/2.15.1/index.js"></script>
<script src="/static/cdn/jquery/3.6.0/jquery.min.js"></script> <script src="/aicss/static/cdn/jquery/3.6.0/jquery.min.js"></script>
<script src="/static/js/functions.js"></script> <script src="/aicss/static/js/functions.js"></script>
<link rel="stylesheet" href="/static/css/common.css"> <link rel="stylesheet" href="/aicss/static/css/common.css">
</head> </head>
<body class="text-center"> <body class="text-center">

View File

@ -133,7 +133,7 @@
var data = _this.mysql; var data = _this.mysql;
_this.loading=true; _this.loading=true;
_this.sendDisabled=true; _this.sendDisabled=true;
$.post("/install", data, function (data) { $.post("/aicss/install", data, function (data) {
if (data.code == 200) { if (data.code == 200) {
_this.$message({ _this.$message({
message: data.msg, message: data.msg,

View File

@ -4,10 +4,10 @@
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>GoflyLiveChat - Open Source Live Chat</title> <title>GoflyLiveChat - Open Source Live Chat</title>
<link rel="stylesheet" href="/static/cdn/element-ui/2.15.1/theme-chalk/index.min.css"> <link rel="stylesheet" href="/aicss/static/cdn/element-ui/2.15.1/theme-chalk/index.min.css">
<script src="/static/cdn/vue/2.6.11/vue.min.js"></script> <script src="/aicss/static/cdn/vue/2.6.11/vue.min.js"></script>
<script src="/static/cdn/element-ui/2.15.1/index.js"></script> <script src="/aicss/static/cdn/element-ui/2.15.1/index.js"></script>
<script src="/static/cdn/jquery/3.6.0/jquery.min.js"></script> <script src="/aicss/static/cdn/jquery/3.6.0/jquery.min.js"></script>
<style> <style>
body { body {
@ -156,14 +156,14 @@
"password": this.form.password, "password": this.form.password,
}; };
$.post("/check", data, (response) => { $.post("/aicss/check", data, (response) => {
if (response.code === 200) { if (response.code === 200) {
this.$message({ this.$message({
message: 'Welcome back!', message: 'Welcome back!',
type: 'success' type: 'success'
}); });
localStorage.setItem("aicss-token", response.result.token); localStorage.setItem("aicss-token", response.result.token);
window.location.href = "/main"; window.location.href = "/aicss/main";
} else { } else {
this.$message({ this.$message({
message: response.message || 'Invalid credentials', message: response.message || 'Invalid credentials',
@ -193,7 +193,7 @@
"nickname": this.form.nickname, "nickname": this.form.nickname,
}; };
$.post("/register", data, (response) => { $.post("/aicss/register", data, (response) => {
if (response.code === 200) { if (response.code === 200) {
this.$message({ this.$message({
message: 'Account created successfully!', message: 'Account created successfully!',

View File

@ -3,13 +3,13 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<title>Open Source Customer Support System</title> <title>Open Source Customer Support System</title>
<link rel="stylesheet" href="/static/cdn/element-ui/2.15.1/theme-chalk/index.min.css"> <link rel="stylesheet" href="/aicss/static/cdn/element-ui/2.15.1/theme-chalk/index.min.css">
<script src="/static/cdn/vue/2.6.11/vue.min.js"></script> <script src="/aicss/static/cdn/vue/2.6.11/vue.min.js"></script>
<script src="/static/cdn/element-ui/2.15.1/index.js"></script> <script src="/aicss/static/cdn/element-ui/2.15.1/index.js"></script>
<script src="/static/cdn/jquery/3.6.0/jquery.min.js"></script> <script src="/aicss/static/cdn/jquery/3.6.0/jquery.min.js"></script>
<link rel="stylesheet" href="/static/css/common.css"> <link rel="stylesheet" href="/aicss/static/css/common.css">
<script src="/assets/js/functions.js"></script> <script src="/aicss/assets/js/functions.js"></script>
<style> <style>
html, html,
body { body {
@ -55,24 +55,24 @@
<el-avatar class="mainLogo" title="Customer Support" :size="45" :src="adminAvator"></el-avatar> <el-avatar class="mainLogo" title="Customer Support" :size="45" :src="adminAvator"></el-avatar>
</el-badge> </el-badge>
</div> </div>
<div class="menuLeftItem active" v-on:click="openIframeUrl('/pannel')"> <div class="menuLeftItem active" v-on:click="openIframeUrl('/aicss/pannel')">
<i class="el-icon-platform-eleme"></i> <i class="el-icon-platform-eleme"></i>
<span slot="title">Dashboard</span> <span slot="title">Dashboard</span>
</div> </div>
<div class="menuLeftItem" v-on:click="haveNewMessage='';openIframeUrl('/chat_main')"> <div class="menuLeftItem" v-on:click="haveNewMessage='';openIframeUrl('/aicss/chat_main')">
<el-badge :value="haveNewMessage" class="item"> <el-badge :value="haveNewMessage" class="item">
<i class="el-icon-chat-dot-round"></i> <i class="el-icon-chat-dot-round"></i>
</el-badge> </el-badge>
<span slot="title">Chat</span> <span slot="title">Chat</span>
</div> </div>
<div style="display: none" class="menuLeftItem" v-on:click="openIframeUrl('/setting_deploy')"> <div style="display: none" class="menuLeftItem" v-on:click="openIframeUrl('/aicss/setting_deploy')">
<i class="el-icon-notebook-2"></i> <i class="el-icon-notebook-2"></i>
<span slot="title">Integration</span> <span slot="title">Integration</span>
</div> </div>
<div class="menuLeftItem" v-on:click="openIframeUrl('/setting')"> <div class="menuLeftItem" v-on:click="openIframeUrl('/aicss/setting')">
<i class="el-icon-setting"></i> <i class="el-icon-setting"></i>
<span slot="title">Settings</span> <span slot="title">Settings</span>
</div> </div>
@ -99,7 +99,7 @@
adminRole:"", adminRole:"",
onlineType:"success", onlineType:"success",
haveNewMessage:"", haveNewMessage:"",
iframeUrl:"/pannel", iframeUrl:"/aicss/pannel",
}, },
methods: { methods: {
focusWindow(){ focusWindow(){
@ -115,7 +115,7 @@
}, function(notification) { }, function(notification) {
window.focus(); window.focus();
notification.close(); notification.close();
_this.openIframeUrl("/chat_main"); _this.openIframeUrl("/aicss/chat_main");
}); });
}); });
}, },
@ -124,7 +124,7 @@
}, },
logout(){ logout(){
localStorage.removeItem("aicss-token"); localStorage.removeItem("aicss-token");
this.openIframeUrl('/login'); this.openIframeUrl('/aicss/login');
}, },
openUrl(url){ openUrl(url){
window.location.href=url; window.location.href=url;
@ -138,16 +138,16 @@
let _this=this; let _this=this;
$.ajax({ $.ajax({
type:"GET", type:"GET",
url:"/kefuinfo", url:"/aicss/kefuinfo",
headers:{ headers:{
"aicss-token":localStorage.getItem("aicss-token") "aicss-token":localStorage.getItem("aicss-token")
}, },
success: function(data) { success: function(data) {
if (data.code != 200) { if (data.code != 200) {
window.location.href="/login"; window.location.href="/aicss/login";
} else { } else {
_this.adminAvator=data.result.avator; _this.adminAvator=data.result.avator;
_this.iframeUrl = "/pannel"; _this.iframeUrl = "/aicss/pannel";
} }
} }
}); });
@ -168,4 +168,4 @@
//alert(1); //alert(1);
}); });
</script> </script>
</html> </html>

View File

@ -216,7 +216,7 @@ A: 因二次结算导致,系统将按最终结果扣回或补发。`}
}, },
getConfigList(){ getConfigList(){
let _this=this; let _this=this;
this.sendAjax("/configs","get",{},function(result){ this.sendAjax("/aicss/configs","get",{},function(result){
for(let index in _this.configList){ for(let index in _this.configList){
for(let item of result){ for(let item of result){
if(_this.configList[index]['conf_key']==item['conf_key']){ if(_this.configList[index]['conf_key']==item['conf_key']){
@ -229,7 +229,7 @@ A: 因二次结算导致,系统将按最终结果扣回或补发。`}
//设置配置项 //设置配置项
setConfigItem(key,value){ setConfigItem(key,value){
let _this=this; let _this=this;
this.sendAjax("/config","POST",{key:key,value:value},function(result){ this.sendAjax("/aicss/config","POST",{key:key,value:value},function(result){
_this.getConfigList(); _this.getConfigList();
_this.$message({ _this.$message({
message: "success", message: "success",
@ -240,7 +240,7 @@ A: 因二次结算导致,系统将按最终结果扣回或补发。`}
setUser(){ setUser(){
let _this=this; let _this=this;
this.sendAjax("/kefuinfo","POST",{ this.sendAjax("/aicss/kefuinfo","POST",{
id:_this.kefuInfo.uid, id:_this.kefuInfo.uid,
name:_this.kefuInfo.username, name:_this.kefuInfo.username,
nickname:_this.kefuInfo.nickname, nickname:_this.kefuInfo.nickname,
@ -292,19 +292,18 @@ A: 因二次结算导致,系统将按最终结果扣回或补发。`}
let _this=this; let _this=this;
$.ajax({ $.ajax({
type:"get", type:"get",
url:"/kefuinfo", url:"/aicss/kefuinfo",
headers:{ headers:{
"aicss-token":localStorage.getItem("aicss-token") "aicss-token":localStorage.getItem("aicss-token")
}, },
success: function(data) { success: function(data) {
if(data.result.username==""){ if(data.result.username==""){
window.location.href="/login"; window.location.href="/aicss/login";
} }
if(data.code==200 && data.result!=null){ if(data.code==200 && data.result!=null){
_this.kefuInfo=data.result; _this.kefuInfo=data.result;
_this.chatEndpoint=window.location.origin + '/livechat?kefu_id='+data.result.username; _this.chatEndpoint=window.location.origin + '/aicss/livechat?kefu_id='+data.result.username;
} }
} }
}); });
}, },

View File

@ -62,8 +62,8 @@
</el-form-item> </el-form-item>
<el-form-item label="头像" prop="avator"> <el-form-item label="头像" prop="avator">
<el-select v-model="kefuForm.avator" placeholder="请选择头像"> <el-select v-model="kefuForm.avator" placeholder="请选择头像">
<el-option :label="'头像'+item" :value="'/static/images/'+item+'.jpg'" v-for="item in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]" v-bind:key="item"> <el-option :label="'头像'+item" :value="'/aicss/static/images/'+item+'.jpg'" v-for="item in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]" v-bind:key="item">
<el-avatar :size="30" :src="'/static/images/'+item+'.jpg'"></el-avatar> <el-avatar :size="30" :src="'/aicss/static/images/'+item+'.jpg'"></el-avatar>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>