wd-form-item.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <!--
  2. * @Author: weisheng
  3. * @Date: 2023-12-14 11:21:58
  4. * @LastEditTime: 2024-03-15 21:29:33
  5. * @LastEditors: weisheng
  6. * @Description:
  7. * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-form-item/wd-form-item.vue
  8. * 记得注释
  9. -->
  10. <template>
  11. <wd-cell
  12. custom-class="wd-form-item"
  13. :required="required"
  14. :title="label"
  15. :center="center"
  16. :border="border"
  17. :title-width="labelWidth"
  18. :is-link="isLink"
  19. >
  20. <slot></slot>
  21. <view v-if="errorMessage" class="wd-form-item__error-message">{{ errorMessage }}</view>
  22. </wd-cell>
  23. </template>
  24. <script lang="ts">
  25. export default {
  26. name: 'wd-form-item',
  27. options: {
  28. addGlobalClass: true,
  29. virtualHost: true,
  30. styleIsolation: 'shared'
  31. }
  32. }
  33. </script>
  34. <script lang="ts" setup>
  35. import { computed } from 'vue'
  36. import { useParent } from '../composables/useParent'
  37. import WdCell from '../wd-cell/wd-cell.vue'
  38. import { FORM_KEY } from '../wd-form/types'
  39. import { formItemProps } from './types'
  40. const props = defineProps(formItemProps)
  41. const { parent: form, index } = useParent(FORM_KEY)
  42. const errorMessage = computed(() => {
  43. if (form && props.prop && form.errorMessages && form.errorMessages[props.prop]) {
  44. return form.errorMessages[props.prop]
  45. } else {
  46. return ''
  47. }
  48. })
  49. const border = computed(() => {
  50. if (index.value > 0 && form && form.props.border) {
  51. return true
  52. } else {
  53. return false
  54. }
  55. })
  56. </script>
  57. <style lang="scss" scoped>
  58. @import './index.scss';
  59. </style>