uniapp實戰 —— 豎排多級分類展示

效果預覽

在這里插入圖片描述

完整范例代碼

頁面 src\pages\category\category.vue

<script setup lang="ts">
import { getCategoryTopAPI } from '@/apis/category'
import type { CategoryTopItem } from '@/types/category'
import { onLoad } from '@dcloudio/uni-app'
import { computed, ref } from 'vue'// 獲取分類列表數據
const categoryList = ref<CategoryTopItem[]>([])
const getCategoryTopData = async () => {const res = await getCategoryTopAPI()categoryList.value = res.result
}// 提取當前二級分類數據
const subCategoryList = computed(() => {return categoryList.value[activeIndex.value]?.children || []
})// 高亮下標
const activeIndex = ref(0)onLoad(() => {getCategoryTopData()
})
</script><template><view class="viewport"><!-- 分類 --><view class="categories"><!-- 左側:一級分類 --><scroll-view class="primary" scroll-y><viewclass="item"v-for="(item, index) in categoryList":key="item.id":class="{ active: index === activeIndex }"@tap="activeIndex = index"><text class="name"> {{ item.name }} </text></view></scroll-view><!-- 右側:二級分類 --><scroll-view class="secondary" scroll-y><!-- 內容區域 --><view class="panel" v-for="item in subCategoryList" :key="item.id"><view class="title"><text class="name">{{ item.name }}</text><navigator class="more" hover-class="none">全部</navigator></view><view class="section"><navigatorv-for="goods in item.goods":key="goods.id"class="goods"hover-class="none":url="`/pages/goods/goods?id=${goods.id}`"><image class="image" :src="goods.picture"></image><view class="name ellipsis">{{ goods.name }}</view><view class="price"><text class="symbol"></text><text class="number">{{ goods.price }}</text></view></navigator></view></view></scroll-view></view></view>
</template><style lang="scss">
page {height: 100%;overflow: hidden;
}
.viewport {height: 100%;display: flex;flex-direction: column;
}
/* 分類 */
.categories {flex: 1;min-height: 400rpx;display: flex;
}
/* 一級分類 */
.primary {overflow: hidden;width: 180rpx;flex: none;background-color: #f6f6f6;.item {display: flex;justify-content: center;align-items: center;height: 96rpx;font-size: 26rpx;color: #595c63;position: relative;&::after {content: '';position: absolute;left: 42rpx;bottom: 0;width: 96rpx;border-top: 1rpx solid #e3e4e7;}}.active {background-color: #fff;&::before {content: '';position: absolute;left: 0;top: 0;width: 8rpx;height: 100%;background-color: #27ba9b;}}
}
.primary .item:last-child::after,
.primary .active::after {display: none;
}
/* 二級分類 */
.secondary {background-color: #fff;.carousel {height: 200rpx;margin: 0 30rpx 20rpx;border-radius: 4rpx;overflow: hidden;}.panel {margin: 0 30rpx 0rpx;}.title {height: 60rpx;line-height: 60rpx;color: #333;font-size: 28rpx;border-bottom: 1rpx solid #f7f7f8;.more {float: right;padding-left: 20rpx;font-size: 24rpx;color: #999;}}.more {&::after {font-family: 'erabbit' !important;content: '\e6c2';}}.section {width: 100%;display: flex;flex-wrap: wrap;padding: 20rpx 0;.goods {width: 150rpx;margin: 0rpx 30rpx 20rpx 0;&:nth-child(3n) {margin-right: 0;}image {width: 150rpx;height: 150rpx;}.name {padding: 5rpx;font-size: 22rpx;color: #333;}.price {padding: 5rpx;font-size: 18rpx;color: #cf4444;}.number {font-size: 24rpx;margin-left: 2rpx;}}}
}
</style>

接口 src\apis\category.ts

import type { CategoryTopItem } from '@/types/category'
import { http } from '@/utils/http'/*** 分類列表*/
export const getCategoryTopAPI = () => {return http<CategoryTopItem[]>({method: 'GET',url: '/category/top',})
}

類型聲明 src\types\category.d.ts

