index.vue 2.0 KB

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