ComTextArea.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <template>
  2. <div class="comArea" :style="getStyle(detail,slide)">
  3. <textarea @input="changeVal"
  4. :style="{width:width,height:height}"
  5. v-model="txt"
  6. placeholder="请输入"
  7. @focus="focus"
  8. @blur="blur"></textarea>
  9. </div>
  10. </template>
  11. <script type="text/javascript">
  12. import { isIos } from '@utils/tools';
  13. import $ from 'jquery'
  14. export default {
  15. name:'ComTextArea',
  16. props: {
  17. width: {
  18. default: '100%',
  19. type: String
  20. },
  21. height: {
  22. default: '2rem',
  23. type: String
  24. },
  25. item:{
  26. type:Object,
  27. require: true
  28. },
  29. slide:{
  30. default:false,
  31. type:Boolean
  32. },
  33. detail:{
  34. default:2,
  35. type:Number||String
  36. }
  37. },
  38. data() {
  39. return {
  40. txt:this.item.value || '' //回读用
  41. // txt:''
  42. }
  43. },
  44. methods:{
  45. getStyle(detail,slide){
  46. if(detail == 1){
  47. if(slide){
  48. return {'display':'block','background-color': '#F9F9F9'}
  49. }else{
  50. return {'display':'none'}
  51. }
  52. }else{
  53. return {'display':'block'}
  54. }
  55. },
  56. changeVal(){
  57. // $(".btscroll").css({'position':'fixed'})
  58. this.$emit('changeAreaVal',this.txt)
  59. const newData = Object.assign({},this.item,{value:this.txt,valueP:this.txt});
  60. this.$emit("updata",newData);
  61. },
  62. blur(){
  63. if(MobileDevice.getModels().join(' or ').indexOf('6') == -1){
  64. document.activeElement.scrollIntoView({behavior: "smooth",block:'end'})
  65. }
  66. $(".foot").css({'display':'block'})
  67. // document.activeElement.scrollIntoViewIfNeeded(true);
  68. // $(".foot").css({'display':'block'})
  69. // setTimeout(()=>{
  70. // document.activeElement.scrollIntoViewIfNeeded(true);
  71. // },300)
  72. },
  73. focus(){
  74. if(isIos()){
  75. // $(".btscroll").css({'position':'absolute'})
  76. $(".foot").css({'display':'none'})
  77. }
  78. }
  79. },
  80. watch:{
  81. item:{//清空时更新数据
  82. handler(newVal,oldVal){
  83. this.txt = newVal.value;
  84. },
  85. deep:true
  86. }
  87. }
  88. }
  89. </script>
  90. <style lang="less" scoped>
  91. @import '../less/base.less';
  92. .comArea {
  93. .bgques;
  94. textarea {
  95. color: #4F50FF;
  96. resize: none;
  97. box-shadow: none;
  98. font-size: 0.3rem;
  99. box-sizing: border-box;
  100. border: 1px solid #DFE0E4;
  101. border-radius: .08rem /* 8/100 */;
  102. -webkit-appearance: none;
  103. padding: .16rem /* 16/100 */ .3rem /* 30/100 */;
  104. background-color: transparent;
  105. }
  106. }
  107. </style>