开发uniapp前端通用价格组件提交到DCloud插件市场

开发uniapp前端通用价格组件提交到DCloud插件市场
请添加图片描述

需求描述

如果你开发商城类项目,必定会显示价格,如果想让价格显示的具有突出并且有美感,如下图所示,很显然是需要花费一些工夫的,我在开发商城的时候客户端、后台管理都需要展示价格,每天都要花费一些时间调整,所以我就开发了一个价格组件,将价格显示的样式放到插件市场,如果需要显示价格的时候,导入进来修改一下属性就能使用了。

在这里插入图片描述


上面显示的价格样式,在这篇文章“自定义价格尾数”讲过,如果使用css完整价格尾数的显示。

下面我们就通过上面的需求,开发一款可以给uniapp项目是使用的价格组件,介绍一下如何开发DCloud插件市场的插件。

📺综合商城实战项目:unipay支付微信小程序商城开发Vue3完整版

一、新建uni_modules插件

1.在根目录下“uni_modules”单击右键,“新建uni_modules插件”

在这里插入图片描述


2.为插件创建一个名称,前面最好加一个你的专属前缀,我的昵称是“咸虾米”,所以我的所有插件都用了xxm作为了前缀,就好比element-plus用的所有组件前缀都是el-类似,前缀后面的单词最好能准确表达创建的意思,方便别人检索你的插件。

然后,选择你开发的插件分类,我开发的这个插件是通用组件,所以选择第一个。

在这里插入图片描述


3.插件目录结构如下:

  • components内的xxm-price.vue是你要写的组件
  • changelog.md 是更新日志,这个不需要编写,提交时候会自动更新
  • package.json 是插件的配置项,如插件说明及相关依赖等

readme.md 是插件的使用说明,会在插件市场详情页展示的文档

在这里插入图片描述

二、开发插件

如上目录所示,我们要想实现一个功能,核心代码是需要编写在xxm-price.vue文件中的。
这个就是一个普通的vue文件,如果你会写vue这个页面没什么要给介绍的,重点是需要接收一下父组件传递过来的属性,在当前组件中进行处理。

下面这个代码是完整的实现逻辑,可以作为参考,当然你开发自己的组件的话就编写自己的代码就可以了。

这个实现代码中,很多地方让AI给实现的,所以用AI辅助开发还是很方便的,甚至一行代码都不需要写,直接用自然语言描述,就可以生成一个你所需要的功能组件了。

