Browse Source

Merge branch 'feature/eta_1.1.4'

hsun 1 year ago
parent
commit
79f953690a

+ 725 - 0
controllers/data_manage/chart_framework.go

@@ -0,0 +1,725 @@
+package data_manage
+
+import (
+	"encoding/json"
+	"eta/eta_api/controllers"
+	"eta/eta_api/models"
+	"eta/eta_api/models/data_manage"
+	"eta/eta_api/utils"
+	"fmt"
+	"strings"
+	"time"
+)
+
+// ChartFrameworkController 图库框架
+type ChartFrameworkController struct {
+	controllers.BaseAuthController
+}
+
+// List
+// @Title 列表
+// @Description 列表
+// @Param   AdminId		query	int		false	"创建人ID"
+// @Param   Visibility	query	int		false	"范围: 0-所有; 1-私有; 2-公开"
+// @Param   Keyword		query	string	false	"关键词"
+// @Success 200 Ret=200 获取成功
+// @router /list [get]
+func (this *ChartFrameworkController) List() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	adminId, _ := this.GetInt("AdminId")
+	visibility, _ := this.GetInt("Visibility")
+	if visibility == 1 && adminId <= 0 {
+		adminId = sysUser.AdminId
+	}
+	keyword := this.GetString("Keyword")
+	keyword = strings.TrimSpace(keyword)
+
+	frameworkOb := new(data_manage.ChartFramework)
+	cond := ``
+	pars := make([]interface{}, 0)
+	if adminId > 0 {
+		cond += fmt.Sprintf(` AND %s = ?`, data_manage.ChartFrameworkColumns.AdminId)
+		pars = append(pars, adminId)
+	}
+	if keyword != "" {
+		cond += fmt.Sprintf(` AND %s LIKE ?`, data_manage.ChartFrameworkColumns.FrameworkName)
+		pars = append(pars, "%"+keyword+"%")
+	}
+	if visibility > 0 {
+		visibilityArr := map[int]int{1: 0, 2: 1}
+		cond += fmt.Sprintf(` AND %s = ?`, data_manage.ChartFrameworkColumns.IsPublic)
+		pars = append(pars, visibilityArr[visibility])
+	}
+
+	orderRule := `sort ASC, create_time DESC`
+	list, e := frameworkOb.GetItemsByCondition(cond, pars, []string{}, orderRule)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取框架列表失败, Err: " + e.Error()
+		return
+	}
+	resp := make([]*data_manage.ChartFrameworkItem, 0)
+	for _, v := range list {
+		t := data_manage.FormatChartFramework2Item(v)
+		resp = append(resp, t)
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// PublicMenu
+// @Title 公开框架目录
+// @Description 公开框架目录
+// @Success 200 Ret=200 获取成功
+// @router /public_menu [get]
+func (this *ChartFrameworkController) PublicMenu() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+
+	frameworkOb := new(data_manage.ChartFramework)
+	cond := fmt.Sprintf(` AND %s = ?`, data_manage.ChartFrameworkColumns.IsPublic)
+	pars := make([]interface{}, 0)
+	pars = append(pars, 1)
+	orderRule := `public_time ASC, sort ASC, create_time DESC`
+	list, e := frameworkOb.GetItemsByCondition(cond, pars, []string{}, orderRule)
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取公开框架失败, Err: " + e.Error()
+		return
+	}
+
+	userExist := make(map[int]bool)
+	userFrameworks := make(map[int][]*data_manage.ChartFrameworkItem)
+	resp := make([]*data_manage.ChartFrameworkPublicMenuItem, 0)
+	for _, v := range list {
+		if !userExist[v.AdminId] {
+			u := new(data_manage.ChartFrameworkPublicMenuItem)
+			u.AdminId = v.AdminId
+			u.MenuName = fmt.Sprintf("%s的框架", v.AdminName)
+			resp = append(resp, u)
+			userExist[v.AdminId] = true
+		}
+		t := data_manage.FormatChartFramework2Item(v)
+		if userFrameworks[v.AdminId] == nil {
+			userFrameworks[v.AdminId] = make([]*data_manage.ChartFrameworkItem, 0)
+		}
+		userFrameworks[v.AdminId] = append(userFrameworks[v.AdminId], t)
+	}
+	for _, v := range resp {
+		v.Frameworks = userFrameworks[v.AdminId]
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+}
+
+// Add
+// @Title 新增框架
+// @Description 新增框架
+// @Param	request	body data_manage.ChartFrameworkAddReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /add [post]
+func (this *ChartFrameworkController) Add() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	// 参数校验
+	var req data_manage.ChartFrameworkAddReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	req.FrameworkName = strings.TrimSpace(req.FrameworkName)
+	if req.FrameworkName == "" {
+		br.Msg = "框架名称不可为空"
+		return
+	}
+
+	// 重名校验
+	{
+		ob := new(data_manage.ChartFramework)
+		cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, data_manage.ChartFrameworkColumns.FrameworkName, data_manage.ChartFrameworkColumns.AdminId)
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.FrameworkName, sysUser.AdminId)
+		exist, e := ob.GetItemByCondition(cond, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
+			return
+		}
+		if exist != nil {
+			br.Msg = "框架名称已存在"
+			return
+		}
+	}
+
+	now := time.Now().Local()
+	frameworkCode := utils.MD5(fmt.Sprint(now.UnixMilli()))
+	item := new(data_manage.ChartFramework)
+	item.FrameworkName = req.FrameworkName
+	item.FrameworkCode = frameworkCode
+	item.FrameworkImg = req.FrameworkImg
+	item.FrameworkContent = req.FrameworkContent
+	item.AdminId = sysUser.AdminId
+	item.AdminName = sysUser.RealName
+	item.CreateTime = now
+	item.ModifyTime = now
+	nodes := make([]*data_manage.ChartFrameworkNode, 0)
+	if len(req.Nodes) > 0 {
+		for _, v := range req.Nodes {
+			if v.MyChartClassifyId <= 0 {
+				continue
+			}
+			t := new(data_manage.ChartFrameworkNode)
+			t.FrameworkName = req.FrameworkName
+			t.NodeName = v.NodeName
+			t.MyChartClassifyId = v.MyChartClassifyId
+			t.CreateTime = now
+			nodes = append(nodes, t)
+		}
+	}
+	if e := item.CreateFrameworkAndNodes(item, nodes); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "新增框架及节点失败, Err: " + e.Error()
+		return
+	}
+	detail := data_manage.FormatChartFramework2Item(item)
+
+	br.Data = detail
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Edit
+// @Title 编辑框架
+// @Description 编辑框架
+// @Param	request	body data_manage.ChartFrameworkEditReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /edit [post]
+func (this *ChartFrameworkController) Edit() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	// 参数校验
+	var req data_manage.ChartFrameworkEditReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if req.ChartFrameworkId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", req.ChartFrameworkId)
+		return
+	}
+	req.FrameworkName = strings.TrimSpace(req.FrameworkName)
+	if req.FrameworkName == "" {
+		br.Msg = "框架名称不可为空"
+		return
+	}
+
+	frameworkOb := new(data_manage.ChartFramework)
+	item, e := frameworkOb.GetItemById(req.ChartFrameworkId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "框架不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取框架失败, Err: " + e.Error()
+		return
+	}
+
+	// 重名校验
+	{
+		ob := new(data_manage.ChartFramework)
+		cond := fmt.Sprintf(` AND %s <> ? AND %s = ? AND %s = ?`, ob.PrimaryId(), data_manage.ChartFrameworkColumns.FrameworkName, data_manage.ChartFrameworkColumns.AdminId)
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.ChartFrameworkId, req.FrameworkName, sysUser.AdminId)
+		exist, e := ob.GetItemByCondition(cond, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
+			return
+		}
+		if exist != nil {
+			br.Msg = "框架名称已存在"
+			return
+		}
+	}
+
+	now := time.Now().Local()
+	item.FrameworkName = req.FrameworkName
+	item.FrameworkImg = req.FrameworkImg
+	item.FrameworkContent = req.FrameworkContent
+	item.ModifyTime = now
+	updateCols := []string{"FrameworkName", "FrameworkImg", "FrameworkContent", "ModifyTime"}
+	nodes := make([]*data_manage.ChartFrameworkNode, 0)
+	if len(req.Nodes) > 0 {
+		for _, v := range req.Nodes {
+			if v.MyChartClassifyId <= 0 {
+				continue
+			}
+			t := new(data_manage.ChartFrameworkNode)
+			t.ChartFrameworkId = req.ChartFrameworkId
+			t.FrameworkName = req.FrameworkName
+			t.NodeName = v.NodeName
+			t.MyChartClassifyId = v.MyChartClassifyId
+			t.CreateTime = now
+			nodes = append(nodes, t)
+		}
+	}
+	if e := item.EditFrameworkAndNodes(item, updateCols, nodes); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "编辑框架及节点失败, Err: " + e.Error()
+		return
+	}
+	detail := data_manage.FormatChartFramework2Item(item)
+
+	br.Data = detail
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Remove
+// @Title 删除框架
+// @Description 删除视频
+// @Param	request	body data_manage.ChartFrameworkRemoveReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /remove [post]
+func (this *ChartFrameworkController) Remove() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	// 参数校验
+	var req data_manage.ChartFrameworkRemoveReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if req.ChartFrameworkId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", req.ChartFrameworkId)
+		return
+	}
+
+	ob := new(data_manage.ChartFramework)
+	item, e := ob.GetItemById(req.ChartFrameworkId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Ret = 200
+			br.Success = true
+			br.Msg = "操作成功"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取框架失败, Err: " + e.Error()
+		return
+	}
+	if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && item.AdminId != sysUser.AdminId {
+		br.Msg = "无权操作"
+		return
+	}
+
+	if e := item.RemoveFrameworkAndNodes(req.ChartFrameworkId); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "删除框架失败, Err: " + e.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Rename
+// @Title 重命名框架
+// @Description 重命名框架
+// @Param	request	body data_manage.ChartFrameworkRenameReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /rename [post]
+func (this *ChartFrameworkController) Rename() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	// 参数校验
+	var req data_manage.ChartFrameworkRenameReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if req.ChartFrameworkId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", req.ChartFrameworkId)
+		return
+	}
+	req.FrameworkName = strings.TrimSpace(req.FrameworkName)
+	if req.FrameworkName == "" {
+		br.Msg = "框架名称不可为空"
+		return
+	}
+
+	frameworkOb := new(data_manage.ChartFramework)
+	item, e := frameworkOb.GetItemById(req.ChartFrameworkId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "框架不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取框架失败, Err: " + e.Error()
+		return
+	}
+
+	// 重名校验
+	{
+		ob := new(data_manage.ChartFramework)
+		cond := fmt.Sprintf(` AND %s <> ? AND %s = ? AND %s = ?`, ob.PrimaryId(), data_manage.ChartFrameworkColumns.FrameworkName, data_manage.ChartFrameworkColumns.AdminId)
+		pars := make([]interface{}, 0)
+		pars = append(pars, req.ChartFrameworkId, req.FrameworkName, sysUser.AdminId)
+		exist, e := ob.GetItemByCondition(cond, pars)
+		if e != nil && e.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
+			return
+		}
+		if exist != nil {
+			br.Msg = "框架名称已存在"
+			return
+		}
+	}
+
+	now := time.Now().Local()
+	item.FrameworkName = req.FrameworkName
+	item.ModifyTime = now
+	updateCols := []string{"FrameworkName", "ModifyTime"}
+	if e := item.Update(updateCols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "框架重命名失败, Err: " + e.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// EditPublic
+// @Title 公开/隐藏框架
+// @Description 公开/隐藏框架
+// @Param	request	body data_manage.ChartFrameworkEditPublicReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /edit_public [post]
+func (this *ChartFrameworkController) EditPublic() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	// 参数校验
+	var req data_manage.ChartFrameworkEditPublicReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if req.ChartFrameworkId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", req.ChartFrameworkId)
+		return
+	}
+	if req.IsPublic != 0 && req.IsPublic != 1 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, IsPublic: %d", req.IsPublic)
+		return
+	}
+
+	frameworkOb := new(data_manage.ChartFramework)
+	item, e := frameworkOb.GetItemById(req.ChartFrameworkId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "框架不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取框架失败, Err: " + e.Error()
+		return
+	}
+
+	now := time.Now().Local()
+	updateCols := []string{"IsPublic", "PublicTime", "ModifyTime"}
+	item.IsPublic = req.IsPublic
+	if req.IsPublic == 1 {
+		item.PublicTime = time.Now().Local()
+	} else {
+		item.PublicTime = time.Time{}
+	}
+	item.ModifyTime = now
+	if e := item.Update(updateCols); e != nil {
+		br.Msg = "操作失败"
+		br.ErrMsg = "更新框架是否公开失败, Err: " + e.Error()
+		return
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Move
+// @Title 移动排序
+// @Description 移动排序
+// @Param	request	body data_manage.ChartFrameworkMoveReq true "type json string"
+// @Success 200 Ret=200 操作成功
+// @router /move [post]
+func (this *ChartFrameworkController) Move() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	// 参数校验
+	var req data_manage.ChartFrameworkMoveReq
+	if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + e.Error()
+		return
+	}
+	if req.ChartFrameworkId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", req.ChartFrameworkId)
+		return
+	}
+
+	frameworkOb := new(data_manage.ChartFramework)
+	item, e := frameworkOb.GetItemById(req.ChartFrameworkId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "框架不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取框架失败, Err: " + e.Error()
+		return
+	}
+
+	updateCols := make([]string, 0)
+	// 上一个兄弟节点
+	if req.PrevChartFrameworkId > 0 {
+		prev, e := frameworkOb.GetItemById(req.PrevChartFrameworkId)
+		if e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取上一个兄弟节点失败, Err: " + e.Error()
+			return
+		}
+
+		// 两个兄弟节点之间
+		if req.NextChartFrameworkId > 0 {
+			next, e := frameworkOb.GetItemById(req.PrevChartFrameworkId)
+			if e != nil {
+				br.Msg = "操作失败"
+				br.ErrMsg = "获取下一个兄弟节点失败, Err: " + e.Error()
+				return
+			}
+			// 如果上一个与下一个排序权重是一致的, 那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2, 自己变成上一个兄弟的排序权重+1
+			if prev.Sort == next.Sort || prev.Sort == item.Sort {
+				strUpdate := `sort + 2`
+				_ = data_manage.UpdateChartFrameworkSort(sysUser.AdminId, prev.ChartFrameworkId, prev.Sort, strUpdate)
+			} else {
+				// 如果下一个排序权重正好是上一个节点的下一层, 那么需要再加一层了
+				if next.Sort-prev.Sort == 1 {
+					//变更兄弟节点的排序
+					strUpdate := `sort + 1`
+					_ = data_manage.UpdateChartFrameworkSort(sysUser.AdminId, 0, prev.Sort, strUpdate)
+				}
+			}
+		}
+
+		// 上一个兄弟节点sort+1
+		item.Sort = prev.Sort + 1
+		item.ModifyTime = time.Now()
+		updateCols = append(updateCols, "Sort", "ModifyTime")
+	} else {
+		first, err := data_manage.GetFirstChartFramework(sysUser.AdminId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取我的图库框架排首位的数据失败, Err:" + err.Error()
+			return
+		}
+		if first != nil && first.Sort == 0 {
+			strUpdate := ` sort + 1 `
+			_ = data_manage.UpdateChartFrameworkSort(sysUser.AdminId, first.ChartFrameworkId-1, 0, strUpdate)
+		}
+
+		// 排首位
+		item.Sort = 0
+		item.ModifyTime = time.Now()
+		updateCols = append(updateCols, "Sort", "ModifyTime")
+	}
+
+	if len(updateCols) > 0 {
+		if e := item.Update(updateCols); e != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "更新框架排序失败, Err: " + e.Error()
+			return
+		}
+	}
+
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}
+
+// Detail
+// @Title 框架详情
+// @Description 框架详情
+// @Param   ChartFrameworkId  query  int  true  "框架ID"
+// @Success 200 Ret=200 操作成功
+// @router /detail [get]
+func (this *ChartFrameworkController) Detail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = false
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	frameworkId, _ := this.GetInt("ChartFrameworkId")
+	if frameworkId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", frameworkId)
+		return
+	}
+
+	frameworkOb := new(data_manage.ChartFramework)
+	item, e := frameworkOb.GetItemById(frameworkId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "框架不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "操作失败"
+		br.ErrMsg = "获取框架失败, Err: " + e.Error()
+		return
+	}
+	detail := data_manage.FormatChartFramework2Item(item)
+
+	br.Data = detail
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "操作成功"
+}

