This commit is contained in:
2025-06-16 15:48:55 +08:00
parent 346ade21f1
commit 90d1ef301d
47 changed files with 6233 additions and 112 deletions

View File

@@ -6,6 +6,7 @@ import (
"management/internal/erpserver/handler"
"management/internal/erpserver/model/dto"
v1 "management/internal/erpserver/service/v1"
"management/internal/erpserver/templ/system/auditlog"
"management/internal/pkg/convertor"
"management/internal/pkg/render"
)
@@ -25,7 +26,8 @@ func NewAuditHandler(handler *handler.Handler, auditLogService v1.AuditLogServic
func (h *AuditHandler) List(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
h.HTML(w, r, "audit_log/list.tmpl", nil)
ctx := r.Context()
h.Render(ctx, w, auditlog.List(ctx))
case http.MethodPost:
var q dto.SearchDto
q.SearchTimeBegin, q.SearchTimeEnd = convertor.DefaultStartTimeAndEndTime(r.PostFormValue("timeBegin"), r.PostFormValue("timeEnd"))

View File

@@ -8,7 +8,9 @@ import (
"management/internal/erpserver/handler"
"management/internal/erpserver/model/dto"
systemModel "management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
systemService "management/internal/erpserver/service/v1"
"management/internal/erpserver/templ/system/config"
"management/internal/pkg/convertor"
"management/internal/pkg/database"
"management/internal/pkg/render"
@@ -29,7 +31,8 @@ func NewConfigHandler(handler *handler.Handler, configService systemService.Conf
func (h *ConfigHandler) List(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
h.HTML(w, r, "config/list.tmpl", nil)
ctx := r.Context()
h.Render(ctx, w, config.List(ctx))
case http.MethodPost:
var q dto.SearchDto
q.SearchTimeBegin, q.SearchTimeEnd = convertor.DefaultStartTimeAndEndTime(r.PostFormValue("timeBegin"), r.PostFormValue("timeEnd"))
@@ -56,21 +59,15 @@ func (h *ConfigHandler) List(w http.ResponseWriter, r *http.Request) {
}
func (h *ConfigHandler) Add(w http.ResponseWriter, r *http.Request) {
h.HTML(w, r, "config/edit.tmpl", map[string]any{
"Item": &systemModel.Config{},
"Result": "",
})
}
type EditSysConfig struct {
*systemModel.Config
Result string
ctx := r.Context()
h.Render(ctx, w, config.Edit(ctx, &view.EditSysConfig{Config: &systemModel.Config{}}))
}
func (h *ConfigHandler) Edit(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
vars := r.URL.Query()
id := convertor.QueryInt[int32](vars, "id", 0)
vm := &EditSysConfig{}
vm := &view.EditSysConfig{}
if id > 0 {
if conf, err := h.configService.Get(r.Context(), id); err == nil {
vm.Config = conf
@@ -78,10 +75,7 @@ func (h *ConfigHandler) Edit(w http.ResponseWriter, r *http.Request) {
vm.Result = string(b)
}
}
h.HTML(w, r, "config/edit.tmpl", map[string]any{
"Item": vm.Config,
"Result": vm.Result,
})
h.Render(ctx, w, config.Edit(ctx, vm))
}
func (h *ConfigHandler) Save(w http.ResponseWriter, r *http.Request) {

View File

@@ -8,6 +8,7 @@ import (
"management/internal/erpserver/model/form"
systemmodel "management/internal/erpserver/model/system"
v1 "management/internal/erpserver/service/v1"
"management/internal/erpserver/templ/system/department"
"management/internal/pkg/binding"
"management/internal/pkg/convertor"
"management/internal/pkg/render"
@@ -28,7 +29,8 @@ func NewDepartmentHandler(handler *handler.Handler, departmentService v1.Departm
func (h *DepartmentHandler) List(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
h.HTML(w, r, "department/list.tmpl", nil)
ctx := r.Context()
h.Render(ctx, w, department.List(ctx))
case http.MethodPost:
var q dto.SearchDto
q.SearchTimeBegin, q.SearchTimeEnd = convertor.DefaultStartTimeAndEndTime(r.PostFormValue("timeBegin"), r.PostFormValue("timeEnd"))
@@ -57,30 +59,27 @@ func (h *DepartmentHandler) List(w http.ResponseWriter, r *http.Request) {
}
func (h *DepartmentHandler) Add(w http.ResponseWriter, r *http.Request) {
h.HTML(w, r, "department/edit.tmpl", map[string]any{
"Item": &systemmodel.Department{Sort: 6666},
})
ctx := r.Context()
h.Render(ctx, w, department.Edit(ctx, &systemmodel.Department{Sort: 6666}))
}
func (h *DepartmentHandler) AddChildren(w http.ResponseWriter, r *http.Request) {
vars := r.URL.Query()
parentID := convertor.QueryInt[int32](vars, "parentID", 0)
vm := &systemmodel.Department{ParentID: parentID, Sort: 6666}
h.HTML(w, r, "department/edit.tmpl", map[string]any{
"Item": vm,
})
ctx := r.Context()
h.Render(ctx, w, department.Edit(ctx, vm))
}
func (h *DepartmentHandler) Edit(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
vars := r.URL.Query()
id := convertor.QueryInt[int32](vars, "id", 0)
vm := &systemmodel.Department{Sort: 6666}
if id > 0 {
vm, _ = h.departmentService.Get(r.Context(), id)
}
h.HTML(w, r, "department/edit.tmpl", map[string]any{
"Item": vm,
})
h.Render(ctx, w, department.Edit(ctx, vm))
}
func (h *DepartmentHandler) Save(w http.ResponseWriter, r *http.Request) {

View File

@@ -29,7 +29,6 @@ func NewHomeHandler(
func (h *HomeHandler) Home(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
h.Render(ctx, w, home.Home(ctx))
//h.HTML(w, r, "home/home.tmpl", nil)
}
func (h *HomeHandler) Dashboard(w http.ResponseWriter, r *http.Request) {
@@ -39,10 +38,4 @@ func (h *HomeHandler) Dashboard(w http.ResponseWriter, r *http.Request) {
lt, _ := h.loginLogService.LoginTime(ctx, auth.Email)
c := h.loginLogService.LoginCount(ctx, auth.Email)
h.Render(ctx, w, home.Dashboard(ctx, int(c), lt.ThisLoginTime, lt.LastLoginTime))
//h.HTML(w, r, "home/dashboard.tmpl", map[string]any{
// "Auth": auth,
// "User": user,
// "LoginTime": lt,
// "LoginCount": c,
//})
}

View File

@@ -6,6 +6,7 @@ import (
"management/internal/erpserver/handler"
"management/internal/erpserver/model/dto"
v1 "management/internal/erpserver/service/v1"
"management/internal/erpserver/templ/system/loginlog"
"management/internal/pkg/convertor"
"management/internal/pkg/render"
)
@@ -25,7 +26,8 @@ func NewLoginLogHandler(handler *handler.Handler, loginLogService v1.LoginLogSer
func (h *LoginLogHandler) List(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
h.HTML(w, r, "login_log/list.tmpl", nil)
ctx := r.Context()
h.Render(ctx, w, loginlog.List(ctx))
case http.MethodPost:
var q dto.SearchDto
q.SearchTimeBegin, q.SearchTimeEnd = convertor.DefaultStartTimeAndEndTime(r.PostFormValue("timeBegin"), r.PostFormValue("timeEnd"))

View File

@@ -9,6 +9,7 @@ import (
"management/internal/erpserver/handler"
systemmodel "management/internal/erpserver/model/system"
v1 "management/internal/erpserver/service/v1"
"management/internal/erpserver/templ/system/menu"
"management/internal/pkg/convertor"
"management/internal/pkg/database"
"management/internal/pkg/render"
@@ -45,7 +46,8 @@ func (h *MenuHandler) Menus(w http.ResponseWriter, r *http.Request) {
func (h *MenuHandler) List(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
h.HTML(w, r, "menu/list.tmpl", nil)
ctx := r.Context()
h.Render(ctx, w, menu.List(ctx))
case http.MethodPost:
res, err := h.menuService.ListMenuTree(r.Context())
if err != nil {
@@ -66,16 +68,16 @@ func (h *MenuHandler) List(w http.ResponseWriter, r *http.Request) {
}
func (h *MenuHandler) Add(w http.ResponseWriter, r *http.Request) {
h.HTML(w, r, "menu/edit.tmpl", map[string]any{
"Item": &systemmodel.Menu{Style: style, Visible: true, Sort: 6666},
})
ctx := r.Context()
h.Render(ctx, w, menu.Edit(ctx, &systemmodel.Menu{Style: style, Visible: true, Sort: 6666}))
}
func (h *MenuHandler) AddChildren(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
vars := r.URL.Query()
parentID := convertor.QueryInt[int32](vars, "parentID", 0)
vm := &systemmodel.Menu{ParentID: parentID, Style: style, Visible: true, Sort: 6666}
parent, err := h.menuService.Get(r.Context(), parentID)
parent, err := h.menuService.Get(ctx, parentID)
if err == nil {
if parent.Type == "node" {
vm.Type = "menu"
@@ -83,21 +85,18 @@ func (h *MenuHandler) AddChildren(w http.ResponseWriter, r *http.Request) {
vm.Type = "btn"
}
}
h.HTML(w, r, "menu/edit.tmpl", map[string]any{
"Item": vm,
})
h.Render(ctx, w, menu.Edit(ctx, vm))
}
func (h *MenuHandler) Edit(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
vars := r.URL.Query()
id := convertor.QueryInt[int32](vars, "id", 0)
vm := &systemmodel.Menu{Style: style, Sort: 6666}
if id > 0 {
vm, _ = h.menuService.Get(r.Context(), id)
}
h.HTML(w, r, "menu/edit.tmpl", map[string]any{
"Item": vm,
})
h.Render(ctx, w, menu.Edit(ctx, vm))
}
func (h *MenuHandler) Save(w http.ResponseWriter, r *http.Request) {

View File

@@ -8,6 +8,7 @@ import (
"management/internal/erpserver/model/dto"
"management/internal/erpserver/model/form"
"management/internal/erpserver/model/system"
"management/internal/erpserver/model/view"
v1 "management/internal/erpserver/service/v1"
"management/internal/erpserver/templ/system/role"
"management/internal/pkg/binding"
@@ -34,7 +35,6 @@ func (h *RoleHandler) List(w http.ResponseWriter, r *http.Request) {
case http.MethodGet:
ctx := r.Context()
h.Render(ctx, w, role.List(ctx))
//h.HTML(w, r, "role/list.tmpl", nil)
case http.MethodPost:
var q dto.SearchDto
q.SearchTimeBegin, q.SearchTimeEnd = convertor.DefaultStartTimeAndEndTime(r.PostFormValue("timeBegin"), r.PostFormValue("timeEnd"))
@@ -65,9 +65,6 @@ func (h *RoleHandler) List(w http.ResponseWriter, r *http.Request) {
func (h *RoleHandler) Add(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
h.Render(ctx, w, role.Edit(ctx, &system.Role{Sort: 6666}))
//h.HTML(w, r, "role/edit.tmpl", map[string]any{
// "Item": &system.Role{Sort: 6666},
//})
}
func (h *RoleHandler) AddChildren(w http.ResponseWriter, r *http.Request) {
@@ -76,9 +73,6 @@ func (h *RoleHandler) AddChildren(w http.ResponseWriter, r *http.Request) {
vm := &system.Role{ParentID: parentID, Sort: 6666}
ctx := r.Context()
h.Render(ctx, w, role.Edit(ctx, vm))
//h.HTML(w, r, "role/edit.tmpl", map[string]any{
// "Item": vm,
//})
}
func (h *RoleHandler) Edit(w http.ResponseWriter, r *http.Request) {
@@ -90,9 +84,6 @@ func (h *RoleHandler) Edit(w http.ResponseWriter, r *http.Request) {
vm, _ = h.roleService.Get(ctx, id)
}
h.Render(ctx, w, role.Edit(ctx, vm))
//h.HTML(w, r, "role/edit.tmpl", map[string]any{
// "Item": vm,
//})
}
func (h *RoleHandler) Save(w http.ResponseWriter, r *http.Request) {
@@ -206,22 +197,19 @@ func (h *RoleHandler) SetMenu(w http.ResponseWriter, r *http.Request) {
case http.MethodGet:
vars := r.URL.Query()
id := convertor.QueryInt[int32](vars, "id", 0)
vm := struct {
Role *system.Role
Menus []*dto.SetMenuDto
}{}
vm := &view.SetMenuView{
Role: &system.Role{},
Menus: []*dto.SetMenuDto{},
}
ctx := r.Context()
if id > 0 {
ctx := r.Context()
var err error
vm.Role, err = h.roleService.Get(ctx, id)
if err == nil {
vm.Menus, _ = h.menuService.MenuViewData(ctx, vm.Role.ID)
}
}
h.HTML(w, r, "role/set_menu.tmpl", map[string]any{
"Item": vm,
})
h.Render(ctx, w, role.SetMenu(ctx, vm))
case http.MethodPost:
ctx := r.Context()
id := convertor.ConvertInt[int32](r.PostFormValue("ID"), 0)

View File

@@ -11,10 +11,10 @@ import (
systemmodel "management/internal/erpserver/model/system"
v1 "management/internal/erpserver/service/v1"
"management/internal/erpserver/templ/auth"
"management/internal/erpserver/templ/system/user"
"management/internal/pkg/binding"
"management/internal/pkg/convertor"
"management/internal/pkg/render"
"management/internal/pkg/render/html"
)
type UserHandler struct {
@@ -42,27 +42,22 @@ func NewUserHandler(
}
func (h *UserHandler) Add(w http.ResponseWriter, r *http.Request) {
h.HTML(w, r, "user/edit.tmpl", map[string]any{
"Item": &systemmodel.User{
HashedPassword: nil,
},
})
ctx := r.Context()
h.Render(ctx, w, user.Edit(ctx, &systemmodel.User{HashedPassword: nil}))
}
func (h *UserHandler) Edit(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
vars := r.URL.Query()
id := convertor.QueryInt[int32](vars, "id", 0)
user := &systemmodel.User{}
vm := &systemmodel.User{}
if id > 0 {
ctx := r.Context()
if u, err := h.userService.Get(ctx, id); err == nil {
user.HashedPassword = []byte("********")
user = u
vm.HashedPassword = []byte("********")
vm = u
}
}
h.HTML(w, r, "user/edit.tmpl", map[string]any{
"Item": user,
})
h.Render(ctx, w, user.Edit(ctx, vm))
}
func (h *UserHandler) Save(w http.ResponseWriter, r *http.Request) {
@@ -108,9 +103,8 @@ func (h *UserHandler) Save(w http.ResponseWriter, r *http.Request) {
func (h *UserHandler) List(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
h.HTML(w, r, "user/list.tmpl", map[string]any{
"Statuses": html.NewSelectControls(html.SearchStatuses, "0"),
})
ctx := r.Context()
h.Render(ctx, w, user.List(ctx))
case http.MethodPost:
var q dto.SearchDto
q.SearchTimeBegin, q.SearchTimeEnd = convertor.DefaultStartTimeAndEndTime(r.PostFormValue("timeBegin"), r.PostFormValue("timeEnd"))
@@ -140,11 +134,9 @@ func (h *UserHandler) List(w http.ResponseWriter, r *http.Request) {
func (h *UserHandler) Profile(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
user := h.AuthUser(ctx)
vm, _ := h.userService.Get(ctx, user.ID)
h.HTML(w, r, "user/profile.tmpl", map[string]any{
"Item": vm,
})
u := h.AuthUser(ctx)
vm, _ := h.userService.Get(ctx, u.ID)
h.Render(ctx, w, user.Profile(ctx, vm))
}
func (h *UserHandler) Data(w http.ResponseWriter, r *http.Request) {
@@ -168,8 +160,8 @@ func (h *UserHandler) Login(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
switch r.Method {
case http.MethodGet:
user := h.AuthUser(ctx)
if user.ID > 0 {
u := h.AuthUser(ctx)
if u.ID > 0 {
if err := h.RenewToken(ctx); err == nil {
http.Redirect(w, r, "/home.html", http.StatusFound)
return
@@ -179,7 +171,6 @@ func (h *UserHandler) Login(w http.ResponseWriter, r *http.Request) {
_ = h.Destroy(ctx)
component := auth.Login(ctx)
h.Render(ctx, w, component)
//h.HTML(w, r, "oauth/login.tmpl", nil)
case http.MethodPost:
defer func(Body io.ReadCloser) {
err := Body.Close()