Jelajahi Sumber

修改管理员赛制信息

zs 2 tahun lalu
induk
melakukan
48c21814fc

+ 115 - 2
pages/matchadmin/layoutdetail.js

@@ -10,16 +10,129 @@ Page({
         frameStyle: { useTop: true, name: '维护赛程信息', leftArrow: true, useBar: false },
         // 主体高度
         infoHeight: '',
+        user: {},
+        form: {},
+        // 红方团队
+        redTeam: {},
+        // 蓝方团队
+        blueTeam: {},
+        id: '',
+        // 参赛团队成员列表
+        membersList: [],
+        // 弹框
+        dialog: { title: '成员列表', show: false, type: '1' },
+        teamType: ''
+    },
+    initValidate() {
+        const rules = { match_name: { required: true } }
+        // 验证字段的提示信息,若不传则调用默认的信息
+        const messages = { match_name: { required: '请输入比赛名称' } };
+        this.WxValidate = new WxValidate(rules, messages)
     },
     back: function () {
-        wx.navigateBack({ url: '/pages/matchadmin/layout' })
+        wx.navigateBack({ url: '/pages/matchteam/layout' })
+    },
+    // 添加成员
+    memAdd: async function (e) {
+        const that = this;
+        const { type } = e.currentTarget.dataset;
+        const data = that.data.form;
+        const red = that.data.redTeam;
+        const blue = that.data.blueTeam;
+        let arr;
+        arr = await app.$get(`/courtAdmin/api/matchteam`, { match_id: data.match_id, team_id: type == 'red' ? red._id : blue._id });
+        if (arr.errcode == '0') {
+            that.setData({ teamType: type });
+            that.setData({ membersList: arr.data[0].members });
+            that.setData({ dialog: { title: '成员列表', show: true, type: '1' } })
+        }
+    },
+    // 选择成员
+    onMemchange: function (e) {
+        const that = this;
+        let data = e.detail.value;
+        let user = that.data.membersList;
+        const type = that.data.teamType;
+        let members = [];
+        for (const val of data) {
+            let arr = user.find((i) => i.user_id == val);
+            if (arr) members.push(arr)
+        }
+        if (type == 'red') that.setData({ 'form.red_members': members })
+        else if (type == 'blue') that.setData({ 'form.blue_members': members })
+    },
+    // 删除成员
+    memDel: function (e) {
+        const that = this;
+        const { type, user_id } = e.currentTarget.dataset;
+        const data = that.data.form;
+        if (type == 'red') {
+            let red_members = data.red_members.filter((i) => i.user_id != user_id)
+            that.setData({ 'form.red_members': red_members })
+        } else if (type == 'blue') {
+            let blue_members = data.blue_members.filter((i) => i.user_id != user_id)
+            that.setData({ 'form.blue_members': blue_members })
+        }
+    },
+    // 提交保存
+    onSubmit: async function (e) {
+        const that = this;
+        const params = e.detail.value;
+        const data = that.data.form;
+        if (!this.WxValidate.checkForm(params)) {
+            const error = this.WxValidate.errorList[0];
+            wx.showToast({ title: `${error.msg}`, icon: 'error', duration: 2000 })
+            return false
+        } else {
+            params.red_members = data.red_members;
+            params.blue_members = data.blue_members;
+            const arr = await app.$post(`/courtAdmin/api/schedule/${data._id}`, params);
+            if (arr.errcode == '0') { wx.showToast({ title: `维护信息完成`, icon: 'success', duration: 2000 }); that.watchLogin(); }
+            else wx.showToast({ title: `${error.msg}`, icon: 'error', duration: 2000 })
+        }
+    },
+    // 关闭弹框
+    toClose: function () {
+        const that = this;
+        that.setData({ dialog: { title: '成员列表', show: false } })
     },
     /**
      * 生命周期函数--监听页面加载
      */
     onLoad: function (options) {
+        const that = this;
+        that.setData({ id: options.id || '62a04833b3fcf97310b3e9c3' })
+        //验证规则函数
+        that.initValidate();
         // 计算高度
-        this.searchHeight()
+        that.searchHeight();
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'token',
+            success: async res => {
+                that.setData({ user: res.data })
+                let arr;
+                let schedule;
+                // 查询赛程信息
+                arr = await app.$get(`/courtAdmin/api/schedule/${that.data.id}`);
+                if (arr.errcode == '0') { schedule = arr.data; that.setData({ form: schedule }); }
+                // 红方
+                arr = await app.$get(`/courtAdmin/api/team/${schedule.red_id}`);
+                if (arr.errcode == '0') that.setData({ redTeam: arr.data });
+                // 蓝方
+                arr = await app.$get(`/courtAdmin/api/team/${schedule.blue_id}`);
+                if (arr.errcode == '0') that.setData({ blueTeam: arr.data });
+
+            },
+            fail: res => {
+                wx.redirectTo({ url: '/pages/index/index', })
+            }
+        })
     },
     // 计算高度
     searchHeight: function () {

+ 6 - 5
pages/matchadmin/layoutdetail.json

@@ -1,6 +1,7 @@
 {
-    "component": true,
-    "usingComponents": {
-      "mobile-main": "/commpents/mobile-frame/mobile-main"
-    }
-  }
+  "component": true,
+  "usingComponents": {
+      "mobile-main": "/commpents/mobile-frame/mobile-main",
+      "e-dialog": "/commpents/dialog/index"
+  }
+}

