sign_up.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778
  1. <template>
  2. <view class="page_body">
  3. <view class="banner_container"><image :src="banner" mode="scaleToFill" class="banner_img" /></view>
  4. <view class="season">
  5. <view class="title">
  6. <image src="../../static/imgs/offline.png" mode="scaleToFill"></image>
  7. <text>第{{ userInfo.season }}届大卫博士创业{{ userInfo.season_type | activityType }}</text>
  8. </view>
  9. <view class="con">
  10. <view class="course_info">
  11. <view style="margin-right:102rpx;">
  12. <text>名额限制:</text>
  13. <text>{{ userInfo.is_limit && userInfo.limit_num ? userInfo.limit_num : '无限制' }}</text>
  14. <text v-if="userInfo.is_limit && userInfo.limit_num">名</text>
  15. </view>
  16. <view>
  17. <text>已报名:</text>
  18. <text class="count">
  19. <text>{{ userInfo.count }}</text>
  20. <text>人</text>
  21. </text>
  22. </view>
  23. </view>
  24. <view class="course_time">
  25. <text>时间:</text>
  26. <text>{{ getTime(userInfo.time_start) }}</text>
  27. <text>-</text>
  28. <text>{{ getTime(userInfo.time_end) }}</text>
  29. </view>
  30. </view>
  31. </view>
  32. <view class="block"></view>
  33. <view class="sign_info">
  34. <view class="user_con">
  35. <view class="user_title">请确认本人信息</view>
  36. <view class="info_fixed">
  37. <view class="info_con">
  38. <view class="label">昵称:</view>
  39. <view class="label_con">{{ userInfo.nickname }}</view>
  40. </view>
  41. <view class="info_con">
  42. <view class="label">手机号:</view>
  43. <view class="label_con">{{ userInfo.phone }}</view>
  44. </view>
  45. <view class="info_con">
  46. <view class="label">代理级别:</view>
  47. <view class="label_con">{{ userInfo.level }}</view>
  48. </view>
  49. </view>
  50. <view class="dynamic_info">
  51. <view class="info_con">
  52. <view class="label">
  53. <text>性别: </text>
  54. <text class="star">*</text>
  55. </view>
  56. <view class="label_con">
  57. <radio-group @change="e => signedInfo.sex = Number(e.detail.value)">
  58. <view
  59. v-for="(sex, i) in sexList"
  60. :key="i"
  61. class="radio_con"
  62. >
  63. <radio
  64. :value="sex"
  65. :checked="signedInfo.sex === sex"
  66. :disabled="signedRevise.sex"
  67. />
  68. <text>{{ sex ? '女' : '男' }}</text>
  69. </view>
  70. </radio-group>
  71. </view>
  72. </view>
  73. <view class="info_con">
  74. <view class="label">
  75. <text>身份证号: </text>
  76. <text class="star">*</text>
  77. </view>
  78. <view class="label_con">
  79. <textarea
  80. v-model="signedInfo.id_code"
  81. :disabled="signedRevise.id_code"
  82. auto-height
  83. placeholder='请输入身份证号'
  84. :class="brand ? 'textareaIp' : ''"
  85. maxlength="18"
  86. />
  87. </view>
  88. </view>
  89. <view class="info_con">
  90. <view class="label">
  91. <text>来自哪里: </text>
  92. <text class="star">*</text>
  93. </view>
  94. <template v-if="signedRevise.province">
  95. <view class="label_con">
  96. {{ baseInfo_region.join('-') }}
  97. </view>
  98. </template>
  99. <template v-else>
  100. <picker
  101. mode="region"
  102. :value="baseInfo_region"
  103. @change="RegionChange2"
  104. >
  105. <view class="picker flexB">
  106. <view class="address_name">
  107. <text v-if="baseInfo_region[0] != null">
  108. {{ baseInfo_region.join('-') }}
  109. </text>
  110. <text v-else>省-市-区</text>
  111. </view>
  112. <text class="iconfont iconyoujiantou" style="color:#999;"></text>
  113. </view>
  114. </picker>
  115. </template>
  116. </view>
  117. <view class="info_con">
  118. <view class="label">
  119. <text>详细地址</text>
  120. <text class="star">*</text>
  121. </view>
  122. <view class="label_con">
  123. <textarea
  124. v-model="signedInfo.detail"
  125. :disabled="signedRevise.detail"
  126. auto-height
  127. placeholder="请输入详细地址"
  128. :class="brand ? 'textareaIp' : ''"
  129. />
  130. </view>
  131. </view>
  132. <view class="info_con">
  133. <view class="label">
  134. <text>参加次数: </text>
  135. <text class="star">*</text>
  136. </view>
  137. <view class="label_con">
  138. <input
  139. v-model="join_num"
  140. :disabled="Number(userInfo.season_type) ? Boolean(signedRevise.join_two_num) : Boolean(signedRevise.join_one_num)"
  141. type="number"
  142. placeholder="请输入参加次数"
  143. />
  144. </view>
  145. </view>
  146. </view>
  147. <view class="dynamic_info" v-if="formList.length > 0">
  148. <view class="info_con" v-for="(item, idx) in formList" :key="item.id">
  149. <view class="label">
  150. <text>{{ item.form_name }}</text>
  151. <text class="star">*</text>
  152. </view>
  153. <radio-group @change="radioChange($event, item.id, idx)" v-if="item.style == 1">
  154. <label v-for="(temp, index) in item.form_value" :key="index">
  155. <view class="radio_con">
  156. <radio
  157. :value="temp"
  158. :checked="item.form_default === temp"
  159. />
  160. <!-- :disabled="signedInfo.sex && item.form_name === '性别'" -->
  161. <!-- :checked="index === current" -->
  162. <text>{{ temp }}</text>
  163. </view>
  164. </label>
  165. </radio-group>
  166. <checkbox-group @change="checkboxChange($event, item.id, idx)" v-if="item.style == 2">
  167. <label v-for="(temp, index) in item.form_value" :key="index">
  168. <view class="check_con">
  169. <checkbox :value="index" />
  170. <text>{{ item.form_value[index] }}</text>
  171. </view>
  172. </label>
  173. </checkbox-group>
  174. <view v-if="item.style == 3" class="label_con">
  175. <textarea
  176. v-model="item.form_default"
  177. auto-height
  178. :placeholder="'请输入' + item.form_name"
  179. :class="brand ? 'textareaIp' : ''"
  180. />
  181. </view>
  182. <template v-if="item.style === 4">
  183. <picker
  184. mode="region"
  185. @change="RegionChange($event, item.id, idx)"
  186. :value="region"
  187. >
  188. <view class="picker flexB">
  189. <view class="address_name">
  190. <text v-if="region[0] != null">
  191. {{ region.join('-') }}
  192. </text>
  193. <text v-else>省-市-区</text>
  194. </view>
  195. <text class="iconfont iconyoujiantou" style="color:#999;"></text>
  196. </view>
  197. </picker>
  198. <view>
  199. <view class="label">
  200. <text>详细地址</text>
  201. <text class="star">*</text>
  202. </view>
  203. <view class="label_con">
  204. <textarea
  205. auto-height
  206. placeholder="请输入详细地址"
  207. v-model="address"
  208. :class="brand ? 'textareaIp' : ''"
  209. />
  210. </view>
  211. </view>
  212. </template>
  213. </view>
  214. </view>
  215. </view>
  216. </view>
  217. <view class="submit_container">
  218. <view
  219. @click.stop="toSignUp"
  220. class="sign_up flexC"
  221. >
  222. 支付¥{{ userInfo.cost }} 报名
  223. </view>
  224. </view>
  225. </view>
  226. </template>
  227. <script>
  228. import { toSign, poyStatus, getFrom, subFrom, userSignUpInfo } from '../../api/sign.js';
  229. export default {
  230. data() {
  231. return {
  232. userInfo: {}, //用户信息
  233. payStatus: true, //支付按钮是否能点击
  234. tab_type: 1, //tab切换 1 信息填写 2 课程介绍 3报名须知
  235. formList: [], //问题列表
  236. params: {
  237. id: [],
  238. value: []
  239. },
  240. banner: '', //banner图
  241. region: [], //地址区域选择
  242. address: '', //详细地址
  243. state: '', //订阅消息状态
  244. brand: false, //手机品牌
  245. signedInfo: {},
  246. signedRevise: {},
  247. sexList: [0, 1],
  248. baseInfo_region: [],
  249. join_num: ''
  250. };
  251. },
  252. onLoad(options) {
  253. this.banner = options.banner;
  254. this.getFrom()
  255. },
  256. onShow() {
  257. this.getSystem();
  258. if (!uni.getStorageSync('token')) {
  259. uni.showModal({
  260. content: '登录过期,请重新登录',
  261. showCancel: false,
  262. success: res => {
  263. if (res.confirm) {
  264. uni.switchTab({
  265. url: '../index/index'
  266. });
  267. }
  268. }
  269. });
  270. }
  271. this.userInfo = uni.getStorageSync('userInfo');
  272. if (+this.userInfo.season_type === 1) {
  273. uni.setNavigationBarTitle({
  274. title: '密训营报名'
  275. });
  276. } else {
  277. uni.setNavigationBarTitle({
  278. title: '实战营报名'
  279. });
  280. }
  281. this.getFormSignedInfo()
  282. },
  283. methods: {
  284. // 报名
  285. async toSignUp() {
  286. const f = this.checkError()
  287. if(!f) return false
  288. const [, { subscriptionsSetting: { itemSettings: s } }] = await uni.getSetting({ withSubscriptions: true })
  289. const go = () => {
  290. const f_len = this.formList.length
  291. f_len ? this.formSign() : this.toSubmitNoOther()
  292. }
  293. const tmplIds = [
  294. 'BTmiw1Lr630I5ADYVX8Pzy75e4M7OmtgUBcCPVj7CKo',
  295. 'dgL9BVJ65H7aeGJuQB3J9H3EqlqYsN2GRj_wWrGLVkQ',
  296. '__-SjTtxTWmfAVwOyy7J9WXBuu8P7pJsJOXM6xCDSWw',
  297. ]
  298. const t_alen = tmplIds.length
  299. let t_len = 0
  300. if(s) {
  301. const s_k = Object.keys(s)
  302. const s_v = Object.values(s)
  303. t_len = tmplIds.filter(id => s_k.indexOf(id) !== -1).length
  304. }
  305. if(!s || t_len !== t_alen) {
  306. uni.requestSubscribeMessage({
  307. tmplIds,
  308. success(res) {
  309. const _o = Object.assign({}, res)
  310. Reflect.deleteProperty(_o, 'errMsg')
  311. const a_len = Object.values(_o).filter(s => s === 'accept').length
  312. if(a_len !== t_alen){
  313. uni.showModal({
  314. title: '提示',
  315. content: '请选择订阅服务,以便我们通知您活动信息',
  316. showCancel: false
  317. })
  318. } else {
  319. go()
  320. }
  321. },
  322. fail() {
  323. uni.showModal({
  324. title: '失败',
  325. content: '打开订阅服务失败',
  326. showCancel: false
  327. })
  328. }
  329. })
  330. } else {
  331. go()
  332. }
  333. },
  334. // 错误检测
  335. checkError() {
  336. const em = new Map([
  337. [1, '请选择您的性别'],
  338. [2, '请填写您的身份证号'],
  339. [3, '请填写真实的身份证号'],
  340. [4, '请选择您来自哪里'],
  341. [5, '请填写您的详细地址'],
  342. [6, '请填写您参加的次数'],
  343. [7, '请正确填写您参加的次数']
  344. ])
  345. const e_fn = s => {
  346. uni.showModal({
  347. title:'提示',
  348. content: em.get(s),
  349. showCancel: false
  350. })
  351. return false
  352. }
  353. const { sex, id_code, detail } = this.signedInfo
  354. if(!sex && sex !== 0) return e_fn(1)
  355. if(!id_code) return e_fn(2)
  356. const id_reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
  357. if(!id_reg.test(id_code)) return e_fn(3)
  358. const rlen = this.baseInfo_region.length
  359. if(!rlen) return e_fn(4)
  360. if(!detail) return e_fn(5)
  361. const n = this.join_num
  362. if(!n) return e_fn(6)
  363. const n_reg = /^\d{1,}$/
  364. if(!n_reg.test(n)) return e_fn(7);
  365. return true
  366. },
  367. getFormSignedInfo(cb) {
  368. userSignUpInfo().then(res => {
  369. if(res.code === 200) {
  370. this.signedInfo = res.data
  371. this.join_num = Number(this.userInfo.season_type) ? String(res.data.join_two_num) : String(res.data.join_one_num)
  372. if(res.data.province) {
  373. this.baseInfo_region = [res.data.province, res.data.city, res.data.area]
  374. }
  375. Object.keys(res.data).forEach(k => {
  376. this.signedRevise[k] = res.data[k] === 0
  377. })
  378. cb && cb(res.data)
  379. }
  380. })
  381. },
  382. //获取手机版本动态设置textarea的padinng值 解决安卓机跟ios的textarea的高度不一致
  383. getSystem() {
  384. uni.getSystemInfo({
  385. success: res => {
  386. if (res.brand == 'iPhone') {
  387. this.brand = true;
  388. }
  389. }
  390. });
  391. },
  392. RegionChange2(e) {
  393. this.baseInfo_region = e.detail.value;
  394. },
  395. // 区域选择
  396. RegionChange(e, id, idx) {
  397. this.region = e.detail.value;
  398. this.$set(this.formList[idx], 'form_default', e.detail.value);
  399. },
  400. //单选
  401. radioChange(e, id, idx) {
  402. this.$set(this.formList[idx], 'form_default', e.detail.value);
  403. },
  404. //多选
  405. checkboxChange(e, id, idx) {
  406. this.$set(this.formList[idx], 'form_default', e.detail.value);
  407. },
  408. // 获取要填写的表单名称
  409. getFrom() {
  410. getFrom().then(res => {
  411. if (res.code == 200) {
  412. let list = res.data.list;
  413. list.map(i => {
  414. this.$set(i, 'form_default', '');
  415. });
  416. this.formList = list;
  417. } else {
  418. uni.showModal({
  419. content: res.message || '请求失败',
  420. showCancel: false
  421. });
  422. }
  423. });
  424. },
  425. /*提交表单
  426. * @params id 获取的表单label的id
  427. * @params value 与表单label对应的value值
  428. * @params address 详细地址
  429. */
  430. formSign() {
  431. let that = this;
  432. let id = [];
  433. let value = [];
  434. if (this.formList) {
  435. let list = this.formList;
  436. for (var i = 0; i < list.length; i++) {
  437. if (list[i].style == 4 && !this.address) {
  438. uni.showModal({
  439. content: '详细地址不能为空',
  440. showCancel: false
  441. });
  442. return false;
  443. }
  444. if (!list[i].form_default) {
  445. uni.showModal({
  446. content: list[i].form_name + '不能为空',
  447. showCancel: false
  448. });
  449. break;
  450. }
  451. if (list[i].get_verify.value) {
  452. let reg = new RegExp(list[i].get_verify.value);
  453. if (!reg.test(list[i].form_default)) {
  454. uni.showModal({
  455. content: `${list[i].form_name}要求为: ${list[i].get_verify.name}` || list[i].form_name + '格式不正确',
  456. showCancel: false
  457. });
  458. return false;
  459. }
  460. }
  461. id.push(list[i].id);
  462. value.push(list[i].form_default);
  463. }
  464. if (id.length == this.formList.length && value.length == this.formList.length) {
  465. subFrom({
  466. id,
  467. value,
  468. address: this.address || this.signedInfo.detail,
  469. base_info: {
  470. region: this.baseInfo_region,
  471. id_code: this.signedInfo.id_code,
  472. detail: this.signedInfo.detail,
  473. sex: this.signedInfo.sex,
  474. join_one_num: Number(this.userInfo.season_type) ? this.join_num : '',
  475. join_two_num: Number(this.userInfo.season_type) ? this.join_num : ''
  476. }
  477. }).then(res => {
  478. if (res.code == 200) {
  479. this.toPay();
  480. } else {
  481. uni.showModal({
  482. content: res.message || '提交信息失败',
  483. showCancel: false
  484. });
  485. }
  486. });
  487. }
  488. }
  489. },
  490. toSubmitNoOther() {
  491. subFrom({
  492. id: [],
  493. value: [],
  494. address: this.address || this.signedInfo.detail,
  495. base_info: {
  496. region: this.baseInfo_region,
  497. id_code: this.signedInfo.id_code,
  498. detail: this.signedInfo.detail,
  499. sex: this.signedInfo.sex,
  500. join_one_num: Number(this.userInfo.season_type) ? this.join_num : '',
  501. join_two_num: Number(this.userInfo.season_type) ? this.join_num : ''
  502. }
  503. }).then(res => {
  504. if (res.code == 200) {
  505. this.toPay();
  506. } else {
  507. uni.showModal({
  508. content: res.message || '提交信息失败',
  509. showCancel: false
  510. });
  511. }
  512. });
  513. },
  514. // 支付报名
  515. toPay() {
  516. const _this = this
  517. toSign().then(res => {
  518. if (res.code === 200) {
  519. uni.requestPayment({
  520. provider: 'weixin',
  521. ...res.data,
  522. success() {
  523. _this.poyStatus();
  524. },
  525. fail() {
  526. uni.showModal({
  527. title: '失败',
  528. content: '支付失败',
  529. showCancel: false
  530. });
  531. },
  532. complete() {
  533. _this.payStatus = true;
  534. }
  535. });
  536. } else {
  537. uni.showModal({
  538. content: res.message || '报名失败',
  539. showCancel: false
  540. });
  541. _this.payStatus = true;
  542. }
  543. }).catch(e => {
  544. _this.payStatus = true;
  545. });
  546. },
  547. getTime(date) {
  548. if (date != NaN) {
  549. var time = new Date(Number(date) * 1000);
  550. var year = time.getFullYear();
  551. var month = time.getMonth() + 1 < 10 ? '0' + (time.getMonth() + 1) : time.getMonth() + 1;
  552. var day = time.getDate() < 10 ? '0' + time.getDate() : time.getDate();
  553. var nowDate = year + '年' + month + '月' + day + '日';
  554. return nowDate;
  555. }
  556. },
  557. //支付状态
  558. poyStatus() {
  559. poyStatus().then(res => {
  560. console.log(res);
  561. if (res.code == 200) {
  562. uni.redirectTo({
  563. url: '../sign_up_suce/sign_up_suce'
  564. });
  565. }
  566. });
  567. }
  568. }
  569. };
  570. </script>
  571. <style>
  572. page {
  573. height: 100%;
  574. width: 100%;
  575. background-color: #fff;
  576. }
  577. radio .wx-radio-input {
  578. border-radius: 50%;
  579. border: 2rpx solid #999;
  580. background: transparent !important;
  581. width: 40rpx;
  582. height: 40rpx;
  583. }
  584. radio .wx-radio-input.wx-radio-input-checked::before {
  585. border-radius: 100%;
  586. width: 60%;
  587. height: 60%;
  588. content: '';
  589. background-color: #ea4a42;
  590. transform: translate(-50%, -50%) scale(1);
  591. -webkit-transform: translate(-50%, -50%) scale(1);
  592. }
  593. radio .wx-radio-input.wx-radio-input-checked {
  594. border-color: #ea4a42;
  595. }
  596. checkbox .wx-checkbox-input {
  597. border: 2rpx solid #999;
  598. background: transparent !important;
  599. width: 40rpx;
  600. height: 40rpx;
  601. }
  602. checkbox .wx-checkbox-input.wx-checkbox-input-checked {
  603. border-color: #ea4a42;
  604. }
  605. checkbox .wx-checkbox-input.wx-checkbox-input-checked::before {
  606. width: 60%;
  607. height: 60%;
  608. background: #ea4a42;
  609. content: '';
  610. transform: translate(-50%, -50%) scale(1);
  611. -webkit-transform: translate(-50%, -50%) scale(1);
  612. }
  613. </style>
  614. <style lang="scss" scoped>
  615. .block {
  616. height: 15rpx;
  617. width: 100%;
  618. background-color: #f5f5f5;
  619. }
  620. .page_body {
  621. padding-bottom: 200rpx;
  622. overflow-x: hidden;
  623. .banner_container {
  624. width: 730rpx;
  625. height: 369rpx;
  626. margin: 0 auto;
  627. .banner_img {
  628. width: 100%;
  629. height: 100%;
  630. }
  631. }
  632. .season {
  633. width: 100%;
  634. padding: 20rpx 30rpx;
  635. box-sizing: box-sizing;
  636. .title {
  637. display: flex;
  638. align-items: center;
  639. font-size: 36rpx;
  640. color: #333;
  641. font-weight: 500;
  642. image {
  643. height: 44rpx;
  644. width: 44rpx;
  645. font-size: 32rpx;
  646. color: #333;
  647. margin-right: 17rpx;
  648. }
  649. }
  650. .course_info {
  651. display: flex;
  652. .count {
  653. font-weight: bold;
  654. font-size: 28rpx;
  655. color: #ea4a41;
  656. }
  657. }
  658. .course_info > view,
  659. .course_time {
  660. display: flex;
  661. align-items: center;
  662. font-size: 26rpx;
  663. color: #333;
  664. &::before {
  665. content: '';
  666. display: block;
  667. width: 10rpx;
  668. height: 10rpx;
  669. border-radius: 50%;
  670. margin-right: 14rpx;
  671. background-color: #ea4a41;
  672. }
  673. }
  674. .course_time,
  675. .course_info {
  676. margin-top: 33rpx;
  677. }
  678. }
  679. .sign_info {
  680. width: 100%;
  681. background: #fff;
  682. .user_con {
  683. width: 90%;
  684. margin: 0 auto;
  685. .user_title {
  686. font-size: 32rpx;
  687. color: #333;
  688. padding: 35rpx 0rpx;
  689. text-align: center;
  690. font-weight: bold;
  691. }
  692. .label {
  693. font-size: 28rpx;
  694. margin: 30rpx 0 20rpx;
  695. .star {
  696. color: #f00;
  697. margin-left: 10rpx;
  698. font-size: 40rpx;
  699. }
  700. }
  701. .label_con {
  702. font-size: 32rpx;
  703. font-weight: 600;
  704. padding-bottom: 15rpx;
  705. image {
  706. height: 40rpx;
  707. width: 40rpx;
  708. margin-right: 10rpx;
  709. flex-shrink: 0;
  710. }
  711. }
  712. textarea {
  713. width: 100%;
  714. padding: 10rpx 0;
  715. }
  716. .textareaIp {
  717. padding: 0;
  718. }
  719. .info_con {
  720. border-bottom: 1rpx solid #bfbfbf;
  721. .picker {
  722. display: flex;
  723. align-items: center;
  724. min-height: 82rpx;
  725. border-bottom: 1rpx solid #bfbfbf;
  726. .address_name {
  727. width: 90%;
  728. text {
  729. font-size: 32rpx;
  730. font-weight: 600;
  731. }
  732. }
  733. image {
  734. height: 37rpx;
  735. width: 39rpx;
  736. }
  737. }
  738. .check_con,
  739. .radio_con {
  740. width: 100%;
  741. display: flex;
  742. justify-content: flex-start;
  743. align-items: center;
  744. padding-bottom: 15rpx;
  745. text {
  746. font-size: 32rpx;
  747. font-weight: 600;
  748. margin-left: 20rpx;
  749. }
  750. }
  751. }
  752. }
  753. }
  754. .submit_container {
  755. width: 100%;
  756. position: fixed;
  757. left: 0;
  758. bottom: 0;
  759. z-index: 9999;
  760. height: 118rpx;
  761. background-color: #fff;
  762. .sign_up {
  763. width: 690rpx;
  764. height: 90rpx;
  765. margin: 0 auto;
  766. background-color: #ea4a41;
  767. font-size: 36rpx;
  768. border-radius: 45rpx;
  769. color: #ffffff;
  770. }
  771. }
  772. }
  773. </style>