chore: 初始开源发布

iotlcm-app:小程序端 + 用户端服务。

- app/:uni-app 小程序前端(基于 unibest,MIT)
  - 微信 AppID → YOUR_WX_APPID,uni-app AppID → __UNI__YOURAPPID
  - 内网后端地址 → admin.iotlcm.example.com
  - 应用标题与 unibest 模板 README 重写(保留上游致谢与 MIT 声明)
- server/:GoFrame 用户端服务(基于 XiuAdmin,Apache-2.0)
  - module xiuadmin → git.5iot.com/iotlcm-public/iotlcm-app(360 文件)
  - 支付回调地址 → app.iotlcm.example.com,商户名与应用名泛化
  - 真实手机号 → 合法 11 位编造号(保留号段前 3 位 + 后 4 位)
  - 依赖号码尾部的断言同步更新
  - 补 server/LICENSE(Apache-2.0)
- 移除内部资产:CI 触发器
- 补根 README,LF 行尾 + .gitattributes

已知:TestSysDept_RefreshDeptAncestors 在源仓同一提交上同样失败,属既有缺陷。
This commit is contained in:
MiFaZhan
2026-10-26 14:01:25 +08:00
commit 2ed5dfa6a1
1013 changed files with 138466 additions and 0 deletions
+21
View File
@@ -0,0 +1,21 @@
package router
import (
"context"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/controller/app"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/service"
"github.com/gogf/gf/v2/net/ghttp"
)
func App(ctx context.Context, group *ghttp.RouterGroup) {
group.Group("/", func(group *ghttp.RouterGroup) {
group.Middleware(
service.Middleware().Auth,
)
group.Bind(
app.NewV1(),
)
})
}
+27
View File
@@ -0,0 +1,27 @@
// package router
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package router
import (
"context"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/controller/common"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/service"
"github.com/gogf/gf/v2/net/ghttp"
)
// Common 通用路由
func Common(ctx context.Context, group *ghttp.RouterGroup) {
group.Group("/common", func(group *ghttp.RouterGroup) {
group.Middleware(
service.Middleware().Auth,
)
group.Bind(
common.NewV1(),
)
})
}
+18
View File
@@ -0,0 +1,18 @@
// package router
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package router
import (
"context"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/router/genrouter"
"github.com/gogf/gf/v2/net/ghttp"
)
// 生成代码注册
func Gen(ctx context.Context, group *ghttp.RouterGroup) {
genrouter.Register(ctx, group)
}
+26
View File
@@ -0,0 +1,26 @@
// package router
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package router
import (
"context"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/controller/gen_codes"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/service"
"github.com/gogf/gf/v2/net/ghttp"
)
// GenCodes 代码生成路由
func GenCodes(ctx context.Context, group *ghttp.RouterGroup) {
group.Group("/genCodes", func(group *ghttp.RouterGroup) {
group.Middleware(
service.Middleware().Auth,
)
group.Bind(
gen_codes.NewV1(),
)
})
}
+31
View File
@@ -0,0 +1,31 @@
// package genrouter
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package genrouter
import (
"context"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/service"
"github.com/gogf/gf/v2/net/ghttp"
)
var (
NoLoginRouter []interface{} // 无需登录
LoginRequiredRouter []interface{} // 需要登录
)
// Register 注册通过代码生成的后台路由
func Register(ctx context.Context, group *ghttp.RouterGroup) {
group.Group("/gen", func(group *ghttp.RouterGroup) {
if len(NoLoginRouter) > 0 {
group.Bind(NoLoginRouter...)
}
group.Middleware(service.Middleware().Auth)
if len(LoginRequiredRouter) > 0 {
group.Bind(LoginRequiredRouter...)
}
})
}
@@ -0,0 +1,13 @@
// Package genrouter
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
// @AutoGenerate Version
package genrouter
import "git.5iot.com/iotlcm-public/iotlcm-app/internal/controller/gen"
func init() {
LoginRequiredRouter = append(LoginRequiredRouter, gen.TestDemo) // 测试单表
}
@@ -0,0 +1,13 @@
// Package genrouter
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2026 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
// @AutoGenerate Version
package genrouter
import "git.5iot.com/iotlcm-public/iotlcm-app/internal/controller/gen"
func init() {
LoginRequiredRouter = append(LoginRequiredRouter, gen.TestTree) // 测试树表
}
+28
View File
@@ -0,0 +1,28 @@
// package router
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package router
import (
"context"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/controller/monitor"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/library/websocket"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/service"
"github.com/gogf/gf/v2/net/ghttp"
)
// Monitor 监控功能的路由,不含业务属性的
func Monitor(ctx context.Context, group *ghttp.RouterGroup) {
group.Group("/monitor", func(group *ghttp.RouterGroup) {
group.Middleware(
service.Middleware().Auth,
)
group.Bind(
monitor.NewV1(),
)
group.ALL("/ws", websocket.WsPage)
})
}
+49
View File
@@ -0,0 +1,49 @@
// package router
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package router
import (
"context"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/controller/info"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/service"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
// InitRouter 初始化路由
func InitRouter(ctx context.Context, s *ghttp.Server) {
uploadPath := g.Cfg().MustGet(ctx, "system.upload.local.path").String()
if uploadPath != "" {
s.AddStaticPath("/upload", uploadPath)
}
s.Group("/api/v1", func(group *ghttp.RouterGroup) {
group.Middleware(
service.Middleware().ResponseHandler,
service.Middleware().CORS,
)
group.Bind(
info.NewV1(),
)
})
s.Group("/api/v1", func(group *ghttp.RouterGroup) {
group.Middleware(
service.Middleware().Ctx,
service.Middleware().ResponseHandler,
service.Middleware().CORS,
)
System(ctx, group)
App(ctx, group)
Monitor(ctx, group)
Common(ctx, group)
GenCodes(ctx, group)
Gen(ctx, group)
})
//操作日志
s.BindHookHandler("/*", ghttp.HookAfterOutput, func(r *ghttp.Request) {
service.Middleware().OperationLog(r)
})
}
+28
View File
@@ -0,0 +1,28 @@
// package router
// @Link https://github.com/xiujiecn/xiu-admin
// @Copyright Copyright (c) 2025 LiXiujie
// @Author Lxj <li@xiujie.cn>
// @License https://github.com/xiujiecn/xiu-admin/blob/master/LICENSE
package router
import (
"context"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/controller/system"
"git.5iot.com/iotlcm-public/iotlcm-app/internal/service"
"github.com/gogf/gf/v2/net/ghttp"
)
// System 系统默认功能的路由,不含业务属性的
func System(ctx context.Context, group *ghttp.RouterGroup) {
group.Group("/system", func(group *ghttp.RouterGroup) {
group.Middleware(
service.Middleware().Auth,
)
group.Bind(
system.NewV1(),
)
})
}