guhongwei 3 lat temu
rodzic
commit
035a6ca1d7

+ 1 - 0
app.json

@@ -5,6 +5,7 @@
         "pages/register/index",
         "pages/home/index",
         "pages/match/info",
+        "pages/addmatch/index",
         "pages/search/index",
         "pages/matchadmin/index",
         "pages/matchadmin/edit",

+ 188 - 0
pages/addmatch/index.js

@@ -0,0 +1,188 @@
+// pages/login/login.js
+import WxValidate from '../../utils/wxValidate';
+import { format, match_status } from '../../utils/dict';
+const app = getApp()
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        frameStyle: { useTop: true, name: '比赛信息管理', leftArrow: true, useBar: false },
+        // 主体高度
+        infoHeight: '',
+        form: {},
+        // 赛制
+        formatList: format,
+        // 状态
+        statusList: match_status,
+        // 赛制
+        format: [],
+        id: ''
+    },
+    initValidate() {
+        const rules = { name: { required: true }, start_time: { required: true }, end_time: { required: true }, address: { required: true } }
+        // 验证字段的提示信息,若不传则调用默认的信息
+        const messages = { name: { required: '请输入比赛名称' }, start_time: { required: '请选择开始时间' }, end_time: { required: '请选择结束时间' }, address: { required: '请输入比赛地点' } };
+        this.WxValidate = new WxValidate(rules, messages)
+    },
+    back: function () {
+        wx.navigateBack({ delta: 1 })
+    },
+    // 选择比赛开始时间
+    dateChange: function (e) {
+        const that = this;
+        const { type } = e.currentTarget.dataset;
+        const { value } = e.detail;
+        if (type == 'start') that.setData({ 'form.start_time': value })
+        else if (type == 'end') that.setData({ 'form.end_time': value })
+    },
+    // 选择赛制
+    formatChange: function (e) {
+        const that = this;
+        const format = that.data.format;
+        const { value } = e.detail;
+        let list = [...format];
+        let data = that.data.formatList[value];
+        if (data) {
+            if (format && format.length > 0) {
+                let is_data = format.find((i) => i.label == data.label);
+                if (!is_data) list.push(data)
+            } else list.push(data)
+            that.setData({ format: list })
+        }
+    },
+    // 删除赛制
+    toDel: function (e) {
+        const that = this;
+        let list = that.data.format;
+        const { index } = e.currentTarget.dataset;
+        list.splice(index, 1);
+        that.setData({ format: list });
+    },
+    // 选择状态
+    statusChange: function (e) {
+        const that = this;
+        const { value } = e.detail;
+        that.setData({ 'form.status': value })
+    },
+    // 提交比赛
+    onSubmit: async function (e) {
+        const that = this;
+        const params = e.detail.value;
+        params.match_time = params.start_time + '-' + params.end_time;
+        const format = that.data.format;
+        params.format = format;
+        const id = that.data.id;
+        if (!this.WxValidate.checkForm(params)) {
+            const error = this.WxValidate.errorList[0];
+            wx.showToast({ title: `${error.msg}`, icon: 'error', duration: 2000 })
+            return false
+        } else {
+            if (params.format && params.format.length > 0) {
+                let arr;
+                if (id) arr = await app.$post(`/courtAdmin/api/match/${id}`, params);
+                else arr = await app.$post(`/courtAdmin/api/match`, params);
+                if (arr.errcode == '0') { wx.showToast({ title: `维护比赛完成`, icon: 'success', duration: 2000 }); that.back(); }
+                else wx.showToast({ title: `${error.msg}`, icon: 'error', duration: 2000 })
+            } else wx.showToast({ title: `请选择赛制`, icon: 'error', duration: 2000 })
+        }
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+        const that = this;
+        if (options && options.id) that.setData({ id: options.id })
+        //验证规则函数
+        this.initValidate();
+        // 计算高度
+        this.searchHeight();
+        // 监听用户是否登录
+        this.watchLogin();
+    },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        let id = that.data.id;
+        wx.getStorage({
+            key: 'token',
+            success: async res => {
+                if (id) {
+                    const arr = await app.$get(`/courtAdmin/api/match/${id}`);
+                    if (arr.errcode == '0') {
+                        // 处理时间
+                        let data = arr.data;
+                        data.start_time = data.match_time.substring(0, 10);
+                        data.end_time = data.match_time.substring(11, data.match_time.length);
+                        that.setData({ format: data.format });
+                        that.setData({ form: data });
+                    }
+                }
+            },
+            fail: res => {
+                wx.redirectTo({ url: '/pages/index/index', })
+            }
+        })
+    },
+    // 计算高度
+    searchHeight: function () {
+        let frameStyle = this.data.frameStyle;
+        let client = app.globalData.client;
+        let infoHeight = client.windowHeight;
+        // 是否去掉状态栏
+        if (frameStyle.useTop) infoHeight = infoHeight - (client.statusBarHeight + client.getMenu.height + (client.getMenu.top - client.statusBarHeight) * 2);
+        // 是否减去底部菜单
+        if (frameStyle.useBar) infoHeight = infoHeight - 50;
+        if (infoHeight) this.setData({ infoHeight: infoHeight })
+    },
+
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

