From 05d1310a6ec27656712c0c5e5e57b3365d3faf56 Mon Sep 17 00:00:00 2001
From: tj <1378534974@qq.com>
Date: 星期四, 29 五月 2025 16:54:34 +0800
Subject: [PATCH] api
---
static/common/official.png | 0
pages/home/home.vue | 7
components/card/flow-card.vue | 35 ++
sub-pages/community/index.vue | 39 +-
enums/dict.ts | 11
environments/index.js | 2
types/index.ts | 131 +++++++++--
sub-pages/community/search-page.vue | 1
sub-pages/film-list/film-detail.vue | 82 ++++++-
sub-pages/film-list/film-list.vue | 162 ++++++++------
sub-pages/utils/api.ts | 41 +++
components/card/flow-card copy.vue | 86 +++++++
store/user.ts | 6
13 files changed, 449 insertions(+), 154 deletions(-)
diff --git a/components/card/flow-card copy.vue b/components/card/flow-card copy.vue
new file mode 100644
index 0000000..552c74d
--- /dev/null
+++ b/components/card/flow-card copy.vue
@@ -0,0 +1,86 @@
+<template>
+ <view class="card" @click="handleClick(item)">
+ <image :src="item.imgurl" mode="widthFix" class="card-image" />
+ <view class="card-title">
+ <up-text :lines="2" size="14px" :text="item.title" bold></up-text>
+ </view>
+ <view class="card-footer">
+ <view class="user-info">
+ <up-avatar :src="item.avatar" size="40rpx" shape="circle" />
+ <view class="user-text">
+ <text class="nickname">{{ item.username }}</text>
+ </view>
+ </view>
+ <view class="opera-info">
+ <up-icon name="heart" size="30rpx" color="#999" />
+ <text>{{ item.likes }}</text>
+ </view>
+ </view>
+ </view>
+</template>
+
+<script setup lang="ts">
+defineProps<{
+ item: any
+}>()
+
+const emit = defineEmits(['click'])
+const handleClick = (item) => {
+ emit('click', item)
+}
+</script>
+
+<style scoped lang="scss">
+.card {
+ border-radius: 10rpx;
+ background-color: #ffffff;
+ font-size: 14px;
+ line-height: 20px;
+ color: rgb(51, 51, 51);
+ margin: 10rpx;
+
+ .card-image {
+ width: 100%;
+ border-radius: inherit;
+ }
+
+ .card-title {
+ padding: 10rpx;
+ font-weight: 500;
+ }
+
+ .card-footer {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 10rpx;
+ }
+
+ .user-info {
+ display: flex;
+ align-items: center;
+
+ .user-text {
+ font-size: 18rpx;
+ line-height: 14px;
+ margin-left: 10rpx;
+
+ .nickname {
+ font-weight: bold;
+ display: block;
+ color: #646464;
+ }
+ }
+ }
+
+ .opera-info {
+ display: flex;
+ align-items: center;
+
+ text {
+ margin-left: 10rpx;
+ font-size: 12px;
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/components/card/flow-card.vue b/components/card/flow-card.vue
index 552c74d..3dcaf68 100644
--- a/components/card/flow-card.vue
+++ b/components/card/flow-card.vue
@@ -1,19 +1,23 @@
<template>
<view class="card" @click="handleClick(item)">
- <image :src="item.imgurl" mode="widthFix" class="card-image" />
+ <!-- <image :src="item.coverUrl" mode="widthFix" class="card-image" /> -->
+ <view class="image-wrapper">
+ <image :src="item.coverUrl" mode="widthFix" class="card-image" />
+ <image v-if="item.userType==='official'" src="/static/common/official.png" class="badge-icon" />
+ </view>
<view class="card-title">
- <up-text :lines="2" size="14px" :text="item.title" bold></up-text>
+ <up-text :lines="2" size="14px" :text="item.nameCn" bold></up-text>
</view>
<view class="card-footer">
<view class="user-info">
<up-avatar :src="item.avatar" size="40rpx" shape="circle" />
<view class="user-text">
- <text class="nickname">{{ item.username }}</text>
+ <text class="nickname">{{ item.nickname }}</text>
</view>
</view>
<view class="opera-info">
<up-icon name="heart" size="30rpx" color="#999" />
- <text>{{ item.likes }}</text>
+ <text>{{ item.likeCount }}</text>
</view>
</view>
</view>
@@ -25,7 +29,7 @@
}>()
const emit = defineEmits(['click'])
-const handleClick = (item) => {
+const handleClick = (item: any) => {
emit('click', item)
}
</script>
@@ -39,11 +43,28 @@
color: rgb(51, 51, 51);
margin: 10rpx;
- .card-image {
+ .image-wrapper {
width: 100%;
- border-radius: inherit;
+ position: relative;
+ display: inline-block;
+
+ .card-image {
+ width: 100%;
+ border-radius: inherit;
+ }
+
+ .badge-icon {
+ position: absolute;
+ bottom: 8rpx;
+ right: 0rpx;
+ width: 32rpx;
+ height: 32rpx;
+ border-radius: 50%;
+ }
+
}
+
.card-title {
padding: 10rpx;
font-weight: 500;
diff --git a/enums/dict.ts b/enums/dict.ts
index 0fae0cc..859a70d 100644
--- a/enums/dict.ts
+++ b/enums/dict.ts
@@ -1,5 +1,14 @@
export enum FilmWorksCategory {
CONTENT_SELECTED = '1', // 内容精选
COMMUNITY = '2', // 社区推荐
- // 可以根据业务继续扩展
+ }
+
+
+ /**
+ * 类型
+ */
+ export enum FilmTabCategory {
+ USER_TYPE = '1', // 用户类型
+ FILM_TYPE = '2', // 电影类型
+
}
\ No newline at end of file
diff --git a/environments/index.js b/environments/index.js
index e15cae7..6d7cb72 100644
--- a/environments/index.js
+++ b/environments/index.js
@@ -1,6 +1,6 @@
export default {
- // httpBaseUri: 'http://192.168.1.211:8080/flower',
httpBaseUri: 'http://192.168.1.198:8888/flower',
+ // httpBaseUri: 'http://14.103.144.28:8091/flower',
clientId: '',
secret: '',
tenantId: '',
diff --git a/pages/home/home.vue b/pages/home/home.vue
index bc09653..a4f2ad9 100644
--- a/pages/home/home.vue
+++ b/pages/home/home.vue
@@ -62,7 +62,6 @@
import Community from './community.vue'
import { SwiperChangeEvent } from '@dcloudio/uni-app'
import { useGlobal } from '@/composables/useGlobal'
-import { number } from 'uview-plus/libs/function/test'
const { $http, $message, $store } = useGlobal()
import { FilmWorks } from '@/types/index'
import { formatRelativeTime } from '@/utils/time'
@@ -164,8 +163,6 @@
const communityPage = ref(1)
const communitySize = 10
const communityStatus = ref('loading')
-
-
const getCommunitys = async () => {
if (communityStatus.value === 'nomore') return
@@ -190,9 +187,6 @@
communityStatus.value = 'noMore'
}
}
-const getCommunitys_bak = async () => {
- communitys.value = await getFilmWorks(FilmWorksCategory.COMMUNITY, 10, 1);
-}
// 内容精选
const getFilmWorks = async (type: String, pageSize: Number, currentPage: Number) => {
const {
@@ -210,7 +204,6 @@
$message.showToast('系统异常,无法获取数据')
return null;
}
-
}
// 下一页
diff --git a/static/common/official.png b/static/common/official.png
new file mode 100644
index 0000000..2e947f4
--- /dev/null
+++ b/static/common/official.png
Binary files differ
diff --git a/store/user.ts b/store/user.ts
index 57b723e..e9535f7 100644
--- a/store/user.ts
+++ b/store/user.ts
@@ -1,9 +1,9 @@
// stores/user.ts
import { defineStore } from 'pinia'
import { ref } from 'vue'
-import http from '@/plugins/http.js' // 请替换成你实际的 http 封装路径
-import storage from '@/plugins/storage' // 同样替换为你的封装路径
-import message from '@/plugins/message' // 你使用的消息组件封装
+import http from '@/plugins/http.js'
+import storage from '@/plugins/storage'
+import message from '@/plugins/message'
import { WechatLoginData } from '@/types/index'
diff --git a/sub-pages/community/index.vue b/sub-pages/community/index.vue
index 388b7d7..51f7dbb 100644
--- a/sub-pages/community/index.vue
+++ b/sub-pages/community/index.vue
@@ -4,7 +4,8 @@
<view class="header">
<up-icon name="list" size="40rpx" color="#333333" @click="onSettingClick" />
<view>
- <up-tabs :list="list1">
+ <!-- <up-tabs :list="list1"> -->
+ <up-tabs :list="userTabList">
<!-- <template #left>
<up-icon name="list" size="40rpx" color="#333333" />
</template> -->
@@ -43,8 +44,12 @@
<script setup lang="ts">
import SettingPopup from '@/components/setting/setting-popup.vue';
import { reactive, ref, onMounted } from 'vue';
-import { onLoad } from '@dcloudio/uni-app'
-
+import { FilmCategoryTree, FilmWorks } from '@/types/index'
+import { onLoad, onShow, onPullDownRefresh, onReachBottom } from '@dcloudio/uni-app'
+import { FilmTabCategory, FilmWorksCategory } from '@/enums/dict'
+import { useGlobal } from '@/composables/useGlobal'
+const { $http, $message, $store } = useGlobal()
+import { getTabList } from '@/sub-pages/utils/api'
// 控制设置弹窗显示
const settingShow = ref(false);
// 方法定义
@@ -53,21 +58,13 @@
}
// 创建响应式数据
-const list1 = reactive([
- { name: '关注' },
- { name: '发现' },
- { name: '苏州' },
-]);
-
-const tabList = ref([
- { id: 'recommend', name: '推荐' },
- { id: 'straight', name: '直播' },
- { id: 'short', name: '短剧' },
- { id: 'food', name: '美食' },
- { id: 'travel', name: '穿搭' },
- { id: 'beauty', name: '美甲' },
- { id: 'more', name: '更多' },
-])
+// const list1 = reactive([
+// { name: '关注' },
+// { name: '发现' },
+// { name: '苏州' },
+// ]);
+const userTabList = ref<FilmCategoryTree[]>([])
+const tabList = ref<FilmCategoryTree[]>([])
const flowList = ref([
{
@@ -124,6 +121,12 @@
theme.value = storedTheme
})
+
+onShow(() => {
+ getTabList(FilmTabCategory.USER_TYPE,userTabList,false)
+ getTabList(FilmTabCategory.FILM_TYPE, tabList)
+});
+
</script>
<style lang="scss" scoped>
.header {
diff --git a/sub-pages/community/search-page.vue b/sub-pages/community/search-page.vue
index c3617e6..b87fa31 100644
--- a/sub-pages/community/search-page.vue
+++ b/sub-pages/community/search-page.vue
@@ -72,6 +72,7 @@
<script setup lang="ts">
import { ref } from 'vue'
+import { onShow, onPullDownRefresh, onReachBottom } from '@dcloudio/uni-app'
const searchValue = ref('')
diff --git a/sub-pages/film-list/film-detail.vue b/sub-pages/film-list/film-detail.vue
index ab78d44..68e566f 100644
--- a/sub-pages/film-list/film-detail.vue
+++ b/sub-pages/film-list/film-detail.vue
@@ -20,25 +20,25 @@
<view class="swiper-container">
<swiper :current="currentNum" @change="onSwiperChange" circular :autoplay="false"
class="custom-swiper">
- <swiper-item v-for="(item, index) in list6" :key="index" class="swiper-item">
+ <swiper-item v-for="(item, index) in filmPictureList" :key="index" class="swiper-item">
<image :src="item" mode="aspectFill" class="swiper-image" @tap="previewImage(index)" />
</swiper-item>
</swiper>
<view class="indicator-num">
- <text class="indicator-num__text">{{ currentNum + 1 }}/{{ list6.length }}</text>
+ <text class="indicator-num__text">{{ currentNum + 1 }}/{{ filmPictureList.length }}</text>
</view>
</view>
<view class="article-content">
<view class="title content-item">
- <text>我是标题标题我是标题标题我是标题标题我是标题标题</text>
+ <text>{{ filmInfo.coverTitle }}</text>
</view>
<view class="content-item">
- <rich-text :nodes="desc" />
+ <rich-text :nodes="filmInfo.filmContent" />
</view>
<view class="annotation content-item">
- <text>4分钟前 美国</text>
+ <text>{{ formatRelativeTime(filmInfo.createTime) }} 美国</text>
</view>
</view>
@@ -46,7 +46,7 @@
<view class="comment">
<view class="writer-view" @click="showCommentLayer">
- <up-icon name="chat-fill" size="60rpx" />
+ <up-icon name="chat-fill" size="60rpx" />
<view class="comment-operation">
<up-text size="12px" text="说点什么......" margin="0 0 0 20rpx" color="#B9B9B9" />
</view>
@@ -77,8 +77,15 @@
</template>
<script setup lang="ts">
+
import { ref, reactive } from 'vue'
+import { onShow, onPullDownRefresh, onReachBottom } from '@dcloudio/uni-app'
import { onLoad } from '@dcloudio/uni-app'
+import { useGlobal } from '@/composables/useGlobal'
+const { $http, $message, $store } = useGlobal()
+
+import { FilmInfo,FilmPicture } from '@/types/index'
+import { formatRelativeTime } from '@/utils/time'
// Swiper 当前页
const currentNum = ref(0)
@@ -90,12 +97,6 @@
avatar: 'https://img.yzcdn.cn/vant/cat.jpeg'
})
-const list6 = ref<string[]>([
- 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg',
- 'https://img.yzcdn.cn/vant/cat.jpeg',
- 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg'
-])
-
const urls2 = ref<string[]>([
'https://img.yzcdn.cn/vant/cat.jpeg'
])
@@ -106,9 +107,20 @@
#新疆是个好地方 #新疆旅行攻略...
`)
-onLoad(() => {
+onLoad((options:any) => {
const theme = uni.getStorageSync('theme') || 'light'
console.log('theme:', theme)
+
+ // 获取传递来的参数
+ console.log('传入参数:', options)
+
+ // 示例:你传过来的参数可能是这样 ?id=123&type=test
+ const id = options.id
+ const type = options.type
+ console.log('id:', id, 'type:', type)
+ if(id){
+ getFilmInfoById(id)
+ }
})
const onSwiperChange = (e: any) => {
@@ -117,14 +129,54 @@
const previewImage = (index: number) => {
uni.previewImage({
- current: list6.value[index],
- urls: list6.value
+ current: filmPictureList.value[index],
+ urls: filmPictureList.value
})
}
const showCommentLayer = () => {
commentShow.value = true
}
+
+onShow(() => {
+
+});
+
+const filmInfo = ref<FilmInfo>()
+
+const filmPictureList = ref<string[]>([])
+const getFilmInfoById = async (id:String)=>{
+ const {
+ code, data
+ } = await $http.request('get', '/api/filmWorks/list/view', {
+ params: {
+ id: id
+ }
+ })
+ if (code == 0) {
+ filmInfo.value=data
+ console.log("详情",filmInfo.value)
+ if(data && data.filmPictures){
+ // 只获取里面的url
+ // filmPictureList.value=JSON.parse(data.filmPictures) as Array<FilmPicture>
+ const tmpPicture = JSON.parse(data.filmPictures) as FilmPicture[]
+ filmPictureList.value = tmpPicture.map(item => item.url)
+ // 如果 filmPictureList.value是空的情况下,则把封面放入到图片列表中
+ debugger;
+ if (filmPictureList.value.length === 0) {
+ filmPictureList.value.push(data.coverUrl)
+ }
+ }else{
+ if (filmPictureList.value.length === 0) {
+ filmPictureList.value.push(data.coverUrl)
+ }
+ }
+ console.log("图片列表",filmPictureList.value)
+ } else {
+ $message.showToast('系统异常,无法获取数据')
+ return null;
+ }
+}
</script>
diff --git a/sub-pages/film-list/film-list.vue b/sub-pages/film-list/film-list.vue
index 957e691..f069e46 100644
--- a/sub-pages/film-list/film-list.vue
+++ b/sub-pages/film-list/film-list.vue
@@ -14,7 +14,7 @@
</up-tabs>
<view class="list-view">
- <up-waterfall v-model="flowList">
+ <up-waterfall v-model="films">
<template #left="{ leftList }">
<FlowCard v-for="(item, index) in leftList" :key="index" :item="item" @click="handleDetailClick" />
</template>
@@ -22,79 +22,26 @@
<FlowCard v-for="(item, index) in rightList" :key="index" :item="item" @click="handleDetailClick" />
</template>
</up-waterfall>
+ <up-loadmore :status="filmStatus" :line="true" />
</view>
</view>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
-import { onLoad } from '@dcloudio/uni-app'
+import { onLoad, onShow, onPullDownRefresh, onReachBottom } from '@dcloudio/uni-app'
+import { FilmCategoryTree,FilmWorks } from '@/types/index'
+import { useGlobal } from '@/composables/useGlobal'
+const { $http, $message, $store } = useGlobal()
+import { FilmTabCategory,FilmWorksCategory } from '@/enums/dict'
+import { useNavigator } from '@/composables/useNavigator'
+const { navigateTo } = useNavigator()
-interface Item {
- id: number
- title: string
- imgurl: string
- username: string
- avatar: string
- date: string
- likes: number
-}
+import { getTabList } from '@/sub-pages/utils/api'
const theme = ref('light')
const search = ref('')
-const flowList = ref<Item[]>([])
-
-const tabList = ref([
- { name: '关注' },
- { name: '推荐' },
- { name: '电影' },
- { name: '科技' },
- { name: '音乐' },
- { name: '美食' },
- { name: '文化' },
- { name: '财经' },
- { name: '手工' }
-])
-
-const items: Item[] = [
- {
- id: 1,
- title: 'iPhone 高清全屏壁纸,划走就后悔',
- imgurl: 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg',
- username: '草莓喵喵',
- avatar: '/static/avatar1.jpg',
- date: '2024-12-01',
- likes: 1397
- },
- {
- id: 2,
- title: '高清 4K 全屏手机壁纸 #高质量壁纸高清 4K 全屏手机壁纸 #高质量壁纸',
- imgurl: 'https://img.yzcdn.cn/vant/cat.jpeg',
- username: '4K wallpaper',
- avatar: '/static/avatar2.jpg',
- date: '02-24',
- likes: 167
- },
- {
- id: 3,
- title: 'iPhone 实况动态壁纸 #动态壁纸',
- imgurl: 'https://img.yzcdn.cn/vant/cat.jpeg',
- username: '图墙精选',
- avatar: '/static/avatar3.jpg',
- date: '03-01',
- likes: 980
- },
- {
- id: 4,
- title: '高清小清新壁纸 浪漫的人都有自己的海',
- imgurl: 'https://ai-public.mastergo.com/ai/img_res/6a226f9e9652c51cd535c3490535dfeb.jpg',
- username: 'wallpaper',
- avatar: '/static/avatar4.jpg',
- date: '04-10',
- likes: 456
- }
-]
-
+const tabList = ref<FilmCategoryTree[]>([])
const onSearch = (value: string) => {
uni.showToast({
title: `搜索:${value}`,
@@ -102,12 +49,10 @@
})
}
-const handleDetailClick = (item: Item) => {
- const url =
- item.id === 1
- ? `/sub-pages/film-list/film-official-detail?id=${item.id}`
- : `/sub-pages/film-list/film-detail?id=${item.id}`
- uni.navigateTo({ url })
+const handleDetailClick = (item: FilmCategoryTree) => {
+ const urlOfficicl=`/sub-pages/film-list/film-official-detail?id=${item.id}`;
+ const url= `/sub-pages/film-list/film-detail?id=${item.id}`
+ navigateTo(url)
}
const showToast = (msg: string) => {
@@ -119,11 +64,82 @@
theme.value = storedTheme
})
+
onMounted(() => {
flowList.value = items
})
+
+onShow(() => {
+ // 获取分类
+ getTabList(FilmTabCategory.FILM_TYPE,tabList)
+
+ // 获取电影
+ getfilms()
+
+});
+
+onPullDownRefresh(async () => {
+ console.log('用户下拉刷新了')
+ filmPage.value = 1
+ getfilms()
+ uni.stopPullDownRefresh() // 停止下拉刷新动画
+})
+
+onReachBottom(() => {
+ console.log('用户触底了')
+ getfilms()
+})
+
+const films = ref<FilmWorks[]>([])
+const filmPage = ref(1)
+const filmSize = 10
+const filmStatus = ref('loading')
+const getfilms = async () => {
+ if (filmStatus.value === 'nomore') return
+
+ filmStatus.value = 'loading'
+
+ // TODO 暂时使用光影社区的类别
+ const records = await getFilmWorksBase('', filmSize, filmPage.value)
+
+ if (records && records.length > 0) {
+ // 使用 Set 进行去重
+ const existingIds = new Set(films.value.map(item => item.id))
+ const uniqueRecords = records.filter(item => !existingIds.has(item.id))
+
+ films.value = [...films.value, ...uniqueRecords]
+
+ // 如果返回的记录数少于请求的 size,说明没有更多数据
+ if (records.length < filmSize) {
+ filmStatus.value = 'noMore'
+ }
+
+ filmPage.value++
+ } else {
+ filmStatus.value = 'noMore'
+ }
+}
+
+const getFilmWorksBase = async (type: String, pageSize: Number, currentPage: Number) => {
+ const {
+ code, data
+ } = await $http.request('get', '/api/filmWorks/list', {
+ params: {
+ classify: type,
+ size: pageSize,
+ current: currentPage
+ }
+ })
+ if (code == 0) {
+ return data.records
+ } else {
+ $message.showToast('系统异常,无法获取数据')
+ return null;
+ }
+}
+
+
+
</script>
-<style lang="scss" scoped>
-
-</style>
\ No newline at end of file
+<style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/sub-pages/utils/api.ts b/sub-pages/utils/api.ts
new file mode 100644
index 0000000..1eed362
--- /dev/null
+++ b/sub-pages/utils/api.ts
@@ -0,0 +1,41 @@
+// sub-pages/utils/api.ts
+
+import { ref, Ref } from 'vue'
+import { FilmCategoryTree, FilmWorks } from '@/types/index'
+import http from '@/plugins/http.js'
+import message from '@/plugins/message'
+
+export const getTabList = async (
+ parentId: string,
+ targetList: Ref<FilmCategoryTree[]>,
+ isShowDefault: boolean = true
+) => {
+ const { code, data } = await http.request('get', '/api/film/category/list', {
+ params: { parentId }
+ })
+
+ if (code === 0) {
+ const defaultOption: FilmCategoryTree = {
+ id: '',
+ name: '全部',
+ parentId,
+ imageUrl: '',
+ color: '',
+ sortBy: 0,
+ shown: true,
+ levelLimit: '',
+ childrenCount: 0,
+ children: []
+ }
+ if (isShowDefault) {
+ targetList.value = [defaultOption, ...data]
+ } else {
+ targetList.value = data
+ }
+
+ console.log('tabList', targetList.value)
+ } else {
+ message.showToast('系统异常,无法获取数据') // 或者用 uni.showToast()
+ return null
+ }
+}
diff --git a/types/index.ts b/types/index.ts
index 0aa5aff..4984d83 100644
--- a/types/index.ts
+++ b/types/index.ts
@@ -8,12 +8,12 @@
}
export interface WechatLoginData {
- code: string
- imgurl?: string
- nickname?: string
- inviter?: string
- phoneNumber?: string
- purePhoneNumber?: string
+ code: string
+ imgurl?: string
+ nickname?: string
+ inviter?: string
+ phoneNumber?: string
+ purePhoneNumber?: string
}
export interface ProtocolData {
@@ -22,73 +22,73 @@
content: string;
}
-export interface FilmWorks{
+export interface FilmWorks {
id?: number;
/** 中文名称 */
nameCn?: string;
-
+
/** 英文名称 */
nameEn?: string;
-
+
/** 作品类型 */
type?: string;
typeStr?: string;
-
+
/** 上映年份 */
releaseYear?: string;
-
+
/** 导演(多个用逗号分隔) */
director?: string;
-
+
/** 制片方 */
producer?: string;
-
+
/** 主要演员(多个用逗号分隔) */
actors?: string;
-
+
/** 剧情关键词(用逗号分隔) */
keywords?: string;
-
+
/** 剧情简介 */
synopsis?: string;
-
+
/** 封面图片URL */
coverUrl?: string;
-
+
/** 封面图片描述文本 */
coverAlt?: string;
-
+
/** 创建者用户类型 */
userType?: string;
userTypeStr?: string;
-
+
/** 置顶权重(越大越靠前) */
stickyWeight?: number;
-
+
/** 状态 */
status?: string;
statusStr?: string;
-
+
/** 创建者ID */
createBy?: string;
-
+
/** 最后修改者ID */
updateBy?: string;
-
+
/** 收藏量 */
collectCount?: number;
-
+
/** 点赞量 */
likeCount?: number;
-
+
/** 评论量 */
commentCount?: number;
-
+
/** 分享量 */
shareCount?: number;
-
+
/** 分类 */
classify?: number;
@@ -101,7 +101,80 @@
avatar?: String;
nickname?: String;
-
+
createTime?: String;
-}
\ No newline at end of file
+}
+
+interface Node {
+ id: any;
+ parentId: any;
+ children: Node[];
+}
+
+export interface FilmCategoryTree extends Node {
+ /** 名称 */
+ name: string;
+
+ /** 父分类名称 */
+ parentName: string;
+
+ /** 图标 */
+ imageUrl: string;
+
+ /** 颜色 */
+ color: string;
+
+ /** 排序 */
+ sortBy: number;
+
+ /** 是否展示 */
+ shown: boolean;
+
+ /** 级别限制 */
+ levelLimit: string;
+
+ /** 子分类数量 */
+ childrenCount: number;
+}
+
+export interface FilmPicture {
+ name: string;
+ size: number;
+ url: string;
+}
+
+export interface FilmInfo {
+ id: number;
+ nameCn: string;
+ nameEn: string;
+ nickname: string | null;
+ actors: string;
+ director: string;
+ producer: string;
+ filmContent: string | null;
+ filmPictures: FilmPicture[];
+ coverUrl: string;
+ coverAlt: string;
+ coverTitle: string;
+ classify: string | null;
+ keywords: string;
+ tag: string;
+ type: string;
+ typeStr: string;
+ status: string;
+ statusStr: string;
+ stickyWeight: number;
+ synopsis: string;
+ avatar: string | null;
+ releaseYear: number | null;
+ collectCount: number;
+ commentCount: number;
+ likeCount: number;
+ shareCount: number;
+ userType: string;
+ userTypeStr: string;
+ createBy: string;
+ createTime: string;
+ updateBy: string | null;
+}
--
Gitblit v1.9.3