在数字化时代,实时客户沟通已成为企业服务的核心竞争力。今天,我们向您推荐一款基于 Go 语言开发的开源实时聊天客服系统 —— 它不仅拥有简洁易用的界面,更具备开源项目的灵活性与可扩展性,让您轻松搭建属于自己的客户沟通平台。
系统采用前后端分离架构,前端基于 Vue+Element UI 构建,界面简洁直观,无论是客服人员还是管理员都能快速上手。从代码部署到完成首次登录,整个过程无需复杂配置,即使是技术新手也能轻松驾驭。
登录界面支持账号密码登录与新用户注册双重功能,通过简洁的表单验证确保账号安全:
作为开源项目,您可以完全掌控系统的每一个细节:
基于 Go 语言开发的后端核心,带来卓越的性能表现:
当前版本已具备完整的用户认证体系,未来可根据需求扩展更多实用功能:
无论是电商网站、企业官网还是移动应用,这款开源客服系统都能帮助您搭建高效、安全的客户沟通渠道,提升服务质量与客户满意度。
加入我们的开源社区,一起完善这款工具,让更多企业享受到实时沟通的便利!
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title>Go Open Source Live Chat Software</title>
<link rel="stylesheet" href="/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="/static/cdn/element-ui/2.15.1/index.js"></script>
<script src="/static/cdn/jquery/3.6.0/jquery.min.js"></script>
<style>
body {
background-color: #f5f5f5;
margin: 0;
padding: 0;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
}
.signin {
width: 350px;
padding: 20px;
background: #fff;
-webkit-box-shadow: 0 1px 2px 0 rgba(101,129,156,.08);
box-shadow: 0 1px 2px 0 rgba(101,129,156,.08);
border-radius: 4px;
}
.signin h1, .signin h2, .signin .copyright {
font-weight: normal;
color: #4d627b;
text-align: center;
}
.signin .loginTitle {
font-size: 22px;
margin: 20px 0px;
}
.signin .copyright {
font-size: 12px;
margin-top: 20px;
}
@media (max-width: 768px) {
.signin {
width: 90%;
box-shadow: none;
}
}
</style>
</head>
<body>
<div id="app" class="signin">
<template>
<div class="loginHtml">
<h1 class="loginTitle">Open Source Live Chat</h1>
<el-form :model="form" :rules="rules" ref="loginForm" v-show="!showRegHtml">
<el-form-item prop="account">
<el-input v-model="form.account" placeholder="Username"></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input show-password v-on:keyup.enter.native="handleLogin('loginForm')" v-model="form.password" placeholder="Password"></el-input>
</el-form-item>
<el-form-item>
<el-button style="width: 100%" type="primary" @click="handleLogin('loginForm')">Sign In</el-button>
</el-form-item>
<el-form-item>
<el-button style="width: 100%" @click="showRegHtml=true">Create Account</el-button>
</el-form-item>
</el-form>
<el-form :model="form" :rules="rules" ref="registerForm" v-show="showRegHtml">
<el-form-item prop="account">
<el-input v-model="form.account" placeholder="Username"></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input show-password v-model="form.password" placeholder="Password"></el-input>
</el-form-item>
<el-form-item prop="rePassword">
<el-input show-password v-on:keyup.enter.native="handleRegister('registerForm')" v-model="form.rePassword" placeholder="Confirm Password"></el-input>
</el-form-item>
<el-form-item>
<el-button style="width: 100%" type="primary" @click="handleRegister('registerForm')">Register</el-button>
</el-form-item>
<el-form-item>
<el-button style="width: 100%" @click="showRegHtml=false">Back to Login</el-button>
</el-form-item>
</el-form>
</div>
<p class="copyright">Go Open Source Live Chat Software</p>
</template>
</div>
</body>
<script>
new Vue({
el: '#app',
delimiters: ["<{", "}>"],
data: {
form: {
account: "",
password: "",
rePassword: ""
},
rules: {
account: [
{ required: true, message: 'Please input your username', trigger: 'blur' },
{ min: 2, max: 20, message: 'Length should be 2 to 20 characters', trigger: 'blur' }
],
password: [
{ required: true, message: 'Please input your password', trigger: 'blur' },
{ min: 2, message: 'Password must be at least 2 characters', trigger: 'blur' }
],
rePassword: [
{ required: true, message: 'Please confirm your password', trigger: 'blur' },
{ validator: this.validatePasswordMatch, trigger: 'blur' }
]
},
showRegHtml: false,
},
methods: {
validatePasswordMatch(rule, value, callback) {
if (value !== this.form.password) {
callback(new Error('Passwords do not match!'));
} else {
callback();
}
},
handleLogin(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.login();
}
});
},
handleRegister(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.register();
}
});
},
login() {
let data = {
"username": this.form.account,
"password": this.form.password,
};
$.post("/check", data, (response) => {
if (response.code === 200) {
this.$message({
message: 'Login successful',
type: 'success'
});
localStorage.setItem("token", response.result.token);
localStorage.setItem("ref_token", response.result.ref_token);
localStorage.setItem("create_time", response.result.create_time);
window.location.href = "/main";
} else {
this.$message({
message: response.msg || 'Login failed',
type: 'error'
});
}
}).fail(() => {
this.$message({
message: 'Network error',
type: 'error'
});
});
},
register() {
if (this.form.password !== this.form.rePassword) {
this.$message({
message: 'Passwords do not match',
type: 'error'
});
return;
}
let data = {
"username": this.form.account,
"password": this.form.password,
};
$.post("/register", data, (response) => {
if (response.code === 200) {
this.$message({
message: 'Registration successful',
type: 'success'
});
this.showRegHtml = false;
} else {
this.$message({
message: response.msg || 'Registration failed',
type: 'error'
});
}
}).fail(() => {
this.$message({
message: 'Network error',
type: 'error'
});
});
}
},
created: function() {
if (top.location != location) {
top.location.href = location.href;
}
}
});
</script>
</html>
项目名称:Go Open Source Live Chat Software 技术栈:Go 后端 + Vue 前端 + Element UI