基于uniapp+vue3+ts开发微信小程序项目实战

🚀 作者 :“二当家-小D”

🚀 博主简介:⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人,8年开发架构经验,精通java,擅长分布式高并发架构,自动化压力测试,微服务容器化k8s等

🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬

🍅文末获取源码联系 配套笔记打包🍅

一、微信小程序项目分类页面开发

1.1布局开发

  <script lang="ts" setup>
  import NavigationBar from './components/NavigationBar.vue'
  import ProductContainer from './components/ProductContainer.vue'
  </script>
  
  <template>
    <view style="background-color: #f3f3f3" overflow-x-hidden>
      <NavigationBar />
      <ProductContainer />
    </view>
  </template>

1.2课程展示子组件

 <script lang="ts" setup>
  import Product from './ProductContainer/Product.vue'
  import { queryProductById } from '@/api/category';
  
  let products = $ref<any>()
  products = queryProductById().data.current_data;
  
  </script>
  
  <template>
    <view class="container">
      <view class="products">
        <Product v-for="item, index in products" :key="index" :product="item" />
      </view>
    </view>
  </template>
<script lang="ts" setup>
  import type { IProduct } from '@/typings/interface'
  
  defineProps<{ product: IProduct }>()
  
  </script>
  
  <template>
    <view class="product">
      <image :src="product.coverImg" mode="scaleToFill" />
      <text class="title">
        {{ product.title }}
      </text>
      <view class="level_price">
        <view class="price">
          <view>
            <text class="dollor">
              ¥
            </text>
            <text class="price">
              {{ product.amount }}
            </text>
          </view>
        </view>
      </view>
    </view>
  </template>

二、微信小程序项目学习页面开发—布局+数据获取

2.1布局+数据获取

  <script lang="ts" setup>
  import { queryPlayRecordPage } from '@/api/user'
  
  let playRecordPage = $ref<any[]>([])
  
  playRecordPage = queryPlayRecordPage().data.current_data
  
  </script>
  
  <template>
    <view class="container">
      <view class="products">
        111
      </view>
    </view>
  </template>

2.2课程播放记录列表

 <script lang="ts" setup>
  import type { IPlayRecord } from '@/typings/interface'
  
  defineProps<{ product: IPlayRecord }>()
  
  function getProgress(product: IPlayRecord) {
    const progress = Math.ceil((product?.learnIds.split(',')?.length / product?.episodeNum) * 100)
    return !product?.learnIds ? 0 : progress >= 100 ? 100 : progress
  }
  
  </script>
  
  <template>
    <view class="product">
      <image :src="product?.coverImg" mode="scaleToFill" />
      <view class="right">
        <text class="title">
          {{ product?.productTitle }}
        </text>
        <view class="progress">
          <progress :percent="getProgress(product)" active-color="#f59a23" border-radius="35" />
          <text>已学习</text>
          <text class="percent">
            {{ getProgress(product) }}%
          </text>
        </view>
        <view class="bottom">
          <text v-if="product?.learnIds" class="chapter">
            学习到:{{ product?.episodeTitle }}
          </text>
          <text v-else class="chapter">
            还未学习
          </text>
        </view>
      </view>
    </view>
  </template>

三、微信小程序项目我的页面开发

3.1未登录的页面

  <script lang="ts" setup>
  
  </script>
  
  <template>
    <uni-nav-bar :fixed="true" :status-bar="true" :border="false" background-color="#ffffff" left-width="300rpx"
      right-width="300rpx">
      <template #left>
        <text class="my_study">
          我的
        </text>
      </template>
    </uni-nav-bar>
  </template>

3.2登录的页面

<script lang="ts" setup>
  const { isLogin } = $(useUser())
  
  const username = computed(() => (isLogin ? '大钊' : '点击登录'))
  const avatar = computed(() => (isLogin ? '/static/images/icons/mine/user.png' : '/static/images/icons/mine/user.png'))
  const learnTime = computed(() =>
    isLogin ? `学习时长:${(100 / 3600).toFixed(2)}小时` : '新用户专属200D币礼包'
  )
  
  
  </script>
  
  <template>
    <view class="flex px-2" w-full>
      <view relative>
        <image :src="avatar" w-120 h-120 rounded-full class="b b-#f38e48" />
      </view>
      <view m="y-1 x-4" flex="~ col">
        <text text="40 #4d555d">
          {{ username }}
        </text>
        <view between w-full>
          <text text="30 #f38e48">
            {{ learnTime }}
          </text>
        </view>
      </view>
    </view>
  </template>

