Categorías
vue

elementUI slider barra de progreso bidireccional

El marco de trabajo front-end usa vue + element ui, por lo que se selecciona la barra de progreso del componente de interfaz de usuario de elemento

Dirección del componente de elemento

1. Página principal

<template>
    <div class="">
        <div class="content-hd">
            <h2>Two-way progress bar</h2>
        </div>
        <div class="content-bd">
            <BidirectionSliderBar 
                :base_info="base_info" 
                v-on:input_value="user_input_value" 
                v-on:is_true="is_true_value"
            ></BidirectionSliderBar>
        </div>
    </div>
</template>
<script>

import BidirectionSliderBar from '../components/bidirectionSliderBar'  // Two-way progress bar

export default {
    data() {
        return {
            // configuration
            product_config:{
                min_single_amount_lower_limit: 0.1,  // Lower limit
                max_single_amount_upper_limit: 200000,
                default_min_single_amount:0.3,
                default_max_single_amount:100000,
            },

            base_info: {},

            min_single_amount              : '', 
            max_single_amount              : '', 

            flag_is_true_value: '',
        }
    },
    created() {
        this.authority()
    },
    components: {
        BidirectionSliderBar
    },
    methods: {
        authority() {
            this.base_info.min_limit = this.product_config.min_single_amount_lower_limit  // Lower limit
            this.base_info.max_limit = this.product_config.max_single_amount_upper_limit // Limit limit
            this.base_info.user_recv_amount_input = [
                this.product_config.default_min_single_amount,
                this.product_config.default_max_single_amount
            ]
        },

        // Receive the data passed by the progress bar sub-component
        user_input_value(value){
            this.input_value_for_user = value
        },

        // Receive the data passed by the progress bar sub-component
        is_true_value(value){
            this.flag_is_true_value = value
        }
    }
}
</script>
<style scoped>
 /deep/ .el-slider__marks-text {
   white-space: nowrap ;
}
 .slider-bar-input{
    width: 150px;
}
</style>

2. Componente de barra de progreso

componentes/bidirectionSliderBar.vue archivo

<template>
<!--  Two-way progress bar -->
    <div class="slider-bar-wrp">
        <div class="tc">
            <el-input 
                class="slider-bar-input" 
                v-model="input_value[0]" 
                @input="on_change_input_value_min"
                placeholder="Please enter content"
            ></el-input>
            <span class="gapl">yuan</span>
            <span > - </span>
            <el-input 
                class="slider-bar-input" 
                v-model="input_value[1]"
                @input="on_change_input_value_max"
                placeholder="Please enter content"
            ></el-input>
            <span class="gapl">yuan</span>
            <div class="el-form-item__error">{{ err_msg }}</div>
        </div>
        <el-slider
            v-if="isShow" 
            range
            :step="move_step"
            :min="marks_min"
            :max="marks_max"
            :marks="marks"
            @change="on_input_user_recv_amount"
            :format-tooltip="formatTooltip"
        ></el-slider>
    </div>  
</template>

<script>

import publichFun from "../utils/fun"

