uniapp 实现的步进指示器组件

采用 uniapp 实现的一款步进指示器组件,展示业务步骤进度等内容,对外提供"前进"、"后退"方法,让用户可高度自定义所需交互,适配 web、H5、微信小程序(其他平台小程序未测试过,可自行尝试)

可到插件市场下载尝试: https://ext.dcloud.net.cn/plugin?id=22603

  • 使用示例

使用示例

分别演示vue2、vue3 setup示例

vue2 写法

javascript 复制代码
<template>
  <view>
		<view class="font-class">示例一:</view>
		<view>
			<view style="background-color: #272822; padding: 10px; margin: 10px; border-radius: 6px; color: #fff;">
				<wo-step-indicator :default-step="1" :options="steps" ref="stepIndicator1" @change="onChangeStep"></wo-step-indicator>
			</view>
			<view style="padding: 10px 0; margin: 0 10px;">
			  <view v-show="step === 1">
			    <view
			      style="height: 100px; width: 100%; border-radius: 6px; background-color: #299B48; color: #fff; display: flex; justify-content: center; align-items: center;">
			      步骤一
			    </view>
			  </view>
			  <view v-show="step === 2">
			    <view
			      style="height: 100px; width: 100%; border-radius: 6px; background-color:#FF5739; color: #fff; display: flex; justify-content: center; align-items: center;">
			      步骤二
			    </view>
			  </view>
			  <view v-show="step === 3">
			    <view
			      style="height: 100px; width: 100%; border-radius: 6px; background-color: #41A5E1; color: #fff; display: flex; justify-content: center; align-items: center;">
			      步骤三
			    </view>
			  </view>
			  <view v-show="step === 4">
			    <view
			      style="height: 100px; width: 100%; border-radius: 6px; background-color: #272822; color: #fff; display: flex; justify-content: center; align-items: center;">
			      步骤四
			    </view>
			  </view>
			</view>
		</view>
		<view class="font-class">示例二:</view>
		<view style="display: flex; gap: 10px;">
			<view class="step-class" style="margin-right: 0px;">
				<wo-step-indicator   ref="stepIndicator2" @change="onChangeStep"></wo-step-indicator>
			</view>
			<view style="margin: 10px 10px 10px 0; flex: 1;">
			  <view v-show="step === 1">
			    <view
			      style="height: 200px; width: 100%; border-radius: 6px; background-color: #299B48; color: #fff; display: flex; justify-content: center; align-items: center;">
			      步骤一
			    </view>
			  </view>
			  <view v-show="step === 2">
			    <view
			      style="height: 200px; width: 100%; border-radius: 6px; background-color:#FF5739; color: #fff; display: flex; justify-content: center; align-items: center;">
			      步骤二
			    </view>
			  </view>
			  <view v-show="step === 3">
			    <view
			      style="height: 200px; width: 100%; border-radius: 6px; background-color: #41A5E1; color: #fff; display: flex; justify-content: center; align-items: center;">
			      步骤三
			    </view>
			  </view>
			  <view v-show="step === 4">
			    <view
			      style="height: 200px; width: 100%; border-radius: 6px; background-color: #272822; color: #fff; display: flex; justify-content: center; align-items: center;">
			      步骤四
			    </view>
			  </view>
			</view>
		</view>
		<view class="font-class">自定义操作:</view>
		<view style="display: flex; gap: 10px; padding-top: 10px;">
		  <button @click="prevStep" :disabled="step <= 1">上一步</button>
		  <button @click="nextStep" :disabled="step >= steps.length">下一步</button>
		  <button v-show="step >= steps.length">完成</button>
		</view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      steps: [
        {
          index: '1',
          name: 'Step 1',
        },
        {
          index: '2',
          name: 'Step 2',
        },
        {
          index: '3',
          name: 'Step 3',
        },
        {
          index: '4',
          name: 'Step 4',
        },
      ],
      step: 1,
      stepIndicator1: null,
			stepIndicator2: null
    };
  },
  methods: {
    prevStep() {
      this.$refs.stepIndicator1.prev();
			this.$refs.stepIndicator2.prev();
    },
    nextStep() {
      this.$refs.stepIndicator1.next();
			this.$refs.stepIndicator2.next();
    },
    onChangeStep(data) {
      this.step = data.step;
      console.log('Current step:', data);
    }
  }
};
</script>

<style>
.font-class {
	font-size: 12px;
	padding: 10px 10px 0 10px;
}
.step-class {
	background-color: #272822;
	color: #fff;
	padding: 15px;
	margin: 10px;
	border-radius: 6px;
}
</style>

vue3 setup写法

