package budget import ( "zhiyuan/pkg/db" "zhiyuan/pkg/utils" "github.com/gin-gonic/gin" ) type Table struct { ID int64 `json:"id" prop:"add:false"` QuoteId int64 `json:"quoteId" type:"int" prop:"add" search:"="` Name string `json:"name" label:"名称值" type:"string" prop:"add edit" search:"like"` Property string `json:"property" label:"属性" type:"string" prop:"edit"` OrderAt int64 `json:"order_at" prop:"add:false select:false"` DeletedAt int64 `json:"deleted_at" prop:"add:false select:false"` CreatedAt int64 `json:"created_at" prop:"add:false select:false"` UpdatedAt int64 `json:"updated_at" prop:"add:false select:false"` Headers []QuoteData `json:"headers" prop:"ignore"` Modules []QuoteData `json:"modules" prop:"ignore"` Prop map[string]string `json:"prop" prop:"ignore"` db.BaseModel } func (Table) TableName() string { return "zy_budget_table" } func (Table) ListPrivilege(c *gin.Context, data map[string]interface{}, s *db.Select) bool { return true } func (Table) OnePrivilege(c *gin.Context, id int64) bool { return true } func (Table) AddPrivilege(c *gin.Context, data map[string]interface{}, post map[string]interface{}) error { return nil } func (Table) EditPrivilege(c *gin.Context, id int64, data map[string]interface{}, post map[string]interface{}) error { return nil } func (Table) DelPrivilege(c *gin.Context, id int64) error { return nil } func (Table) OrderField() string { return "order_at" } func (Table) Page() bool { return false } func (Table) Count() bool { return false } func (model Table) GetProperty() map[string]string { props := make(map[string]string) utils.JsonDecode(model.Property).To(&props) return props } /*func (model Table) GetItems() []Item { return GetItemModels(map[string]interface{}{ "typeId in": AllItemTypes(SilceIds(model.TypeIds)), }) }*/ func (model Table) GetID() int64 { return model.ID } func (model Table) GetProp(name string) (expression string, ok bool) { expression, ok = model.Prop[name] return } func (model Table) GetSubs() *[]QuoteData { return &model.Modules } func (model Table) GetName() string { return model.Name } func (model Table) GetHeaders() *[]QuoteData { return &model.Headers } func (model Table) GetItem() *Item { return nil } func (model Table) GetValue() string { return "" } func (model Table) GetQuote() *Quote { return nil } func (model Table) GetTable() *Table { return &model } func (model Table) GetHeader() *Header { return nil } func (model Table) GetModule() *Module { return nil } func (model Table) GetGroup() *Group { return nil } func (model Table) GetRow() *Row { return nil } func (model Table) GetMyItem() *Item { return nil } func CopyTables(tables []QuoteData, quoteId int64, order int64) error { for i, table := range tables { _, err := table.GetTable().Copy(quoteId, order+int64(len(tables)-i)) if err != nil { return err } } return nil } func findTables(quoteId int64, list []Table, headers []Header, modulelist []Module, grouplist []Group, rowlist []Row, itemlist []Item) ([]QuoteData, []QuoteData, []QuoteData, []QuoteData) { tables := make([]QuoteData, 0) modules := make([]QuoteData, 0) groups := make([]QuoteData, 0) rows := make([]QuoteData, 0) for _, v := range list { if v.QuoteId == quoteId { v.Headers = findHeaders(v.ID, headers) vmodules, vgroups, vrows := findModules(v.ID, modulelist, grouplist, rowlist, itemlist) v.Modules = vmodules v.Prop = v.GetProperty() tables = append(tables, v) modules = append(modules, vmodules...) groups = append(groups, vgroups...) rows = append(rows, vrows...) } } return tables, modules, groups, rows } func (model Table) Copy(quoteId int64, order int64) (int64, error) { id, err := db.InsertModel(db.Type(model), map[string]interface{}{ "quoteId": quoteId, "name": model.Name, "property": model.Property, "order_at": order, }) if err != nil { return 0, err } err = CopyHeaders(model.Headers, quoteId, id, order) if err != nil { return id, err } err = CopyModules(model.Modules, quoteId, id, order) if err != nil { return id, err } return id, nil }