FillItem.vue 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <template>
  2. <uni-popup type="top" background-color="#fff" ref="fillRef">
  3. <view class="popup-content">
  4. <input v-model.trim="result" :focus="true" placeholder="请输入答案" @blur="onBlur" @confirm="handleConfirm" class="my-textarea" type="text" />
  5. </view>
  6. </uni-popup>
  7. </template>
  8. <script setup>
  9. import {ref, watch} from "vue";
  10. const fillRef = ref(null);
  11. const result = ref('');
  12. const focus = ref(false);
  13. const emits = defineEmits(['blur']);
  14. const props = defineProps({
  15. value: {
  16. type: String,
  17. default: ''
  18. },
  19. index: {
  20. type: Number,
  21. }
  22. })
  23. watch(() => props.value, (val) => {
  24. result.value = val;
  25. })
  26. function showPopup() {
  27. fillRef.value.open();
  28. }
  29. function handleConfirm() {
  30. fillRef.value.close();
  31. }
  32. function onBlur() {
  33. emits("blur", {result: result.value,index: props.index});
  34. focus.value = false;
  35. }
  36. uni.$on("swiper-change", () => {
  37. emits("blur", {result: result.value,index: props.index});
  38. fillRef.value.close()
  39. })
  40. defineExpose({
  41. showPopup
  42. })
  43. </script>
  44. <style lang="scss" scoped>
  45. .popup-content {
  46. padding: 20px;
  47. }
  48. .my-textarea {
  49. height: 36px;
  50. }
  51. </style>