补充文章编辑
This commit is contained in:
parent
fd9766c0d7
commit
45f3bfae44
@ -1,6 +1,8 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/infraboard/mcube/v2/http/gin/response"
|
"github.com/infraboard/mcube/v2/http/gin/response"
|
||||||
"github.com/infraboard/mcube/v2/ioc"
|
"github.com/infraboard/mcube/v2/ioc"
|
||||||
@ -47,9 +49,11 @@ func (h *BlogApiHandler) Init() error {
|
|||||||
// 获取模块路有: url前缀,
|
// 获取模块路有: url前缀,
|
||||||
r := ioc_gin.ObjectRouter(h)
|
r := ioc_gin.ObjectRouter(h)
|
||||||
r.GET("", h.QueryBlog)
|
r.GET("", h.QueryBlog)
|
||||||
|
r.GET(":id", h.DescribeBlog)
|
||||||
|
|
||||||
r.Use(middleware.Auth)
|
r.Use(middleware.Auth)
|
||||||
r.POST("", h.CreateBlog)
|
r.POST("", h.CreateBlog)
|
||||||
|
r.PUT(":id", h.UpdateBlog)
|
||||||
r.DELETE(":id", h.DeleteBlog)
|
r.DELETE(":id", h.DeleteBlog)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -92,6 +96,22 @@ func (h *BlogApiHandler) QueryBlog(ctx *gin.Context) {
|
|||||||
response.Success(ctx, ins)
|
response.Success(ctx, ins)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *BlogApiHandler) DescribeBlog(ctx *gin.Context) {
|
||||||
|
idInt, err := strconv.ParseInt(ctx.Param("id"), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
response.Failed(ctx, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req := blog.NewDescribeBlogRequest(uint(idInt))
|
||||||
|
ins, err := h.blog.DescribeBlog(ctx.Request.Context(), req)
|
||||||
|
if err != nil {
|
||||||
|
response.Failed(ctx, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(ctx, ins)
|
||||||
|
}
|
||||||
|
|
||||||
func (h *BlogApiHandler) DeleteBlog(ctx *gin.Context) {
|
func (h *BlogApiHandler) DeleteBlog(ctx *gin.Context) {
|
||||||
in := blog.NewDeleteBlogRequest(ctx.Param("id"))
|
in := blog.NewDeleteBlogRequest(ctx.Param("id"))
|
||||||
|
|
||||||
@ -102,3 +122,19 @@ func (h *BlogApiHandler) DeleteBlog(ctx *gin.Context) {
|
|||||||
}
|
}
|
||||||
response.Success(ctx, "ok")
|
response.Success(ctx, "ok")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *BlogApiHandler) UpdateBlog(ctx *gin.Context) {
|
||||||
|
idInt, err := strconv.ParseInt(ctx.Param("id"), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
response.Failed(ctx, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
in := blog.NewUpdateBlogRequest(uint(idInt))
|
||||||
|
ins, err := h.blog.UpdateBlog(ctx.Request.Context(), in)
|
||||||
|
if err != nil {
|
||||||
|
response.Failed(ctx, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
response.Success(ctx, ins)
|
||||||
|
}
|
||||||
|
@ -58,6 +58,12 @@ type PublishBlogRequest struct {
|
|||||||
StatusSpec
|
StatusSpec
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewUpdateBlogRequest(id uint) *UpdateBlogRequest {
|
||||||
|
return &UpdateBlogRequest{
|
||||||
|
GetRequest: *utils.NewGetRequest(id),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type UpdateBlogRequest struct {
|
type UpdateBlogRequest struct {
|
||||||
utils.GetRequest
|
utils.GetRequest
|
||||||
CreateBlogRequest
|
CreateBlogRequest
|
||||||
|
@ -353,3 +353,36 @@
|
|||||||
{"level":"info","component":"server","time":"2025-01-19T09:03:41+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"}
|
{"level":"info","component":"server","time":"2025-01-19T09:03:41+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"}
|
||||||
{"level":"info","component":"http","time":"2025-01-19T09:03:41+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"}
|
{"level":"info","component":"http","time":"2025-01-19T09:03:41+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"}
|
||||||
{"level":"debug","time":"2025-01-19T09:05:07+08:00","caller":"token/api/api.go:57","message":"cookie domain: localhost"}
|
{"level":"debug","time":"2025-01-19T09:05:07+08:00","caller":"token/api/api.go:57","message":"cookie domain: localhost"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:50:44+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"}
|
||||||
|
{"level":"info","component":"http","time":"2025-01-19T11:50:44+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"}
|
||||||
|
{"level":"error","component":"http","time":"2025-01-19T11:50:44+08:00","caller":"config/http/http.go:146","message":"http: Server closed"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:50:44+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"}
|
||||||
|
{"level":"info","component":"gin_webframework","time":"2025-01-19T11:50:46+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"}
|
||||||
|
{"level":"debug","time":"2025-01-19T11:50:46+08:00","caller":"token/impl/impl.go:39","message":"DefaultExpiredTTL: 3600"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:50:46+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:50:46+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:50:46+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:50:46+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"}
|
||||||
|
{"level":"info","component":"http","time":"2025-01-19T11:50:46+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:08+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"}
|
||||||
|
{"level":"info","component":"http","time":"2025-01-19T11:59:08+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"}
|
||||||
|
{"level":"error","component":"http","time":"2025-01-19T11:59:08+08:00","caller":"config/http/http.go:146","message":"http: Server closed"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:08+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"}
|
||||||
|
{"level":"info","component":"gin_webframework","time":"2025-01-19T11:59:10+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"}
|
||||||
|
{"level":"debug","time":"2025-01-19T11:59:10+08:00","caller":"token/impl/impl.go:39","message":"DefaultExpiredTTL: 3600"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:10+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:10+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:10+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:10+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"}
|
||||||
|
{"level":"info","component":"http","time":"2025-01-19T11:59:10+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:42+08:00","caller":"ioc/server/server.go:101","message":"receive signal 'interrupt', start graceful shutdown"}
|
||||||
|
{"level":"info","component":"http","time":"2025-01-19T11:59:42+08:00","caller":"config/http/http.go:152","message":"start graceful shutdown"}
|
||||||
|
{"level":"error","component":"http","time":"2025-01-19T11:59:42+08:00","caller":"config/http/http.go:146","message":"http: Server closed"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:42+08:00","caller":"ioc/server/server.go:115","message":"http service stop complete"}
|
||||||
|
{"level":"info","component":"gin_webframework","time":"2025-01-19T11:59:44+08:00","caller":"config/gin/framework.go:41","message":"enable gin recovery"}
|
||||||
|
{"level":"debug","time":"2025-01-19T11:59:44+08:00","caller":"token/impl/impl.go:39","message":"DefaultExpiredTTL: 3600"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:44+08:00","caller":"ioc/server/server.go:74","message":"loaded configs: [app.v1 trace.v1 log.v1 validator.v1 gin_webframework.v1 datasource.v1 grpc.v1 http.v1]"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:44+08:00","caller":"ioc/server/server.go:75","message":"loaded controllers: [token.v1 user.v1 blog.v1]"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:44+08:00","caller":"ioc/server/server.go:76","message":"loaded apis: [blogs.v1 tokens.v1]"}
|
||||||
|
{"level":"info","component":"server","time":"2025-01-19T11:59:44+08:00","caller":"ioc/server/server.go:77","message":"loaded defaults: []"}
|
||||||
|
{"level":"info","component":"http","time":"2025-01-19T11:59:44+08:00","caller":"config/http/http.go:144","message":"HTTP服务启动成功, 监听地址: 127.0.0.1:8080"}
|
||||||
|
@ -11,6 +11,12 @@ export const QUERY_BLOG = (params) =>
|
|||||||
params,
|
params,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
export const DESCRIBE_BLOG = (blog_id) =>
|
||||||
|
client({
|
||||||
|
url: `/api/vblog/v1/blogs/${blog_id}`,
|
||||||
|
method: 'GET',
|
||||||
|
})
|
||||||
|
|
||||||
export const CREATE_BLOG = (data) =>
|
export const CREATE_BLOG = (data) =>
|
||||||
client({
|
client({
|
||||||
url: '/api/vblog/v1/blogs',
|
url: '/api/vblog/v1/blogs',
|
||||||
|
@ -37,12 +37,11 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { reactive, ref, useTemplateRef } from 'vue';
|
import { onMounted, reactive, ref, useTemplateRef } from 'vue';
|
||||||
import { useRoute, useRouter } from 'vue-router';
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
import { MdEditor } from 'md-editor-v3';
|
import { MdEditor } from 'md-editor-v3';
|
||||||
import 'md-editor-v3/lib/style.css';
|
import 'md-editor-v3/lib/style.css';
|
||||||
import { CREATE_BLOG } from '@/api/blog'
|
import { CREATE_BLOG, DESCRIBE_BLOG, UPDATE_BLOG } from '@/api/blog'
|
||||||
|
|
||||||
|
|
||||||
const formInstance = useTemplateRef("formRef")
|
const formInstance = useTemplateRef("formRef")
|
||||||
|
|
||||||
@ -51,6 +50,13 @@ const route = useRoute()
|
|||||||
const isEdit = ref(route.query.id ? true : false)
|
const isEdit = ref(route.query.id ? true : false)
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
|
onMounted(async () => {
|
||||||
|
if (isEdit.value) {
|
||||||
|
const resp = await DESCRIBE_BLOG(route.query.id)
|
||||||
|
Object.assign(form, { ...resp })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
title: '',
|
title: '',
|
||||||
@ -65,6 +71,16 @@ const saveLoading = ref(false)
|
|||||||
const save = () => {
|
const save = () => {
|
||||||
if (isEdit.value) {
|
if (isEdit.value) {
|
||||||
// 更新
|
// 更新
|
||||||
|
formInstance.value.validate(async (errors) => {
|
||||||
|
if (errors === undefined) {
|
||||||
|
try {
|
||||||
|
saveLoading.value = true
|
||||||
|
await UPDATE_BLOG(route.query.id, form)
|
||||||
|
} finally {
|
||||||
|
saveLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
// 数据提交给后端之前,我们是需要前端校验数据合法性
|
// 数据提交给后端之前,我们是需要前端校验数据合法性
|
||||||
// formInstance.validate()
|
// formInstance.validate()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user