export default {
    props:{
        base_info: {}
    },
    data() {
        return {
            isShow: true,
            user_recv_amount: [], // input box / slider data
            err_msg: '',
            input_value: [],

            marks_min: 0.3,
            marks_max: 5000,
            move_step: 1, // Slider step size
            marks: {},// Slider subscript

            flag_user_recv_amount_month_min: true,
            flag_user_recv_amount_month_max: true,

            isShow: true
        }
    },
    created(){
        this.marks_min = Number(this.base_info.min_limit)
        this.marks_max = Number(this.base_info.max_limit)

        let min = Number(this.base_info.min_limit)
        let max = Number(this.base_info.max_limit)

        this.move_step = parseInt((max - min) / 10)

        this.marks[min] = publichFun._addMilliFormat(parseFloat(this.base_info.min_limit).toFixed(2))
        this.marks[max] = publichFun._addMilliFormat(parseFloat(this.base_info.max_limit).toFixed(2))

        this.input_value = this.base_info.user_recv_amount_input

        this.user_recv_amount[0] = Number(this.input_value[0])
        this.user_recv_amount[1] = Number(this.input_value[1])
    },
    methods: {
        formatTooltip(val) {
            return publichFun._addMilliFormat(parseFloat(val).toFixed(2))
        },

        /**
                   * @function input value
         */
        on_change_input_value_min(val) {
            let split = val.split('.')
            if (
                publichFun._compareFloat(this.base_info.min_limit,val) > 0 || isNaN(val)
            ) {
                this.err_msg = 'Not less than:' + this.marks[this.marks_min]
                this.flag_user_recv_amount_month_min = false
            } else if (split[1] && split[1].length > 2) {
                this.err_msg = 'Only keep up to two decimal places'
                this.flag_user_recv_amount_month_min = false
            } else if (publichFun._compareFloat(val, this.base_info.max_limit)) 
            {
                this.err_msg = 'Cannot be greater than:' + this.marks[this.marks_max]
                this.flag_user_recv_amount_month_min = false
            } else {
                this.err_msg = ''
                this.flag_user_recv_amount_month_min = true

                const that = this;
                this.input_value[0] = val
                this.user_recv_amount[0] = Number(val)

                that.isShow =false

                setTimeout(function (){
                    that.isShow = true
                }, 1)
            }
            // Pass parameters to the parent component
            this.$emit('input_value', this.input_value)
            this.$emit('is_true', (this.flag_user_recv_amount_month_min && this.flag_user_recv_amount_month_max))
        },

        /**
                   * @function input value
         */
        on_change_input_value_max(val) {
            let split = val.split('.')
            if (
                publichFun._compareFloat(this.base_info.min_limit, val) > 0 || isNaN(val)
            ) {
                this.err_msg = 'Not less than:' + this.marks[this.marks_min]
                this.flag_user_recv_amount_month_max = false
            } else if (split[1] && split[1].length > 2) {
                this.err_msg = 'Only keep up to two decimal places'
                this.flag_user_recv_amount_month_max = false
            } else if (publichFun._compareFloat(val, this.base_info.max_limit)) 
            {
                this.err_msg = 'Cannot be greater than:' + this.marks[this.marks_max]
                this.flag_user_recv_amount_month_max = false
            } else {
                this.err_msg = ''
                this.flag_user_recv_amount_month_max = true
                
                const that = this

                this.input_value[1] = val
                this.user_recv_amount[1] = Number(val)

                that.isShow =false

                setTimeout(function (){
                    that.isShow = true
                }, 1)
            }
            
            // Pass parameters to the parent component
            this.$emit('input_value', this.input_value)
            this.$emit('is_true', (this.flag_user_recv_amount_month_min && this.flag_user_recv_amount_month_max))
        },

        on_input_user_recv_amount(val) {
            this.err_msg = ''
            this.input_value = val

            this.flag_user_recv_amount_month_min = true
            this.flag_user_recv_amount_month_max = true

            this.user_recv_amount[0] = Number(val[0])
            this.user_recv_amount[1] = Number(val[1])

            // Pass parameters to the parent component
            this.$emit('input_value', this.input_value)
            this.$emit('is_true', (this.flag_user_recv_amount_month_min && this.flag_user_recv_amount_month_max))
        }
    }
}
</script>
<style >
.slider-bar-wrp {
  padding: 30px 160px;
}
.slider-bar-wrp .slider-bar-input {
  margin-bottom: 24px;
  width: 150px;
}
.slider-bar-wrp .enhance-payment{
  margin-right: -40px;
  margin-top: 17px;
}
</style>

.

  ¡Aprende el desarrollo de juegos móviles Android! Android componentized práctica de arquitectura, esta razón por la que sirvo

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *