diff --git a/docs/devdocs/_后端API服务_/01-概览.md b/docs/devdocs/_后端API服务_/01-概览.md new file mode 100644 index 0000000..725a2a5 --- /dev/null +++ b/docs/devdocs/_后端API服务_/01-概览.md @@ -0,0 +1,21 @@ +# 后端API服务 +## 介绍 +该项目作为网维的统一后端API接口而设计,连接网维的数据库,并提供一系列接口给前端以支持网维日常的业务逻辑,其他开发人员可以直接调用这些接口,从而专注与前端,以便于降低整个系统设计的复杂度 + +该项目采用Go语言编写,Web框架采用echo,ORM框架为gorm, +## 项目地址 +https://github.com/ZSCNetSupportDept/zscnetworksupport-api +## 构建 +要想构建该项目,你需要安装`Go`和`make`,在一台linux机器上构建 + +输入`make install`即可安装本项目的依赖,而不构建 + +输入`make build`即可构建该项目,项目放在`make`文件夹下 +## 部署 +只需要把可执行文件放在生产环境下运行即可,本项目可能会提供一些静态文件访问,需要将`static`放在与可执行文件相同的目录下 +## 配置 +程序接受,且只接受一个参数,为配置文件的路径,关于配置文件的格式,请参照“配置”一章 +## 运行 +运行后,程序会将日志和错误文件输出到stdout中,你可以配置系统服务来使程序开机自启动,将输出定向到日志或者stderr里 + +在运行程序之后,你还要配置一些反向代理的软件,来将流量导向程序所监听的端口,你还要定期续期https证书,以保证https访问 diff --git a/docs/devdocs/_后端API服务_/02-配置.md b/docs/devdocs/_后端API服务_/02-配置.md new file mode 100644 index 0000000..1061e0b --- /dev/null +++ b/docs/devdocs/_后端API服务_/02-配置.md @@ -0,0 +1,13 @@ +# 配置 +# 介绍 +配置为一个`json`文件,其中,各个字段的定义如下: + +`port`:一个数字,为程序所监听的端口 + +`database`: +- `Type`:一个字符串,指定了所使用的数据库的类型,需要在`MySQL` `PostgreSQL` `SQLite`中选择一个 +- `Path`:对于SQLite填写数据库的位置,对于其他的数据库填写URL +- `Port`:数据库所监听的端口,SQLite可以不用填,以下也是 +- `User`:数据库用户名 +- `name`:数据库名称, +- `Password`:数据库密码 diff --git a/docs/devdocs/_后端API服务_/03-结构.md b/docs/devdocs/_后端API服务_/03-结构.md new file mode 100644 index 0000000..05866b3 --- /dev/null +++ b/docs/devdocs/_后端API服务_/03-结构.md @@ -0,0 +1,22 @@ +# 结构 +仓库项目的结构如下: + +`main.go`:项目程序的起点,从此处开始运行 + +`config`:存放了读取配置,提供配置变量相关的代码 + +`databases`:提供了连接数据库相关的代码,提供主数据库连接变量(Usingdb) + +`handlers`:为handler的存放地点,一类业务为一个对象,handler作为其方法实现 + +`model`:业务所采用的模型,定义了一个业务对象的存储和相关方法 + +`use`:在这里注册所有需要提供的API和中间件,程序将使用这里的配置 + +`make`:存放了构建所产生的程序 + +`static`:存放了静态文件以进行路由 + +## 原理 +当程序运行时: +main()将调用sysinit(),读取参数中的配置,将配置记录在全局变量`config.UseConfig`中 diff --git a/docs/wiki/gitignore/.gitignore b/docs/wiki/gitignore/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/docs/wiki/gitignore/widgets.qss b/docs/wiki/gitignore/widgets.qss new file mode 100644 index 0000000..6c98b64 --- /dev/null +++ b/docs/wiki/gitignore/widgets.qss @@ -0,0 +1,604 @@ +/* + * SPDX-FileCopyrightText: 2022-2024 Megan Conkle + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +/******************************************************************************/ +/* Scrollbars */ +/******************************************************************************/ + +ghostwriter--MarkdownEditor QAbstractScrollArea::corner, +ghostwriter--HtmlPreview QAbstractScrollArea::corner, +ghostwriter--Sidebar QAbstractScrollArea::corner { + background: transparent; +} + +ghostwriter--MarkdownEditor QAbstractScrollArea, +ghostwriter--HtmlPreview QAbstractScrollArea, +ghostwriter--Sidebar QAbstractScrollArea { + padding: 3px 3px 0px 3px; + margin: 0 +} + +ghostwriter--Sidebar MarkdownEditor::horizontal, +ghostwriter--Sidebar HtmlPreview::horizontal, +ghostwriter--Sidebar QScrollBar::horizontal { + height: 16px; + margin: 5px; + border: 0; + background: transparent; +} + +ghostwriter--MarkdownEditor QScrollBar::vertical, +ghostwriter--HtmlPreview QScrollBar::vertical, +ghostwriter--Sidebar QScrollBar::vertical { + width: 16px; + margin: 5px; + border: 0; + background: transparent; +} + + +ghostwriter--MarkdownEditor QScrollBar::horizontal:hover, +ghostwriter--HtmlPreview QScrollBar::horizontal:hover, +ghostwriter--Sidebar QScrollBar::horizontal:hover { + background-color: #202325; + border-radius: 3px; +} + +ghostwriter--MarkdownEditor QScrollBar::vertical:hover, +ghostwriter--HtmlPreview QScrollBar::vertical:hover, +ghostwriter--Sidebar QScrollBar::vertical:hover { + background-color: #202325; + border-radius: 3px; +} + +ghostwriter--MarkdownEditor QScrollBar::handle:horizontal, +ghostwriter--HtmlPreview QScrollBar::handle:horizontal, +ghostwriter--Sidebar QScrollBar::handle:horizontal { + min-width: 50px; + border: 0; + background: #444749; + border-radius: 3px; + +} + +ghostwriter--MarkdownEditor QScrollBar::handle:horizontal, +ghostwriter--HtmlPreview QScrollBar::handle:horizontal, +ghostwriter--Sidebar QScrollBar::handle:horizontal { + min-width: 50px; + border: 0; + background: #444749; + border-radius: 3px; +} + +ghostwriter--MarkdownEditor QScrollBar::handle:vertical, +ghostwriter--HtmlPreview QScrollBar::handle:vertical, +ghostwriter--Sidebar QScrollBar::handle:vertical { + min-height: 50px; + border: 0; + background: #444749; + border-radius: 3px; +} + +ghostwriter--MarkdownEditor QScrollBar::handle:horizontal:hover, +ghostwriter--HtmlPreview QScrollBar::handle:horizontal:hover, +ghostwriter--Sidebar QScrollBar::handle:horizontal:hover { + background: #3daee9; +} + +ghostwriter--MarkdownEditor QScrollBar::handle:vertical:hover, +ghostwriter--HtmlPreview QScrollBar::handle:vertical:hover, +ghostwriter--Sidebar QScrollBar::handle:vertical:hover { + background: #3daee9; +} + +ghostwriter--MarkdownEditor QScrollBar::add-line, +ghostwriter--HtmlPreview QScrollBar::add-line, +ghostwriter--Sidebar QScrollBar::add-line, +ghostwriter--MarkdownEditor QScrollBar::sub-line, +ghostwriter--HtmlPreview QScrollBar::sub-line, +ghostwriter--Sidebar QScrollBar::sub-line, +ghostwriter--MarkdownEditor QScrollBar::add-page, +ghostwriter--HtmlPreview QScrollBar::add-page, +ghostwriter--Sidebar QScrollBar::add-page, +ghostwriter--MarkdownEditor QScrollBar::sub-page, +ghostwriter--HtmlPreview QScrollBar::sub-page, +ghostwriter--Sidebar QScrollBar::sub-page, +ghostwriter--MarkdownEditor QScrollBar::down-arrow, +ghostwriter--HtmlPreview QScrollBar::down-arrow, +ghostwriter--Sidebar QScrollBar::down-arrow, +ghostwriter--MarkdownEditor QScrollBar::right-arrow, +ghostwriter--HtmlPreview QScrollBar::right-arrow, +ghostwriter--Sidebar QScrollBar::right-arrow { + background: transparent; + border: 0 +} + +/******************************************************************************/ +/* Menu Bar */ +/******************************************************************************/ + +QMainWindow QMenuBar { + color: #bdc3c7; + background-color: #151719; + font-size: 10pt; + spacing: 2px; + border: 0px; + border-bottom: 1px; + border-color: #2c2f31; + border-style: solid; + padding: 1px 0px 1px 0px; +} + +QMainWindow QMenuBar::item { + padding: 2px 7px 2px 7px; + border: 0px; + margin: 2px; + border-radius: 5px; +} + +QMainWindow QMenuBar::item:selected { + background-color: #25282c; +} + +QMainWindow QMenuBar::item:hover { + background-color: #373d42; +} + +QMainWindow QMenuBar::item:pressed { + background-color: #1f2225; +} + +/******************************************************************************/ +/* Popup menus */ +/******************************************************************************/ + +QMainWindow QMenu, +QMenuBar QMenu { + color: #bdc3c7; + background-color: #1a1d1f; + border: 0px; + padding: 7px 0px 7px 0px; +} + +QMainWindow QMenu::item, +QMenuBar QMenu::item { + background-color: transparent; + padding: 5px 10px 5px 10px; + margin: 0px 0px 0px 0px; +} + +QMainWindow QMenu::indicator, +QMenuBar QMenu::indicator { + width: 16px; + height: 16px; + background-color: #25282c; + padding: 0px 5px 0px 5px; + margin: 0px 5px 0px 5px; +} + +QMainWindow QMenu::indicator::unchecked, +QMenuBar QMenu::indicator::unchecked { + width: 16px; + height: 16px; + background-color: #25282c; + border-radius: 2px; + border-style: solid; + border-width: 1px; + border-color: #bdc3c7; + margin: 0px 5px 0px 5px; +} + +QMainWindow QMenu::indicator::checked, +QMenuBar QMenu::indicator::checked { + width: 16px; + height: 16px; + background-color: #074051; + border-radius: 2px; + border-style: solid; + border-width: 1px; + border-color: #bdc3c7; + margin: 0px 5px 0px 5px; +} + +QMainWindow QMenu::item:selected, +QMenuBar QMenu::item::selected { + background-color: #074051; + color: #bdc3c7; +} + +QMainWindow QMenu::icon, +QMenuBar QMenu::icon { + border-radius: 2px; + border-width: 0px; + padding: 1px 3px 1px 3px; + margin: 0px 3px 0px 3px; +} + +QMainWindow QMenu::icon::checked, +QMenuBar QMenu::icon::checked { + background-color: #373d42; +} + +/******************************************************************************/ +/* Editor */ +/******************************************************************************/ + +QMainWindow QPlainTextEdit { + border: 0; + margin: 0; + padding: 5px; + background-color: #151719; + color: #bdc3c7; + selection-color: #bdc3c7; + selection-background-color: #074051; + font-family: Noto Sans Mono; + font-size: 15pt; +} + +QMainWindow QSplitter::handle { + border: 0; + padding: 0; + margin: 0; + background-color: #2c2f31; +} + +QMainWindow QSplitter::handle:vertical { + height: 1px; +} + +QMainWindow QSplitter::handle:horizontal { + width: 1px; +} + +/******************************************************************************/ +/* Sidebar and Activity Bar */ +/******************************************************************************/ + +/* Sidebar */ +QMainWindow ghostwriter--Sidebar, +QSplitter ghostwriter--Sidebar { + border: 0; + margin: 0; + padding: 0; + background-color: #151719; +} + +ghostwriter--Sidebar QStackedWidget { + border: 0; + padding: 1; + margin: 0; + background-color: #151719; + border-width: 0px; +} + +/* Activity bar tabs */ +ghostwriter--Sidebar QPushButton[checkable="true"] { + icon-size: 22px; + min-width: 40px; + max-width: 40px; + height: 40px; + outline: none; + margin: 0; + padding: 0; + border: 0; + background-color: transparent; + color: #8b8f92; + border-width: 0px; + border-left-width: 3px; + border-style: solid; + border-color: transparent; + border-radius: 0px; +} + +ghostwriter--Sidebar QPushButton:checked { + border-color: #3daee9; + color: #bdc3c7; + background-color: #202325; +} + +ghostwriter--Sidebar QPushButton:hover { + background-color: #202325; +} + +ghostwriter--Sidebar QPushButton:checked:hover { + border-color: #3daee9; + color: #bdc3c7; + background-color: #202325; +} + +/* Activity bar buttons */ +ghostwriter--Sidebar QPushButton[checkable="false"] { + icon-size: 22px; + padding: 0; + margin: 0; + border: 0; + border-radius: 5px; + background-color: transparent; + color: #8b8f92; + width: 40px; + height: 40px; +} + +ghostwriter--Sidebar QPushButton[checkable="false"]:hover { + color: #bdc3c7; + background-color: #202325; +} + +ghostwriter--Sidebar QPushButton[checkable="false"]:pressed { + color: #bdc3c7; + background-color: transparent; +} + +/* Stacked widgets inside sidebar pane */ + +ghostwriter--Sidebar QListWidget { + outline: none; + border: 0; + padding: 1; + background-color: #151719; + color: #bdc3c7; + font-size: 11pt; + font-weight: normal +} + +ghostwriter--Sidebar QListWidget::item { + border: 0; + padding: 1 0 1 0; + margin: 0; + background-color: #151719; + color: #bdc3c7; + font-weight: normal +} + +ghostwriter--Sidebar QListWidget::item:selected { + border-radius: 0px; + color: #bdc3c7; + background-color: #074051; +} + +ghostwriter--Sidebar QLabel { + border: 0; + padding: 0; + margin: 0; + background-color: transparent; + font-size: 11pt; + color: #bdc3c7; +} + +/******************************************************************************/ +/* Status bar */ +/******************************************************************************/ + +QStatusBar { + margin: 0; + padding: 0; + border-top: 1px solid #2c2f31; + border-left: 0; + border-right: 0; + border-bottom: 0; + background: #151719; + color: #8b8f92; +} + +QStatusBar QLabel { + font-size: 11pt; + margin: 0px; + padding: 5px; + border: 0; + background: transparent; + color: #8b8f92; +} + +QStatusBar QToolButton { + padding: 5 5 5 5; + margin: 0; + border: 0; + border-radius: 5px; + color: #8b8f92; + background-color: transparent; + font-size: 16px; + width: 32px; + height: 16px; +} + +QStatusBar QToolButton:hover, +QStatusBar QToolButton:checked:hover { + background-color: #373d42; +} + +QStatusBar QToolButton:pressed, +QStatusBar QToolButton:checked:pressed { + color: #73777a; + background-color: #1f2225; +} + +QStatusBar QToolButton:flat, +QStatusBar QToolButton:checked { + background-color: #25282c; +} + +QStatusBar QComboBox { + height: 22px; + border: 0px; + margin: 0; + padding: 0; + color: #8b8f92; + background-color: #151719; + font-size: 11pt; +} + +QStatusBar QComboBox:hover { + border-bottom: 2px solid #3daee9; +} + +QStatusBar QListView { + padding: 7px 0px 7px 0px; + margin: 0px; + color: #bdc3c7; + background-color: #151719; +} + +QStatusBar QListView::item { + background-color: transparent; + padding: 5px 10px 5px 10px; + margin: 0px; +} + +QStatusBar QListView::item:selected { + background-color: #074051; + color: #bdc3c7; +} + +QStatusBar QComboBox::drop-down { + border: 0; + margin: 0; + padding: 0; + height: 20px; + width: 20px; +} + +QStatusBar QComboBox::down-arrow { + border: 0; + margin: 0; + padding: 0; + height: 14px; + width: 14px; + image: url(/tmp/lIaSog.png) +} + +QStatusBar QComboBox::drop-down:hover { + border-radius: 10px; + background-color: #373d42; +} + +QStatusBar #leftStatusBarWidget, +QStatusBar #midStatusBarWidget, +QStatusBar #rightStatusBarWidget { + border: 0; + margin: 0; + padding: 0; +} + +/******************************************************************************/ +/* Find and Replace Pane */ +/******************************************************************************/ + +ghostwriter--FindReplace QLabel { + font-size: 11pt; + margin: 0px; + padding: 5px; + border: 0; + background: transparent; + color: #8b8f92; +} + +ghostwriter--FindReplace QPushButton { + font-size: 16px; + padding: 5 5 5 5; + margin: 0; + border: 0; + border-radius: 5px; + color: #8b8f92; + background-color: transparent; + min-width: 16px; +} + +ghostwriter--FindReplace QPushButton:pressed { + color: #9da2a6; + background-color: transparent; +} + +ghostwriter--FindReplace QPushButton:hover { + color: #ffffff; + background-color: transparent; +} + +ghostwriter--FindReplace QPushButton:disabled { + color: #adb3b6; + background-color: transparent; +} + +ghostwriter--FindReplace QPushButton[checkable="true"] { + color: #8b8f92; + background-color: transparent; + min-width: 32px; + height: 16px; +} + +ghostwriter--FindReplace QPushButton[checkable="true"]:disabled, +ghostwriter--FindReplace QPushButton:flat:disabled { + color: #adb3b6; + background-color: #272a2e; +} + +ghostwriter--FindReplace QPushButton[checkable="true"]:hover, +ghostwriter--FindReplace QPushButton:checked:hover { + background-color: #d0d7db; + background-color: #373d42; +} + +ghostwriter--FindReplace QPushButton[checkable="true"]:pressed, +ghostwriter--FindReplace QPushButton:checked:pressed { + color: #73777a; + background-color: #1f2225; +} + +ghostwriter--FindReplace QPushButton:checked { + background-color: #25282c; +} + +ghostwriter--FindReplace QPushButton:flat { + color: #8b8f92; + background-color: #25282c; + font-weight: bold; +} + +ghostwriter--FindReplace QPushButton:flat:hover { + color: #d0d7db; + background-color: #373d42; +} + +ghostwriter--FindReplace QPushButton:flat:pressed { + color: #73777a; + background-color: #1f2225; +} + +ghostwriter--FindReplace QPushButton:flat:disabled { + color: #adb3b6; + background-color: #272a2e; +} + +ghostwriter--FindReplace QPushButton#matchCaseButton, +ghostwriter--FindReplace QPushButton#regexButton { + font-size: 16px; + font-family: default; + font-weight: bold; +} + +ghostwriter--FindReplace QPushButton#replaceButton, +ghostwriter--FindReplace QPushButton#replaceAllButton { + font-size: 11pt; + font-family: default; +} + +ghostwriter--FindReplace QPushButton#findReplaceCloseButton { + padding: 0; + margin: 0; + icon-size: 16px; +} + +ghostwriter--FindReplace QLineEdit { + color: #bdc3c7; + background-color: #202325; + border: 0px; + border-radius: 3px; + selection-color: #bdc3c7; + selection-background-color: #074051; +} + +ghostwriter--FindReplace QLineEdit:focus { + border: 1px solid #1d2022; +}