subscribelForm.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <template>
  2. <view class="content">
  3. <u-form :model="subscribelForm" ref="subscribelForm" label-width="140">
  4. <u-form-item label="学生姓名" prop="studentName" required>
  5. <u-input v-model="subscribelForm.studentName" placeholder="请输入学生姓名" />
  6. </u-form-item>
  7. <u-form-item label="家长姓名" prop="fatherName" required>
  8. <u-input v-model="subscribelForm.fatherName" placeholder="请输入家长姓名" />
  9. </u-form-item>
  10. <u-form-item label="学生性别" prop="sex" required>
  11. <u-input v-model="subscribelForm.sex" placeholder="请选择学生性别" :select-open="sexShow" type="select" @click="sexShow = true" />
  12. </u-form-item>
  13. <u-form-item label="学生年龄" prop="age" required>
  14. <u-input v-model="subscribelForm.age" placeholder="请输入学生年龄" type="number" />
  15. </u-form-item>
  16. <u-form-item label="学生生日" prop="birthday" required>
  17. <u-input v-model="subscribelForm.birthday" placeholder="请选择学生生日" :select-open="birthdayShow" type="select" @click="birthdayShow = true" />
  18. </u-form-item>
  19. <u-form-item label="手机号码" prop="phone" required>
  20. <u-input v-model="subscribelForm.phone" placeholder="请输入手机号码" />
  21. </u-form-item>
  22. <!-- <u-form-item label="体验日期" placeholder="请选择体验日期" prop="experience">
  23. <u-input v-model="subscribelForm.experience" :select-open="experienceShow" type="select" @click="experienceShow = true" />
  24. </u-form-item> -->
  25. </u-form>
  26. <u-action-sheet :list="sexList" v-model="sexShow" @click="setSex"></u-action-sheet>
  27. <u-picker v-model="birthdayShow" mode="time" :params="params" @confirm="setBirthday"></u-picker>
  28. <u-calendar v-model="experienceShow" mode="date" :active-bg-color="mainColor" btn-type="error" availableText="有课"
  29. :available="availableList" @change="setExperience" max-date="2300-12-31"></u-calendar>
  30. <view class="handle-fix-box">
  31. <u-button type="warning" shape="circle" :ripple="true" :custom-style="customStyle" @click="submitForm()">保存</u-button>
  32. </view>
  33. <u-top-tips ref="uTips"></u-top-tips>
  34. </view>
  35. </template>
  36. <script>
  37. import {
  38. mapGetters
  39. } from 'vuex'
  40. const NET = require('@/utils/request')
  41. const API = require('@/config/api')
  42. export default {
  43. computed: {
  44. ...mapGetters([
  45. 'mainColor',
  46. 'customStyle',
  47. ])
  48. },
  49. data() {
  50. return {
  51. classId: '',
  52. subscribelForm: {
  53. studentName: '',
  54. fatherName: '',
  55. sex: '',
  56. age: '',
  57. birthday: '',
  58. phone: '',
  59. placeSchool: '',
  60. experience: '',
  61. },
  62. rules: {
  63. studentName: [{
  64. required: true,
  65. message: '请输入学生姓名',
  66. trigger: 'change'
  67. }],
  68. fatherName: [{
  69. required: true,
  70. message: '请输入家长姓名',
  71. trigger: 'change'
  72. }],
  73. sex: [{
  74. required: true,
  75. message: '请选择学生性别',
  76. trigger: 'change'
  77. }],
  78. age: [{
  79. required: true,
  80. message: '请输入学生年龄',
  81. trigger: 'change'
  82. }],
  83. birthday: [{
  84. required: true,
  85. message: '请选择学生生日',
  86. trigger: 'change'
  87. }],
  88. phone: [{
  89. required: true,
  90. message: '请输入手机号码',
  91. trigger: 'change'
  92. },
  93. {
  94. pattern: /^1[0-9]{10}$/g,
  95. transform(value) {
  96. return String(value);
  97. },
  98. message: '请输入正确格式的手机号码'
  99. },
  100. ],
  101. },
  102. sexShow: false,
  103. sexList: [{
  104. text: '男'
  105. },
  106. {
  107. text: '女'
  108. }
  109. ],
  110. birthdayShow: false,
  111. params: {
  112. year: true,
  113. month: true,
  114. day: true,
  115. hour: false,
  116. minute: false,
  117. second: false
  118. },
  119. experienceShow: false,
  120. availableList: []
  121. }
  122. },
  123. onLoad(options) {
  124. this.classId = options.id
  125. },
  126. onReady() {
  127. this.$refs.subscribelForm.setRules(this.rules);
  128. },
  129. methods: {
  130. // 设置性别
  131. setSex(index) {
  132. this.subscribelForm.sex = this.sexList[index].text
  133. },
  134. // 设置生日
  135. setBirthday(object) {
  136. this.subscribelForm.birthday = object.year + '-' + object.month + '-' + object.day
  137. },
  138. // 设置体验日期
  139. setExperience(object) {
  140. let date = object.year + '-' + object.month + '-' + object.day
  141. if (this.availableList.filter(site => site == date).length) {
  142. this.subscribelForm.experience = date
  143. } else {
  144. this.subscribelForm.experience = ''
  145. this.$refs.uTips.show({
  146. title: '请选择可用日期',
  147. type: 'error',
  148. })
  149. }
  150. },
  151. // 提交表单
  152. submitForm() {
  153. this.$refs.subscribelForm.validate(valid => {
  154. if (valid) {
  155. NET.request(API.submitStudentForm, {
  156. classId: this.classId,
  157. ...this.subscribelForm
  158. }, 'POST').then(res => {
  159. this.$refs.uTips.show({
  160. title: '新增成功',
  161. type: 'success',
  162. })
  163. setTimeout(() => {
  164. uni.redirectTo({
  165. url: '/pagesMain/subscribelSuccess'
  166. });
  167. }, 1000)
  168. }).catch(error => {
  169. this.$refs.uTips.show({
  170. title: '新增失败',
  171. type: 'warning',
  172. })
  173. })
  174. }
  175. });
  176. },
  177. },
  178. }
  179. </script>
  180. <style>
  181. page {
  182. width: 100%;
  183. height: 100%;
  184. position: relative;
  185. }
  186. </style>
  187. <style lang="scss" scoped>
  188. @import "@/static/css/themes.scss";
  189. .content {
  190. width: 100%;
  191. float: left;
  192. padding: 0 15px 60px 15px;
  193. box-sizing: border-box;
  194. }
  195. </style>