当前位置: 首页 > news >正文

uniapp+vue3+firstUI时间轴 提现进度样式

展示

在这里插入图片描述
在这里插入图片描述
说明:“status”: 0, //状态:0=待审核,1=审核通过,2=审核驳回,3=提现成功,4=提现失败

第一种:5种类型归纳为三种显示样式

<fui-timeaxis background="#fff" :padding="['10rpx','16rpx','0']"><!-- 动态生成步骤节点 --><fui-timeaxis-node v-for="(item, index) in steps" :key="index":lineColor="item.lineColor" :lined="index !== steps.length - 1"><!-- 动态图标 --><fui-icon :name="item.icon" :size="42" :color="item.color" /><!-- 右侧内容 --><template v-slot:right><view class="fui-process__node" :class="{ red: item.isError }"><view class="fui-title">{{ item.title }}</view><view class="fui-time">{{ item.tip }}</view></view></template></fui-timeaxis-node>
</fui-timeaxis>
// 生成步骤配置
const generateSteps = (status) => {const baseSteps = [{title: '待审核',tip: '2024-02-23 12:00:00', // 替换为实际时间icon: 'checkbox-fill',color: '#999',lineColor: '#eee',isError: false},{title: '审核通过',tip: '2024-02-23 12:05:00',icon: 'checkbox-fill',color: '#3562FA',lineColor: '#3562FA',isError: false},{title: '提现成功',tip: '2024-02-23 12:10:00',icon: 'checkbox-fill',color: '#3562FA',lineColor: '#3562FA',isError: false}];switch (status) {case 0: // 待审核(仅第一步激活)return [{...baseSteps[0],color: '#3562FA',lineColor: '#3562FA',icon: 'checkbox-fill'}];case 1: // 审核通过(显示前两步)return [{...baseSteps[0],color: '#3562FA',lineColor: '#3562FA'},baseSteps[1]];case 2: // 审核驳回(红色错误)return [{...baseSteps[0],title: '审核驳回',color: '#FF4D4F',lineColor: '#FF4D4F',icon: 'clear-fill',isError: true}];case 3: // 提现成功(全流程蓝色)return baseSteps;case 4: // 提现失败(最后一步红色)return [{...baseSteps[0],color: '#3562FA',lineColor: '#3562FA'},baseSteps[1],{...baseSteps[2],title: '提现失败',color: '#FF4D4F',lineColor: '#FF4D4F',icon: 'clear-fill',isError: true}];}return [];
}
const steps = ref(generateSteps(info.value.status));// 监听状态变化
watch(() => info.value.status, (newVal) => {steps.value = generateSteps(newVal);
}, {immediate: true
});
.fui-process__node {color: #3562FA;padding-left: 20rpx;
}.fui-title {font-weight: bold;font-size: 30rpx;
}.fui-time {font-size: 26rpx;margin-bottom: 40rpx;margin-top: 10rpx;
}.red {color: #FF4D4F !important;
}

第二种: 5种状态 正常显示

结构、样式没变,只有js的写法有变化

const generateSteps = (status) => {// 每个状态独立配置步骤switch (status) {case 0: // 待审核(进行中)return [{title: '待审核',tip: '',icon: 'checkbox-fill', // 使用进行中图标color: '#3562FA', // 激活颜色lineColor: '#3562FA', // 激活线条isError: false}];case 1: // 审核通过(进行中)return [{title: '待审核',tip: '',icon: 'checkbox-fill', // 已完成图标color: '#3562FA',lineColor: '#3562FA',isError: false},{title: '审核通过',tip: '',icon: 'checkbox-fill', // 进行中图标color: '#3562FA',lineColor: '#3562FA',isError: false}];case 2: // 审核驳回(错误终止)return [{title: '待审核',tip: '',icon: 'checkbox-fill', // 审核已通过(但后续被驳回)color: '#3562FA',lineColor: '#FF4D4F', // 后续线条变红isError: false},{title: '审核驳回',tip: '',icon: 'clear-fill', // 错误图标color: '#FF4D4F', // 错误颜色lineColor: '#FF4D4F', // 错误线条isError: true}];case 3: // 提现成功(全流程完成)return [{title: '待审核',tip: '',icon: 'checkbox-fill',color: '#3562FA',lineColor: '#3562FA',isError: false},{title: '审核通过',tip: '',icon: 'checkbox-fill',color: '#3562FA',lineColor: '#3562FA',isError: false},{title: '提现成功',tip: '恭喜您,提现成功',icon: 'checkbox-fill',color: '#3562FA',lineColor: '#3562FA',isError: false}];case 4: // 提现失败(最后一步错误)return [{title: '待审核',tip: '',icon: 'checkbox-fill',color: '#3562FA',lineColor: '#3562FA',isError: false},{title: '审核通过',tip: '',icon: 'checkbox-fill',color: '#3562FA',lineColor: '#3562FA',isError: false},{title: '提现失败',tip: info.value.fail_reason,icon: 'clear-fill', // 错误图标color: '#FF4D4F', // 错误颜色lineColor: '#FF4D4F', // 错误线条isError: true}];default:return [];}};const steps = ref(generateSteps(info.value.status));// 监听状态变化watch(() => info.value.status, (newVal) => {steps.value = generateSteps(newVal);}, {immediate: true});

第三种:第一种的简化写法

<fui-timeaxis background="#fff" :padding="['10rpx','16rpx','0']"><fui-timeaxis-node v-for="(item, index) in steps" :key="index":lineColor="item.lineColor" :lined="index !== steps.length - 1"><fui-icon :name="item.icon" :size="42" :color="item.color" /><template v-slot:right><view class="fui-process__node" :class="{ red: item.isError }"><view class="fui-title">{{ item.title }}</view><view class="fui-time">{{ item.tip }}</view></view></template></fui-timeaxis-node>
</fui-timeaxis>
const baseSteps = [{ title: '待审核', icon: 'checkbox-fill', tip: '' },{ title: '审核通过', icon: 'checkbox-fill', tip: '' },{ title: '提现成功', icon: 'checkbox-fill', tip: '恭喜您,提现成功' }
]const statusHandler = {0: () => [createStep(0, '#3562FA')],1: () => [createStep(0), createStep(1, '#3562FA')],2: () => [createStep(0, '#FF4D4F'),createStep(1, '#FF4D4F', '审核驳回', 'clear-fill', true)],3: () => baseSteps.map(s => ({ ...s, color: '#3562FA', lineColor: '#3562FA' })),4: (info) => [...baseSteps.slice(0,2).map(s => ({ ...s, color: '#3562FA', lineColor: '#3562FA' })),createStep(2, '#FF4D4F', '提现失败', 'clear-fill', true, info?.fail_reason)]
}function createStep(index, color = '#3562FA', title, icon, isError = false, tip = '') {return {...baseSteps[index],title: title || baseSteps[index].title,icon: icon || baseSteps[index].icon,color,lineColor: color,isError,tip: tip || baseSteps[index].tip}
}const generateSteps = (status, info) => statusHandler[status]?.(info) || []const steps = ref(generateSteps(info.value.status, info.value))watch(() => info.value.status, (newVal) => {steps.value = generateSteps(newVal, info.value)
}, { immediate: true })

优化点说明:

基础配置集中管理:将公共属性抽离到基础配置对象baseSteps中,减少重复代码

统一节点创建函数:通过createStep函数处理不同状态的属性覆盖,简化节点生成逻辑

状态处理器对象:使用对象存储不同状态的处理逻辑,结构更清晰且易于扩展

动态属性处理:针对需要特殊处理的错误状态和动态提示信息,在创建节点时进行参数覆盖

颜色统一管理:通过参数传递颜色值,避免多处硬编码颜色值,更易维护

响应式数据更新:保留watch监听,确保状态变化时能实时更新进度显示

这种实现方式在保持原有功能的同时,将代码量减少了约40%,并提高了可维护性和扩展性。后续新增状态时,只需在statusHandler中添加对应处理逻辑即可。

时间轴模板

<fui-timeaxis background="#fff" :padding="['10rpx','16rpx','0']"><fui-timeaxis-node lineColor="#3562FA" v-for="(item,index) in 3" :key="index":lined="index!=2"><fui-icon name="checkbox-fill" :size="42" color="#3562FA"></fui-icon><fui-icon name="clear-fill" :size="42" color="#FF4D4F"></fui-icon><template v-slot:right><view class="fui-process__node"><view class="fui-title">标题</view><view class="fui-time">2024-02-23 12:00:00</view></view></template></fui-timeaxis-node>
</fui-timeaxis> 
http://www.xdnf.cn/news/370441.html

相关文章:

  • 比 Mac 便笺更好用更好看的便利贴
  • 源码示例:使用SpringBoot+Vue+ElementUI+UniAPP技术组合开发一套小微企业ERP系统
  • CentOS7.9部署FunASR实时语音识别接口 | 部署商用级别实时语音识别接口FunASR
  • milvus+flask山寨复刻《从零构建向量数据库》第7章
  • LeetCode 2918.数组的最小相等和:if-else
  • OpenCv实战笔记(4)基于opencv实现ORB特征匹配检测
  • Web3 初学者的第一个实战项目:留言上链 DApp
  • 协议路由与路由协议
  • 【图书管理系统】深度讲解:图书列表展示的后端实现、高内聚低耦合的应用、前端代码讲解
  • PXE_Kickstart_无人值守自动化安装系统
  • 物业企业绩效考核制度与考核体系
  • 前端弹性布局:用Flexbox构建现代网页的魔法指南
  • vue2 上传pdf,拖拽盖章,下载图片
  • 前端开发实战:用React Hooks优化你的组件性能
  • [C] 第10章 预处理命令
  • LeetCode热题100--240.搜索二维矩阵--中等
  • 达索MODSIM实施成本高吗?哪家服务商靠谱?
  • 思考:(linux) tmux 超级终端快速入门的宏观思维
  • Java—— 集合 List
  • 程序代码篇---Python视频流
  • JSON|cJSON 介绍以及具体项目编写
  • STM32CUBEIDE开发实战:ADC与UART应用
  • 网络原理(Java)
  • 使用python脚本连接SQL Server数据库导出表结构
  • 解决虚拟机挂起之后的网络问题
  • 鸿蒙系统使用ArkTS开发语言支持身份证阅读器、社保卡读卡器等调用二次开发SDK
  • 单片机-STM32部分:11、ADC
  • MCP项目实例 - client sever交互
  • Python+OpenCV打造AR/VR基础框架:从原理到实战的全链路解析
  • Kotlin高阶函数多态场景条件判断与子逻辑