<script setup>import{ ref, computed }from'vue';const props =defineProps({ price:{ type: Number,default:999}, symbol:{ type: String,default:'¥'}, size:{ type: Number,default:20}, smallSize:{ type: Number,default:undefined}, color:{ type: String,default:'#FF0F23'}, origPrice:{ type: Number,default:0}, origColor:{ type: String,default:'#999'}, origAlign:{ type: String,default:'right',validator:(val)=>['left','right','top','bottom'].includes(val)// 限制可选值}});const comFontSize =computed(()=>{// 如果传递了smallSize则使用,否则用size*0.618return props.smallSize ?? props.size *0.618;});// 计算flex-direction方向const flexDirection =computed(()=>{// left/right → row;top/bottom → columnreturn['left','right'].includes(props.origAlign)?'row':'column';});// 计算align-items值const alignItems =computed(()=>{// top/bottom → flex-start;left/right → flex-endreturn['top','bottom'].includes(props.origAlign)?'flex-start':'flex-end';});// 计算原价是否需要调整orderconst isOrigPriceFirst =computed(()=>{// top/left → order:-1return['top','left'].includes(props.origAlign);});functionformatPrice(num, option =0){// 第一步:校验num是否为有效数字if(typeof num !=='number'||isNaN(num)){return'无效的数字,第一个参数必须是有效数字';}// 提取公共计算逻辑:num/100(处理精度误差)const baseValue =(num + Number.EPSILON)/100;// 根据option分支处理if(option ===0){// 取百位及以上整数(向下取整)return Math.floor(baseValue);}elseif(option ===1){// 取小数点后两位(格式化为.xx形式的字符串)// 先保留两位小数,再截取小数部分const fixedValue = Math.round(baseValue *100)/100;// 精准保留两位小数const[, decimalPart ='00']= fixedValue.toString().split('.');return`.${decimalPart.padEnd(2,'0').slice(0,2)}`;}else{// 非0/1选项:返回num/100并保留两位小数(数字类型)return Math.round(baseValue *100)/100;}}</script><template><view class="price-wrap":style="{'--flex-direction': flexDirection,'--align-items': alignItems }"><view class="price":style="{ '--symbol': `'${symbol}'`, '--size': `${size}px`, '--color': `${color}`, '--com-size': `${comFontSize}px` }":data-suffix="formatPrice(price, 1)">{{formatPrice(price,0)}}</view><view class="origPrice" v-if="origPrice > 0":style="{ '--orig-color': origColor, '--com-size': `${comFontSize}px`, '--order': isOrigPriceFirst ? '-1' : 'initial' }">{{formatPrice(origPrice,-1)}}</view></view></template><style lang="scss" scoped>.price-wrap { display: flex; align-items: flex-start; align-items:var(--align-items); flex-direction:var(--flex-direction);// 动态控制布局方向 line-height:1em; gap:5px;.price { color:var(--color); font-size:var(--size); font-weight: bold;&::before { font-size:var(--com-size); content:var(--symbol);}&::after { font-size:var(--com-size); content:attr(data-suffix);}}.origPrice { text-decoration: line-through; color:var(--orig-color); font-size:var(--com-size); order:var(--order);// 动态控制排序}}</style>

三、提交插件

如果你的功能组件已经开发完毕了,那么就需要将该组件提交到插件市场了,那么给大家介绍一下如何操作。

在这里插入图片描述

发布到插件市场

在插件文件夹上单击右键,选择“发布到插件市场”,会出现插件描述的弹窗,可以在弹窗内填写插件的相关信息,也可以在“package.json”文件中填写,在package.json填写过的话,选择发布的时候再弹窗中也会展示你填写的内容,弹窗编写的内容只有提交后才会写入到package.json文件中。

在这里插入图片描述


不知道上面这些怎么填写?我以官方的uni-icons组件为例,告诉大家对应关系。

在这里插入图片描述
  • 一定要注意将开发的组件选择适合的分类
  • 插件显示名称、描述、标签一定要清晰明了,让别人看标题就知道是干什么的插件
  • 插件ID是唯一的,所以最后前面加上你的个性标识,如el-、uni-、uv-等

其他配置大家就按照要求填写就可以了,如果没有问题就可以点击提交,就会发布到DCloud的插件市场了。

在这里插入图片描述


先发布的插件,会展示在插件市场的首页,插件市场是按照插件更新时间排序的,如果想要给插件增加多一些曝光度,经常更新插件是一个好的办法。

这样插件就发布成功了,插件地址:https://ext.dcloud.net.cn/plugin?name=xxm-price

在本插件的详情页可以看到对插件使用说明的介绍,这是因为我们在插件文件夹下的“readme.md”进行了编写,你可以将详细的使用文档进行编写,有利于让别人更好的入手你的插件。

在这里插入图片描述

四、应用插件

提交发布插件后,在DCloud插件市场就可以找到我们发布的插件了,和使用官方扩展组件一样,选择右上角的“下载插件并导入HBuilderX”,这样就会将该插件下载到你项目的“uni_modules”目录中,和使用自定义的组件一样使用即可。

在这里插入图片描述

在项目中使用

在任意的vue文件中,可以使用该插件,无需import导入价格插件,直接在页面中使用插件名称,便可展示价格样式了,在插件说明文档中有组件属性的说明,也可以参考下面代码来使用。

<template><view class="layout"><view class="row"><view class="title">基础样式:</view><xxm-price></xxm-price></view><view class="row"><view class="title">设置组件大小:</view><xxm-price :size="26"></xxm-price></view><view class="row"><view class="title">前缀货币符号:</view><xxm-price :size="26" symbol="$"></xxm-price></view><view class="row"><view class="title">显示原价和现价:</view><xxm-price :size="26":price="36987":origPrice="400355"></xxm-price></view><view class="row"><view class="title">设置小字尺寸:</view><xxm-price :size="26":price="36987":origPrice="400355":smallSize="12"></xxm-price></view><view class="row"><view class="title">设置原价和现价颜色:</view><xxm-price :size="26":price="36987":origPrice="400355" color="#E6A23C" origColor="green"></xxm-price></view><view class="row"><view class="title">设置原价显示位置:</view><xxm-price :size="26":price="36987":origPrice="400355" origAlign="bottom"></xxm-price></view></view></template>

Read more

Flutter 三方库 git_hooks 鸿蒙强干预研发质量审核截断防线设防适配解析:依托钩子拦截引擎封锁全域代码递交链路建立极强合规化审计审查防火墙斩断-适配鸿蒙 HarmonyOS ohos

Flutter 三方库 git_hooks 鸿蒙强干预研发质量审核截断防线设防适配解析:依托钩子拦截引擎封锁全域代码递交链路建立极强合规化审计审查防火墙斩断-适配鸿蒙 HarmonyOS ohos

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 git_hooks 鸿蒙强干预研发质量审核截断防线设防适配解析:依托钩子拦截引擎封锁全域代码递交链路建立极强合规化审计审查防火墙斩断技术债堆砌 前言 在 OpenHarmony 的大规模团队协作中,代码质量是团队的生命线。如果没有有效的约束,不符合规范的代码(甚至是无法通过静态分析的代码)会轻易地通过 git commit 进入代码库,导致 CI 构建频繁失败。git_hooks 库为 Flutter 开发者提供了一种轻量级的脚本化方案,可以在 Git 的关键生命周期(如提交前、推送前)自动运行检查。本文将带大家在鸿蒙端实战适配该库,夯实自动化工程的地基。 一、原直线性 / 概念介绍 1.1 基础原理/概念介绍 git_hooks 的核心逻辑是基于 Git

By Ne0inhk
Git 分支管理完全指南:从基础到团队协作

Git 分支管理完全指南:从基础到团队协作

🔥个人主页:Cx330🌸 ❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》 《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔 《Git深度解析》:版本管理实战全解 🌟心向往之行必能至 🎥Cx330🌸的简介: 目录 前言: 一、为什么要分支?——分支的意义 二. Git 分支基础:核心概念与常用命令 2.1 分支与 HEAD 指针解析 2.2 基础指令:查看、创建、切换分支 三. Git 分支进阶:合并、删除和冲突 3.1 合并分支(git merge 分支名) 3.2 删除分支(

By Ne0inhk

EpicDesigner 终极配置指南:快速上手专业级低代码设计器

EpicDesigner 终极配置指南:快速上手专业级低代码设计器 【免费下载链接】epic-designer 项目地址: https://gitcode.com/gh_mirrors/ep/epic-designer EpicDesigner 是一个革命性的 Vue3 低代码设计器,专为追求开发效率的现代开发者打造。无论你是前端新手还是资深工程师,都能通过这个强大的工具快速构建复杂的表单和页面布局,将开发时间从数小时缩短到几分钟。 🚀 为什么选择 EpicDesigner? 在当今快节奏的开发环境中,时间就是最宝贵的资源。EpicDesigner 通过直观的拖拽界面和智能配置系统,让你告别重复编码的烦恼。它不仅仅是一个设计工具,更是提升团队协作效率和项目交付速度的秘密武器。 核心优势一览 * 零学习曲线: 即使没有前端经验,也能快速上手 * 多UI库兼容: 无缝支持主流UI框架 * 实时预览: 所见即所得的设计体验 * 高度可扩展: 支持自定义组件和插件开发 📦 极速启动方案 环境准备 确保你的开发环境满足以下要求: * Node.js 14.x

By Ne0inhk

无人机地面站QGC的安装(ubuntu20.04)

无人机地面站QGC的安装(ubuntu20.04) 1.安装依赖 使用以下命令: sudo usermod -a -G dialout $USER sudo apt-get remove modemmanager -y sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y sudo apt install libfuse2 -y sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor0 -y 2.下载安装包 可以直接去官网下载,链接地址:https://docs.qgroundcontrol.com/master/en/qgc-user-guide/

By Ne0inhk