guhongwei 2 年之前
父節點
當前提交
87cd27552a

+ 6 - 2
app.json

@@ -5,7 +5,10 @@
         "pages/school/index",
         "pages/smy/index",
         "pages/suser/list",
+        "pages/suser/add",
+        "pages/suser/bind",
         "pages/sadmin/list",
+        "pages/sadmin/add",
         "pages/scoach/list",
         "pages/scoach/add",
         "pages/sstudent/list",
@@ -17,9 +20,10 @@
         "pages/test/index",
         "pages/logs/logs",
         "pages/user/basic",
+        "pages/system/dictionary",
+        "pages/system/adddictionary",
         "pages/setting/basic",
-        "pages/setting/contact",
-        "pages/suser/add"
+        "pages/setting/contact"
     ],
     "usingComponents": {
         "van-sidebar": "@vant/weapp/sidebar/index",

+ 1 - 1
commpents/upload/index.wxml

@@ -1,7 +1,7 @@
 <view class="main">
     <view class="one">
         <view class="list" wx:for="{{list}}" wx:key="index" style="width: {{previewSize}}vw;">
-            <image class="image" src="{{item.url}}" bindtap="toView" data-item="{{item}}"></image>
+            <image class="image" src="{{item.url}}" bindtap="toView" data-item="{{item}}" mode="aspectFill"></image>
             <icon class="icon-small icon" type="cancel" size="23" bindtap="imgDel" data-item="{{item}}" data-index="{{index}}"></icon>
         </view>
     </view>

+ 13 - 3
pages/register/index.js

@@ -1,12 +1,11 @@
 const app = getApp()
 import WxValidate from '../../utils/wxValidate';
-const { gender } = require('../../utils/dict')
 Page({
     data: {
         frameStyle: { useTop: true, name: '注册', leftArrow: false, useBar: false },
         form: { icon: [] },
         // 性别
-        genderList: gender,
+        genderList: [],
         agree: false
     },
     initValidate() {
@@ -92,7 +91,18 @@ Page({
      * 生命周期函数--监听页面显示
      */
     onShow: function () {
-
+        const that = this;
+        // 查询其他信息
+        that.searchOther();
+    },
+    searchOther: async function () {
+        const that = this;
+        let arr;
+        arr = await app.$get(`/dict`, { code: 'gender' });
+        if (arr.errcode == '0' && arr.total > 0) {
+            let list = arr.data[0].list;
+            that.setData({ genderList: list })
+        }
     },
 
     /**

File diff suppressed because it is too large
+ 147 - 0
pages/sadmin/add.js


+ 7 - 0
pages/sadmin/add.json

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

+ 34 - 0
pages/sadmin/add.less

@@ -0,0 +1,34 @@
+.main {
+    background-color: var(--mainColor);
+
+    .one {
+        .content {
+            display: flex;
+            flex-direction: row;
+            border-bottom: 1px dashed var(--f1Color);
+            padding: 2vw 0;
+            margin: 0 2vw 2vw 2vw;
+
+            .value {
+                flex-grow: 1;
+                color: var(--blackColor);
+
+                textarea {
+                    position: static;
+                    width: 73vw;
+                }
+            }
+        }
+
+        .btn {
+            text-align: center;
+            margin: 5vw 0 0 0;
+
+            button {
+                width: 40vw;
+                margin: 0 2vw;
+                padding: 1vw 0;
+            }
+        }
+    }
+}

+ 71 - 0
pages/sadmin/add.wxml

@@ -0,0 +1,71 @@
+<mobile-main frameStyle="{{frameStyle}}" bind:back="back">
+    <view slot="info" class="container main">
+        <view class="one">
+            <form catchsubmit="onSubmit">
+                <view class="content">
+                    <view class="label">机构名称:</view>
+                    <view class="value">
+                        <textarea name="name" value="{{form.name}}" auto-height placeholder="请输入机构名称" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">机构简介:</view>
+                    <view class="value">
+                        <textarea name="brief" value="{{form.brief}}" auto-height placeholder="请输入机构简介" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">联系方式:</view>
+                    <view class="value">
+                        <input name="phone" value="{{form.phone}}" placeholder="请输入联系方式" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">训练地址:</view>
+                    <view class="value">
+                        <input name="address" value="{{form.address}}" placeholder="请输入训练地址" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">教练人数:</view>
+                    <view class="value">
+                        <input type="number" name="coach_num" value="{{form.coach_num}}" placeholder="请输入教练人数" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">学员人数:</view>
+                    <view class="value">
+                        <input type="number" name="student_num" value="{{form.student_num}}" placeholder="请输入学员人数" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">过往荣誉:</view>
+                    <view class="value">
+                        <textarea name="honor" value="{{form.honor}}" auto-height placeholder="请输入过往荣誉" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">网址:</view>
+                    <view class="value">
+                        <input name="url" value="{{form.url}}" placeholder="请输入网址(http://)" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">营业执照(1):</view>
+                    <view class="value">
+                        <upload list="{{form.yyzz}}" count="{{1}}" previewSize="{{33}}" bind:imgUpload="yzimgUpl" bind:imgDel="yzimgDel"></upload>
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">机构图片(6):</view>
+                    <view class="value">
+                        <upload list="{{form.img_url}}" count="{{6}}" previewSize="{{25}}" bind:imgUpload="imgUpl" bind:imgDel="imgDel"></upload>
+                    </view>
+                </view>
+                <view class="btn">
+                    <button type="primary" size="mini" formType="submit">提交保存</button>
+                </view>
+            </form>
+        </view>
+    </view>
+</mobile-main>

+ 27 - 0
pages/sadmin/add.wxss

@@ -0,0 +1,27 @@
+.main {
+  background-color: var(--mainColor);
+}
+.main .one .content {
+  display: flex;
+  flex-direction: row;
+  border-bottom: 1px dashed var(--f1Color);
+  padding: 2vw 0;
+  margin: 0 2vw 2vw 2vw;
+}
+.main .one .content .value {
+  flex-grow: 1;
+  color: var(--blackColor);
+}
+.main .one .content .value textarea {
+  position: static;
+  width: 73vw;
+}
+.main .one .btn {
+  text-align: center;
+  margin: 5vw 0 0 0;
+}
+.main .one .btn button {
+  width: 40vw;
+  margin: 0 2vw;
+  padding: 1vw 0;
+}

+ 112 - 5
pages/sadmin/list.js

@@ -1,4 +1,5 @@
 const app = getApp()
+import QRCode from '../../utils/weapp-qrcode.js';
 Page({
 
     /**
@@ -6,18 +7,103 @@ Page({
      */
     data: {
         frameStyle: { useTop: true, name: '羽校信息', leftArrow: true, useBar: false },
+        list: [],
+        total: 0,
+        page: 0,
+        skip: 0,
+        limit: 5,
+        // dialog弹框
+        dialog: { title: '账号绑定', show: false, type: '1' },
+        form: {}
     },
     // 返回
     back: function () {
         wx.navigateBack({ delta: 1 })
     },
+    // 添加
+    toAdd() {
+        const that = this;
+        that.setData({ skip: 0, page: 0, list: [] })
+        wx.navigateTo({ url: '/pages/sadmin/add' })
+    },
+    // 修改
+    toEdit: function (e) {
+        const that = this;
+        let { item } = e.currentTarget.dataset;
+        that.setData({ skip: 0, page: 0, list: [] })
+        wx.navigateTo({ url: `/pages/sadmin/add?id=${item.id}` })
+    },
+    // 删除
+    toDel: async function (e) {
+        const that = this;
+        const { item } = e.currentTarget.dataset;
+        wx.showModal({
+            title: '提示',
+            content: '是否确认删除该条数据?',
+            async success(res) {
+                if (res.confirm) {
+                    const arr = await app.$delete(`/school/${item.id}`);
+                    if (arr.errcode == '0') {
+                        wx.showToast({ title: `删除信息成功`, icon: 'success', duration: 2000 })
+                        that.setData({ skip: 0, page: 0, list: [] })
+                        that.watchLogin()
+                    } else {
+                        wx.showToast({ title: `${arr.errmsg}`, icon: 'error', duration: 2000 })
+                    }
+                }
+            }
+        })
+    },
+    // 绑定账号
+    toBind: async function (e) {
+        const that = this;
+        let { item } = e.currentTarget.dataset;
+        const arr = await app.$get(`/school/${item.id}`);
+        if (arr.errcode == '0') {
+            that.setData({ form: arr.data })
+            // 生成二维码
+            that.makeQRCode();
+            that.setData({ dialog: { title: '账号绑定', show: true, type: '1' } })
+        } else { wx.showToast({ title: `${arr.errmsg}`, icon: 'error', duration: 2000 }) }
+    },
+    makeQRCode(template = 0) {
+        const that = this;
+        const url = `${app.globalData.publicUrl}/courtappbind?id=${that.data.form.id}&type='1'`;
+        var qrcode = new QRCode(`myQrcode`, {
+            text: url,
+            width: 110,
+            height: 110,
+            padding: 3,
+            colorDark: "#000000",
+            colorLight: "#ffffff",
+            correctLevel: QRCode.CorrectLevel.L,
+        });
+    },
+    // 关闭弹框
+    toClose: function () {
+        const that = this;
+        that.setData({ form: {} })
+        that.setData({ dialog: { title: '账号绑定', show: false, type: '1' } })
+    },
+    // 分页
+    toPage: function () {
+        const that = this;
+        let list = that.data.list;
+        let limit = that.data.limit;
+        if (that.data.total > list.length) {
+            wx.showLoading({ title: '加载中', mask: true })
+            let page = that.data.page + 1;
+            that.setData({ page: page })
+            let skip = page * limit;
+            that.setData({ skip: skip })
+            that.watchLogin();
+            wx.hideLoading()
+        } else { wx.showToast({ title: '没有更多数据了', icon: 'none', duration: 2000 }) }
+    },
     /**
      * 生命周期函数--监听页面加载
      */
-    onLoad: function (options) {
-        const that = this;
-
-    },
+    onLoad: function (options) { },
     /**
      * 生命周期函数--监听页面初次渲染完成
      */
@@ -29,7 +115,28 @@ Page({
      * 生命周期函数--监听页面显示
      */
     onShow: function () {
-
+        const that = this;
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                let info = { skip: that.data.skip, limit: that.data.limit };
+                const arr = await app.$get(`/school`, { ...info });
+                if (arr.errcode == '0') {
+                    that.setData({ list: [...that.data.list, ...arr.data] });
+                    that.setData({ total: arr.total })
+                }
+                else { wx.showToast({ title: `${arr.errmsg}`, icon: 'error', duration: 2000 }) }
+            },
+            fail: async res => {
+                wx.redirectTo({ url: '/pages/index/index' })
+            }
+        })
     },
 
     /**

+ 3 - 2
pages/sadmin/list.json

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

+ 83 - 2
pages/sadmin/list.less

@@ -1,5 +1,5 @@
 .main {
-    height: var(--thrHeight);
+    height: var(--twoHeight);
     background-color: var(--mainColor);
 
     .one {
@@ -30,6 +30,87 @@
     }
 
     .two {
-        background-color: #ffffff;
+        position: relative;
+        flex-grow: 1;
+        background-color: var(--whiteColor);
+        padding: 0 2vw;
+
+        .list {
+            background-color: var(--f9Color);
+            margin: 0 0 2vw 0;
+            padding: 2vw;
+            margin: 0 2vw 2vw 2vw;
+            border-radius: 5px;
+
+            .name {
+                font-size: var(--font18Szie);
+                font-weight: bold;
+                margin: 0 0 1vw 0;
+            }
+
+            .other {
+                margin: 0 0 1vw 0;
+
+                .other_1 {
+                    margin: 0 0 1vw 0;
+                    font-size: var(--font16Size);
+
+                    text:first-child {
+                        color: var(--f85Color);
+                    }
+                }
+            }
+
+            .btn {
+                text-align: center;
+
+                button {
+                    margin: 0 2vw;
+                    font-size: var(--font14Size);
+                }
+            }
+        }
+    }
+}
+
+.scroll-view {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+
+    .list-scroll-view {
+        display: flex;
+        flex-direction: column;
+    }
+}
+
+.dialog {
+    .dialog_1 {
+        .name {
+            text-align: center;
+            font-size: var(--font18Szie);
+            font-weight: bold;
+            margin: 3vw 0;
+        }
+
+        .image {
+            text-align: center;
+            height: 18vh;
+            overflow: hidden;
+
+            .qrcode {
+                height: 22vh;
+                position: absolute;
+                left: 32vw;
+            }
+        }
+
+        .remark {
+            text-align: center;
+            font-size: 15px;
+            margin: 0 0 4vw 0;
+        }
     }
 }

+ 40 - 2
pages/sadmin/list.wxml

@@ -9,7 +9,45 @@
             </view>
         </view>
         <view class="two">
-            列表
+            <scroll-view scroll-y="true" class="scroll-view" bindscrolltolower="toPage">
+                <view class="list-scroll-view">
+                    <view class="list" wx:for="{{list}}" wx:key="index">
+                        <view class="name">
+                            {{item.name}}
+                        </view>
+                        <view class="other">
+                            <view class="other_1">
+                                <text>联系方式:</text>
+                                <text>{{item.phone||'暂无'}}</text>
+                            </view>
+                            <view class="other_1">
+                                <text>训练地址:</text>
+                                <text>{{item.address||'暂无'}}</text>
+                            </view>
+                            <view class="other_1">
+                                <text>网址:</text>
+                                <text>{{item.url||'暂无'}}</text>
+                            </view>
+                        </view>
+                        <view class="btn">
+                            <button type="primary" size="mini" bindtap="toEdit" data-item="{{item}}">信息维护</button>
+                            <button type="primary" size="mini" bindtap="toBind" data-item="{{item}}">绑定账号</button>
+                            <button type="warn" size="mini" bindtap="toDel" data-item="{{item}}">删除信息</button>
+                        </view>
+                    </view>
+                </view>
+            </scroll-view>
         </view>
     </view>
-</mobile-main>
+</mobile-main>
+<dialog dialog="{{dialog}}" bind:toClose="toClose">
+    <view slot="info" class="dialog">
+        <view class="dialog_1" wx:if="{{dialog.type=='1'}}">
+            <view class="name">{{form.name}}</view>
+            <view class="image">
+                <canvas class="qrcode" canvas-id="myQrcode"></canvas>
+            </view>
+            <view class="remark">用户可扫描二维码进行账号绑定</view>
+        </view>
+    </view>
+</dialog>

+ 66 - 2
pages/sadmin/list.wxss

@@ -1,5 +1,5 @@
 .main {
-  height: var(--thrHeight);
+  height: var(--twoHeight);
   background-color: var(--mainColor);
 }
 .main .one {
@@ -25,5 +25,69 @@
   font-size: var(--font14Size);
 }
 .main .two {
-  background-color: #ffffff;
+  position: relative;
+  flex-grow: 1;
+  background-color: var(--whiteColor);
+  padding: 0 2vw;
+}
+.main .two .list {
+  background-color: var(--f9Color);
+  margin: 0 0 2vw 0;
+  padding: 2vw;
+  margin: 0 2vw 2vw 2vw;
+  border-radius: 5px;
+}
+.main .two .list .name {
+  font-size: var(--font18Szie);
+  font-weight: bold;
+  margin: 0 0 1vw 0;
+}
+.main .two .list .other {
+  margin: 0 0 1vw 0;
+}
+.main .two .list .other .other_1 {
+  margin: 0 0 1vw 0;
+  font-size: var(--font16Size);
+}
+.main .two .list .other .other_1 text:first-child {
+  color: var(--f85Color);
+}
+.main .two .list .btn {
+  text-align: center;
+}
+.main .two .list .btn button {
+  margin: 0 2vw;
+  font-size: var(--font14Size);
+}
+.scroll-view {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+.scroll-view .list-scroll-view {
+  display: flex;
+  flex-direction: column;
+}
+.dialog .dialog_1 .name {
+  text-align: center;
+  font-size: var(--font18Szie);
+  font-weight: bold;
+  margin: 3vw 0;
+}
+.dialog .dialog_1 .image {
+  text-align: center;
+  height: 18vh;
+  overflow: hidden;
+}
+.dialog .dialog_1 .image .qrcode {
+  height: 22vh;
+  position: absolute;
+  left: 32vw;
+}
+.dialog .dialog_1 .remark {
+  text-align: center;
+  font-size: 15px;
+  margin: 0 0 4vw 0;
 }

+ 1 - 1
pages/scoach/add.js

@@ -15,7 +15,7 @@ Page({
         genderList: gender,
     },
     initValidate() {
-        const rules = { icon: { required: false }, name: { required: true }, card: { required: true }, gender: { required: true }, phone: { required: true, tel: true } }
+        const rules = { icon: { required: true }, name: { required: true }, card: { required: true }, gender: { required: true }, phone: { required: true, tel: true } }
         // 验证字段的提示信息,若不传则调用默认的信息
         const messages = { icon: { required: '请选择头像', }, name: { required: '请输入用户姓名', }, card: { required: '请输入身份证号', }, gender: { required: '请选择性别', }, phone: { required: '请输入手机号', } };
         this.WxValidate = new WxValidate(rules, messages)

+ 22 - 5
pages/setting/basic.js

@@ -1,6 +1,5 @@
 const app = getApp()
 import WxValidate from '../../utils/wxValidate'
-const { gender } = require('../../utils/dict')
 Page({
 
     /**
@@ -10,12 +9,12 @@ Page({
         frameStyle: { useTop: true, name: '个人信息', leftArrow: true, useBar: false },
         form: { icon: [] },
         // 性别
-        genderList: gender,
+        genderList: [],
     },
     initValidate() {
         const rules = { icon: { required: true }, name: { required: true }, gender: { required: true }, phone: { required: true, tel: true } }
         // 验证字段的提示信息,若不传则调用默认的信息
-        const messages = { icon: { required: '请选择头像', }, name: { required: '请输入用户姓名', },  gender: { required: '请选择性别', }, phone: { required: '请输入手机号', } };
+        const messages = { icon: { required: '请选择头像', }, name: { required: '请输入用户姓名', }, gender: { required: '请选择性别', }, phone: { required: '请输入手机号', } };
         this.WxValidate = new WxValidate(rules, messages)
     },
     // 返回
@@ -39,7 +38,10 @@ Page({
     genderChange: function (e) {
         const that = this;
         let data = that.data.genderList[e.detail.value];
-        if (data) that.setData({ 'form.gender': data.value });
+        if (data) {
+            that.setData({ 'form.gender': data.value });
+            that.setData({ 'form.zhGender': data.label })
+        }
     },
     // 提交登录
     onSubmit: async function (e) {
@@ -64,9 +66,20 @@ Page({
         const that = this;
         //验证规则函数
         that.initValidate();
+        // 查询其他信息
+        that.searchOther();
         // 监听用户是否登录
         that.watchLogin();
     },
+    searchOther: async function () {
+        const that = this;
+        let arr;
+        arr = await app.$get(`/dict`, { code: 'gender' });
+        if (arr.errcode == '0' && arr.total > 0) {
+            let list = arr.data[0].list;
+            that.setData({ genderList: list })
+        }
+    },
     // 监听用户是否登录
     watchLogin: async function () {
         const that = this;
@@ -74,7 +87,11 @@ Page({
             key: 'user',
             success: async res => {
                 const arr = await app.$get(`/user/${res.data.id}`);
-                if (arr.errcode == '0') { that.setData({ form: arr.data }) }
+                if (arr.errcode == '0') {
+                    let gender = that.data.genderList.find(i => i.value == arr.data.gender);
+                    if (gender) arr.data.zhGender = gender.label;
+                    that.setData({ form: arr.data })
+                }
             },
             fail: res => {
                 wx.redirectTo({ url: '/pages/index/index', })

+ 1 - 1
pages/setting/basic.wxml

@@ -18,7 +18,7 @@
                     <view class="label">性别:</view>
                     <view class="value">
                         <picker mode="selector" bindchange="genderChange" name="gender" value="{{form.gender}}" range="{{genderList}}" range-key="label">
-                            <view class="picker">{{form.gender=='0'?'男':form.gender=='1'?'女':form.gender=='2'?'未知':'请选择性别'}}</view>
+                            <view class="picker">{{form.zhGender||'请选择性别'}}</view>
                         </picker>
                     </view>
                 </view>

+ 12 - 6
pages/sstudent/list.js

@@ -19,21 +19,21 @@ Page({
     //添加或修改
     toCommon: function (e) {
         const that = this;
+        const { route, item } = e.currentTarget.dataset;
         that.setData({ skip: 0, page: 0, list: [] })
-        const { route, id } = e.currentTarget.dataset;
-        if (id) wx.navigateTo({ url: `/pages/sstudent/${route}?id=${id}` })
-        else wx.navigateTo({ url: `/pages/sstudent/${route}` })
+        if (item && item.id) wx.navigateTo({ url: `/pages/${route}?id=${item.id}` })
+        else wx.navigateTo({ url: `/pages/${route}` })
     },
     // 删除
     toDel: async function (e) {
         const that = this;
-        const { id } = e.currentTarget.dataset;
+        const { item } = e.currentTarget.dataset;
         wx.showModal({
             title: '提示',
             content: '是否确认删除该条数据?',
             async success(res) {
                 if (res.confirm) {
-                    const arr = await app.$delete(`/student/${id}`);
+                    const arr = await app.$delete(`/student/${item.id}`);
                     if (arr.errcode == '0') {
                         wx.showToast({ title: `删除信息成功`, icon: 'success', duration: 2000 })
                         that.setData({ skip: 0, page: 0, list: [] })
@@ -45,6 +45,12 @@ Page({
             }
         })
     },
+    // 账号绑定
+    toBind: function (e) {
+        const that = this;
+        const { item } = e.currentTarget.dataset;
+        console.log(item);
+    },
     // 分页
     toPage: function () {
         const that = this;
@@ -64,7 +70,7 @@ Page({
      * 生命周期函数--监听页面加载
      */
     onLoad: function (options) {
-      
+
     },
     // 监听用户是否登录
     watchLogin: async function () {

+ 1 - 1
pages/sstudent/list.less

@@ -89,7 +89,7 @@
                     border-radius: 25px;
                 }
 
-                button:nth-child(2) {
+                button:last-child {
                     background-color: #FF4500;
                 }
             }

+ 4 - 3
pages/sstudent/list.wxml

@@ -5,7 +5,7 @@
                 <input type="text" placeholder="请输入关键词" />
             </view>
             <view class="one_2">
-                <button type="primary" bindtap="toCommon" data-route="add">添加</button>
+                <button type="primary" bindtap="toCommon" data-route="sstudent/add">添加</button>
             </view>
         </view>
         <view class="two">
@@ -23,8 +23,9 @@
                             </view>
                         </view>
                         <view class="btn">
-                            <button size="mini" type="primary" bindtap="toCommon" data-route="add" data-id="{{item._id}}">信息维护</button>
-                            <button size="mini" type="primary" bindtap="toDel" data-id="{{item._id}}">信息删除</button>
+                            <button size="mini" type="primary" bindtap="toCommon" data-route="sstudent/add" data-item="{{item}}">信息维护</button>
+                            <button size="mini" type="primary" bindtap="toBind" data-item="{{item}}">账号绑定</button>
+                            <button size="mini" type="primary" bindtap="toDel" data-item="{{item.item}}">信息删除</button>
                         </view>
                     </view>
                 </view>

+ 1 - 1
pages/sstudent/list.wxss

@@ -75,7 +75,7 @@
   background-color: #FFA500;
   border-radius: 25px;
 }
-.main .two .list .btn button:nth-child(2) {
+.main .two .list .btn button:last-child {
   background-color: #FF4500;
 }
 .main .two .list:nth-child(2n) {

+ 24 - 19
pages/suser/add.js

@@ -1,6 +1,5 @@
 const app = getApp()
 import WxValidate from '../../utils/wxValidate'
-const { gender } = require('../../utils/dict')
 Page({
 
     /**
@@ -10,15 +9,8 @@ Page({
         frameStyle: { useTop: true, name: '信息管理', leftArrow: true, useBar: false },
         id: '',
         form: { icon: [] },
-        typeList: [
-            { label: '超级管理员', value: '-1' },
-            { label: '普通用户', value: '0' },
-            { label: '管理员', value: '1' },
-            { label: '教练', value: '2' },
-            { label: '学员', value: '3' },
-            { label: '游客', value: '10' },
-        ],
-        genderList: gender
+        typeList: [],
+        genderList: []
     },
     initValidate() {
         const rules = { type: { required: true }, icon: { required: true }, name: { required: true }, gender: { required: true }, phone: { required: true, tel: true } }
@@ -49,7 +41,7 @@ Page({
         let data = that.data.typeList[e.detail.value];
         if (data) {
             that.setData({ 'form.type': data.value });
-            that.setData({ 'form.type_name': data.label });
+            that.setData({ 'form.zhType': data.label });
         }
     },
     // 选择性别
@@ -58,7 +50,7 @@ Page({
         let data = that.data.genderList[e.detail.value];
         if (data) {
             that.setData({ 'form.gender': data.value });
-            that.setData({ 'form.gender_name': data.label });
+            that.setData({ 'form.zhGender': data.label });
         }
     },
     // 提交登录
@@ -82,18 +74,31 @@ Page({
     /**
      * 生命周期函数--监听页面加载
      */
-    onLoad: function (options) {
+    onLoad: async function (options) {
         const that = this;
         that.setData({ id: options.id || null })
         //验证规则函数
         that.initValidate();
+        // 查询其他信息
+        await that.searchOther();
         // 监听用户是否登录
-        that.watchLogin();
-
+        await that.watchLogin();
+    },
+    searchOther: async function () {
+        const that = this;
+        let arr;
+        // 用户类型
+        arr = await app.$get(`/dict`, { code: 'user_type' });
+        if (arr.errcode == '0' && arr.total > 0) { let list = arr.data[0].list; that.setData({ typeList: list }) }
+        // 用户性别
+        arr = await app.$get(`/dict`, { code: 'gender' });
+        if (arr.errcode == '0' && arr.total > 0) { let list = arr.data[0].list; that.setData({ genderList: list }) }
     },
     // 监听用户是否登录
     watchLogin: async function () {
         const that = this;
+        let typeList = that.data.typeList;
+        let genderList = that.data.genderList;
         wx.getStorage({
             key: 'user',
             success: async res => {
@@ -101,10 +106,10 @@ Page({
                 if (that.data.id) {
                     arr = await app.$get(`/user/${that.data.id}`);
                     if (arr.errcode == '0') {
-                        let type = that.data.typeList.find(i => i.value == arr.data.type);
-                        if (type) arr.data.type_name = type.label;
-                        let gender = that.data.genderList.find(i => i.value == arr.data.gender);
-                        if (gender) arr.data.gender_name = gender.label;
+                        let type = typeList.find(i => i.value == arr.data.type);
+                        if (type) arr.data.zhType = type.label;
+                        let gender = genderList.find(i => i.value == arr.data.gender);
+                        if (gender) arr.data.zhGender = gender.label;
                         that.setData({ form: arr.data })
                     } else { wx.showToast({ title: `${arr.errmsg}`, icon: 'error', duration: 2000 }) }
                 }

+ 2 - 2
pages/suser/add.wxml

@@ -6,7 +6,7 @@
                     <view class="label">用户类型:</view>
                     <view class="value">
                         <picker mode="selector" bindchange="typeChange" name="type" value="{{form.type}}" range="{{typeList}}" range-key="label">
-                            <view class="picker">{{form.type_name||'请选择用户类型'}}</view>
+                            <view class="picker">{{form.zhType||'请选择用户类型'}}</view>
                         </picker>
                     </view>
                 </view>
@@ -26,7 +26,7 @@
                     <view class="label">性别:</view>
                     <view class="value">
                         <picker mode="selector" bindchange="genderChange" name="gender" value="{{form.gender}}" range="{{genderList}}" range-key="label">
-                            <view class="picker">{{form.gender_name||'请选择性别'}}</view>
+                            <view class="picker">{{form.zhGender||'请选择性别'}}</view>
                         </picker>
                     </view>
                 </view>

+ 69 - 0
pages/suser/bind.js

@@ -0,0 +1,69 @@
+const app = getApp()
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        frameStyle: { useTop: true, name: '账号绑定', leftArrow: true, useBar: false },
+    },
+    // 返回
+    back: function () {
+        wx.navigateBack({ delta: 1 })
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+        const that = this;
+    },
+
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

+ 6 - 0
pages/suser/bind.json

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

+ 3 - 0
pages/suser/bind.less

@@ -0,0 +1,3 @@
+.main {
+    background-color: var(--mainColor);
+}

+ 5 - 0
pages/suser/bind.wxml

@@ -0,0 +1,5 @@
+<mobile-main frameStyle="{{frameStyle}}" bind:back="back">
+    <view slot="info" class="container main">
+        11111
+    </view>
+</mobile-main>

+ 3 - 0
pages/suser/bind.wxss

@@ -0,0 +1,3 @@
+.main {
+  background-color: var(--mainColor);
+}

+ 13 - 9
pages/suser/list.js

@@ -11,14 +11,7 @@ Page({
         page: 0,
         skip: 0,
         limit: 5,
-        typeList: [
-            { label: '超级管理员', value: '-1' },
-            { label: '普通用户', value: '0' },
-            { label: '管理员', value: '1' },
-            { label: '教练', value: '2' },
-            { label: '学员', value: '3' },
-            { label: '游客', value: '10' },
-        ]
+        typeList: []
     },
     // 返回
     back: function () {
@@ -87,7 +80,7 @@ Page({
                 let info = { skip: that.data.skip, limit: that.data.limit };
                 const arr = await app.$get(`/user`, { ...info });
                 if (arr.errcode == '0') {
-                    for (const val of arr.data) { val.zHtype = this.searchType(val.type) }
+                    for (const val of arr.data) { val.zhType = this.searchType(val.type) }
                     that.setData({ list: [...that.data.list, ...arr.data] });
                     that.setData({ total: arr.total })
                 }
@@ -117,9 +110,20 @@ Page({
      */
     onShow: function () {
         const that = this;
+        // 查询其他信息
+        that.searchOther();
         // 监听用户是否登录
         that.watchLogin();
     },
+    searchOther: async function () {
+        const that = this;
+        let arr;
+        arr = await app.$get(`/dict`, { code: 'user_type' });
+        if (arr.errcode == '0' && arr.total > 0) {
+            let list = arr.data[0].list;
+            that.setData({ typeList: list })
+        }
+    },
 
     /**
      * 生命周期函数--监听页面隐藏

+ 1 - 1
pages/suser/list.wxml

@@ -16,7 +16,7 @@
                         <view class="other">
                             <view class="other_1">
                                 <text>用户类型:</text>
-                                <text>{{item.zHtype}}</text>
+                                <text>{{item.zhType}}</text>
                             </view>
                             <view class="other_1">
                                 <text>联系电话:</text>

+ 168 - 0
pages/system/adddictionary.js

@@ -0,0 +1,168 @@
+const app = getApp()
+import WxValidate from '../../utils/wxValidate'
+const moment = require("../../utils/moment.min")
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        frameStyle: { useTop: true, name: '信息管理', leftArrow: true, useBar: false },
+        id: '',
+        form: { list: [] },
+        // dialog弹框
+        dialog: { title: '弹框标题', show: false, type: '1' },
+        listForm: {}
+    },
+    initValidate() {
+        const rules = { label: { required: true }, code: { required: true } }
+        // 验证字段的提示信息,若不传则调用默认的信息
+        const messages = { label: { required: '请输入字典名称', }, code: { required: '请输入字典编码', } };
+        this.WxValidate = new WxValidate(rules, messages)
+    },
+    // 返回
+    back: function () {
+        wx.navigateBack({ delta: 1 })
+    },
+    // 添加选项
+    listAdd: function () {
+        const that = this;
+        that.setData({ dialog: { title: '字典选项', show: true, type: '1' } })
+    },
+    // 提交保存
+    listSubmit: function (e) {
+        const that = this;
+        const params = e.detail.value;
+        let listForm = that.data.listForm;
+        let form = that.data.form;
+        if (params.label && params.value) {
+            if (listForm.id) {
+                let list = form.list.filter(i => i.id != listForm.id);
+                that.setData({ 'form.list': [params, ...list] })
+            } else {
+                params.id = moment().valueOf();
+                that.setData({ 'form.list': [...form.list, params] })
+            }
+            that.toClose()
+        } else {
+            wx.showToast({ title: `缺少必填项`, icon: 'error', duration: 2000 })
+        }
+    },
+    // 修改
+    listEdit: function (e) {
+        const that = this;
+        const { item } = e.currentTarget.dataset;
+        that.setData({ listForm: item })
+        that.setData({ dialog: { title: '字典选项', show: true, type: '1' } })
+    },
+    // 删除
+    listDel: function (e) {
+        const that = this;
+        let form = that.data.form;
+        const { item } = e.currentTarget.dataset;
+        let list = form.list.filter(i => i.id != item.id)
+        that.setData({ 'form.list': list })
+    },
+    // 关闭弹框
+    toClose: function () {
+        const that = this;
+        that.setData({ listForm: {} })
+        that.setData({ dialog: { title: '字典选项', show: false, type: '1' } })
+    },
+
+    // 提交登录
+    onSubmit: async function (e) {
+        const that = this;
+        const params = e.detail.value;
+        const form = that.data.form;
+        params.list = form.list;
+        if (!this.WxValidate.checkForm(params)) {
+            const error = this.WxValidate.errorList[0];
+            wx.showToast({ title: `${error.msg}`, icon: 'error', duration: 2000 })
+            return false
+        } else {
+            let arr;
+            if (that.data.id) arr = await app.$post(`/dict/${form._id}`, params);
+            else arr = await app.$post(`/dict`, params);
+            if (arr.errcode == '0') { wx.showToast({ title: `维护信息完成`, icon: 'success', duration: 2000 }); that.back(); }
+            else wx.showToast({ title: `${arr.errmsg}`, icon: 'error', duration: 2000 })
+        }
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+        const that = this;
+        that.setData({ id: options.id || null })
+        //验证规则函数
+        that.initValidate();
+        // 监听用户是否登录
+        that.watchLogin();
+
+    },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                let arr;
+                if (that.data.id) {
+                    arr = await app.$get(`/dict/${that.data.id}`);
+                    if (arr.errcode == '0') {
+                        that.setData({ form: arr.data })
+                    } else { wx.showToast({ title: `${arr.errmsg}`, icon: 'error', duration: 2000 }) }
+                }
+            },
+            fail: async res => {
+                wx.redirectTo({ url: '/pages/index/index' })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () { },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

+ 7 - 0
pages/system/adddictionary.json

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

+ 94 - 0
pages/system/adddictionary.less

@@ -0,0 +1,94 @@
+.main {
+    background-color: var(--mainColor);
+
+    .one {
+        .content {
+            display: flex;
+            flex-direction: row;
+            border-bottom: 1px dashed var(--f1Color);
+            padding: 2vw 0;
+            margin: 0 2vw 2vw 2vw;
+
+            .value {
+                flex-grow: 1;
+                color: var(--blackColor);
+
+                .change {
+                    display: flex;
+                    flex-direction: column;
+                    .list {
+                        background-color: var(--f9Color);
+                        padding: 2vw;
+                        margin: 0 0 2vw 0;
+
+                        .list_1 {
+                            margin: 0 0 1vw 0;
+
+                            .list_1_1 {
+                                font-size: 16px;
+                                margin: 0 0 1vw 0;
+                                text:first-child {
+                                    color: var(--f85Color);
+                                }
+                            }
+                        }
+
+                        .list_2 {
+                            text-align: center;
+
+                            button {
+                                margin: 0 2vw;
+                            }
+                        }
+                    }
+                }
+
+            }
+        }
+
+        .btn {
+            text-align: center;
+            margin: 5vw 0 0 0;
+
+            button {
+                width: 40vw;
+                margin: 0 2vw;
+                padding: 1vw 0;
+            }
+        }
+    }
+}
+
+.dialog {
+    .dialog_1 {
+        .content {
+            display: flex;
+            flex-direction: row;
+            border-bottom: 1px dashed var(--whiteColor);
+            padding: 2vw 0;
+            margin: 0 2vw 2vw 2vw;
+
+            .value {
+                flex-grow: 1;
+                color: var(--blackColor);
+
+                .add {
+                    margin: 15vw 0;
+                }
+            }
+        }
+
+        .btn {
+            text-align: center;
+            margin: 5vw 0 0 0;
+
+            button {
+                width: 40vw;
+                margin: 0 2vw;
+                padding: 1vw 0;
+            }
+        }
+
+
+    }
+}

+ 72 - 0
pages/system/adddictionary.wxml

@@ -0,0 +1,72 @@
+<mobile-main frameStyle="{{frameStyle}}" bind:back="back">
+    <view slot="info" class="container main">
+        <view class="one">
+            <form catchsubmit="onSubmit">
+                <view class="content">
+                    <view class="label">字典名称:</view>
+                    <view class="value">
+                        <input name="label" value="{{form.label}}" placeholder="请输入字典名称" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">字典编码:</view>
+                    <view class="value">
+                        <input name="code" value="{{form.code}}" placeholder="请输入字典编码" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">字典选项:</view>
+                    <view class="value">
+                        <view class="add">
+                            <button type="primary" size="mini" bindtap="listAdd">添加选项</button>
+                        </view>
+                        <view class="change">
+                            <view class="list" wx:for="{{form.list}}" wx:key="index">
+                                <view class="list_1">
+                                    <view class="list_1_1"><text>选项标签:</text><text>{{item.label}}</text></view>
+                                    <view class="list_1_1"><text>选项值:</text><text>{{item.value}}</text></view>
+                                </view>
+                                <view class="list_2">
+                                    <button type="primary" size="mini" bindtap="listEdit" data-item="{{item}}">信息维护</button>
+                                    <button type="warn" size="mini" bindtap="listDel" data-item="{{item}}">信息删除</button>
+                                </view>
+                            </view>
+                        </view>
+                    </view>
+                </view>
+                <view class="btn">
+                    <button type="primary" size="mini" formType="submit">提交保存</button>
+                </view>
+            </form>
+        </view>
+    </view>
+</mobile-main>
+<dialog dialog="{{dialog}}" bind:toClose="toClose">
+    <view slot="info" class="dialog">
+        <view class="dialog_1" wx:if="{{dialog.type=='1'}}">
+            <form catchsubmit="listSubmit">
+                <view class="content">
+                    <view class="label">数据id:</view>
+                    <view class="value">
+                        <input name="id" value="{{listForm.id}}" placeholder="请输入数据id" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">选项标签:</view>
+                    <view class="value">
+                        <input name="label" value="{{listForm.label}}" placeholder="请输入选项标签" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">选项值:</view>
+                    <view class="value">
+                        <input name="value" value="{{listForm.value}}" placeholder="请输入选项值" />
+                    </view>
+                </view>
+                <view class="btn">
+                    <button type="primary" size="mini" formType="submit">提交保存</button>
+                </view>
+            </form>
+        </view>
+    </view>
+</dialog>

+ 71 - 0
pages/system/adddictionary.wxss

@@ -0,0 +1,71 @@
+.main {
+  background-color: var(--mainColor);
+}
+.main .one .content {
+  display: flex;
+  flex-direction: row;
+  border-bottom: 1px dashed var(--f1Color);
+  padding: 2vw 0;
+  margin: 0 2vw 2vw 2vw;
+}
+.main .one .content .value {
+  flex-grow: 1;
+  color: var(--blackColor);
+}
+.main .one .content .value .change {
+  display: flex;
+  flex-direction: column;
+}
+.main .one .content .value .change .list {
+  background-color: var(--f9Color);
+  padding: 2vw;
+  margin: 0 0 2vw 0;
+}
+.main .one .content .value .change .list .list_1 {
+  margin: 0 0 1vw 0;
+}
+.main .one .content .value .change .list .list_1 .list_1_1 {
+  font-size: 16px;
+  margin: 0 0 1vw 0;
+}
+.main .one .content .value .change .list .list_1 .list_1_1 text:first-child {
+  color: var(--f85Color);
+}
+.main .one .content .value .change .list .list_2 {
+  text-align: center;
+}
+.main .one .content .value .change .list .list_2 button {
+  margin: 0 2vw;
+}
+.main .one .btn {
+  text-align: center;
+  margin: 5vw 0 0 0;
+}
+.main .one .btn button {
+  width: 40vw;
+  margin: 0 2vw;
+  padding: 1vw 0;
+}
+.dialog .dialog_1 .content {
+  display: flex;
+  flex-direction: row;
+  border-bottom: 1px dashed var(--whiteColor);
+  padding: 2vw 0;
+  margin: 0 2vw 2vw 2vw;
+}
+.dialog .dialog_1 .content .value {
+  flex-grow: 1;
+  color: var(--blackColor);
+}
+.dialog .dialog_1 .content .value .add {
+  margin: 15vw 0;
+}
+.dialog .dialog_1 .btn {
+  text-align: center;
+  margin: 5vw 0 0 0;
+}
+.dialog .dialog_1 .btn button {
+  width: 40vw;
+  margin: 0 2vw;
+  padding: 1vw 0;
+}

+ 143 - 0
pages/system/dictionary.js

@@ -0,0 +1,143 @@
+const app = getApp()
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        frameStyle: { useTop: true, name: '字典管理', leftArrow: true, useBar: false },
+        list: [],
+        total: 0,
+        page: 0,
+        skip: 0,
+        limit: 5,
+    },
+    // 返回
+    back: function () {
+        wx.navigateBack({ delta: 1 })
+    },
+    // 信息添加
+    toAdd: function () {
+        const that = this;
+        that.setData({ skip: 0, page: 0, list: [] })
+        wx.navigateTo({ url: `/pages/system/adddictionary` })
+    },
+    // 信息维护
+    toEdit: function (e) {
+        const that = this;
+        const { item } = e.currentTarget.dataset;
+        that.setData({ skip: 0, page: 0, list: [] })
+        wx.navigateTo({ url: `/pages/system/adddictionary?id=${item.id}` })
+    },
+    // 信息删除
+    toDel: async function (e) {
+        const that = this;
+        const { item } = e.currentTarget.dataset;
+        wx.showModal({
+            title: '提示',
+            content: '是否确认删除该条数据?',
+            async success(res) {
+                if (res.confirm) {
+                    const arr = await app.$delete(`/dict/${item._id}`);
+                    if (arr.errcode == '0') {
+                        wx.showToast({ title: `删除信息成功`, icon: 'success', duration: 2000 })
+                        that.setData({ skip: 0, page: 0, list: [] })
+                        that.watchLogin()
+                    } else {
+                        wx.showToast({ title: `${arr.errmsg}`, icon: 'error', duration: 2000 })
+                    }
+                }
+            }
+        })
+    },
+    // 分页
+    toPage: function () {
+        const that = this;
+        let list = that.data.list;
+        let limit = that.data.limit;
+        if (that.data.total > list.length) {
+            wx.showLoading({ title: '加载中', mask: true })
+            let page = that.data.page + 1;
+            that.setData({ page: page })
+            let skip = page * limit;
+            that.setData({ skip: skip })
+            that.watchLogin();
+            wx.hideLoading()
+        } else { wx.showToast({ title: '没有更多数据了', icon: 'none', duration: 2000 }) }
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+
+    },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                let info = { skip: that.data.skip, limit: that.data.limit };
+                const arr = await app.$get(`/dict`, { ...info });
+                if (arr.errcode == '0') {
+                    that.setData({ list: [...that.data.list, ...arr.data] });
+                    that.setData({ total: arr.total })
+                }
+                else { wx.showToast({ title: `${arr.errmsg}`, icon: 'error', duration: 2000 }); }
+            },
+            fail: async res => {
+                wx.redirectTo({ url: '/pages/index/index' })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+        const that = this;
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

+ 6 - 0
pages/system/dictionary.json

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

+ 87 - 0
pages/system/dictionary.less

@@ -0,0 +1,87 @@
+.main {
+    height: var(--twoHeight);
+    background-color: var(--mainColor);
+
+    .one {
+        display: flex;
+        flex-direction: row;
+        padding: 2vw;
+        border-bottom: 1px solid var(--f1Color);
+
+        .one_1 {
+            flex-grow: 1;
+
+            input {
+                padding: 1vw 0 2vw 2vw;
+                background-color: var(--f1Color);
+                border-radius: 5px;
+            }
+        }
+
+        .one_2 {
+            width: 20vw;
+
+            button {
+                width: 100%;
+                padding: 2vw;
+                font-size: var(--font14Size);
+            }
+        }
+    }
+
+    .two {
+        position: relative;
+        flex-grow: 1;
+        background-color: var(--whiteColor);
+        padding: 0 2vw;
+
+        .list {
+            background-color: var(--f9Color);
+            margin: 0 0 2vw 0;
+            padding: 2vw;
+            margin: 0 2vw 2vw 2vw;
+            border-radius: 5px;
+
+            .name {
+                font-size: var(--font18Szie);
+                font-weight: bold;
+                margin: 0 0 1vw 0;
+            }
+
+            .other {
+                margin: 0 0 1vw 0;
+
+                .other_1 {
+                    margin: 0 0 1vw 0;
+                    font-size: var(--font16Size);
+
+                    text:first-child {
+                        color: var(--f85Color);
+                    }
+                }
+            }
+
+            .btn {
+                text-align: center;
+
+                button {
+                    margin: 0 2vw;
+                    font-size: var(--font14Size);
+                }
+            }
+        }
+    }
+}
+
+.scroll-view {
+    position: absolute;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+
+    .list-scroll-view {
+        display: flex;
+        flex-direction: column;
+    }
+}

+ 33 - 0
pages/system/dictionary.wxml

@@ -0,0 +1,33 @@
+<mobile-main frameStyle="{{frameStyle}}" bind:back="back">
+    <view slot="info" class="container main">
+        <view class="one">
+            <view class="one_1">
+                <input type="text" placeholder="请输入关键词" />
+            </view>
+            <view class="one_2">
+                <button type="primary" bindtap="toAdd">添加</button>
+            </view>
+        </view>
+        <view class="two">
+            <scroll-view scroll-y="true" class="scroll-view" bindscrolltolower="toPage">
+                <view class="list-scroll-view">
+                    <view class="list" wx:for="{{list}}" wx:key="index">
+                        <view class="name">{{item.label}}</view>
+                        <view class="other">
+                            <view class="other_1">
+                                <text>字典编码:</text>
+                                <text>{{item.code}}</text>
+                            </view>
+                        </view>
+                        <view class="btn">
+                            <view class="btn_1">
+                                <button type="primary" size="mini" bindtap="toEdit" data-item="{{item}}">信息维护</button>
+                                <button type="warn" size="mini" bindtap="toDel" data-item="{{item}}">信息删除</button>
+                            </view>
+                        </view>
+                    </view>
+                </view>
+            </scroll-view>
+        </view>
+    </view>
+</mobile-main>

+ 72 - 0
pages/system/dictionary.wxss

@@ -0,0 +1,72 @@
+.main {
+  height: var(--twoHeight);
+  background-color: var(--mainColor);
+}
+.main .one {
+  display: flex;
+  flex-direction: row;
+  padding: 2vw;
+  border-bottom: 1px solid var(--f1Color);
+}
+.main .one .one_1 {
+  flex-grow: 1;
+}
+.main .one .one_1 input {
+  padding: 1vw 0 2vw 2vw;
+  background-color: var(--f1Color);
+  border-radius: 5px;
+}
+.main .one .one_2 {
+  width: 20vw;
+}
+.main .one .one_2 button {
+  width: 100%;
+  padding: 2vw;
+  font-size: var(--font14Size);
+}
+.main .two {
+  position: relative;
+  flex-grow: 1;
+  background-color: var(--whiteColor);
+  padding: 0 2vw;
+}
+.main .two .list {
+  background-color: var(--f9Color);
+  margin: 0 0 2vw 0;
+  padding: 2vw;
+  margin: 0 2vw 2vw 2vw;
+  border-radius: 5px;
+}
+.main .two .list .name {
+  font-size: var(--font18Szie);
+  font-weight: bold;
+  margin: 0 0 1vw 0;
+}
+.main .two .list .other {
+  margin: 0 0 1vw 0;
+}
+.main .two .list .other .other_1 {
+  margin: 0 0 1vw 0;
+  font-size: var(--font16Size);
+}
+.main .two .list .other .other_1 text:first-child {
+  color: var(--f85Color);
+}
+.main .two .list .btn {
+  text-align: center;
+}
+.main .two .list .btn button {
+  margin: 0 2vw;
+  font-size: var(--font14Size);
+}
+.scroll-view {
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+}
+.scroll-view .list-scroll-view {
+  display: flex;
+  flex-direction: column;
+}

+ 0 - 6
utils/dict.js

@@ -4,12 +4,6 @@ export const system = [
     { title: '俱乐部', normal: '/image/tabs/club.png', active: '/image/tabs/club_1.png', route: 'pages/club/index', type: '0' },
     { title: '比赛管理', normal: '/image/tabs/match.png', active: '/image/tabs/match_1.png', route: 'pages/match/index', type: '0' },
 ]
-// 性别
-export const gender = [
-    { label: '男', value: '0' },
-    { label: '女', value: '1' },
-    { label: '未知', value: '2' },
-];
 // 羽校系统菜单
 // -1: 管理员,0:普通用户,1:管理员,2:教练
 // 系统默认菜单