结束语

今天的内容接着上次内容讲述了uni-app结合Vue 3和TypeScript开发微信小程序项目全部步骤,从首页布局到数据获取,分类页面、学习、我的页面,都一一详细介绍了具体的步骤和代码。通过这些内容,我们了解到了如何利用uni-app框架结合Vue 3和TypeScript快速构建小程序页面。

今天的文章就到这里了,还有更多内容下次继续。

资料获取📚
完整代码和笔记已经准备好,如果有问题,可以在评论区留言讨论💬
原创不易,别忘了点赞👍+收藏⭐哦!
点击下方链接即可获取完整资料压缩包🎁,快来领取吧!↓↓↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/628188.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

香港电讯高效网络,助力新消费品牌抓住拓展香港市场新风口

自今年初香港与内地全面恢复通关&#xff0c;两地同胞跨境消费热潮持续升温。港人“北上”消费掀起风潮的同时&#xff0c;香港市场也成为内地新消费品牌拓展的热门目标。从糕点、茶饮、连锁餐饮到服饰&#xff0c;越来越多内地品牌进驻香港。新消费品牌要想在香港开设门店&…

气膜建筑会漏气吗—轻空间

气膜建筑作为一种创新的建筑形式&#xff0c;其主要结构依靠充气系统提供源源不断的风力&#xff0c;以维持内部气压&#xff0c;从而支撑起整个膜体&#xff0c;抵御外部的风雪荷载。然而&#xff0c;气膜建筑能否保持完全的密封性&#xff0c;是否会漏气&#xff0c;是许多用…

python批量生成验证码,python生成验证码

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.总结 一.前言 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Human

国标GB28181协议EasyCVR视频汇聚平台获取设备录像仅展示部分片段的原因排查

国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流&#xf…

抖店曝光率高,转化低,不知道怎么提升转化率?试试这四个方法

大家好&#xff0c;我是醒醒团队电商花花。 我们现在做抖音小店的商家或多或少都会遇到不出单&#xff0c;转化低的各种问题。 明明店铺的曝光不低&#xff0c;访客也不少&#xff0c;就是没转化。 下面我根据我们做店的经验&#xff0c;给大家分享一些问题所在&#xff0c;…

从零开始成为网络安全工程师:提高竞争力的秘诀

在当今数字化和互联网化的时代&#xff0c;网络安全工程师的职责越来越重要。然而&#xff0c;网络安全行业发展迅速&#xff0c;竞争也越来越激烈。要成为一名有竞争力的网络安全工程师&#xff0c;需要有一定的技能和经验&#xff0c;同时要不断提升自己的能力。下面是坤哥结…

全国最新行政区划数据,包括省、市、区、街道四个级别(2024年5月15日-来源与腾讯地图)

本数据集涵盖了中国全国范围内的行政区划信息&#xff0c;包括省、市、区、街道四个级别&#xff0c;共计42387条记录。数据采用Excel格式存储&#xff0c;可轻松导入数据库进行使用。 每条记录包含以下关键信息&#xff1a; 行政区域编码&#xff1a;每个行政区域都有唯一的…

项目组GIT操作规范

分支规范 在开发过程中&#xff0c;一般会存在以下几种分支&#xff1a; main分支(master) master为主分支&#xff0c;也是用于部署生产环境的分支&#xff0c;一般由 dev 以及 fixbug分支合并&#xff0c;任何时间都不能直接修改代码。dev分支 develop 为开发分支&#xff…

精酿啤酒:精酿文化的传承者与创新者

在啤酒的世界中&#xff0c;精酿啤酒是一种与众不同的文化现象。这种文化源于对啤酒品质的追求和对传统工艺的尊重&#xff0c;但在不断发展中也不断涌现出创新。作为精酿啤酒的品牌&#xff0c;Fendi club啤酒不仅是这种文化的传承者&#xff0c;更是创新者。 Fendi club啤酒始…

vue下载文件,获取header头文件名乱码,下载文件名有下划线的解决

