Add.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <template>
  2. <view>
  3. <up-form labelPosition="left" :model="modelForm" :rules="rulesForm" ref="formRef">
  4. <up-form-item label="姓名" prop="name" borderBottom>
  5. <up-input v-model="modelForm.name" border="none" placeholder="请输入姓名"></up-input>
  6. </up-form-item>
  7. <up-form-item label="性别" prop="sex" borderBottom @click="() => (sexFlag = true)">
  8. <up-input v-model="modelForm.sex" disabled disabledColor="#ffffff" placeholder="请选择性别"
  9. border="none"></up-input>
  10. <template #right>
  11. <up-icon name="arrow-right"></up-icon>
  12. </template>
  13. </up-form-item>
  14. <up-form-item label="关系" prop="label" borderBottom @click="() => labelFlag = true">
  15. <up-input v-model="modelForm.label" disabled disabledColor="#ffffff" placeholder="请选择关系"
  16. border="none"></up-input>
  17. <template #right>
  18. <up-icon name="arrow-right"></up-icon>
  19. </template>
  20. </up-form-item>
  21. <up-form-item label="年龄" prop="age" borderBottom>
  22. <up-input v-model="modelForm.age" border="none"></up-input>
  23. </up-form-item>
  24. <up-form-item label="手机号" prop="telephone" borderBottom
  25. :style="{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }" labelWidth="60">
  26. <up-input v-model="modelForm.telephone" border="none" placeholder="请输入手机号"></up-input>
  27. </up-form-item>
  28. <up-form-item label="是否有传染疾病" prop="isContagion" borderBottom labelWidth="240">
  29. <up-radio-group v-model="modelForm.isContagion" placement="row">
  30. <up-radio :customStyle="{marginRight: '16px'}" v-for="(item, index) in isContagionOption"
  31. :key="index" :label="item.name" :name="item.key">
  32. </up-radio>
  33. </up-radio-group>
  34. </up-form-item>
  35. <up-form-item label="地区" prop="area" borderBottom @click="()=> addressShow = true">
  36. <pickerAddress @change="addressChange"
  37. :selectValue="[ modelForm.provinceCode, modelForm.cityCode, modelForm.districtCode ]">
  38. <view class="inp"
  39. :class="modelForm.provinceName&&modelForm.cityName&&modelForm.districtName?'':'address-inp'">
  40. {{modelForm.provinceName ? modelForm.provinceName:'省'}} /
  41. {{modelForm.cityName ? modelForm.cityName:'市'}} /
  42. {{modelForm.districtName ? modelForm.districtName:'区'}}
  43. </view>
  44. </pickerAddress>
  45. <template #right>
  46. <up-icon name="arrow-right"></up-icon>
  47. </template>
  48. </up-form-item>
  49. <up-form-item label="地址" prop="address" borderBottom>
  50. <up-input v-model="modelForm.address" border="none" placeholder="请输入地址"></up-input>
  51. </up-form-item>
  52. </up-form>
  53. <up-action-sheet :show="sexFlag" :actions="sexOptions" @select="sexSelect"
  54. @close="sexFlag = false"></up-action-sheet>
  55. <up-action-sheet :show="labelFlag" :actions="relaTionsHip" @select="sexSelectsHip"
  56. @close="labelFlag = false"></up-action-sheet>
  57. </view>
  58. </template>
  59. <script setup>
  60. import {
  61. ref,
  62. reactive
  63. } from 'vue';
  64. import pickerAddress from '@/components/pickerAddress/pickerAddress.vue' // 地区选择器组件
  65. const formRef = ref(null)
  66. const modelForm = ref({
  67. name: '',
  68. sex: '',
  69. label: '',
  70. age: '',
  71. telephone: '',
  72. isContagion: '',
  73. provinceName: '', // 省
  74. provinceCode: 0,
  75. cityName: '', // 市
  76. cityCode: 0,
  77. districtName: '',
  78. districtCode: 0,
  79. address: ''
  80. })
  81. // 回显把provinceName,cityName,districtName字段拼接
  82. const rulesForm = ref({
  83. name: {
  84. type: 'string',
  85. required: true,
  86. message: '请填写姓名',
  87. trigger: ['blur', 'change'],
  88. },
  89. sex: {
  90. type: 'string',
  91. required: true,
  92. message: '请选择性别',
  93. trigger: ['change']
  94. },
  95. label: {
  96. type: 'string',
  97. required: true,
  98. message: '请选择关系',
  99. trigger: ['change'],
  100. },
  101. userInfo: {
  102. type: 'string',
  103. required: true,
  104. message: '请填写年龄',
  105. trigger: ['blur', 'change'],
  106. },
  107. telephone: {
  108. type: 'string',
  109. required: true,
  110. message: '请填写手机号',
  111. trigger: ['blur', 'change'],
  112. },
  113. })
  114. let sexFlag = ref(false)
  115. let labelFlag = ref(false)
  116. let addressShow = ref(false)
  117. const sexOptions = ref([{
  118. name: '男'
  119. }, {
  120. name: '女'
  121. }, ]);
  122. const isContagionOption = ref([{
  123. name: '是',
  124. key: 1,
  125. disabled: false,
  126. },
  127. {
  128. name: '否',
  129. key: 0,
  130. disabled: false,
  131. }
  132. ])
  133. const relaTionsHip = ref([{
  134. name: '父母'
  135. }, {
  136. name: '子女'
  137. },
  138. {
  139. name: '兄弟'
  140. },
  141. {
  142. name: '朋友'
  143. },
  144. {
  145. name: '同学'
  146. },
  147. {
  148. name: '同事'
  149. },
  150. {
  151. name: '配偶'
  152. }
  153. ]);
  154. function sexSelect(e) {
  155. modelForm.value.sex = e.name;
  156. sexFlag.value = false;
  157. }
  158. function sexSelectsHip(e) {
  159. modelForm.value.label = e.name;
  160. labelFlag.value = false;
  161. }
  162. function addressChange(data) {
  163. console.log(data, '>>>>data');
  164. modelForm.value.provinceName = date[0]
  165. modelForm.value.provinceCode = index[0]
  166. modelForm.value.cityName = date[1]
  167. modelForm.value.cityCode = index[1]
  168. modelForm.value.districtName = date[2]
  169. modelForm.value.districtCode = index[2]
  170. }
  171. // 预留校验函数
  172. function handleVerify() {
  173. // formRef.value
  174. }
  175. defineExpose({
  176. modelForm: modelForm.value,
  177. handleVerify: handleVerify()
  178. })
  179. </script>
  180. <style>
  181. </style>