+ 84 - 2
pages/matchadmin/layoutdetail.wxml

@@ -1,5 +1,87 @@
 <mobile-main frameStyle="{{frameStyle}}" bind:back="back">
   <view slot="info" class="main" style="height:{{infoHeight}}px;">
-    模板
+    <view class="one">
+      <form bindsubmit="onSubmit">
+        <view class="content">
+          <view class="label textOver">比赛名称</view>
+          <view class="value">
+            <input type="text" name="match_name" value="{{form.match_name}}" placeholder="请输入比赛名称" disabled />
+          </view>
+        </view>
+        <view class="content">
+          <view class="label textOver">比赛日期时间</view>
+          <view class="value">
+            <input type="text" name="match_time" value="{{form.match_time}}" placeholder="请输入比赛日期时间" disabled />
+          </view>
+        </view>
+        <view class="content">
+          <view class="label textOver">红方名称</view>
+          <view class="value">
+            <input type="text" name="red_name" value="{{form.red_name}}" placeholder="请输入红方名称" disabled />
+          </view>
+        </view>
+        <view class="content">
+          <view class="label textOver">红方logo</view>
+          <view class="value">
+            <image class="image" src="{{form.red_logo[0].url}}"></image>
+          </view>
+        </view>
+        <view class="members">
+          <view class="members_1">
+            <text>红方成员</text>
+            <button type="default" size="mini" bindtap="memAdd" data-type="red">添加成员</button>
+          </view>
+          <view class="members_2">
+            <view class="membersList" wx:for="{{form.red_members}}" wx:key="item" bindtap="memDel" data-user_id="{{item.user_id}}" data-type="red">
+              <image class="iamge" src="{{item.icon&&item.icon.length>0?item.icon[0].url:'/image/wodexiao-01.png'}}"></image>
+              <view class="nickname textOver">{{item.nickname}}</view>
+              <image class="del" src="/image/jianshao.png"></image>
+            </view>
+          </view>
+        </view>
+        <view class="content">
+          <view class="label textOver">蓝方名称</view>
+          <view class="value">
+            <input type="text" name="blue_name" value="{{form.blue_name}}" placeholder="请输入蓝方名称" disabled />
+          </view>
+        </view>
+        <view class="content">
+          <view class="label textOver">蓝方logo</view>
+          <view class="value">
+            <image class="image" src="{{form.blue_logo[0].url}}"></image>
+          </view>
+        </view>
+        <view class="members">
+          <view class="members_1">
+            <text>蓝方成员</text>
+            <button type="default" size="mini" bindtap="memAdd" data-type="blue">添加成员</button>
+          </view>
+          <view class="members_2">
+            <view class="membersList" wx:for="{{form.blue_members}}" wx:key="item" bindtap="memDel" data-user_id="{{item.user_id}}" data-type="blue">
+              <image class="iamge" src="{{item.icon&&item.icon.length>0?item.icon[0].url:'/image/wodexiao-01.png'}}"></image>
+              <view class="nickname textOver">{{item.nickname}}</view>
+              <image class="del" src="/image/jianshao.png"></image>
+            </view>
+          </view>
+        </view>
+        <view class="btn">
+          <button type="primary" size="mini" formType="submit">提交保存</button>
+        </view>
+      </form>
+    </view>
   </view>