+ 6 - 0
pages/addmatch/index.json

@@ -0,0 +1,6 @@
+{
+    "component": true,
+    "usingComponents": {
+      "mobile-main": "/commpents/mobile-frame/mobile-main"
+    }
+  }

+ 66 - 0
pages/addmatch/index.wxml

@@ -0,0 +1,66 @@
+<mobile-main frameStyle="{{frameStyle}}" bind:back="back">
+    <view slot="info" class="main" style="height:{{infoHeight}}px;">
+        <view class="one">
+            <view class="one">
+                <form bindsubmit="onSubmit">
+                    <view class="content">
+                        <view class="label textOver">名称</view>
+                        <view class="value">
+                            <input type="text" name="name" value="{{form.name}}" placeholder="请输入比赛名称" />
+                        </view>
+                    </view>
+                    <view class="content">
+                        <view class="label textOver">开始时间</view>
+                        <view class="value">
+                            <picker mode="date" value="{{form.start_time}}" name="start_time" bindchange="dateChange" data-type="start">
+                                <view class="picker">{{form.start_time||'选择比赛开始时间'}}</view>
+                            </picker>
+                        </view>
+                    </view>
+                    <view class="content">
+                        <view class="label textOver">结束时间</view>
+                        <view class="value">
+                            <picker mode="date" value="{{form.end_time}}" name="end_time" bindchange="dateChange" data-type="end">
+                                <view class="picker">{{form.end_time||'选择比赛结束时间'}}</view>
+                            </picker>
+                        </view>
+                    </view>
+                    <view class="content">
+                        <view class="label textOver">地点</view>
+                        <view class="value">
+                            <input type="text" name="address" value="{{form.address}}" placeholder="请输入比赛地点" />
+                        </view>
+                    </view>
+                    <view class="content">
+                        <view class="label textOver">选择赛制</view>
+                        <view class="value">
+                            <picker class="picker" mode="selector" bindchange="formatChange" range-key="value" range="{{formatList}}">
+                                <view class="input">选择赛制</view>
+                            </picker>
+                        </view>
+                    </view>
+                    <view class="content">
+                        <view class="format" wx:for="{{format}}" wx:key="item">
+                            <view class="label textOver">赛制</view>
+                            <view class="value">
+                                <text>{{item.value}}</text>
+                                <text class="icon iconfont icon-jianhao" bindtap="toDel" data-index="{{index}}"></text>
+                            </view>
+                        </view>
+                    </view>
+                    <view class="content" wx:if="{{form._id}}">
+                        <view class="label textOver">状态</view>
+                        <view class="value">
+                            <picker mode="selector" bindchange="statusChange" name="status" value="{{form.status}}" range-key="value" range="{{statusList}}">
+                                <view class="input">{{statusList[form.status].value}}</view>
+                            </picker>
+                        </view>
+                    </view>
+                    <view class="btn">
+                        <button type="primary" size="mini" formType="submit">提交保存</button>
+                    </view>
+                </form>
+            </view>
+        </view>
+    </view>
+</mobile-main>

