作者 xiaoqiu

首次提交

正在显示 55 个修改的文件 包含 4801 行增加0 行删除

要显示太多修改。

为保证性能只显示 55 of 55+ 个文件。

不能预览此文件类型
  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 +}
  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>
  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} })
  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 +}
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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
  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 +}
  1 +{
  2 + "name": "arena_app",
  3 + "version": "1.0.0",
  4 + "lockfileVersion": 2,
  5 + "requires": true,
  6 + "packages": {}
  7 +}
  1 +{
  2 + "name": "arena_app",
  3 + "version": "1.0.0",
  4 + "lockfileVersion": 2,
  5 + "requires": true,
  6 + "packages": {
  7 + "": {
  8 + "name": "arena_app",
  9 + "version": "1.0.0",
  10 + "license": "ISC"
  11 + }
  12 + }
  13 +}
  1 +{
  2 + "name": "arena_app",
  3 + "version": "1.0.0",
  4 + "description": "",
  5 + "main": "main.js",
  6 + "scripts": {
  7 + "test": "echo \"Error: no test specified\" && exit 1"
  8 + },
  9 + "keywords": [],
  10 + "author": "",
  11 + "license": "ISC"
  12 +}
  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 +}
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>
  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>