register.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937
  1. <template>
  2. <view class="container register" :style="{ paddingTop: CustomBar + 'px' }">
  3. <cu-custom :navbar-data="nvabarData" @navigateBack="modal = true"></cu-custom>
  4. <view class="register-tabs">
  5. <view class="tabs-item" :class="stepNum === 0 ? 'active' : ''">
  6. <text class="iconfont icon-1_round_solid"></text> <text>账户信息</text>
  7. </view>
  8. <view class="tabs-item line"> <text class="iconfont icon-hr"></text> </view>
  9. <view class="tabs-item" :class="stepNum === 1 ? 'active' : ''">
  10. <text class="iconfont icon-2_round_solid"></text> <text>机构信息</text>
  11. </view>
  12. </view>
  13. <view class="register-main clearfix" v-if="stepNum === 0">
  14. <view class="register-row clearfix">
  15. <view class="register-from">
  16. <view class="label">手机号:</view>
  17. <input
  18. class="row-input"
  19. type="number"
  20. name="input"
  21. v-model="params.bindMobile"
  22. placeholder="请输入手机号"
  23. maxlength="11"
  24. />
  25. </view>
  26. </view>
  27. <view class="register-row clearfix">
  28. <view class="register-from">
  29. <view class="label">短信验证码:</view>
  30. <input
  31. class="row-input code"
  32. type="text"
  33. v-model="params.smsCode"
  34. placeholder="请输入验证码"
  35. maxlength="6"
  36. />
  37. <view class="row-btn" :class="[isMobileDisabled ? 'disabled' : '']">
  38. <button
  39. class="row-input"
  40. type="button"
  41. @click.stop="getMobileCodeFn"
  42. :disabled="isMobileDisabled"
  43. >
  44. {{ mobileCodeText }}
  45. </button>
  46. </view>
  47. </view>
  48. </view>
  49. <view class="register-row clearfix">
  50. <view class="register-from">
  51. <view class="label">登录密码:</view>
  52. <input
  53. class="row-input"
  54. type="password"
  55. name="input"
  56. v-model="params.password"
  57. placeholder="密码必须为8-16位字母数字组合"
  58. maxlength="16"
  59. />
  60. </view>
  61. </view>
  62. <view class="register-row clearfix">
  63. <view class="register-from">
  64. <view class="label">确认密码:</view>
  65. <input
  66. class="row-input"
  67. type="password"
  68. name="input"
  69. v-model="params.passWordConfirm"
  70. placeholder="请确认密码"
  71. maxlength="16"
  72. />
  73. </view>
  74. </view>
  75. <view class="register-main clearfix" style="margin-top: 180rpx;">
  76. <view class="register-row ">
  77. <view class="register-btn sub" @click.stop="handleCheckRegist">下一步</view>
  78. </view>
  79. </view>
  80. </view>
  81. <view class="register-main clearfix last" v-if="stepNum === 1">
  82. <view class="register-row clearfix">
  83. <view class="register-from">
  84. <view class="label"><text>*</text>联系人</view>
  85. <input
  86. class="row-input"
  87. type="text"
  88. v-model="params.linkMan"
  89. placeholder="请输入联系姓名"
  90. placeholder-class="placeholder"
  91. maxlength="6"
  92. />
  93. </view>
  94. </view>
  95. <view class="register-row clearfix">
  96. <view class="register-from">
  97. <view class="label"><text>*</text>机构名称</view>
  98. <input
  99. class="row-input"
  100. type="text"
  101. v-model="params.name"
  102. placeholder="请输入您的机构名称"
  103. placeholder-class="placeholder"
  104. maxlength="30"
  105. />
  106. </view>
  107. </view>
  108. <view class="register-row clearfix">
  109. <view class="register-from" @click="showMulLinkageThreePicker">
  110. <view class="label"><text>*</text>机构地址</view>
  111. <text class="row-input" :class="handleAddress === '请选择机构所在地区' ? 'none' : ''">
  112. {{ handleAddress }}
  113. </text>
  114. <text class="iconfont icon-xiangyou"></text>
  115. </view>
  116. </view>
  117. <view class="register-row text-textarea clearfix">
  118. <view class="textarea" v-if="isShowInput" placeholder-class="placeholder" @click="showTextareaFocus">{{
  119. params.address ? params.address : '详细地址:如道路、门牌号、小区等'
  120. }}</view>
  121. <textarea
  122. v-else
  123. class="textarea"
  124. type="text"
  125. v-model="params.address"
  126. placeholder="详细地址:如道路、门牌号、小区等"
  127. placeholder-class="placeholder"
  128. maxlength="25"
  129. @input="onTextareaInput"
  130. @focus="textareaFocus"
  131. @blur="hideTextareaFocus"
  132. :class="isShowInput ? '' : ''"
  133. />
  134. </view>
  135. <view class="register-row clearfix">
  136. <view class="register-picture">
  137. <view class="label"><text>*</text>营业执照</view>
  138. <view class="upload-picture">
  139. <view class="upload-none" v-if="!params.businessLicense" @click="uploadFileImage(1)">
  140. <text class="iconfont icon-shangchuantupian"></text> <text>选择图片</text>
  141. </view>
  142. <view class="upload-image" v-else>
  143. <image
  144. :src="params.businessLicense"
  145. mode=""
  146. @click="handleViewImage(params.businessLicense)"
  147. ></image>
  148. <view class="upload-del" @click="handleDelete(1)">
  149. <text class="iconfont icon-shanchu"></text>
  150. </view>
  151. </view>
  152. </view>
  153. </view>
  154. </view>
  155. <view class="register-row clearfix">
  156. <view class="register-picture">
  157. <view class="label"><text>*</text>医疗执业许可证</view>
  158. <view class="upload-picture">
  159. <view class="upload-none" v-if="!params.medicalPracticeLicense" @click="uploadFileImage(3)">
  160. <text class="iconfont icon-shangchuantupian"></text> <text>选择图片</text>
  161. </view>
  162. <view class="upload-image" v-else>
  163. <image
  164. :src="params.medicalPracticeLicense"
  165. mode=""
  166. @click="handleViewImage(params.medicalPracticeLicense)"
  167. ></image>
  168. <view class="upload-del" @click="handleDelete(3)">
  169. <text class="iconfont icon-shanchu"></text>
  170. </view>
  171. </view>
  172. </view>
  173. </view>
  174. </view>
  175. <view class="register-row fixed">
  176. <view class="register-agree" @tap.stop="handleAgreeCheck">
  177. <text class="checkbox iconfont" :class="[isCheck ? 'icon-yixuanze' : 'icon-weixuanze']"></text>
  178. 我已阅读并同意
  179. <text @click.stop="this.$api.navigateTo('/pages/service/service?id=1045&title=用户协议')"
  180. >《用户协议》</text
  181. >和
  182. <text @click.stop="this.$api.navigateTo('/pages/service/service?id=1046&title=隐私权政策')"
  183. >《隐私权政策》</text
  184. >
  185. </view>
  186. <view class="register-btn sub" @click.stop="handleConfirm">提交审核</view>
  187. <view class="register-btn sub none" @click.stop="handleStep(0)">上一步</view>
  188. </view>
  189. </view>
  190. <!-- 地址 -->
  191. <mpvue-city-picker
  192. :themeColor="themeColor"
  193. ref="mpvueCityPicker"
  194. :pickerValueDefault="cityPickerValueDefault"
  195. @onCancel="onCancel"
  196. @onConfirm="onConfirm"
  197. />
  198. <!-- 提交审核提示弹窗 -->
  199. <tui-modal :show="modal1" @cancel="modal1 = false" :custom="true" fadeIn>
  200. <view class="tui-modal-custom">
  201. <view class="tui-prompt-title">提交成功!</view>
  202. <view class="tui-modal-custom-text">您的资料将会在1-3个工作日内进行审核,审核通过后才能进行采购。</view>
  203. <view class="tui-button-custom" @click="handleClick1"> 确定 </view>
  204. </view>
  205. </tui-modal>
  206. <!-- 弹窗提示 -->
  207. <tui-modal
  208. :show="modal"
  209. @click="handleClick"
  210. @cancel="modal = false"
  211. :content="'注册尚未完成,确定放弃注册吗?'"
  212. :button="modalButton"
  213. color="#333"
  214. :size="32"
  215. shape="circle"
  216. :maskClosable="false"
  217. />
  218. </view>
  219. </template>
  220. <script>
  221. import { mapState, mapMutations } from 'vuex'
  222. import wxLogin from '@/common/config/wxLogin.js'
  223. import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue'
  224. import { uploadFileImage } from '@/services/public.js'
  225. export default {
  226. components: {
  227. mpvueCityPicker
  228. },
  229. data() {
  230. return {
  231. CustomBar: this.CustomBar, // 顶部导航栏高度
  232. nvabarData: {
  233. //顶部自定义导航
  234. showCapsule: 1, // 是否显示左上角图标 1表示显示 0表示不显示,
  235. showSearch: 0,
  236. title: '机构注册', // 导航栏 中间的标题
  237. haveBack: true,
  238. textLeft: this.$store.state.isIphone
  239. },
  240. isPreviewImage: false, // 预览图片开关
  241. modal1: false, // 提交弹窗控制
  242. modal: false,
  243. modalButton: [
  244. {
  245. text: '取消',
  246. type: 'gray',
  247. plain: true //是否空心
  248. },
  249. {
  250. text: '确认',
  251. customStyle: {
  252. color: '#fff',
  253. bgColor: '#F3B574'
  254. },
  255. plain: false
  256. }
  257. ],
  258. stepNum: 0,
  259. textareaFocus: false,
  260. isMobileDisabled: false, //手机验证码按钮控制
  261. mobilCount: '', //倒计时
  262. mobileCodeText: '获取验证码',
  263. mobilTime: null,
  264. params: {
  265. bindMobile: '',
  266. password: '',
  267. passWordConfirm: '',
  268. smsCode: '',
  269. avatarUrl: '',
  270. nickName: '',
  271. unionId: '',
  272. name: '',
  273. provinceId: '',
  274. cityId: '',
  275. townId: '',
  276. address: '',
  277. isAgreed: 0,
  278. organizeType: 1, //外部商城机构类型 0内部机构 1外部机构
  279. shopPhoto: '',
  280. businessLicense: '',
  281. medicalPracticeLicense: ''
  282. },
  283. codeParams: {
  284. mobile: '',
  285. isCheckCaptcha: 1,
  286. activateCodeType: 8,
  287. platformType: 2
  288. },
  289. handleAddress: '请选择机构所在地区',
  290. isCheckedCode: false,
  291. isSubLoading: false,
  292. isCheck: false //是否勾选协议
  293. }
  294. },
  295. onLoad(option) {},
  296. computed: {
  297. ...mapState(['isWxAuthorize'])
  298. },
  299. methods: {
  300. ...mapMutations(['login', 'wxLogin']),
  301. // 切换
  302. handleStep(step) {
  303. this.stepNum = step
  304. },
  305. async handleCheckRegist() {
  306. if (this.isCheckedCode) {
  307. this.stepNum = 1
  308. } else {
  309. try {
  310. this.handleCheck()
  311. await this.UserService.checkRegisterClub(this.params)
  312. this.isCheckedCode = true
  313. this.stepNum = 1
  314. } catch (error) {
  315. this.$util.msg(error.msg, 2000)
  316. }
  317. }
  318. },
  319. handleCheck() {
  320. if (this.params.bindMobile == '') {
  321. this.$util.msg('请输入手机号', 2000)
  322. return
  323. }
  324. if (!this.$reg.isMobile(this.params.bindMobile)) {
  325. this.$util.msg('手机格式不正确', 2000)
  326. return
  327. }
  328. if (this.params.smsCode == '') {
  329. this.$util.msg('请输入手机验证码', 2000)
  330. return
  331. }
  332. if (!this.$reg.isMobileCode(this.params.smsCode)) {
  333. this.$util.msg('验证码格式不正确', 2000)
  334. return
  335. }
  336. if (this.params.password == '') {
  337. this.$util.msg('请输入密码', 2000)
  338. return
  339. }
  340. if (!this.$reg.checkPwd(this.params.password)) {
  341. this.$util.msg('密码必须为8-16位字母数字的组合', 2000)
  342. return
  343. }
  344. if (this.params.passWordConfirm == '') {
  345. this.$util.msg('请再次确认密码', 2000)
  346. return
  347. }
  348. if (this.params.passWordConfirm !== this.params.password) {
  349. this.$util.msg('两次输入的密码不一致', 2000)
  350. return
  351. }
  352. },
  353. handleConfirm() {
  354. // 提交审核
  355. if (this.isSubLoading) {
  356. return
  357. }
  358. if (this.params.name == '') {
  359. this.$util.msg('请输入机构名称', 2000)
  360. return
  361. }
  362. if (this.params.townId == '') {
  363. this.$util.msg('请选择机构地址', 2000)
  364. return
  365. }
  366. if (this.params.addressDetail == '') {
  367. this.$util.msg('请填写机构详细地址', 2000)
  368. return
  369. }
  370. if (this.params.businessLicense == '') {
  371. this.$util.msg('请上传营业执照', 2000)
  372. return
  373. }
  374. if (this.params.medicalPracticeLicense == '') {
  375. this.$util.msg('请上传医疗执业许可证', 2000)
  376. return
  377. }
  378. if (this.params.isAgreed == 0) {
  379. this.$util.msg('请勾选同意协议', 2000)
  380. return
  381. }
  382. this.params.unionId = uni.getStorageSync('unionId')
  383. this.userProfile()
  384. },
  385. userProfile() {
  386. //获取用户微信个人信息
  387. const self = this
  388. wx.getUserProfile({
  389. desc: '丽格集采商城获取您的信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  390. success(res) {
  391. console.log('微信获取用户信息新API', res)
  392. self.wxLogin(res.userInfo)
  393. self.params.nickName = res.userInfo.nickName
  394. self.params.avatarUrl = res.userInfo.avatarUrl
  395. self.userAccountRegister(self.params)
  396. },
  397. fail(error) {
  398. console.log('error', error)
  399. self.$util.msg('授权失败', 2000)
  400. }
  401. })
  402. },
  403. async userAccountRegister(params) {
  404. // 注册
  405. try {
  406. this.isSubLoading = true
  407. await this.UserService.userAccountRegister(params)
  408. wxLogin.wxLoginAuthorize()
  409. this.isSubLoading = false
  410. this.modal1 = true
  411. } catch (error) {
  412. this.$util.msg(error.msg, 2000)
  413. this.isSubLoading = false
  414. }
  415. },
  416. storeUpdataeStatus(data) {
  417. uni.setStorageSync('token', data.token)
  418. this.$store.commit('updateStatus', data)
  419. this.login(data)
  420. },
  421. getMobileCodeFn() {
  422. // 点击获取短信验证码
  423. if (this.params.bindMobile == '') {
  424. this.$util.msg('请输入手机号', 2000)
  425. return
  426. }
  427. if (!this.$reg.isMobile(this.params.bindMobile)) {
  428. this.$util.msg('请输入正确的手机号', 2000)
  429. return
  430. }
  431. this.codeParams.mobile = this.params.bindMobile
  432. this.getMobileCode(this.codeParams)
  433. },
  434. async getMobileCode(params) {
  435. //获取短信
  436. try {
  437. this.isMobileDisabled = true
  438. await this.PublicService.GetRegisterMobileCode(params)
  439. this.$util.msg('验证短信已发送', 2000)
  440. const TIME_COUNT = 60
  441. if (!this.mobilTime) {
  442. this.mobilCount = TIME_COUNT
  443. this.isMobileDisabled = true
  444. this.mobilTime = setInterval(() => {
  445. if (this.mobilCount > 1 && this.mobilCount <= TIME_COUNT) {
  446. this.mobilCount--
  447. this.mobileCodeText = this.mobilCount + 's重新发送'
  448. } else {
  449. this.isMobileDisabled = false
  450. clearInterval(this.mobilTime)
  451. this.mobilTime = null
  452. this.mobileCodeText = '获取验证码'
  453. }
  454. }, 1000)
  455. }
  456. } catch (error) {
  457. this.$util.msg(error.msg, 2000)
  458. this.isMobileDisabled = false
  459. }
  460. },
  461. // 三级联动选择
  462. showMulLinkageThreePicker() {
  463. this.isShowInput = true
  464. this.$refs.mpvueCityPicker.show()
  465. },
  466. onConfirm(e) {
  467. this.handleAddress = e.name
  468. this.params.townId = e.townCode
  469. this.params.cityId = e.cityCode
  470. this.params.provinceId = e.provinceCode
  471. },
  472. onTextareaInput(e) {
  473. //文本框获取焦点
  474. this.params.address = e.detail.value
  475. },
  476. showTextareaFocus() {
  477. //文本框获取焦点
  478. this.isShowInput = false
  479. this.textareaFocus = true
  480. },
  481. hideTextareaFocus() {
  482. //文本框失去焦点
  483. this.isShowInput = true
  484. this.textareaFocus = false
  485. },
  486. //上传
  487. async uploadFileImage(type) {
  488. try {
  489. const res = await uploadFileImage()
  490. const data = JSON.parse(res.data).data
  491. switch (type) {
  492. case 1:
  493. this.params.businessLicense = data
  494. break
  495. case 2:
  496. this.params.shopPhoto = data
  497. break
  498. case 3:
  499. this.params.medicalPracticeLicense = data
  500. break
  501. }
  502. } catch (error) {
  503. console.log('error', error)
  504. }
  505. },
  506. //预览
  507. handleViewImage(url) {
  508. this.isPreviewImage = true
  509. let mentuzArray = []
  510. mentuzArray.push(url)
  511. uni.previewImage({
  512. urls: mentuzArray,
  513. current: 0
  514. })
  515. },
  516. //删除
  517. handleDelete(type) {
  518. switch (type) {
  519. case 1:
  520. this.$util.modal('', '确定删除营业执照图片吗?', '确定', '取消', true, () => {
  521. this.params.businessLicense = ''
  522. })
  523. break
  524. case 2:
  525. this.$util.modal('', '确定删除门头照图片吗?', '确定', '取消', true, () => {
  526. this.params.shopPhoto = ''
  527. })
  528. break
  529. case 3:
  530. this.$util.modal('', '确定删除资质图片吗?', '确定', '取消', true, () => {
  531. this.params.medicalPracticeLicense = ''
  532. })
  533. break
  534. }
  535. },
  536. handleAgreeCheck() {
  537. this.isCheck = !this.isCheck
  538. if (this.isCheck) {
  539. this.params.isAgreed = 1
  540. } else {
  541. this.params.isAgreed = 0
  542. }
  543. },
  544. handleClick(e) {
  545. //确认
  546. if (e.index == 1) {
  547. uni.navigateBack()
  548. }
  549. this.modal = false
  550. },
  551. handleClick1() {
  552. setTimeout(() => {
  553. this.$api.switchTabTo('/pages/tabBar/user/user')
  554. }, 1000)
  555. }
  556. },
  557. onShow() {
  558. if (this.isPreviewImage) {
  559. this.isPreviewImage = false
  560. return
  561. }
  562. }
  563. }
  564. </script>
  565. <style lang="scss">
  566. .register {
  567. width: 100%;
  568. height: 100%;
  569. box-sizing: border-box;
  570. background-size: contain;
  571. .register-tabs {
  572. width: 100%;
  573. height: 40rpx;
  574. box-sizing: border-box;
  575. padding: 0 160rpx;
  576. margin: 110rpx 0 40rpx 0;
  577. .tabs-item {
  578. float: left;
  579. line-height: 40rpx;
  580. font-size: $font-size-30;
  581. color: #b2b2b2;
  582. .iconfont {
  583. font-size: 40rpx;
  584. }
  585. &.active {
  586. color: $color-system;
  587. }
  588. &.line {
  589. width: 50rpx;
  590. height: 40rpx;
  591. margin: 0 20rpx;
  592. .iconfont {
  593. font-size: 58rpx;
  594. }
  595. }
  596. }
  597. }
  598. .register-main {
  599. width: 100%;
  600. height: auto;
  601. position: relative;
  602. &.last {
  603. padding-bottom: 366rpx;
  604. }
  605. .register-consult {
  606. width: 110rpx;
  607. height: 68rpx;
  608. background: linear-gradient(223deg, rgba(225, 86, 21, 0.6) 0%, rgba(225, 86, 10, 0.3) 100%);
  609. border-radius: 34rpx 0 0 34rpx;
  610. position: absolute;
  611. right: 0;
  612. bottom: 120rpx;
  613. text-align: left;
  614. line-height: 68rpx;
  615. padding-left: 20rpx;
  616. .icon-kefunv {
  617. font-size: 48rpx;
  618. color: #31313b;
  619. float: left;
  620. }
  621. .text {
  622. font-size: $font-size-24;
  623. display: block;
  624. float: left;
  625. width: 60rpx;
  626. line-height: 30rpx;
  627. color: #ffffff;
  628. margin-top: 6rpx;
  629. }
  630. }
  631. &.detailed {
  632. padding-bottom: 330rpx;
  633. }
  634. .register-row {
  635. width: 100%;
  636. height: auto;
  637. padding: 0 24rpx;
  638. margin-bottom: 30rpx;
  639. box-sizing: border-box;
  640. &.fixed {
  641. position: fixed;
  642. bottom: 0;
  643. left: 0;
  644. z-index: 999;
  645. background-color: #ffffff;
  646. padding: 24rpx;
  647. }
  648. &.none {
  649. margin-bottom: 0;
  650. }
  651. .register-from {
  652. width: 100%;
  653. height: 80rpx;
  654. background: #ffffff;
  655. position: relative;
  656. border-bottom: 1px solid #e1e1e1;
  657. .label {
  658. text-align: left;
  659. font-size: $font-size-28;
  660. color: #666666;
  661. line-height: 80rpx;
  662. float: left;
  663. text {
  664. color: #f85050;
  665. }
  666. }
  667. .row-input {
  668. width: 440rpx;
  669. padding-left: 24rpx;
  670. font-size: $font-size-28;
  671. color: $text-color;
  672. line-height: 80rpx;
  673. float: left;
  674. height: 80rpx;
  675. box-sizing: border-box;
  676. &.none {
  677. color: #999999;
  678. }
  679. &.code {
  680. width: 330rpx;
  681. }
  682. }
  683. .row-btn {
  684. width: 180rpx;
  685. height: 64rpx;
  686. float: left;
  687. background: $btn-confirm;
  688. padding: 0;
  689. border-radius: 32rpx;
  690. .row-input {
  691. width: 180rpx;
  692. height: 64rpx;
  693. line-height: 64rpx;
  694. padding: 0;
  695. color: #ffffff;
  696. background: $btn-confirm;
  697. text-align: center;
  698. border-radius: 32rpx;
  699. font-size: 24rpx;
  700. &.none {
  701. background: #f7f7f7;
  702. }
  703. }
  704. &.disabled {
  705. background: #f7f7f7;
  706. .row-input {
  707. background: #f7f7f7;
  708. color: #999999;
  709. font-size: 24rpx;
  710. }
  711. }
  712. }
  713. &.btn {
  714. margin-top: 0;
  715. }
  716. }
  717. .icon-xiangyou {
  718. width: 88rpx;
  719. height: 88rpx;
  720. position: absolute;
  721. right: 0;
  722. top: 0;
  723. line-height: 88rpx;
  724. text-align: center;
  725. }
  726. &.text-textarea {
  727. background: #ffffff;
  728. .textarea {
  729. width: 100%;
  730. height: 120rpx;
  731. padding: 24rpx 0;
  732. font-size: $font-size-28;
  733. color: $text-color;
  734. z-index: 1;
  735. border-bottom: 1px solid #e1e1e1;
  736. }
  737. .textarea.hide {
  738. opacity: 0;
  739. }
  740. .textarea.show {
  741. color: #999999;
  742. }
  743. }
  744. .register-agree {
  745. text-align: center;
  746. .checkbox {
  747. margin: 0 6rpx 0 0;
  748. color: #999999;
  749. font-size: $font-size-26;
  750. &.icon-yixuanze {
  751. color: $color-system;
  752. }
  753. }
  754. font-size: $font-size-22;
  755. line-height: 44rpx;
  756. color: #999999;
  757. text {
  758. color: #1890f9;
  759. }
  760. }
  761. }
  762. .register-picture {
  763. width: 100%;
  764. height: auto;
  765. float: left;
  766. .label {
  767. float: left;
  768. font-size: $font-size-28;
  769. color: $text-color;
  770. line-height: 80rpx;
  771. width: 100%;
  772. text-align: left;
  773. text {
  774. color: #f85050;
  775. }
  776. }
  777. .upload-picture {
  778. float: left;
  779. height: auto;
  780. .upload-none {
  781. width: 210rpx;
  782. height: 210rpx;
  783. border: 1px dashed #b2b2b2;
  784. border-radius: 10rpx;
  785. display: flex;
  786. justify-content: center;
  787. flex-direction: column;
  788. align-items: center;
  789. font-size: $font-size-28;
  790. color: #b2b2b2;
  791. line-height: 50rpx;
  792. .iconfont {
  793. font-size: $font-size-28;
  794. }
  795. }
  796. .upload-image {
  797. width: 210rpx;
  798. height: 210rpx;
  799. border-radius: 10rpx;
  800. margin: 0 20rpx;
  801. position: relative;
  802. image {
  803. width: 210rpx;
  804. height: 210rpx;
  805. border-radius: 10rpx;
  806. }
  807. .upload-del {
  808. width: 40rpx;
  809. height: 40rpx;
  810. position: absolute;
  811. top: -20rpx;
  812. right: -20rpx;
  813. line-height: 40rpx;
  814. text-align: center;
  815. .iconfont {
  816. font-size: $font-size-40;
  817. color: #f85050;
  818. }
  819. }
  820. }
  821. }
  822. }
  823. .register-input {
  824. width: 654rpx;
  825. height: 40rpx;
  826. padding: 24rpx;
  827. margin: 0 auto;
  828. margin-bottom: 60rpx;
  829. background: #f7f7f7;
  830. border-radius: 14rpx;
  831. .input {
  832. width: 100%;
  833. height: 100%;
  834. background: #f7f7f7;
  835. font-size: $font-size-28;
  836. line-height: 40rpx;
  837. color: #333333;
  838. border-radius: 14rpx;
  839. }
  840. }
  841. .register-btn {
  842. width: 100%;
  843. height: 88rpx;
  844. border-radius: 44rpx;
  845. font-size: $font-size-28;
  846. line-height: 88rpx;
  847. color: #ffffff;
  848. margin: 24rpx auto;
  849. text-align: center;
  850. background: $btn-confirm;
  851. &.none {
  852. background: #fff4e6;
  853. color: $color-system;
  854. margin-top: 0;
  855. }
  856. }
  857. }
  858. }
  859. .tui-alert-box {
  860. width: 100%;
  861. height: 100%;
  862. display: flex;
  863. align-items: center;
  864. justify-content: center;
  865. flex-direction: column;
  866. position: fixed;
  867. left: 0;
  868. top: 0;
  869. opacity: 1;
  870. background: rgba(51, 51, 51, 0.5);
  871. z-index: 99999;
  872. .tui-alert-content {
  873. width: 580rpx;
  874. height: 324rpx;
  875. border-radius: 16rpx;
  876. background-color: #ffffff;
  877. position: absolute;
  878. top: 0;
  879. bottom: 0;
  880. right: 0;
  881. left: 0;
  882. margin: auto;
  883. .tui-alert-main {
  884. width: 100%;
  885. height: 234rpx;
  886. box-sizing: border-box;
  887. padding: 60rpx 30rpx;
  888. line-height: 60rpx;
  889. font-size: $font-size-26;
  890. color: #666666;
  891. text-align: justify;
  892. .red {
  893. color: #f3b574;
  894. }
  895. }
  896. .tui-alert-btn {
  897. width: 100%;
  898. height: 90rpx;
  899. box-sizing: border-box;
  900. line-height: 90rpx;
  901. background: $btn-confirm;
  902. color: #ffffff;
  903. text-align: center;
  904. font-size: $font-size-28;
  905. border-radius: 0 0 16rpx 16rpx;
  906. }
  907. }
  908. }
  909. .tui-modal-custom {
  910. text-align: center;
  911. }
  912. .tui-modal-custom-text {
  913. font-size: 30rpx;
  914. color: #333;
  915. padding: 30rpx 0 50rpx;
  916. }
  917. .tui-button-custom {
  918. width: 420rpx;
  919. height: 84rpx;
  920. line-height: 84rpx;
  921. text-align: center;
  922. color: #ffffff;
  923. background: $btn-confirm;
  924. font-size: $font-size-28;
  925. margin: 15rpx auto;
  926. border-radius: 42rpx;
  927. }
  928. .tui-prompt-title {
  929. padding-bottom: 20rpx;
  930. font-size: 34rpx;
  931. }
  932. </style>