Compare commits

..

5 Commits

Author SHA1 Message Date
ygxbnet cd061668f9 style(code): 统一代码格式化和导入顺序调整
部署开发环境 / deploy-dev (push) Successful in 2m54s
- 调整了多个组件中的导入语句顺序以保持一致
- 格式化了 App.vue 中的 CSS 样式规则使其更易读
- 规范化了 vite.config.ts 中的配置对象缩进
- 移除了未使用的 computed 导入以减少代码冗余
- 整理了图标组件的导入顺序使其按字母排序
- 统一了代码中的空行和缩进格式
2026-05-01 14:04:26 +08:00
ygxbnet cee1687373 fix(build): 修正版本号链接标志设置
部署开发环境 / deploy-dev (push) Successful in 1m25s
- 修正了 ldflags 中版本变量的包路径,从 global.Version 更新为 dypid/global.Version
- 确保版本信息能够正确注入到二进制文件中
2026-04-30 22:12:40 +08:00
ygxbnet 28aec98414 feat(api): 添加版本信息接口并完善构建流程
部署开发环境 / deploy-dev (push) Successful in 1m22s
- 在api路由中添加/version接口用于显示程序版本信息
- 集成全局Version变量用于版本号管理
- 修改Dockerfile支持版本号注入构建参数
- 更新开发环境部署工作流添加版本信息构建
- 更新生产环境部署工作流添加版本信息构建
- 实现在版本接口中展示程序版本和Gin框架版本
2026-04-30 22:06:21 +08:00
ygxbnet 6d379714cd feat(api): 添加测试接口
部署开发环境 / deploy-dev (push) Successful in 1m35s
- 新增 /test 接口返回 "ok"
- 集成到 API 路由组中
2026-04-30 21:46:25 +08:00
ygxbnet 8c615d01b1 style(home): 移除未使用的CSS注释
部署开发环境 / deploy-dev (push) Successful in 1m41s
- 删除了 search-box 样式中的注释掉的 justify-content 属性
2026-04-25 13:39:45 +08:00
13 changed files with 126 additions and 52 deletions
+5 -1
View File
@@ -11,7 +11,11 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: 构建Docker镜像 - name: 构建Docker镜像
run: docker build -t dypid:latest . run: |
set -x
git_hash=$(git rev-parse --short "$GITHUB_SHA")
build_date=$(TZ=Asia/Shanghai date +"%Y%m%d%H%M")
docker build --build-arg VERSION="dev - $build_date - $git_hash" -t dypid:latest .
- name: 导出镜像 - name: 导出镜像
run: mkdir release && docker save -o release/dypid.tar dypid:latest && docker rmi dypid:latest run: mkdir release && docker save -o release/dypid.tar dypid:latest && docker rmi dypid:latest
+5 -1
View File
@@ -12,7 +12,11 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: 构建Docker镜像 - name: 构建Docker镜像
run: docker build -t dypid:latest . run: |
set -x
git_hash=$(git rev-parse --short "$GITHUB_SHA")
build_date=$(TZ=Asia/Shanghai date +"%Y%m%d%H%M")
docker build --build-arg VERSION="release - $build_date - $git_hash" -t dypid:latest .
- name: 导出镜像 - name: 导出镜像
run: mkdir release && docker save -o release/dypid.tar dypid:latest && docker rmi dypid:latest run: mkdir release && docker save -o release/dypid.tar dypid:latest && docker rmi dypid:latest
+5 -1
View File
@@ -15,9 +15,13 @@ WORKDIR /build
COPY . . COPY . .
COPY --from=webBuilder /build/dist ./web/dist COPY --from=webBuilder /build/dist ./web/dist
ARG VERSION
RUN go env -w CGO_ENABLED=0 \ RUN go env -w CGO_ENABLED=0 \
&& go mod tidy \ && go mod tidy \
&& go build -o dypid && go build \
-ldflags="-s -w -X 'dypid/global.Version=$VERSION'" \
-o dypid
FROM alpine FROM alpine
+10
View File
@@ -1,8 +1,10 @@
package api package api
import ( import (
"dypid/global"
"dypid/internal/controller" "dypid/internal/controller"
"embed" "embed"
"fmt"
"io/fs" "io/fs"
"net/http" "net/http"
@@ -11,6 +13,14 @@ import (
func RegRoutes(r *gin.Engine) { func RegRoutes(r *gin.Engine) {
g := r.Group("/api") //初始化路由组 /api/xxxx g := r.Group("/api") //初始化路由组 /api/xxxx
{
g.GET("/test", func(context *gin.Context) {
context.String(http.StatusOK, "ok")
})
g.GET("/version", func(context *gin.Context) {
context.String(http.StatusOK, fmt.Sprintf("程序版本: %s\nGin: %s", global.Version, gin.Version))
})
}
{ {
g.GET("/token", controller.ListTokenHandler) //获取token列表 g.GET("/token", controller.ListTokenHandler) //获取token列表
g.POST("/token", controller.CreateTokenHandler) //创建token g.POST("/token", controller.CreateTokenHandler) //创建token
+2
View File
@@ -8,3 +8,5 @@ import (
var RDB *redis.Client var RDB *redis.Client
var RCtx = context.Background() var RCtx = context.Background()
var Version = "dev"
+77 -20
View File
@@ -104,30 +104,87 @@ html, body, #app {
} }
/* Gap 间距 */ /* Gap 间距 */
.gap-sm { gap: 8px; } .gap-sm {
.gap-md { gap: 12px; } gap: 8px;
.gap-lg { gap: 16px; } }
.gap-md {
gap: 12px;
}
.gap-lg {
gap: 16px;
}
/* 间距工具类 */ /* 间距工具类 */
.mt-sm { margin-top: 8px; } .mt-sm {
.mt-md { margin-top: 16px; } margin-top: 8px;
.mt-lg { margin-top: 24px; } }
.mb-sm { margin-bottom: 8px; }
.mb-md { margin-bottom: 16px; } .mt-md {
.mb-lg { margin-bottom: 24px; } margin-top: 16px;
.ml-sm { margin-left: 8px; } }
.ml-md { margin-left: 12px; }
.ml-lg { margin-left: 16px; } .mt-lg {
.mr-sm { margin-right: 8px; } margin-top: 24px;
.mr-md { margin-right: 12px; } }
.mr-lg { margin-right: 16px; }
.mb-sm {
margin-bottom: 8px;
}
.mb-md {
margin-bottom: 16px;
}
.mb-lg {
margin-bottom: 24px;
}
.ml-sm {
margin-left: 8px;
}
.ml-md {
margin-left: 12px;
}
.ml-lg {
margin-left: 16px;
}
.mr-sm {
margin-right: 8px;
}
.mr-md {
margin-right: 12px;
}
.mr-lg {
margin-right: 16px;
}
/* 文本工具类 */ /* 文本工具类 */
.text-primary { color: var(--text-primary); } .text-primary {
.text-success { color: var(--success-color); } color: var(--text-primary);
.text-warning { color: var(--warning-color); } }
.text-danger { color: var(--danger-color); }
.text-info { color: var(--info-color); } .text-success {
color: var(--success-color);
}
.text-warning {
color: var(--warning-color);
}
.text-danger {
color: var(--danger-color);
}
.text-info {
color: var(--info-color);
}
/* 加载动画 */ /* 加载动画 */
.loading-container { .loading-container {
+1 -1
View File
@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import {ref, computed} from "vue" import {computed, ref} from "vue"
import axios from "@/axios.ts" import axios from "@/axios.ts"
import {ElMessage} from 'element-plus' import {ElMessage} from 'element-plus'
import {Upload} from '@element-plus/icons-vue' import {Upload} from '@element-plus/icons-vue'
+1 -1
View File
@@ -1,4 +1,4 @@
import {ref, computed} from 'vue' import {ref} from 'vue'
import {defineStore} from 'pinia' import {defineStore} from 'pinia'
export const useCounterStore = defineStore('counter', () => { export const useCounterStore = defineStore('counter', () => {
+2 -2
View File
@@ -1,8 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import {ref, watch, computed} from 'vue' import {ref, watch} from 'vue'
import {useRoute, useRouter} from "vue-router" import {useRoute, useRouter} from "vue-router"
import {useCounterStore} from "@/stores/counter.ts" import {useCounterStore} from "@/stores/counter.ts"
import {Edit, User, Document, CloseBold} from '@element-plus/icons-vue' import {CloseBold, Document, Edit, User} from '@element-plus/icons-vue'
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
+2 -6
View File
@@ -1,12 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import {ref, onMounted, onUnmounted} from 'vue' import {onMounted, onUnmounted, ref} from 'vue'
import axios from "@/axios.ts" import axios from "@/axios.ts"
import {useRoute} from "vue-router" import {useRoute} from "vue-router"
import {ElMessage} from "element-plus" import {ElMessage} from "element-plus"
import { import {DataAnalysis, Document, Key, Search, Upload, Warning} from '@element-plus/icons-vue'
Key, DataAnalysis,
Document, Warning, Search, Upload
} from '@element-plus/icons-vue'
import AddDataDialog from "@/components/AddDataDialog.vue"; import AddDataDialog from "@/components/AddDataDialog.vue";
const route = useRoute() const route = useRoute()
@@ -153,7 +150,6 @@ const statCards = [
.search-box { .search-box {
display: flex; display: flex;
//justify-content: center;
gap: 12px; gap: 12px;
margin-bottom: 32px; margin-bottom: 32px;
} }
+2 -5
View File
@@ -1,12 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import {ref, onMounted, onUnmounted, watch} from 'vue' import {onMounted, onUnmounted, ref, watch} from 'vue'
import {useCounterStore} from "@/stores/counter.ts" import {useCounterStore} from "@/stores/counter.ts"
import axios from "@/axios.ts" import axios from "@/axios.ts"
import {ElMessage, ElMessageBox} from 'element-plus' import {ElMessage, ElMessageBox} from 'element-plus'
import { import {DataAnalysis, Delete, Document, InfoFilled, Key, Refresh, Search, Warning} from '@element-plus/icons-vue'
Key, Refresh, Delete, DataAnalysis,
Document, Warning, Search, InfoFilled
} from '@element-plus/icons-vue'
const store = useCounterStore() const store = useCounterStore()
const result = ref<any>(null) const result = ref<any>(null)
+2 -2
View File
@@ -1,10 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import {ref, onMounted} from "vue" import {onMounted, ref} from "vue"
import axios from "@/axios.ts" import axios from "@/axios.ts"
import {ElMessage} from 'element-plus' import {ElMessage} from 'element-plus'
import {useCounterStore} from "@/stores/counter.ts" import {useCounterStore} from "@/stores/counter.ts"
import {useRouter} from "vue-router" import {useRouter} from "vue-router"
import {Plus, View, Edit, Delete, Key, Memo, Lock} from '@element-plus/icons-vue' import {Delete, Edit, Key, Lock, Memo, Plus, View} from '@element-plus/icons-vue'
import AddDataDialog from '@/components/AddDataDialog.vue' import AddDataDialog from '@/components/AddDataDialog.vue'
const store = useCounterStore() const store = useCounterStore()