index.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  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 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. </auth-wrap>
  153. </view>
  154. </template>
  155. <script>
  156. import { fetchContentInfo, fetchUsrInfo, putUsrRegist } from '@/common/api';
  157. import { CONTENT_TYPE, ICON_CFG, MEETING_TYPE, USR_TYPE_LIST } 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. USR_TYPE_LIST,
  172. showEnterprise: false,
  173. loading: false,
  174. model1: {
  175. userInfo: {
  176. usrName: '',
  177. conferenceFlag: '1',
  178. },
  179. },
  180. conferenceHall: [],
  181. tripList: [],
  182. rules: {
  183. 'userInfo.usrName': {
  184. type: 'string',
  185. required: true,
  186. message: '请填写姓名',
  187. trigger: ['blur', 'change'],
  188. },
  189. 'userInfo.tel': {
  190. type: 'string',
  191. len: 11,
  192. required: true,
  193. message: '请填写11位手机号',
  194. trigger: ['blur', 'change'],
  195. },
  196. 'userInfo.email': {
  197. type: 'string',
  198. required: true,
  199. message: '请填写邮箱',
  200. pattern: /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/,
  201. trigger: ['blur', 'change'],
  202. },
  203. 'userInfo.orgUnitName': {
  204. type: 'string',
  205. required: true,
  206. message: '请填写单位名称',
  207. trigger: ['blur', 'change'],
  208. },
  209. 'userInfo.uniLevel': {
  210. type: 'string',
  211. required: true,
  212. message: '请填写职务',
  213. trigger: ['blur', 'change'],
  214. },
  215. 'userInfo.usrType': {
  216. type: 'string',
  217. required: true,
  218. message: '请填写人员类型',
  219. trigger: ['blur', 'change'],
  220. },
  221. 'userInfo.contentId': {
  222. type: 'number',
  223. required: true,
  224. message: '请选择会场',
  225. trigger: ['blur', 'change'],
  226. },
  227. },
  228. };
  229. },
  230. created() {
  231. },
  232. onLoad() {
  233. //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
  234. this.$refs.uForm.setRules(this.rules);
  235. this.$refs.authWrap.reloadPage();
  236. const user = getUserInfo();
  237. if (user) {
  238. this.model1.userInfo.usrName = user.usrName;
  239. this.model1.userInfo.tel = user.tel;
  240. }
  241. this.init();
  242. },
  243. onReady() {
  244. //如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
  245. this.$refs.uForm.setRules(this.rules);
  246. },
  247. methods: {
  248. getImageUrl,
  249. conferenceSelect(item) {
  250. debugger
  251. this.model1.userInfo.contentId = item.value;
  252. this.$refs.uForm.clearValidate('userInfo.contentId');
  253. },
  254. async init() {
  255. const {
  256. code: conferenceCode,
  257. rows: conferenceData,
  258. } = await fetchContentInfo({
  259. pageNum: 1,
  260. pageSize: 99,
  261. contentType: CONTENT_TYPE.conference,
  262. title: this.keyword,
  263. });
  264. this.conferenceHall = conferenceData.map(item => {
  265. return {
  266. name: item.title,
  267. value: item.id,
  268. };
  269. });
  270. },
  271. onSubmit() {
  272. this.loading = true;
  273. this.model1.userInfo;
  274. this.$refs.uForm.validate().then(async (res) => {
  275. const { code } = await putUsrRegist(this.model1.userInfo, MEETING_TYPE.meeting.value);
  276. this.loading = false;
  277. if (code !== 200) {
  278. return;
  279. }
  280. uni.showToast({
  281. mask: true,
  282. title: '报名完成',
  283. icon: 'success',
  284. success: async () => {
  285. const user = getUserInfo();
  286. const newUsr = await fetchUsrInfo(user.id);
  287. if (newUsr.code === 200) {
  288. setUserInfo(newUsr.data);
  289. }
  290. uni.navigateBack({
  291. delta: 1,
  292. });
  293. },
  294. });
  295. }).catch(errors => {
  296. debugger
  297. this.loading = false;
  298. });
  299. },
  300. hideKeyboard() {
  301. uni.hideKeyboard();
  302. },
  303. },
  304. };
  305. </script>
  306. <style lang="scss" src="./index.scss" />;