OptionInp.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <!-- 带输入框选项 -->
  2. <template>
  3. <div :class="['inpbox',{'check':item.select}]">
  4. <span class="prefix" v-if="msg.prefix">{{msg.prefix}}</span>
  5. <div class="inp" @click="preClick">
  6. <input :type="msg.type=='number'?'tel':'text'"
  7. :placeholder="msg.placeholder"
  8. :disabled="select!=1"
  9. v-model="txt"
  10. @click="handleCli"
  11. @blur="handleBlur"
  12. @input="changeVal">
  13. </div>
  14. <span class="suffix" v-if="msg.suffix">{{msg.suffix}}</span>
  15. </div>
  16. </template>
  17. <script type="text/javascript">
  18. import { getExpStr,scrollToV} from '@utils/tools';
  19. export default {
  20. name:'OptionInp',
  21. data(){
  22. return{
  23. msg:{},
  24. txt:this.item.value || '',
  25. select:0
  26. }
  27. },
  28. props:['item'],
  29. mounted(){
  30. this.msg = getExpStr(this.item.name);
  31. this.select = this.item.select;
  32. },
  33. methods:{
  34. changeVal(e){
  35. if(this.msg.type=='number'){//数字键盘
  36. this.txt = e.target.value=e.target.value.replace(/[^\d]/g,'')
  37. }
  38. },
  39. handleBlur(){
  40. // 如果该项未选中,则不存值
  41. // const select = this.item.select;
  42. // if(!select){return}
  43. const newData = Object.assign({},this.part,{value:this.txt});
  44. this.$emit("updata",newData);
  45. this.$emit('handleInp',this.txt);
  46. },
  47. preClick(e){
  48. e.stopPropagation();
  49. },
  50. handleCli(e){
  51. scrollToV(e)
  52. }
  53. },
  54. watch:{
  55. item:{//清空时更新
  56. handler(newVal,oldVal){
  57. this.txt = newVal.value;
  58. this.select = newVal.select;
  59. },
  60. deep:true
  61. }
  62. },
  63. }
  64. </script>
  65. <style lang="less" scoped>
  66. .inpbox{
  67. color:#7C828E;
  68. display: inline-block;
  69. .inp{
  70. display: inline-block;
  71. vertical-align: top;
  72. input{
  73. color: #4F50FF;
  74. font-size: .3rem;
  75. border-bottom: 1px solid #DFE0E4 !important;
  76. border-radius: 0;
  77. padding-left: .05rem;
  78. }
  79. }
  80. .check{
  81. color: #4F50FF;
  82. }
  83. }
  84. </style>