import type { GoodsItem } from './global'/** 一級分類項 */
export type CategoryTopItem = {/** 二級分類集合[ 二級分類項 ] */children: CategoryChildItem[]/** 一級分類id */id: string/** 一級分類圖片集[ 一級分類圖片項 ] */imageBanners: string[]/** 一級分類名稱 */name: string/** 一級分類圖片 */picture: string
}/** 二級分類項 */
export type CategoryChildItem = {/** 商品集合[ 商品項 ] */goods: GoodsItem[]/** 二級分類id */id: string/** 二級分類名稱 */name: string/** 二級分類圖片 */picture: string
}

src\types\global.d.ts

/** 通用商品類型 */
export type GoodsItem = {/** 商品描述 */desc: string/** 商品折扣 */discount: number/** id */id: string/** 商品名稱 */name: string/** 商品已下單數量 */orderNum: number/** 商品圖片 */picture: string/** 商品價格 */price: number
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209613.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue指令

v-text 更新元素的 textContent。如果要更新部分的 textContent&#xff0c;需要使用 {{ Mustache }} 插值。 <span v-text"msg"></span> <!-- 和下面的一樣 --> <span>{{msg}}</span>v-html 更新元素的 innerHTML。注意&#xff1a;內…

基于高通MSM8953平臺android9.0的GPIO驅動開發

2.1、注冊設備&#xff1a; 2.1.1、添加編譯選項&#xff1a; 1&#xff09;、修改kernel/msm-4.9/drivers/leds下Makefile文件&#xff1a; obj-$(CONFIG_LED_GPIO) led_gpio.o 2&#xff09;、修改kernel/msm-4.9/drivers/leds下Kconfig文件&#xff1a; config LED_GPIO…

Java實現歸并排序算法

歸并排序算法 &#xff08;1&#xff09;基本思想&#xff1a;歸并&#xff08;Merge&#xff09;排序法是將兩個&#xff08;或兩個以上&#xff09;有序表合并成一個新的有序表&#xff0c;即把待排序序列分為若干個子序列&#xff0c;每個子序列是有序的。然后再把有序子序…

蛋白質序列FeatureDict轉化為TensorDict

主要轉化語句為 tensor_dict {k: tf.constant(v) for k, v in np_example.items() if k in features_metadata}。 增加了特征名稱的選擇&#xff0c;不同特征維度&#xff0c;特征數的判斷等。 from typing import Dict, Tuple, Sequence, Union, Mapping, Optional #import …

postgresql_conf中常用配置項

在 PostgreSQL 的 postgresql.conf 配置文件中&#xff0c;有許多常用的配置項&#xff0c;這些配置項可以根據特定需求和性能優化進行調整。以下是一些常用的配置項及其作用&#xff1a; 1. shared_buffers 用于設置 PostgreSQL 實例使用的共享內存緩沖區大小。增加此值可以…

游戲被攻擊該怎么辦?游戲盾該如何使用,游戲盾如何防護攻擊

隨著Internet互聯網絡帶寬的增加和多種DDOS黑客工具的不斷發布&#xff0c;DDOS拒絕服務攻擊的實施越來越容易&#xff0c;DDOS攻擊事件正在成上升趨勢。出于商業競爭、打擊報復和網絡敲詐等多種因素&#xff0c;導致很多商業站點、游戲服務器、聊天網絡等網絡服務商長期以來一…

Nacos 配置加密功能也太雞肋了吧,有種更好的方式

大家好&#xff0c;我是風箏&#xff0c;微信搜「古時的風箏」&#xff0c;更多干貨 當項目中用了 Nacos 做配置中心&#xff0c;是不是所有的配置都放到里面呢&#xff0c;大部分時候為了省事和統一&#xff0c;系統所有的配置都直接放在里面了&#xff0c;有時候&#xff0c…

什么是自動化測試框架?常用的自動化測試框架有哪些?

無論是在自動化測試實踐&#xff0c;還是日常交流中&#xff0c;經常聽到一個詞&#xff1a;框架。之前學習自動化測試的過程中&#xff0c;一直對“框架”這個詞知其然不知其所以然。 最近看了很多自動化相關的資料&#xff0c;加上自己的一些實踐&#xff0c;算是對“框架”…

Redis相關知識

yum安裝redis 使用以下命令&#xff1a;直接將redis安裝到Linux服務器&#xff08;Xshell&#xff09;中 yum -y install redis 啟動redis 使用以下命令&#xff0c;以后臺運行方式啟動redis redis-server /etc/redis.conf & 操作redis 使用以下命令啟動redis客戶端 redis-…

RFID在新能源工廠大放異彩

RFID在新能源工廠大放異彩 我國在十四五規劃中提出了建設綠色低碳發展的目標&#xff0c;新能源產業成為了國家發展的重點領域之一&#xff0c;開始大力支持各種新能源廠商發展。各個廠商之間不僅比產品、比技術。也比生產想要降本增效&#xff0c;為了實現這一目標&#xff0…

MBD Introduction

介紹 MATLAB是MathWorks公司的商業數學軟件&#xff0c;應用于科學計算、可視化以及交互式程序設計等高科技計算環境。Simulink是MATLAB中的一種可視化仿真工具。 Simulink是一個模塊圖環境&#xff0c;用于多域仿真以及基于模型的設計。它支持系統設計、仿真、自動代碼生成以…

Spring基于xml半注解開發

目錄 Component的使用 依賴注解的使用 非自定義Bean的注解開發 Component的使用 基本Bean注解&#xff0c;主要是使用注解的方式替代原有的xml的<bean>標簽及其標簽屬性的配置&#xff0c;使用Component注解替代<bean>標簽中的id以及class屬性&#xff0c;而對…

算法Day26 數位統計

數位統計 Description 給你一個整數n&#xff0c;統計并返回各位數字都不同的數字x的個數&#xff0c;其中0 ≤ x < 10^n。 Input 輸入整數n 0≤n≤13 Output 輸出整數個數 Sample 代碼 import java.util.Scanner;public class Main {public static void main(String[] ar…

一個Oracle Application Container的實例

本例基本涵蓋了Oracle Multitenant功能中application container的以下內容&#xff1a; 創建application container/root創建application PDB創建application SEED在application root中安裝application在application root中升級application同步application 整個過程如下 創建…

Epoll服務器(ET工作模式)

目錄 Epoll ET服務器設計思路Connection類TcpServer類 回調函數Accepter函數Recever函數Sender函數Excepter函數 事件處理套接字相關接口封裝運行Epoll服務器 Epoll ET服務器 設計思路 在epoll ET服務器中&#xff0c;我們需要處理如下幾種事件&#xff1a; 讀事件&#xff…

基于javeweb實現的圖書借閱管理系統

一、系統架構 前端&#xff1a;jsp | js | css | jquery 后端&#xff1a;servlet | jdbc 環境&#xff1a;jdk1.7 | mysql | tocmat 二、代碼及數據庫 三、功能介紹 01. 登錄頁 02. 首頁 03. 圖書管理 04. 讀者管理 05. 圖書分類管理 06. 圖書借閱信息 07. 圖書歸還信…

CDN加速技術:降低服務器與網站成本的智慧選擇

隨著互聯網的飛速發展&#xff0c;網站的訪問量不斷攀升&#xff0c;服務器負載壓力逐漸增大。為了提高用戶體驗、降低服務器成本&#xff0c;并確保網站的高可用性&#xff0c;CDN&#xff08;內容分發網絡&#xff09;加速技術應運而生。本文將從服務器與網站成本的角度分析C…

NLP項目實戰01--電影評論分類

介紹&#xff1a; 歡迎來到本篇文章&#xff01;在這里&#xff0c;我們將探討一個常見而重要的自然語言處理任務——文本分類。具體而言&#xff0c;我們將關注情感分析任務&#xff0c;即通過分析電影評論的情感來判斷評論是正面的、負面的。 展示&#xff1a; 訓練展示如下…

比較不同聚類方法的評估指標

歸一化互信息&#xff08;NMI&#xff09; 要求&#xff1a;需要每個序列的真實標簽&#xff08;分類信息&#xff09;

你在地鐵上修過bug嗎?

作為技術人員&#xff0c;有沒有遇到下班路上收到老板電話&#xff0c;系統故障&#xff0c;然后地鐵上掏出電腦&#xff0c;修bug的場景。自己負責的業務線上出現問題&#xff0c;負責人心里是很慌的&#xff0c;在這種心理狀態下做事很容易二次犯錯&#xff0c;造成更大的問題…