index.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  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. v-model="model1.userInfo.email"
  70. ></u--input>
  71. </u-form-item>
  72. <u-form-item
  73. label="人员类型"
  74. prop="userInfo.usrType"
  75. borderBottom
  76. >
  77. <u-radio-group
  78. v-model="model1.userInfo.usrType"
  79. placement="row"
  80. >
  81. <u-radio
  82. :style="{
  83. marginRight: '20rpx'
  84. }"
  85. v-for="(item, index) in USR_TYPE_LIST"
  86. :key="index"
  87. :label="item.name"
  88. :name="item.value"
  89. >
  90. </u-radio>
  91. </u-radio-group>
  92. </u-form-item>
  93. <u-form-item
  94. label="是否参加现场调研"
  95. prop="userInfo.conferenceFlag"
  96. borderBottom
  97. >
  98. <u-radio-group
  99. v-model="model1.userInfo.conferenceFlag"
  100. placement="row"
  101. >
  102. <u-radio
  103. :style="{
  104. marginRight: '20rpx'
  105. }"
  106. label="是"
  107. name="0"
  108. >
  109. </u-radio>
  110. <u-radio
  111. :style="{
  112. marginRight: '20rpx'
  113. }"
  114. label="否"
  115. name="1"
  116. >
  117. </u-radio>
  118. </u-radio-group>
  119. </u-form-item>
  120. <u-form-item
  121. label="调研会场"
  122. prop="userInfo.contentId"
  123. borderBottom
  124. v-if="model1.userInfo.conferenceFlag === '0'"
  125. >
  126. <SingleDropList
  127. :style="{
  128. marginLeft: '20rpx'
  129. }"
  130. :defaultValue="model1.userInfo.contentId"
  131. :src="conferenceHall"
  132. placeholder="请选择会场"
  133. @onChange="conferenceSelect"
  134. >
  135. </SingleDropList>
  136. </u-form-item>
  137. </u--form>
  138. <u-button
  139. :style="{
  140. marginTop: '120rpx'
  141. }"
  142. type="primary"
  143. text="提交"
  144. :disabled="loading"
  145. :loading="loading"
  146. loadingText="正在提交..."
  147. @click="onSubmit"
  148. >
  149. </u-button>
  150. </view>
  151. </auth-wrap>
  152. </view>
  153. </template>
  154. <script>
  155. import { fetchContentInfo, fetchUsrInfo, putUsrRegist } from '@/common/api';
  156. import { CONTENT_TYPE, ICON_CFG, MEETING_TYPE, USR_TYPE_LIST } from '@/common/EnumConst';
  157. import AuthWrap from '@/components/AuthComp/index.vue';
  158. import SingleDropList from '@/components/SingleDropList/index.vue';
  159. import { getImageUrl, getUserInfo, setUserInfo } from '@/util';
  160. export default {
  161. name: 'login',
  162. components: {
  163. AuthWrap,
  164. SingleDropList,
  165. },
  166. props: {},
  167. data() {
  168. return {
  169. ICON_CFG,
  170. USR_TYPE_LIST,
  171. showEnterprise: false,
  172. loading: false,
  173. model1: {
  174. userInfo: {
  175. usrName: '',
  176. conferenceFlag: '1',
  177. },
  178. },
  179. conferenceHall: [],
  180. tripList: [],
  181. rules: {
  182. 'userInfo.usrName': {
  183. type: 'string',
  184. required: true,
  185. message: '请填写姓名',
  186. trigger: ['blur', 'change'],
  187. },
  188. 'userInfo.tel': {
  189. type: 'string',
  190. len: 11,
  191. required: true,
  192. message: '请填写11位手机号',
  193. trigger: ['blur', 'change'],
  194. },
  195. 'userInfo.email': {
  196. type: 'string',
  197. required: true,
  198. message: '请填写邮箱',
  199. pattern: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,
  200. trigger: ['blur', 'change'],
  201. },
  202. 'userInfo.orgUnitName': {
  203. type: 'string',
  204. required: true,
  205. message: '请填写单位名称',
  206. trigger: ['blur', 'change'],
  207. },
  208. 'userInfo.uniLevel': {
  209. type: 'string',
  210. required: true,
  211. message: '请填写职务',
  212. trigger: ['blur', 'change'],
  213. },
  214. 'userInfo.usrType': {
  215. type: 'string',
  216. required: true,
  217. message: '请填写人员类型',
  218. trigger: ['blur', 'change'],
  219. },
  220. 'userInfo.contentId': {
  221. type: 'number',
  222. required: true,
  223. message: '请选择会场',
  224. trigger: ['blur', 'change'],
  225. },
  226. },
  227. };
  228. },
  229. created() {
  230. },
  231. onLoad() {
  232. //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
  233. this.$refs.uForm.setRules(this.rules);
  234. this.$refs.authWrap.reloadPage();
  235. const user = getUserInfo();
  236. if (user) {
  237. this.model1.userInfo.usrName = user.usrName;
  238. this.model1.userInfo.tel = user.tel;
  239. }
  240. this.init();
  241. },
  242. onReady() {
  243. //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
  244. this.$refs.uForm.setRules(this.rules);
  245. },
  246. methods: {
  247. getImageUrl,
  248. conferenceSelect(item) {
  249. this.model1.userInfo.contentId = item.value;
  250. this.$refs.uForm.clearValidate('userInfo.contentId');
  251. },
  252. async init() {
  253. const {
  254. code: conferenceCode,
  255. rows: conferenceData,
  256. } = await fetchContentInfo({
  257. pageNum: 1,
  258. pageSize: 99,
  259. contentType: CONTENT_TYPE.conference,
  260. title: this.keyword,
  261. });
  262. this.conferenceHall = conferenceData.map(item => {
  263. return {
  264. name: item.title,
  265. value: item.id,
  266. };
  267. });
  268. },
  269. onSubmit() {
  270. this.loading = true;
  271. this.$refs.uForm.validate().then(async (res) => {
  272. const { code } = await putUsrRegist(this.model1.userInfo, MEETING_TYPE.meeting.value);
  273. this.loading = false;
  274. if (code !== 200) {
  275. return;
  276. }
  277. uni.showToast({
  278. mask: true,
  279. title: '报名完成',
  280. icon: 'success',
  281. success: async () => {
  282. const user = getUserInfo();
  283. const newUsr = await fetchUsrInfo(user.id);
  284. if (newUsr.code === 200) {
  285. setUserInfo(newUsr.data);
  286. }
  287. uni.navigateBack({
  288. delta: 1,
  289. });
  290. },
  291. });
  292. }).catch(errors => {
  293. this.loading = false;
  294. });
  295. },
  296. hideKeyboard() {
  297. uni.hideKeyboard();
  298. },
  299. },
  300. };
  301. </script>
  302. <style lang="scss" src="./index.scss" />;