haiziNianling.vue 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <template>
  2. 年龄:{{myData.children}}
  3. <view v-for="(item,index) in myData.children" :key="item.timer">
  4. <view><text v-if="index == 0">孩子年龄</text></view>
  5. <uni-easyinput v-model="item.age" placeholder="请输入孩子年龄" @change="onChange" />
  6. <button @click="handleAdd" v-if="myData.children.length == 1">+</button>
  7. <button @click="handleAdd"
  8. v-else-if="myData.children.length-1 == index && myData.children.length != 1 && myData.children.length<3">+</button>
  9. <button @click="handleDelete(item.timer)" v-else>-</button>
  10. </view>
  11. </template>
  12. <script setup>
  13. import {
  14. computed,
  15. reactive,
  16. watch,
  17. watchEffect
  18. } from "vue"
  19. import {
  20. useHetong
  21. } from "../useHetong.js"
  22. const {
  23. injectHetong
  24. } = useHetong();
  25. const data = injectHetong()
  26. const emits = defineEmits(['change'])
  27. const myData = reactive({
  28. children: []
  29. })
  30. watchEffect(() => {
  31. const list = data.hetong.qzHzNianliang && data.hetong.qzHzNianliang.split(',').map((item,index) => ({
  32. age: item,
  33. timer: new Date().getTime()+index
  34. }));
  35. myData.children = list.length ? list : [{
  36. age: '',
  37. timer: new Date().getTime()
  38. }]
  39. })
  40. function onChange() {
  41. data.hetong.qzHzNianliang = myData.children.map(item => item.age).join(',')
  42. }
  43. function handleAdd() {
  44. myData.children.push({
  45. age: '',
  46. timer: new Date().getTime()
  47. });
  48. data.hetong.qzHzNianliang = myData.children.map(item => item.age).join(',')
  49. emits('change')
  50. }
  51. function handleDelete(timer) {
  52. console.log('timer', timer)
  53. myData.children = myData.children.filter(item => item.timer != timer)
  54. data.hetong.qzHzNianliang = myData.children.map(item => item.age).join(',')
  55. emits('change')
  56. }
  57. </script>
  58. <style>
  59. </style>