index.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <template>
  2. <view class="form_item">
  3. <view class="form_item_key font-bold" :class="{ 'require': required }">{{ label }}</view>
  4. <view class="form_item_val">
  5. <picker
  6. mode="region"
  7. :disabled="readOnly"
  8. :value="value"
  9. :level="level"
  10. @change="onRegionPickerChange"
  11. >
  12. <input
  13. type="text"
  14. :disabled="true"
  15. :placeholder="placeholder"
  16. :value="value"
  17. />
  18. </picker>
  19. </view>
  20. </view>
  21. </template>
  22. <script setup lang="ts">
  23. import { defineProps, defineEmits } from 'vue';
  24. const props = defineProps({
  25. label: {
  26. type: String,
  27. default: ''
  28. },
  29. readOnly: {
  30. type: Boolean,
  31. default: false,
  32. },
  33. placeholder: {
  34. type: String,
  35. default: ''
  36. },
  37. required: {
  38. type: Boolean,
  39. default: false
  40. },
  41. level: {
  42. type: String,
  43. default: "region"
  44. },
  45. value: {
  46. type: Array,
  47. default: () => []
  48. },
  49. });
  50. const emit = defineEmits(['regionPickerChange', 'update:value']);
  51. const onRegionPickerChange = (e: any) => {
  52. const { detail } = e;
  53. const { code, postcode, value } = detail;
  54. emit('regionPickerChange', {
  55. code,
  56. postcode,
  57. value,
  58. });
  59. emit('update:value', value);
  60. };
  61. </script>
  62. <style>
  63. /* 表单 start */
  64. .form_item {
  65. position: relative;
  66. width: inherit;
  67. padding: 0 10upx;
  68. font-size: 30upx;
  69. min-height: 120upx;
  70. display: flex;
  71. align-items: center;
  72. }
  73. .form_item .form_item_key {
  74. padding-left: 20upx;
  75. position: relative;
  76. width: 220upx;
  77. }
  78. .form_item .form_item_val {
  79. flex: 1 0 0;
  80. text-align: right;
  81. height: inherit;
  82. padding: 0 20upx;
  83. }
  84. .form_item .form_item_val .input {
  85. min-height: 100%;
  86. width: 100%;
  87. line-height: 50upx;
  88. }
  89. .img_captcha {
  90. width: 160upx;
  91. height: inherit;
  92. background-color: var(--dominantColor);
  93. color: #fff;
  94. font-weight: bold;
  95. font-size: 38upx;
  96. display: flex;
  97. align-items: center;
  98. justify-content: center;
  99. }
  100. .require::after {
  101. content: '*';
  102. position: absolute;
  103. color: #FF1D1F;
  104. top: 10%;
  105. left: 0;
  106. }
  107. /* 表单 end */
  108. .font-bold {
  109. font-weight: bold;
  110. }
  111. </style>