// 模块模型-用户
// 秒寻科技
// zt 2024-01-04

package usermodel

import (
	"ipsomc/core/dao/mysql/mysqlmodel"
)

// PC端管理员
type Operator struct {
	mysqlmodel.BaseModelDB
	UserTypeID uint8  `json:"user_type_id" gorm:"default:1"`         //用户类型。1:平台管理员，2：系统管理员，3：项目操作员
	UserName   string `json:"user_name" gorm:"size:32;unique_index"` //用户名（登录名）
	Password   string `json:"password" gorm:"size:512"`              //密码，加密保存
	Nickname   string `json:"nickname" gorm:"size:32"`               //昵称
	Name       string `json:"name" gorm:"size:16"`                   //操作员姓名
	Sex        int    `json:"sex" gorm:"defautl:3"`                  //用户性别 1：男 2：女 3：未知
	Telephone  string `json:"telephone" gorm:"size:32"`              //用户手机号码
	Avatar     string `json:"avatar" gorm:"size:256"`                //用户头像
	Role       string `json:"role" gorm:"size:text"`                 //逗号分隔的角色ID字符串                                                                     //角色ID构成的字符串，逗号分隔                                                                    //包含的角色，以逗号分隔的角色ID字符串

	NewPassword  string `json:"new_password" gorm:"-"`  //新改密码
	Token        string `json:"token" gorm:"-"`         //用户token
	CompanyName  string `json:"company_name" gorm:"-"`  //临时接收前端注册的数据(公司名称)
	TempPassword string `json:"temp_password" gorm:"-"` //临时传递原始密码使用
	VerifyID     string `json:"verify_id" gorm:"-"`     //验证码ID
	VerifyCode   string `json:"verify_code" gorm:"-"`   //验证码

	BelongingCompanyID int `json:"belonging_company_id" gorm:"-"` //
}

type RspOperator struct {
	ID          int    `json:"id"`           //记录的ID
	CompanyID   int    `json:"company_id"`   //公司ID
	CompanyName string `json:"company_name"` //公司名称
	ProjectID   int    `json:"project_id"`   //项目ID（项目编号由由后台维护，前端可读不可写）
	UserTypeID  uint8  `json:"user_type_id"` //用户类型
	Nickname    string `json:"nickname"`     //昵称
	Sex         int    `json:"sex"`          //用户性别 1：男 2：女 3：未知
	Avatar      string `json:"avatar"`       //用户头像                                                            //角色ID构成的字符串，逗号分隔                                                                    //包含的角色，以逗号分隔的角色ID字符串
	Token       string `json:"token"`        //用户token
}

// 管理角色
type Role struct {
	mysqlmodel.BaseModelDB
	TypeID     uint8  `json:"type_id" gorm:"default:2"`    //角色类型，1：平台管理角色，2：其他管理角色
	Name       string `json:"name" gorm:"size:64"`         //角色名称
	Desc       string `json:"desc" gorm:"size:128"`        //角色描述
	Permission string `json:"permission" gorm:"size:text"` //该角色拥有的权限，以逗号分隔的字符串
}

// 管理权限，包括页面权限和按钮权限两种
type Permission struct {
	mysqlmodel.BaseModelDB
	Pid    int    `json:"pid" gorm:"default:0"`     //上级权限ID，无上级则为0
	TypeID int    `json:"type_id" gorm:"default:1"` //权限类型，1：页面权限，2：按钮权限
	Name   string `json:"name" gorm:"size:32"`      //权限名称
	Flag   string `json:"flag" gorm:"size:32"`      //权限标识符，可以是页面名称，也可以是按钮名称
	Desc   string `json:"desc" gorm:"size:128"`     //权限描述
}

// 页面和菜单权限
type MenuBtnPermission struct {
	Pid    int    `json:"pid"`     //上级权限ID，无上级则为0
	TypeID int    `json:"type_id"` //权限类型，1：页面权限，2：按钮权限
	Name   string `json:"name"`    //权限名称
	Flag   string `json:"flag"`    //权限标识符，可以是页面名称，也可以是按钮名称
}

// 返回给前端的操作员权限
type RspOperatorPermission struct {
	Menus []MenuBtnPermission `json:"menus"` //菜单权限
	Btns  []MenuBtnPermission `json:"btns"`  //按钮权限
}