+ 75 - 0
controllers/data_manage/my_chart.go

@@ -598,6 +598,20 @@ func (this *MyChartController) ClassifyDelete() {
 		return
 	}
 
+	nodeOb := new(data_manage.ChartFrameworkNode)
+	cond := ` AND my_chart_classify_id = ?`
+	pars := make([]interface{}, 0)
+	pars = append(pars, req.MyChartClassifyId)
+	nodes, e := nodeOb.GetItemsByCondition(cond, pars, []string{}, "")
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取我的图表分类关联的框架节点失败, Err: " + e.Error()
+		return
+	}
+	if len(nodes) > 0 {
+		br.Msg = "该图分类已添加节点链接, 不允许删除"
+		return
+	}
 	//var condition string
 	//var pars []interface{}
 	//
@@ -1981,3 +1995,64 @@ func (this *MyChartController) CompanyPublicClassifyList() {
 //func init() {
 //	data.AddAllMyChartInfo()
 //}
+
+// ClassifyFrameworkNodeList
+// @Title 我的图表分类-关联的框架节点列表
+// @Description 我的图表分类-关联的框架节点列表
+// @Param   MyChartClassifyId	query	int	false	"图表分类ID"
+// @Success 200 Ret=200 获取成功
+// @router /classify/framework_node_list [get]
+func (this *MyChartController) ClassifyFrameworkNodeList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		if br.ErrMsg == "" {
+			br.IsSendEmail = true
+		}
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	sysUser := this.SysUser
+	if sysUser == nil {
+		br.Msg = "请登录"
+		br.ErrMsg = "请登录,SysUser Is Empty"
+		br.Ret = 408
+		return
+	}
+	classifyId, _ := this.GetInt("MyChartClassifyId")
+	if classifyId <= 0 {
+		br.Msg = "参数有误"
+		br.ErrMsg = fmt.Sprintf("参数有误, MyChartClassifyId: %d", classifyId)
+		return
+	}
+
+	_, e := data_manage.GetMyChartClassifyById(sysUser.AdminId, classifyId)
+	if e != nil {
+		if e.Error() == utils.ErrNoRow() {
+			br.Msg = "分类不存在, 请刷新页面"
+			return
+		}
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取分类信息失败, Err:" + e.Error()
+		return
+	}
+
+	nodeOb := new(data_manage.ChartFrameworkNode)
+	cond := ` AND my_chart_classify_id = ?`
+	pars := make([]interface{}, 0)
+	pars = append(pars, classifyId)
+	nodes, e := nodeOb.GetItemsByCondition(cond, pars, []string{}, "")
+	if e != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取我的图表分类关联的框架节点失败, Err: " + e.Error()
+		return
+	}
+	resp := make([]*data_manage.ChartFrameworkNodeItem, 0)
+	for _, v := range nodes {
+		resp = append(resp, data_manage.FormatChartFrameworkNode2Item(v))
+	}
+
+	br.Data = resp
+	br.Ret = 200
+	br.Msg = "获取成功"
+	br.Success = true
+}

