diff --git a/src/pages/preview/brand/article/article.config.ts b/src/pages/preview/brand/article/article.config.ts new file mode 100644 index 0000000..1029aac --- /dev/null +++ b/src/pages/preview/brand/article/article.config.ts @@ -0,0 +1,4 @@ +export default definePageConfig({ + navigationBarTitleText: '文章详情', + onReachBottomDistance: 30 +}) diff --git a/src/pages/preview/brand/article/article.tsx b/src/pages/preview/brand/article/article.tsx new file mode 100644 index 0000000..e2b3556 --- /dev/null +++ b/src/pages/preview/brand/article/article.tsx @@ -0,0 +1,28 @@ +import {FC, useEffect, useState} from "react"; +import {View} from "@tarojs/components"; +import Taro, {useRouter} from "@tarojs/taro"; +import {ArticleRecord, brandApi} from "@/api"; + + +const article:FC = () => { + const {id} = useRouter().params as unknown as { id: number} + const [articleInfo,setArticleInfo] = useState() + useEffect(() => { + getData() + }, [id]) + + const getData = async () => { + try { + const data = await brandApi.articleInfo(id) + Taro.setNavigationBarTitle({title:data.title}) + setArticleInfo(data) + } catch (e) { + } + } + function helloWorld() { + const html = articleInfo?.content; + return + } + return helloWorld() +} +export default article diff --git a/src/pages/preview/brand/info/info.config.ts b/src/pages/preview/brand/info/info.config.ts new file mode 100644 index 0000000..2a0a86b --- /dev/null +++ b/src/pages/preview/brand/info/info.config.ts @@ -0,0 +1,4 @@ +export default definePageConfig({ + navigationBarTitleText: '', + onReachBottomDistance: 30 +}) diff --git a/src/pages/preview/brand/info/info.module.scss b/src/pages/preview/brand/info/info.module.scss new file mode 100644 index 0000000..11abb71 --- /dev/null +++ b/src/pages/preview/brand/info/info.module.scss @@ -0,0 +1,65 @@ +.swiper{ + width:750rpx; + height:600rpx; + background-color: pink; +} +.body{ + border-radius: 32rpx 32rpx 0 0; + background-color:cadetblue; + width: 750rpx; + box-sizing: border-box; + display: flex; + flex-direction: column; + min-height: 80vh; + position: absolute; + top: 520rpx; + .top{ + padding:40rpx 30rpx 30rpx 30rpx; + border-radius: 32rpx; + background-color: #fff; + .title{ + font-size: 32rpx; + font-weight: bold; + color: #323635; + line-height:44rpx; + } + } + .bottom{ + margin-top: 20rpx; + flex:1; + background-color: #fff; + border-radius: 32rpx 32rpx 0 0; + width: 100%; + .box { + display: flex; + background-color: #fff; + border-radius: 16rpx; + padding: 30rpx; + box-sizing: border-box; + } + .inner{ + flex:1; + display: flex; + padding-bottom: 24rpx; + border-bottom: 2rpx solid #F5F8F7; + .image{ + width: 172rpx; + height:128rpx; + background-color: pink; + border-radius: 8rpx; + } + .leftBox{ + padding-right: 24rpx; + box-sizing: border-box; + flex: 1; + } + .desc{ + font-size: 22rpx; + font-weight: 500; + color: #909795; + line-height: 32rpx + } + } + + } +} diff --git a/src/pages/preview/brand/info/info.tsx b/src/pages/preview/brand/info/info.tsx new file mode 100644 index 0000000..0ac2089 --- /dev/null +++ b/src/pages/preview/brand/info/info.tsx @@ -0,0 +1,97 @@ +import {FC, useEffect, useState} from "react"; +import {Image, Swiper, SwiperItem, Text, Video, View} from "@tarojs/components"; +import {ArticleRecord, brandApi, BrandRecord} from "@/api"; +import styles from './info.module.scss' +import Taro, {useRouter} from "@tarojs/taro"; +import LineEllipsis from "@/components/textCollapse/collapse"; +import Empty from "@/components/empty/empty"; + +type Params = { + id: number +} +const BrandInfo: FC = () => { + const {id} = useRouter().params as unknown as Params + const [brandInfo, setBrandInfo] = useState() + const [articleList, setArticleList] = useState() + + useEffect(() => { + getData() + }, [id]) + + const getData = async () => { + try { + const data = await brandApi.info(id) + Taro.setNavigationBarTitle({title: data.name}) + setBrandInfo(data) + const data1 = await brandApi.articleList(id) + setArticleList(data1.list) + } catch (e) { + // setBrandInfo({disabled: 0, graphic_introduction: "", id: 0, introductory_video: "", name: "", brand_album:['1','2','3']}) + } + } + + + return ( + + { + + + ) + {brandInfo?.brand_album?.length + && brandInfo?.brand_album?.map((d) => + + + ) + } + + + } + + + {brandInfo?.name} + + + + { + articleList?.length ? + articleList.map((i: any) => + { + Taro.navigateTo({url: `/pages/preview/brand/article/article?id=${i.id}`}) + }}> + + + {i.title} + {i.created_at} {i.page_view}阅读 + + {/**/} + + + ) + : + } + + + + + ); +} + +export default BrandInfo diff --git a/src/pages/preview/brand/list/list.config.ts b/src/pages/preview/brand/list/list.config.ts new file mode 100644 index 0000000..89c2e86 --- /dev/null +++ b/src/pages/preview/brand/list/list.config.ts @@ -0,0 +1,4 @@ +export default definePageConfig({ + navigationBarTitleText: '品牌列表', + onReachBottomDistance: 30 +}) diff --git a/src/pages/preview/brand/list/list.module.scss b/src/pages/preview/brand/list/list.module.scss new file mode 100644 index 0000000..25cd50a --- /dev/null +++ b/src/pages/preview/brand/list/list.module.scss @@ -0,0 +1,32 @@ +.box { + display: flex; + margin-bottom: 20rpx; + background-color: #fff; + border-radius: 16rpx; + padding: 24rpx; + box-sizing: border-box; +} +.image{ + width: 128rpx; + height:128rpx; + background-color: pink; + border-radius: 8rpx; +} +.rightBox{ + padding-left: 24rpx; + box-sizing: border-box; + flex: 1; +} +.desc{ + font-size: 24rpx; + font-weight: 500; + color: #909795; + line-height: 34rpx; + display: -webkit-box; + word-break: break-all; + text-overflow: ellipsis; + overflow: hidden; + -webkit-box-orient:vertical; + -webkit-line-clamp:2; +} + diff --git a/src/pages/preview/brand/list/list.tsx b/src/pages/preview/brand/list/list.tsx new file mode 100644 index 0000000..2ea9aef --- /dev/null +++ b/src/pages/preview/brand/list/list.tsx @@ -0,0 +1,57 @@ +import {FC, useCallback, useEffect, useState} from "react"; +import {Image, View} from "@tarojs/components"; +import {brandApi, BrandRecord} from "@/api"; +import styles from './list.module.scss' +import Taro, {useReachBottom} from "@tarojs/taro"; +import Empty from "@/components/empty/empty"; + +const BrandList: FC = () => { + const [page, setPage] = useState(1) + const [brands, setBrands] = useState([]) + const [total, setTotal] = useState(0) + + useEffect(() => { + getData() + }, [page]) + + const getData = useCallback(async () => { + try { + const res = await brandApi.list(1, 10) + setTotal(res.total) + setBrands([ + ...res.data + ]) + } catch (e) { + } + }, [page]) + + + function jumpInfo(id: number) { + Taro.navigateTo({url: `/pages/preview/brand/info/info?id=${id}`}) + } + + useReachBottom(useCallback(() => { + if (brands?.length < total) { + setPage(page + 1) + } + }, [total, brands])) + + + return ( + + { + brands.length ? brands.map((d) => + jumpInfo(d.id)} className={styles.box} key={d.id}> + + + {d.name} + {d.graphic_introduction.repeat(30)} + + ) + : + } + + ) +} + +export default BrandList