后台以数据流将文件返回&#xff0c;将文件名放在header头里&#xff0c;是中文名&#xff0c;有乱码&#xff0c;如图 访问网络使用的是axios&#xff0c;在 // 响应拦截器 service.interceptors.response.use((res) > {........ if (res.config.responseType blob) {//文…

智游剪辑1.5.0发布!

智游剪辑1.5.0发布了&#xff0c;快来看看更新了啥功能吧&#xff01; 主页卡片升级 现在功能卡片新增图标&#xff0c;比以前更好看更直观 我的收藏 遇到自己喜欢的功能直接点击收藏就可以了&#xff0c;后面我们就能快速找到这个功能 批量ncm转mp3功能 目前看后台有很多人…

【源头活水】顶刊解读!IEEE T-PAMI (CCF-A,IF 23.6)2024年46卷第二期

“问渠那得清如许&#xff0c;为有源头活水来”&#xff0c;通过前沿领域知识的学习&#xff0c;从其他研究领域得到启发&#xff0c;对研究问题的本质有更清晰的认识和理解&#xff0c;是自我提高的不竭源泉。为此&#xff0c;我们特别精选论文阅读笔记&#xff0c;开辟“源头…

2024江苏省赛 H. 完蛋,我被房产包围了 【费用流、分时图】

完蛋&#xff0c;我被房产包围了 n ≤ 200 , ∑ n ≤ 1 0 4 n \leq 200, \sum n \leq 10^4 n≤200,∑n≤104 求出最大利润 思路 每个代理商每次买房狂潮只能卖出 1 1 1 套房子&#xff0c;小红卖出一套房子贬值 1 1 1 元&#xff0c;小绿卖出一套房子贬值 ⌈ a i 10 ⌉ \…

vue3专栏项目 -- 五、权限管理(下)

1、创建Message组件 前面我们获取到了请求错误的信息&#xff0c;所以我们接下来做一个弹出框组件&#xff0c;让错误提示展示出来 我们把这个组件做成一个全局组件&#xff0c;它不仅可以显示错误的信息&#xff0c;还可以添加成功操作的信息&#xff0c;甚至还可以显示一个…

C# OpenCvSharp Demo - 最大内接圆

C# OpenCvSharp Demo - 最大内接圆 目录 效果 项目 代码 下载 效果 项目 代码 using OpenCvSharp; using System; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Windows.Forms; namespace OpenCvSh…

算法day07

第一题 30. 串联所有单词的子串 上题题意如下&#xff1a; 将w数组里面的字符串随机排列&#xff0c;只要在s字符串中找到相对应的w组成的字符串&#xff0c;则返回s中对应字符串首位元素的第一个下标&#xff1b; 有上述题意所知&#xff0c;解题思路如上一题故事&#xff0c…

React搭建-Next 学习-1

创建一个 Next.js 应用,node版本要高&#xff0c;16.5以上 npm淘宝镜像切为https://registry.npmmirror.com npm config set registry https://registry.npmmirror.com npx create-next-applatest//安装后 使用npm run dev 启动 Next.js 是围绕着 页面&#xff08;pages&am…

如何启用WooCommerce商城快捷结帐:3 种简单方法

使用WooCommerce商城快捷结帐可帮助您提高商店的转化率。 70%的顾客同意在线商店的快速结账流程会鼓励他们完成购买。 在结账过程中您让购物者完成的步骤越多&#xff0c;他们完成该流程的可能性就越小。 解决方案是什么&#xff1f; 通过跳过默认的WooCommerce商城购物车页…

怎么看电脑是固态还是机械硬盘?数据丢失怎么办

在数字化时代&#xff0c;电脑硬盘作为数据存储的核心部件&#xff0c;其类型直接关系到数据读写速度和存储效率。固态硬盘&#xff08;SSD&#xff09;与机械硬盘&#xff08;HDD&#xff09;作为目前市场上主流的两种硬盘类型&#xff0c;各有其优缺点。然而&#xff0c;对于…

【LeetCode刷题】27. 移除元素

1. 题目链接2. 题目描述3. 解题方法4. 代码 1. 题目链接 27. 移除元素 2. 题目描述 3. 解题方法 暴力法直接解决&#xff0c;用双层for循环&#xff0c;外层for循环找val&#xff0c;内层for循环做删除操作。双指针法&#xff0c;fast和slow。fast找不是val的值&#xff0c;…