+ 355 - 0
models/data_manage/chart_framework.go

@@ -0,0 +1,355 @@
+package data_manage
+
+import (
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// ChartFramework 图库框架表
+type ChartFramework struct {
+	ChartFrameworkId int       `orm:"column(chart_framework_id);pk"`
+	FrameworkCode    string    `description:"框架唯一编码"`
+	FrameworkName    string    `description:"框架名称"`
+	FrameworkImg     string    `description:"框架图片"`
+	FrameworkContent string    `description:"框架内容"`
+	IsPublic         int       `description:"是否公开:0-私有;1-公开"`
+	PublicTime       time.Time `description:"公开时间"`
+	Sort             int       `description:"排序"`
+	AdminId          int       `description:"创建人ID"`
+	AdminName        string    `description:"创建人姓名"`
+	CreateTime       time.Time `description:"创建时间"`
+	ModifyTime       time.Time `description:"更新时间"`
+}
+
+func (m *ChartFramework) TableName() string {
+	return "chart_framework"
+}
+
+func (m *ChartFramework) PrimaryId() string {
+	return ChartFrameworkColumns.ChartFrameworkId
+}
+
+var ChartFrameworkColumns = struct {
+	ChartFrameworkId string
+	FrameworkCode    string
+	FrameworkName    string
+	FrameworkImg     string
+	FrameworkContent string
+	IsPublic         string
+	PublicTime       string
+	Sort             string
+	AdminId          string
+	AdminName        string
+	CreateTime       string
+	ModifyTime       string
+}{
+	ChartFrameworkId: "chart_framework_id",
+	FrameworkCode:    "framework_code",
+	FrameworkName:    "framework_name",
+	FrameworkImg:     "framework_img",
+	FrameworkContent: "framework_content",
+	IsPublic:         "is_public",
+	PublicTime:       "public_time",
+	Sort:             "sort",
+	AdminId:          "admin_id",
+	AdminName:        "admin_name",
+	CreateTime:       "create_time",
+	ModifyTime:       "modify_time",
+}
+
+func (m *ChartFramework) Create() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.ChartFrameworkId = int(id)
+	return
+}
+
+func (m *ChartFramework) CreateMulti(items []*ChartFramework) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+func (m *ChartFramework) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *ChartFramework) Del() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	_, err = o.Raw(sql, m.ChartFrameworkId).Exec()
+	return
+}
+
+func (m *ChartFramework) GetItemById(id int) (item *ChartFramework, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *ChartFramework) GetItemByCondition(condition string, pars []interface{}) (item *ChartFramework, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+func (m *ChartFramework) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func (m *ChartFramework) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*ChartFramework, err error) {
+	o := orm.NewOrmUsingDB("data")
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func (m *ChartFramework) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*ChartFramework, err error) {
+	o := orm.NewOrmUsingDB("data")
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+func (m *ChartFramework) CreateFrameworkAndNodes(item *ChartFramework, nodes []*ChartFrameworkNode) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	tx, e := o.Begin()
+	if e != nil {
+		err = fmt.Errorf("orm begin err: %s", e.Error())
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = tx.Rollback()
+			return
+		}
+		_ = tx.Commit()
+	}()
+
+	id, e := tx.Insert(item)
+	if e != nil {
+		err = fmt.Errorf("insert framework err: %s", e.Error())
+		return
+	}
+	newId := int(id)
+	item.ChartFrameworkId = newId
+
+	if len(nodes) > 0 {
+		for _, n := range nodes {
+			n.ChartFrameworkId = newId
+		}
+		_, e = tx.InsertMulti(len(nodes), nodes)
+		if e != nil {
+			err = fmt.Errorf("insert multi nodes err: %s", e.Error())
+			return
+		}
+	}
+	return
+}
+
+func (m *ChartFramework) EditFrameworkAndNodes(item *ChartFramework, updateCols []string, nodes []*ChartFrameworkNode) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	tx, e := o.Begin()
+	if e != nil {
+		err = fmt.Errorf("orm begin err: %s", e.Error())
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = tx.Rollback()
+			return
+		}
+		_ = tx.Commit()
+	}()
+
+	_, e = tx.Update(item, updateCols...)
+	if e != nil {
+		err = fmt.Errorf("framework update err: %s", e.Error())
+		return
+	}
+
+	sql := `DELETE FROM chart_framework_node WHERE chart_framework_id = ?`
+	_, e = tx.Raw(sql, item.ChartFrameworkId).Exec()
+	if e != nil {
+		err = fmt.Errorf("clear nodes err: %s", e.Error())
+		return
+	}
+	if len(nodes) > 0 {
+		_, e = tx.InsertMulti(len(nodes), nodes)
+		if e != nil {
+			err = fmt.Errorf("insert multi nodes err: %s", e.Error())
+			return
+		}
+	}
+	return
+}
+
+func (m *ChartFramework) RemoveFrameworkAndNodes(frameworkId int) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	tx, e := o.Begin()
+	if e != nil {
+		err = fmt.Errorf("orm begin err: %s", e.Error())
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = tx.Rollback()
+			return
+		}
+		_ = tx.Commit()
+	}()
+
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	_, e = tx.Raw(sql, frameworkId).Exec()
+	if e != nil {
+		err = fmt.Errorf("delete framework err: %s", e.Error())
+		return
+	}
+
+	sql = `DELETE FROM chart_framework_node WHERE chart_framework_id = ?`
+	_, e = tx.Raw(sql, frameworkId).Exec()
+	if e != nil {
+		err = fmt.Errorf("clear nodes err: %s", e.Error())
+		return
+	}
+	return
+}
+
+// ChartFrameworkAddReq 图库框架新增请求体
+type ChartFrameworkAddReq struct {
+	FrameworkName    string                  `description:"框架名称"`
+	FrameworkImg     string                  `description:"框架图片"`
+	FrameworkContent string                  `description:"框架内容"`
+	Nodes            []ChartFrameworkNodeReq `description:"框架节点"`
+}
+
+// ChartFrameworkNodeReq 图库框架节点请求体
+type ChartFrameworkNodeReq struct {
+	MyChartClassifyId int    `description:"我的图表分类ID"`
+	NodeName          string `description:"节点名称"`
+}
+
+// ChartFrameworkEditReq 图库框架编辑请求体
+type ChartFrameworkEditReq struct {
+	ChartFrameworkId int `description:"图库框架ID"`
+	ChartFrameworkAddReq
+}
+
+// ChartFrameworkRemoveReq 图库框架编辑请求体
+type ChartFrameworkRemoveReq struct {
+	ChartFrameworkId int `description:"图库框架ID"`
+}
+
+// ChartFrameworkRenameReq 图库框架重命名请求体
+type ChartFrameworkRenameReq struct {
+	ChartFrameworkId int    `description:"图库框架ID"`
+	FrameworkName    string `description:"框架名称"`
+}
+
+// ChartFrameworkEditPublicReq 图库框架编辑公开请求体
+type ChartFrameworkEditPublicReq struct {
+	ChartFrameworkId int `description:"图库框架ID"`
+	IsPublic         int `description:"0-隐藏公开; 1-公开"`
+}
+
+// ChartFrameworkMoveReq 图库框架移动排序请求体
+type ChartFrameworkMoveReq struct {
+	ChartFrameworkId     int `description:"图库框架ID"`
+	PrevChartFrameworkId int `description:"上一个框架ID"`
+	NextChartFrameworkId int `description:"下一个框架ID"`
+}
+
+// UpdateChartFrameworkSort 更新我的图库框架排序
+func UpdateChartFrameworkSort(adminId, frameworkId, current int, updates string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := fmt.Sprintf(`UPDATE chart_framework SET sort = %s WHERE admin_id = ? and sort > ?`, updates)
+	if frameworkId > 0 {
+		sql += ` OR (chart_framework_id > ` + fmt.Sprint(frameworkId) + ` AND sort = ` + fmt.Sprint(current) + `)`
+	}
+	_, err = o.Raw(sql, adminId, current).Exec()
+	return
+}
+
+// GetFirstChartFramework 获取我的图库框架排首位的数据
+func GetFirstChartFramework(adminId int) (item *ChartFramework, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := `SELECT * FROM chart_framework WHERE admin_id = ? ORDER BY sort ASC,chart_framework_id ASC LIMIT 1`
+	err = o.Raw(sql, adminId).QueryRow(&item)
+	return
+}
+
+// ChartFrameworkItem 图库框架表信息
+type ChartFrameworkItem struct {
+	ChartFrameworkId int    `description:"框架ID"`
+	FrameworkCode    string `description:"框架唯一编码"`
+	FrameworkName    string `description:"框架名称"`
+	FrameworkImg     string `description:"框架图片"`
+	FrameworkContent string `description:"框架内容"`
+	IsPublic         int    `description:"是否公开:0-私有;1-公开"`
+	PublicTime       string `description:"公开时间"`
+	Sort             int    `description:"排序"`
+	AdminId          int    `description:"创建人ID"`
+	AdminName        string `description:"创建人姓名"`
+	CreateTime       string `description:"创建时间"`
+	ModifyTime       string `description:"更新时间"`
+}
+
+// FormatChartFramework2Item 格式化框架信息
+func FormatChartFramework2Item(origin *ChartFramework) (item *ChartFrameworkItem) {
+	if origin == nil {
+		return
+	}
+	item = new(ChartFrameworkItem)
+	item.ChartFrameworkId = origin.ChartFrameworkId
+	item.FrameworkCode = origin.FrameworkCode
+	item.FrameworkName = origin.FrameworkName
+	item.FrameworkImg = origin.FrameworkImg
+	item.FrameworkContent = origin.FrameworkContent
+	item.IsPublic = origin.IsPublic
+	item.PublicTime = utils.TimeTransferString(utils.FormatDateTime, origin.PublicTime)
+	item.Sort = origin.Sort
+	item.AdminId = origin.AdminId
+	item.AdminName = origin.AdminName
+	item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, origin.CreateTime)
+	item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, origin.ModifyTime)
+	return
+}
+
+// ChartFrameworkPublicMenuItem 公开框架目录
+type ChartFrameworkPublicMenuItem struct {
+	AdminId    int                   `description:"创建人ID"`
+	MenuName   string                `description:"目录名称"`
+	Frameworks []*ChartFrameworkItem `description:"框架列表"`
+}