-</mobile-main>
+</mobile-main>
+<e-dialog dialog="{{dialog}}" bind:toClose="toClose">
+  <view slot="info">
+    <view class="dialog_one" wx:if="{{dialog.type=='1'}}">
+      <checkbox-group bindchange="onMemchange">
+        <view class="userList" wx:for="{{membersList}}" wx:key="item">
+          <label>
+            <text>{{item.nickname}}</text>
+            <checkbox value="{{item.user_id}}" checked="{{item.checked}}" />
+          </label>
+        </view>
+      </checkbox-group>
+    </view>
+  </view>
+</e-dialog>

+ 165 - 0
pages/matchadmin/layoutdetail.wxss

@@ -1,4 +1,169 @@
 .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: 30%;
+    font-size: 14px;
+}
+
+.main .one .content .value {
+    float: left;
+    width: 70%;
+    text-align: right;
+    font-size: 14px;
+}
+
+.main .one .content .value .image {
+    width: 50px;
+    height: 50px;
+    border-radius: 90px;
+
+}
+
+.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%;
+}
+
+.main .one .members {
+    float: left;
+    width: 100%;
+    margin: 5px 0;
+}
+
+.main .one .members .members_1 {
+    float: left;
+    width: 100%;
+}
+
+.main .one .members .members_1 text {
+    display: inline-block;
+    margin: 4px 0;
+}
+
+.main .one .members .members_1 button {
+    font-size: 14px;
+    float: right;
+}
+
+.members_2 {
+    float: left;
+    width: 100%;
+}
+
+.members_2 .membersList {
+    float: left;
+    width: 22%;
+    height: 80px;
+    border: 1px solid #ccc;
+    border-radius: 90px;
+    text-align: center;
+    margin: 0 10px 10px 0;
+    position: relative;
+}
+
+.members_2 .membersList:nth-child(4n) {
+    margin: 0 0 10px 0;
+}
+
+.members_2 .membersList .iamge {
+    width: 40px;
+    height: 40px;
+    overflow: hidden;
+    margin: 5px 0;
+    border-radius: 90px;
+}
+
+.members_2 .membersList .nickname {
+    font-size: 12px;
+}
+
+.members_2 .membersList .del {
+    position: absolute;
+    top: 0;
+    right: 0;
+    width: 20px;
+    height: 20px;
+}
+
+.dialog_one {
+    float: left;
+    width: 100%;
+}
+
+
+.dialog_one .userList {
+    float: left;
+    width: 93%;
+    padding: 10px;
+    border-bottom: 1px solid #ccc;
+}
+
+.dialog_one .userList text {
+    float: left;
+    text-align: left;
+    font-size: 14px;
+}
+
+.dialog_one .userList checkbox {
+    float: right;
+}
+
+.dialog_one .btn {
+    float: left;
+    width: 100%;
+    text-align: center;
+    margin: 5px 0;
+}
+
+.dialog_one .btn button {
+    padding: 0 10px;
+    font-size: 14px;
 }

+ 5 - 1
pages/matchteam/layoutdetail.js

@@ -21,6 +21,7 @@ Page({
         membersList: [],
         // 弹框
         dialog: { title: '成员列表', show: false, type: '1' },
+        teamType: ''
     },
     initValidate() {
         const rules = { match_name: { required: true } }
@@ -41,6 +42,7 @@ Page({
         let arr;
         arr = await app.$get(`/courtAdmin/api/matchteam`, { match_id: data.match_id, team_id: type == 'red' ? red._id : blue._id });
         if (arr.errcode == '0') {
+            that.setData({ teamType: type });
             that.setData({ membersList: arr.data[0].members });
             that.setData({ dialog: { title: '成员列表', show: true, type: '1' } })
         }
@@ -50,12 +52,14 @@ Page({
         const that = this;
         let data = e.detail.value;
         let user = that.data.membersList;
+        const type = that.data.teamType;
         let members = [];
         for (const val of data) {
             let arr = user.find((i) => i.user_id == val);
             if (arr) members.push(arr)
         }
-        that.setData({ 'form.blue_members': members })
+        if (type == 'red') that.setData({ 'form.red_members': members })
+        else if (type == 'blue') that.setData({ 'form.blue_members': members })
     },
     // 删除成员
     memDel: function (e) {