升讯威在线客服与营销系统是基于 .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 小时挂机运行,不掉线不丢消息,欢迎实测。

https://kf.shengxunwei.com/

使用原生Web开发技术为在线客服系统提供网页版配置工具的更多相关文章

  1. .net core 和 WPF 开发升讯威在线客服系统【私有化部署免费版】发布

    希望 .net 和 WPF 技术时至今日,还能有一些存在感. 这个项目源于2015年前后,当时开发的初版,我使用了 ASP.NET MVC 做为后端,数据库使用原生 ADO.NET 进行操作.WPF ...

  2. Linux + .net core 开发升讯威在线客服系统:首个经过实际验证的高性能版本

    业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程: .net core 和 WPF 开发升讯威在线客服系统:目录 https://blog.she ...

  3. 使用 WPF+ ASP.NET MVC 开发 在线客服系统 (一)

    近段时间利用业余时间开发了一套在线客服系统,期间遇到过大大小小不少问题,好在都一一解决,最终效果也还可以,打算写一个系列的文章把开发过程详细的记录下来. 希望能够和更多的开发人员互相交流学习,也希望有 ...

  4. 详解升讯威在线客服系统前端 JavaScript 脚本加密技术(1)

    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户.对我来说,只要能获得用户的认可,就是我最大的动力. 这段时间有几个技术小伙伴问了我一个有意思的问题:"你的前端脚本是 ...

  5. h5在线1v1客服|web在线客服系统|h5即时聊天

    网上有很多环信.美恰之类的客服系统,最近也使用h5+css3+fontJs+swiper+wcPop等技术架构开发了一个在线客服(1v1沟通聊天),可以应用到在线临时聊天.在线咨询等情景.实现了消息. ...

  6. .net core 和 WPF 开发升讯威在线客服系统:把 .Net Framework 打包进安装程序

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 系列文章目录: https://blog.shengxunwei.com/Home/Post/44a3 ...

  7. .net core 和 WPF 开发升讯威在线客服系统:使用本地IP数据库实现访客来源快速定位,支持国外

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 免费使用 & 私有化部署:https://kf.shengxun ...

  8. .net core 和 WPF 开发升讯威在线客服系统:调用百度翻译接口实现实时自动翻译

    业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...

  9. 开发升讯威在线客服系统启示录:怎样编写堪比 MSDN 的用户手册

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 免费在线使用 & 免费私有化部署:https://kf.shengxunwei.com 文章目 ...

  10. .net core 和 WPF 开发升讯威在线客服系统:调用有道翻译接口实现实时自动翻译的方法

    业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...

随机推荐

  1. Go语言中的交互式CLI开发:survey库简介

    在构建命令行工具时,良好的用户交互体验至关重要.尤其是在需要与用户进行复杂输入的场景下,传统的命令行参数和标志可能显得笨拙.github.com/AlecAivazis/survey/v2 是一个为 ...

  2. 前端使用xlsx模板导出表格

    前言 前端导出表格有很多种方案,但是表格样式一旦复杂了,那么就得用代码写excel的样式,还是比较麻烦的.每次样式不一样,就得重新写,这时使用表格模板的优势就体现出来了,想导出不同样式的表格直接修改表 ...

  3. canvas图片旋转扩展出原生JS实现移动端横竖屏手写签名示例

    前提知识 canvas是提供了各种各样的接口去控制画布,比如旋转rotate方法. 这里的旋转并不是真的把这个画布旋转了,例如ctx.rotate(90 * Math.PI / 180)顺时针旋转90 ...

  4. 音视频入门-4-ffmpeg命令快速体验音视频开发/ ffmpeg编译过程经历的99八十一难

    <1>我的实验所使用的视频文件告知读者 1. 这是我在ubuntu环境上实验使用的视频文件, 我在windows上查看了详细信息,然后拖进ubuntu内,重命名为video-test.mp ...

  5. 系统编程-进程-close-on-exec机制

    我的相关博文: 系统编程-进程-exec系列函数超级详解(带各种实操代码) 一般我们会调用exec执行另一个程序,此时会用全新的程序替换子进程的正文,数据,堆和栈等. 此时保存文件描述符的变量当然也不 ...

  6. 从0到1搭建权限管理系统系列三 .net8 JWT创建Token并使用

    说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发). 该系统文章,我会尽量说的非常详细,做到不管新手.老手都能看懂. 说明:OverallAuth2 ...

  7. HeaderFile (1.2-1.6) 中 hct.h 使用教程

    下载 HeaderFile 1.2 HCT 是干什么的 辅助数据生成 主干框架 你需要包含必须的头文件 hct.h 此外,你需要实现如下函数: void create() 数据生成函数 void so ...

  8. linux中安装mysq5.7

    linux中安装mysq5.7 一. 安装mysql yum install mariadb-server mariadb 二. 开启mysql service mysqld start 四. 停止m ...

  9. /proc/pagetypeinfo

    这个文件是将buddyinfo的内容进一步细分: Free pages count per migrate type at order -- 不同order 按照migrate type的空闲page ...

  10. CF1659 Codeforces Round #782 (Div. 2) 题解

    之前说过的题解,E应该不会补了(大概) A Red Versus Blue 题意非常简单,构造题.给定\(r\)个红色气球和\(b\)个蓝色气球,将它们排成一排,要求使得连续出现的最多的同色气球最少, ...