+ 66 - 0
pages/addmatch/index.wxss

@@ -0,0 +1,66 @@
+.main {
+    position: relative;
+    width: 100%;
+    background-color: #ffffff;
+}
+
+.main .one {
+    float: left;
+    width: 95%;
+    padding: 0 10px;
+}
+
+.main .one .content {
+    float: left;
+    width: 100%;
+    border-bottom: 1px solid #ccc;
+    padding: 10px 0;
+}
+
+.main .one .content .label {
+    float: left;
+    width: 20%;
+    font-size: 14px;
+}
+
+.main .one .content .value {
+    float: left;
+    width: 80%;
+    text-align: right;
+    font-size: 14px;
+}
+
+.main .one .content .value .input {
+    color: #868686;
+}
+
+.main .one .content .value .picker {
+    color: #868686;
+}
+
+.main .one .content .value .formbtn {
+    padding: 0 10px;
+    font-size: 12px;
+}
+
+.main .one .content .value .icon {
+    margin: 0 0 0 10px;
+}
+
+.main .one .content .format {
+    float: left;
+    width: 100%;
+    padding: 5px 0;
+    border-bottom: 1px dashed #f1f1f1;
+}
+
+.main .one .btn {
+    float: left;
+    width: 100%;
+    text-align: center;
+    margin: 10px 0 0 0;
+}
+
+.main .one .btn button {
+    width: 80%;
+}

+ 3 - 3
pages/administration/index.wxml

@@ -44,7 +44,7 @@
                   <text>{{item.name}}</text>
                   <text class="color{{item.status}}">{{item.status=='0'?'未开始':item.status=='1'?'报名中':item.status=='2'?'待比赛':item.status=='3'?'进行中':'已结束'}}</text>
                 </view>
-                <view class="list_2 textOver">{{item.single_time}}</view>
+                <view class="list_2 textOver">{{item.match_time}}</view>
                 <view class="list_3 textOver">{{item.address}}</view>
               </view>
             </scroll-view>
@@ -56,7 +56,7 @@
                   <text>{{item.name}}</text>
                   <text class="color{{item.status}}">{{item.status=='0'?'未开始':item.status=='1'?'报名中':item.status=='2'?'待比赛':item.status=='3'?'进行中':'已结束'}}</text>
                 </view>
-                <view class="list_2 textOver">{{item.single_time}}</view>
+                <view class="list_2 textOver">{{item.match_time}}</view>
                 <view class="list_3 textOver">{{item.address}}</view>
               </view>
             </scroll-view>
@@ -68,7 +68,7 @@
                   <text>{{item.name}}</text>
                   <text class="color{{item.status}}">{{item.status=='0'?'未开始':item.status=='1'?'报名中':item.status=='2'?'待比赛':item.status=='3'?'进行中':'已结束'}}</text>
                 </view>
-                <view class="list_2 textOver">{{item.single_time}}</view>
+                <view class="list_2 textOver">{{item.match_time}}</view>
                 <view class="list_3 textOver">{{item.address}}</view>
               </view>
             </scroll-view>

+ 1 - 1
pages/home/index.wxml

@@ -9,7 +9,7 @@
           <text>{{item.name}}</text>
           <text class="color{{item.status}}">{{item.status=='0'?'未开始':item.status=='1'?'报名中':item.status=='2'?'待比赛':item.status=='3'?'进行中':'已结束'}}</text>
         </view>
-        <view class="list_2 textOver">{{item.single_time}}</view>
+        <view class="list_2 textOver">{{item.match_time}}</view>
         <view class="list_3 textOver">{{item.address}}</view>
         <!-- <view>
           <view wx:for="{{item.matchList}}" wx:key="tag">

+ 6 - 1
pages/matchadmin/index.js

