补充页面图片接口
This commit is contained in:
61
server/api/pages_imgs.api
Normal file
61
server/api/pages_imgs.api
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
// 页面图片相关结构体
|
||||||
|
type PageImage {
|
||||||
|
Id int64 `json:"id"` // 图片ID
|
||||||
|
Page string `json:"page"` // 所属页面(对应路由的页面标识)
|
||||||
|
ImageUrl string `json:"image_url"` // 图片URL
|
||||||
|
Sort int `json:"sort"` // 排序(首页1-3,其他页面1)
|
||||||
|
CreateTime string `json:"create_time"` // 创建时间
|
||||||
|
UpdateTime string `json:"update_time"` // 更新时间
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询页面图片请求(按页面查询)
|
||||||
|
type GetPageImagesReq {
|
||||||
|
Page string `json:"page" form:"page" validate:"required"` // 页面标识(如home、base-overview等)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询页面图片响应
|
||||||
|
type GetPageImagesResp {
|
||||||
|
Images []PageImage `json:"images"` // 图片列表(首页返回3张,其他页面返回1张)
|
||||||
|
Msg string `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增/更新页面图片请求
|
||||||
|
type SavePageImageReq {
|
||||||
|
Id int64 `json:"id,omitempty"` // 可选,更新时传ID
|
||||||
|
Page string `json:"page" validate:"required"` // 页面标识
|
||||||
|
ImageUrl string `json:"image_url" validate:"required"` // 图片URL
|
||||||
|
Sort int `json:"sort" validate:"required"` // 排序(首页1-3,其他页面1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增/更新页面图片响应
|
||||||
|
type SavePageImageResp {
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Msg string `json:"message"`
|
||||||
|
Id int64 `json:"id,omitempty"` // 新增时返回ID
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除页面图片请求
|
||||||
|
type DeletePageImageReq {
|
||||||
|
Id int64 `json:"id" validate:"required"` // 图片ID
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除页面图片响应
|
||||||
|
type DeletePageImageResp {
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Msg string `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
@server (
|
||||||
|
group: pageImage
|
||||||
|
prefix: /api/page-image
|
||||||
|
)
|
||||||
|
service page_image_api {
|
||||||
|
// 1. 查询指定页面的图片(如首页轮播图、基地概况顶部图)
|
||||||
|
@handler GetPageImagesHandler
|
||||||
|
get /page-image/get (GetPageImagesReq) returns (GetPageImagesResp)
|
||||||
|
|
||||||
|
// 2. 更新页面图片(支持上传后保存URL,已存在则覆盖)
|
||||||
|
@handler SavePageImageHandler
|
||||||
|
post /page-image/save (SavePageImageReq) returns (SavePageImageResp)
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
// Code scaffolded by goctl. Safe to edit.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package pageImage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/logic/pageImage"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/model"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/types"
|
||||||
|
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||||
|
"github.com/zeromicro/go-zero/rest/httpx"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetPageImagesHandler(cfg *config.Config) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var req types.GetPageImagesReq
|
||||||
|
if err := httpx.Parse(r, &req); err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
mysqlCfg := cfg.MySQL
|
||||||
|
dsn := fmt.Sprintf(
|
||||||
|
"%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=true&loc=Local",
|
||||||
|
mysqlCfg.Username,
|
||||||
|
mysqlCfg.Password,
|
||||||
|
mysqlCfg.Host,
|
||||||
|
mysqlCfg.Port,
|
||||||
|
mysqlCfg.Database,
|
||||||
|
mysqlCfg.Charset,
|
||||||
|
)
|
||||||
|
fmt.Println("接收到articlePost请求")
|
||||||
|
|
||||||
|
conn := sqlx.NewSqlConn("mysql", dsn)
|
||||||
|
|
||||||
|
imgModel := model.NewPageImageModel(conn)
|
||||||
|
|
||||||
|
l := pageImage.NewGetPageImagesLogic(r.Context(), cfg, imgModel)
|
||||||
|
resp, err := l.GetPageImages(&req)
|
||||||
|
if err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
} else {
|
||||||
|
httpx.OkJsonCtx(r.Context(), w, resp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
// Code scaffolded by goctl. Safe to edit.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package pageImage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/logic/pageImage"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/model"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/types"
|
||||||
|
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||||
|
"github.com/zeromicro/go-zero/rest/httpx"
|
||||||
|
)
|
||||||
|
|
||||||
|
func SavePageImageHandler(cfg *config.Config) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var req types.SavePageImageReq
|
||||||
|
if err := httpx.Parse(r, &req); err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
mysqlCfg := cfg.MySQL
|
||||||
|
dsn := fmt.Sprintf(
|
||||||
|
"%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=true&loc=Local",
|
||||||
|
mysqlCfg.Username,
|
||||||
|
mysqlCfg.Password,
|
||||||
|
mysqlCfg.Host,
|
||||||
|
mysqlCfg.Port,
|
||||||
|
mysqlCfg.Database,
|
||||||
|
mysqlCfg.Charset,
|
||||||
|
)
|
||||||
|
fmt.Println("接收到articlePost请求")
|
||||||
|
|
||||||
|
conn := sqlx.NewSqlConn("mysql", dsn)
|
||||||
|
|
||||||
|
imgModel := model.NewPageImageModel(conn)
|
||||||
|
|
||||||
|
l := pageImage.NewSavePageImageLogic(r.Context(), cfg, imgModel)
|
||||||
|
resp, err := l.SavePageImage(&req)
|
||||||
|
if err != nil {
|
||||||
|
httpx.ErrorCtx(r.Context(), w, err)
|
||||||
|
} else {
|
||||||
|
httpx.OkJsonCtx(r.Context(), w, resp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
// Code scaffolded by goctl. Safe to edit.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package pageImage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/model"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/types"
|
||||||
|
|
||||||
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
|
)
|
||||||
|
|
||||||
|
type GetPageImagesLogic struct {
|
||||||
|
logx.Logger
|
||||||
|
ctx context.Context
|
||||||
|
cfg *config.Config
|
||||||
|
model model.PageImageModel
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewGetPageImagesLogic(ctx context.Context, cfg *config.Config, model model.PageImageModel) *GetPageImagesLogic {
|
||||||
|
return &GetPageImagesLogic{
|
||||||
|
Logger: logx.WithContext(ctx),
|
||||||
|
ctx: ctx,
|
||||||
|
cfg: cfg,
|
||||||
|
model: model,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *GetPageImagesLogic) GetPageImages(req *types.GetPageImagesReq) (resp *types.GetPageImagesResp, err error) {
|
||||||
|
images, err := l.model.FindByPage(l.ctx, req.Page)
|
||||||
|
if err != nil {
|
||||||
|
// 处理数据库查询错误(如记录不存在时返回空列表,不报错)
|
||||||
|
if err == model.ErrNotFound {
|
||||||
|
return &types.GetPageImagesResp{
|
||||||
|
Images: []types.PageImage{},
|
||||||
|
Msg: "该页面暂无图片",
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("查询图片失败:%v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 转换模型数据到响应结构体
|
||||||
|
var respImages []types.PageImage
|
||||||
|
for _, img := range images {
|
||||||
|
respImages = append(respImages, types.PageImage{
|
||||||
|
Id: img.Id,
|
||||||
|
Page: img.Page,
|
||||||
|
ImageUrl: img.ImageUrl,
|
||||||
|
Sort: int(img.Sort),
|
||||||
|
CreateTime: img.CreateTime.Format("2006-01-02 15:04:05"), // 格式化时间
|
||||||
|
UpdateTime: img.UpdateTime.Format("2006-01-02 15:04:05"),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 按 sort 字段升序排序(确保首页轮播图顺序正确)
|
||||||
|
sort.Slice(respImages, func(i, j int) bool {
|
||||||
|
return respImages[i].Sort < respImages[j].Sort
|
||||||
|
})
|
||||||
|
|
||||||
|
// 4. 返回响应
|
||||||
|
return &types.GetPageImagesResp{
|
||||||
|
Images: respImages,
|
||||||
|
Msg: "查询成功",
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
// Code scaffolded by goctl. Safe to edit.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package pageImage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/config"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/model"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/internal/types"
|
||||||
|
|
||||||
|
"github.com/zeromicro/go-zero/core/logx"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SavePageImageLogic struct {
|
||||||
|
logx.Logger
|
||||||
|
ctx context.Context
|
||||||
|
cfg *config.Config
|
||||||
|
model model.PageImageModel
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSavePageImageLogic(ctx context.Context, cfg *config.Config, model model.PageImageModel) *SavePageImageLogic {
|
||||||
|
return &SavePageImageLogic{
|
||||||
|
Logger: logx.WithContext(ctx),
|
||||||
|
ctx: ctx,
|
||||||
|
cfg: cfg,
|
||||||
|
model: model,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *SavePageImageLogic) SavePageImage(req *types.SavePageImageReq) (resp *types.SavePageImageResp, err error) {
|
||||||
|
// todo: add your logic here and delete this line
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
29
server/internal/pageimgs/internal/model/pageimagemodel.go
Normal file
29
server/internal/pageimgs/internal/model/pageimagemodel.go
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
import "github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||||
|
|
||||||
|
var _ PageImageModel = (*customPageImageModel)(nil)
|
||||||
|
|
||||||
|
type (
|
||||||
|
// PageImageModel is an interface to be customized, add more methods here,
|
||||||
|
// and implement the added methods in customPageImageModel.
|
||||||
|
PageImageModel interface {
|
||||||
|
pageImageModel
|
||||||
|
withSession(session sqlx.Session) PageImageModel
|
||||||
|
}
|
||||||
|
|
||||||
|
customPageImageModel struct {
|
||||||
|
*defaultPageImageModel
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewPageImageModel returns a model for the database table.
|
||||||
|
func NewPageImageModel(conn sqlx.SqlConn) PageImageModel {
|
||||||
|
return &customPageImageModel{
|
||||||
|
defaultPageImageModel: newPageImageModel(conn),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *customPageImageModel) withSession(session sqlx.Session) PageImageModel {
|
||||||
|
return NewPageImageModel(sqlx.NewSqlConnFromSession(session))
|
||||||
|
}
|
||||||
121
server/internal/pageimgs/internal/model/pageimagemodel_gen.go
Normal file
121
server/internal/pageimgs/internal/model/pageimagemodel_gen.go
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
// Code generated by goctl. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// goctl version: 1.9.2
|
||||||
|
|
||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"database/sql"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/zeromicro/go-zero/core/stores/builder"
|
||||||
|
"github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||||
|
"github.com/zeromicro/go-zero/core/stringx"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
pageImageFieldNames = builder.RawFieldNames(&PageImage{})
|
||||||
|
pageImageRows = strings.Join(pageImageFieldNames, ",")
|
||||||
|
pageImageRowsExpectAutoSet = strings.Join(stringx.Remove(pageImageFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), ",")
|
||||||
|
pageImageRowsWithPlaceHolder = strings.Join(stringx.Remove(pageImageFieldNames, "`id`", "`create_at`", "`create_time`", "`created_at`", "`update_at`", "`update_time`", "`updated_at`"), "=?,") + "=?"
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
pageImageModel interface {
|
||||||
|
Insert(ctx context.Context, data *PageImage) (sql.Result, error)
|
||||||
|
FindOne(ctx context.Context, id int64) (*PageImage, error)
|
||||||
|
FindOneByPageSort(ctx context.Context, page string, sort int64) (*PageImage, error)
|
||||||
|
Update(ctx context.Context, data *PageImage) error
|
||||||
|
Delete(ctx context.Context, id int64) error
|
||||||
|
FindByPage(ctx context.Context, page string) ([]*PageImage, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultPageImageModel struct {
|
||||||
|
conn sqlx.SqlConn
|
||||||
|
table string
|
||||||
|
}
|
||||||
|
|
||||||
|
PageImage struct {
|
||||||
|
Id int64 `db:"id"` // 图片ID(主键)
|
||||||
|
Page string `db:"page"` // 所属页面(home-首页,base-overview-基地概况等)
|
||||||
|
ImageUrl string `db:"image_url"` // 图片URL
|
||||||
|
Sort int64 `db:"sort"` // 排序(首页1-3,其他页面1)
|
||||||
|
CreateTime time.Time `db:"create_time"` // 创建时间
|
||||||
|
UpdateTime time.Time `db:"update_time"` // 更新时间
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func newPageImageModel(conn sqlx.SqlConn) *defaultPageImageModel {
|
||||||
|
return &defaultPageImageModel{
|
||||||
|
conn: conn,
|
||||||
|
table: "`page_image`",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultPageImageModel) Delete(ctx context.Context, id int64) error {
|
||||||
|
query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
|
||||||
|
_, err := m.conn.ExecCtx(ctx, query, id)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultPageImageModel) FindOne(ctx context.Context, id int64) (*PageImage, error) {
|
||||||
|
query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", pageImageRows, m.table)
|
||||||
|
var resp PageImage
|
||||||
|
err := m.conn.QueryRowCtx(ctx, &resp, query, id)
|
||||||
|
switch err {
|
||||||
|
case nil:
|
||||||
|
return &resp, nil
|
||||||
|
case sqlx.ErrNotFound:
|
||||||
|
return nil, ErrNotFound
|
||||||
|
default:
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultPageImageModel) FindOneByPageSort(ctx context.Context, page string, sort int64) (*PageImage, error) {
|
||||||
|
var resp PageImage
|
||||||
|
query := fmt.Sprintf("select %s from %s where `page` = ? and `sort` = ? limit 1", pageImageRows, m.table)
|
||||||
|
err := m.conn.QueryRowCtx(ctx, &resp, query, page, sort)
|
||||||
|
switch err {
|
||||||
|
case nil:
|
||||||
|
return &resp, nil
|
||||||
|
case sqlx.ErrNotFound:
|
||||||
|
return nil, ErrNotFound
|
||||||
|
default:
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultPageImageModel) Insert(ctx context.Context, data *PageImage) (sql.Result, error) {
|
||||||
|
query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?)", m.table, pageImageRowsExpectAutoSet)
|
||||||
|
ret, err := m.conn.ExecCtx(ctx, query, data.Page, data.ImageUrl, data.Sort)
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultPageImageModel) Update(ctx context.Context, newData *PageImage) error {
|
||||||
|
query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, pageImageRowsWithPlaceHolder)
|
||||||
|
_, err := m.conn.ExecCtx(ctx, query, newData.Page, newData.ImageUrl, newData.Sort, newData.Id)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultPageImageModel) tableName() string {
|
||||||
|
return m.table
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *defaultPageImageModel) FindByPage(ctx context.Context, page string) ([]*PageImage, error) {
|
||||||
|
// pageImageRows 是 goctl 生成的字段列表常量(如 "id,page,image_url,sort,create_time,update_time")
|
||||||
|
query := fmt.Sprintf("select %s from %s USE INDEX (idx_page) where page = ?", pageImageRows, m.table)
|
||||||
|
|
||||||
|
var images []*PageImage
|
||||||
|
err := m.conn.QueryRowsCtx(ctx, &images, query, page)
|
||||||
|
if err != nil {
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
return []*PageImage{}, nil // 返回空切片,避免上层处理 ErrNotFound 导致的错误
|
||||||
|
}
|
||||||
|
return nil, fmt.Errorf("查询失败:%v", err)
|
||||||
|
}
|
||||||
|
return images, nil
|
||||||
|
}
|
||||||
5
server/internal/pageimgs/internal/model/vars.go
Normal file
5
server/internal/pageimgs/internal/model/vars.go
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
import "github.com/zeromicro/go-zero/core/stores/sqlx"
|
||||||
|
|
||||||
|
var ErrNotFound = sqlx.ErrNotFound
|
||||||
44
server/internal/pageimgs/internal/types/types.go
Normal file
44
server/internal/pageimgs/internal/types/types.go
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
// Code generated by goctl. DO NOT EDIT.
|
||||||
|
// goctl 1.9.2
|
||||||
|
|
||||||
|
package types
|
||||||
|
|
||||||
|
type DeletePageImageReq struct {
|
||||||
|
Id int64 `json:"id" validate:"required"` // 图片ID
|
||||||
|
}
|
||||||
|
|
||||||
|
type DeletePageImageResp struct {
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Msg string `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetPageImagesReq struct {
|
||||||
|
Page string `json:"page" validate:"required"` // 页面标识(如home、base-overview等)
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetPageImagesResp struct {
|
||||||
|
Images []PageImage `json:"images"` // 图片列表(首页返回3张,其他页面返回1张)
|
||||||
|
Msg string `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type PageImage struct {
|
||||||
|
Id int64 `json:"id"` // 图片ID
|
||||||
|
Page string `json:"page"` // 所属页面(对应路由的页面标识)
|
||||||
|
ImageUrl string `json:"image_url"` // 图片URL
|
||||||
|
Sort int `json:"sort"` // 排序(首页1-3,其他页面1)
|
||||||
|
CreateTime string `json:"create_time"` // 创建时间
|
||||||
|
UpdateTime string `json:"update_time"` // 更新时间
|
||||||
|
}
|
||||||
|
|
||||||
|
type SavePageImageReq struct {
|
||||||
|
Id int64 `json:"id,omitempty"` // 可选,更新时传ID
|
||||||
|
Page string `json:"page" validate:"required"` // 页面标识
|
||||||
|
ImageUrl string `json:"image_url" validate:"required"` // 图片URL
|
||||||
|
Sort int `json:"sort" validate:"required"` // 排序(首页1-3,其他页面1)
|
||||||
|
}
|
||||||
|
|
||||||
|
type SavePageImageResp struct {
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Msg string `json:"message"`
|
||||||
|
Id int64 `json:"id,omitempty"` // 新增时返回ID
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
"github.com/JACKYMYPERSON/hldrCenter/internal/article/handler/article"
|
"github.com/JACKYMYPERSON/hldrCenter/internal/article/handler/article"
|
||||||
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/handler/baseOverview"
|
"github.com/JACKYMYPERSON/hldrCenter/internal/baseoverview/handler/baseOverview"
|
||||||
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/handler/devproject"
|
"github.com/JACKYMYPERSON/hldrCenter/internal/devproject/handler/devproject"
|
||||||
|
"github.com/JACKYMYPERSON/hldrCenter/internal/pageimgs/handler/pageImage"
|
||||||
ping "github.com/JACKYMYPERSON/hldrCenter/internal/ping/handler/ping"
|
ping "github.com/JACKYMYPERSON/hldrCenter/internal/ping/handler/ping"
|
||||||
uploadimg "github.com/JACKYMYPERSON/hldrCenter/internal/upload/handler/upload"
|
uploadimg "github.com/JACKYMYPERSON/hldrCenter/internal/upload/handler/upload"
|
||||||
"github.com/JACKYMYPERSON/hldrCenter/middleware"
|
"github.com/JACKYMYPERSON/hldrCenter/middleware"
|
||||||
@@ -59,6 +60,14 @@ func SetupRouter(cfg *config.Config) *gin.Engine {
|
|||||||
// 查询项目详情(GET /api/devproject/get)
|
// 查询项目详情(GET /api/devproject/get)
|
||||||
devprojects.GET("/get", gin.WrapH(devproject.GetDevProjectHandler(cfg)))
|
devprojects.GET("/get", gin.WrapH(devproject.GetDevProjectHandler(cfg)))
|
||||||
}
|
}
|
||||||
|
pageImages := api.Group("/page-image")
|
||||||
|
{
|
||||||
|
// 查询指定页面图片(GET /api/page-image/get?page=home)
|
||||||
|
pageImages.POST("/get", gin.WrapH(pageImage.GetPageImagesHandler(cfg)))
|
||||||
|
|
||||||
|
// 新增/更新页面图片(POST /api/page-image/save)
|
||||||
|
pageImages.POST("/save", gin.WrapH(pageImage.SavePageImageHandler(cfg)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return r
|
return r
|
||||||
|
|||||||
15
server/sql/page_imgs.sql
Normal file
15
server/sql/page_imgs.sql
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
CREATE TABLE page_image (
|
||||||
|
id INT NOT NULL AUTO_INCREMENT COMMENT '图片ID(主键)',
|
||||||
|
page VARCHAR(50) NOT NULL DEFAULT '' COMMENT '所属页面(home-首页,base-overview-基地概况等)',
|
||||||
|
image_url VARCHAR(512) NOT NULL DEFAULT '' COMMENT '图片URL',
|
||||||
|
sort INT NOT NULL DEFAULT 0 COMMENT '排序(首页1-3,其他页面1)',
|
||||||
|
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||||
|
-- 单独一行显式声明主键,确保 goctl 识别
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
-- 唯一约束也单独声明
|
||||||
|
UNIQUE KEY uk_page_sort (page, sort) COMMENT '控制同一页面+排序唯一'
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '页面图片表';
|
||||||
|
|
||||||
|
-- 索引单独创建
|
||||||
|
CREATE INDEX idx_page ON page_image (page) COMMENT '按页面查询';
|
||||||
Reference in New Issue
Block a user