# go_api_jxc **Repository Path**: tkskzhoudi/go_api_jxc ## Basic Information - **Project Name**: go_api_jxc - **Description**: 使用go语言开发的进销存后端,uniapp做前端(TODO),一款兼顾pc端移动端的开源进销存软件,特点就是代码简单,基础,面向小白,注释全面,可作为go语言实例教程 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-10-08 - **Last Updated**: 2023-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 冰块进销存后端 ![输入图片说明](https://foruda.gitee.com/images/1665288964925948684/19a4addf_11608889.png "冰块.png") #### 介绍 使用go语言开发的后端,uniapp做的前端,兼顾pc端移动端的开源进销存软件,特点就是代码简单,基础,面向小白,注释全面,可作为go语言实例教程 #### 软件架构 1. 使用gorm连接和管理Mysql数据库 2. 使用gin搭建web服务 3. 使用JWT对需要的接口鉴权 4. 使用签名验证保证数据安全 #### 安装教程 1. 安装最新版goland:https://golang.google.cn/dl/ 2. 安装最新版goland IDE:https://www.jetbrains.com/go/ 3. 安装git:https://git-scm.com/downloads 4. (windows)在工作文件夹空白处按住shift右键,"在此处打开PowerShell窗口",输入命令并回车: ```shell git clone https://gitee.com/tkskzhoudi/go_api_jxc.git ``` 5. 右键文件夹go_api_jxc,"Open Folder as GoLand Project" 6. 点击编辑器下方的"terminal",分别输入以下命令并回车,会生成可执行文件,可执行文件和config.yml拷贝到服务器即可运行 ``` go mod vendor go build ./jxc.exe ``` #### 使用说明 入口文件main.go 添加新的功能步骤: 1. 在Common/database.go下面添加数据库表结构 2. 在Controller下按功能的类别添加go文件比如用户登录属于管理admin类,用户相关功能都写在admin.go下 3. 在main.go里添加路由 访问接口统一使用post,参数为 ```json { "data":"eyJtb2JpbGUiOiIxMTExMTExMTExMSIsInBhc3N3b3JkIjoiMTExMTExMSIsImFwcCI6MSwidGltZXN0YW1wIjoxNjY1MzAyMjkzfQ==", "signature":"883dd37ea550f867d1fc22f0b1949416" } ``` 其中data为请求参数转json字符串后进行base64编码,signature为编码后的data加token进行md5加密作为签名,token在配置文件config.yml里,代码如下: ```javascript const token = "f303f9a15cddbe8ee0296511a8b04b30"; var data = { username: this.username, password: this.password, app: this.app, timestamp: Math.round(new Date().getTime() / 1000) }; data = btoa(JSON.stringify(data)); var signature = md5(data + token); data={ "data":data, "signature":signature } ``` 如果前端使用axios,则需要这样填入参数: ```javascript let params = new URLSearchParams(); params.append('data', data); params.append('signature', signature); ``` 否则后端会接收不到数据 前端解析返回的数据: ```javascript data = JSON.parse(atob(response.data)) localStorage.setItem("token", data.data.token); ``` #### 进度 1. - ✅ 登录(下发token访问令牌) 2. - ✅ 鉴权(请求头需要Authorization) 3. - ❌ 商品类别管理(商品类别录入、修改、查询、删除) 4. - ❌ 商品信息管理(商品信息录入、修改、查询、删除) 5. - ❌ 操作日志(插入、查询操作日志) 6. - TODO #### 数据库表结构介绍 1. - App 应用表 为了让一个服务可以运行多个进销存,我们对所有的用户和请求按照App的id进行分类, 当需要创建新的进销存软件时只需要添加App表里添加一行数据,然后将id写到前端即可 有ID(应用id),AppName(应用名称),Msg(备注)字段 2. - Admin 用户表 我们用手机号做用户的用户名,方便好记,密码则是盐度"jxc"+用户密码再使用md5加密后存储 32位小写, 有ID(用户id),Account(用户名,即手机号),Password(加密后的用户密码),App(用户所属应用id),Role(用户角色id,用于权限设定),Msg(备注)字段 3. - TODO #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request