/* * @description:文件夹相关-管理员可访问 * @Author: CP * @Date: 2020-09-17 17:50:50 * @FilePath: \construction_management\web\api\tree_api.go */ package api import ( "fmt" "strconv" "github.com/kataras/iris/v12" "go.mod/services" "go.mod/web/utils" "go.mod/web/viewmodels" ) type TreeApi struct { //框架-web应用上下文环境 Ctx iris.Context // 需要用的service ServiceTree services.TreeService } // @Summary 获得目录和数据 // @Tags 目录相关-管理员 // @Description 获得目录和数据 // @Accept json // @Produce json // @Security ApiKeyAuth // @Success 200 {object} viewmodels.Tree "{code:0成功,data:viewmodels.Tree,msg:}" // @Failure 400 {string} string "{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}" // @Router /api/tree [get] func (c *TreeApi) Get() { // 获得项目ID projectIdInt, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{ "code": -1, "msg": err, }) return } // 获得层级文件夹 FolderData := c.ServiceTree.GetAllProject(projectIdInt) c.Ctx.JSON(iris.Map{ "code": 0, "msg": "", "data": FolderData, }) } // @Summary 新增目录 // @Tags 目录相关-管理员 // @Description 新增目录 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param id body string true "目录ID" // @Param depth body int true "目录深度 顶级目录(-1)其他级目录(0)" // @Param name body string true "目录名称" // @Success 200 {string} string "{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}" // @Router /api/tree/create [post] func (c *TreeApi) PostCreate() { ErrMsg := "" // 验证内容 FolderData, err := c.ServiceTree.ValidRule(c.Ctx) if err != nil { ErrMsg = utils.FormValidError(err) c.Ctx.JSON(iris.Map{ "code": -1, "msg": ErrMsg, }) return } else { // 获得项目ID projectIdInt, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{ "code": -1, "msg": fmt.Sprintf("%s", err), }) return } FolderData.ProjectId = strconv.Itoa(projectIdInt) // 新增文件夹 err = c.ServiceTree.Create(FolderData) if err != nil { c.Ctx.JSON(iris.Map{ "code": 3, "msg": fmt.Sprintf("%s", err), }) return } c.Ctx.JSON(iris.Map{ "code": 0, "msg": "新增成功", }) } } // @Summary 重命名 // @Tags 目录相关-管理员 // @Description 重命名-文件夹或者标段 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param id body string true "treeId" // @Param name body string true "重命名的名称" // @Success 200 {string} string "{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}" // @Router /api/tree/rename [post] func (c *TreeApi) PostRename() { ErrMsg := "" // 验证内容 FolderData, err := c.ServiceTree.ValidRule(c.Ctx) if err != nil { ErrMsg = utils.FormValidError(err) c.Ctx.JSON(iris.Map{"code": -1, "msg": ErrMsg}) return } else { // 重命名 projectId, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) return } err = c.ServiceTree.Rename(FolderData, projectId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } c.Ctx.JSON(iris.Map{ "code": 0, "msg": "重命名成功", }) } } // @Summary 删除目录 // @Tags 目录相关-管理员 // @Description 删除目录下的目录以及其他内容 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param id body string true "目录ID" // @Success 200 {string} string "{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}" // @Router /api/tree [delete] func (c *TreeApi) Delete() { // 获得需要删除数据 // api/tree/{id:int min(1)} //id := c.Ctx.Params().Get("id") //id := c.Ctx.URLParam("id") // 获得该目录下所有的目录和标段 // treeData, err := c.ServiceTree.GetFolderAndBid(id) // if err != nil { // c.Ctx.JSON(iris.Map{ // "code": -1, // "msg": fmt.Sprintf("%s", err), // }) // return // } // fmt.Println(treeData) // 添加锁 idString := c.Ctx.URLParam("id") if idString == "" { c.Ctx.JSON(iris.Map{"code": -1, "msg": "目录不存在"}) return } id, err := utils.GetDecryptId(idString) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) return } projectId, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) return } // 删除目录以及标段 err = c.ServiceTree.DeleteFolderAndBid(id, projectId) if err != nil { c.Ctx.JSON(iris.Map{ "code": -1, "msg": fmt.Sprintf("%s", err), }) return } c.Ctx.JSON(iris.Map{ "code": 0, "msg": "删除成功", }) } // @Summary 移动文件夹 // @Tags 目录相关-管理员 // @Description 移动文件夹 // @Accept json // @Produce json // @Security ApiKeyAuth // @Param id body string true "目录ID" // @Param moveId body string true "被放置的目录ID" // @Success 200 {string} string "{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}" // @Router /api/tree/move [post] func (c *TreeApi) PostMove() { // 获得目录ID和移动目录ID--TODO 判断 Tree := viewmodels.Tree{} err := c.Ctx.ReadJSON(&Tree) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } id, err := utils.GetDecryptId(Tree.Id) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } moveId, err := utils.GetDecryptId(Tree.TargetFolderId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } projectId, err := utils.GetProjectId(c.Ctx) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": err}) return } // 移动目录 err = c.ServiceTree.Move(id, moveId, projectId) if err != nil { c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)}) return } c.Ctx.JSON(iris.Map{ "code": 0, "msg": "移动成功", }) }