聊天室軟體原始碼中封裝一個金額輸入框元件的實現
前言
聊天室軟體原始碼金額輸入框元件
事件
<template> <MoneyInput v-model="moneyValue" @change="handleChange" ></MoneyInput></template><script>import MoneyInput from '@/components/pc/moneyInput'export default { name: 'CheckboxDemo', components: { MoneyInput }, data () { return { moneyValue: 128000 } }, methods: { handleChange (val) { console.log('輸入的金額為:', val) } }}</script>
實現MoneyInput.vue
<template> <div class="money-input-wrap" :class="{'show-icon': icon}"> <template v-if="readonly"> <span>{{ currentValue | money(currentDecimal) }}</span> </template> <template v-else> <div class="money-input"> <input ref="rawInput" class="money-raw-input" v-model="currentValue" @change="handleChange($event)" maxlength="15" :disabled="disabled" :data-canRound="canRound" :data-canNegative="canNegative"> <div class="money-show" :class="disabled ? 'disabled-input' : ''">{{currentValue | money(currentDecimal)}}</div> </div> <div v-if="suffixText || icon" class="money-suffix-wrap"> <span v-if="suffixText" class="money-suffix-text">{{suffixText}}</span> <Icon v-else class="money-icon" :name="iconName"></Icon> </div> </template> </div></template><script>export default {name: 'MoneyInput',props: { // 當前值 value: Number, // 小數部分位數 decimal: { type: Number, default: 2 }, // 是否四捨五入 canRound: { type: Boolean, default: false }, // 是否允許負數 canNegative: { type: Boolean, default: true }, // 字尾文字 suffixText: { type: String }, // 是否顯示圖示 icon: { type: [Boolean, String], default: 'rmb' }, // 是否可用 disabled: { type: Boolean, default: false }, // 是否只讀 readonly: { type: Boolean, default: false }},data () { return { currentValue: this.value, currentDecimal: this.decimal }},computed: { iconName () { if (typeof this.icon === 'string') { return this.icon } return 'rmb' }},watch: { value (val) { this.currentValue = val }},methods: { handleChange (event) { let val = event.target.value let numVal = Number(val) if (val === '' || isNaN(numVal)) { this.currentValue = null this.$emit('input', null) this.$emit('change', null) } else { if (!this.canNegative && numVal < 0) { // 不允許為負數 numVal = Math.abs(numVal) } if (!this.canRound) { // 不允許四捨五入 let numArray = numVal.toString().split('.') let intStr = numArray[0] // 整數部分字串 let decimalStr = numArray.length >= 2 ? numArray[1] : 1 // 小數部分字串 if (decimalStr.length > this.decimal) { let newValueStr = intStr + '.' + decimalStr.substr(0, this.decimal) numVal = Number(newValueStr) } } else { numVal = this.fixDecimal(numVal, this.decimal) // 修正小數點位數 } this.currentValue = numVal this.$emit('input', numVal) this.$emit('change', numVal) } }, // 修正小數點位數 fixDecimal (num, decimal) { let number = parseFloat(num) if (num !== undefined && num !== null && num !== '' && !isNaN(number)) { return parseFloat(number.toFixed(decimal)) } return num } }}</script><style lang="scss" scoped px2rem="false"> $icon-width: 24px; .money-input-wrap { display: table; width: 100%; height: $form-item-height; .money-input { display: table-cell; position: relative; width: 100%; .money-raw-input { position: absolute; top: 0; width: 100%; border: 1px solid $border-color-base; vertical-align: middle; border-radius: 4px; font-size: 14px; color: $input-font-color; opacity: 0; z-index: 1; &:disabled { background-color: $input-disabled-bg-color; cursor: not-allowed; } &:focus { @include primary-border-color(); opacity: 1; &+input.money-show { opacity: 0; } } } .money-show { position: absolute; top: 0; width: 100%; height: $form-item-height; line-height: $form-item-height - 2px; vertical-align: middle; padding: 0 5px; overflow: hidden; color: $color-text-regular; background-color: #FFF; border: 1px solid $border-color-base; border-radius: 4px; &.disabled-input { background-color: $input-disabled-bg-color; cursor: not-allowed; } } } .money-suffix-wrap { display: table-cell; min-width: 24px; padding: 0 5px; height: $form-item-height; vertical-align: middle; text-align: center; color: $color-text-placeholder; background-color: $bg-color-base; border: solid 1px $border-color-base; border-left: 0; border-radius: 0 4px 4px 0; .money-suffix-text { word-break: keep-all; white-space:nowrap; } } &.show-icon { .money-raw-input, .money-show { padding-right: 0; border-radius: 4px 0 0 4px; } }}</style>
index.js
/** * 金額輸入框 * @author qinglianshizhe * @date 2021/10/11 */ import MoneyInput from './MoneyInput.vue' export default MoneyInput
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2838841/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 記錄---實現一個支援@的輸入框
- 在Vue中封裝一個select元件Vue封裝元件
- 小說APP原始碼,實現帶下劃線的密碼輸入框APP原始碼密碼
- app直播原始碼,android實現帶下劃線的密碼輸入框APP原始碼Android密碼
- js--手動實現一個常見的簡訊驗證碼輸入框JS
- 直播軟體app開發,flutter 驗證碼輸入框的簡單封裝APPFlutter封裝
- 直播系統原始碼,Vue 禁止輸入框輸入空格原始碼Vue
- Flutter 密碼輸入框 驗證碼輸入框Flutter密碼
- flutter TextField 輸入框元件Flutter元件
- MapStruct在專案中封裝實踐-帶原始碼Struct封裝原始碼
- 從快取角度入手實現聊天室軟體原始碼的前端效能優化快取原始碼前端優化
- 如何在相親交友原始碼中實現正方形驗證碼輸入框?原始碼
- iOS金額輸入限制iOS
- 直播app系統原始碼,flutter 驗證碼輸入框的簡單封裝APP原始碼Flutter封裝
- WPF中封裝一個自己的MessageBox封裝
- 影片直播系統原始碼,EditText輸入框的使用原始碼
- 短視訊直播原始碼,EditText輸入框的使用原始碼
- Bootstrap 支援的一個特性—輸入框組boot
- 純css實現輸入框placeholder動效及輸入校驗的示例程式碼CSS
- 在vue中封裝一個從右至左滾動公告的元件Vue封裝元件
- HTML在透明輸入框裡新增圖示的實現程式碼HTML
- 聊天室原始碼開發,如何簡單的實現掃碼登入功能?原始碼
- Element原始碼分析系列5-Input(輸入框)原始碼
- app直播原始碼,監聽EditText輸入框內輸入內容的變化APP原始碼
- React Hooks 實現的中文輸入元件ReactHook元件
- VUE 實現 Studio 管理後臺(十三):按鈕點選輸入控制元件,input 輸入框系列Vue控制元件
- 小影片軟體開發,實現一個CSS邊框動畫CSS動畫
- 從一次輸入框無法輸入的bug,談如何限制輸入框輸入型別型別
- 沒有框架怎麼辦?原生 CSS + JS 實現一個標籤輸入框框架CSSJS
- js實現element中可清空的輸入框(2)JS
- 實現高度“聽話”的多行文字輸入框
- HTML中實現多選一且輸入框的啟用與禁用HTML
- flutter 自定義驗證碼輸入框實現 verification_code_customFlutter
- 用Java程式碼實現一個簡單的聊天室功能Java
- 短視訊軟體開發,flutter 輸入框限制輸入 數字、小數Flutter
- 一對一聊天軟體原始碼,實現各個子介面跳轉和傳參原始碼
- Flutter 驗證碼輸入框Flutter
- Qt 實現文字輸入框,帶字數限制QT