115 lines
3.0 KiB
Go
115 lines
3.0 KiB
Go
package department
|
|
|
|
import (
|
|
"SciencesServer/app/api/admin/model"
|
|
model2 "SciencesServer/app/common/model"
|
|
"SciencesServer/app/session"
|
|
"time"
|
|
)
|
|
|
|
type Instance struct{ *session.Admin }
|
|
|
|
type InstanceHandle func(session *session.Admin) *Instance
|
|
|
|
type InstanceParams struct {
|
|
ID, ParentID uint64
|
|
Name, Contact, ContactMobile, Remark string
|
|
Status int
|
|
}
|
|
|
|
type (
|
|
// InstanceInfo 部门信息
|
|
InstanceInfo struct {
|
|
ID string `json:"id"`
|
|
ParentID string `json:"parent_id"`
|
|
*model2.SysDepartment
|
|
}
|
|
// InstanceTreeInfo 部门树
|
|
InstanceTreeInfo struct {
|
|
*InstanceInfo
|
|
Children []*InstanceTreeInfo `json:"children"`
|
|
}
|
|
)
|
|
|
|
func (c *Instance) tree(src []*model2.SysDepartment, parentID uint64) []*InstanceTreeInfo {
|
|
out := make([]*InstanceTreeInfo, 0)
|
|
|
|
for _, v := range src {
|
|
if v.ParentID == parentID {
|
|
out = append(out, &InstanceTreeInfo{
|
|
InstanceInfo: &InstanceInfo{
|
|
ID: v.GetEncodeID(),
|
|
ParentID: (&model2.Model{ID: v.ParentID}).GetEncodeID(),
|
|
SysDepartment: v,
|
|
},
|
|
Children: c.tree(src, v.ID),
|
|
})
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
func (c *Instance) Index() ([]*InstanceTreeInfo, error) {
|
|
mSysDepartment := model.NewSysDepartment()
|
|
|
|
out := make([]*model2.SysDepartment, 0)
|
|
|
|
if err := model2.Scan(mSysDepartment.SysDepartment, &out, &model2.ModelWhereOrder{
|
|
Where: model2.NewWhere("tenant_id", c.TenantID),
|
|
Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}); err != nil {
|
|
return nil, err
|
|
}
|
|
return c.tree(out, 0), nil
|
|
}
|
|
|
|
func (c *Instance) Select() ([]*InstanceTreeInfo, error) {
|
|
mSysDepartment := model.NewSysDepartment()
|
|
|
|
out := make([]*model2.SysDepartment, 0)
|
|
|
|
if err := model2.ScanFields(mSysDepartment.SysDepartment, &out, []string{"id", "name"}, &model2.ModelWhereOrder{
|
|
Where: model2.NewWhere("tenant_id", c.TenantID),
|
|
Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}); err != nil {
|
|
return nil, err
|
|
}
|
|
return c.tree(out, 0), nil
|
|
}
|
|
|
|
func (c *Instance) Form(params *InstanceParams) error {
|
|
mSysDepartment := model.NewSysDepartment()
|
|
|
|
if params.ID <= 0 {
|
|
mSysDepartment.ParentID = params.ParentID
|
|
mSysDepartment.Name = params.Name
|
|
mSysDepartment.Contact = params.Contact
|
|
mSysDepartment.ContactMobile = params.ContactMobile
|
|
mSysDepartment.Status = params.Status
|
|
mSysDepartment.Remark = params.Remark
|
|
|
|
return model2.Create(mSysDepartment.SysDepartment)
|
|
}
|
|
mSysDepartment.ID = params.ID
|
|
|
|
return model2.Updates(mSysDepartment.SysDepartment, map[string]interface{}{
|
|
"parent_id": params.ParentID, "name": params.Name, "contact": params.Contact,
|
|
"contact_mobile": params.ContactMobile, "status": params.Status, "remark": params.Remark,
|
|
"updated_at": time.Now(),
|
|
})
|
|
}
|
|
|
|
func (c *Instance) Delete(id uint64) error {
|
|
mSysDepartment := model.NewSysDepartment()
|
|
mSysDepartment.ID = id
|
|
|
|
if err := model2.Delete(mSysDepartment.SysDepartment); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func NewInstance() InstanceHandle {
|
|
return func(session *session.Admin) *Instance {
|
|
return &Instance{Admin: session}
|
|
}
|
|
}
|