From c1a17bdec32d3e90a119104c775886656bb08503 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Sat, 23 Jul 2022 18:47:18 +0800 Subject: [PATCH] Merge branch 'temp' --- forms/numberValve/CNumberValve.vue | 65 ++++++++++++++++++++++---------- 1 files changed, 45 insertions(+), 20 deletions(-) diff --git a/forms/numberValve/CNumberValve.vue b/forms/numberValve/CNumberValve.vue index e19731e..342beb5 100644 --- a/forms/numberValve/CNumberValve.vue +++ b/forms/numberValve/CNumberValve.vue @@ -16,18 +16,15 @@ :required="itemRes.required" :disabled="itemRes.disabled" :error="itemRes.error" - :value="itemRes.formData[itemRes.name]" + :value="itemRes.formData[itemRes.name] + unit" + :placeholder="placeholder" > <view class="at-icon at-icon-chevron-right"></view> </AtInput> </view> - <AtRange - :min="range[0]" - :max="range[1]" - :value="[0, itemRes.formData[itemRes.name]]" - :onChange="evt => evt && itemRes.onChange(evt[1])" - /> <AtFloatLayout + :class="placeholder?'on-title':''" + :title="placeholder" :isOpened="opened" :onClose="evt => handleClose()" > @@ -74,7 +71,7 @@ <script> import Taro from '@tarojs/taro'; import { $ } from '@tarojs/extend'; -import { AtInput, AtFloatLayout, AtButton, AtRange } from 'taro-ui-vue'; +import { AtInput, AtFloatLayout, AtButton } from 'taro-ui-vue'; import './cNumberValve.scss'; export default { @@ -83,7 +80,6 @@ AtInput, AtFloatLayout, AtButton, - AtRange, }, props: { // 表单数据资源(表单组件内部机制专用) @@ -99,6 +95,11 @@ step: { type: Number, default: 1, + }, + // 数值单位(仅显示) + unit: { + type: String, + default: '', }, }, data() { @@ -132,9 +133,17 @@ const targetValue = clientX - this.rect.left; const distance = Math.min(Math.max(targetValue, 0), this.rect.width); const sliderLeft = Math.floor((distance / this.rect.width) * 100); - const sliderValue = + // 实际值 + let sliderValue = Math.round((sliderLeft / 100) * (this.range[1] - this.range[0])) + this.range[0]; + if (this.range[0] < sliderValue && sliderValue < this.range[1]) { + sliderValue -= sliderValue % this.step; + } + // 范围限制 + sliderValue = Math.max(sliderValue, this.range[0]); + sliderValue = Math.min(sliderValue, this.range[1]); + // 设置 this.sliderLeft = sliderLeft; this.current = sliderValue; this.itemRes.onChange(sliderValue); @@ -143,27 +152,43 @@ let $slider = null; if (process.env.TARO_ENV === 'h5') { $slider = $(this.$refs.slider.$el); + const rect = $slider[0].getBoundingClientRect(); + this.rect.width = rect.width; + this.rect.left = rect.left; } else if (process.env.TARO_ENV === 'weapp') { - $slider = $(this.$refs.slider); + Taro.createSelectorQuery() + .select('#' + this.$refs.slider.uid) + .boundingClientRect(rect => { + this.rect.width = rect.width; + this.rect.left = rect.left; + }) + .exec(); } - Taro.createSelectorQuery() - .select('#' + this.$refs.slider.uid) - .boundingClientRect(rect => { - this.rect.width = rect.width; - this.rect.left = rect.left; - }) - .exec(); }, handleChangeVal(type, value) { this.updateRect(); let currentNext = 0; if (type === 'left') { - currentNext = this.current - this.step; + const gap = this.current % this.step; + if (gap === 0) { + currentNext = this.current - this.step; + } else { + currentNext = this.current - gap; + } } else if (type === 'right') { - currentNext = this.current + this.step; + const gap = this.current % this.step; + if (gap === 0) { + currentNext = this.current + this.step; + } else { + currentNext = this.current + (this.step - gap); + } } else if (type === 'change') { currentNext = value; } + // 范围限制 + currentNext = Math.max(currentNext, this.range[0]); + currentNext = Math.min(currentNext, this.range[1]); + // 设置 const sliderLeft = Math.round( ((currentNext - this.range[0]) / (this.range[1] - this.range[0])) * 100 ); -- Gitblit v1.9.1