formTemplate.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <template>
  2. <view class="form-box">
  3. <!-- 注意,如果需要兼容微信小程序,最好通过setRules方法设置rules规则 -->
  4. <u--form labelPosition="left" :model="model1" :rules="rules" ref="uForm" labelWidth="60">
  5. <u-form-item label="姓名" prop="userInfo.name" borderBottom :required="true">
  6. <u--input v-model="model1.userInfo.name" placeholder="请输入姓名" border="none"></u--input>
  7. </u-form-item>
  8. <u-form-item label="手机号" prop="userInfo.phone" borderBottom :required="true">
  9. <u--input v-model="model1.userInfo.phone" placeholder="请输入手机号" border="none"></u--input>
  10. </u-form-item>
  11. <u-form-item label="性别" prop="userInfo.sex" borderBottom @click="showSex = true;" :required="true">
  12. <u--input v-model="model1.userInfo.sex" disabled disabledColor="#ffffff" placeholder="请选择性别"
  13. border="none"></u--input>
  14. <u-icon slot="right" name="arrow-right"></u-icon>
  15. </u-form-item>
  16. </u--form>
  17. <u-action-sheet :show="showSex" :actions="actions" title="请选择性别" description="如果选择保密会报错"
  18. @close="showSex = false" @select="sexSelect">
  19. </u-action-sheet>
  20. <u-button type="primary" class="submit" @click="submit" text="提交"></u-button>
  21. </view>
  22. </template>
  23. <script>
  24. import { submitForm } from "@/api/formTemplate.js"
  25. export default {
  26. data() {
  27. return {
  28. showSex: false,
  29. model1: {
  30. userInfo: {
  31. name: 'uView UI',
  32. phone: '',
  33. sex: '男',
  34. },
  35. },
  36. actions: [{
  37. name: '男',
  38. },
  39. {
  40. name: '女',
  41. },
  42. {
  43. name: '保密',
  44. },
  45. ],
  46. rules: {
  47. 'userInfo.name': {
  48. min: 1,
  49. max: 12,
  50. type: 'string',
  51. required: true,
  52. message: '请填写姓名',
  53. trigger: ['blur', 'change']
  54. },
  55. 'userInfo.phone': [{
  56. type: 'number',
  57. required: true,
  58. message: '请填写手机号',
  59. trigger: ['blur', 'change']
  60. }, {
  61. type: 'string',
  62. required: true,
  63. pattern: this.$rule.phone, //正则
  64. message: '请填写正确的手机号',
  65. trigger: ['blur', 'change']
  66. }],
  67. 'userInfo.sex': {
  68. type: 'string',
  69. max: 1,
  70. required: true,
  71. message: '请选择男或女',
  72. trigger: ['blur', 'change']
  73. },
  74. },
  75. radio: '',
  76. switchVal: false
  77. };
  78. },
  79. onLoad(option) {
  80. console.log('页面参',option)
  81. },
  82. methods: {
  83. sexSelect(e) {
  84. this.model1.userInfo.sex = e.name
  85. this.$refs.uForm.validateField('userInfo.sex')
  86. },
  87. async submitForm() {
  88. console.log('提交')
  89. let { data } = await submitForm({ ...this.model1.userInfo })
  90. },
  91. submit() {
  92. this.$refs.uForm.validate().then(async res => {
  93. // this.submitForm()
  94. uni.$u.toast('校验通过')
  95. }).catch(errors => {
  96. uni.$u.toast('校验失败')
  97. })
  98. }
  99. },
  100. onReady() {
  101. //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
  102. this.$refs.uForm.setRules(this.rules)
  103. },
  104. };
  105. </script>
  106. <style lang="scss" scoped>
  107. .form-box {
  108. padding: 0 20upx;
  109. background: #fff;
  110. .submit {
  111. margin-top: 80upx;
  112. }
  113. }
  114. </style>