index.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315
  1. <template>
  2. <view class="register-bg">
  3. <view class="bg-container">
  4. 参会报名
  5. </view>
  6. <auth-wrap class="register-container" ref="authWrap">
  7. <view class="form-content" slot="content">
  8. <u--form
  9. labelPosition="left"
  10. :model="model1"
  11. :rules="rules"
  12. ref="uForm"
  13. @submit="onSubmit"
  14. >
  15. <u-form-item
  16. label="姓名"
  17. prop="userInfo.usrName"
  18. borderBottom
  19. >
  20. <u--input
  21. placeholder="输入姓名"
  22. v-model="model1.userInfo.usrName"
  23. border="none"
  24. ></u--input>
  25. </u-form-item>
  26. <u-form-item
  27. label="单位名称"
  28. prop="userInfo.orgUnitName"
  29. borderBottom
  30. >
  31. <u--input
  32. placeholder="输入单位名称"
  33. v-model="model1.userInfo.orgUnitName"
  34. border="none"
  35. ></u--input>
  36. </u-form-item>
  37. <u-form-item
  38. label="职务"
  39. prop="userInfo.uniLevel"
  40. borderBottom
  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. >
  53. <u--input
  54. placeholder="输入联系电话"
  55. border="none"
  56. type="number"
  57. maxlength="11"
  58. v-model="model1.userInfo.tel"
  59. ></u--input>
  60. </u-form-item>
  61. <u-form-item
  62. label="邮箱"
  63. prop="userInfo.email"
  64. borderBottom
  65. >
  66. <u--input
  67. placeholder="输入邮箱"
  68. border="none"
  69. type="number"
  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 usrTypeList"
  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. </auth-wrap>
  153. </view>
  154. </template>
  155. <script>
  156. import { fetchContentInfo, fetchUsrInfo, putUsrRegist } from '@/common/api';
  157. import { CONTENT_TYPE, ICON_CFG } from '@/common/EnumConst';
  158. import AuthWrap from '@/components/AuthComp/index.vue';
  159. import SingleDropList from '@/components/SingleDropList/index.vue';
  160. import { getImageUrl, getUserInfo, setUserInfo } from '@/util';
  161. export default {
  162. name: 'login',
  163. components: {
  164. AuthWrap,
  165. SingleDropList,
  166. },
  167. props: {},
  168. data() {
  169. return {
  170. ICON_CFG,
  171. showEnterprise: false,
  172. loading: false,
  173. model1: {
  174. userInfo: {
  175. usrName: '',
  176. conferenceFlag: 'N',
  177. },
  178. },
  179. usrTypeList: [
  180. {
  181. value: '1',
  182. name: '大会代表',
  183. },
  184. {
  185. value: '2',
  186. name: '随行人员',
  187. },
  188. ],
  189. conferenceHall: [],
  190. tripList: [],
  191. rules: {
  192. 'userInfo.usrName': {
  193. type: 'string',
  194. required: true,
  195. message: '请填写姓名',
  196. trigger: ['blur', 'change'],
  197. },
  198. 'userInfo.tel': {
  199. type: 'string',
  200. len: 11,
  201. required: true,
  202. message: '请填写11位手机号',
  203. trigger: ['blur', 'change'],
  204. },
  205. 'userInfo.email': {
  206. type: 'string',
  207. required: true,
  208. message: '请填写邮箱',
  209. pattern: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,
  210. trigger: ['blur', 'change'],
  211. },
  212. 'userInfo.orgUnitName': {
  213. type: 'string',
  214. required: true,
  215. message: '请填写单位名称',
  216. trigger: ['blur', 'change'],
  217. },
  218. 'userInfo.uniLevel': {
  219. type: 'string',
  220. required: true,
  221. message: '请填写职务',
  222. trigger: ['blur', 'change'],
  223. },
  224. 'userInfo.usrType': {
  225. type: 'string',
  226. required: true,
  227. message: '请填写人员类型',
  228. trigger: ['blur', 'change'],
  229. },
  230. 'userInfo.contentId': {
  231. type: 'string',
  232. required: true,
  233. message: '请选择会场',
  234. trigger: ['blur', 'change'],
  235. },
  236. },
  237. };
  238. },
  239. created() {
  240. },
  241. onLoad() {
  242. //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
  243. this.$refs.uForm.setRules(this.rules);
  244. this.$refs.authWrap.reloadPage();
  245. const user = getUserInfo();
  246. if (user) {
  247. this.model1.userInfo.usrName = user.usrName;
  248. this.model1.userInfo.tel = user.tel;
  249. }
  250. this.init();
  251. },
  252. onReady() {
  253. //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
  254. this.$refs.uForm.setRules(this.rules);
  255. },
  256. methods: {
  257. getImageUrl,
  258. conferenceSelect(item) {
  259. this.model1.userInfo.contentId = item.value;
  260. this.$refs.uForm.validateField('userInfo.contentId');
  261. },
  262. async init() {
  263. const {
  264. code: conferenceCode,
  265. rows: conferenceData,
  266. } = await fetchContentInfo({
  267. pageNum: 1,
  268. pageSize: 99,
  269. contentType: CONTENT_TYPE.conference,
  270. title: this.keyword,
  271. });
  272. this.conferenceHall = conferenceData.map(item => {
  273. return {
  274. name: item.title,
  275. value: item.id,
  276. };
  277. });
  278. },
  279. onSubmit() {
  280. this.loading = true;
  281. this.$refs.uForm.validate().then(async (res) => {
  282. const { code } = await putUsrRegist(this.model1.userInfo);
  283. this.loading = false;
  284. if (code !== 200) {
  285. return;
  286. }
  287. uni.showToast({
  288. mask: true,
  289. title: '报名完成',
  290. icon: 'success',
  291. success: async () => {
  292. const user = getUserInfo();
  293. const newUsr = await fetchUsrInfo(user.id);
  294. if (newUsr.code === 200) {
  295. setUserInfo(newUsr.data);
  296. }
  297. uni.navigateBack({
  298. delta: 1,
  299. });
  300. },
  301. });
  302. }).catch(errors => {
  303. this.loading = false;
  304. });
  305. },
  306. hideKeyboard() {
  307. uni.hideKeyboard();
  308. },
  309. },
  310. };
  311. </script>
  312. <style lang="scss" src="./index.scss" />;