正在显示
55 个修改的文件
包含
4801 行增加
和
0 行删除
.DS_Store
0 → 100644
不能预览此文件类型
.hbuilderx/launch.json
0 → 100644
| 1 | +{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ | ||
| 2 | + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 | ||
| 3 | + "version": "0.0", | ||
| 4 | + "configurations": [{ | ||
| 5 | + "default" : | ||
| 6 | + { | ||
| 7 | + "launchtype" : "local" | ||
| 8 | + }, | ||
| 9 | + "mp-weixin" : | ||
| 10 | + { | ||
| 11 | + "launchtype" : "local" | ||
| 12 | + }, | ||
| 13 | + "type" : "uniCloud" | ||
| 14 | + } | ||
| 15 | + ] | ||
| 16 | +} |
App.vue
0 → 100644
| 1 | +<script> | ||
| 2 | + export default { | ||
| 3 | + onLaunch: function() { | ||
| 4 | + console.log('App Launch') | ||
| 5 | + }, | ||
| 6 | + onShow: function() { | ||
| 7 | + console.log('App Show') | ||
| 8 | + }, | ||
| 9 | + onHide: function() { | ||
| 10 | + console.log('App Hide') | ||
| 11 | + } | ||
| 12 | + } | ||
| 13 | +</script> | ||
| 14 | + | ||
| 15 | +<style lang="scss"> | ||
| 16 | + /*每个页面公共css */ | ||
| 17 | + @import "@/uni_modules/uview-ui/index.scss"; | ||
| 18 | + @import url('~@/static/css/YouSheBiaoTiHei.css'); | ||
| 19 | + *{ | ||
| 20 | + padding: 0; | ||
| 21 | + margin: 0; | ||
| 22 | + box-sizing: border-box; | ||
| 23 | + } | ||
| 24 | + .container_box{ | ||
| 25 | + min-height: 100vh; | ||
| 26 | + background-color: #f6f6f6; | ||
| 27 | + padding: 24rpx 30rpx; | ||
| 28 | + box-sizing: border-box; | ||
| 29 | + } | ||
| 30 | +</style> |
api/sport.js
0 → 100644
| 1 | +const http = uni.$u.http | ||
| 2 | +// 获取运动类型列表 | ||
| 3 | +export const getSportList = (data) => http.get('/system/sports/list', {params: data, custom: {auth: true} }) | ||
| 4 | + | ||
| 5 | +/** | ||
| 6 | + * 查询球馆列表 | ||
| 7 | + * @param { | ||
| 8 | + longitude, | ||
| 9 | + latitude | ||
| 10 | + } | ||
| 11 | + * @returns { | ||
| 12 | + businessId, businessName, businessLicenseNo, gymName, contacts, contactsPhone, province, city, county, address, gymNum, | ||
| 13 | + serviceCharge, commission, username, businessLicensePicture, gymPicture, longitude, latitude, sportsRange, distance, rank, price, businessTime | ||
| 14 | + } | ||
| 15 | + */ | ||
| 16 | +export const getArenaList = (data) => http.get('/ground-business/business/list', {params: data, custom: {auth: true} }) | ||
| 17 | + | ||
| 18 | +/** | ||
| 19 | + * 根据id查询球馆 | ||
| 20 | + * @param { | ||
| 21 | + businessId: 球馆ID | ||
| 22 | + } | ||
| 23 | + * @returns { | ||
| 24 | + businessId, businessName, businessLicenseNo, gymName, contacts, contactsPhone, province, city, county, address, gymNum, | ||
| 25 | + serviceCharge, commission, username, businessLicensePicture, gymPicture, longitude, latitude, sportsRange, distance, rank, price, businessTime | ||
| 26 | + } | ||
| 27 | + */ | ||
| 28 | +export const getArenaDetail = (businessId) => http.get(`/ground-business/business/${businessId}`, {custom: {auth: true} }) | ||
| 29 | + | ||
| 30 | +/** | ||
| 31 | + * 发起约球 | ||
| 32 | + * @param { | ||
| 33 | + groundId: 场地id, | ||
| 34 | + peopleNum: 参与人数(不包括发起人), | ||
| 35 | + orderDate: 订场日期, | ||
| 36 | + hourList: { | ||
| 37 | + startHour: 开始时间, | ||
| 38 | + endHour: 结束时间 | ||
| 39 | + } | ||
| 40 | + } | ||
| 41 | + * @returns { | ||
| 42 | + orderId, orderNo, belongGym, groundNum, orderTime, appointmentStartTime, appointmentEndTime, | ||
| 43 | + payAmount, peopleNum, serviceCharge, commission, orderType, state, businessId, clientId, groundId | ||
| 44 | + } | ||
| 45 | + */ | ||
| 46 | +export const sendBall = (data) => http.post('/ground-business/ground/createDateOrder', data, {custom: {auth: true} }) |
api/user.js
0 → 100644
| 1 | +const http = uni.$u.http | ||
| 2 | +// 用户登录 | ||
| 3 | +export const userLogin = (data, config= {}) => http.post('/login', data, config) | ||
| 4 | + | ||
| 5 | +// 商家注册 | ||
| 6 | +/* data参数 | ||
| 7 | +{ | ||
| 8 | + "username": 用户名 | ||
| 9 | + "password": 密码 | ||
| 10 | + "businessName": 商家名称 | ||
| 11 | + "businessLicenseNo": 统一社会信用代码 | ||
| 12 | + "gymName": 球馆名称 | ||
| 13 | + "contacts": 联系人 | ||
| 14 | + "contactsPhone": 联系人电话 | ||
| 15 | + "province": 省 | ||
| 16 | + "city": 市 | ||
| 17 | + "county": 县 | ||
| 18 | + "address": 地址 | ||
| 19 | + "gymPicture" 球馆图片 | ||
| 20 | +} | ||
| 21 | +*/ | ||
| 22 | +export const userReg = ({ username, password, businessName, businessLicenseNo, gymName, contacts, contactsPhone, province, city, county, address, gymPicture }) => { | ||
| 23 | + return request({ | ||
| 24 | + url: '/register', | ||
| 25 | + method: 'post', | ||
| 26 | + data: { | ||
| 27 | + username, | ||
| 28 | + password, | ||
| 29 | + businessName, | ||
| 30 | + businessLicenseNo, | ||
| 31 | + gymName, | ||
| 32 | + contacts, | ||
| 33 | + contactsPhone, | ||
| 34 | + province, | ||
| 35 | + city, | ||
| 36 | + county, | ||
| 37 | + address, | ||
| 38 | + gymPicture | ||
| 39 | + } | ||
| 40 | + }) | ||
| 41 | +} |
components/commentCard.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="comment_card" :class="{isPadding: isPadding}"> | ||
| 3 | + <CommentRate></CommentRate> | ||
| 4 | + <view class="comment_content u-line-2"> | ||
| 5 | + 不错不错,这个地方环境非常好,水饮料种类也很多,非常推荐过来,尤其是附近的小伙伴一定要过来看看 | ||
| 6 | + </view> | ||
| 7 | + <!-- 评价图片 --> | ||
| 8 | + <u-album :urls="urls2" :rowCount="4"></u-album> | ||
| 9 | + </view> | ||
| 10 | +</template> | ||
| 11 | + | ||
| 12 | +<script> | ||
| 13 | + import CommentRate from './commentRate.vue' | ||
| 14 | + export default{ | ||
| 15 | + components: { CommentRate }, | ||
| 16 | + props: { | ||
| 17 | + isPadding: { | ||
| 18 | + type: Boolean, | ||
| 19 | + default: false | ||
| 20 | + } | ||
| 21 | + }, | ||
| 22 | + data(){ | ||
| 23 | + return { | ||
| 24 | + urls2: [ | ||
| 25 | + 'https://cdn.uviewui.com/uview/album/1.jpg', | ||
| 26 | + 'https://cdn.uviewui.com/uview/album/2.jpg', | ||
| 27 | + 'https://cdn.uviewui.com/uview/album/3.jpg', | ||
| 28 | + 'https://cdn.uviewui.com/uview/album/4.jpg', | ||
| 29 | + 'https://cdn.uviewui.com/uview/album/5.jpg', | ||
| 30 | + 'https://cdn.uviewui.com/uview/album/6.jpg', | ||
| 31 | + 'https://cdn.uviewui.com/uview/album/7.jpg', | ||
| 32 | + 'https://cdn.uviewui.com/uview/album/8.jpg', | ||
| 33 | + 'https://cdn.uviewui.com/uview/album/9.jpg', | ||
| 34 | + 'https://cdn.uviewui.com/uview/album/10.jpg' | ||
| 35 | + ] | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + } | ||
| 39 | +</script> | ||
| 40 | + | ||
| 41 | +<style scoped lang="scss"> | ||
| 42 | + .comment_card{ | ||
| 43 | + margin-top: 40rpx; | ||
| 44 | + background-color: #fff; | ||
| 45 | + } | ||
| 46 | + .isPadding{ | ||
| 47 | + border-radius: 16rpx; | ||
| 48 | + padding: 30rpx 24rpx 40rpx; | ||
| 49 | + } | ||
| 50 | + .comment_content{ | ||
| 51 | + color: #333; | ||
| 52 | + font-size: 24rpx; | ||
| 53 | + line-height: 40rpx; | ||
| 54 | + margin: 24rpx 0 18rpx 0; | ||
| 55 | + } | ||
| 56 | + .album { | ||
| 57 | + @include flex; | ||
| 58 | + align-items: flex-start; | ||
| 59 | + | ||
| 60 | + &__avatar { | ||
| 61 | + background-color: $u-bg-color; | ||
| 62 | + padding: 5px; | ||
| 63 | + border-radius: 3px; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + &__content { | ||
| 67 | + margin-left: 10px; | ||
| 68 | + flex: 1; | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | +</style> |
components/commentRate.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="commentRate"> | ||
| 3 | + <view class="left"> | ||
| 4 | + <image class="avatar" src="@/static/logo.png" mode="widthFix"></image> | ||
| 5 | + </view> | ||
| 6 | + <view class="right"> | ||
| 7 | + <view class="info"> | ||
| 8 | + <view class="top"> | ||
| 9 | + <text class="name">CLOOL</text> | ||
| 10 | + <text class="arenaNum">预订场号:3号场</text> | ||
| 11 | + </view> | ||
| 12 | + <u-rate :count="count" active-color="#FF9900" size="20" inactiveColor="#CDCDCD" v-model="value"></u-rate> | ||
| 13 | + </view> | ||
| 14 | + <view class="comment_time">2022-12-26</view> | ||
| 15 | + </view> | ||
| 16 | + </view> | ||
| 17 | +</template> | ||
| 18 | + | ||
| 19 | +<script> | ||
| 20 | + export default{ | ||
| 21 | + data(){ | ||
| 22 | + return { | ||
| 23 | + count: 5, | ||
| 24 | + value: 2 | ||
| 25 | + } | ||
| 26 | + } | ||
| 27 | + } | ||
| 28 | +</script> | ||
| 29 | + | ||
| 30 | +<style lang="scss" scoped> | ||
| 31 | + .commentRate{ | ||
| 32 | + display: flex; | ||
| 33 | + align-items: center; | ||
| 34 | + justify-content: space-between; | ||
| 35 | + font-size: 24rpx; | ||
| 36 | + line-height: 32rpx; | ||
| 37 | + color: #999; | ||
| 38 | + .left{ | ||
| 39 | + width: 64rpx; | ||
| 40 | + height: 64rpx; | ||
| 41 | + border-radius: 50%; | ||
| 42 | + overflow: hidden; | ||
| 43 | + margin-right: 16rpx; | ||
| 44 | + .avatar{ | ||
| 45 | + width: 100%; | ||
| 46 | + height: 100%; | ||
| 47 | + } | ||
| 48 | + } | ||
| 49 | + .right{ | ||
| 50 | + display: flex; | ||
| 51 | + justify-content: space-between; | ||
| 52 | + flex: 1; | ||
| 53 | + height: 100%; | ||
| 54 | + .top { | ||
| 55 | + margin-bottom: 8rpx; | ||
| 56 | + .name{ | ||
| 57 | + color: #333; | ||
| 58 | + margin-right: 10rpx; | ||
| 59 | + } | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | +</style> |
components/commonCell.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="box"> | ||
| 3 | + <u-cell-group v-if="headTitle !== ''" :border="false"> | ||
| 4 | + <u-cell :title="headTitle" :titleStyle="{color: '#333', fontSize: '24rpx'}"> | ||
| 5 | + <text slot="right-icon" style="font-size: 24rpx;font-weight: 500;" :style="{color: colorState(state)}">{{ orderState(state) }}</text> | ||
| 6 | + </u-cell> | ||
| 7 | + </u-cell-group> | ||
| 8 | + <view class="orderInfo"> | ||
| 9 | + <view class="order_line" :class="{isBorder: border}" v-for="(item, index) in lineInfo" :key="index"> | ||
| 10 | + <text class="left_text">{{ item.title }}</text> | ||
| 11 | + <u-avatar v-if="item.type === 'avatar'" :src="userInfo[item.valueName]"></u-avatar> | ||
| 12 | + <text v-if="item.type === 'text'">{{ item.valueName }}</text> | ||
| 13 | + <u--input | ||
| 14 | + v-if="item.type === 'input'" | ||
| 15 | + :customStyle="{border: 0, width: '200rpx'}" | ||
| 16 | + :placeholder="userInfo[item.valueName]" | ||
| 17 | + v-model="userInfo[item.valueName]" | ||
| 18 | + inputAlign="right" | ||
| 19 | + color="#333" | ||
| 20 | + fontSize="13px" | ||
| 21 | + border="surround" | ||
| 22 | + @blur="UpdataInfo" | ||
| 23 | + /> | ||
| 24 | + </view> | ||
| 25 | + </view> | ||
| 26 | + <u-cell-group v-if="rightTitle !== ''" :border="false"> | ||
| 27 | + <u-cell :title="rightTitle" :titleStyle="{color: '#666', fontSize: '24rpx'}"> | ||
| 28 | + <MyButton v-show="state === 2" slot="right-icon" title="立即支付" size="small"></MyButton> | ||
| 29 | + <MyButton v-show="state === 1" slot="right-icon" title="取消/退款" size="small" color="#666666" bgColor="#F6F6F6"></MyButton> | ||
| 30 | + <MyButton v-show="state === 3" slot="right-icon" size="small" title="去评价"></MyButton> | ||
| 31 | + <MyButton v-show="state === 6" slot="right-icon" size="small" title="亮核销码" @comfirn="showQR"></MyButton> | ||
| 32 | + </u-cell> | ||
| 33 | + </u-cell-group> | ||
| 34 | + </view> | ||
| 35 | +</template> | ||
| 36 | + | ||
| 37 | +<script> | ||
| 38 | + import MyButton from '@/components/myButton.vue' | ||
| 39 | + export default { | ||
| 40 | + props: { | ||
| 41 | + lineInfo: { | ||
| 42 | + type: Array, | ||
| 43 | + require: true | ||
| 44 | + }, | ||
| 45 | + border: { | ||
| 46 | + type: Boolean, | ||
| 47 | + default: false | ||
| 48 | + }, | ||
| 49 | + headTitle: { | ||
| 50 | + type: String, | ||
| 51 | + default: '' | ||
| 52 | + }, | ||
| 53 | + rightTitle: { | ||
| 54 | + type: String, | ||
| 55 | + default: '' | ||
| 56 | + }, | ||
| 57 | + state: { | ||
| 58 | + type: Number, | ||
| 59 | + default: 0 | ||
| 60 | + } | ||
| 61 | + }, | ||
| 62 | + components: { MyButton }, | ||
| 63 | + data(){ | ||
| 64 | + return { | ||
| 65 | + userInfo: { | ||
| 66 | + avatar: 'https://cdn.uviewui.com/uview/album/1.jpg', | ||
| 67 | + nickname: 'CLOOL', | ||
| 68 | + sex: '男', | ||
| 69 | + phoneNum: '13336668888', | ||
| 70 | + Birthday: '1999-12-26' | ||
| 71 | + }, | ||
| 72 | + } | ||
| 73 | + }, | ||
| 74 | + computed: { | ||
| 75 | + orderState(){ | ||
| 76 | + return (index) => { | ||
| 77 | + let orderObj ={ | ||
| 78 | + 1: '已完成', | ||
| 79 | + 2: '待支付', | ||
| 80 | + 3: '待评价', | ||
| 81 | + 4: '已取消', | ||
| 82 | + 5: '退款/售后', | ||
| 83 | + 6: '待使用' | ||
| 84 | + } | ||
| 85 | + return orderObj[index] | ||
| 86 | + } | ||
| 87 | + }, | ||
| 88 | + colorState(){ | ||
| 89 | + return (index) => { | ||
| 90 | + let colorObj ={ | ||
| 91 | + 1: '#FFA100', | ||
| 92 | + 2: '#F33B10', | ||
| 93 | + 3: '#FFA100', | ||
| 94 | + 4: '#999999', | ||
| 95 | + 5: '#F33B10', | ||
| 96 | + 6: '#999999' | ||
| 97 | + } | ||
| 98 | + return colorObj[index] | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + }, | ||
| 102 | + methods: { | ||
| 103 | + UpdataInfo(value){ | ||
| 104 | + this.$emit('updataInfo', this.userInfo) | ||
| 105 | + }, | ||
| 106 | + showQR(){ | ||
| 107 | + this.$emit('showQRcode', true) | ||
| 108 | + } | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | +</script> | ||
| 112 | + | ||
| 113 | +<style lang="scss" scoped> | ||
| 114 | + .box{ | ||
| 115 | + background: #FFFFFF; | ||
| 116 | + border-radius: 12rpx; | ||
| 117 | + box-sizing: border-box; | ||
| 118 | + } | ||
| 119 | + .orderInfo{ | ||
| 120 | + padding: 0 30rpx; | ||
| 121 | + .order_line{ | ||
| 122 | + display: flex; | ||
| 123 | + align-items: center; | ||
| 124 | + justify-content: space-between; | ||
| 125 | + height: 90rpx; | ||
| 126 | + font-size: 26rpx; | ||
| 127 | + color: #333; | ||
| 128 | + &.isBorder { | ||
| 129 | + border-bottom: 2rpx solid #E1E1E1; | ||
| 130 | + } | ||
| 131 | + &:last-child{ | ||
| 132 | + border-bottom: 0; | ||
| 133 | + } | ||
| 134 | + .left_text{ | ||
| 135 | + color: #666; | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | +</style> |
components/commonIconNav.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="common_content"> | ||
| 3 | + <u-icon :name="iconName"></u-icon> | ||
| 4 | + <text class="title">{{ titleContent }}</text> | ||
| 5 | + </view> | ||
| 6 | +</template> | ||
| 7 | + | ||
| 8 | +<script> | ||
| 9 | + export default { | ||
| 10 | + props: { | ||
| 11 | + iconName: { | ||
| 12 | + type: String, | ||
| 13 | + default: 'chat' | ||
| 14 | + }, | ||
| 15 | + titleContent: { | ||
| 16 | + type: String, | ||
| 17 | + default: '' | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | + } | ||
| 21 | +</script> | ||
| 22 | + | ||
| 23 | +<style lang="scss" scoped> | ||
| 24 | + .common_content{ | ||
| 25 | + display: flex; | ||
| 26 | + align-content: center; | ||
| 27 | + .title{ | ||
| 28 | + margin-left: 4rpx; | ||
| 29 | + } | ||
| 30 | + } | ||
| 31 | +</style> |
components/commonTitleNav.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="common_title_nav"> | ||
| 3 | + <view class="name"> | ||
| 4 | + <text style="font-weight: 600;">{{ titleName }}</text> | ||
| 5 | + <text class="mark" :style="{ color: markColor }">{{ rightTitle }}</text> | ||
| 6 | + </view> | ||
| 7 | + <view :style="{ color: sideTitleColor, fontSize: sideTitleSize }"> | ||
| 8 | + <slot name="side-content"></slot> | ||
| 9 | + </view> | ||
| 10 | + </view> | ||
| 11 | +</template> | ||
| 12 | + | ||
| 13 | +<script> | ||
| 14 | + export default { | ||
| 15 | + props: { | ||
| 16 | + titleName: { | ||
| 17 | + type: String, | ||
| 18 | + default: '' | ||
| 19 | + }, | ||
| 20 | + rightTitle: { | ||
| 21 | + type: String, | ||
| 22 | + default: '' | ||
| 23 | + }, | ||
| 24 | + sideTitle: { | ||
| 25 | + type: String, | ||
| 26 | + default: '' | ||
| 27 | + }, | ||
| 28 | + sideTitleColor: { | ||
| 29 | + type: String, | ||
| 30 | + default: '#333' | ||
| 31 | + }, | ||
| 32 | + markColor: { | ||
| 33 | + type: String, | ||
| 34 | + default: '#333' | ||
| 35 | + }, | ||
| 36 | + sideTitleSize: { | ||
| 37 | + type: Number, | ||
| 38 | + default: 28 | ||
| 39 | + }, | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | +</script> | ||
| 43 | + | ||
| 44 | +<style lang="scss" scoped> | ||
| 45 | + .common_title_nav{ | ||
| 46 | + display: flex; | ||
| 47 | + align-items: center; | ||
| 48 | + justify-content: space-between; | ||
| 49 | + .name{ | ||
| 50 | + font-size: 32rpx; | ||
| 51 | + color: #333; | ||
| 52 | + .mark{ | ||
| 53 | + font-size: 24rpx; | ||
| 54 | + margin-left: 16rpx; | ||
| 55 | + } | ||
| 56 | + } | ||
| 57 | + } | ||
| 58 | +</style> |
components/myButton.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="my_button" :class="{border, size: size === 'small'}" :style="{background: bgColor, color}" @click="comfirn"> | ||
| 3 | + {{ title }} | ||
| 4 | + </view> | ||
| 5 | +</template> | ||
| 6 | + | ||
| 7 | +<script> | ||
| 8 | + export default { | ||
| 9 | + props: { | ||
| 10 | + title: { | ||
| 11 | + type: String, | ||
| 12 | + require: true | ||
| 13 | + }, | ||
| 14 | + color: { | ||
| 15 | + type: String, | ||
| 16 | + default: '#fff' | ||
| 17 | + }, | ||
| 18 | + size: { | ||
| 19 | + type: String, | ||
| 20 | + default: 'normal' | ||
| 21 | + }, | ||
| 22 | + bgColor: { | ||
| 23 | + type: String, | ||
| 24 | + default: '' | ||
| 25 | + }, | ||
| 26 | + border: { | ||
| 27 | + type: Boolean, | ||
| 28 | + default: false | ||
| 29 | + } | ||
| 30 | + }, | ||
| 31 | + methods: { | ||
| 32 | + comfirn(){ | ||
| 33 | + this.$emit('comfirn') | ||
| 34 | + } | ||
| 35 | + } | ||
| 36 | + } | ||
| 37 | +</script> | ||
| 38 | + | ||
| 39 | +<style lang="scss" scoped> | ||
| 40 | + .my_button{ | ||
| 41 | + box-sizing: border-box; | ||
| 42 | + background: linear-gradient( 270deg, #FFA100 0%, #FCD723 100%); | ||
| 43 | + border-radius: 112rpx; | ||
| 44 | + text-align: center; | ||
| 45 | + line-height: 80rpx; | ||
| 46 | + color: #fff; | ||
| 47 | + font-size: 28rpx; | ||
| 48 | + &.border{ | ||
| 49 | + border: 2rpx solid #FFA100; | ||
| 50 | + } | ||
| 51 | + } | ||
| 52 | + .size{ | ||
| 53 | + padding: 8rpx 34rpx; | ||
| 54 | + text-align: center; | ||
| 55 | + color: #fff; | ||
| 56 | + font-size: 24rpx; | ||
| 57 | + line-height: 40rpx; | ||
| 58 | + background: linear-gradient( 270deg, #FFA100 0%, #FCD723 100%); | ||
| 59 | + border-radius: 112rpx; | ||
| 60 | + box-sizing: border-box; | ||
| 61 | + } | ||
| 62 | +</style> |
components/systemTip.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="systemTip"> | ||
| 3 | + <view v-for="(item, index) in systemInfo" :key="index" class="sytem_row"> | ||
| 4 | + <u-notice-bar :text="item" :fontSize="12" bgColor="transparent" color="#FFA100"></u-notice-bar> | ||
| 5 | + </view> | ||
| 6 | + </view> | ||
| 7 | +</template> | ||
| 8 | + | ||
| 9 | +<script> | ||
| 10 | + export default{ | ||
| 11 | + data(){ | ||
| 12 | + return { | ||
| 13 | + systemInfo: [ | ||
| 14 | + '(CLOOL发起拼场)2022-12-26 14:23:45', | ||
| 15 | + '(奇犽加入拼场并成功支付)2022-12-26 14:23:45', | ||
| 16 | + '(奇犽加入拼场并成功支付)2022-12-26 14:23:45' | ||
| 17 | + ] | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | + } | ||
| 21 | +</script> | ||
| 22 | + | ||
| 23 | +<style scoped lang="scss"> | ||
| 24 | + .systemTip{ | ||
| 25 | + display: flex; | ||
| 26 | + flex-direction: column; | ||
| 27 | + gap: 20rpx; | ||
| 28 | + background: rgba(255,161,0, .16); | ||
| 29 | + border-radius: 12rpx; | ||
| 30 | + margin: 0 30rpx; | ||
| 31 | + padding: 16rpx 20rpx; | ||
| 32 | + .sytem_row{ | ||
| 33 | + font-size: 24rpx; | ||
| 34 | + line-height: 36rpx; | ||
| 35 | + } | ||
| 36 | + } | ||
| 37 | +</style> |
index.html
0 → 100644
| 1 | +<!DOCTYPE html> | ||
| 2 | +<html lang="en"> | ||
| 3 | + <head> | ||
| 4 | + <meta charset="UTF-8" /> | ||
| 5 | + <script> | ||
| 6 | + var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || | ||
| 7 | + CSS.supports('top: constant(a)')) | ||
| 8 | + document.write( | ||
| 9 | + '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + | ||
| 10 | + (coverSupport ? ', viewport-fit=cover' : '') + '" />') | ||
| 11 | + </script> | ||
| 12 | + <title></title> | ||
| 13 | + <!--preload-links--> | ||
| 14 | + <!--app-context--> | ||
| 15 | + </head> | ||
| 16 | + <body> | ||
| 17 | + <div id="app"><!--app-html--></div> | ||
| 18 | + <script type="module" src="/main.js"></script> | ||
| 19 | + </body> | ||
| 20 | +</html> |
main.js
0 → 100644
| 1 | +import App from './App' | ||
| 2 | + | ||
| 3 | +// #ifndef VUE3 | ||
| 4 | +import Vue from 'vue' | ||
| 5 | +import './uni.promisify.adaptor' | ||
| 6 | +import uView from '@/uni_modules/uview-ui' | ||
| 7 | +import store from './store/index.js' | ||
| 8 | +Vue.use(uView) | ||
| 9 | +Vue.config.productionTip = false | ||
| 10 | +App.mpType = 'app' | ||
| 11 | +const app = new Vue({ | ||
| 12 | + store, | ||
| 13 | + ...App, | ||
| 14 | +}) | ||
| 15 | +// 引入请求封装,将app参数传递到配置中 | ||
| 16 | +require('./utils/request.js')(app) | ||
| 17 | +app.$mount() | ||
| 18 | +// #endif | ||
| 19 | + | ||
| 20 | +// #ifdef VUE3 | ||
| 21 | +import { createSSRApp } from 'vue' | ||
| 22 | +export function createApp() { | ||
| 23 | + const app = createSSRApp(App) | ||
| 24 | + return { | ||
| 25 | + app | ||
| 26 | + } | ||
| 27 | +} | ||
| 28 | +// #endif |
manifest.json
0 → 100644
| 1 | +{ | ||
| 2 | + "name" : "arena_app", | ||
| 3 | + "appid" : "__UNI__6C14005", | ||
| 4 | + "description" : "", | ||
| 5 | + "versionName" : "1.0.0", | ||
| 6 | + "versionCode" : "100", | ||
| 7 | + "transformPx" : false, | ||
| 8 | + /* 5+App特有相关 */ | ||
| 9 | + "app-plus" : { | ||
| 10 | + "usingComponents" : true, | ||
| 11 | + "nvueStyleCompiler" : "uni-app", | ||
| 12 | + "compilerVersion" : 3, | ||
| 13 | + "splashscreen" : { | ||
| 14 | + "alwaysShowBeforeRender" : true, | ||
| 15 | + "waiting" : true, | ||
| 16 | + "autoclose" : true, | ||
| 17 | + "delay" : 0 | ||
| 18 | + }, | ||
| 19 | + /* 模块配置 */ | ||
| 20 | + "modules" : { | ||
| 21 | + "OAuth" : {} | ||
| 22 | + }, | ||
| 23 | + /* 应用发布信息 */ | ||
| 24 | + "distribute" : { | ||
| 25 | + /* android打包配置 */ | ||
| 26 | + "android" : { | ||
| 27 | + "permissions" : [ | ||
| 28 | + "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", | ||
| 29 | + "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", | ||
| 30 | + "<uses-permission android:name=\"android.permission.VIBRATE\"/>", | ||
| 31 | + "<uses-permission android:name=\"android.permission.READ_LOGS\"/>", | ||
| 32 | + "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", | ||
| 33 | + "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", | ||
| 34 | + "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", | ||
| 35 | + "<uses-permission android:name=\"android.permission.CAMERA\"/>", | ||
| 36 | + "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", | ||
| 37 | + "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", | ||
| 38 | + "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", | ||
| 39 | + "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", | ||
| 40 | + "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", | ||
| 41 | + "<uses-feature android:name=\"android.hardware.camera\"/>", | ||
| 42 | + "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" | ||
| 43 | + ] | ||
| 44 | + }, | ||
| 45 | + /* ios打包配置 */ | ||
| 46 | + "ios" : {}, | ||
| 47 | + /* SDK配置 */ | ||
| 48 | + "sdkConfigs" : { | ||
| 49 | + "oauth" : { | ||
| 50 | + "weixin" : { | ||
| 51 | + "appid" : "wx7902d7df47ea6739", | ||
| 52 | + "UniversalLinks" : "" | ||
| 53 | + } | ||
| 54 | + } | ||
| 55 | + }, | ||
| 56 | + "splashscreen" : { | ||
| 57 | + "androidStyle" : "common", | ||
| 58 | + "android" : { | ||
| 59 | + "hdpi" : "static/images/start/login-bg.png", | ||
| 60 | + "xhdpi" : "static/images/start/login-bg.png", | ||
| 61 | + "xxhdpi" : "static/images/start/login-bg.png" | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + }, | ||
| 66 | + /* 快应用特有相关 */ | ||
| 67 | + "quickapp" : {}, | ||
| 68 | + /* 小程序特有相关 */ | ||
| 69 | + "mp-weixin" : { | ||
| 70 | + "appid" : "wx7902d7df47ea6739", | ||
| 71 | + "setting" : { | ||
| 72 | + "urlCheck" : false | ||
| 73 | + }, | ||
| 74 | + "usingComponents" : true | ||
| 75 | + }, | ||
| 76 | + "mp-alipay" : { | ||
| 77 | + "usingComponents" : true | ||
| 78 | + }, | ||
| 79 | + "mp-baidu" : { | ||
| 80 | + "usingComponents" : true | ||
| 81 | + }, | ||
| 82 | + "mp-toutiao" : { | ||
| 83 | + "usingComponents" : true | ||
| 84 | + }, | ||
| 85 | + "uniStatistics" : { | ||
| 86 | + "enable" : false | ||
| 87 | + }, | ||
| 88 | + "vueVersion" : "2", | ||
| 89 | + "h5" : { | ||
| 90 | + "router" : { | ||
| 91 | + "mode" : "hash" | ||
| 92 | + }, | ||
| 93 | + "devServer" : { | ||
| 94 | + "proxy" : { | ||
| 95 | + "/rpa" : { | ||
| 96 | + "target" : "http://rpa.crgx.xyz" | ||
| 97 | + } | ||
| 98 | + }, | ||
| 99 | + "https" : true | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | +} |
node_modules/.package-lock.json
0 → 100644
package-lock.json
0 → 100644
package.json
0 → 100644
pages.json
0 → 100644
| 1 | +{ | ||
| 2 | + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages | ||
| 3 | + { | ||
| 4 | + "path" : "pages/home/home", | ||
| 5 | + "style" : | ||
| 6 | + { | ||
| 7 | + "navigationBarTitleText" : "", | ||
| 8 | + "enablePullDownRefresh" : false | ||
| 9 | + } | ||
| 10 | + }, | ||
| 11 | + { | ||
| 12 | + "path" : "pages/booking/booking", | ||
| 13 | + "style" : | ||
| 14 | + { | ||
| 15 | + "navigationBarTitleText" : "", | ||
| 16 | + "enablePullDownRefresh" : false | ||
| 17 | + } | ||
| 18 | + }, | ||
| 19 | + { | ||
| 20 | + "path" : "pages/aboutSphere/aboutSphere", | ||
| 21 | + "style" : | ||
| 22 | + { | ||
| 23 | + "navigationBarTitleText" : "", | ||
| 24 | + "enablePullDownRefresh" : false | ||
| 25 | + } | ||
| 26 | + }, | ||
| 27 | + { | ||
| 28 | + "path" : "pages/mall/mall", | ||
| 29 | + "style" : | ||
| 30 | + { | ||
| 31 | + "navigationBarTitleText" : "", | ||
| 32 | + "enablePullDownRefresh" : false | ||
| 33 | + } | ||
| 34 | + }, | ||
| 35 | + { | ||
| 36 | + "path" : "pages/my/my", | ||
| 37 | + "style" : | ||
| 38 | + { | ||
| 39 | + "navigationBarTitleText" : "", | ||
| 40 | + "navigationStyle": "custom", | ||
| 41 | + "enablePullDownRefresh" : false | ||
| 42 | + } | ||
| 43 | + }, | ||
| 44 | + { | ||
| 45 | + "path" : "pages/arenaDetail/arenaDetail", | ||
| 46 | + "style" : | ||
| 47 | + { | ||
| 48 | + "navigationBarTitleText" : "", | ||
| 49 | + "navigationStyle": "custom", | ||
| 50 | + "enablePullDownRefresh" : false | ||
| 51 | + } | ||
| 52 | + }, | ||
| 53 | + { | ||
| 54 | + "path" : "pages/arenaDetail/vipRecharge", | ||
| 55 | + "style" : | ||
| 56 | + { | ||
| 57 | + "navigationBarTitleText" : "", | ||
| 58 | + "navigationStyle": "custom", | ||
| 59 | + "enablePullDownRefresh" : false | ||
| 60 | + } | ||
| 61 | + }, | ||
| 62 | + { | ||
| 63 | + "path" : "pages/morePhotos/morePhotos", | ||
| 64 | + "style" : | ||
| 65 | + { | ||
| 66 | + "navigationBarTitleText" : "场馆照片", | ||
| 67 | + "enablePullDownRefresh" : false | ||
| 68 | + } | ||
| 69 | + }, | ||
| 70 | + { | ||
| 71 | + "path" : "pages/moreComment/moreComment", | ||
| 72 | + "style" : | ||
| 73 | + { | ||
| 74 | + "navigationBarTitleText" : "球馆评论", | ||
| 75 | + "enablePullDownRefresh" : false | ||
| 76 | + } | ||
| 77 | + }, | ||
| 78 | + { | ||
| 79 | + "path" : "pages/comfirmOrder/comfirmOrder", | ||
| 80 | + "style" : | ||
| 81 | + { | ||
| 82 | + "navigationBarTitleText" : "确认订单", | ||
| 83 | + "enablePullDownRefresh" : false | ||
| 84 | + } | ||
| 85 | + }, | ||
| 86 | + { | ||
| 87 | + "path" : "pages/timeBooking/timeBooking", | ||
| 88 | + "style" : | ||
| 89 | + { | ||
| 90 | + "navigationBarTitleText" : "选时订场", | ||
| 91 | + "enablePullDownRefresh" : false | ||
| 92 | + } | ||
| 93 | + }, | ||
| 94 | + { | ||
| 95 | + "path" : "pages/paysuccess/paysuccess", | ||
| 96 | + "style" : | ||
| 97 | + { | ||
| 98 | + "navigationBarTitleText" : "支付成功", | ||
| 99 | + "enablePullDownRefresh" : false | ||
| 100 | + } | ||
| 101 | + }, | ||
| 102 | + { | ||
| 103 | + "path" : "pages/aboutBalls/aboutBalls", | ||
| 104 | + "style" : | ||
| 105 | + { | ||
| 106 | + "navigationBarTitleText" : "发起约球", | ||
| 107 | + "enablePullDownRefresh" : false | ||
| 108 | + } | ||
| 109 | + }, | ||
| 110 | + { | ||
| 111 | + "path" : "pages/aboutBallsDetail/aboutBallsDetail", | ||
| 112 | + "style" : | ||
| 113 | + { | ||
| 114 | + "navigationBarTitleText" : "", | ||
| 115 | + "navigationStyle": "custom", | ||
| 116 | + "enablePullDownRefresh" : false | ||
| 117 | + } | ||
| 118 | + }, | ||
| 119 | + { | ||
| 120 | + "path" : "pages/editInfo/editInfo", | ||
| 121 | + "style" : | ||
| 122 | + { | ||
| 123 | + "navigationBarTitleText" : "编辑信息", | ||
| 124 | + "enablePullDownRefresh" : false | ||
| 125 | + } | ||
| 126 | + }, | ||
| 127 | + { | ||
| 128 | + "path" : "pages/myOrder/myOrder", | ||
| 129 | + "style" : | ||
| 130 | + { | ||
| 131 | + "navigationBarTitleText" : "我的订单", | ||
| 132 | + "enablePullDownRefresh" : false | ||
| 133 | + } | ||
| 134 | + }, | ||
| 135 | + { | ||
| 136 | + "path" : "pages/myWallet/myWallet", | ||
| 137 | + "style" : | ||
| 138 | + { | ||
| 139 | + "navigationBarTitleText" : "我的钱包", | ||
| 140 | + "enablePullDownRefresh" : false | ||
| 141 | + } | ||
| 142 | + }, | ||
| 143 | + { | ||
| 144 | + "path" : "pages/moneyEdit/moneyEdit", | ||
| 145 | + "style" : | ||
| 146 | + { | ||
| 147 | + "navigationBarTitleText" : "金额操作", | ||
| 148 | + "enablePullDownRefresh" : false | ||
| 149 | + } | ||
| 150 | + }, | ||
| 151 | + { | ||
| 152 | + "path" : "pages/operateSuccess/operateSuccess", | ||
| 153 | + "style" : | ||
| 154 | + { | ||
| 155 | + "navigationBarTitleText" : "", | ||
| 156 | + "enablePullDownRefresh" : false | ||
| 157 | + } | ||
| 158 | + }, | ||
| 159 | + { | ||
| 160 | + "path" : "pages/login/login", | ||
| 161 | + "style" : | ||
| 162 | + { | ||
| 163 | + "navigationBarTitleText" : "", | ||
| 164 | + "navigationStyle": "custom", | ||
| 165 | + "enablePullDownRefresh" : false | ||
| 166 | + } | ||
| 167 | + }, | ||
| 168 | + { | ||
| 169 | + "path" : "pages/login/index", | ||
| 170 | + "style" : | ||
| 171 | + { | ||
| 172 | + "navigationBarTitleText" : "用户名登录", | ||
| 173 | + "enablePullDownRefresh" : false | ||
| 174 | + } | ||
| 175 | + }, | ||
| 176 | + { | ||
| 177 | + "path" : "pages/register/register", | ||
| 178 | + "style" : | ||
| 179 | + { | ||
| 180 | + "navigationBarTitleText" : "注册", | ||
| 181 | + "enablePullDownRefresh" : false | ||
| 182 | + } | ||
| 183 | + }, | ||
| 184 | + { | ||
| 185 | + "path" : "pages/applyRefund/applyRefund", | ||
| 186 | + "style" : | ||
| 187 | + { | ||
| 188 | + "navigationBarTitleText" : "申请退款", | ||
| 189 | + "enablePullDownRefresh" : false | ||
| 190 | + } | ||
| 191 | + }, | ||
| 192 | + { | ||
| 193 | + "path" : "pages/orderEvaluate/orderEvaluate", | ||
| 194 | + "style" : | ||
| 195 | + { | ||
| 196 | + "navigationBarTitleText" : "订单评价", | ||
| 197 | + "enablePullDownRefresh" : false | ||
| 198 | + } | ||
| 199 | + } | ||
| 200 | + ], | ||
| 201 | + "tabBar": { | ||
| 202 | + "color": "#888888", | ||
| 203 | + "selectedColor": "#FFA100", | ||
| 204 | + "borderStyle": "black", | ||
| 205 | + "backgroundColor": "#ffffff", | ||
| 206 | + "list": [{ | ||
| 207 | + "pagePath": "pages/home/home", | ||
| 208 | + "iconPath": "static/tabbar/House.png", | ||
| 209 | + "selectedIconPath": "static/tabbar/House_active.png", | ||
| 210 | + "text": "首页" | ||
| 211 | + }, { | ||
| 212 | + "pagePath": "pages/booking/booking", | ||
| 213 | + "iconPath": "static/tabbar/Timer.png", | ||
| 214 | + "selectedIconPath": "static/tabbar/Timer_active.png", | ||
| 215 | + "text": "订场" | ||
| 216 | + }, { | ||
| 217 | + "pagePath": "pages/aboutSphere/aboutSphere", | ||
| 218 | + "iconPath": "static/tabbar/Basketball.png", | ||
| 219 | + "selectedIconPath": "static/tabbar/Basketball_active.png", | ||
| 220 | + "text": "约球" | ||
| 221 | + }, { | ||
| 222 | + "pagePath": "pages/mall/mall", | ||
| 223 | + "iconPath": "static/tabbar/shopping.png", | ||
| 224 | + "selectedIconPath": "static/tabbar/shopping_active.png", | ||
| 225 | + "text": "商城" | ||
| 226 | + },{ | ||
| 227 | + "pagePath": "pages/my/my", | ||
| 228 | + "iconPath": "static/tabbar/SmileyBlank.png", | ||
| 229 | + "selectedIconPath": "static/tabbar/SmileyWink_active.png", | ||
| 230 | + "text": "我的" | ||
| 231 | + }] | ||
| 232 | + }, | ||
| 233 | + "globalStyle": { | ||
| 234 | + // #ifdef H5 | ||
| 235 | + // "navigationStyle": "custom", | ||
| 236 | + "maxWidth": 750, | ||
| 237 | + "rpxCalcMaxDeviceWidth": 750, // rpx 计算所支持的最大设备宽度,单位 px,默认值为 960 | ||
| 238 | + "rpxCalcBaseDeviceWidth": 560, // rpx 计算使用的基准设备宽度,设备实际宽度超出 rpx 计算所支持的最大设备宽度时将按基准宽度计算,单位 px,默认值为 375 | ||
| 239 | + "rpxCalcIncludeWidth": 9999, // rpx 计算特殊处理的值,始终按实际的设备宽度计算,单位 rpx,默认值为 750 | ||
| 240 | + // #endif | ||
| 241 | + "navigationBarBackgroundColor": "#ffffff", | ||
| 242 | + "navigationBarTitleText": "", | ||
| 243 | + "navigationBarTextStyle": "black", | ||
| 244 | + "backgroundTextStyle": "dark" | ||
| 245 | + }, | ||
| 246 | + "easycom": { | ||
| 247 | + "^u-(.*)": "@/uni_modules/uview-ui/components/u-$1/u-$1.vue" | ||
| 248 | + }, | ||
| 249 | + "uniIdRouter": {} | ||
| 250 | +} |
pages/aboutBalls/aboutBalls.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="about_balls"> | ||
| 3 | + <!-- 选项卡片 --> | ||
| 4 | + <view class="select_card"> | ||
| 5 | + <view class="title">运动项目</view> | ||
| 6 | + <view class="ball_list"> | ||
| 7 | + <view class="ball_item" v-for="(item, index) in imageList" :key="index" @click="ballActive = index"> | ||
| 8 | + <image class="ball_icon" v-show="ballActive !== index" :src="item.activeIcon" mode="widthFix"></image> | ||
| 9 | + <image class="ball_icon" v-show="ballActive === index" :src="item.icon" mode="widthFix"></image> | ||
| 10 | + <text :class="{ ballname: ballActive === index }">{{ item.title }}</text> | ||
| 11 | + </view> | ||
| 12 | + </view> | ||
| 13 | + <view class="title">选择场馆</view> | ||
| 14 | + <!-- 选择场馆 --> | ||
| 15 | + <view class="select_arena" @click="show = true"> | ||
| 16 | + <text>{{ arenaName }}</text> | ||
| 17 | + <u-icon name="arrow-right" color="#999"></u-icon> | ||
| 18 | + </view> | ||
| 19 | + <view class="title">项目时间</view> | ||
| 20 | + <!-- 时间范围 --> | ||
| 21 | + <view class="time_list"> | ||
| 22 | + <view class="startTime" @click="selectTime('start')">{{ startTime }}</view> | ||
| 23 | + <view class="line"></view> | ||
| 24 | + <view class="endTime" @click="selectTime('end')">{{ endTime }}</view> | ||
| 25 | + </view> | ||
| 26 | + </view> | ||
| 27 | + <!-- 运动人数 --> | ||
| 28 | + <view class="sport_number"> | ||
| 29 | + <view class="title">运动人数</view> | ||
| 30 | + <text>8 人</text> | ||
| 31 | + </view> | ||
| 32 | + <!-- 去人约球 --> | ||
| 33 | + <view class="footer"> | ||
| 34 | + <MyButton title="发起约球" @comfirn="goRouter" /> | ||
| 35 | + </view> | ||
| 36 | + <!-- 场馆选择 --> | ||
| 37 | + <u-picker :show="show" title="选择场馆" confirmColor="#FFA100" :columns="columns" :closeOnClickOverlay="true" @cancel="show = false" @close="show = false" @confirm="confirm"></u-picker> | ||
| 38 | + <!-- 时间选择 --> | ||
| 39 | + <u-datetime-picker | ||
| 40 | + ref="datetimePicker" | ||
| 41 | + :show="showDate" | ||
| 42 | + v-model="dateValue" | ||
| 43 | + title="选择约球时间" | ||
| 44 | + mode="datetime" | ||
| 45 | + :formatter="formatter" | ||
| 46 | + @cancel="showDate = false" | ||
| 47 | + @confirm="confirmTime" | ||
| 48 | + /> | ||
| 49 | + </view> | ||
| 50 | +</template> | ||
| 51 | + | ||
| 52 | +<script> | ||
| 53 | + import badminton from '@/static/images/sport/badminton.png' | ||
| 54 | + import badminton1 from '@/static/images/sport/badminton-1.png' | ||
| 55 | + import basketball from '@/static/images/sport/basketball.png' | ||
| 56 | + import basketball1 from '@/static/images/sport/basketball-1.png' | ||
| 57 | + import football from '@/static/images/sport/football.png' | ||
| 58 | + import football1 from '@/static/images/sport/football-1.png' | ||
| 59 | + import frisbee from '@/static/images/sport/frisbee.png' | ||
| 60 | + import frisbee1 from '@/static/images/sport/frisbee-1.png' | ||
| 61 | + import tableTennis from '@/static/images/sport/table-tennis.png' | ||
| 62 | + import tableTennis1 from '@/static/images/sport/table-tennis-1.png' | ||
| 63 | + import tennis from '@/static/images/sport/tennis.png' | ||
| 64 | + import tennis1 from '@/static/images/sport/tennis-1.png' | ||
| 65 | + import MyButton from '@/components/myButton.vue' | ||
| 66 | + export default { | ||
| 67 | + components: { MyButton }, | ||
| 68 | + data() { | ||
| 69 | + return { | ||
| 70 | + ballActive: 0, // 动态球类索引 | ||
| 71 | + show: false, // 显示场馆列表 | ||
| 72 | + showDate: false, // 时间选择列表 | ||
| 73 | + dateValue: '', // 选择的时间值 | ||
| 74 | + startTime: '开始时间', // 开始时间 | ||
| 75 | + endTime: '结束时间', // 结束时间 | ||
| 76 | + timeMode: '', // 时间状态 | ||
| 77 | + arenaName: '', | ||
| 78 | + columns: [ | ||
| 79 | + ['彩虹体育馆', '飞人网球场', 'L2T体育馆'] | ||
| 80 | + ], | ||
| 81 | + // 球类列表 | ||
| 82 | + imageList: [ | ||
| 83 | + { title: '羽毛球', icon: badminton, activeIcon: badminton1 }, | ||
| 84 | + { title: '足球', icon: football, activeIcon: football1 }, | ||
| 85 | + { title: '网球', icon: tennis, activeIcon: tennis1 }, | ||
| 86 | + { title: '飞盘', icon: frisbee, activeIcon: frisbee1 }, | ||
| 87 | + { title: '篮球', icon: basketball, activeIcon: basketball1 }, | ||
| 88 | + { title: '乒乓球', icon: tableTennis, activeIcon: tableTennis1 } | ||
| 89 | + ] | ||
| 90 | + } | ||
| 91 | + }, | ||
| 92 | + onReady() { | ||
| 93 | + // 微信小程序需要用此写法 | ||
| 94 | + this.$refs.datetimePicker.setFormatter(this.formatter) | ||
| 95 | + }, | ||
| 96 | + methods: { | ||
| 97 | + // 确认选择场馆 | ||
| 98 | + confirm({value}){ | ||
| 99 | + this.show = false | ||
| 100 | + this.arenaName = value | ||
| 101 | + }, | ||
| 102 | + // 时间过滤器 | ||
| 103 | + formatter(type, value) { | ||
| 104 | + let timeObj = { | ||
| 105 | + year: `${value}年`, | ||
| 106 | + month: `${value}月`, | ||
| 107 | + day: `${value}日`, | ||
| 108 | + hour: `${value}时`, | ||
| 109 | + minute: `${value}分`, | ||
| 110 | + } | ||
| 111 | + return timeObj[type] | ||
| 112 | + }, | ||
| 113 | + // 选择时间 | ||
| 114 | + selectTime(value){ | ||
| 115 | + this.timeMode = value | ||
| 116 | + this.showDate = true | ||
| 117 | + }, | ||
| 118 | + // 选择时间的值 | ||
| 119 | + confirmTime({value}){ | ||
| 120 | + if(this.timeMode === 'start') { | ||
| 121 | + this.startTime = uni.$u.timeFormat(value, 'yyyy-mm-dd hh:MM') | ||
| 122 | + } else { | ||
| 123 | + this.endTime = uni.$u.timeFormat(value, 'yyyy-mm-dd hh:MM') | ||
| 124 | + } | ||
| 125 | + this.showDate = false | ||
| 126 | + }, | ||
| 127 | + // 前往订单详情 | ||
| 128 | + goRouter(){ | ||
| 129 | + uni.navigateTo({ | ||
| 130 | + url: '/pages/comfirmOrder/comfirmOrder' | ||
| 131 | + }) | ||
| 132 | + } | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | +</script> | ||
| 136 | + | ||
| 137 | +<style lang="scss" scoped> | ||
| 138 | + .title{ | ||
| 139 | + position: relative; | ||
| 140 | + font-weight: 500; | ||
| 141 | + font-size: 28rpx; | ||
| 142 | + line-height: 36rpx; | ||
| 143 | + color: #333; | ||
| 144 | + margin-left: 20rpx; | ||
| 145 | + &::before{ | ||
| 146 | + content: ''; | ||
| 147 | + position: absolute; | ||
| 148 | + left: -20rpx; | ||
| 149 | + top: 50%; | ||
| 150 | + transform: translateY(-50%); | ||
| 151 | + width: 8rpx; | ||
| 152 | + height: 8rpx; | ||
| 153 | + background-color: #FFA100; | ||
| 154 | + border-radius: 50%; | ||
| 155 | + } | ||
| 156 | + } | ||
| 157 | +.about_balls{ | ||
| 158 | + padding: 24rpx 30rpx 0; | ||
| 159 | + background-color: #F6F6F6; | ||
| 160 | + min-height: 100vh; | ||
| 161 | + box-sizing: border-box; | ||
| 162 | + .select_card{ | ||
| 163 | + height: 548rpx; | ||
| 164 | + background: #FFFFFF; | ||
| 165 | + box-sizing: border-box; | ||
| 166 | + padding: 24rpx; | ||
| 167 | + border-radius: 12rpx 12rpx 12rpx 12rpx; | ||
| 168 | + .ball_list{ | ||
| 169 | + display: flex; | ||
| 170 | + align-items: center; | ||
| 171 | + justify-content: space-around; | ||
| 172 | + margin: 34rpx 0; | ||
| 173 | + .ball_item{ | ||
| 174 | + display: flex; | ||
| 175 | + flex-direction: column; | ||
| 176 | + align-items: center; | ||
| 177 | + font-size: 24rpx; | ||
| 178 | + color: #999; | ||
| 179 | + line-height: 28rpx; | ||
| 180 | + .ballname{ | ||
| 181 | + color: #FFA100; | ||
| 182 | + font-weight: 500; | ||
| 183 | + } | ||
| 184 | + .ball_icon{ | ||
| 185 | + width: 48rpx; | ||
| 186 | + height: 48rpx; | ||
| 187 | + margin-bottom: 16rpx; | ||
| 188 | + } | ||
| 189 | + } | ||
| 190 | + } | ||
| 191 | + // 选择场馆 | ||
| 192 | + .select_arena{ | ||
| 193 | + display: flex; | ||
| 194 | + align-items: center; | ||
| 195 | + justify-content: space-between; | ||
| 196 | + padding: 0 32rpx; | ||
| 197 | + height: 68rpx; | ||
| 198 | + background: #F6F6F6; | ||
| 199 | + border-radius: 68rpx; | ||
| 200 | + color: #333; | ||
| 201 | + font-size: 24rpx; | ||
| 202 | + margin: 24rpx 0 36rpx 0; | ||
| 203 | + } | ||
| 204 | + // 选择时间 | ||
| 205 | + .time_list { | ||
| 206 | + display: flex; | ||
| 207 | + align-items: center; | ||
| 208 | + justify-content: space-between; | ||
| 209 | + margin-top: 22rpx; | ||
| 210 | + .startTime, .endTime{ | ||
| 211 | + width: 256rpx; | ||
| 212 | + height: 56rpx; | ||
| 213 | + background: #F6F6F6; | ||
| 214 | + border-radius: 68rpx; | ||
| 215 | + font-size: 24rpx; | ||
| 216 | + color: #333; | ||
| 217 | + text-align: center; | ||
| 218 | + line-height: 56rpx; | ||
| 219 | + } | ||
| 220 | + .line{ | ||
| 221 | + width: 44rpx; | ||
| 222 | + height: 0rpx; | ||
| 223 | + border: 2rpx solid rgba(225,225,225,0.7); | ||
| 224 | + } | ||
| 225 | + } | ||
| 226 | + } | ||
| 227 | + // 人数 | ||
| 228 | + .sport_number{ | ||
| 229 | + display: flex; | ||
| 230 | + align-items: center; | ||
| 231 | + justify-content: space-between; | ||
| 232 | + padding: 24rpx; | ||
| 233 | + height: 88rpx; | ||
| 234 | + box-sizing: border-box; | ||
| 235 | + background: #FFFFFF; | ||
| 236 | + border-radius: 12rpx 12rpx 12rpx 12rpx; | ||
| 237 | + margin-top: 24rpx; | ||
| 238 | + } | ||
| 239 | + // 确认约球 | ||
| 240 | + .footer{ | ||
| 241 | + position: fixed; | ||
| 242 | + height: 112rpx; | ||
| 243 | + width: 100%; | ||
| 244 | + box-sizing: border-box; | ||
| 245 | + bottom: 0; | ||
| 246 | + left: 0; | ||
| 247 | + background-color: #fff; | ||
| 248 | + padding: 16rpx 30rpx; | ||
| 249 | + } | ||
| 250 | +} | ||
| 251 | +</style> |
pages/aboutBallsDetail/aboutBallsDetail.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="detail_container"> | ||
| 3 | + <!-- 头部详情 --> | ||
| 4 | + <view class="detail_head"> | ||
| 5 | + <image class="head_cover" src="@/static/images/start/login-bg-mob.png" mode="widthFix"></image> | ||
| 6 | + <view class="nav_item"> | ||
| 7 | + <u-icon name="arrow-left" color="#fff" @click="goBack"></u-icon> | ||
| 8 | + </view> | ||
| 9 | + </view> | ||
| 10 | + | ||
| 11 | + <!-- 球馆信息卡片 --> | ||
| 12 | + <view class="arnea_card"> | ||
| 13 | + <view class="arena_box"> | ||
| 14 | + <ArenaDetailCard /> | ||
| 15 | + </view> | ||
| 16 | + </view> | ||
| 17 | + | ||
| 18 | + <!-- 场馆评价 --> | ||
| 19 | + <EvaluateCard /> | ||
| 20 | + <!-- 拼球信息卡 --> | ||
| 21 | + <BookingInfoCard /> | ||
| 22 | + <!-- 系统通知 --> | ||
| 23 | + <SystemTip /> | ||
| 24 | + | ||
| 25 | + </view> | ||
| 26 | +</template> | ||
| 27 | + | ||
| 28 | +<script> | ||
| 29 | + import SystemTip from '@/components/systemTip.vue' | ||
| 30 | + import BookingInfoCard from './components/bookingInfoCard.vue' | ||
| 31 | + import EvaluateCard from './components/evaluateCard.vue' | ||
| 32 | + import ArenaDetailCard from '@/pages/arenaDetail/components/ArenaDetailCard.vue' | ||
| 33 | + export default { | ||
| 34 | + components: { ArenaDetailCard, EvaluateCard, BookingInfoCard, SystemTip }, | ||
| 35 | + data() { | ||
| 36 | + return { | ||
| 37 | + status: 'loadmore' | ||
| 38 | + } | ||
| 39 | + }, | ||
| 40 | + methods: { | ||
| 41 | + goBack() { | ||
| 42 | + uni.navigateBack() | ||
| 43 | + }, | ||
| 44 | + goRouter(path) { | ||
| 45 | + uni.navigateTo({ | ||
| 46 | + url: path | ||
| 47 | + }) | ||
| 48 | + } | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | +</script> | ||
| 52 | + | ||
| 53 | +<style lang="scss" scoped> | ||
| 54 | +.detail_container{ | ||
| 55 | + background-color: #F6F6F6; | ||
| 56 | + min-height: 100vh; | ||
| 57 | + padding-bottom: 60rpx; | ||
| 58 | + // 头部背景 | ||
| 59 | + .detail_head{ | ||
| 60 | + position: relative; | ||
| 61 | + height: 396rpx; | ||
| 62 | + overflow: hidden; | ||
| 63 | + .head_cover{ | ||
| 64 | + position: absolute; | ||
| 65 | + top: -344rpx; | ||
| 66 | + left: 0; | ||
| 67 | + width: 100%; | ||
| 68 | + } | ||
| 69 | + .nav_item{ | ||
| 70 | + width: 100%; | ||
| 71 | + box-sizing: border-box; | ||
| 72 | + margin: 68rpx 0 0 40rpx; | ||
| 73 | + } | ||
| 74 | + } | ||
| 75 | + // 球馆信息 | ||
| 76 | + .arnea_card{ | ||
| 77 | + position: relative; | ||
| 78 | + .arena_box{ | ||
| 79 | + margin-top: -172rpx; | ||
| 80 | + } | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | +} | ||
| 84 | +</style> |
| 1 | +<template> | ||
| 2 | + <view class="bookingInfoCard"> | ||
| 3 | + <view class="row_info"> | ||
| 4 | + <view class="left">拼球发起人:CLOOL</view> | ||
| 5 | + </view> | ||
| 6 | + <view class="row_info" style="margin: 28rpx 0;"> | ||
| 7 | + <view class="left">需求拼场:6人</view> | ||
| 8 | + <MyButton title="拼场" size="small"></MyButton> | ||
| 9 | + </view> | ||
| 10 | + <view class="row_info"> | ||
| 11 | + <view class="left"> | ||
| 12 | + <text>已经拼场:</text> | ||
| 13 | + <u-avatar-group | ||
| 14 | + :urls="urls" | ||
| 15 | + size="20" | ||
| 16 | + gap="0" | ||
| 17 | + /> | ||
| 18 | + </view> | ||
| 19 | + <MyButton title="邀请" size="small"></MyButton> | ||
| 20 | + </view> | ||
| 21 | + </view> | ||
| 22 | +</template> | ||
| 23 | + | ||
| 24 | +<script> | ||
| 25 | + import MyButton from '@/components/myButton.vue' | ||
| 26 | + export default{ | ||
| 27 | + components: { MyButton }, | ||
| 28 | + data(){ | ||
| 29 | + return { | ||
| 30 | + urls: [ | ||
| 31 | + 'https://cdn.uviewui.com/uview/album/1.jpg', | ||
| 32 | + 'https://cdn.uviewui.com/uview/album/2.jpg', | ||
| 33 | + 'https://cdn.uviewui.com/uview/album/3.jpg', | ||
| 34 | + 'https://cdn.uviewui.com/uview/album/4.jpg' | ||
| 35 | + ] | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + } | ||
| 39 | +</script> | ||
| 40 | + | ||
| 41 | +<style lang="scss" scoped> | ||
| 42 | + .bookingInfoCard{ | ||
| 43 | + background: #FFFFFF; | ||
| 44 | + border-radius: 16rpx; | ||
| 45 | + padding: 26rpx 32rpx; | ||
| 46 | + margin: 0 30rpx 24rpx; | ||
| 47 | + .row_info{ | ||
| 48 | + display: flex; | ||
| 49 | + align-items: center; | ||
| 50 | + justify-content: space-between; | ||
| 51 | + color: #333; | ||
| 52 | + font-size: 28rpx; | ||
| 53 | + line-height: 40rpx; | ||
| 54 | + .left{ | ||
| 55 | + display: flex; | ||
| 56 | + align-items: center; | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + } | ||
| 60 | +</style> |
| 1 | +<template> | ||
| 2 | + <view class="comment_arena"> | ||
| 3 | + <CommonTitleNav titleName="场馆评价"> | ||
| 4 | + <template #side-content> | ||
| 5 | + <view style="display: flex;align-items: center;font-size: 24rpx;color: #999;"> | ||
| 6 | + <text style="margin-right: 6rpx;">更多评价</text> | ||
| 7 | + <u-icon name="arrow-right" color="#999999" size="14"></u-icon> | ||
| 8 | + </view> | ||
| 9 | + </template> | ||
| 10 | + </CommonTitleNav> | ||
| 11 | + | ||
| 12 | + <!-- 评分 --> | ||
| 13 | + <view class="evaluate"> | ||
| 14 | + <view class="left_box"> | ||
| 15 | + <view class="evaluate_item"> | ||
| 16 | + <text>整体评价</text> | ||
| 17 | + <text class="score">4.8</text> | ||
| 18 | + </view> | ||
| 19 | + </view> | ||
| 20 | + <view class="right_box"> | ||
| 21 | + <view v-for="(item, index) in evaluateList" :key="index" class="evaluate_item"> | ||
| 22 | + <text>{{ item.title }}</text> | ||
| 23 | + <text class="score">{{ item.score }}</text> | ||
| 24 | + </view> | ||
| 25 | + </view> | ||
| 26 | + </view> | ||
| 27 | + </view> | ||
| 28 | +</template> | ||
| 29 | + | ||
| 30 | +<script> | ||
| 31 | + import CommonTitleNav from '@/components/commonTitleNav.vue' | ||
| 32 | + export default{ | ||
| 33 | + components: { CommonTitleNav }, | ||
| 34 | + data() { | ||
| 35 | + return { | ||
| 36 | + evaluateList: [ | ||
| 37 | + { title: '环境', score: '4.6' }, | ||
| 38 | + { title: '服务', score: '4.5' }, | ||
| 39 | + { title: '性价比', score: '4.9' }, | ||
| 40 | + ] | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | + } | ||
| 44 | +</script> | ||
| 45 | + | ||
| 46 | +<style lang="scss" scoped> | ||
| 47 | + // 场馆评价 | ||
| 48 | + .comment_arena{ | ||
| 49 | + background: #FFFFFF; | ||
| 50 | + border-radius: 16rpx; | ||
| 51 | + margin: 24rpx 30rpx; | ||
| 52 | + padding: 24rpx 32rpx; | ||
| 53 | + box-sizing: border-box; | ||
| 54 | + // 评价 | ||
| 55 | + .evaluate{ | ||
| 56 | + display: flex; | ||
| 57 | + align-items: center; | ||
| 58 | + justify-content: space-between; | ||
| 59 | + margin-top: 26rpx; | ||
| 60 | + .left_box{ | ||
| 61 | + flex: 3; | ||
| 62 | + .evaluate_item{ | ||
| 63 | + align-items: flex-start; | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + .right_box{ | ||
| 67 | + flex: 4; | ||
| 68 | + display: flex; | ||
| 69 | + justify-content: space-around; | ||
| 70 | + } | ||
| 71 | + .evaluate_item{ | ||
| 72 | + display: flex; | ||
| 73 | + flex-direction: column; | ||
| 74 | + align-items: center; | ||
| 75 | + color: #333; | ||
| 76 | + font-size: 24rpx; | ||
| 77 | + line-height: 32rpx; | ||
| 78 | + .score{ | ||
| 79 | + color: #FFA100; | ||
| 80 | + font-size: 32rpx; | ||
| 81 | + margin-top: 24rpx; | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | + } | ||
| 85 | + } | ||
| 86 | +</style> |
pages/aboutSphere/aboutSphere.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="booking"> | ||
| 3 | + <u-sticky bgColor="#fff"> | ||
| 4 | + <view class="header_booking"> | ||
| 5 | + <u-tabs :list="list" lineColor="#FFA100" :activeStyle="{color: '#ffa100'}"></u-tabs> | ||
| 6 | + <view class="select_list"> | ||
| 7 | + <view class="select_item" @click="show = true"> | ||
| 8 | + <text class="text">距离</text> | ||
| 9 | + <u-icon name="arrow-down-fill"></u-icon> | ||
| 10 | + </view> | ||
| 11 | + <view class="select_item" @click="show = true"> | ||
| 12 | + <text class="text">价格</text> | ||
| 13 | + <u-icon name="arrow-down-fill" color="#666"></u-icon> | ||
| 14 | + </view> | ||
| 15 | + <view class="select_item"> | ||
| 16 | + <text>时间段</text> | ||
| 17 | + <u-icon name="arrow-down-fill" color="#666"></u-icon> | ||
| 18 | + </view> | ||
| 19 | + </view> | ||
| 20 | + </view> | ||
| 21 | + </u-sticky> | ||
| 22 | + | ||
| 23 | + <!-- 球场列表 --> | ||
| 24 | + <view class="arena_list"> | ||
| 25 | + <ArenaCard v-for="item in 5" :isBooking="false" :key="item" /> | ||
| 26 | + </view> | ||
| 27 | + | ||
| 28 | + <view class="footer"> | ||
| 29 | + <MyButton title="发起约球" @comfirn="goRouter" /> | ||
| 30 | + </view> | ||
| 31 | + <u-picker :show="show" confirmColor="#ffa100" :columns="columns" :closeOnClickOverlay="true" @close="show = false" @cancel="show = false" @confirm="show = false"></u-picker> | ||
| 32 | + </view> | ||
| 33 | +</template> | ||
| 34 | + | ||
| 35 | +<script> | ||
| 36 | + import MyButton from '@/components/myButton.vue' | ||
| 37 | + import ArenaCard from '@/pages/home/components/arenaCard.vue' | ||
| 38 | + export default { | ||
| 39 | + components: { ArenaCard, MyButton }, | ||
| 40 | + data() { | ||
| 41 | + return { | ||
| 42 | + show: false, | ||
| 43 | + columns: [ | ||
| 44 | + ['1km以内', '3km以内', '5km以内', '10km以内'] | ||
| 45 | + ], | ||
| 46 | + list: [ | ||
| 47 | + {name: '羽毛球'}, | ||
| 48 | + {name: '网球'}, | ||
| 49 | + {name: '飞盘'}, | ||
| 50 | + {name: '足球'}, | ||
| 51 | + {name: '篮球'}, | ||
| 52 | + {name: '兵乒球'} | ||
| 53 | + ] | ||
| 54 | + } | ||
| 55 | + }, | ||
| 56 | + methods: { | ||
| 57 | + goRouter(){ | ||
| 58 | + uni.navigateTo({ | ||
| 59 | + url: '/pages/aboutBalls/aboutBalls' | ||
| 60 | + }) | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | +</script> | ||
| 65 | + | ||
| 66 | +<style lang="scss" scoped> | ||
| 67 | +.booking{ | ||
| 68 | + background-color: #F6F6F6; | ||
| 69 | + padding-bottom: 112rpx; | ||
| 70 | + .header_booking{ | ||
| 71 | + background-color: #fff; | ||
| 72 | + .select_list{ | ||
| 73 | + display: flex; | ||
| 74 | + align-items: center; | ||
| 75 | + justify-content: space-around; | ||
| 76 | + height: 84rpx; | ||
| 77 | + padding: 0 30rpx; | ||
| 78 | + border-top: 2rpx solid #E1E1E1; | ||
| 79 | + box-sizing: border-box; | ||
| 80 | + .select_item{ | ||
| 81 | + display: flex; | ||
| 82 | + align-items: center; | ||
| 83 | + font-size: 28rpx; | ||
| 84 | + line-height: 32rpx; | ||
| 85 | + color: #666; | ||
| 86 | + .text{ | ||
| 87 | + margin-right: 8rpx; | ||
| 88 | + } | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | + } | ||
| 92 | + | ||
| 93 | + .arena_list{ | ||
| 94 | + padding: 30rpx; | ||
| 95 | + } | ||
| 96 | + | ||
| 97 | + .footer{ | ||
| 98 | + position: fixed; | ||
| 99 | + height: 112rpx; | ||
| 100 | + width: 100%; | ||
| 101 | + box-sizing: border-box; | ||
| 102 | + bottom: 0; | ||
| 103 | + left: 0; | ||
| 104 | + background-color: #fff; | ||
| 105 | + padding: 16rpx 30rpx; | ||
| 106 | + } | ||
| 107 | +} | ||
| 108 | +</style> |
pages/applyRefund/applyRefund.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="apply_refund"> | ||
| 3 | + <view class="box"> | ||
| 4 | + <view class="arenaInfo"> | ||
| 5 | + <view class="detail">预约详情</view> | ||
| 6 | + <view class="info">场馆信息</view> | ||
| 7 | + <ArenaCard /> | ||
| 8 | + </view> | ||
| 9 | + <u-cell-group :border="false"> | ||
| 10 | + <u-cell :border="false" v-for="(item, index) in orderInfo" :key="index" :titleStyle="{color: '#666', fontSize: '24rpx'}" :title="item.title"> | ||
| 11 | + <text slot="right-icon" style="font-size: 24rpx;color: #333;">{{ item.info }}</text> | ||
| 12 | + </u-cell> | ||
| 13 | + </u-cell-group> | ||
| 14 | + </view> | ||
| 15 | + <!-- 退款原因 --> | ||
| 16 | + <view class="user_intro"> | ||
| 17 | + <view class="intro">退款原因:</view> | ||
| 18 | + <u--textarea v-model="introStr" :placeholder="defaultTip" placeholderClass height="188rpx" count ></u--textarea> | ||
| 19 | + </view> | ||
| 20 | + | ||
| 21 | + <!-- 联系方式 --> | ||
| 22 | + <view class="user_intro"> | ||
| 23 | + <view class="intro">联系方式:</view> | ||
| 24 | + <u--form :model="form" ref="uForm" :labelStyle="{color: '#666', fontSize: '24rpx'}"> | ||
| 25 | + <u-form-item label="联系人:" prop="name"> | ||
| 26 | + <u-input v-model="form.name" placeholder="请输入您的姓名" :customStyle="{padding: '10rpx', backgroundColor: '#F6F6F6'}" /> | ||
| 27 | + </u-form-item> | ||
| 28 | + <u-form-item label="手机号:" prop="phone"> | ||
| 29 | + <u-input v-model="form.phone" placeholder="请输入正确的手机号码,便于商家联系" :customStyle="{padding: '10rpx', backgroundColor: '#F6F6F6'}" /> | ||
| 30 | + </u-form-item> | ||
| 31 | + </u--form> | ||
| 32 | + </view> | ||
| 33 | + <!-- 提交申请 --> | ||
| 34 | + <view class="footer"> | ||
| 35 | + <MyButton title="提交申请" /> | ||
| 36 | + </view> | ||
| 37 | + </view> | ||
| 38 | +</template> | ||
| 39 | + | ||
| 40 | +<script> | ||
| 41 | + import MyButton from '@/components/myButton.vue' | ||
| 42 | + import ArenaCard from '@/pages/home/components/arenaCard.vue' | ||
| 43 | + export default { | ||
| 44 | + components: { ArenaCard, MyButton }, | ||
| 45 | + data() { | ||
| 46 | + return { | ||
| 47 | + form: { | ||
| 48 | + name: '', | ||
| 49 | + phone: '' | ||
| 50 | + }, | ||
| 51 | + introStr: '', | ||
| 52 | + defaultTip: '请正确输入退款原因,以便于商家审核,小于5小时退款订单,有可能对商家造成损失,可能无法进行退款。请尽可能的与商家进行友好协商', | ||
| 53 | + orderInfo: [ | ||
| 54 | + { title: '订单信息', info: '' }, | ||
| 55 | + { title: '订单编号', info: '000026' }, | ||
| 56 | + { title: '预约时间', info: '2022-12-26 14:00-16:66' }, | ||
| 57 | + { title: '支付金额', info: '¥ 268' }, | ||
| 58 | + { title: '支付流水号', info: '123456' } | ||
| 59 | + ] | ||
| 60 | + }; | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | +</script> | ||
| 64 | + | ||
| 65 | +<style lang="scss" scoped> | ||
| 66 | +/deep/ .textarea-placeholder{ | ||
| 67 | + font-size: 22rpx; | ||
| 68 | + color: #999; | ||
| 69 | + line-height: 40rpx; | ||
| 70 | +} | ||
| 71 | +/deep/ .input-placeholder{ | ||
| 72 | + font-size: 24rpx; | ||
| 73 | + color: #999; | ||
| 74 | +} | ||
| 75 | + | ||
| 76 | +.apply_refund{ | ||
| 77 | + min-height: 100vh; | ||
| 78 | + padding: 18rpx 30rpx; | ||
| 79 | + background-color: #F6F6F6; | ||
| 80 | + box-sizing: border-box; | ||
| 81 | + padding-bottom: 10rpx; | ||
| 82 | + .box{ | ||
| 83 | + padding: 24rpx 0; | ||
| 84 | + background: #FFFFFF; | ||
| 85 | + border-radius: 12rpx; | ||
| 86 | + } | ||
| 87 | + .arenaInfo{ | ||
| 88 | + font-size: 28rpx; | ||
| 89 | + color: #333; | ||
| 90 | + line-height: 36rpx; | ||
| 91 | + padding-bottom: 10rpx; | ||
| 92 | + border-bottom: 2rpx solid #D8D8D8; | ||
| 93 | + .detail{ | ||
| 94 | + padding: 0 30rpx; | ||
| 95 | + } | ||
| 96 | + .info{ | ||
| 97 | + padding: 0 30rpx; | ||
| 98 | + font-size: 24rpx; | ||
| 99 | + color: #999; | ||
| 100 | + line-height: 32rpx; | ||
| 101 | + margin: 16rpx 0 8rpx 0; | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + .user_intro{ | ||
| 105 | + margin-top: 24rpx; | ||
| 106 | + padding: 28rpx; | ||
| 107 | + background: #FFFFFF; | ||
| 108 | + border-radius: 12rpx; | ||
| 109 | + .intro{ | ||
| 110 | + font-size: 26rpx; | ||
| 111 | + color: #333; | ||
| 112 | + margin-bottom: 24rpx; | ||
| 113 | + line-height: 36rpx; | ||
| 114 | + } | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + .footer{ | ||
| 118 | + position: fixed; | ||
| 119 | + bottom: 0; | ||
| 120 | + left: 0; | ||
| 121 | + width: 100%; | ||
| 122 | + box-sizing: border-box; | ||
| 123 | + background-color: #fff; | ||
| 124 | + padding: 16rpx 30rpx; | ||
| 125 | + } | ||
| 126 | +} | ||
| 127 | +</style> |
pages/arenaDetail/arenaDetail.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="detail_container"> | ||
| 3 | + <!-- 头部详情 --> | ||
| 4 | + <view class="detail_head"> | ||
| 5 | + <image class="head_cover" src="@/static/images/start/login-bg-mob.png" mode="widthFix"></image> | ||
| 6 | + <view class="nav_item"> | ||
| 7 | + <u-icon name="arrow-left" color="#fff" @click="goBack"></u-icon> | ||
| 8 | + </view> | ||
| 9 | + </view> | ||
| 10 | + | ||
| 11 | + <!-- 球馆信息卡片 --> | ||
| 12 | + <view class="arnea_card"> | ||
| 13 | + <view class="arena_box"> | ||
| 14 | + <ArenaDetailCard /> | ||
| 15 | + </view> | ||
| 16 | + </view> | ||
| 17 | + | ||
| 18 | + <!-- 会员充值提示 --> | ||
| 19 | + <view class="vip" @click="goRouter('/pages/arenaDetail/vipRecharge')"> | ||
| 20 | + <vipCard></vipCard> | ||
| 21 | + </view> | ||
| 22 | + | ||
| 23 | + <!-- 选场 --> | ||
| 24 | + <view class="book"> | ||
| 25 | + <view class="book_title"> | ||
| 26 | + <view>选场预订</view> | ||
| 27 | + <view class="bookNum">本球场共6个场地</view> | ||
| 28 | + </view> | ||
| 29 | + <view class="book_content"> | ||
| 30 | + <BookCard v-for="item in 4" :key="item" /> | ||
| 31 | + <u-loadmore :status="status" line /> | ||
| 32 | + </view> | ||
| 33 | + </view> | ||
| 34 | + <!-- 评论 --> | ||
| 35 | + <view class="comment"> | ||
| 36 | + <view class="comment_box"> | ||
| 37 | + <CommonTitleNav title-name="用户评论" mark-color="#666666" right-title="(1265+评论)" > | ||
| 38 | + <template #side-content> | ||
| 39 | + <view style="display: flex;align-items: center;font-size: 24rpx;" @click="goRouter('/pages/moreComment/moreComment')"> | ||
| 40 | + <text style="margin-right: 6rpx;color: #999;">更多评价</text> | ||
| 41 | + <u-icon name="arrow-right" color="#999999" size="12"></u-icon> | ||
| 42 | + </view> | ||
| 43 | + </template> | ||
| 44 | + </CommonTitleNav> | ||
| 45 | + | ||
| 46 | + <view class="comment_content"> | ||
| 47 | + <!-- 评价内容 --> | ||
| 48 | + <CommentCard v-for="item in 3" :key="item" /> | ||
| 49 | + </view> | ||
| 50 | + </view> | ||
| 51 | + </view> | ||
| 52 | + | ||
| 53 | + </view> | ||
| 54 | +</template> | ||
| 55 | + | ||
| 56 | +<script> | ||
| 57 | + import CommonTitleNav from '@/components/commonTitleNav.vue' | ||
| 58 | + import ArenaDetailCard from './components/ArenaDetailCard.vue' | ||
| 59 | + import vipCard from './components/vipCard.vue' | ||
| 60 | + import BookCard from './components/bookCard.vue' | ||
| 61 | + import CommentCard from '@/components/commentCard.vue' | ||
| 62 | + export default { | ||
| 63 | + components: { ArenaDetailCard, BookCard, CommonTitleNav, CommentCard, vipCard }, | ||
| 64 | + data() { | ||
| 65 | + return { | ||
| 66 | + status: 'loadmore', | ||
| 67 | + } | ||
| 68 | + }, | ||
| 69 | + methods: { | ||
| 70 | + goBack() { | ||
| 71 | + uni.navigateBack() | ||
| 72 | + }, | ||
| 73 | + goRouter(path) { | ||
| 74 | + uni.navigateTo({ | ||
| 75 | + url: path | ||
| 76 | + }) | ||
| 77 | + } | ||
| 78 | + } | ||
| 79 | + } | ||
| 80 | +</script> | ||
| 81 | + | ||
| 82 | +<style lang="scss" scoped> | ||
| 83 | +.detail_container{ | ||
| 84 | + background-color: #F6F6F6; | ||
| 85 | + min-height: 100vh; | ||
| 86 | + padding-bottom: 60rpx; | ||
| 87 | + | ||
| 88 | + .detail_head{ | ||
| 89 | + position: relative; | ||
| 90 | + height: 396rpx; | ||
| 91 | + overflow: hidden; | ||
| 92 | + .head_cover{ | ||
| 93 | + position: absolute; | ||
| 94 | + top: -344rpx; | ||
| 95 | + left: 0; | ||
| 96 | + width: 100%; | ||
| 97 | + } | ||
| 98 | + .nav_item{ | ||
| 99 | + width: 100%; | ||
| 100 | + box-sizing: border-box; | ||
| 101 | + margin: 68rpx 0 0 40rpx; | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + .arnea_card{ | ||
| 106 | + position: relative; | ||
| 107 | + .arena_box{ | ||
| 108 | + margin-top: -172rpx; | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + .vip{ | ||
| 113 | + padding: 0 30rpx; | ||
| 114 | + margin: 20rpx 0; | ||
| 115 | + box-sizing: border-box; | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + .book{ | ||
| 119 | + margin-top: 30rpx; | ||
| 120 | + padding: 0 30rpx; | ||
| 121 | + .book_title{ | ||
| 122 | + display: flex; | ||
| 123 | + align-items: center; | ||
| 124 | + margin-bottom: 24rpx; | ||
| 125 | + font-size: 32rpx; | ||
| 126 | + line-height: 40rpx; | ||
| 127 | + color: #333; | ||
| 128 | + .bookNum{ | ||
| 129 | + color: #999; | ||
| 130 | + font-size: 24rpx; | ||
| 131 | + line-height: 32rpx; | ||
| 132 | + margin-left: 20rpx; | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + .book_content{ | ||
| 136 | + min-height: 548rpx; | ||
| 137 | + background: #FFFFFF; | ||
| 138 | + border-radius: 16rpx; | ||
| 139 | + padding: 34rpx 26rpx; | ||
| 140 | + } | ||
| 141 | + } | ||
| 142 | + | ||
| 143 | + .comment{ | ||
| 144 | + margin-top: 20rpx; | ||
| 145 | + padding: 0 30rpx; | ||
| 146 | + .comment_box{ | ||
| 147 | + min-height: 684rpx; | ||
| 148 | + background: #FFFFFF; | ||
| 149 | + border-radius: 16rpx; | ||
| 150 | + padding: 24rpx 26rpx 30rpx; | ||
| 151 | + } | ||
| 152 | + } | ||
| 153 | + .comment_content{ | ||
| 154 | + margin-top: 40rpx; | ||
| 155 | + } | ||
| 156 | +} | ||
| 157 | +</style> |
| 1 | +<template> | ||
| 2 | + <view class="detail_card"> | ||
| 3 | + <view class="header_module"> | ||
| 4 | + <CommonTitleNav title-name="彩虹体育馆" mark-color="#FFA100" right-title="4.8分" sideTitleColor="#ffa100" > | ||
| 5 | + <template #side-content> | ||
| 6 | + <view style="display: flex;align-items: center;font-size: 24rpx;" @click="goMore"> | ||
| 7 | + <text style="margin-right: 6rpx;">更多场照</text> | ||
| 8 | + <u-icon name="play-right-fill" color="#ffa100" size="12"></u-icon> | ||
| 9 | + </view> | ||
| 10 | + </template> | ||
| 11 | + </CommonTitleNav> | ||
| 12 | + <view class="range">距离您1.2km</view> | ||
| 13 | + </view> | ||
| 14 | + | ||
| 15 | + <u-scroll-list indicatorWidth="0"> | ||
| 16 | + <view class="list_card" v-for="(item, index) in list" :key="index"> | ||
| 17 | + <image class="cover" :src="item.thumb"></image> | ||
| 18 | + </view> | ||
| 19 | + </u-scroll-list> | ||
| 20 | + | ||
| 21 | + <view class="footer-module"> | ||
| 22 | + <view class="left"> | ||
| 23 | + <view class="businessTime">营业时间:周一至周五 9:00-23:00</view> | ||
| 24 | + <CommonIconNav icon-name="map" title-content="1.2km 滨湖路地铁C口"></CommonIconNav> | ||
| 25 | + </view> | ||
| 26 | + <view class="right"> | ||
| 27 | + <view class="nav"> | ||
| 28 | + <u-icon size="20" name="https://bpic.588ku.com/element_origin_min_pic/19/06/15/bf733c98b302dd7b87f9d086310e75ea.jpg"></u-icon> | ||
| 29 | + <text class="text">导航</text> | ||
| 30 | + </view> | ||
| 31 | + <view class="phone"> | ||
| 32 | + <u-icon size="20" name="phone"></u-icon> | ||
| 33 | + <text class="text">电话</text> | ||
| 34 | + </view> | ||
| 35 | + </view> | ||
| 36 | + </view> | ||
| 37 | + </view> | ||
| 38 | +</template> | ||
| 39 | + | ||
| 40 | +<script> | ||
| 41 | + import CommonTitleNav from '@/components/commonTitleNav.vue' | ||
| 42 | + import CommonIconNav from '@/components/commonIconNav.vue' | ||
| 43 | + export default { | ||
| 44 | + components: { CommonTitleNav, CommonIconNav }, | ||
| 45 | + data(){ | ||
| 46 | + return { | ||
| 47 | + list: [{ | ||
| 48 | + thumb: "https://cdn.uviewui.com/uview/goods/1.jpg" | ||
| 49 | + }, { | ||
| 50 | + thumb: "https://cdn.uviewui.com/uview/goods/2.jpg" | ||
| 51 | + }, { | ||
| 52 | + thumb: "https://cdn.uviewui.com/uview/goods/3.jpg" | ||
| 53 | + }, { | ||
| 54 | + thumb: "https://cdn.uviewui.com/uview/goods/4.jpg" | ||
| 55 | + }, { | ||
| 56 | + thumb: "https://cdn.uviewui.com/uview/goods/5.jpg" | ||
| 57 | + }] | ||
| 58 | + } | ||
| 59 | + }, | ||
| 60 | + methods: { | ||
| 61 | + goMore(){ | ||
| 62 | + uni.navigateTo({ | ||
| 63 | + url: '/pages/morePhotos/morePhotos' | ||
| 64 | + }) | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | +</script> | ||
| 69 | + | ||
| 70 | +<style lang="scss" scoped> | ||
| 71 | +.u-scroll-list__indicator{ | ||
| 72 | + margin-top: 0; | ||
| 73 | + } | ||
| 74 | + .detail_card{ | ||
| 75 | + width: 690rpx; | ||
| 76 | + height: 384rpx; | ||
| 77 | + background: #FFFFFF; | ||
| 78 | + border-radius: 16rpx; | ||
| 79 | + margin: 0 auto; | ||
| 80 | + padding: 34rpx 34rpx 20rpx; | ||
| 81 | + box-sizing: border-box; | ||
| 82 | + .header_module{ | ||
| 83 | + .range{ | ||
| 84 | + margin: 14rpx 0; | ||
| 85 | + color: #999; | ||
| 86 | + font-size: 24rpx; | ||
| 87 | + line-height: 28rpx; | ||
| 88 | + } | ||
| 89 | + } | ||
| 90 | + | ||
| 91 | + .list_card{ | ||
| 92 | + width: 224rpx; | ||
| 93 | + height: 136rpx; | ||
| 94 | + margin-right: 20rpx; | ||
| 95 | + &:last-child{ | ||
| 96 | + margin-right: 0; | ||
| 97 | + } | ||
| 98 | + .cover{ | ||
| 99 | + width: 224rpx; | ||
| 100 | + height: 136rpx; | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + | ||
| 105 | + .footer-module{ | ||
| 106 | + display: flex; | ||
| 107 | + align-content: center; | ||
| 108 | + justify-content: space-between; | ||
| 109 | + margin-top: -40rpx; | ||
| 110 | + .left{ | ||
| 111 | + color: #333; | ||
| 112 | + font-size: 24rpx; | ||
| 113 | + line-height: 32rpx; | ||
| 114 | + .businessTime{ | ||
| 115 | + margin-bottom: 14rpx; | ||
| 116 | + } | ||
| 117 | + } | ||
| 118 | + .right{ | ||
| 119 | + display: flex; | ||
| 120 | + align-items: center; | ||
| 121 | + font-size: 24rpx; | ||
| 122 | + color: #666; | ||
| 123 | + .nav, .phone{ | ||
| 124 | + display: flex; | ||
| 125 | + flex-direction: column; | ||
| 126 | + align-items: center; | ||
| 127 | + .text{ | ||
| 128 | + margin-top: 6rpx; | ||
| 129 | + } | ||
| 130 | + } | ||
| 131 | + .nav{ | ||
| 132 | + margin-right: 40rpx; | ||
| 133 | + } | ||
| 134 | + } | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | +</style> |
pages/arenaDetail/components/bookCard.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="bookCard"> | ||
| 3 | + <view class="left"> | ||
| 4 | + <image class="arena_img" src="@/static/images/home/bg-1.png" mode="scaleToFill"></image> | ||
| 5 | + </view> | ||
| 6 | + <view class="right"> | ||
| 7 | + <view class="arenaInfo"> | ||
| 8 | + <view>羽毛球1号场</view> | ||
| 9 | + <view class="price">¥ 160/小时</view> | ||
| 10 | + </view> | ||
| 11 | + <MyButton title="订场" size="small" @comfirn="goRouter" /> | ||
| 12 | + </view> | ||
| 13 | + </view> | ||
| 14 | +</template> | ||
| 15 | + | ||
| 16 | +<script> | ||
| 17 | + import MyButton from '@/components/myButton.vue' | ||
| 18 | + export default { | ||
| 19 | + components: { MyButton }, | ||
| 20 | + methods: { | ||
| 21 | + goRouter(){ | ||
| 22 | + uni.navigateTo({ | ||
| 23 | + url: '/pages/timeBooking/timeBooking' | ||
| 24 | + }) | ||
| 25 | + } | ||
| 26 | + } | ||
| 27 | + } | ||
| 28 | +</script> | ||
| 29 | + | ||
| 30 | +<style lang="scss" scoped> | ||
| 31 | + .bookCard{ | ||
| 32 | + display: flex; | ||
| 33 | + align-items: center; | ||
| 34 | + justify-content: space-between; | ||
| 35 | + margin-bottom: 24rpx; | ||
| 36 | + .left{ | ||
| 37 | + width: 124rpx; | ||
| 38 | + height: 124rpx; | ||
| 39 | + margin-right: 24rpx; | ||
| 40 | + .arena_img{ | ||
| 41 | + width: 100%; | ||
| 42 | + max-height: 126rpx; | ||
| 43 | + } | ||
| 44 | + } | ||
| 45 | + .right { | ||
| 46 | + display: flex; | ||
| 47 | + align-items: center; | ||
| 48 | + justify-content: space-between; | ||
| 49 | + flex: 1; | ||
| 50 | + height: 100%; | ||
| 51 | + .arenaInfo{ | ||
| 52 | + font-size: 28rpx; | ||
| 53 | + color: #333; | ||
| 54 | + line-height: 32rpx; | ||
| 55 | + .price{ | ||
| 56 | + font-size: 500; | ||
| 57 | + margin-top: 20rpx; | ||
| 58 | + } | ||
| 59 | + } | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | +</style> |
pages/arenaDetail/components/priceCard.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="priceCard" :style="{backgroundColor: active ? '#FFE6B4' : '#fff'}" @click="toggle"> | ||
| 3 | + <text class="card_name">{{ info.name }}</text> | ||
| 4 | + <text class="price">¥<text style="font-size: 72rpx; line-height: 96rpx;">{{ info.price }}</text></text> | ||
| 5 | + <text class="old_price">¥{{ info.oldPrice }}</text> | ||
| 6 | + <view class="avg_price" :style="{backgroundColor: active ? '#FFC675' : '#FFFAF1', color: active ? '#722F06' : '#DEB468'}">{{ info.avgText }}</view> | ||
| 7 | + </view> | ||
| 8 | +</template> | ||
| 9 | + | ||
| 10 | +<script> | ||
| 11 | + export default { | ||
| 12 | + props: { | ||
| 13 | + active: { | ||
| 14 | + type: Number, | ||
| 15 | + default: false | ||
| 16 | + }, | ||
| 17 | + info: { | ||
| 18 | + type: Object, | ||
| 19 | + require: true | ||
| 20 | + } | ||
| 21 | + }, | ||
| 22 | + methods: { | ||
| 23 | + toggle(){ | ||
| 24 | + this.$emit('toggle') | ||
| 25 | + } | ||
| 26 | + } | ||
| 27 | + } | ||
| 28 | +</script> | ||
| 29 | + | ||
| 30 | +<style lang="scss" scoped> | ||
| 31 | + .priceCard{ | ||
| 32 | + display: flex; | ||
| 33 | + flex-direction: column; | ||
| 34 | + align-items: center; | ||
| 35 | + justify-content: space-between; | ||
| 36 | + padding-top: 8rpx; | ||
| 37 | + width: 330rpx; | ||
| 38 | + height: 240rpx; | ||
| 39 | + border-radius: 16rpx 16rpx 16rpx 16rpx; | ||
| 40 | + overflow: hidden; | ||
| 41 | + border: 2rpx solid #EEEEEE; | ||
| 42 | + box-sizing: border-box; | ||
| 43 | + color: #722F06; | ||
| 44 | + .card_name, .price{ | ||
| 45 | + font-size: 32rpx; | ||
| 46 | + line-height: 42rpx; | ||
| 47 | + font-weight: 500; | ||
| 48 | + } | ||
| 49 | + .old_price{ | ||
| 50 | + color: #BF9363; | ||
| 51 | + font-size: 28rpx; | ||
| 52 | + line-height: 38rpx; | ||
| 53 | + text-decoration: line-through; | ||
| 54 | + } | ||
| 55 | + .avg_price{ | ||
| 56 | + height: 48rpx; | ||
| 57 | + line-height: 48rpx; | ||
| 58 | + color: #DEB468; | ||
| 59 | + font-size: 28rpx; | ||
| 60 | + width: 100%; | ||
| 61 | + text-align: center; | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | +</style> |
pages/arenaDetail/components/vipCard.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="vip_card"> | ||
| 3 | + <view class="left"> | ||
| 4 | + <image src="@/static/images/arenaDetail/detail_banner.png" mode="widthFix"></image> | ||
| 5 | + </view> | ||
| 6 | + <view class="center"> | ||
| 7 | + <text class="admin">会员优惠</text> | ||
| 8 | + <text class="select">更多选择</text> | ||
| 9 | + </view> | ||
| 10 | + <view class="right"> | ||
| 11 | + <view class="apply">立即申请</view> | ||
| 12 | + <u-icon name="arrow-right-double" color="#E6B976"></u-icon> | ||
| 13 | + </view> | ||
| 14 | + </view> | ||
| 15 | +</template> | ||
| 16 | + | ||
| 17 | +<script> | ||
| 18 | +</script> | ||
| 19 | + | ||
| 20 | +<style lang="scss" scoped> | ||
| 21 | + .vip_card{ | ||
| 22 | + display: flex; | ||
| 23 | + align-items: center; | ||
| 24 | + justify-content: space-between; | ||
| 25 | + height: 120rpx; | ||
| 26 | + background: linear-gradient( 90deg, #EEC09F 0%, #FDF9F7 100%); | ||
| 27 | + border-radius: 16rpx; | ||
| 28 | + padding: 0 14rpx; | ||
| 29 | + .left{ | ||
| 30 | + display: flex; | ||
| 31 | + align-items: center; | ||
| 32 | + justify-content: center; | ||
| 33 | + width: 200rpx; | ||
| 34 | + } | ||
| 35 | + .center{ | ||
| 36 | + display: flex; | ||
| 37 | + flex-direction: column; | ||
| 38 | + align-items: center; | ||
| 39 | + flex: 1; | ||
| 40 | + font-family: 'YouSheBiaoTiHei'; | ||
| 41 | + font-size: 28rpx; | ||
| 42 | + line-height: 36rpx; | ||
| 43 | + .admin{ | ||
| 44 | + background: linear-gradient(0deg, #D09351 0%, #E6B976 33%, #D09351 69%, #E6B976 100%); | ||
| 45 | + -webkit-background-clip: text;/*将设置的背景颜色限制在文字中*/ | ||
| 46 | + -webkit-text-fill-color: transparent;/*给文字设置成透明*/ | ||
| 47 | + font-size: 48rpx; | ||
| 48 | + line-height: 62rpx; | ||
| 49 | + } | ||
| 50 | + .select{ | ||
| 51 | + background: linear-gradient(0deg, #D09351 0%, #E6B976 33%, #D09351 69%, #E6B976 100%); | ||
| 52 | + -webkit-background-clip: text;/*将设置的背景颜色限制在文字中*/ | ||
| 53 | + -webkit-text-fill-color: transparent;/*给文字设置成透明*/ | ||
| 54 | + } | ||
| 55 | + } | ||
| 56 | + .right{ | ||
| 57 | + display: flex; | ||
| 58 | + align-items: center; | ||
| 59 | + .apply{ | ||
| 60 | + width: 120rpx; | ||
| 61 | + height: 36rpx; | ||
| 62 | + background: linear-gradient( 270deg, #D09351 0%, #E6B976 26%, #D09351 69%, #E6B976 100%); | ||
| 63 | + border-radius: 200rpx; | ||
| 64 | + font-size: 24rpx; | ||
| 65 | + line-height: 36rpx; | ||
| 66 | + text-align: center; | ||
| 67 | + color: #fff; | ||
| 68 | + margin-right: 20rpx; | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + } | ||
| 72 | +</style> |
pages/arenaDetail/vipRecharge.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="vip_recharge"> | ||
| 3 | + <!-- 头部详情 --> | ||
| 4 | + <view class="vip_head"> | ||
| 5 | + <image class="head_cover" src="@/static/images/arenaDetail/vip_bg.png" mode="widthFix"></image> | ||
| 6 | + <u-navbar | ||
| 7 | + title="申请场馆会员卡" | ||
| 8 | + :autoBack="true" | ||
| 9 | + :bgColor="bgColor" | ||
| 10 | + /> | ||
| 11 | + | ||
| 12 | + <view class="uesrInfoCard"> | ||
| 13 | + <view class="userInfo"> | ||
| 14 | + <u-avatar :src="src"></u-avatar> | ||
| 15 | + <text class="name">CLOOL</text> | ||
| 16 | + <text class="phone">(158****1234)</text> | ||
| 17 | + </view> | ||
| 18 | + </view> | ||
| 19 | + </view> | ||
| 20 | + <!-- 充值列表 --> | ||
| 21 | + <view class="vip_list"> | ||
| 22 | + <view class="list_title">VIP会员</view> | ||
| 23 | + <view class="price_list"> | ||
| 24 | + <PriceCard v-for="(item, index) in priceList" :key="index" :info="item" :active="index === current" @toggle="ontoggle(item, index)"/> | ||
| 25 | + </view> | ||
| 26 | + | ||
| 27 | + <view class="pay_btn">确认并支付¥{{ price }}</view> | ||
| 28 | + <view class="agreement"> | ||
| 29 | + <u-checkbox-group> | ||
| 30 | + <u-checkbox v-model="checked" shape="circle" activeColor="#ffa100" label="开通前请阅读《世纪创软运动系列会员服务协议》"></u-checkbox> | ||
| 31 | + </u-checkbox-group> | ||
| 32 | + </view> | ||
| 33 | + </view> | ||
| 34 | + </view> | ||
| 35 | +</template> | ||
| 36 | + | ||
| 37 | +<script> | ||
| 38 | + import PriceCard from './components/priceCard.vue' | ||
| 39 | + export default { | ||
| 40 | + components: { PriceCard }, | ||
| 41 | + data(){ | ||
| 42 | + return { | ||
| 43 | + current: 0, | ||
| 44 | + bgColor: 'transparent', | ||
| 45 | + checked: false, | ||
| 46 | + price: 0, | ||
| 47 | + priceList: [ | ||
| 48 | + { name: '3次卡', price: 40, oldPrice: 68, avgText: '约13.3/次'}, | ||
| 49 | + { name: '周卡', price: 150, oldPrice: 500, avgText: '约21.4/天'}, | ||
| 50 | + { name: '季卡', price: 999, oldPrice: 1500, avgText: '约333/月'}, | ||
| 51 | + { name: '年卡', price: 3000, oldPrice: 5000, avgText: '约250/月'} | ||
| 52 | + ], | ||
| 53 | + src: 'https://cdn.uviewui.com/uview/album/1.jpg' | ||
| 54 | + } | ||
| 55 | + }, | ||
| 56 | + mounted() { | ||
| 57 | + this.price = this.priceList[0].price | ||
| 58 | + }, | ||
| 59 | + methods: { | ||
| 60 | + ontoggle(item, index){ | ||
| 61 | + this.current = index | ||
| 62 | + this.price = item.price | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | +</script> | ||
| 67 | + | ||
| 68 | +<style lang="scss" scoped> | ||
| 69 | + .vip_recharge{ | ||
| 70 | + min-height: 100vh; | ||
| 71 | + } | ||
| 72 | + // 头部 | ||
| 73 | + .vip_head{ | ||
| 74 | + position: relative; | ||
| 75 | + height: 540rpx; | ||
| 76 | + overflow: hidden; | ||
| 77 | + .head_cover{ | ||
| 78 | + position: absolute; | ||
| 79 | + top: 0; | ||
| 80 | + left: 0; | ||
| 81 | + width: 100%; | ||
| 82 | + } | ||
| 83 | + .uesrInfoCard { | ||
| 84 | + width: 100%; | ||
| 85 | + position: absolute; | ||
| 86 | + bottom: 40rpx; | ||
| 87 | + padding: 0 30rpx; | ||
| 88 | + height: 100rpx; | ||
| 89 | + box-sizing: border-box; | ||
| 90 | + .userInfo{ | ||
| 91 | + display: flex; | ||
| 92 | + align-items: center; | ||
| 93 | + height: 100%; | ||
| 94 | + padding: 0 40rpx; | ||
| 95 | + background: rgba(255,255,255,0.7); | ||
| 96 | + border-radius: 16rpx; | ||
| 97 | + color: #999999; | ||
| 98 | + font-size: 24rpx; | ||
| 99 | + .name{ | ||
| 100 | + margin-left: 20rpx; | ||
| 101 | + color: #3d3d3d; | ||
| 102 | + font-size: 28rpx; | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + } | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + // 充值列表 | ||
| 109 | + .vip_list{ | ||
| 110 | + position: relative; | ||
| 111 | + min-height: calc(100vh - 540rpx); | ||
| 112 | + background-color: #fff; | ||
| 113 | + margin-top: -55rpx; | ||
| 114 | + border-radius: 40rpx 40rpx 0rpx 0rpx; | ||
| 115 | + padding: 40rpx 30rpx 0; | ||
| 116 | + .list_title{ | ||
| 117 | + font-size: 36rpx; | ||
| 118 | + line-height: 48rpx; | ||
| 119 | + font-weight: 600; | ||
| 120 | + color: #3d3d3d; | ||
| 121 | + padding-left: 30rpx; | ||
| 122 | + margin-bottom: 20rpx; | ||
| 123 | + } | ||
| 124 | + .price_list{ | ||
| 125 | + display: flex; | ||
| 126 | + flex-wrap: wrap; | ||
| 127 | + gap: 30rpx; | ||
| 128 | + } | ||
| 129 | + .pay_btn{ | ||
| 130 | + margin: 30rpx 0; | ||
| 131 | + width: 100%; | ||
| 132 | + height: 100rpx; | ||
| 133 | + background: linear-gradient( 90deg, #FFD176 0%, #FEDE9C 100%); | ||
| 134 | + border-radius: 200rpx; | ||
| 135 | + line-height: 100rpx; | ||
| 136 | + text-align: center; | ||
| 137 | + font-size: 40rpx; | ||
| 138 | + color: #722F06; | ||
| 139 | + } | ||
| 140 | + } | ||
| 141 | +</style> |
pages/booking/booking.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="booking"> | ||
| 3 | + <u-sticky bgColor="#fff"> | ||
| 4 | + <view class="header_booking"> | ||
| 5 | + <u-tabs :list="list" lineColor="#FFA100" :activeStyle="{color: '#ffa100'}"></u-tabs> | ||
| 6 | + <view class="select_list"> | ||
| 7 | + <view class="select_item" @click="show = true"> | ||
| 8 | + <text class="text">距离</text> | ||
| 9 | + <u-icon name="arrow-down-fill"></u-icon> | ||
| 10 | + </view> | ||
| 11 | + <view class="select_item" @click="show = true"> | ||
| 12 | + <text class="text">价格</text> | ||
| 13 | + <u-icon name="arrow-down-fill" color="#666"></u-icon> | ||
| 14 | + </view> | ||
| 15 | + <view class="select_item"> | ||
| 16 | + <text>时间段</text> | ||
| 17 | + <u-icon name="arrow-down-fill" color="#666"></u-icon> | ||
| 18 | + </view> | ||
| 19 | + </view> | ||
| 20 | + </view> | ||
| 21 | + </u-sticky> | ||
| 22 | + | ||
| 23 | + <!-- 球场列表 --> | ||
| 24 | + <view class="arena_list"> | ||
| 25 | + <ArenaCard v-for="item in 5" :key="item" /> | ||
| 26 | + </view> | ||
| 27 | + <u-picker :show="show" :columns="columns" @cancel="show = false" @confirm="show = false"></u-picker> | ||
| 28 | + </view> | ||
| 29 | +</template> | ||
| 30 | + | ||
| 31 | +<script> | ||
| 32 | + import ArenaCard from '@/pages/home/components/arenaCard.vue' | ||
| 33 | + export default { | ||
| 34 | + components: { ArenaCard }, | ||
| 35 | + data() { | ||
| 36 | + return { | ||
| 37 | + show: false, | ||
| 38 | + columns: [ | ||
| 39 | + ['1km以内', '3km以内', '5km以内', '10km以内'] | ||
| 40 | + ], | ||
| 41 | + list: [ | ||
| 42 | + {name: '羽毛球'}, | ||
| 43 | + {name: '网球'}, | ||
| 44 | + {name: '飞盘'}, | ||
| 45 | + {name: '足球'}, | ||
| 46 | + {name: '篮球'}, | ||
| 47 | + {name: '兵乒球'} | ||
| 48 | + ] | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + } | ||
| 52 | +</script> | ||
| 53 | + | ||
| 54 | +<style lang="scss" scoped> | ||
| 55 | +.booking{ | ||
| 56 | + min-height: 100vh; | ||
| 57 | + background-color: #F6F6F6; | ||
| 58 | + .header_booking{ | ||
| 59 | + background-color: #fff; | ||
| 60 | + .select_list{ | ||
| 61 | + display: flex; | ||
| 62 | + align-items: center; | ||
| 63 | + justify-content: space-around; | ||
| 64 | + height: 84rpx; | ||
| 65 | + padding: 0 30rpx; | ||
| 66 | + border-top: 2rpx solid #E1E1E1; | ||
| 67 | + box-sizing: border-box; | ||
| 68 | + .select_item{ | ||
| 69 | + display: flex; | ||
| 70 | + align-items: center; | ||
| 71 | + font-size: 28rpx; | ||
| 72 | + line-height: 32rpx; | ||
| 73 | + color: #666; | ||
| 74 | + .text{ | ||
| 75 | + margin-right: 8rpx; | ||
| 76 | + } | ||
| 77 | + } | ||
| 78 | + } | ||
| 79 | + } | ||
| 80 | + | ||
| 81 | + .arena_list{ | ||
| 82 | + padding: 30rpx; | ||
| 83 | + } | ||
| 84 | +} | ||
| 85 | +</style> |
pages/comfirmOrder/comfirmOrder.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="comfirmOrder"> | ||
| 3 | + <CommonCell :lineInfo="lineInfo" /> | ||
| 4 | + <view class="cost">人均费用:<text style="margin-left: 20rpx;color: #333;">20元/人</text></view> | ||
| 5 | + | ||
| 6 | + <view class="agreement_list"> | ||
| 7 | + <u-checkbox-group | ||
| 8 | + v-model="checkboxValue" | ||
| 9 | + placement="column" | ||
| 10 | + @change="checkboxChange" | ||
| 11 | + > | ||
| 12 | + <u-checkbox | ||
| 13 | + :customStyle="{marginBottom: '8px'}" | ||
| 14 | + v-for="(item, index) in checkboxList" | ||
| 15 | + shape="circle" | ||
| 16 | + activeColor="#ffa100" | ||
| 17 | + labelSize="26rpx" | ||
| 18 | + size="26rpx" | ||
| 19 | + :key="index" | ||
| 20 | + :label="item.name" | ||
| 21 | + :name="item.name" | ||
| 22 | + /> | ||
| 23 | + </u-checkbox-group> | ||
| 24 | + </view> | ||
| 25 | + | ||
| 26 | + | ||
| 27 | + <view class="pay_box"> | ||
| 28 | + <MyButton title="立即支付" @comfirn="goRouter"/> | ||
| 29 | + </view> | ||
| 30 | + | ||
| 31 | + <u-popup :show="show" :round="10" mode="center" :customStyle="{width: '690rpx'}" @close="show = false"> | ||
| 32 | + <view class="popup_tip"> | ||
| 33 | + <view class="popup_title">- 温馨提示 -</view> | ||
| 34 | + <view class="tip_box"> | ||
| 35 | + <image class="order_bg" src="@/static/images/arenaDetail/order_bg.png" mode="widthFix"></image> | ||
| 36 | + <view class="tip_list"> | ||
| 37 | + <view class="tip_item" v-for="(item, index) in tipList" :key="index"> | ||
| 38 | + {{ item }} | ||
| 39 | + </view> | ||
| 40 | + </view> | ||
| 41 | + </view> | ||
| 42 | + | ||
| 43 | + <view class="btn" @click="show = false">我知道了</view> | ||
| 44 | + </view> | ||
| 45 | + </u-popup> | ||
| 46 | + </view> | ||
| 47 | +</template> | ||
| 48 | + | ||
| 49 | +<script> | ||
| 50 | + import CommonCell from '@/components/commonCell.vue' | ||
| 51 | + import MyButton from '@/components/myButton.vue' | ||
| 52 | + export default { | ||
| 53 | + components: { MyButton, CommonCell }, | ||
| 54 | + data() { | ||
| 55 | + return { | ||
| 56 | + show: false, // 弹出层提示 | ||
| 57 | + tipList: [ | ||
| 58 | + '1.下单后10分钟内可以全额退款,距离开场8小时前取消可以全额退款。', | ||
| 59 | + '2.下单后超过10分钟取消订单退订规则如下:', | ||
| 60 | + '3.开场前8小时内取消订单则发起人可退回支付金额的50%;', | ||
| 61 | + '4.室外场地因天气原因取消订单,则全额退款;需场地管理人员人工审核。' | ||
| 62 | + ], | ||
| 63 | + lineInfo: [ | ||
| 64 | + { title: '订单流水号', valueName: '南宁站 2022-12-26 16:23:45 000026', type: 'text' }, | ||
| 65 | + { title: '参与人数', valueName: '8人', type: 'text' }, | ||
| 66 | + { title: '场馆', valueName: '彩虹体育馆', type: 'text' }, | ||
| 67 | + { title: '场地', valueName: '羽毛球1号场', type: 'text' }, | ||
| 68 | + { title: '预约时间段', valueName: '2022-12-26(周一) 15:00-16:00', type: 'text' } | ||
| 69 | + ], | ||
| 70 | + // 选择的值 | ||
| 71 | + checkboxValue:[], | ||
| 72 | + // 协议数据列表 | ||
| 73 | + checkboxList: [ | ||
| 74 | + { name: '我已阅读并同意《订场条款》', disabled: false }, | ||
| 75 | + { name: '使用余额组合支付:¥236', disabled: false }, | ||
| 76 | + { name: '使用周卡支付', disabled: false } | ||
| 77 | + ] | ||
| 78 | + } | ||
| 79 | + }, | ||
| 80 | + created() { | ||
| 81 | + this.show = true | ||
| 82 | + }, | ||
| 83 | + methods: { | ||
| 84 | + checkboxChange(n) { | ||
| 85 | + console.log('change', n); | ||
| 86 | + }, | ||
| 87 | + goRouter(){ | ||
| 88 | + uni.navigateTo({ | ||
| 89 | + url: '/pages/paysuccess/paysuccess' | ||
| 90 | + }) | ||
| 91 | + } | ||
| 92 | + } | ||
| 93 | + } | ||
| 94 | +</script> | ||
| 95 | + | ||
| 96 | +<style lang="scss" scoped> | ||
| 97 | +.comfirmOrder{ | ||
| 98 | + position: relative; | ||
| 99 | + padding: 24rpx 30rpx 0; | ||
| 100 | + box-sizing: border-box; | ||
| 101 | + min-height: 100vh; | ||
| 102 | + background-color: #F6F6F6; | ||
| 103 | + | ||
| 104 | + .cost{ | ||
| 105 | + display: flex; | ||
| 106 | + align-items: center; | ||
| 107 | + height: 96rpx; | ||
| 108 | + background: #FFFFFF; | ||
| 109 | + border-radius: 12rpx 12rpx 12rpx 12rpx; | ||
| 110 | + margin: 20rpx 0; | ||
| 111 | + padding: 0 30rpx; | ||
| 112 | + font-size: 26rpx; | ||
| 113 | + color: #666; | ||
| 114 | + } | ||
| 115 | + .agreement_list{ | ||
| 116 | + padding-top: 20rpx; | ||
| 117 | + } | ||
| 118 | +} | ||
| 119 | + | ||
| 120 | +.pay_box{ | ||
| 121 | + position: absolute; | ||
| 122 | + height: 112rpx; | ||
| 123 | + width: 100%; | ||
| 124 | + box-sizing: border-box; | ||
| 125 | + bottom: 0; | ||
| 126 | + left: 0; | ||
| 127 | + background-color: #fff; | ||
| 128 | + padding: 16rpx 30rpx; | ||
| 129 | +} | ||
| 130 | + | ||
| 131 | + | ||
| 132 | +.popup_tip{ | ||
| 133 | + height: 784rpx; | ||
| 134 | + background: #FFFFFF; | ||
| 135 | + border-radius: 24rpx; | ||
| 136 | + padding: 38rpx 52rpx; | ||
| 137 | + .popup_title{ | ||
| 138 | + color: #ff9900; | ||
| 139 | + font-size: 32rpx; | ||
| 140 | + line-height: 44rpx; | ||
| 141 | + margin-bottom: 30rpx; | ||
| 142 | + text-align: center; | ||
| 143 | + } | ||
| 144 | + .tip_box{ | ||
| 145 | + position: relative; | ||
| 146 | + height: 530rpx; | ||
| 147 | + margin-bottom: 70rpx; | ||
| 148 | + .order_bg{ | ||
| 149 | + position: absolute; | ||
| 150 | + left: 0; | ||
| 151 | + bottom: 0; | ||
| 152 | + width: 544rpx; | ||
| 153 | + height: 438rpx; | ||
| 154 | + } | ||
| 155 | + .tip_list{ | ||
| 156 | + display: flex; | ||
| 157 | + flex-direction: column; | ||
| 158 | + font-size: 28rpx; | ||
| 159 | + color: #666; | ||
| 160 | + line-height: 48rpx; | ||
| 161 | + .tip_item{ | ||
| 162 | + margin-bottom: 60rpx; | ||
| 163 | + &:last-child{ | ||
| 164 | + margin-bottom: 0; | ||
| 165 | + } | ||
| 166 | + } | ||
| 167 | + } | ||
| 168 | + } | ||
| 169 | + .btn{ | ||
| 170 | + width: 372rpx; | ||
| 171 | + height: 76rpx; | ||
| 172 | + margin: 0 auto; | ||
| 173 | + background: linear-gradient( 270deg, #FFA100 0%, #FCD723 100%); | ||
| 174 | + border-radius: 686rpx; | ||
| 175 | + font-size: 28rpx; | ||
| 176 | + color: #fff; | ||
| 177 | + line-height: 76rpx; | ||
| 178 | + text-align: center; | ||
| 179 | + } | ||
| 180 | +} | ||
| 181 | +</style> |
pages/editInfo/editInfo.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="editInfo"> | ||
| 3 | + <CommonCell :lineInfo="rowTitle" @updataInfo="getUserInfo" /> | ||
| 4 | + <!-- 个人简介 --> | ||
| 5 | + <view class="user_intro"> | ||
| 6 | + <view class="intro">个人介绍:</view> | ||
| 7 | + <u--textarea v-model="introStr" placeholder="请输入内容" height="188rpx" border="bottom" count ></u--textarea> | ||
| 8 | + </view> | ||
| 9 | + | ||
| 10 | + <view class="footer"> | ||
| 11 | + <MyButton title="确定保存"></MyButton> | ||
| 12 | + </view> | ||
| 13 | + </view> | ||
| 14 | +</template> | ||
| 15 | + | ||
| 16 | +<script> | ||
| 17 | + import CommonCell from '@/components/commonCell.vue' | ||
| 18 | + import MyButton from '@/components/myButton.vue' | ||
| 19 | + export default { | ||
| 20 | + components: { CommonCell, MyButton }, | ||
| 21 | + data() { | ||
| 22 | + return { | ||
| 23 | + introStr: '', // 简介 | ||
| 24 | + rowTitle: [ | ||
| 25 | + { title: '头像', type: 'avatar', valueName: 'avatar' }, | ||
| 26 | + { title: '昵称', type: 'input', valueName: 'nickname' }, | ||
| 27 | + { title: '性别', type: 'input', valueName: 'sex' }, | ||
| 28 | + { title: '手机号', type: 'input', valueName: 'phoneNum' }, | ||
| 29 | + { title: '生日', type: 'input', valueName: 'Birthday' } | ||
| 30 | + ] | ||
| 31 | + }; | ||
| 32 | + }, | ||
| 33 | + methods: { | ||
| 34 | + getUserInfo(value) { | ||
| 35 | + console.log((value)) | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + } | ||
| 39 | +</script> | ||
| 40 | + | ||
| 41 | +<style lang="scss" scoped> | ||
| 42 | +.editInfo{ | ||
| 43 | + padding: 24rpx 30rpx; | ||
| 44 | + min-height: calc(100vh - 88rpx); | ||
| 45 | + background-color: #F6F6F6; | ||
| 46 | + .user_intro{ | ||
| 47 | + margin-top: 24rpx; | ||
| 48 | + padding: 28rpx; | ||
| 49 | + height: 312rpx; | ||
| 50 | + background: #FFFFFF; | ||
| 51 | + border-radius: 12rpx; | ||
| 52 | + .intro{ | ||
| 53 | + font-size: 26rpx; | ||
| 54 | + color: #333; | ||
| 55 | + margin-bottom: 24rpx; | ||
| 56 | + line-height: 36rpx; | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + .footer{ | ||
| 60 | + position: fixed; | ||
| 61 | + bottom: 0; | ||
| 62 | + left: 0; | ||
| 63 | + width: 100%; | ||
| 64 | + padding: 16rpx 30rpx; | ||
| 65 | + background-color: #fff; | ||
| 66 | + box-sizing: border-box; | ||
| 67 | + } | ||
| 68 | +} | ||
| 69 | +</style> |
pages/home/components/arenaCard.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="arenaCard" :style="customStyle"> | ||
| 3 | + <view class="left"> | ||
| 4 | + <image class="cover_img" src="@/static/images/home/bg-1.png" mode="scaleToFill"></image> | ||
| 5 | + </view> | ||
| 6 | + <view class="right"> | ||
| 7 | + <CommonTitleNav title-name="彩虹体育馆" mark-color="#FFA100" right-title="4.8分" > | ||
| 8 | + <template #side-content> | ||
| 9 | + {{ isBooking ? '160/小时' : '¥ 36/人' }} | ||
| 10 | + </template> | ||
| 11 | + </CommonTitleNav> | ||
| 12 | + <view class="center"> | ||
| 13 | + <CommonIconNav v-if="isBooking" icon-name="map" title-content="1.2km 滨湖路地铁C口"></CommonIconNav> | ||
| 14 | + <CommonIconNav v-else icon-name="clock" title-content="2023-02-06 9:00-23:00"></CommonIconNav> | ||
| 15 | + </view> | ||
| 16 | + <view v-if="isBooking" class="startTime"> | ||
| 17 | + <CommonIconNav icon-name="clock" title-content="9:00-23:00"></CommonIconNav> | ||
| 18 | + <view class="detail" @click="goRouter('/pages/arenaDetail/arenaDetail')"> | ||
| 19 | + <text>详情</text> | ||
| 20 | + <u-icon name="play-right-fill" color="#FFA100" size="12"></u-icon> | ||
| 21 | + </view> | ||
| 22 | + </view> | ||
| 23 | + | ||
| 24 | + <view v-else class="startTime"> | ||
| 25 | + <view class="number"> | ||
| 26 | + <u-avatar-group | ||
| 27 | + :urls="urls" | ||
| 28 | + size="24" | ||
| 29 | + gap="0.4" | ||
| 30 | + /> | ||
| 31 | + </view> | ||
| 32 | + <MyButton title="拼场" size="small" @comfirn="goRouter('/pages/aboutBallsDetail/aboutBallsDetail')" /> | ||
| 33 | + </view> | ||
| 34 | + </view> | ||
| 35 | + </view> | ||
| 36 | +</template> | ||
| 37 | + | ||
| 38 | +<script> | ||
| 39 | + import CommonIconNav from '@/components/commonIconNav.vue' | ||
| 40 | + import CommonTitleNav from '@/components/commonTitleNav.vue' | ||
| 41 | + import MyButton from '@/components/myButton.vue' | ||
| 42 | + export default { | ||
| 43 | + components: { CommonIconNav, CommonTitleNav, MyButton }, | ||
| 44 | + props: { | ||
| 45 | + isBooking: { | ||
| 46 | + type: Boolean, | ||
| 47 | + default: true | ||
| 48 | + }, | ||
| 49 | + customStyle: { | ||
| 50 | + type: String, | ||
| 51 | + default: '' | ||
| 52 | + } | ||
| 53 | + }, | ||
| 54 | + data() { | ||
| 55 | + return { | ||
| 56 | + urls: [ | ||
| 57 | + 'https://cdn.uviewui.com/uview/album/1.jpg', | ||
| 58 | + 'https://cdn.uviewui.com/uview/album/2.jpg', | ||
| 59 | + 'https://cdn.uviewui.com/uview/album/3.jpg', | ||
| 60 | + 'https://cdn.uviewui.com/uview/album/4.jpg', | ||
| 61 | + 'https://cdn.uviewui.com/uview/album/7.jpg', | ||
| 62 | + 'https://cdn.uviewui.com/uview/album/6.jpg', | ||
| 63 | + 'https://cdn.uviewui.com/uview/album/5.jpg' | ||
| 64 | + ] | ||
| 65 | + } | ||
| 66 | + }, | ||
| 67 | + methods: { | ||
| 68 | + goRouter(path){ | ||
| 69 | + uni.navigateTo({ | ||
| 70 | + url: path | ||
| 71 | + }) | ||
| 72 | + } | ||
| 73 | + } | ||
| 74 | + } | ||
| 75 | +</script> | ||
| 76 | + | ||
| 77 | +<style lang="scss" scoped> | ||
| 78 | + .arenaCard{ | ||
| 79 | + display: flex; | ||
| 80 | + align-items: center; | ||
| 81 | + padding: 20rpx; | ||
| 82 | + height: 188rpx; | ||
| 83 | + background-color: #fff; | ||
| 84 | + border-radius: 16rpx; | ||
| 85 | + margin-bottom: 20rpx; | ||
| 86 | + box-sizing: border-box; | ||
| 87 | + .left{ | ||
| 88 | + width: 144rpx; | ||
| 89 | + height: 144rpx; | ||
| 90 | + margin-right: 20rpx; | ||
| 91 | + .cover_img{ | ||
| 92 | + width: 100%; | ||
| 93 | + height: 100%; | ||
| 94 | + } | ||
| 95 | + } | ||
| 96 | + .right{ | ||
| 97 | + display: flex; | ||
| 98 | + flex-direction: column; | ||
| 99 | + justify-content: space-between; | ||
| 100 | + flex: 1; | ||
| 101 | + height: 100%; | ||
| 102 | + .center{ | ||
| 103 | + display: flex; | ||
| 104 | + align-items: center; | ||
| 105 | + color: #333; | ||
| 106 | + font-size: 24rpx; | ||
| 107 | + line-height: 32rpx; | ||
| 108 | + } | ||
| 109 | + .startTime{ | ||
| 110 | + display: flex; | ||
| 111 | + align-items: center; | ||
| 112 | + justify-content: space-between; | ||
| 113 | + position: relative; | ||
| 114 | + color: #666666; | ||
| 115 | + font-size: 24rpx; | ||
| 116 | + .detail{ | ||
| 117 | + display: flex; | ||
| 118 | + align-items: center; | ||
| 119 | + position: absolute; | ||
| 120 | + color: #FFA100; | ||
| 121 | + font-size: 24rpx; | ||
| 122 | + top: 0; | ||
| 123 | + right: 0; | ||
| 124 | + } | ||
| 125 | + } | ||
| 126 | + } | ||
| 127 | + } | ||
| 128 | +</style> |
pages/home/components/ballNav.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="ballNav"> | ||
| 3 | + <view class="headerNav"> | ||
| 4 | + <u-tabs :list="navlist" lineColor="#FFA100"></u-tabs> | ||
| 5 | + <view class="classify"> | ||
| 6 | + <u-icon name="grid" color="#FFA100" size="24" :activeStyle="activeStyle" @click="isShow = !isShow"></u-icon> | ||
| 7 | + </view> | ||
| 8 | + <view class="select_ball" :class="{show: isShow}"> | ||
| 9 | + <view class="ball_item" @click="isShow = false">飞盘</view> | ||
| 10 | + <view class="line"></view> | ||
| 11 | + <view class="ball_item" @click="isShow = false">网球</view> | ||
| 12 | + </view> | ||
| 13 | + </view> | ||
| 14 | + | ||
| 15 | + <view class="date_show"> | ||
| 16 | + <view class="date_item" v-for="(item, index) in timeList" :key="index"> | ||
| 17 | + <view class="left"> | ||
| 18 | + <u-icon :name="item.iconName" color="#FFA100" size="22"></u-icon> | ||
| 19 | + <text style="margin-left: 18rpx;">{{ item.time }}</text> | ||
| 20 | + </view> | ||
| 21 | + <view class="right"> | ||
| 22 | + <u-icon name="more-dot-fill" color="#999"></u-icon> | ||
| 23 | + </view> | ||
| 24 | + </view> | ||
| 25 | + </view> | ||
| 26 | + | ||
| 27 | + <view class="btn_list"> | ||
| 28 | + <view class="boking">立即找场</view> | ||
| 29 | + <view class="ball">发起约球</view> | ||
| 30 | + </view> | ||
| 31 | + </view> | ||
| 32 | +</template> | ||
| 33 | + | ||
| 34 | +<script> | ||
| 35 | + export default { | ||
| 36 | + data(){ | ||
| 37 | + return { | ||
| 38 | + isShow: false, // 是否显示下拉列表 | ||
| 39 | + navlist: [ | ||
| 40 | + { name: '篮球', id: '1'}, | ||
| 41 | + { name: '足球', id: '2'}, | ||
| 42 | + { name: '羽毛球', id: '3'}, | ||
| 43 | + { name: '乒乓球', id: '4'} | ||
| 44 | + ], | ||
| 45 | + activeStyle: { | ||
| 46 | + color: '#111111', | ||
| 47 | + fontSize: '30rpx' | ||
| 48 | + }, | ||
| 49 | + timeList: [ | ||
| 50 | + { iconName: 'calendar', time: '2月25日(今天' }, | ||
| 51 | + { iconName: 'clock', time: '14:00 - 15:00 1小时' } | ||
| 52 | + ] | ||
| 53 | + } | ||
| 54 | + } | ||
| 55 | + } | ||
| 56 | +</script> | ||
| 57 | + | ||
| 58 | +<style lang="scss" scoped> | ||
| 59 | + .ballNav{ | ||
| 60 | + padding: 0 24rpx; | ||
| 61 | + min-height: 452rpx; | ||
| 62 | + background: #FFFFFF; | ||
| 63 | + margin: 62rpx 0 28rpx 0; | ||
| 64 | + border-radius: 4rpx 4rpx 4rpx 4rpx; | ||
| 65 | + .headerNav{ | ||
| 66 | + position: relative; | ||
| 67 | + .classify{ | ||
| 68 | + position: absolute; | ||
| 69 | + width: 50rpx; | ||
| 70 | + height: 50rpx; | ||
| 71 | + right: 0; | ||
| 72 | + top: 50%; | ||
| 73 | + transform: translateY(-50%); | ||
| 74 | + } | ||
| 75 | + .select_ball{ | ||
| 76 | + position: absolute; | ||
| 77 | + top: 76rpx; | ||
| 78 | + left: 64%; | ||
| 79 | + padding: 22rpx; | ||
| 80 | + width: 220rpx; | ||
| 81 | + min-height: 196rpx; | ||
| 82 | + background: #FFFFFF; | ||
| 83 | + box-shadow: 0rpx 12rpx 32rpx 0rpx rgba(0,0,0,0.1); | ||
| 84 | + border-radius: 12rpx; | ||
| 85 | + z-index: 99; | ||
| 86 | + box-sizing: border-box; | ||
| 87 | + opacity: 0; | ||
| 88 | + transition: all .5s ease; | ||
| 89 | + &.show{ | ||
| 90 | + opacity: 1; | ||
| 91 | + } | ||
| 92 | + .ball_item{ | ||
| 93 | + text-align: center; | ||
| 94 | + font-size: 28rpx; | ||
| 95 | + color: #333; | ||
| 96 | + } | ||
| 97 | + .line{ | ||
| 98 | + height: 2rpx; | ||
| 99 | + background-color: #E1E1E1; | ||
| 100 | + margin: 34rpx 0 ; | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + .date_show{ | ||
| 106 | + .date_item{ | ||
| 107 | + display: flex; | ||
| 108 | + align-items: center; | ||
| 109 | + justify-content: space-between; | ||
| 110 | + height: 100rpx; | ||
| 111 | + box-sizing: border-box; | ||
| 112 | + border-bottom: 2rpx solid #E1E1E1; | ||
| 113 | + .left { | ||
| 114 | + display: flex; | ||
| 115 | + align-items: center; | ||
| 116 | + font-size: 28rpx; | ||
| 117 | + line-height: 32rpx; | ||
| 118 | + color: #111; | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + .btn_list{ | ||
| 124 | + display: flex; | ||
| 125 | + align-items: center; | ||
| 126 | + justify-content: space-between; | ||
| 127 | + gap: 30rpx; | ||
| 128 | + margin: 40rpx 0 54rpx 0; | ||
| 129 | + .boking, .ball { | ||
| 130 | + flex: 1; | ||
| 131 | + height: 72rpx; | ||
| 132 | + line-height: 72rpx; | ||
| 133 | + text-align: center; | ||
| 134 | + font-size: 28rpx; | ||
| 135 | + color: #FFA100; | ||
| 136 | + border-radius: 8rpx 8rpx 8rpx 8rpx; | ||
| 137 | + } | ||
| 138 | + .boking{ | ||
| 139 | + border: 2rpx solid #FFA100; | ||
| 140 | + } | ||
| 141 | + .ball { | ||
| 142 | + background: linear-gradient( 270deg, #FFA100 0%, #FCD723 100%); | ||
| 143 | + color: #fff; | ||
| 144 | + } | ||
| 145 | + } | ||
| 146 | + } | ||
| 147 | +</style> |
pages/home/components/banner.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="banner"> | ||
| 3 | + <u-swiper | ||
| 4 | + :list="list" | ||
| 5 | + :indicator="true" | ||
| 6 | + indicatorActiveColor="#FFA100" | ||
| 7 | + indicatorInactiveColor="#E1E1E1" | ||
| 8 | + indicatorMode="dot" | ||
| 9 | + /> | ||
| 10 | + </view> | ||
| 11 | +</template> | ||
| 12 | + | ||
| 13 | +<script> | ||
| 14 | + import banner from '@/static/images/home/banner.png' | ||
| 15 | + export default { | ||
| 16 | + data() { | ||
| 17 | + return { | ||
| 18 | + list: [ | ||
| 19 | + banner, | ||
| 20 | + banner, | ||
| 21 | + banner | ||
| 22 | + ] | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + } | ||
| 26 | +</script> | ||
| 27 | + | ||
| 28 | +<style lang="scss" scoped> | ||
| 29 | + .banner{ | ||
| 30 | + width: 100%; | ||
| 31 | + box-sizing: border-box; | ||
| 32 | + } | ||
| 33 | +</style> |
pages/home/components/bookingNavlist.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="booking_container"> | ||
| 3 | + <view class="nav_title"> | ||
| 4 | + <view class="nav_item" v-for="(item, index) in navList" :key="index" @click="current = index"> | ||
| 5 | + <text class="ballName" :class="{ ballActive: current === index}">{{ item.ballName }}</text> | ||
| 6 | + <text class="booking" :class="{ bookingActive: current === index}">订场</text> | ||
| 7 | + </view> | ||
| 8 | + </view> | ||
| 9 | + <ArenaCard v-for="item in navList" :key="item.id" /> | ||
| 10 | + </view> | ||
| 11 | +</template> | ||
| 12 | + | ||
| 13 | +<script> | ||
| 14 | + import ArenaCard from './arenaCard.vue' | ||
| 15 | + export default { | ||
| 16 | + components: { ArenaCard }, | ||
| 17 | + data(){ | ||
| 18 | + return { | ||
| 19 | + current: 0, | ||
| 20 | + navList: [ | ||
| 21 | + { ballName: '羽毛球', id: 1 }, | ||
| 22 | + { ballName: '篮球', id: 2 }, | ||
| 23 | + { ballName: '网球', id: 3 }, | ||
| 24 | + { ballName: '足球', id: 4 }, | ||
| 25 | + ] | ||
| 26 | + } | ||
| 27 | + } | ||
| 28 | + } | ||
| 29 | +</script> | ||
| 30 | + | ||
| 31 | +<style lang="scss" scoped> | ||
| 32 | + .booking_container{ | ||
| 33 | + margin-top: 30rpx; | ||
| 34 | + .nav_title{ | ||
| 35 | + display: flex; | ||
| 36 | + align-items: center; | ||
| 37 | + justify-content: space-between; | ||
| 38 | + margin-bottom: 28rpx; | ||
| 39 | + .nav_item{ | ||
| 40 | + display: flex; | ||
| 41 | + flex-direction: column; | ||
| 42 | + align-items: center; | ||
| 43 | + .ballName{ | ||
| 44 | + color: #333333; | ||
| 45 | + font-size: 32rpx; | ||
| 46 | + line-height: 44rpx; | ||
| 47 | + &.ballActive{ | ||
| 48 | + background: linear-gradient(180deg, #FFA100 0%, #FFD400 100%); | ||
| 49 | + -webkit-background-clip: text; | ||
| 50 | + background-clip: text; | ||
| 51 | + color: transparent; | ||
| 52 | + font-weight: 400; | ||
| 53 | + } | ||
| 54 | + } | ||
| 55 | + .booking{ | ||
| 56 | + color: #666666; | ||
| 57 | + font-size: 24rpx; | ||
| 58 | + margin-top: 8rpx; | ||
| 59 | + &.bookingActive{ | ||
| 60 | + padding: 6rpx 24rpx; | ||
| 61 | + color: #fff; | ||
| 62 | + background: linear-gradient( 270deg, #FFA100 0%, #FCD723 100%); | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | +</style> |
pages/home/components/hotvenue.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="venue"> | ||
| 3 | + <view class="title">热门场馆</view> | ||
| 4 | + <view class="content_list"> | ||
| 5 | + <u-scroll-list indicatorWidth="0"> | ||
| 6 | + <view class="list_item" v-for="(item, index) in list" :key="index" @click="goArenaDetail"> | ||
| 7 | + <image class="cover" :src="item.thumb"></image> | ||
| 8 | + <text class="name">{{ item.title }}</text> | ||
| 9 | + <view class="tip"> | ||
| 10 | + <CommonIconNav icon-name="map" :title-content="item.address" /> | ||
| 11 | + <text class="price">¥{{ item.price }}人</text> | ||
| 12 | + </view> | ||
| 13 | + </view> | ||
| 14 | + </u-scroll-list> | ||
| 15 | + </view> | ||
| 16 | + </view> | ||
| 17 | +</template> | ||
| 18 | + | ||
| 19 | +<script> | ||
| 20 | + import bg1 from '@/static/images/home/bg-1.png' | ||
| 21 | + import CommonIconNav from '@/components/commonIconNav.vue' | ||
| 22 | + export default { | ||
| 23 | + components: { CommonIconNav }, | ||
| 24 | + data(){ | ||
| 25 | + return { | ||
| 26 | + list: [ | ||
| 27 | + { thumb: bg1, title: '彩虹体育馆', address: '青秀区', price: 23 }, | ||
| 28 | + { thumb: bg1, title: '飞人网球场', address: '兴宁区', price: 23 }, | ||
| 29 | + { thumb: bg1, title: 'L2T体育馆', address: '西乡塘', price: 23 }, | ||
| 30 | + { thumb: bg1, title: '广西体育馆', address: '五象新区', price: 24 }, | ||
| 31 | + ] | ||
| 32 | + } | ||
| 33 | + }, | ||
| 34 | + methods: { | ||
| 35 | + goArenaDetail(){ | ||
| 36 | + uni.navigateTo({ | ||
| 37 | + url: '/pages/arenaDetail/arenaDetail' | ||
| 38 | + }) | ||
| 39 | + } | ||
| 40 | + } | ||
| 41 | + } | ||
| 42 | +</script> | ||
| 43 | + | ||
| 44 | +<style lang="scss" scoped> | ||
| 45 | + .venue{ | ||
| 46 | + margin-top: 28rpx; | ||
| 47 | + .title{ | ||
| 48 | + position: relative; | ||
| 49 | + padding-left: 18rpx; | ||
| 50 | + color: #333333; | ||
| 51 | + font-size: 32rpx; | ||
| 52 | + line-height: 36rpx; | ||
| 53 | + margin-bottom: 24rpx; | ||
| 54 | + &::before{ | ||
| 55 | + position: absolute; | ||
| 56 | + left: 0; | ||
| 57 | + top: 50%; | ||
| 58 | + transform: translateY(-50%); | ||
| 59 | + content: ''; | ||
| 60 | + width: 8rpx; | ||
| 61 | + height: 26rpx; | ||
| 62 | + background-color: #FFA100; | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + .content_list{ | ||
| 67 | + padding: 24rpx; | ||
| 68 | + padding-bottom: 0; | ||
| 69 | + height: 284rpx; | ||
| 70 | + background: #FFFFFF; | ||
| 71 | + border-radius: 16rpx 16rpx 16rpx 16rpx; | ||
| 72 | + box-sizing: border-box; | ||
| 73 | + .list_item{ | ||
| 74 | + display: flex; | ||
| 75 | + flex-direction: column; | ||
| 76 | + margin-right: 20rpx; | ||
| 77 | + &:last-child{ | ||
| 78 | + margin-right: 0; | ||
| 79 | + } | ||
| 80 | + .cover{ | ||
| 81 | + width: 220rpx; | ||
| 82 | + height: 156rpx; | ||
| 83 | + border-radius: 12rpx; | ||
| 84 | + margin-bottom: 16rpx; | ||
| 85 | + } | ||
| 86 | + .name{ | ||
| 87 | + color: #333333; | ||
| 88 | + font-weight: 500; | ||
| 89 | + line-height: 34rpx; | ||
| 90 | + font-size: 24rpx; | ||
| 91 | + margin-bottom: 6rpx; | ||
| 92 | + } | ||
| 93 | + .tip{ | ||
| 94 | + display: flex; | ||
| 95 | + align-items: center; | ||
| 96 | + color: #666; | ||
| 97 | + font-size: 20rpx; | ||
| 98 | + .price{ | ||
| 99 | + margin-left: 16rpx; | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | +</style> |
pages/home/components/searchHead.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="search_box"> | ||
| 3 | + <view class="search_input"> | ||
| 4 | + <u-search placeholder="输入球场名字搜索" placeholder-color="#CDCDCD" bg-color="#F6F6F6" v-model="keyword" :show-action="false"></u-search> | ||
| 5 | + </view> | ||
| 6 | + <view class="location"> | ||
| 7 | + <u-icon name="map" color="#FFA100"></u-icon> | ||
| 8 | + <text>南宁</text> | ||
| 9 | + </view> | ||
| 10 | + </view> | ||
| 11 | +</template> | ||
| 12 | + | ||
| 13 | +<script> | ||
| 14 | + export default { | ||
| 15 | + data() { | ||
| 16 | + return { | ||
| 17 | + keyword: '' | ||
| 18 | + } | ||
| 19 | + } | ||
| 20 | + } | ||
| 21 | +</script> | ||
| 22 | + | ||
| 23 | +<style lang="scss" scoped> | ||
| 24 | + .search_box{ | ||
| 25 | + display: flex; | ||
| 26 | + align-items: center; | ||
| 27 | + justify-content: space-between; | ||
| 28 | + height: 108rpx; | ||
| 29 | + margin: 20rpx 0; | ||
| 30 | + padding: 24rpx 30rpx; | ||
| 31 | + box-sizing: border-box; | ||
| 32 | + background-color: #fff; | ||
| 33 | + .search_input{ | ||
| 34 | + flex: 1; | ||
| 35 | + } | ||
| 36 | + .location{ | ||
| 37 | + display: flex; | ||
| 38 | + flex-direction: column; | ||
| 39 | + align-items: center; | ||
| 40 | + width: 50rpx; | ||
| 41 | + font-size: 24rpx; | ||
| 42 | + line-height: 28rpx; | ||
| 43 | + color: #FFA100; | ||
| 44 | + margin-left: 28rpx; | ||
| 45 | + } | ||
| 46 | + } | ||
| 47 | +</style> |
pages/home/home.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="home_container"> | ||
| 3 | + <SearchHead /> | ||
| 4 | + <view class="content_box"> | ||
| 5 | + <Banner /> | ||
| 6 | + <BallNav /> | ||
| 7 | + <u-notice-bar :text="text"></u-notice-bar> | ||
| 8 | + <HotVnue /> | ||
| 9 | + <BookingNavlist /> | ||
| 10 | + </view> | ||
| 11 | + </view> | ||
| 12 | +</template> | ||
| 13 | + | ||
| 14 | +<script> | ||
| 15 | + import SearchHead from './components/searchHead.vue' | ||
| 16 | + import Banner from './components/banner.vue' | ||
| 17 | + import BallNav from './components/ballNav.vue' | ||
| 18 | + import HotVnue from './components/hotvenue.vue' | ||
| 19 | + import BookingNavlist from './components/bookingNavlist.vue' | ||
| 20 | + import { getSportList } from '@/api/sport.js' | ||
| 21 | + export default { | ||
| 22 | + components: { SearchHead, Banner, BallNav, HotVnue, BookingNavlist }, | ||
| 23 | + data() { | ||
| 24 | + return { | ||
| 25 | + text: '用户45553发起了琅东羽毛球场约球...' | ||
| 26 | + }; | ||
| 27 | + }, | ||
| 28 | + async onLoad() { | ||
| 29 | + // const res = await getSportList({pageNum: 1, pageSize: 10}) | ||
| 30 | + // console.log(res) | ||
| 31 | + } | ||
| 32 | + } | ||
| 33 | +</script> | ||
| 34 | + | ||
| 35 | +<style lang="scss"> | ||
| 36 | +.home_container{ | ||
| 37 | + background-color: #f6f6f6; | ||
| 38 | + min-height: calc(100vh - 88rpx); | ||
| 39 | + padding-bottom: 60rpx; | ||
| 40 | + .content_box{ | ||
| 41 | + padding: 0 30rpx; | ||
| 42 | + } | ||
| 43 | +} | ||
| 44 | +</style> |
pages/login/index.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="login-container"> | ||
| 3 | + <view class="login-title">用户名登录</view> | ||
| 4 | + <u-form :model="logForm" ref="logForm"> | ||
| 5 | + <u-form-item prop="username"> | ||
| 6 | + <u-input v-model="logForm.username" placeholder="请输入用户名" /> | ||
| 7 | + </u-form-item> | ||
| 8 | + <u-form-item prop="password"> | ||
| 9 | + <u-input v-model="logForm.password" type="password" placeholder="请输入密码" /> | ||
| 10 | + </u-form-item> | ||
| 11 | + <u-form-item> | ||
| 12 | + <u-checkbox-group> | ||
| 13 | + <u-checkbox v-model="checked" shape="circle" active-color="#FFA100"></u-checkbox> | ||
| 14 | + <text class="agreement">我已阅读并同意《用户协议》及《隐私协议》</text> | ||
| 15 | + </u-checkbox-group> | ||
| 16 | + </u-form-item> | ||
| 17 | + </u-form> | ||
| 18 | + <view class="btn" @click="submit">登录</view> | ||
| 19 | + <view class="tip"> | ||
| 20 | + 没有账号?<text style="color: #FFA100;" @click="goReg">去注册</text> | ||
| 21 | + </view> | ||
| 22 | + </view> | ||
| 23 | +</template> | ||
| 24 | + | ||
| 25 | +<script> | ||
| 26 | + export default { | ||
| 27 | + data() { | ||
| 28 | + return { | ||
| 29 | + logForm: { username: '', password: ''}, | ||
| 30 | + checked: false, | ||
| 31 | + logRules: { | ||
| 32 | + username: [ | ||
| 33 | + { required: true, message: '请填写用户名', trigger: ['blur']}, | ||
| 34 | + { pattern: /^[0-9a-zA-Z]*$/g, transform(value) { return String(value) }, message: '只能包含字母或数字', trigger: 'change' }, | ||
| 35 | + { min: 4, max: 12, message: '长度在6-12个字符之间', trigger: 'change' } | ||
| 36 | + ], | ||
| 37 | + password: [ | ||
| 38 | + { required: true, message: '请填写密码', trigger: ['blur']}, | ||
| 39 | + // { pattern: /^(?=.*[A-Z])[a-zA-Z0-9]+$/, transform(value) { return String(value) }, message: '字母数字组成且必须包含大写字母', trigger: ['change', 'blur'] }, | ||
| 40 | + { min: 6, max: 8, message: '长度在6-16个字符之间', trigger: ['change'] }, | ||
| 41 | + ] | ||
| 42 | + } | ||
| 43 | + } | ||
| 44 | + }, | ||
| 45 | + // 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕 | ||
| 46 | + onReady() { | ||
| 47 | + this.$refs.logForm.setRules(this.logRules); | ||
| 48 | + }, | ||
| 49 | + methods: { | ||
| 50 | + goReg(){ | ||
| 51 | + uni.navigateTo({ | ||
| 52 | + url: '/pages/register/register' | ||
| 53 | + }) | ||
| 54 | + }, | ||
| 55 | + // 提交登录 | ||
| 56 | + submit() { | ||
| 57 | + this.$refs.logForm.validate().then(valid => { | ||
| 58 | + if (valid) { | ||
| 59 | + this.$store.dispatch('Login', this.logForm).then(res => { | ||
| 60 | + console.log(res) | ||
| 61 | + uni.switchTab({ | ||
| 62 | + url: '/pages/home/home' | ||
| 63 | + }) | ||
| 64 | + }) | ||
| 65 | + } else { | ||
| 66 | + console.log('验证失败'); | ||
| 67 | + } | ||
| 68 | + }); | ||
| 69 | + } | ||
| 70 | + } | ||
| 71 | + } | ||
| 72 | +</script> | ||
| 73 | + | ||
| 74 | +<style scoped lang="scss"> | ||
| 75 | + .login-container{ | ||
| 76 | + position: relative; | ||
| 77 | + padding: 0 30rpx; | ||
| 78 | + box-sizing: border-box; | ||
| 79 | + height: calc(100vh - 88rpx); | ||
| 80 | + max-height: 100vh; | ||
| 81 | + .login-title{ | ||
| 82 | + color: #3d3d3d; | ||
| 83 | + font-size: 56rpx; | ||
| 84 | + margin: 40rpx 0 60rpx 0; | ||
| 85 | + line-height: 74rpx; | ||
| 86 | + font-weight: 500; | ||
| 87 | + } | ||
| 88 | + .agreement{ | ||
| 89 | + color: #333; | ||
| 90 | + line-height: 38rpx; | ||
| 91 | + font-size: 28rpx; | ||
| 92 | + } | ||
| 93 | + .btn{ | ||
| 94 | + width: 100%; | ||
| 95 | + height: 88rpx; | ||
| 96 | + text-align: center; | ||
| 97 | + line-height: 88rpx; | ||
| 98 | + font-size: 32rpx; | ||
| 99 | + background-color: #FFA100; | ||
| 100 | + border-radius: 12rpx; | ||
| 101 | + color: #fff; | ||
| 102 | + margin-top: 30rpx; | ||
| 103 | + } | ||
| 104 | + .tip{ | ||
| 105 | + position: absolute; | ||
| 106 | + bottom: 44rpx; | ||
| 107 | + left: 50%; | ||
| 108 | + font-size: 36rpx; | ||
| 109 | + color: #333; | ||
| 110 | + transform: translateX(-50%); | ||
| 111 | + } | ||
| 112 | + } | ||
| 113 | +</style> |
pages/login/login.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="login-container"> | ||
| 3 | + <image class="login-bg" src="../../static/images/start/login-bg-mob.png" mode="widthFix"></image> | ||
| 4 | + <view class="login-btn"> | ||
| 5 | + <u-button shape="circle" @click="goLogin">用户名登录/注册</u-button> | ||
| 6 | + </view> | ||
| 7 | + </view> | ||
| 8 | +</template> | ||
| 9 | + | ||
| 10 | +<script> | ||
| 11 | + import { userLogin } from '@/api/user.js' | ||
| 12 | + export default { | ||
| 13 | + onLoad() { | ||
| 14 | + | ||
| 15 | + }, | ||
| 16 | + methods: { | ||
| 17 | + goLogin(){ | ||
| 18 | + uni.redirectTo({ | ||
| 19 | + url: '/pages/login/index' | ||
| 20 | + }); | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | + | ||
| 24 | + } | ||
| 25 | +</script> | ||
| 26 | + | ||
| 27 | +<style lang="scss" scoped> | ||
| 28 | +.login-container { | ||
| 29 | + position: relative; | ||
| 30 | + height: 100vh; | ||
| 31 | + .login-bg{ | ||
| 32 | + width: 100%; | ||
| 33 | + max-height: 100vh; | ||
| 34 | + position: absolute; | ||
| 35 | + top: 0; | ||
| 36 | + left: 0; | ||
| 37 | + } | ||
| 38 | + .login-btn{ | ||
| 39 | + position: absolute; | ||
| 40 | + top: 55%; | ||
| 41 | + left: 50%; | ||
| 42 | + width: 600rpx; | ||
| 43 | + transform: translateX(-50%); | ||
| 44 | + } | ||
| 45 | +} | ||
| 46 | +</style> |
pages/mall/mall.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="mall_container"> | ||
| 3 | + <view class="locate"> | ||
| 4 | + <u-icon name="map"></u-icon> | ||
| 5 | + <text class="site">南宁市活力篮球公园</text> | ||
| 6 | + </view> | ||
| 7 | + <view class="search_box"> | ||
| 8 | + <u-search placeholder="输入商品名字搜索" v-model="shopValue"></u-search> | ||
| 9 | + </view> | ||
| 10 | + | ||
| 11 | + | ||
| 12 | + </view> | ||
| 13 | +</template> | ||
| 14 | + | ||
| 15 | +<script> | ||
| 16 | + export default { | ||
| 17 | + data() { | ||
| 18 | + return { | ||
| 19 | + shopValue: '', // 商品名称 | ||
| 20 | + }; | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | +</script> | ||
| 24 | + | ||
| 25 | +<style lang="scss" scoped> | ||
| 26 | +.mall_container{ | ||
| 27 | + min-height: 100vh; | ||
| 28 | + box-sizing: border-box; | ||
| 29 | + .locate{ | ||
| 30 | + height: 88rpx; | ||
| 31 | + display: flex; | ||
| 32 | + align-items: center; | ||
| 33 | + padding: 0 20rpx; | ||
| 34 | + .site{ | ||
| 35 | + color: #3d3d3d; | ||
| 36 | + font-size: 28rpx; | ||
| 37 | + margin-left: 10rpx; | ||
| 38 | + } | ||
| 39 | + } | ||
| 40 | + .search_box{ | ||
| 41 | + height: 106rpx; | ||
| 42 | + box-sizing: border-box; | ||
| 43 | + padding: 14rpx 20rpx 20rpx; | ||
| 44 | + border-bottom: 2rpx solid #eee; | ||
| 45 | + } | ||
| 46 | +} | ||
| 47 | +</style> |
pages/moneyEdit/moneyEdit.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="money_edit"> | ||
| 3 | + <view class="banner"> | ||
| 4 | + <image class="bg-img" src="@/static/myImage/wallet-bg.png" mode="widthFix"></image> | ||
| 5 | + <view class="my_money"> | ||
| 6 | + <text>可提现金额(元)</text> | ||
| 7 | + <text>¥<text class="number">2000.00</text> </text> | ||
| 8 | + </view> | ||
| 9 | + </view> | ||
| 10 | + | ||
| 11 | + <view class="edit_box"> | ||
| 12 | + <view class="edit_title">提现金额</view> | ||
| 13 | + <view class="money_line">¥<text class="number">1800</text></view> | ||
| 14 | + <view class="option"> | ||
| 15 | + <u-cell-group :border="false"> | ||
| 16 | + <u-cell title="充值方式" :border="false"> | ||
| 17 | + <view slot="right-icon" class="opton-item"> | ||
| 18 | + <u-icon name="weixin-circle-fill" color="#04B62F"></u-icon> | ||
| 19 | + <text style="margin-left: 12rpx;">微信</text> | ||
| 20 | + </view> | ||
| 21 | + </u-cell> | ||
| 22 | + </u-cell-group> | ||
| 23 | + </view> | ||
| 24 | + | ||
| 25 | + <!-- 提交按钮 --> | ||
| 26 | + <view class="footer"> | ||
| 27 | + <MyButton title="申请提现" ></MyButton> | ||
| 28 | + </view> | ||
| 29 | + </view> | ||
| 30 | + </view> | ||
| 31 | +</template> | ||
| 32 | + | ||
| 33 | +<script> | ||
| 34 | + import MyButton from '@/components/myButton.vue' | ||
| 35 | + export default { | ||
| 36 | + components: { MyButton }, | ||
| 37 | + data() { | ||
| 38 | + return { | ||
| 39 | + | ||
| 40 | + }; | ||
| 41 | + } | ||
| 42 | + } | ||
| 43 | +</script> | ||
| 44 | + | ||
| 45 | +<style lang="scss" scoped> | ||
| 46 | +.money_edit{ | ||
| 47 | + min-height: 100vh; | ||
| 48 | + background-color: #f6f6f6; | ||
| 49 | +} | ||
| 50 | +.banner{ | ||
| 51 | + position: relative; | ||
| 52 | + height: 288rpx; | ||
| 53 | + .bg-img{ | ||
| 54 | + width: 100%; | ||
| 55 | + height: 100%; | ||
| 56 | + position: absolute; | ||
| 57 | + top: 0; | ||
| 58 | + left: 0; | ||
| 59 | + } | ||
| 60 | + .my_money{ | ||
| 61 | + position: absolute; | ||
| 62 | + top: 38rpx; | ||
| 63 | + left: 28rpx; | ||
| 64 | + display: flex; | ||
| 65 | + flex-direction: column; | ||
| 66 | + gap: 8rpx; | ||
| 67 | + font-size: 28rpx; | ||
| 68 | + line-height: 40rpx; | ||
| 69 | + color: #fff; | ||
| 70 | + .number{ | ||
| 71 | + font-size: 52rpx; | ||
| 72 | + font-weight: 700; | ||
| 73 | + line-height: 64rpx; | ||
| 74 | + margin-left: 4rpx; | ||
| 75 | + } | ||
| 76 | + } | ||
| 77 | +} | ||
| 78 | + | ||
| 79 | +.edit_box{ | ||
| 80 | + position: relative; | ||
| 81 | + height: 496rpx; | ||
| 82 | + margin: 0 30rpx; | ||
| 83 | + padding: 0 30rpx; | ||
| 84 | + margin-top: -86rpx; | ||
| 85 | + background: #FFFFFF; | ||
| 86 | + border-radius: 12rpx; | ||
| 87 | + .edit_title{ | ||
| 88 | + height: 86rpx; | ||
| 89 | + color: #333; | ||
| 90 | + line-height: 86rpx; | ||
| 91 | + font-size: 28rpx; | ||
| 92 | + } | ||
| 93 | + .money_line{ | ||
| 94 | + font-size: 40rpx; | ||
| 95 | + line-height: 52rpx; | ||
| 96 | + color: #333; | ||
| 97 | + padding-bottom: 6rpx; | ||
| 98 | + border-bottom: 2rpx solid #D8D8D8; | ||
| 99 | + .number{ | ||
| 100 | + font-size: 56rpx; | ||
| 101 | + font-weight: 500; | ||
| 102 | + margin-left: 12rpx; | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + .footer{ | ||
| 106 | + margin: 100rpx 72rpx 0; | ||
| 107 | + } | ||
| 108 | + .option{ | ||
| 109 | + margin-top: 30rpx; | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + .opton-item{ | ||
| 113 | + display: flex; | ||
| 114 | + } | ||
| 115 | +} | ||
| 116 | +</style> |
pages/moreComment/moreComment.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="more_comment"> | ||
| 3 | + <CommentCard v-for="item in 5" :key="item" :isPadding="true"></CommentCard> | ||
| 4 | + </view> | ||
| 5 | +</template> | ||
| 6 | + | ||
| 7 | +<script> | ||
| 8 | + import CommentCard from '@/components/commentCard.vue' | ||
| 9 | + export default { | ||
| 10 | + components: { CommentCard }, | ||
| 11 | + data() { | ||
| 12 | + return { | ||
| 13 | + | ||
| 14 | + }; | ||
| 15 | + } | ||
| 16 | + } | ||
| 17 | +</script> | ||
| 18 | + | ||
| 19 | +<style lang="scss" scoped> | ||
| 20 | +.more_comment{ | ||
| 21 | + padding: 30rpx; | ||
| 22 | + background-color: #F6F6F6; | ||
| 23 | +} | ||
| 24 | +</style> |
pages/morePhotos/morePhotos.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="more_photos"> | ||
| 3 | + <image v-for="(item, index) in urls2" :key="index" class="photo" :src="item" mode="widthFix"></image> | ||
| 4 | + </view> | ||
| 5 | +</template> | ||
| 6 | + | ||
| 7 | +<script> | ||
| 8 | + export default { | ||
| 9 | + data() { | ||
| 10 | + return { | ||
| 11 | + urls2: [ | ||
| 12 | + 'https://cdn.uviewui.com/uview/album/1.jpg', | ||
| 13 | + 'https://cdn.uviewui.com/uview/album/2.jpg', | ||
| 14 | + 'https://cdn.uviewui.com/uview/album/3.jpg', | ||
| 15 | + 'https://cdn.uviewui.com/uview/album/4.jpg', | ||
| 16 | + 'https://cdn.uviewui.com/uview/album/5.jpg', | ||
| 17 | + 'https://cdn.uviewui.com/uview/album/6.jpg', | ||
| 18 | + 'https://cdn.uviewui.com/uview/album/7.jpg', | ||
| 19 | + 'https://cdn.uviewui.com/uview/album/8.jpg', | ||
| 20 | + 'https://cdn.uviewui.com/uview/album/9.jpg', | ||
| 21 | + 'https://cdn.uviewui.com/uview/album/10.jpg' | ||
| 22 | + ], | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + } | ||
| 26 | +</script> | ||
| 27 | + | ||
| 28 | +<style lang="scss" scoped> | ||
| 29 | +.more_photos { | ||
| 30 | + display: flex; | ||
| 31 | + flex-wrap: wrap; | ||
| 32 | + gap: 18rpx; | ||
| 33 | + padding: 30rpx; | ||
| 34 | + .photo{ | ||
| 35 | + width: 330rpx; | ||
| 36 | + } | ||
| 37 | +} | ||
| 38 | +</style> |
pages/my/components/functionList.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="function_card"> | ||
| 3 | + <view class="function_title">{{ title }}</view> | ||
| 4 | + <view class="function_list"> | ||
| 5 | + <view class="function_item" v-for="(item, index) in functionData" :key="index"> | ||
| 6 | + <image class="list_icon" :src="item.icon" mode="widthFix"></image> | ||
| 7 | + <text class="list_name">{{ item.text }}</text> | ||
| 8 | + </view> | ||
| 9 | + </view> | ||
| 10 | + </view> | ||
| 11 | +</template> | ||
| 12 | + | ||
| 13 | +<script> | ||
| 14 | + | ||
| 15 | + export default { | ||
| 16 | + props: { | ||
| 17 | + title: { | ||
| 18 | + type: String, | ||
| 19 | + default: '' | ||
| 20 | + }, | ||
| 21 | + functionData: { | ||
| 22 | + tyep: Array, | ||
| 23 | + require: true | ||
| 24 | + } | ||
| 25 | + }, | ||
| 26 | + methods: { | ||
| 27 | + goRouter(){} | ||
| 28 | + } | ||
| 29 | + } | ||
| 30 | +</script> | ||
| 31 | + | ||
| 32 | +<style scoped lang="scss"> | ||
| 33 | + .function_card{ | ||
| 34 | + background: #FFFFFF; | ||
| 35 | + border-radius: 12rpx; | ||
| 36 | + .function_title{ | ||
| 37 | + line-height: 84rpx; | ||
| 38 | + height: 84rpx; | ||
| 39 | + padding-left: 36rpx; | ||
| 40 | + font-size: 28rpx; | ||
| 41 | + color: #333; | ||
| 42 | + border-bottom: 2rpx solid #E1E1E1; | ||
| 43 | + box-sizing: border-box; | ||
| 44 | + } | ||
| 45 | + .function_list{ | ||
| 46 | + display: flex; | ||
| 47 | + gap: 28rpx; | ||
| 48 | + flex-wrap: wrap; | ||
| 49 | + padding: 24rpx 30rpx; | ||
| 50 | + .function_item{ | ||
| 51 | + width: calc((100% - 90rpx) / 4); | ||
| 52 | + display: flex; | ||
| 53 | + flex-direction: column; | ||
| 54 | + align-items: center; | ||
| 55 | + font-size: 28rpx; | ||
| 56 | + list-style: 40rpx; | ||
| 57 | + color: #333; | ||
| 58 | + .list_icon{ | ||
| 59 | + width: 52rpx; | ||
| 60 | + height: 52rpx; | ||
| 61 | + margin-bottom: 14rpx; | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | +</style> |
pages/my/my.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="my_pages"> | ||
| 3 | + <view class="header_box"> | ||
| 4 | + <view v-if="token === ''" class="userInfo"> | ||
| 5 | + <u-avatar src="" size="108rpx"></u-avatar> | ||
| 6 | + <view class="right" @click="goRouter('/pages/login/index')"> | ||
| 7 | + <view class="username">登录/注册</view> | ||
| 8 | + </view> | ||
| 9 | + </view> | ||
| 10 | + <view v-else class="userInfo"> | ||
| 11 | + <u-avatar :src="src" size="108rpx"></u-avatar> | ||
| 12 | + <view class="right"> | ||
| 13 | + <view class="username">CLOOL</view> | ||
| 14 | + <view class="intro"> | ||
| 15 | + <text>一枚爱运动的少年吖~</text> | ||
| 16 | + <u-icon name="edit-pen" color="#fff" @click="goRouter('/pages/editInfo/editInfo')"></u-icon> | ||
| 17 | + </view> | ||
| 18 | + </view> | ||
| 19 | + </view> | ||
| 20 | + </view> | ||
| 21 | + <!-- 用户金额 --> | ||
| 22 | + <view class="user_money"> | ||
| 23 | + <view class="left"> | ||
| 24 | + <view class="money"> | ||
| 25 | + <text>余额</text> | ||
| 26 | + <u-icon name="eye"></u-icon> | ||
| 27 | + </view> | ||
| 28 | + <text>2000.00</text> | ||
| 29 | + </view> | ||
| 30 | + <view class="btn">我的钱包</view> | ||
| 31 | + </view> | ||
| 32 | + | ||
| 33 | + <!-- 列表 --> | ||
| 34 | + <view class="list"> | ||
| 35 | + <FunctionList title="我的订单" :functionData="orderList" /> | ||
| 36 | + <FunctionList title="我的服务" :functionData="serviceList" /> | ||
| 37 | + </view> | ||
| 38 | + </view> | ||
| 39 | +</template> | ||
| 40 | + | ||
| 41 | +<script> | ||
| 42 | + import All from '@/static/myImage/all.png' | ||
| 43 | + import BookingOrder from '@/static/myImage/booking_order.png' | ||
| 44 | + import CustomerService from '@/static/myImage/customer_service.png' | ||
| 45 | + import EmptyWalletTime from '@/static/myImage/empty-wallet-time.png' | ||
| 46 | + import EmptyWallet from '@/static/myImage/empty-wallet.png' | ||
| 47 | + import Recharge from '@/static/myImage/recharge.png' | ||
| 48 | + import SingUp from '@/static/myImage/sing_up.png' | ||
| 49 | + import Vip from '@/static/myImage/vip.png' | ||
| 50 | + import ToBeUsed from '@/static/myImage/to_be_used.png' | ||
| 51 | + import FunctionList from './components/functionList.vue' | ||
| 52 | + import { mapGetters } from 'vuex' | ||
| 53 | + export default { | ||
| 54 | + components: { FunctionList }, | ||
| 55 | + data() { | ||
| 56 | + return { | ||
| 57 | + src: 'https://cdn.uviewui.com/uview/album/1.jpg', | ||
| 58 | + orderList: [ | ||
| 59 | + { text: '全部', icon: All }, | ||
| 60 | + { text: '待付款', icon: EmptyWalletTime }, | ||
| 61 | + { text: '待使用', icon: ToBeUsed }, | ||
| 62 | + { text: '退款售后', icon: CustomerService }, | ||
| 63 | + ], | ||
| 64 | + serviceList: [ | ||
| 65 | + { text: '钱包', icon: EmptyWallet }, | ||
| 66 | + { text: '充值', icon: Recharge }, | ||
| 67 | + { text: '约球订单', icon: BookingOrder }, | ||
| 68 | + { text: '我的报名', icon: SingUp }, | ||
| 69 | + { text: '我的会员', icon: Vip }, | ||
| 70 | + ] | ||
| 71 | + }; | ||
| 72 | + }, | ||
| 73 | + computed: { | ||
| 74 | + ...mapGetters(['token']) | ||
| 75 | + }, | ||
| 76 | + methods: { | ||
| 77 | + goRouter(path){ | ||
| 78 | + uni.navigateTo({ | ||
| 79 | + url: path | ||
| 80 | + }) | ||
| 81 | + } | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | +</script> | ||
| 85 | + | ||
| 86 | +<style lang="scss" scoped> | ||
| 87 | +.my_pages{ | ||
| 88 | + background-color: #f6f6f6; | ||
| 89 | + height: 100vh; | ||
| 90 | +} | ||
| 91 | +.header_box{ | ||
| 92 | + position: relative; | ||
| 93 | + height: 330rpx; | ||
| 94 | + padding: 0 30rpx; | ||
| 95 | + box-sizing: border-box; | ||
| 96 | + background: linear-gradient( 270deg, #FCD723 0%, #FFA100 100%); | ||
| 97 | + &::after{ | ||
| 98 | + content: ''; | ||
| 99 | + position: absolute; | ||
| 100 | + bottom: -40rpx; | ||
| 101 | + left: 0; | ||
| 102 | + width: 100%; | ||
| 103 | + height: 100rpx; | ||
| 104 | + background: linear-gradient( 270deg, #FCD723 0%, #FFA100 100%); | ||
| 105 | + border-radius: 50%; | ||
| 106 | + } | ||
| 107 | + .userInfo{ | ||
| 108 | + position: absolute; | ||
| 109 | + top: 160rpx; | ||
| 110 | + display: flex; | ||
| 111 | + align-items: center; | ||
| 112 | + z-index: 10; | ||
| 113 | + .right{ | ||
| 114 | + display: flex; | ||
| 115 | + flex-direction: column; | ||
| 116 | + justify-content: space-between; | ||
| 117 | + flex: 1; | ||
| 118 | + margin-left: 20rpx; | ||
| 119 | + height: 100%; | ||
| 120 | + font-size: 24rpx; | ||
| 121 | + color: #fff; | ||
| 122 | + .username{ | ||
| 123 | + font-size: 32rpx; | ||
| 124 | + line-height: 48rpx; | ||
| 125 | + font-weight: 500; | ||
| 126 | + } | ||
| 127 | + .intro{ | ||
| 128 | + display: flex; | ||
| 129 | + align-items: center; | ||
| 130 | + gap: 20rpx; | ||
| 131 | + } | ||
| 132 | + } | ||
| 133 | + } | ||
| 134 | +} | ||
| 135 | + | ||
| 136 | +.user_money{ | ||
| 137 | + display: flex; | ||
| 138 | + align-items: center; | ||
| 139 | + justify-content: space-between; | ||
| 140 | + position: relative; | ||
| 141 | + padding: 30rpx 32rpx; | ||
| 142 | + background: #FFFFFF; | ||
| 143 | + border-radius: 12rpx; | ||
| 144 | + margin: 0 30rpx; | ||
| 145 | + margin-top: -44rpx; | ||
| 146 | + z-index: 20; | ||
| 147 | + .left{ | ||
| 148 | + display: flex; | ||
| 149 | + flex-direction: column; | ||
| 150 | + justify-content: space-between; | ||
| 151 | + gap: 16rpx; | ||
| 152 | + font-size: 36rpx; | ||
| 153 | + color: #333; | ||
| 154 | + .money{ | ||
| 155 | + display: flex; | ||
| 156 | + align-items: center; | ||
| 157 | + color: #666; | ||
| 158 | + font-size: 28rpx; | ||
| 159 | + gap: 14rpx; | ||
| 160 | + } | ||
| 161 | + } | ||
| 162 | + .btn{ | ||
| 163 | + width: 176rpx; | ||
| 164 | + height: 60rpx; | ||
| 165 | + background: linear-gradient( 270deg, #FFA100 0%, #FCD723 100%); | ||
| 166 | + border-radius: 90rpx; | ||
| 167 | + line-height: 60rpx; | ||
| 168 | + font-size: 28rpx; | ||
| 169 | + text-align: center; | ||
| 170 | + color: #fff; | ||
| 171 | + } | ||
| 172 | +} | ||
| 173 | + | ||
| 174 | +.list{ | ||
| 175 | + display: flex; | ||
| 176 | + flex-direction: column; | ||
| 177 | + gap: 20rpx; | ||
| 178 | + margin: 20rpx 30rpx 0; | ||
| 179 | +} | ||
| 180 | +</style> |
pages/myOrder/myOrder.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="myOrder"> | ||
| 3 | + <!-- 头部导航 --> | ||
| 4 | + <u-sticky> | ||
| 5 | + <view class="tab_nav"> | ||
| 6 | + <u-tabs :list="list" lineColor="#FFA100" :activeStyle="{ color: '#FFA100' }" @click="toggleOrder"></u-tabs> | ||
| 7 | + </view> | ||
| 8 | + </u-sticky> | ||
| 9 | + <!-- 订单列表 --> | ||
| 10 | + <view class="order_list"> | ||
| 11 | + <CommonCell | ||
| 12 | + v-for="(item, index) in showList" | ||
| 13 | + :key="index" | ||
| 14 | + :lineInfo="item.orderInfo" | ||
| 15 | + :headTitle="item.createTime" | ||
| 16 | + :state="item.orderState" | ||
| 17 | + :rightTitle="'合计:¥200.15'" | ||
| 18 | + @showQRcode="showQRcode = true" | ||
| 19 | + /> | ||
| 20 | + </view> | ||
| 21 | + <view v-show="showList.length === 0"> | ||
| 22 | + <u-empty | ||
| 23 | + mode="list" | ||
| 24 | + text="暂无订单" | ||
| 25 | + /> | ||
| 26 | + </view> | ||
| 27 | + <!-- 弹出使用二维码框 --> | ||
| 28 | + <u-popup :show="showQRcode" mode="center" @close="showQRcode = false" round="12rpx"> | ||
| 29 | + <view class="QRbox"> | ||
| 30 | + <view class="use_tip"> | ||
| 31 | + <text class="title">核销码</text> | ||
| 32 | + <text class="use_time">有效期至 2023-02-023 13:00-16:30</text> | ||
| 33 | + <text>错过有效期该核销码即失效</text> | ||
| 34 | + </view> | ||
| 35 | + <!-- 二维码使用 --> | ||
| 36 | + <view class="qr_code"> | ||
| 37 | + <image class="qr_logo" src="@/static/myImage/QR_Code.png" mode="widthFix"></image> | ||
| 38 | + <text>0000000000001</text> | ||
| 39 | + </view> | ||
| 40 | + </view> | ||
| 41 | + </u-popup> | ||
| 42 | + </view> | ||
| 43 | +</template> | ||
| 44 | + | ||
| 45 | +<script> | ||
| 46 | + import CommonCell from '@/components/commonCell.vue' | ||
| 47 | + export default { | ||
| 48 | + components: { CommonCell }, | ||
| 49 | + data() { | ||
| 50 | + return { | ||
| 51 | + showQRcode: false, | ||
| 52 | + list: [{name: '全部', id: 0}, {name: '待支付', id: 2}, {name: '已完成', id: 1}, {name: '已取消', id: 4}, {name: '待使用', id: 6}, {name: '待评价', id: 3}, {name: '退款/售后', id: 5}], | ||
| 53 | + current: 1, | ||
| 54 | + showList: [], | ||
| 55 | + orderList: [ | ||
| 56 | + { | ||
| 57 | + createTime: '2022-12-22 15:23:45', | ||
| 58 | + orderState: 1, // 已完成 | ||
| 59 | + orderInfo: [ | ||
| 60 | + { title: '订单编号:', valueName: '000015', type: 'text' }, | ||
| 61 | + { title: '场馆:', valueName: '壹号球馆-1号场', type: 'text' }, | ||
| 62 | + { title: '预约时段:', valueName: '2022-12-26 14:00-16:00', type: 'text' }, | ||
| 63 | + ] | ||
| 64 | + }, | ||
| 65 | + { | ||
| 66 | + createTime: '2022-12-22 15:23:45', | ||
| 67 | + orderState: 2, // 待付款 | ||
| 68 | + orderInfo: [ | ||
| 69 | + { title: '订单编号:', valueName: '000015', type: 'text' }, | ||
| 70 | + { title: '场馆:', valueName: '壹号球馆-1号场', type: 'text' }, | ||
| 71 | + { title: '预约时段:', valueName: '2022-12-26 14:00-16:00', type: 'text' }, | ||
| 72 | + ] | ||
| 73 | + }, | ||
| 74 | + { | ||
| 75 | + createTime: '2022-12-22 15:23:45', | ||
| 76 | + orderState: 4, // 已取消 | ||
| 77 | + orderInfo: [ | ||
| 78 | + { title: '订单编号:', valueName: '000015', type: 'text' }, | ||
| 79 | + { title: '场馆:', valueName: '壹号球馆-1号场', type: 'text' }, | ||
| 80 | + { title: '预约时段:', valueName: '2022-12-26 14:00-16:00', type: 'text' }, | ||
| 81 | + ] | ||
| 82 | + }, | ||
| 83 | + { | ||
| 84 | + createTime: '2022-12-22 15:23:45', | ||
| 85 | + orderState: 3, // 待评价 | ||
| 86 | + orderInfo: [ | ||
| 87 | + { title: '订单编号:', valueName: '000015', type: 'text' }, | ||
| 88 | + { title: '场馆:', valueName: '壹号球馆-1号场', type: 'text' }, | ||
| 89 | + { title: '预约时段:', valueName: '2022-12-26 14:00-16:00', type: 'text' }, | ||
| 90 | + ] | ||
| 91 | + }, | ||
| 92 | + { | ||
| 93 | + createTime: '2022-12-22 15:23:45', | ||
| 94 | + orderState: 6, // 待使用 | ||
| 95 | + orderInfo: [ | ||
| 96 | + { title: '订单编号:', valueName: '000015', type: 'text' }, | ||
| 97 | + { title: '场馆:', valueName: '壹号球馆-1号场', type: 'text' }, | ||
| 98 | + { title: '预约时段:', valueName: '2022-12-26 14:00-16:00', type: 'text' }, | ||
| 99 | + ] | ||
| 100 | + } | ||
| 101 | + ] | ||
| 102 | + }; | ||
| 103 | + }, | ||
| 104 | + mounted() { | ||
| 105 | + this.showList = this.orderList | ||
| 106 | + }, | ||
| 107 | + methods: { | ||
| 108 | + toggleOrder(value){ | ||
| 109 | + let id = value.id | ||
| 110 | + if(id === 0) { | ||
| 111 | + this.showList = this.orderList | ||
| 112 | + } else{ | ||
| 113 | + let list = this.orderList.filter(item => item.orderState === id) | ||
| 114 | + this.showList = list | ||
| 115 | + } | ||
| 116 | + } | ||
| 117 | + } | ||
| 118 | + } | ||
| 119 | +</script> | ||
| 120 | + | ||
| 121 | +<style lang="scss" scoped> | ||
| 122 | +.myOrder{ | ||
| 123 | + background-color: #F6F6F6; | ||
| 124 | + min-height: 100vh; | ||
| 125 | + .tab_nav{ | ||
| 126 | + background-color: #fff; | ||
| 127 | + } | ||
| 128 | + .order_list{ | ||
| 129 | + display: flex; | ||
| 130 | + flex-direction: column; | ||
| 131 | + gap: 24rpx; | ||
| 132 | + padding: 24rpx 30rpx; | ||
| 133 | + } | ||
| 134 | +} | ||
| 135 | + | ||
| 136 | +.QRbox{ | ||
| 137 | + width: 690rpx; | ||
| 138 | + height: 544rpx; | ||
| 139 | + background: #FFFFFF; | ||
| 140 | + border-radius: 12rpx; | ||
| 141 | + overflow: hidden; | ||
| 142 | + .use_tip{ | ||
| 143 | + display: flex; | ||
| 144 | + flex-direction: column; | ||
| 145 | + align-items: center; | ||
| 146 | + height: 168rpx; | ||
| 147 | + background: #FFA100; | ||
| 148 | + padding: 20rpx 0; | ||
| 149 | + box-sizing: border-box; | ||
| 150 | + font-size: 24rpx; | ||
| 151 | + color: #fff; | ||
| 152 | + line-height: 32rpx; | ||
| 153 | + .title{ | ||
| 154 | + font-weight: 500; | ||
| 155 | + font-size: 28rpx; | ||
| 156 | + } | ||
| 157 | + .use_time{ | ||
| 158 | + margin: 24rpx 0 10rpx 0; | ||
| 159 | + } | ||
| 160 | + } | ||
| 161 | + .qr_code{ | ||
| 162 | + display: flex; | ||
| 163 | + justify-content: center; | ||
| 164 | + align-items: center; | ||
| 165 | + flex-direction: column; | ||
| 166 | + gap: 22rpx; | ||
| 167 | + color: #333; | ||
| 168 | + font-size: 28rpx; | ||
| 169 | + line-height: 32rpx; | ||
| 170 | + margin-top: 56rpx; | ||
| 171 | + .qr_logo{ | ||
| 172 | + width: 196rpx; | ||
| 173 | + height: 196rpx; | ||
| 174 | + } | ||
| 175 | + } | ||
| 176 | +} | ||
| 177 | +</style> |
pages/myWallet/myWallet.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="wallet_bg"> | ||
| 3 | + <view class="banner"> | ||
| 4 | + <image class="bg-img" src="@/static/myImage/wallet-bg.png" mode="widthFix"></image> | ||
| 5 | + <view class="my_money"> | ||
| 6 | + <text>我的余额</text> | ||
| 7 | + <text>¥<text class="number">0.00</text> </text> | ||
| 8 | + </view> | ||
| 9 | + <view class="use">提现</view> | ||
| 10 | + <view class="recharge">充值</view> | ||
| 11 | + </view> | ||
| 12 | + | ||
| 13 | + <u-tabs | ||
| 14 | + :list="list" | ||
| 15 | + lineColor="#FFA100" | ||
| 16 | + :activeStyle="{ color: '#FFA100' }" | ||
| 17 | + itemStyle="padding-left: 15px; padding-right: 15px; height: 92rpx;width: 33%;box-sizing: border-box;" | ||
| 18 | + @click="toggleData" | ||
| 19 | + /> | ||
| 20 | + | ||
| 21 | + <!-- 账单列表 --> | ||
| 22 | + <view class="bill_list"> | ||
| 23 | + <u-cell-group :border="false"> | ||
| 24 | + <u-cell | ||
| 25 | + v-for="(item, index) in billList" | ||
| 26 | + :key="index" :title="item.name" | ||
| 27 | + :label="item.createTime" | ||
| 28 | + :value="priceActive(item)" | ||
| 29 | + :border="false" | ||
| 30 | + /> | ||
| 31 | + </u-cell-group> | ||
| 32 | + </view> | ||
| 33 | + </view> | ||
| 34 | +</template> | ||
| 35 | + | ||
| 36 | +<script> | ||
| 37 | + export default { | ||
| 38 | + data() { | ||
| 39 | + return { | ||
| 40 | + list: [ | ||
| 41 | + { name: '全部', id: 1}, | ||
| 42 | + { name: '收入', id: 2}, | ||
| 43 | + { name: '支出', id: 3}, | ||
| 44 | + ], | ||
| 45 | + billList: [ | ||
| 46 | + { name: '南宁站 000026', createTime: '2022-12-26 14:00:35', price: '1.09', status: 'add' }, | ||
| 47 | + { name: '南宁站 000026', createTime: '2022-12-26 14:00:35', price: '1.09', status: 'add' }, | ||
| 48 | + { name: '提现', createTime: '2022-12-26 14:00:35', price: '1.09', status: 'minus' }, | ||
| 49 | + { name: '提现', createTime: '2022-12-26 14:00:35', price: '1.09', status: 'minus' }, | ||
| 50 | + ] | ||
| 51 | + }; | ||
| 52 | + }, | ||
| 53 | + computed: { | ||
| 54 | + priceActive(){ | ||
| 55 | + return (item) => { | ||
| 56 | + return item.status === 'add' ? `+ ${item.price}` : `- ${item.price}` | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + }, | ||
| 60 | + methods: { | ||
| 61 | + toggleData(){ | ||
| 62 | + | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | +</script> | ||
| 67 | + | ||
| 68 | +<style lang="scss" scoped> | ||
| 69 | +.wallet_bg{ | ||
| 70 | + padding: 20rpx 30rpx; | ||
| 71 | + background-color: #F6F6F6; | ||
| 72 | + min-height: 100vh; | ||
| 73 | + .banner{ | ||
| 74 | + position: relative; | ||
| 75 | + height: 288rpx; | ||
| 76 | + border-radius: 16rpx; | ||
| 77 | + .bg-img{ | ||
| 78 | + width: 100%; | ||
| 79 | + height: 100%; | ||
| 80 | + position: absolute; | ||
| 81 | + top: 0; | ||
| 82 | + left: 0; | ||
| 83 | + } | ||
| 84 | + .my_money{ | ||
| 85 | + position: absolute; | ||
| 86 | + top: 38rpx; | ||
| 87 | + left: 28rpx; | ||
| 88 | + display: flex; | ||
| 89 | + flex-direction: column; | ||
| 90 | + gap: 8rpx; | ||
| 91 | + font-size: 28rpx; | ||
| 92 | + line-height: 40rpx; | ||
| 93 | + color: #fff; | ||
| 94 | + .number{ | ||
| 95 | + font-size: 52rpx; | ||
| 96 | + font-weight: 700; | ||
| 97 | + line-height: 64rpx; | ||
| 98 | + margin-left: 4rpx; | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + .use{ | ||
| 102 | + position: absolute; | ||
| 103 | + top: 96rpx; | ||
| 104 | + left: 192rpx; | ||
| 105 | + width: 96rpx; | ||
| 106 | + height: 44rpx; | ||
| 107 | + background: #FFFFFF; | ||
| 108 | + border-radius: 40rpx; | ||
| 109 | + text-align: center; | ||
| 110 | + line-height: 44rpx; | ||
| 111 | + color: #FFA100; | ||
| 112 | + font-size: 24rpx; | ||
| 113 | + } | ||
| 114 | + .recharge{ | ||
| 115 | + position: absolute; | ||
| 116 | + top: 34rpx; | ||
| 117 | + right: 34rpx; | ||
| 118 | + width: 128rpx; | ||
| 119 | + height: 48rpx; | ||
| 120 | + background: rgba(255,255,255,0.4); | ||
| 121 | + border-radius: 40rpx; | ||
| 122 | + color: #fff; | ||
| 123 | + line-height: 48rpx; | ||
| 124 | + text-align: center; | ||
| 125 | + font-size: 24rpx; | ||
| 126 | + border: 2rpx solid #FFFFFF; | ||
| 127 | + } | ||
| 128 | + } | ||
| 129 | + .bill_list{ | ||
| 130 | + margin-top: 30rpx; | ||
| 131 | + } | ||
| 132 | +} | ||
| 133 | +</style> |
pages/operateSuccess/operateSuccess.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="edit_success"> | ||
| 3 | + <view class="header_logo"> | ||
| 4 | + <view class="logo_box"> | ||
| 5 | + <image class="success_logo" src="@/static/myImage/edit_success.png" mode="widthFix"></image> | ||
| 6 | + <text>充值成功</text> | ||
| 7 | + </view> | ||
| 8 | + </view> | ||
| 9 | + <u-cell-group :border="false"> | ||
| 10 | + <u-cell v-for="(item, index) in editInfo" :key="index" :title="item.title" :border="false" :value="item.content"></u-cell> | ||
| 11 | + </u-cell-group> | ||
| 12 | + | ||
| 13 | + <view class="footer"> | ||
| 14 | + <MyButton title="完成" /> | ||
| 15 | + </view> | ||
| 16 | + </view> | ||
| 17 | +</template> | ||
| 18 | + | ||
| 19 | +<script> | ||
| 20 | + import MyButton from '@/components/myButton.vue' | ||
| 21 | + export default { | ||
| 22 | + components: { MyButton }, | ||
| 23 | + data() { | ||
| 24 | + return { | ||
| 25 | + editInfo: [ | ||
| 26 | + { title: '充值金额', content: '¥1800' }, | ||
| 27 | + { title: '充值方式', content: '微信' } | ||
| 28 | + ] | ||
| 29 | + }; | ||
| 30 | + } | ||
| 31 | + } | ||
| 32 | +</script> | ||
| 33 | + | ||
| 34 | +<style lang="scss" scoped> | ||
| 35 | +.edit_success{ | ||
| 36 | + background-color: #fff; | ||
| 37 | + min-height: 100vh; | ||
| 38 | + .header_logo{ | ||
| 39 | + display: flex; | ||
| 40 | + align-items: center; | ||
| 41 | + flex-direction: column; | ||
| 42 | + justify-content: center; | ||
| 43 | + padding: 0 30rpx; | ||
| 44 | + margin-bottom: 30rpx; | ||
| 45 | + .logo_box{ | ||
| 46 | + display: flex; | ||
| 47 | + align-items: center; | ||
| 48 | + flex-direction: column; | ||
| 49 | + justify-content: center; | ||
| 50 | + border-bottom: 2rpx solid #E1E1E1; | ||
| 51 | + padding: 132rpx 0 36rpx 0; | ||
| 52 | + width: 100%; | ||
| 53 | + .success_logo{ | ||
| 54 | + width: 136rpx; | ||
| 55 | + height: 136rpx; | ||
| 56 | + margin-bottom: 36rpx; | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + } | ||
| 60 | + .footer{ | ||
| 61 | + padding: 0 30rpx; | ||
| 62 | + margin-top: 80rpx; | ||
| 63 | + } | ||
| 64 | +} | ||
| 65 | +</style> |
pages/orderEvaluate/orderEvaluate.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="container_box" style="padding-bottom: 200rpx;"> | ||
| 3 | + <!-- 球馆 --> | ||
| 4 | + <view class="evaluate_box"> | ||
| 5 | + <!-- 头部信息 --> | ||
| 6 | + <view class="header"> | ||
| 7 | + <view class="left_box"> | ||
| 8 | + <image class="arena_logo" src="@/static/images/home/bg-1.png" mode=""></image> | ||
| 9 | + </view> | ||
| 10 | + <view class="right_box"> | ||
| 11 | + <text class="title">彩虹体育馆</text> | ||
| 12 | + <text>订单编号:000026</text> | ||
| 13 | + <text>合计:¥200.15</text> | ||
| 14 | + </view> | ||
| 15 | + </view> | ||
| 16 | + <!-- 评分列表 --> | ||
| 17 | + <view class="evaluate_list"> | ||
| 18 | + <view v-for="(item, index) in rateList" :key="index" class="evaluate_item"> | ||
| 19 | + <view class="rate"> | ||
| 20 | + <text>{{ item.title }}</text> | ||
| 21 | + <u-rate :count="5" v-model="item.retaValue" activeColor="#FFA100" inactiveColor="#D8D8D8" ></u-rate> | ||
| 22 | + </view> | ||
| 23 | + <view class="number">{{ item.retaValue }} 分</view> | ||
| 24 | + </view> | ||
| 25 | + </view> | ||
| 26 | + </view> | ||
| 27 | + | ||
| 28 | + <!-- 评论 --> | ||
| 29 | + <view class="user_intro"> | ||
| 30 | + <view class="intro">退款原因:</view> | ||
| 31 | + <u--textarea v-model="introStr" :placeholder="defaultTip" placeholderClass height="188rpx" count ></u--textarea> | ||
| 32 | + </view> | ||
| 33 | + | ||
| 34 | + <view class="user_intro"> | ||
| 35 | + <view class="intro">上传图片:</view> | ||
| 36 | + <u-upload | ||
| 37 | + :fileList="fileList1" | ||
| 38 | + @afterRead="afterRead" | ||
| 39 | + @delete="deletePic" | ||
| 40 | + name="1" | ||
| 41 | + multiple | ||
| 42 | + :maxCount="10" | ||
| 43 | + /> | ||
| 44 | + </view> | ||
| 45 | + | ||
| 46 | + <view class="footer"> | ||
| 47 | + <view style="flex: 1;"> | ||
| 48 | + <MyButton title="取消" bgColor="#fff" color="#999999" :border="true" /> | ||
| 49 | + </view> | ||
| 50 | + <view style="flex: 1;"> | ||
| 51 | + <MyButton title="提交评论" /> | ||
| 52 | + </view> | ||
| 53 | + </view> | ||
| 54 | + </view> | ||
| 55 | +</template> | ||
| 56 | + | ||
| 57 | +<script> | ||
| 58 | + import MyButton from '@/components/myButton.vue' | ||
| 59 | + export default { | ||
| 60 | + components: { MyButton }, | ||
| 61 | + data() { | ||
| 62 | + return { | ||
| 63 | + introStr: '', | ||
| 64 | + fileList1: [], // 上传图片列表 | ||
| 65 | + defaultTip: '请在此写下您的评论', | ||
| 66 | + rateList: [ | ||
| 67 | + { title: '环境:', retaValue: 4 }, | ||
| 68 | + { title: '服务:', retaValue: 5 }, | ||
| 69 | + { title: '性价比:', retaValue: 3 } | ||
| 70 | + ] | ||
| 71 | + }; | ||
| 72 | + }, | ||
| 73 | + methods: { | ||
| 74 | + // 删除图片 | ||
| 75 | + deletePic(event) { | ||
| 76 | + this[`fileList${event.name}`].splice(event.index, 1) | ||
| 77 | + }, | ||
| 78 | + // 新增图片 | ||
| 79 | + async afterRead(event) { | ||
| 80 | + // 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式 | ||
| 81 | + let lists = [].concat(event.file) | ||
| 82 | + let fileListLen = this[`fileList${event.name}`].length | ||
| 83 | + lists.map((item) => { | ||
| 84 | + this[`fileList${event.name}`].push({ | ||
| 85 | + ...item, | ||
| 86 | + status: 'uploading', | ||
| 87 | + message: '上传中' | ||
| 88 | + }) | ||
| 89 | + }) | ||
| 90 | + for (let i = 0; i < lists.length; i++) { | ||
| 91 | + const result = await this.uploadFilePromise(lists[i].url) | ||
| 92 | + let item = this[`fileList${event.name}`][fileListLen] | ||
| 93 | + this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, { | ||
| 94 | + status: 'success', | ||
| 95 | + message: '', | ||
| 96 | + url: result | ||
| 97 | + })) | ||
| 98 | + fileListLen++ | ||
| 99 | + } | ||
| 100 | + }, | ||
| 101 | + uploadFilePromise(url) { | ||
| 102 | + return new Promise((resolve, reject) => { | ||
| 103 | + let a = uni.uploadFile({ | ||
| 104 | + url: 'http://192.168.2.21:7001/upload', // 仅为示例,非真实的接口地址 | ||
| 105 | + filePath: url, | ||
| 106 | + name: 'file', | ||
| 107 | + formData: { | ||
| 108 | + user: 'test' | ||
| 109 | + }, | ||
| 110 | + success: (res) => { | ||
| 111 | + setTimeout(() => { | ||
| 112 | + resolve(res.data.data) | ||
| 113 | + }, 1000) | ||
| 114 | + } | ||
| 115 | + }); | ||
| 116 | + }) | ||
| 117 | + } | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | +</script> | ||
| 121 | + | ||
| 122 | +<style lang="scss" scoped> | ||
| 123 | + // 球馆信息 | ||
| 124 | +.evaluate_box{ | ||
| 125 | + height: 440rpx; | ||
| 126 | + background: #FFFFFF; | ||
| 127 | + border-radius: 12rpx; | ||
| 128 | + box-sizing: border-box; | ||
| 129 | + padding: 30rpx; | ||
| 130 | + .header{ | ||
| 131 | + display: flex; | ||
| 132 | + align-items: center; | ||
| 133 | + padding-bottom: 30rpx; | ||
| 134 | + border-bottom: 2rpx solid #E1E1E1; | ||
| 135 | + .left_box{ | ||
| 136 | + width: 136rpx; | ||
| 137 | + height: 136rpx; | ||
| 138 | + margin-right: 20rpx; | ||
| 139 | + .arena_logo{ | ||
| 140 | + width: 136rpx; | ||
| 141 | + height: 136rpx; | ||
| 142 | + } | ||
| 143 | + } | ||
| 144 | + .right_box{ | ||
| 145 | + flex: 1; | ||
| 146 | + height: 100%; | ||
| 147 | + display: flex; | ||
| 148 | + flex-direction: column; | ||
| 149 | + gap: 12rpx; | ||
| 150 | + font-size: 24rpx; | ||
| 151 | + color: #666; | ||
| 152 | + line-height: 32rpx; | ||
| 153 | + .title{ | ||
| 154 | + color: #333; | ||
| 155 | + font-size: 28rpx; | ||
| 156 | + line-height: 36rpx; | ||
| 157 | + } | ||
| 158 | + } | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + .evaluate_list{ | ||
| 162 | + display: flex; | ||
| 163 | + flex-direction: column; | ||
| 164 | + padding-top: 26rpx; | ||
| 165 | + gap: 36rpx; | ||
| 166 | + .evaluate_item{ | ||
| 167 | + display: flex; | ||
| 168 | + align-items: center; | ||
| 169 | + justify-content: space-between; | ||
| 170 | + font-size: 28rpx; | ||
| 171 | + color: #333; | ||
| 172 | + line-height: 36rpx; | ||
| 173 | + .rate{ | ||
| 174 | + display: flex; | ||
| 175 | + align-items: center; | ||
| 176 | + } | ||
| 177 | + } | ||
| 178 | + } | ||
| 179 | + | ||
| 180 | +} | ||
| 181 | + | ||
| 182 | +// 评论 | ||
| 183 | +.user_intro{ | ||
| 184 | + margin-top: 24rpx; | ||
| 185 | + padding: 28rpx; | ||
| 186 | + background: #FFFFFF; | ||
| 187 | + border-radius: 12rpx; | ||
| 188 | + .intro{ | ||
| 189 | + font-size: 26rpx; | ||
| 190 | + color: #333; | ||
| 191 | + margin-bottom: 24rpx; | ||
| 192 | + line-height: 36rpx; | ||
| 193 | + } | ||
| 194 | +} | ||
| 195 | + | ||
| 196 | +.footer{ | ||
| 197 | + position: fixed; | ||
| 198 | + bottom: 0; | ||
| 199 | + left: 0; | ||
| 200 | + box-sizing: border-box; | ||
| 201 | + display: flex; | ||
| 202 | + align-items: center; | ||
| 203 | + background-color: #fff; | ||
| 204 | + justify-content: space-between; | ||
| 205 | + gap: 34rpx; | ||
| 206 | + width: 100%; | ||
| 207 | + padding: 16rpx 30rpx; | ||
| 208 | +} | ||
| 209 | +</style> |
pages/paysuccess/paysuccess.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="pay_success"> | ||
| 3 | + <view class="header_box"></view> | ||
| 4 | + | ||
| 5 | + <view class="content_box"> | ||
| 6 | + <view class="dataCard"> | ||
| 7 | + <!-- 成功logo --> | ||
| 8 | + <view class="success_log"> | ||
| 9 | + <image class="logo" src="@/static/images/arenaDetail/pay_success.png" mode="widthFix"></image> | ||
| 10 | + <text>支付成功!</text> | ||
| 11 | + </view> | ||
| 12 | + <!-- 订单信息 --> | ||
| 13 | + <view class="orderInfo"> | ||
| 14 | + <view class="order_line" v-for="(item, index) in lineInfo" :key="index"> | ||
| 15 | + <text class="left_text">{{ item.title }}</text> | ||
| 16 | + <view class="right_text">{{ item.content }}</view> | ||
| 17 | + </view> | ||
| 18 | + </view> | ||
| 19 | + | ||
| 20 | + <!-- 总金额 --> | ||
| 21 | + <view v-if="!isVip" class="total_money"> | ||
| 22 | + <text>总支付金额</text> | ||
| 23 | + <text style="color: #FFA100;font-weight: 700;">¥ 234.83</text> | ||
| 24 | + </view> | ||
| 25 | + <!-- 周卡支付 --> | ||
| 26 | + <view v-else class="total_money"> | ||
| 27 | + <text>周卡剩余</text> | ||
| 28 | + <text style="color: #FFA100;">5天</text> | ||
| 29 | + </view> | ||
| 30 | + <view v-if="!isVip" class="avg_money">人均费用:¥ 20/人</view> | ||
| 31 | + | ||
| 32 | + </view> | ||
| 33 | + </view> | ||
| 34 | + | ||
| 35 | + <view class="btn_list"> | ||
| 36 | + <MyButton title="查看订单" @comfirn="goRouter" /> | ||
| 37 | + <MyButton title="返回首页" :border="true" bgColor="#fff" color="#FFA100" @comfirn="goRouter" /> | ||
| 38 | + </view> | ||
| 39 | + | ||
| 40 | + </view> | ||
| 41 | +</template> | ||
| 42 | + | ||
| 43 | +<script> | ||
| 44 | + import MyButton from '@/components/myButton.vue' | ||
| 45 | + export default { | ||
| 46 | + components: { MyButton }, | ||
| 47 | + data() { | ||
| 48 | + return { | ||
| 49 | + isVip: false, | ||
| 50 | + lineInfo: [ | ||
| 51 | + { title: '订单流水号:', content: '南宁站 2022-12-26 16:23:45 000026' }, | ||
| 52 | + { title: '参与人数:', content: '8人' }, | ||
| 53 | + { title: '场馆:', content: '彩虹体育馆' }, | ||
| 54 | + { title: '场地:', content: '羽毛球1号场' }, | ||
| 55 | + { title: '预约时间段:', content: '2022-12-26(周一) 15:00-16:00' } | ||
| 56 | + ] | ||
| 57 | + } | ||
| 58 | + }, | ||
| 59 | + methods: { | ||
| 60 | + goRouter(){ | ||
| 61 | + uni.switchTab({ | ||
| 62 | + url: '/pages/home/home' | ||
| 63 | + }) | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | +</script> | ||
| 68 | + | ||
| 69 | +<style lang="scss"> | ||
| 70 | +.pay_success{ | ||
| 71 | + background-color: #F6F6F6; | ||
| 72 | + box-sizing: border-box; | ||
| 73 | + padding-bottom: 60rpx; | ||
| 74 | + .header_box{ | ||
| 75 | + width: 100%; | ||
| 76 | + height: 208rpx; | ||
| 77 | + background: linear-gradient( 270deg, #FCD723 0%, #FFA100 100%); | ||
| 78 | + } | ||
| 79 | + .content_box{ | ||
| 80 | + margin-top: -140rpx; | ||
| 81 | + padding: 0 30rpx; | ||
| 82 | + .dataCard{ | ||
| 83 | + position: relative; | ||
| 84 | + padding: 32rpx; | ||
| 85 | + background-color: #fff; | ||
| 86 | + background-blend-mode: soft-light; | ||
| 87 | + background-size: cover; | ||
| 88 | + background-position: center; | ||
| 89 | + // 成功logo | ||
| 90 | + .success_log{ | ||
| 91 | + display: flex; | ||
| 92 | + flex-direction: column; | ||
| 93 | + align-items: center; | ||
| 94 | + color: #333; | ||
| 95 | + font-size: 36rpx; | ||
| 96 | + font-weight: 600; | ||
| 97 | + border-bottom: 2rpx dashed rgba(225,225,225,0.7); | ||
| 98 | + padding-bottom: 36rpx; | ||
| 99 | + .logo{ | ||
| 100 | + width: 122rpx; | ||
| 101 | + height: 122rpx; | ||
| 102 | + margin-bottom: 20rpx; | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + // 订单信息 | ||
| 106 | + .orderInfo{ | ||
| 107 | + height: 468rpx; | ||
| 108 | + background: #FFFFFF; | ||
| 109 | + border-radius: 12rpx; | ||
| 110 | + box-sizing: border-box; | ||
| 111 | + border-bottom: 2rpx dashed rgba(225,225,225,0.7); | ||
| 112 | + .order_line{ | ||
| 113 | + display: flex; | ||
| 114 | + align-items: center; | ||
| 115 | + height: 90rpx; | ||
| 116 | + font-size: 26rpx; | ||
| 117 | + .left_text{ | ||
| 118 | + color: #666; | ||
| 119 | + margin-right: 6rpx; | ||
| 120 | + } | ||
| 121 | + .right_text{ | ||
| 122 | + color: #333; | ||
| 123 | + } | ||
| 124 | + } | ||
| 125 | + } | ||
| 126 | + | ||
| 127 | + // 总金额 | ||
| 128 | + .total_money{ | ||
| 129 | + display: flex; | ||
| 130 | + align-items: center; | ||
| 131 | + justify-content: space-between; | ||
| 132 | + font-size: 32rpx; | ||
| 133 | + line-height: 36rpx; | ||
| 134 | + color: #333; | ||
| 135 | + margin: 32rpx 0; | ||
| 136 | + } | ||
| 137 | + // 均额 | ||
| 138 | + .avg_money{ | ||
| 139 | + text-align: right; | ||
| 140 | + color: #666; | ||
| 141 | + font-size: 24rpx; | ||
| 142 | + line-height: 36rpx; | ||
| 143 | + } | ||
| 144 | + | ||
| 145 | + &::before{ | ||
| 146 | + content: ''; | ||
| 147 | + position: absolute; | ||
| 148 | + top: -20rpx; | ||
| 149 | + left: 0; | ||
| 150 | + width: 100%; | ||
| 151 | + height: 40rpx; | ||
| 152 | + display: block; | ||
| 153 | + background: linear-gradient(-45deg,transparent 33.33%,#fff 33.33%,#fff 66.666%,transparent 66.666%), | ||
| 154 | + linear-gradient(45deg,transparent 33.33%,#fff 33.33%,#fff 66.666%,transparent 66.666%); | ||
| 155 | + background-size: 28rpx 44rpx; | ||
| 156 | + } | ||
| 157 | + &::after{ | ||
| 158 | + content: ''; | ||
| 159 | + position: absolute; | ||
| 160 | + bottom: -20rpx; | ||
| 161 | + left: 0; | ||
| 162 | + width: 100%; | ||
| 163 | + height: 40rpx; | ||
| 164 | + display: block; | ||
| 165 | + background: linear-gradient(-45deg,transparent 33.33%,#fff 33.33%,#fff 66.666%,transparent 66.666%), | ||
| 166 | + linear-gradient(45deg,transparent 33.33%,#fff 33.33%,#fff 66.666%,transparent 66.666%); | ||
| 167 | + background-size: 28rpx 44rpx; | ||
| 168 | + transform: rotateX(180deg); | ||
| 169 | + | ||
| 170 | + } | ||
| 171 | + } | ||
| 172 | + } | ||
| 173 | + | ||
| 174 | + .btn_list{ | ||
| 175 | + display: flex; | ||
| 176 | + flex-direction: column; | ||
| 177 | + gap: 32rpx; | ||
| 178 | + padding: 0 30rpx; | ||
| 179 | + margin-top: 80rpx; | ||
| 180 | + } | ||
| 181 | + | ||
| 182 | +} | ||
| 183 | +</style> |
pages/register/register.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <view class="login-container"> | ||
| 3 | + <view class="login-title">用户注册</view> | ||
| 4 | + <u-form :model="regForm" ref="regForm"> | ||
| 5 | + <u-form-item prop="username"> | ||
| 6 | + <u-input v-model="regForm.username" placeholder="请输入用户名" /> | ||
| 7 | + </u-form-item> | ||
| 8 | + <u-form-item prop="password"> | ||
| 9 | + <u-input v-model="regForm.password" type="password" placeholder="请输入密码" /> | ||
| 10 | + </u-form-item> | ||
| 11 | + <u-form-item prop="repassword"> | ||
| 12 | + <u-input v-model="regForm.repassword" type="password" placeholder="请再次输入密码" /> | ||
| 13 | + </u-form-item> | ||
| 14 | + <u-form-item> | ||
| 15 | + <u-checkbox-group> | ||
| 16 | + <u-checkbox v-model="checked" shape="circle" active-color="#FFA100"></u-checkbox> | ||
| 17 | + <text class="agreement">我已阅读并同意《用户协议》及《隐私协议》</text> | ||
| 18 | + </u-checkbox-group> | ||
| 19 | + </u-form-item> | ||
| 20 | + </u-form> | ||
| 21 | + <view class="btn">注册</view> | ||
| 22 | + <view class="tip"> | ||
| 23 | + 已有账号,<text style="color: #FFA100;" @click="goLog">立即登录</text> | ||
| 24 | + </view> | ||
| 25 | + </view> | ||
| 26 | +</template> | ||
| 27 | + | ||
| 28 | +<script> | ||
| 29 | + export default { | ||
| 30 | + data() { | ||
| 31 | + return { | ||
| 32 | + regForm: { username: '', password: '', repassword: ''}, | ||
| 33 | + checked: false, | ||
| 34 | + regRules: { | ||
| 35 | + username: [ | ||
| 36 | + { required: true, message: '请填写用户名', trigger: ['blur']}, | ||
| 37 | + { pattern: /^[0-9a-zA-Z]*$/g, transform(value) { return String(value) }, message: '只能包含字母或数字', trigger: 'blur' }, | ||
| 38 | + { min: 6, max: 8, message: '长度在6-8个字符之间', trigger: 'change' } | ||
| 39 | + ], | ||
| 40 | + password: [ | ||
| 41 | + { required: true, message: '请填写密码', trigger: ['blur']}, | ||
| 42 | + { pattern: /^(?=.*[A-Z])[a-zA-Z0-9]+$/, transform(value) { return String(value) }, message: '字母数字组成且必须包含大写字母', trigger: ['change', 'blur'] }, | ||
| 43 | + { min: 6, max: 8, message: '长度在6-16个字符之间', trigger: ['change'] }, | ||
| 44 | + ], | ||
| 45 | + repassword: [ | ||
| 46 | + { required: true, message: '请填写密码', trigger: ['blur']}, | ||
| 47 | + { pattern: /^(?=.*[A-Z])[a-zA-Z0-9]+$/, transform(value) { return String(value) }, message: '字母数字组成且必须包含大写字母', trigger: ['change', 'blur'] }, | ||
| 48 | + { min: 6, max: 8, message: '长度在6-16个字符之间', trigger: ['change'] }, | ||
| 49 | + { | ||
| 50 | + validator: (rule, value, callback) => { | ||
| 51 | + value !== this.regForm.password ? callback(new Error('两次密码输入不一致')) : callback() | ||
| 52 | + }, | ||
| 53 | + trigger: ['change'] | ||
| 54 | + } | ||
| 55 | + ] | ||
| 56 | + } | ||
| 57 | + } | ||
| 58 | + }, | ||
| 59 | + // 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕 | ||
| 60 | + onReady() { | ||
| 61 | + this.$refs.regForm.setRules(this.regRules); | ||
| 62 | + }, | ||
| 63 | + methods: { | ||
| 64 | + // 前往登录 | ||
| 65 | + goLog() { | ||
| 66 | + uni.redirectTo({ | ||
| 67 | + url: '/pages/login/index' | ||
| 68 | + }) | ||
| 69 | + }, | ||
| 70 | + submit() { | ||
| 71 | + this.$refs.regForm.validate().then(valid => { | ||
| 72 | + if (valid) { | ||
| 73 | + console.log('验证通过'); | ||
| 74 | + } else { | ||
| 75 | + console.log('验证失败'); | ||
| 76 | + } | ||
| 77 | + }) | ||
| 78 | + } | ||
| 79 | + } | ||
| 80 | + } | ||
| 81 | +</script> | ||
| 82 | + | ||
| 83 | +<style scoped lang="scss"> | ||
| 84 | + .login-container{ | ||
| 85 | + position: relative; | ||
| 86 | + padding: 0 30rpx; | ||
| 87 | + box-sizing: border-box; | ||
| 88 | + height: calc(100vh - 88rpx); | ||
| 89 | + max-height: 100vh; | ||
| 90 | + .login-title{ | ||
| 91 | + color: #3d3d3d; | ||
| 92 | + font-size: 56rpx; | ||
| 93 | + margin: 40rpx 0 60rpx 0; | ||
| 94 | + line-height: 74rpx; | ||
| 95 | + font-weight: 500; | ||
| 96 | + } | ||
| 97 | + .agreement{ | ||
| 98 | + color: #333; | ||
| 99 | + line-height: 38rpx; | ||
| 100 | + font-size: 28rpx; | ||
| 101 | + } | ||
| 102 | + .btn{ | ||
| 103 | + width: 100%; | ||
| 104 | + height: 88rpx; | ||
| 105 | + text-align: center; | ||
| 106 | + line-height: 88rpx; | ||
| 107 | + font-size: 32rpx; | ||
| 108 | + background-color: #FFA100; | ||
| 109 | + border-radius: 12rpx; | ||
| 110 | + color: #fff; | ||
| 111 | + margin-top: 30rpx; | ||
| 112 | + } | ||
| 113 | + .tip{ | ||
| 114 | + position: absolute; | ||
| 115 | + bottom: 44rpx; | ||
| 116 | + left: 50%; | ||
| 117 | + font-size: 36rpx; | ||
| 118 | + color: #333; | ||
| 119 | + transform: translateX(-50%); | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | +</style> |
-
请 注册 或 登录 后发表评论