+ 135 - 0
models/data_manage/chart_framework_node.go

@@ -0,0 +1,135 @@
+package data_manage
+
+import (
+	"eta/eta_api/utils"
+	"fmt"
+	"github.com/beego/beego/v2/client/orm"
+	"strings"
+	"time"
+)
+
+// ChartFrameworkNode 图库框架节点表
+type ChartFrameworkNode struct {
+	ChartFrameworkNodeId int       `orm:"column(chart_framework_node_id);pk"`
+	ChartFrameworkId     int       `description:"框架ID"`
+	FrameworkName        string    `description:"框架名称"`
+	NodeName             string    `description:"节点名称"`
+	MyChartClassifyId    int       `description:"我的图表分类ID"`
+	CreateTime           time.Time `description:"创建时间"`
+}
+
+func (m *ChartFrameworkNode) TableName() string {
+	return "chart_framework_node"
+}
+
+func (m *ChartFrameworkNode) PrimaryId() string {
+	return "chart_framework_node_id"
+}
+
+func (m *ChartFrameworkNode) Create() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	id, err := o.Insert(m)
+	if err != nil {
+		return
+	}
+	m.ChartFrameworkNodeId = int(id)
+	return
+}
+
+func (m *ChartFrameworkNode) CreateMulti(items []*ChartFrameworkNode) (err error) {
+	if len(items) == 0 {
+		return
+	}
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.InsertMulti(len(items), items)
+	return
+}
+
+func (m *ChartFrameworkNode) Update(cols []string) (err error) {
+	o := orm.NewOrmUsingDB("data")
+	_, err = o.Update(m, cols...)
+	return
+}
+
+func (m *ChartFrameworkNode) Del() (err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := fmt.Sprintf(`DELETE FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	_, err = o.Raw(sql, m.ChartFrameworkNodeId).Exec()
+	return
+}
+
+func (m *ChartFrameworkNode) GetItemById(id int) (item *ChartFrameworkNode, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE %s = ? LIMIT 1`, m.TableName(), m.PrimaryId())
+	err = o.Raw(sql, id).QueryRow(&item)
+	return
+}
+
+func (m *ChartFrameworkNode) GetItemByCondition(condition string, pars []interface{}) (item *ChartFrameworkNode, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := fmt.Sprintf(`SELECT * FROM %s WHERE 1=1 %s LIMIT 1`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&item)
+	return
+}
+
+func (m *ChartFrameworkNode) GetCountByCondition(condition string, pars []interface{}) (count int, err error) {
+	o := orm.NewOrmUsingDB("data")
+	sql := fmt.Sprintf(`SELECT COUNT(1) FROM %s WHERE 1=1 %s`, m.TableName(), condition)
+	err = o.Raw(sql, pars).QueryRow(&count)
+	return
+}
+
+func (m *ChartFrameworkNode) GetItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string) (items []*ChartFrameworkNode, err error) {
+	o := orm.NewOrmUsingDB("data")
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}
+
+func (m *ChartFrameworkNode) GetPageItemsByCondition(condition string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*ChartFrameworkNode, err error) {
+	o := orm.NewOrmUsingDB("data")
+	fields := strings.Join(fieldArr, ",")
+	if len(fieldArr) == 0 {
+		fields = `*`
+	}
+	order := `ORDER BY create_time DESC`
+	if orderRule != "" {
+		order = ` ORDER BY ` + orderRule
+	}
+	sql := fmt.Sprintf(`SELECT %s FROM %s WHERE 1=1 %s %s LIMIT ?,?`, fields, m.TableName(), condition, order)
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+// ChartFrameworkNodeItem 图库框架节点信息
+type ChartFrameworkNodeItem struct {
+	ChartFrameworkNodeId int
+	ChartFrameworkId     int    `description:"框架ID"`
+	FrameworkName        string `description:"框架名称"`
+	NodeName             string `description:"节点名称"`
+	MyChartClassifyId    int    `description:"我的图表分类ID"`
+	CreateTime           string `description:"创建时间"`
+}
+
+// FormatChartFrameworkNode2Item 格式化框架节点信息
+func FormatChartFrameworkNode2Item(origin *ChartFrameworkNode) (item *ChartFrameworkNodeItem) {
+	if origin == nil {
+		return
+	}
+	item = new(ChartFrameworkNodeItem)
+	item.ChartFrameworkNodeId = origin.ChartFrameworkNodeId
+	item.ChartFrameworkId = origin.ChartFrameworkId
+	item.FrameworkName = origin.FrameworkName
+	item.NodeName = origin.NodeName
+	item.MyChartClassifyId = origin.MyChartClassifyId
+	item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, origin.CreateTime)
+	return
+}

