index.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  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 {
  157. fetchContentInfo, fetchEnterpriseList, fetchEnterpriseTripList, fetchUsrInfo, putUsrRegist,
  158. } from '@/common/api';
  159. import { CONTENT_TYPE, ICON_CFG } from '@/common/EnumConst';
  160. import AuthWrap from '@/components/AuthComp/index.vue';
  161. import SingleDropList from '@/components/SingleDropList/index.vue';
  162. import { getImageUrl, getUserInfo, setUserInfo } from '@/util';
  163. export default {
  164. name: 'login',
  165. components: {
  166. AuthWrap,
  167. SingleDropList,
  168. },
  169. props: {},
  170. data() {
  171. return {
  172. ICON_CFG,
  173. showEnterprise: false,
  174. loading: false,
  175. model1: {
  176. userInfo: {
  177. usrName: '',
  178. conferenceFlag: 'N',
  179. },
  180. },
  181. usrTypeList: [
  182. {
  183. value: '1',
  184. name: '大会代表',
  185. },
  186. {
  187. value: '2',
  188. name: '随行人员',
  189. },
  190. ],
  191. conferenceHall: [],
  192. tripList: [],
  193. rules: {
  194. 'userInfo.usrName': {
  195. type: 'string',
  196. required: true,
  197. message: '请填写姓名',
  198. trigger: ['blur', 'change'],
  199. },
  200. 'userInfo.tel': {
  201. type: 'string',
  202. len: 11,
  203. required: true,
  204. message: '请填写11位手机号',
  205. trigger: ['blur', 'change'],
  206. },
  207. 'userInfo.email': {
  208. type: 'string',
  209. required: true,
  210. message: '请填写邮箱',
  211. pattern: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,
  212. trigger: ['blur', 'change'],
  213. },
  214. 'userInfo.orgUnitName': {
  215. type: 'string',
  216. required: true,
  217. message: '请填写单位名称',
  218. trigger: ['blur', 'change'],
  219. },
  220. 'userInfo.uniLevel': {
  221. type: 'string',
  222. required: true,
  223. message: '请填写职务',
  224. trigger: ['blur', 'change'],
  225. },
  226. 'userInfo.usrType': {
  227. type: 'string',
  228. required: true,
  229. message: '请填写人员类型',
  230. trigger: ['blur', 'change'],
  231. },
  232. 'userInfo.contentId': {
  233. type: 'string',
  234. required: true,
  235. message: '请选择会场',
  236. trigger: ['blur', 'change'],
  237. },
  238. },
  239. };
  240. },
  241. created() {
  242. },
  243. onLoad() {
  244. //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
  245. this.$refs.uForm.setRules(this.rules);
  246. this.$refs.authWrap.reloadPage();
  247. const user = getUserInfo();
  248. if (user) {
  249. this.model1.userInfo.usrName = user.usrName;
  250. this.model1.userInfo.tel = user.tel;
  251. }
  252. this.init();
  253. },
  254. onReady() {
  255. //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
  256. this.$refs.uForm.setRules(this.rules);
  257. },
  258. methods: {
  259. getImageUrl,
  260. conferenceSelect(item) {
  261. this.model1.userInfo.contentId = item.value;
  262. this.$refs.uForm.validateField('userInfo.contentId');
  263. },
  264. async init() {
  265. const {
  266. code: conferenceCode,
  267. rows: conferenceData,
  268. } = await fetchContentInfo({
  269. pageNum: 1,
  270. pageSize: 99,
  271. contentType: CONTENT_TYPE.conference,
  272. title: this.keyword,
  273. });
  274. this.conferenceHall = conferenceData.map(item => {
  275. return {
  276. name: item.title,
  277. value: item.id,
  278. };
  279. });
  280. },
  281. onSubmit() {
  282. this.loading = true;
  283. this.$refs.uForm.validate().then(async (res) => {
  284. debugger
  285. await putUsrRegist(this.model1.userInfo);
  286. this.loading = false;
  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. debugger
  304. this.loading = false;
  305. });
  306. },
  307. hideKeyboard() {
  308. uni.hideKeyboard();
  309. },
  310. },
  311. };
  312. </script>
  313. <style lang="scss" src="./index.scss" />;