RegistForm.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. <template>
  2. <view>
  3. <u--form
  4. labelPosition="left"
  5. :model="model1"
  6. :rules="rules"
  7. ref="uForm"
  8. @submit="onSubmit"
  9. >
  10. <u-form-item
  11. label="姓名"
  12. prop="userInfo.usrName"
  13. borderBottom
  14. :class="{
  15. 'require': rules['userInfo.usrName'].required
  16. }"
  17. >
  18. <u--input
  19. placeholder="输入姓名"
  20. v-model="model1.userInfo.usrName"
  21. border="none"
  22. ></u--input>
  23. </u-form-item>
  24. <u-form-item
  25. label="单位名称"
  26. prop="userInfo.orgUnitName"
  27. borderBottom
  28. class="require"
  29. >
  30. <u--input
  31. placeholder="输入单位名称"
  32. v-model="model1.userInfo.orgUnitName"
  33. border="none"
  34. ></u--input>
  35. </u-form-item>
  36. <u-form-item
  37. label="职务"
  38. prop="userInfo.uniLevel"
  39. borderBottom
  40. class="require"
  41. >
  42. <u--input
  43. placeholder="输入职务"
  44. v-model="model1.userInfo.uniLevel"
  45. border="none"
  46. ></u--input>
  47. </u-form-item>
  48. <u-form-item
  49. label="联系电话"
  50. prop="userInfo.tel"
  51. borderBottom
  52. class="require"
  53. >
  54. <u--input
  55. placeholder="输入联系电话"
  56. border="none"
  57. type="number"
  58. maxlength="11"
  59. v-model="model1.userInfo.tel"
  60. ></u--input>
  61. </u-form-item>
  62. <u-form-item
  63. label="邮箱"
  64. prop="userInfo.email"
  65. borderBottom
  66. >
  67. <u--input
  68. placeholder="输入邮箱"
  69. border="none"
  70. v-model="model1.userInfo.email"
  71. ></u--input>
  72. </u-form-item>
  73. <u-form-item
  74. label="人员类型"
  75. prop="userInfo.usrType"
  76. borderBottom
  77. >
  78. <u-radio-group
  79. v-model="model1.userInfo.usrType"
  80. placement="row"
  81. >
  82. <u-radio
  83. :style="{
  84. marginRight: '20rpx'
  85. }"
  86. v-for="(item, index) in USR_TYPE_LIST"
  87. :key="index"
  88. :label="item.name"
  89. :name="item.value"
  90. >
  91. </u-radio>
  92. </u-radio-group>
  93. </u-form-item>
  94. <u-form-item
  95. label="是否参加现场调研"
  96. prop="userInfo.conferenceFlag"
  97. borderBottom
  98. >
  99. <u-radio-group
  100. v-model="model1.userInfo.conferenceFlag"
  101. placement="row"
  102. >
  103. <u-radio
  104. :style="{
  105. marginRight: '20rpx'
  106. }"
  107. label="是"
  108. name="0"
  109. >
  110. </u-radio>
  111. <u-radio
  112. :style="{
  113. marginRight: '20rpx'
  114. }"
  115. label="否"
  116. name="1"
  117. >
  118. </u-radio>
  119. </u-radio-group>
  120. </u-form-item>
  121. <u-form-item
  122. label="调研会场"
  123. prop="userInfo.contentId"
  124. borderBottom
  125. v-if="model1.userInfo.conferenceFlag === '0'"
  126. >
  127. <SingleDropList
  128. :style="{
  129. marginLeft: '20rpx'
  130. }"
  131. :defaultValue="model1.userInfo.contentId"
  132. :src="conferenceHall"
  133. placeholder="请选择会场"
  134. @onChange="conferenceSelect"
  135. >
  136. </SingleDropList>
  137. </u-form-item>
  138. </u--form>
  139. <u-button
  140. :style="{
  141. marginTop: '120rpx'
  142. }"
  143. type="primary"
  144. text="提交"
  145. :disabled="loading"
  146. :loading="loading"
  147. loadingText="正在提交..."
  148. @click="onSubmit"
  149. >
  150. </u-button>
  151. </view>
  152. </template>
  153. <script>
  154. import { fetchContentInfo, fetchUsrInfo, getDicts, putUsrRegist } from '@/common/api';
  155. import { CONTENT_TYPE, MEETING_TYPE, USR_TYPE_LIST } from '@/common/EnumConst';
  156. import SingleDropList from '@/components/SingleDropList/index.vue';
  157. import { getImageUrl, getUserInfo, setUserInfo } from '@/util';
  158. export default {
  159. components: {
  160. SingleDropList,
  161. },
  162. props: {
  163. rules: {},
  164. },
  165. data() {
  166. return {
  167. USR_TYPE_LIST,
  168. loading: false,
  169. model1: {
  170. userInfo: {
  171. usrName: '',
  172. conferenceFlag: '1',
  173. },
  174. },
  175. conferenceHall: [],
  176. };
  177. },
  178. created() {
  179. },
  180. onLoad() {
  181. },
  182. onReady() {
  183. this.setFormRules();
  184. },
  185. methods: {
  186. setFormRules() {
  187. const user = getUserInfo();
  188. if (user) {
  189. this.model1.userInfo.usrName = user.usrName;
  190. this.model1.userInfo.tel = user.tel;
  191. }
  192. this.init();
  193. //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
  194. this.$refs.uForm.setRules(this.rules);
  195. },
  196. getImageUrl,
  197. conferenceSelect(item) {
  198. this.model1.userInfo.contentId = item.value;
  199. this.$refs.uForm.clearValidate('userInfo.contentId');
  200. },
  201. async init() {
  202. const {
  203. code: conferenceCode,
  204. rows: conferenceData,
  205. } = await fetchContentInfo({
  206. pageNum: 1,
  207. pageSize: 99,
  208. contentType: CONTENT_TYPE.conference,
  209. title: this.keyword,
  210. });
  211. this.conferenceHall = conferenceData.map(item => {
  212. return {
  213. name: item.title,
  214. value: item.id,
  215. };
  216. });
  217. const { msg } = await getDicts('tfc_type');
  218. },
  219. onSubmit() {
  220. this.loading = true;
  221. this.$refs.uForm.validate().then(async (res) => {
  222. const { code } = await putUsrRegist(this.model1.userInfo, MEETING_TYPE.meeting.value);
  223. this.loading = false;
  224. if (code !== 200) {
  225. return;
  226. }
  227. uni.showToast({
  228. mask: true,
  229. title: '报名完成',
  230. icon: 'success',
  231. success: async () => {
  232. const user = getUserInfo();
  233. const newUsr = await fetchUsrInfo(user.id);
  234. if (newUsr.code === 200) {
  235. setUserInfo(newUsr.data);
  236. }
  237. uni.navigateBack({
  238. delta: 1,
  239. });
  240. },
  241. });
  242. }).catch(errors => {
  243. this.loading = false;
  244. });
  245. },
  246. hideKeyboard() {
  247. uni.hideKeyboard();
  248. },
  249. },
  250. };
  251. </script>
  252. <style lang="scss" src="./index.scss" />;