diff --git a/backend/__debug_bin3572908368 b/backend/__debug_bin3572908368 new file mode 100644 index 0000000..e69de29 diff --git a/backend/__debug_bin457628671 b/backend/__debug_bin457628671 deleted file mode 100755 index acfa16c..0000000 Binary files a/backend/__debug_bin457628671 and /dev/null differ diff --git a/backend/modules/medias/controller.go b/backend/modules/medias/controller.go index 96849fa..70f693c 100644 --- a/backend/modules/medias/controller.go +++ b/backend/modules/medias/controller.go @@ -25,6 +25,16 @@ func (c *Controller) List(ctx fiber.Ctx) error { } claim := ctx.Locals(consts.CtxKeyClaim).(*jwt.Claims) + if filter.Offset != "" { + model, err := c.svc.GetMediaByHash(ctx.Context(), claim.TenantID, filter.Offset) + if err != nil { + log.WithField("action", "medias.Show").WithError(err).Error("GetMediaByHash") + return err + } + + filter.OffsetID = model.ID + } + items, err := c.svc.List(ctx.Context(), claim.TenantID, claim.UserID, &filter) if err != nil { return err diff --git a/backend/modules/medias/service.go b/backend/modules/medias/service.go index 67467dd..b7ebc3b 100644 --- a/backend/modules/medias/service.go +++ b/backend/modules/medias/service.go @@ -81,7 +81,7 @@ func (svc *Service) GetMediaByID(ctx context.Context, tenantId, userId, id int64 } func (svc *Service) ModelToListItem(ctx context.Context, m *model.Medias) *ListItem { - return &ListItem{ + item := &ListItem{ ID: m.ID, Poster: fmt.Sprintf("/static/%s/poster.jpg", m.Hash), Hash: m.Hash, @@ -93,7 +93,10 @@ func (svc *Service) ModelToListItem(ctx context.Context, m *model.Medias) *ListI Resources: m.Resources, CreatedAt: m.CreatedAt, UpdatedAt: m.UpdatedAt, + Bought: false, } + + return item } // List @@ -146,7 +149,11 @@ func (svc *Service) List(ctx context.Context, tenantId, userId int64, filter *Li } items := lo.Map(dest, func(m model.Medias, _ int) *ListItem { - return svc.ModelToListItem(ctx, &m) + item := svc.ModelToListItem(ctx, &m) + if lo.Contains(boughtIDs, m.ID) { + item.Bought = true + } + return item }) return items, nil diff --git a/frontend/src/views/tabs/BoughtView.vue b/frontend/src/views/tabs/BoughtView.vue index 52bf2be..8367bfa 100644 --- a/frontend/src/views/tabs/BoughtView.vue +++ b/frontend/src/views/tabs/BoughtView.vue @@ -1,112 +1,95 @@ - - - - - - + - - - - {{ goods.title }} - {{ formatPrice(goods.price) }} - - - - - 运费:{{ goods.express }} - 剩余:{{ goods.remain }} - - - + - - - - 有赞的店 - 官方 - - - - + + + + {{ item.title }} + + + 价格:{{ item.price }} 点 - - - - + + {{ item.price }} + {{ (item.price * item.discount) / 100 }} + + + + + + + 视频 + 音频 + + + + + - - - diff --git a/frontend/src/views/tabs/HomeView.vue b/frontend/src/views/tabs/HomeView.vue index 86b44d8..11edfcd 100644 --- a/frontend/src/views/tabs/HomeView.vue +++ b/frontend/src/views/tabs/HomeView.vue @@ -17,6 +17,10 @@ + + 已购买 + + @@ -40,6 +44,7 @@ const search = ref(""); const items = ref([]); const loading = ref(false); const finished = ref(false); +const pageLimit = ref(10); const offset = ref(""); @@ -52,33 +57,40 @@ const play = (item) => { }; const loadData = () => { - loading.value = true; - console.log("loadData"); // request /v1/medias const data = { offset: offset.value, action: 0, + limit: pageLimit.value, }; + console.log("loadData, data: ", data); + + loading.value = false; request .post("/medias", data) .then((res) => { - console.log(res); + loading.value = false; + + console.log("response: ", res); if (offset.value == "") { items.value = res.data; } else { items.value = items.value.concat(res.data); - if (res.data.length == 0) { - finished.value = true; - } + } + offset.value = res.data[res.data.length - 1].hash; + + if (res.data.length < pageLimit.value) { + console.log("finished"); + finished.value = true; + loading.value = false; } - offset.value = res.data[res.data.length - 1].hash; }) .catch((err) => { console.error(err); }) .finally(() => { - loading.value = true; + // loading.value = true; // finished.value = true; }); };