@@ -15,7 +15,12 @@ Page({
     back: function () {
         wx.navigateBack({ url: '/pages/me/index' })
     },
-    // 修改,编排
+    // 修改,
+    toEdit: function (e) {
+        let { route, id } = e.currentTarget.dataset;
+        wx.navigateTo({ url: `/pages/${route}/index?id=${id}` })
+    },
+    // 编排
     toCommon: function (e) {
         let { route, id } = e.currentTarget.dataset;
         wx.navigateTo({ url: `/pages/matchadmin/${route}?id=${id}` })

+ 4 - 13
pages/matchadmin/index.wxml

@@ -4,21 +4,12 @@
             <view class="list" wx:for="{{list}}" wx:key="item">
                 <view class="name textOver">{{item.name}}</view>
                 <view class="other">
-                    <view class="otherInfo">
-                        <text>时间:</text>
-                        <text>{{item.single_time}}</text>
-                    </view>
-                    <view class="otherInfo">
-                        <text>地点:</text>
-                        <text>{{item.address}}</text>
-                    </view>
-                    <view class="otherInfo">
-                        <text>状态:</text>
-                        <text>{{item.status=='0'?'未开始':item.status=='1'?'报名中':item.status=='2'?'待比赛':item.status=='3'?'进行中':'已结束'}}</text>
-                    </view>
+                    <view class="otherInfo"><text>时间:</text><text>{{item.match_time}}</text></view>
+                    <view class="otherInfo"><text>地点:</text><text>{{item.address}}</text></view>
+                    <view class="otherInfo"><text>状态:</text><text>{{item.status=='0'?'未开始':item.status=='1'?'报名中':item.status=='2'?'待比赛':item.status=='3'?'进行中':'已结束'}}</text></view>
                 </view>
                 <view class="btn" wx:if="{{item.status=='0'||item.status=='1'||item.status=='2'}}">
-                    <button type="default" size="mini" bindtap="toCommon" data-id="{{item._id}}" data-route="edit">修改</button>
+                    <button type="default" size="mini" bindtap="toEdit" data-id="{{item._id}}" data-route="addmatch">修改</button>
                     <button type="warn" size="mini" bindtap="toCommon" data-id="{{item._id}}" data-route="layout">编排</button>
                 </view>
             </view>

+ 2 - 2
pages/search/index.wxml

@@ -17,7 +17,7 @@
                 <text>{{item.name}}</text>
                 <text class="color{{item.status}}">{{item.status=='0'?'未开始':item.status=='1'?'报名中':item.status=='2'?'待比赛':item.status=='3'?'进行中':'已结束'}}</text>
               </view>
-              <view class="list_2 textOver">{{item.single_time}}</view>
+              <view class="list_2 textOver">{{item.match_time}}</view>
               <view class="list_3 textOver">{{item.address}}</view>
             </view>
           </scroll-view>
@@ -29,7 +29,7 @@
                 <text>{{item.name}}</text>
                 <text class="color{{item.status}}">{{item.status=='0'?'未开始':item.status=='1'?'报名中':item.status=='2'?'待比赛':item.status=='3'?'进行中':'已结束'}}</text>
               </view>
-              <view class="list_2 textOver">{{item.single_time}}</view>
+              <view class="list_2 textOver">{{item.match_time}}</view>
               <view class="list_3 textOver">{{item.address}}</view>
             </view>
           </scroll-view>

+ 5 - 1
utils/dict.js

@@ -19,4 +19,8 @@ export const btn = [
     { title: '退出登录', icon: 'icon-tuichudenglu', route: '', type: '0|1|2', method: 'signout' },
 ]
 // 性别
-export const gender = ['男', '女', '未知']
+export const gender = ['男', '女', '未知'];
+// 比赛管理-赛制
+export const format = [{ label: '1', value: '单打' }, { label: '2', value: '双打' }, { label: '3', value: '团体' }]
+// 比赛管理-比赛状态
+export const match_status = [{ label: '0', value: '未开始' }, { label: '1', value: '报名中' }, { label: '2', value: '待比赛' }, { label: '3', value: '进行中' }, { label: '4', value: '已结束' }]