javascript 复制代码
<template>
	<view>
		<view class="font-class">示例一:</view>
		<view>
			<view style="background-color: #272822; padding: 10px; margin: 10px; border-radius: 6px; color: #fff;">
				<wo-step-indicator :default-step="1" :options="steps" ref="stepIndicator1"
					@change="onChangeStep"></wo-step-indicator>
			</view>
			<view style="padding: 10px 0; margin: 0 10px;">
				<view v-show="step === 1">
					<view
						style="height: 100px; width: 100%; border-radius: 6px; background-color: #299B48; color: #fff; display: flex; justify-content: center; align-items: center;">
						步骤一
					</view>
				</view>
				<view v-show="step === 2">
					<view
						style="height: 100px; width: 100%; border-radius: 6px; background-color:#FF5739; color: #fff; display: flex; justify-content: center; align-items: center;">
						步骤二
					</view>
				</view>
				<view v-show="step === 3">
					<view
						style="height: 100px; width: 100%; border-radius: 6px; background-color: #41A5E1; color: #fff; display: flex; justify-content: center; align-items: center;">
						步骤三
					</view>
				</view>
				<view v-show="step === 4">
					<view
						style="height: 100px; width: 100%; border-radius: 6px; background-color: #272822; color: #fff; display: flex; justify-content: center; align-items: center;">
						步骤四
					</view>
				</view>
			</view>
		</view>
		<view class="font-class">示例二:</view>
		<view style="display: flex; gap: 10px;">
			<view class="step-class" style="margin-right: 0px;">
				<wo-step-indicator ref="stepIndicator2" @change="onChangeStep"></wo-step-indicator>
			</view>
			<view style="margin: 10px 10px 10px 0; flex: 1;">
				<view v-show="step === 1">
					<view
						style="height: 200px; width: 100%; border-radius: 6px; background-color: #299B48; color: #fff; display: flex; justify-content: center; align-items: center;">
						步骤一
					</view>
				</view>
				<view v-show="step === 2">
					<view
						style="height: 200px; width: 100%; border-radius: 6px; background-color:#FF5739; color: #fff; display: flex; justify-content: center; align-items: center;">
						步骤二
					</view>
				</view>
				<view v-show="step === 3">
					<view
						style="height: 200px; width: 100%; border-radius: 6px; background-color: #41A5E1; color: #fff; display: flex; justify-content: center; align-items: center;">
						步骤三
					</view>
				</view>
				<view v-show="step === 4">
					<view
						style="height: 200px; width: 100%; border-radius: 6px; background-color: #272822; color: #fff; display: flex; justify-content: center; align-items: center;">
						步骤四
					</view>
				</view>
			</view>
		</view>
		<view class="font-class">自定义操作:</view>
		<view style="display: flex; gap: 10px; padding-top: 10px;">
			<button @click="prevStep" :disabled="step <= 1">上一步</button>
			<button @click="nextStep" :disabled="step >= steps.length">下一步</button>
			<button v-show="step >= steps.length">完成</button>
		</view>
	</view>
</template>

<script setup>
import { ref } from 'vue';

const steps = ref([
	{ index: '1', name: 'Step 1' },
	{ index: '2', name: 'Step 2' },
	{ index: '3', name: 'Step 3' },
	{ index: '4', name: 'Step 4' },
]);

const step = ref(1);
const stepIndicator1 = ref(null);
const stepIndicator2 = ref(null);

const prevStep = () => {
	stepIndicator1.value.prev();
	stepIndicator2.value.prev();
};

const nextStep = () => {
	stepIndicator1.value.next();
	stepIndicator2.value.next();
};

const onChangeStep = (data) => {
	step.value = data.step;
	console.log('Current step:', data);
};
</script>

<style>
.font-class {
	font-size: 12px;
	padding: 10px 10px 0 10px;
}

.step-class {
	background-color: #272822;
	color: #fff;
	padding: 15px;
	margin: 10px;
	border-radius: 6px;
}
</style>
相关推荐
敲代码的玉米C5 分钟前
让两个模型一写一审
前端·人工智能·架构
代码不加糖9 分钟前
common.js和es6中模块引l入的区别?
前端·javascript·es6
qq834431027 分钟前
一款纯前端的excel控件,XuY_Sheet 电子表格组件教程
前端·excel·教程·luckysheet·xuy_sheet控件·前端表格控件
不爱说话郭德纲1 小时前
零基础,学做KMP项目,TRAE Work手把手带你月薪.....
前端·后端·app
敲代码的玉米C1 小时前
Agent 做 IDE
前端·人工智能·开源
鹏北海1 小时前
AI 全栈时代的多语言 SDK 版本管理:认识 mise
前端·后端
下山1 小时前
别再手切终端管 Agent 了!1 个 Skill 监督多个主流 CLI,默认每 15 秒读屏(建议收藏)🚀
前端·ai编程
飘逸啊1 小时前
分而治之:关注点分离在Android与React中的架构实践与对比
前端
算法解题那些事1 小时前
前端暑期实习面经(网上收集)
前端
敲代码的玉米C1 小时前
补 322 个测试,挖出 19 个 bug
前端·人工智能·架构