makeOut.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756
  1. <template>
  2. <view class="makeOut">
  3. <view class="content signUp-info">
  4. <view class="title">
  5. {{activity.activityName}}
  6. </view>
  7. <view class="time">
  8. 活动时间:{{activity.activityStartTime}} 至 {{activity.activityEndTime}}
  9. </view>
  10. <view class="signUp-box">
  11. <view class="label-box">
  12. <view class="label">
  13. 报名人数
  14. </view>
  15. <view class="desc">
  16. {{activity.limited?`(最多${activity.limited}人)`:'(不限制)'}}
  17. </view>
  18. </view>
  19. <view class="num-box">
  20. <view class="btn" :class="[num == 1?'disabled':'']" @click="add(-1)">
  21. -
  22. </view>
  23. <view class="num">
  24. {{num}}
  25. </view>
  26. <view class="btn" :class="[num == activity.limited?'disabled':'']" @click="add(1)">
  27. +
  28. </view>
  29. </view>
  30. </view>
  31. </view>
  32. <view class="content" v-for="(test,d) in modelQuery">
  33. <u--form
  34. labelPosition="left"
  35. :model="modelQuery[d]"
  36. :rules="rules"
  37. :ref="'uForm'+d"
  38. labelWidth="150rpx"
  39. >
  40. <template v-for="(item,index) in setQuery.data">
  41. <u-form-item
  42. :label="item.dataName"
  43. :prop="'data_'+index+'_value'"
  44. :borderBottom="index != (setQuery.data.length-1)"
  45. :required="item.requiredEnable == 1?true:false"
  46. ref="item1"
  47. >
  48. <u--input v-if="item.dataType == 1" :placeholder="'请输入'+item.dataName" :maxlength="getLength(item)" v-model="modelQuery[d][`data_${index}_value`]" border="none"></u--input>
  49. <u-textarea v-else-if="item.dataType == 2" v-model="modelQuery[d][`data_${index}_value`]" border="surround" :maxlength="400" count ></u-textarea>
  50. <u-radio-group v-model="modelQuery[d][`data_${index}_value`]" v-else-if="item.dataType == 3">
  51. <u-radio labelSize="34rpx" v-for="i in item.content" :key="i" :name="i" :label="i"></u-radio>
  52. </u-radio-group>
  53. <!-- <template v-else-if="item.dataType == 3">
  54. <u--input @focus="handeChoose" :placeholder="'请选择'+item.dataName" v-model="modelQuery[d][`data_${index}_value`]" border="none"></u--input>
  55. <u-picker :show="show" ref="uPicker" closeOnClickOverlay :columns="[item.content]" @cancel="cancel" @confirm="confirm($event,d,index)"></u-picker>
  56. </template> -->
  57. <u-checkbox-group
  58. v-model="modelQuery[d][`data_${index}_value`]"
  59. v-else-if="item.dataType == 4"
  60. >
  61. <u-checkbox
  62. labelSize="34rpx"
  63. iconSize="34rpx"
  64. v-for="i in item.content"
  65. :key="index"
  66. :label="i"
  67. :name="i"
  68. >
  69. </u-checkbox>
  70. </u-checkbox-group>
  71. <u-upload
  72. width="200rpx"
  73. height="200rpx"
  74. v-else-if="item.dataType == 5"
  75. :fileList="modelQuery[d][`data_${index}_value`]"
  76. @afterRead="afterRead($event,d,index)"
  77. @delete="deletePic($event,modelQuery[d][`data_${index}_value`])"
  78. @oversize="oversize($event,item)"
  79. name="1"
  80. :maxSize="item.size*1024*1024"
  81. multiple
  82. :maxCount="item.num"
  83. ></u-upload>
  84. </u-form-item>
  85. </template>
  86. </u--form>
  87. </view>
  88. <view class="btn-box">
  89. <view class="left">
  90. <view class="num">
  91. 共{{num}}人
  92. </view>
  93. <view class="total">
  94. 合计 <view class="price-box">
  95. <view class="unit">
  96. </view>
  97. <view class="price">
  98. {{total}}
  99. </view>
  100. </view>
  101. </view>
  102. </view>
  103. <button class="btn" @click="handleSignUp" :loading="loading">
  104. 立即报名
  105. </button>
  106. </view>
  107. </view>
  108. </template>
  109. <script>
  110. import {getTemplateDetail,signUp,createOrder,calc} from '@/api/activity.js'
  111. import {upload} from '@/utils/upload.js'
  112. import {
  113. creatPayOrder,
  114. queryPayOrder,
  115. payDetails
  116. } from '@/api/payment.js'
  117. export default {
  118. data() {
  119. return {
  120. maxLength:40,
  121. num: 1,
  122. modelQuery:[{}],
  123. setQuery:{},
  124. activity:{},
  125. rules: {},
  126. loading:false,
  127. show:false,
  128. pickerObj:{
  129. },
  130. isJumped: false,
  131. price:0,
  132. query: {
  133. "msgType": "wx.miniPreOrder",
  134. "orderDesc": "",
  135. "orderNo": "",
  136. "subOpenId": "",
  137. "userId": ""
  138. },
  139. // 支付信息
  140. payData: {}
  141. }
  142. },
  143. computed: {
  144. total() {
  145. return this.price || this.activity.price
  146. }
  147. },
  148. methods: {
  149. handeChoose(){
  150. this.show = true
  151. },
  152. cancel(){
  153. this.show = false
  154. },
  155. confirm(val,d,index){
  156. this.modelQuery[d][`data_${index}_value`] = val.value[0]
  157. this.show = false
  158. console.log(val,d,index);
  159. },
  160. oversize(val,item){
  161. console.log(val,item);
  162. uni.showToast({
  163. title:`请上传${item.size}MB以内的图片`,
  164. icon:'none'
  165. })
  166. },
  167. getLength(item){
  168. if(item.validType == 1){
  169. return 11
  170. }else if(item.validType == 2){
  171. return 18
  172. }else{
  173. return 40
  174. }
  175. },
  176. add(val){
  177. if((val==-1&&this.num == 1)||(val==1&&this.num == this.activity.limited)) return
  178. this.num += val
  179. if(val == 1){
  180. let obj = {}
  181. this.setQuery.data.map((item,index)=>{
  182. if(item.dataType == 1){
  183. // this.$set(this.modelQuery[this.modelQuery.length], `data_${index}_value`,'')
  184. obj[`data_${index}_value`] = ''
  185. }else if(item.dataType == 2 ){
  186. // this.$set(this.modelQuery[this.modelQuery.length], `data_${index}_value`,'')
  187. obj[`data_${index}_value`] = ''
  188. }
  189. else if(item.dataType == 3 ){
  190. // this.$set(this.modelQuery[this.modelQuery.length], `data_${index}_value`,'')
  191. obj[`data_${index}_value`] = ''
  192. }
  193. else if(item.dataType == 4 ){
  194. // this.$set(this.modelQuery[this.modelQuery.length], `data_${index}_value`,[])
  195. obj[`data_${index}_value`] = []
  196. }else if( item.dataType == 5){
  197. // this.$set(this.modelQuery[this.modelQuery.length], `data_${index}_value`,[])
  198. obj[`data_${index}_value`] = []
  199. }
  200. })
  201. this.modelQuery.push(obj)
  202. this.$nextTick(() => {
  203. this.$refs['uForm'+(this.modelQuery.length-1)][0].setRules(this.rules);
  204. })
  205. }else{
  206. this.modelQuery.pop()
  207. }
  208. // 计算价格
  209. calc({activityId:this.activity.id,num:this.num}).then(res=>{
  210. if (res.state == 'Success') {
  211. this.price = res.content.price
  212. }
  213. })
  214. },
  215. getTemplateDetail(activityId){
  216. getTemplateDetail({activityId}).then(res=>{
  217. if (res.state == 'Success') {
  218. this.setQuery = res.content.content
  219. this.setQuery.data.map((item,index)=>{
  220. if(item.dataType == 1){
  221. // this.$set(item,'value','')
  222. this.$set(this.modelQuery[0], `data_${index}_value`,'')
  223. if(item.requiredEnable == 1){
  224. let obj; //校验规则
  225. if(item.validType == 0){
  226. console.log(11111);
  227. obj = {
  228. required: true,
  229. message: `请输入${item.dataName}`,
  230. trigger: ['blur']
  231. }
  232. }else if(item.validType == 1){
  233. console.log(22222);
  234. obj ={
  235. pattern: /^[1][3,4,5,6,7,8,9][0-9]{9}$/,
  236. message: '请输入正确的手机号'
  237. }
  238. }else if(item.validType == 2){
  239. obj ={
  240. len:18,
  241. message: '请输入正确的身份证号'
  242. }
  243. }else if(item.validType == 3){
  244. obj ={
  245. pattern: /^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]/,
  246. // 正则检验前先将值转为字符串
  247. transform(value) {
  248. return String(value);
  249. },
  250. message: '请输入正确的邮箱'
  251. }
  252. }else if(item.validType == 4){
  253. obj ={
  254. pattern: /^(\-|\+)?\d+(\.\d+)?$/,
  255. message: '只能输入数字'
  256. }
  257. }
  258. this.$set(this.rules, `data_${index}_value`, [{
  259. required: true,
  260. message: `请输入${item.dataName}`,
  261. trigger: ['blur']
  262. },obj])
  263. }
  264. }else if(item.dataType == 2 ){
  265. // this.$set(item,'value','')
  266. this.$set(this.modelQuery[0], `data_${index}_value`,'')
  267. if(item.requiredEnable == 1){
  268. this.$set(this.rules, `data_${index}_value`, [{
  269. required: true,
  270. message: `请输入${item.dataName}`,
  271. trigger: ['blur']
  272. }])
  273. }
  274. }
  275. else if(item.dataType == 3 ){
  276. // this.$set(item,'value','')
  277. this.$set(this.modelQuery[0], `data_${index}_value`,'')
  278. if(item.requiredEnable == 1){
  279. this.$set(this.rules, `data_${index}_value`, [{
  280. required: true,
  281. message: `请选择${item.dataName}`,
  282. trigger: ['blur','change']
  283. }])
  284. }
  285. }
  286. else if(item.dataType == 4 ){
  287. // this.$set(item,'value',[])
  288. this.$set(this.modelQuery[0], `data_${index}_value`,[])
  289. if(item.requiredEnable == 1){
  290. this.$set(this.rules, `data_${index}_value`, [{
  291. type: 'array',
  292. required: true,
  293. message: `请选择${item.dataName}`,
  294. trigger: ['change']
  295. }])
  296. }
  297. }else if( item.dataType == 5){
  298. // this.$set(item,'value',[])
  299. this.$set(this.modelQuery[0], `data_${index}_value`,[])
  300. if(item.requiredEnable == 1){
  301. this.$set(this.rules, `data_${index}_value`, [{
  302. type: 'array',
  303. required: true,
  304. message: `请上传${item.dataName}`,
  305. trigger: ['change']
  306. }])
  307. }
  308. }
  309. })
  310. this.$nextTick(() => {
  311. console.log( this.$refs.uForm0);
  312. this.$refs.uForm0[0].setRules(this.rules);
  313. })
  314. }
  315. })
  316. },
  317. // 删除图片
  318. deletePic(event,data) {
  319. data.splice(event.index, 1)
  320. },
  321. // 新增图片
  322. async afterRead(event,d,index) {
  323. console.log(event);
  324. // 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
  325. let lists = [].concat(event.file)
  326. let fileListLen = this.modelQuery[d][`data_${index}_value`].length
  327. lists.map((item) => {
  328. console.log(this.setQuery.data[index],this.setQuery.data[index].dataName);
  329. this.modelQuery[d][`data_${index}_value`].push({
  330. ...item,
  331. status: 'uploading',
  332. message: '上传中'
  333. })
  334. })
  335. for (let i = 0; i < lists.length; i++) {
  336. const result = await this.uploadFilePromise(lists[i])
  337. let item = this.modelQuery[d][`data_${index}_value`][fileListLen]
  338. this.modelQuery[d][`data_${index}_value`].splice(fileListLen, 1, Object.assign(item, {
  339. status: 'success',
  340. message: '',
  341. url: result
  342. }))
  343. fileListLen++
  344. }
  345. },
  346. uploadFilePromise(file) {
  347. return new Promise((resolve, reject) => {
  348. upload(file,'SHOP_INFO').then(res=>{
  349. // this.form[key] = [{url:res}]
  350. resolve(res)
  351. })
  352. })
  353. },
  354. formatData(){
  355. console.log(this.modelQuery);
  356. },
  357. // 点击提交报名
  358. handleSignUp(){
  359. let obj = {
  360. "activitySignupId": this.activity.id,
  361. "dataInfos": [],
  362. "num": this.num,
  363. "userId": JSON.parse(uni.getStorageSync('userInfo')).userId
  364. }
  365. let arr = []
  366. console.log( 11111111,this.modelQuery);
  367. new Promise((resolve,reject)=>{
  368. this.modelQuery.map((item,index)=>{
  369. let personData = {data:[]}//每个人的填写数据
  370. // 循环校验表单
  371. this['a'+index] = new Promise((resolve1,reject1)=>{
  372. console.log( this.$refs['uForm' + index][0]);
  373. if( Object.keys(this.rules).length){//有必填项
  374. this.$refs['uForm' + index][0].validate().then(res => {
  375. // 把每个人的资料全部放在personData的data属性里面 依次排列
  376. let dataItem
  377. for(let key in item){
  378. let i = key.split('_')[1]
  379. console.log(item,i,this.setQuery.data[i]);
  380. dataItem = JSON.parse(JSON.stringify(this.setQuery.data[i]))
  381. // 值是数组直接赋值
  382. if(Array.isArray(item[key])){
  383. if(dataItem.dataType == 5){//取出图片里面的地址
  384. dataItem.content = item[key].map(item1=>{ return item1.url})
  385. }else{
  386. dataItem.content = item[key]
  387. }
  388. }else{
  389. dataItem.content = [item[key]]
  390. }
  391. personData.data.push(dataItem)
  392. }
  393. resolve1(1)
  394. }).catch(errors => {
  395. console.log(errors);
  396. })
  397. }else{
  398. // 把每个人的资料全部放在personData的data属性里面 依次排列
  399. let dataItem
  400. for(let key in item){
  401. let i = key.split('_')[1]
  402. console.log(item,i,this.setQuery.data[i]);
  403. dataItem = JSON.parse(JSON.stringify(this.setQuery.data[i]))
  404. // 值是数组直接赋值
  405. if(Array.isArray(item[key])){
  406. if(dataItem.dataType == 5){//取出图片里面的地址
  407. dataItem.content = [item[key][0].url]
  408. }else{
  409. dataItem.content = item[key]
  410. }
  411. }else{
  412. dataItem.content = [item[key]]
  413. }
  414. personData.data.push(dataItem)
  415. }
  416. resolve1(1)
  417. }
  418. })
  419. obj.dataInfos.push(personData)
  420. // 校验的promise数组 用于获取全部校验成功
  421. arr.push(this['a'+index])
  422. })
  423. // 全部校验成功
  424. Promise.all(arr).then(res=>{
  425. console.log('结果',res);
  426. resolve()
  427. }).catch(e=>{
  428. console.log('报错',e);
  429. })
  430. }).then(()=>{
  431. console.log(this.modelQuery,this.setQuery,obj)
  432. this.signUp(obj).then(id=>{
  433. this.creat(id)
  434. })
  435. })
  436. },
  437. signUp(obj){
  438. return new Promise((resolve,reject)=>{
  439. this.loading = true
  440. signUp(obj).then(res=>{
  441. this.loading = false
  442. if (res.state == 'Success') {
  443. resolve(res.content.serviceId)
  444. // uni.hideLoading()
  445. // uni.showToast({
  446. // title:'报名成功',
  447. // icon:'success'
  448. // })
  449. // uni.reLaunch({
  450. // url: '/my/order/index'
  451. // })
  452. }
  453. })
  454. })
  455. },
  456. //创建订单
  457. creat(serviceId) {
  458. if (this.loading) return
  459. this.loading = true
  460. uni.showLoading({
  461. title: '支付中'
  462. })
  463. let that = this
  464. if (!this.payData.timeStamp) {
  465. createOrder({
  466. activityId: this.activity.id,
  467. serviceId,
  468. num:this.num,
  469. userId: JSON.parse(uni.getStorageSync('userInfo')).userId
  470. }).then(res => {
  471. this.loading = false
  472. if (res.state == 'Success') {
  473. if (!this.activity.price) { //价格为0
  474. uni.hideLoading()
  475. uni.reLaunch({
  476. url: '/my/order/index'
  477. })
  478. } else {
  479. this.query.orderNo = res.content.orderNo
  480. this.query.subOpenId = JSON.parse(uni.getStorageSync('userInfo')).openId
  481. this.query.orderDesc = this.activity.activityName
  482. creatPayOrder(this.query).then(data => {
  483. that.payData = JSON.parse(data.content.miniPayRequest)
  484. if (data.content.miniPayRequest == null) return uni.hideLoading()
  485. let miniPayRequest = that.payData;
  486. // miniPayRequest = JSON.parse(miniPayRequest);
  487. let query = encodeURIComponent(JSON.stringify({
  488. sign: miniPayRequest.sign,
  489. prepayid: miniPayRequest.prepayid,
  490. }))
  491. uni.navigateToMiniProgram({
  492. appId: miniPayRequest.miniuser,
  493. path: `${miniPayRequest.minipath}?appPayRequest=${query}`,
  494. success: (res) => {
  495. // 打开成功
  496. // console.log("打开成功", res);
  497. this.isJumped = true;
  498. },
  499. fail: (err) => {
  500. // console.log(err);
  501. uni.hideLoading();
  502. uni.showToast({
  503. title: "取消支付",
  504. icon: "none",
  505. });
  506. that.btnLoading = false
  507. },
  508. });
  509. })
  510. }
  511. }
  512. })
  513. } else { // 取消支付后再次支付
  514. uni.requestPayment({
  515. "provider": "wxpay",
  516. "orderInfo": that.payData,
  517. "appid": that.payData.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
  518. "paySign": that.payData.paySign,
  519. "nonceStr": that.payData.nonceStr, // 随机字符串
  520. "package": that.payData.package, // 固定值
  521. // "prepayid": that.payData.package, // 统一下单订单号
  522. "timeStamp": that.payData.timeStamp, // 时间戳(单位:秒)
  523. "signType": that.payData.signType, //签名算法
  524. success(msg) {
  525. console.log('msg', msg);
  526. queryPayOrder(that.query.orderNo).then(res1 => {
  527. if (res1.state == 'Success') {
  528. uni.hideLoading()
  529. uni.reLaunch({
  530. url: '/my/order/index'
  531. })
  532. }
  533. })
  534. },
  535. fail(e) {
  536. that.loading = false
  537. uni.hideLoading()
  538. uni.showToast({
  539. title: '取消支付',
  540. icon: 'fail'
  541. })
  542. // 取消支付后,获取支付信息以备再次支付
  543. payDetails(that.query.orderNo).then(r => {
  544. if (r.state == 'Success') {
  545. that.payData = JSON.parse(r.content.miniPayRequest)
  546. }
  547. })
  548. console.log('err', e);
  549. }
  550. })
  551. }
  552. }
  553. },
  554. onLoad(options) {
  555. let userInfo = JSON.parse(uni.getStorageSync('userInfo'))
  556. this.query.userId = userInfo.userId
  557. // 如果从订单详情跳转则不会存在activity
  558. this.activity = JSON.parse(uni.getStorageSync('activity'))
  559. this.getTemplateDetail(this.activity.id)
  560. }
  561. }
  562. </script>
  563. <style lang="scss" >
  564. .makeOut{
  565. background: #F9F9F9;
  566. min-height: 100vh;
  567. padding-top: 20rpx;
  568. padding-bottom: 150rpx;
  569. .content{
  570. margin: 0 24rpx 20rpx;
  571. padding: 28rpx 24rpx;
  572. background: #fff;
  573. box-sizing: border-box;
  574. border-radius: 16rpx;
  575. }
  576. .signUp-info{
  577. .title{
  578. font-weight: 600;
  579. font-size: 32rpx;
  580. color: #181818;
  581. overflow: hidden;
  582. text-overflow: ellipsis;
  583. /* 弹性伸缩盒子模型显示 */
  584. display: -webkit-box;
  585. /* 限制在一个块元素显示的文本的行数 */
  586. -webkit-line-clamp: 2;
  587. /* 设置或检索伸缩盒对象的子元素的排列方式 */
  588. -webkit-box-orient: vertical;
  589. }
  590. .time{
  591. font-weight: 300;
  592. font-size: 24rpx;
  593. color: #AAAAAA;
  594. padding: 20rpx 0;
  595. border-bottom: 1rpx solid #F0F0F0;
  596. }
  597. .signUp-box{
  598. display: flex;
  599. justify-content: space-between;
  600. align-items: center;
  601. padding-top: 20rpx;
  602. .label-box{
  603. display: flex;
  604. align-items: center;
  605. .label{
  606. font-weight: 300;
  607. font-size: 24rpx;
  608. color: #181818;
  609. }
  610. .desc{
  611. font-weight: 300;
  612. font-size: 24rpx;
  613. color: #AAAAAA;
  614. }
  615. }
  616. .num-box{
  617. display: flex;
  618. align-items: center;
  619. .btn.disabled{
  620. background: #F0F0F0;
  621. color: #AAAAAA;
  622. }
  623. .btn{
  624. width: 36rpx;
  625. height: 36rpx;
  626. line-height: 36rpx;
  627. border-radius: 50%;
  628. background: #FFEDEB;
  629. color: $uni-color-primary;
  630. font-size: 30rpx;
  631. text-align: center;
  632. vertical-align: top;
  633. }
  634. .num{
  635. font-weight: 400;
  636. font-size: 24rpx;
  637. color: #222222;
  638. width: 50rpx;
  639. text-align: center;
  640. }
  641. }
  642. }
  643. }
  644. .btn-box {
  645. position: fixed;
  646. bottom: 0%;
  647. left: 0%;
  648. z-index: 2;
  649. width: 100%;
  650. display: flex;
  651. align-items: center;
  652. justify-content: space-between;
  653. box-sizing: border-box;
  654. padding: 10rpx 24rpx env(safe-area-inset-bottom);
  655. background: #fff;
  656. border-top: 1rpx solid #EEEEEE;
  657. .left{
  658. display: flex;
  659. align-items: flex-end;
  660. .num{
  661. font-weight: 300;
  662. font-size: 24rpx;
  663. color: #AAAAAA;
  664. }
  665. .total{
  666. font-weight: 300;
  667. font-size: 24rpx;
  668. color: #222222;
  669. display: flex;
  670. align-items: flex-end;
  671. margin-left: 6rpx;
  672. .price-box{
  673. display: flex;
  674. align-items: flex-end;
  675. font-weight: 400;
  676. font-size: 32rpx;
  677. color: #222222;
  678. .unit{
  679. font-size: 20rpx;
  680. }
  681. }
  682. }
  683. }
  684. .btn {
  685. width: 280rpx;
  686. height: 80rpx;
  687. line-height: 80rpx;
  688. text-align: center;
  689. background: $uni-color-primary;
  690. border-radius: 40rpx;
  691. font-weight: 600;
  692. font-size: 28rpx;
  693. color: #FFFFFF;
  694. margin: 0;
  695. }
  696. }
  697. .u-form-item{
  698. display: flex;
  699. justify-content: flex-start;
  700. .u-form-item__body__left{
  701. align-self: flex-start !important;
  702. }
  703. .u-radio-group{
  704. flex-wrap: wrap;
  705. }
  706. .u-radio,.u-checkbox{
  707. margin-right: 20rpx;
  708. margin-bottom: 20rpx;
  709. }
  710. .u-radio__icon-wrap--circle,.u-checkbox__icon-wrap--square{
  711. width: 28rpx!important;
  712. height: 28rpx!important;
  713. }
  714. .u-checkbox-group{
  715. flex-wrap: wrap;
  716. .u-radio,.u-checkbox-label--left{
  717. margin-bottom: 20rpx;
  718. }
  719. }
  720. }
  721. }
  722. </style>