+ 11 - 0
models/db.go

@@ -134,6 +134,9 @@ func init() {
 	// 商家配置
 	initBusinessConf()
 
+	// 图库框架
+	initChartFramework()
+
 	// 外部链接
 	initOutLink()
 	// ETA试用相关表
@@ -414,3 +417,11 @@ func initEtaTrial() {
 		new(eta_trial.QuestionnaireFillRecord), // 问卷填写记录表
 	)
 }
+
+// initChartFramework 图库框架相关表
+func initChartFramework() {
+	orm.RegisterModel(
+		new(data_manage.ChartFramework),     // 图库框架主表
+		new(data_manage.ChartFrameworkNode), // 图库框架节点表
+	)
+}

+ 90 - 0
routers/commentsRouter.go

@@ -1150,6 +1150,87 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "Add",
+            Router: `/add`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "Detail",
+            Router: `/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "Edit",
+            Router: `/edit`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "EditPublic",
+            Router: `/edit_public`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "List",
+            Router: `/list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "Move",
+            Router: `/move`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "PublicMenu",
+            Router: `/public_menu`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "Remove",
+            Router: `/remove`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartFrameworkController"],
+        beego.ControllerComments{
+            Method: "Rename",
+            Router: `/rename`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:ChartInfoController"],
         beego.ControllerComments{
             Method: "ChartInfoAdd",
@@ -3067,6 +3148,15 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:MyChartController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:MyChartController"],
+        beego.ControllerComments{
+            Method: "ClassifyFrameworkNodeList",
+            Router: `/classify/framework_node_list`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:MyChartController"] = append(beego.GlobalControllerRouter["eta/eta_api/controllers/data_manage:MyChartController"],
         beego.ControllerComments{
             Method: "ClassifyList",

+ 5 - 0
routers/router.go

@@ -287,6 +287,11 @@ func init() {
 				&controllers.MeetingProbabilitiesController{},
 			),
 		),
+		web.NSNamespace("/chart_framework",
+			web.NSInclude(
+				&data_manage.ChartFrameworkController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }