使用原生Web开发技术为在线客服系统提供网页版配置工具
升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。
背景
随着下载私有化部署的用户越来越多,部署配置时的便利性到了需要进一步提升的时候。
部署时需要修改一些配置文件,除了直接手工修改外,之前我提供了一个 Windows 应用程序来自动化写入配置文件,但这有一些小的弊端,很多用户选择把文件上传到服务器上之后,直接在服务器上配置,而 Windows 界面程序无法在 Linux 、宝塔这样的环境中使用。用户还是只能手工修改配置文件,经常有修改错误的情况发生。
所以我提供了一个网页版本的配置文件生成工具,直接在浏览器上使用,生成配置文件的内容,复制文件内容到终端的 vim 编辑器中直接粘贴即可。高效,实用。
这个网页版小工具虽然功能并不复杂,然而开发它还是花了点时间,本文我将仔细讲解 如何使用原生Web开发技术,来实现这样的功能。
效果展示
https://kf.shengxunwei.com/ServerSettingsTool/index.html
在网页中填写服务器的各项配置信息:

根据填写的配置信息,自动生成所需的配置文件内容:

技术方案
下面我将详细介绍这样的网页版配置文件生成工具是如何开发的,在这个应用场景中,我使用了原生Web开发技术,使用了 Bootstrap + jQuery 的方案。
Bootstrap
Bootstrap 是最受欢迎的前端框架之一,用于快速开发响应式、移动优先的网站和应用程序。它由 Twitter(现 X)开发并开源,为开发者提供了一系列预先设计好的 CSS 样式、HTML 模板、JavaScript 插件,能够节省大量的时间和精力,使网页设计更高效。
- Bootstrap 的核心优势是其响应式设计理念。它基于 CSS 媒体查询(Media Queries),能够根据不同设备的屏幕尺寸(如桌面显示器、平板电脑、手机)自动调整网页布局。例如,一个使用 Bootstrap 构建的网站,在大屏幕设备上可能会以多栏布局显示内容,而在小屏幕手机上则会自动堆叠成单栏布局,确保内容在任何设备上都能清晰可读。
- 它提供了一套响应式网格系统,将页面划分为 12 列。开发者可以通过指定不同的列数来分配内容在不同屏幕尺寸下的宽度。比如,在桌面端可以让一个元素占据 6 列(即屏幕宽度的一半),在移动端可以让它占据 12 列(全屏宽度)。
jQuery
jQuery 是一个很实用的 JavaScript 库。
- 它的主要作用是让网页开发中的一些操作变得更简单。比如在操作网页元素方面,能很方便地找到页面中的各种元素,像按标签、ID 或者类名来选取。找到元素后,可以轻松地修改元素里的文字、属性和样式。
- 在事件处理上,给网页元素添加点击、鼠标移动、键盘按键等事件变得很容易,还能高效地处理动态添加元素的事件。
- 它也能制作动画,简单的显示隐藏动画或者复杂一点的位置、透明度变化等动画都可以实现。
- 另外,通过 jQuery 可以方便地发送异步请求,从服务器获取数据来更新网页的部分内容,而不用重新加载整个页面。
highlight.js
Highlight.js 是一个用于在网页中对代码进行语法高亮显示的 JavaScript 库。它能够识别多种编程语言的语法,包括但不限于 JavaScript、Python、Java、C++、HTML、CSS 等,使代码片段在网页上呈现出清晰、易读的格式,带有不同颜色来区分不同的语法元素。
- 它通过解析代码文本,根据各种编程语言的语法规则来识别关键字、变量、函数、注释等不同的语法成分。例如,在 JavaScript 代码中,它可以将function关键字标记为一种颜色,将变量名标记为另一种颜色。
- 当应用到网页时,通常需要在 HTML 中引入 Highlight.js 的库文件(JavaScript 和 CSS),然后指定要进行语法高亮显示的代码块,一般是通过类名或者其他属性来标识这些代码块。
开发核心功能
首先基于 Bootstrap 完成基本的页面开发,Bootstrap 提供了非常完善的布局功能,对于一个单页面的应用来说,这并不复杂,我们可以使用如下代码生成一个基本的页面结构,它包含了几个标签页:
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home-tab-pane" type="button" role="tab" aria-controls="home-tab-pane" aria-selected="true">Home</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile-tab-pane" type="button" role="tab" aria-controls="profile-tab-pane" aria-selected="false">Profile</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact-tab-pane" type="button" role="tab" aria-controls="contact-tab-pane" aria-selected="false">Contact</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="disabled-tab" data-bs-toggle="tab" data-bs-target="#disabled-tab-pane" type="button" role="tab" aria-controls="disabled-tab-pane" aria-selected="false" disabled>Disabled</button>
</li>
</ul>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="home-tab-pane" role="tabpanel" aria-labelledby="home-tab" tabindex="0">...</div>
<div class="tab-pane fade" id="profile-tab-pane" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">...</div>
<div class="tab-pane fade" id="contact-tab-pane" role="tabpanel" aria-labelledby="contact-tab" tabindex="0">...</div>
<div class="tab-pane fade" id="disabled-tab-pane" role="tabpanel" aria-labelledby="disabled-tab" tabindex="0">...</div>
</div>
然后需要使用jQuery 来操作 form 表单,获取用户填写的配置信息:
$(document).ready(function () {
// 当按钮被点击时执行以下函数
$('#btn').click(function () {
// 获取输入框的值
var inputValue = $('#inputBox').val();
// 将获取到的值赋值给另一个变量(这里只是示例,可根据实际需求处理该值)
var assignedValue = inputValue;
// 将赋值后的变量值显示在指定的div元素中
$('#result').text('获取并赋值后的值为:' + assignedValue);
});
});
最后,使用 highlight.js 来高亮显示生成的配置文件,以使它们更加可读:
在生成文件之后,调用 hljs.highlightAll(); 方法即可。
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<!-- and it's easy to individually load additional languages -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/go.min.js"></script>
<script>hljs.highlightAll();</script>
简介下这个 .net 开发的小系统
可全天候 7 × 24 小时挂机运行,不掉线不丢消息,欢迎实测。
使用原生Web开发技术为在线客服系统提供网页版配置工具的更多相关文章
- .net core 和 WPF 开发升讯威在线客服系统【私有化部署免费版】发布
希望 .net 和 WPF 技术时至今日,还能有一些存在感. 这个项目源于2015年前后,当时开发的初版,我使用了 ASP.NET MVC 做为后端,数据库使用原生 ADO.NET 进行操作.WPF ...
- Linux + .net core 开发升讯威在线客服系统:首个经过实际验证的高性能版本
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程: .net core 和 WPF 开发升讯威在线客服系统:目录 https://blog.she ...
- 使用 WPF+ ASP.NET MVC 开发 在线客服系统 (一)
近段时间利用业余时间开发了一套在线客服系统,期间遇到过大大小小不少问题,好在都一一解决,最终效果也还可以,打算写一个系列的文章把开发过程详细的记录下来. 希望能够和更多的开发人员互相交流学习,也希望有 ...
- 详解升讯威在线客服系统前端 JavaScript 脚本加密技术(1)
我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户.对我来说,只要能获得用户的认可,就是我最大的动力. 这段时间有几个技术小伙伴问了我一个有意思的问题:"你的前端脚本是 ...
- h5在线1v1客服|web在线客服系统|h5即时聊天
网上有很多环信.美恰之类的客服系统,最近也使用h5+css3+fontJs+swiper+wcPop等技术架构开发了一个在线客服(1v1沟通聊天),可以应用到在线临时聊天.在线咨询等情景.实现了消息. ...
- .net core 和 WPF 开发升讯威在线客服系统:把 .Net Framework 打包进安装程序
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 系列文章目录: https://blog.shengxunwei.com/Home/Post/44a3 ...
- .net core 和 WPF 开发升讯威在线客服系统:使用本地IP数据库实现访客来源快速定位,支持国外
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 免费使用 & 私有化部署:https://kf.shengxun ...
- .net core 和 WPF 开发升讯威在线客服系统:调用百度翻译接口实现实时自动翻译
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...
- 开发升讯威在线客服系统启示录:怎样编写堪比 MSDN 的用户手册
本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 免费在线使用 & 免费私有化部署:https://kf.shengxunwei.com 文章目 ...
- .net core 和 WPF 开发升讯威在线客服系统:调用有道翻译接口实现实时自动翻译的方法
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...
随机推荐
- uni-app之camera组件-人脸拍摄
小程序录制视频:10-30秒:需要拍摄人脸,大声朗读数字(123456)这种. 1.camera组件 camera页面内嵌的区域相机组件.注意这不是点击后全屏打开的相机 camera只支持小程序使用: ...
- JVM学习第二篇思考:一个Java代码是怎么运行起来的-下篇
JVM学习第二篇思考:一个Java代码是怎么运行起来的-下篇 在上一篇<JVM学习第一篇思考:一个Java代码是怎么运行起来的-上篇>中咱们知道类一个Java类的生命周期需要经历以下七个阶 ...
- 关于 MemoryStream 的多次写入,模拟post请求,接收方 .net core web api无法读取到流数据,报 System.IO.IOException: Unexpected end of Stream, the content may have already be en read by another component.
主要是业务不熟害死人.记录一下.真想抽自己几个嘴巴子 先说结论,知道这个结论的下面文字都是废话: 一.new MemoryStream 的时候,如果需要分次写入,只能是像下面这样子 MemoryStr ...
- 工具 – VS Code Extensions
前言 分享我用着的 Extensions. Angular Language Service 不用介绍,用 Angular 的必装. Better Comments 让注释有多点颜色 more col ...
- CSS & JS Effect – Button Hover Bling Bling Effect
效果 原理 一眼看上去, background 有渐变颜色 linear-gradient. 当 hover in 的时候有一束白光, 从右边移动到左边. hover out 则是反过来. 它其实是通 ...
- Task2 - IDA学习【进度 - 第二课】
学习目标: - 无名侠的课,看二进制培训(第二集和第三集)(https://space.bilibili.com/7761039/video) - 会反汇编 - 会字符串搜索(f12) - 会简单异或 ...
- Passwords
详见 此处 Header File 0*)1190*+0**0).0970)/0)/111105000
- 【赵渝强老师】使用Docker UI
Docker提供一个平台来把应用程序当作容器来打包.分发.共享和运行,它已经通过节省工作时间来拯救了成千上万的系统管理员和开发人员.Docker不用关注主机上运行的操作系统是什么,它没有开发语言.框架 ...
- 单Master节点的k8s集群部署-完整版
K8S 安装步骤 一.准备工作 1.准备三台主机(一台Master节点,两台Node节点)如下: 角色 IP 内存 核心 磁盘 Master 192.168.116.131 4G 4个 55G Nod ...
- iOS中搜索框EVNCustomSearchBar使用小结
最近在项目开发中用到了搜索框,之前都是用的系统的searchbar,现有项目中用的是EVNCustomSearchBar,我试了一下还挺方便,下面说一下具体的用法. 第一步:引入添加相关的委托代理EV ...