guhongwei před 2 roky
rodič
revize
3d3720cc03
100 změnil soubory, kde provedl 3173 přidání a 27 odebrání
  1. 30 27
      app.json
  2. 132 0
      pages/schAdmin copy/soneapply/info.js
  3. 0 0
      pages/schAdmin copy/soneapply/info.json
  4. 0 0
      pages/schAdmin copy/soneapply/info.less
  5. 62 0
      pages/schAdmin copy/soneapply/info.wxml
  6. 0 0
      pages/schAdmin copy/soneapply/info.wxss
  7. 119 0
      pages/schAdmin copy/soneapply/list.js
  8. 0 0
      pages/schAdmin copy/soneapply/list.json
  9. 0 0
      pages/schAdmin copy/soneapply/list.less
  10. 36 0
      pages/schAdmin copy/soneapply/list.wxml
  11. 0 0
      pages/schAdmin copy/soneapply/list.wxss
  12. 166 0
      pages/schAdmin copy/sonecoach/add.js
  13. 0 0
      pages/schAdmin copy/sonecoach/add.json
  14. 0 0
      pages/schAdmin copy/sonecoach/add.less
  15. 73 0
      pages/schAdmin copy/sonecoach/add.wxml
  16. 0 0
      pages/schAdmin copy/sonecoach/add.wxss
  17. 188 0
      pages/schAdmin copy/sonecoach/list.js
  18. 0 0
      pages/schAdmin copy/sonecoach/list.json
  19. 0 0
      pages/schAdmin copy/sonecoach/list.less
  20. 48 0
      pages/schAdmin copy/sonecoach/list.wxml
  21. 0 0
      pages/schAdmin copy/sonecoach/list.wxss
  22. 67 0
      pages/schAdmin copy/sonecoachstat/list.js
  23. 0 0
      pages/schAdmin copy/sonecoachstat/list.json
  24. 0 0
      pages/schAdmin copy/sonecoachstat/list.less
  25. 5 0
      pages/schAdmin copy/sonecoachstat/list.wxml
  26. 0 0
      pages/schAdmin copy/sonecoachstat/list.wxss
  27. 67 0
      pages/schAdmin copy/sonecourse/list.js
  28. 0 0
      pages/schAdmin copy/sonecourse/list.json
  29. 0 0
      pages/schAdmin copy/sonecourse/list.less
  30. 5 0
      pages/schAdmin copy/sonecourse/list.wxml
  31. 0 0
      pages/schAdmin copy/sonecourse/list.wxss
  32. 87 0
      pages/schAdmin copy/sonefee/list.js
  33. 0 0
      pages/schAdmin copy/sonefee/list.json
  34. 0 0
      pages/schAdmin copy/sonefee/list.less
  35. 36 0
      pages/schAdmin copy/sonefee/list.wxml
  36. 0 0
      pages/schAdmin copy/sonefee/list.wxss
  37. 67 0
      pages/schAdmin copy/soneincome/list.js
  38. 0 0
      pages/schAdmin copy/soneincome/list.json
  39. 0 0
      pages/schAdmin copy/soneincome/list.less
  40. 5 0
      pages/schAdmin copy/soneincome/list.wxml
  41. 0 0
      pages/schAdmin copy/soneincome/list.wxss
  42. 211 0
      pages/schAdmin copy/soneopen/add.js
  43. 0 0
      pages/schAdmin copy/soneopen/add.json
  44. 0 0
      pages/schAdmin copy/soneopen/add.less
  45. 122 0
      pages/schAdmin copy/soneopen/add.wxml
  46. 0 0
      pages/schAdmin copy/soneopen/add.wxss
  47. 137 0
      pages/schAdmin copy/soneopen/list.js
  48. 0 0
      pages/schAdmin copy/soneopen/list.json
  49. 0 0
      pages/schAdmin copy/soneopen/list.less
  50. 35 0
      pages/schAdmin copy/soneopen/list.wxml
  51. 0 0
      pages/schAdmin copy/soneopen/list.wxss
  52. 183 0
      pages/schAdmin copy/soneprivate/add.js
  53. 0 0
      pages/schAdmin copy/soneprivate/add.json
  54. 0 0
      pages/schAdmin copy/soneprivate/add.less
  55. 87 0
      pages/schAdmin copy/soneprivate/add.wxml
  56. 0 0
      pages/schAdmin copy/soneprivate/add.wxss
  57. 136 0
      pages/schAdmin copy/soneprivate/list.js
  58. 0 0
      pages/schAdmin copy/soneprivate/list.json
  59. 0 0
      pages/schAdmin copy/soneprivate/list.less
  60. 35 0
      pages/schAdmin copy/soneprivate/list.wxml
  61. 0 0
      pages/schAdmin copy/soneprivate/list.wxss
  62. 132 0
      pages/schAdmin copy/soneschool/list.js
  63. 0 0
      pages/schAdmin copy/soneschool/list.json
  64. 0 0
      pages/schAdmin copy/soneschool/list.less
  65. 71 0
      pages/schAdmin copy/soneschool/list.wxml
  66. 0 0
      pages/schAdmin copy/soneschool/list.wxss
  67. 177 0
      pages/schAdmin copy/sonestudent/add.js
  68. 0 0
      pages/schAdmin copy/sonestudent/add.json
  69. 0 0
      pages/schAdmin copy/sonestudent/add.less
  70. 69 0
      pages/schAdmin copy/sonestudent/add.wxml
  71. 0 0
      pages/schAdmin copy/sonestudent/add.wxss
  72. 179 0
      pages/schAdmin copy/sonestudent/list.js
  73. 0 0
      pages/schAdmin copy/sonestudent/list.json
  74. 0 0
      pages/schAdmin copy/sonestudent/list.less
  75. 49 0
      pages/schAdmin copy/sonestudent/list.wxml
  76. 0 0
      pages/schAdmin copy/sonestudent/list.wxss
  77. 67 0
      pages/schAdmin copy/sonestustat/list.js
  78. 0 0
      pages/schAdmin copy/sonestustat/list.json
  79. 0 0
      pages/schAdmin copy/sonestustat/list.less
  80. 5 0
      pages/schAdmin copy/sonestustat/list.wxml
  81. 0 0
      pages/schAdmin copy/sonestustat/list.wxss
  82. 66 0
      pages/schAdmin/coach/add.js
  83. 3 0
      pages/schAdmin/coach/add.json
  84. 0 0
      pages/schAdmin/coach/add.less
  85. 2 0
      pages/schAdmin/coach/add.wxml
  86. 1 0
      pages/schAdmin/coach/add.wxss
  87. 66 0
      pages/schAdmin/coach/list.js
  88. 3 0
      pages/schAdmin/coach/list.json
  89. 0 0
      pages/schAdmin/coach/list.less
  90. 2 0
      pages/schAdmin/coach/list.wxml
  91. 1 0
      pages/schAdmin/coach/list.wxss
  92. 66 0
      pages/schAdmin/coachexam/list.js
  93. 3 0
      pages/schAdmin/coachexam/list.json
  94. 0 0
      pages/schAdmin/coachexam/list.less
  95. 2 0
      pages/schAdmin/coachexam/list.wxml
  96. 1 0
      pages/schAdmin/coachexam/list.wxss
  97. 66 0
      pages/schAdmin/coachstat/list.js
  98. 3 0
      pages/schAdmin/coachstat/list.json
  99. 0 0
      pages/schAdmin/coachstat/list.less
  100. 0 0
      pages/schAdmin/coachstat/list.wxml

+ 30 - 27
app.json

@@ -1,10 +1,16 @@
 {
     "pages": [
+
         "pages/index/index",
         "pages/register/index",
+        "pages/other/agree",
+        "pages/home/index",
         "pages/school/index",
         "pages/school/info",
         "pages/smy/index",
+        "pages/club/index",
+        "pages/match/index",
+
         "pages/superAdmin/suser/list",
         "pages/superAdmin/suser/add",
         "pages/superAdmin/suser/bind",
@@ -16,32 +22,22 @@
         "pages/superAdmin/sstudent/add",
         "pages/superAdmin/system/dictionary",
         "pages/superAdmin/system/adddictionary",
-        "pages/club/index",
-        "pages/match/index",
-        "pages/other/agree",
-        "pages/home/index",
-        "pages/test/index",
-        "pages/logs/logs",
-        "pages/user/basic",
-        "pages/setting/basic",
-        "pages/setting/contact",
-        "pages/soneschool/list",
-        "pages/sonecoach/list",
-        "pages/sonecoach/add",
-        "pages/sonefee/list",
-        "pages/sonestudent/list",
-        "pages/sonestudent/add",
-        "pages/soneopen/list",
-        "pages/soneopen/add",
-        "pages/soneprivate/list",
-        "pages/soneprivate/add",
-        "pages/sonecourse/list",
-        "pages/soneincome/list",
-        "pages/sonestustat/list",
-        "pages/soneapply/list",
-        "pages/soneapply/info",
-        "pages/sonecoachstat/list",
-        
+
+        "pages/schAdmin/school/info",
+        "pages/schAdmin/coach/list",
+        "pages/schAdmin/coach/add",
+        "pages/schAdmin/coachexam/list",
+        "pages/schAdmin/student/list",
+        "pages/schAdmin/student/add",
+        "pages/schAdmin/studentexam/list",
+        "pages/schAdmin/course/list",
+        "pages/schAdmin/course/add",
+        "pages/schAdmin/coursetryexam/list",
+        "pages/schAdmin/courseexam/list",
+        "pages/schAdmin/income/list",
+        "pages/schAdmin/stustat/list",
+        "pages/schAdmin/coachstat/list",
+
         "pages/stuAdmin/archives/list",
         "pages/stuAdmin/school/list",
         "pages/stuAdmin/school/info",
@@ -51,7 +47,14 @@
         "pages/stuAdmin/course/info",
         "pages/stuAdmin/course/sign",
         "pages/stuAdmin/study/list",
-        "pages/stuAdmin/fee/list"
+        "pages/stuAdmin/fee/list",
+
+        "pages/user/basic",
+        "pages/setting/basic",
+        "pages/setting/contact",
+
+        "pages/test/index",
+        "pages/logs/logs"
     ],
     "usingComponents": {
         "van-sidebar": "@vant/weapp/sidebar/index",

+ 132 - 0
pages/schAdmin copy/soneapply/info.js

@@ -0,0 +1,132 @@
+const app = getApp()
+
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        frameStyle: { useTop: true, name: '审核入学', leftArrow: true, useBar: false },
+        id: '',
+        form: {},
+        student_id: '',
+    },
+    // 返回
+    back: function () {
+        wx.navigateBack({ delta: 1 })
+    },
+
+    // 审核
+    toEdit: function (e) {
+        const that = this;
+        let params = {};
+        const { result } = e.currentTarget.dataset;
+        wx.showModal({
+            title: '提示',
+            editable: true,
+            content: '',
+            placeholderText: '请输入审核意见',
+            async success(res) {
+                if (res.confirm) {
+                    params.result = result
+                    params.reason = res.content
+                    if (that.data.id) {
+                        const arr = await app.$post(`/safs/${that.data.id}`, 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 if (res.cancel) {
+                }
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+        const that = this;
+        that.setData({ id: options.id || '' })
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                that.setData({ school_id: res.data.info.id })
+                const aee = await app.$get(`/dict`, { code: "student_grade" });
+                if (aee.errcode == '0' && aee.total > 0) that.setData({ levelList: aee.data[0].list });
+                const ree = await app.$get(`/dict`, { code: "gender" });
+                if (ree.errcode == '0' && ree.total > 0) that.setData({ genderList: ree.data[0].list });
+                if (that.data.id) {
+                    const aee = await app.$get(`/safs/${that.data.id}`);
+                    if (aee.errcode == '0') {
+                        that.setData({ student_id: aee.data.student_id })
+                    }
+                    const arr = await app.$get(`/student/${that.data.student_id}`);
+                    if (arr.errcode == '0') {
+                        let gender = that.data.genderList.find(i => i.value == arr.data.gender)
+                        if (gender) arr.data.zhGender = gender.label;
+                        let level = that.data.levelList.find(i => i.value == arr.data.level)
+                        if (level) arr.data.zhLevel = level.label;
+                        that.setData({ form: arr.data });
+                    }
+                }
+            },
+            fail: res => {
+                wx.redirectTo({ url: '/pages/index/index', })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/soneapply/info.json → pages/schAdmin copy/soneapply/info.json


pages/soneapply/info.less → pages/schAdmin copy/soneapply/info.less


+ 62 - 0
pages/schAdmin copy/soneapply/info.wxml

@@ -0,0 +1,62 @@
+<mobile-main frameStyle="{{frameStyle}}" bind:back="back">
+    <view slot="info" class="container main">
+        <view class="one">
+            <scroll-view scroll-y="true" class="scroll-view">
+                <view class="list-scroll-view">
+                    <view class="content">
+                        <view class="label">头像:</view>
+                        <view class="value">
+                            <image src="{{form.icon&&form.icon.length>0?form.icon[0].url:''}}">
+                            </image>
+                        </view>
+                    </view>
+                    <view class="content">
+                        <view class="label">姓名:</view>
+                        <view class="value">{{form.name}}</view>
+                    </view>
+                    <view class="content">
+                        <view class="label">性别:</view>
+                        <view class="value">{{form.zhGender||'暂无'}} </view>
+                    </view>
+                    <view class="content">
+                        <view class="label">年龄:</view>
+                        <view class="value">{{form.age}}
+                        </view>
+                    </view>
+                    <view class="content">
+                        <view class="label">联系电话:</view>
+                        <view class="value">{{form.phone}}
+                        </view>
+                    </view>
+                    <view class="content">
+                        <view class="label">运动等级:</view>
+                        <view class="value">{{form.zhLevel||'暂无'}}
+                        </view>
+                    </view>
+                    <view class="content">
+                        <view class="label">学员简介:</view>
+                        <view class="value">{{form.brief}}
+                            <textarea name="brief" maxlength="-1" auto-height value="{{form.brief}}" disabled placeholder="请输入学员简介" />
+                        </view>
+                    </view>
+                    <view class="content">
+                        <view class="label">过往荣誉:</view>
+                        <view class="value">
+                            <textarea name="honer" maxlength="-1" auto-height value="{{form.honer}}" disabled placeholder="请输入过往荣誉" />
+                        </view>
+                    </view>
+                    <view class="content">
+                        <view class="label">训练经历:</view>
+                        <view class="value">
+                            <textarea name="exp" maxlength="-1" auto-height value="{{form.exp}}" disabled placeholder="请输入训练经历" />
+                        </view>
+                    </view>
+                </view>
+            </scroll-view>
+        </view>
+        <view class="btn">
+            <button type="primary" size="mini" bindtap="toEdit" data-result="1">通过</button>
+            <button type="primary" size="mini" bindtap="toEdit" data-result="-1">拒绝</button>
+        </view>
+    </view>
+</mobile-main>

pages/soneapply/info.wxss → pages/schAdmin copy/soneapply/info.wxss


+ 119 - 0
pages/schAdmin copy/soneapply/list.js

@@ -0,0 +1,119 @@
+const app = getApp()
+import QRCode from '../../utils/weapp-qrcode.js';
+
+Page({
+    data: {
+        frameStyle: { useTop: true, name: '学员信息', leftArrow: true, useBar: false },
+        list: [],
+        total: 0,
+        page: 0,
+        skip: 0,
+        limit: 5,
+        // 等级列表
+        levelList: [],
+    },
+    // 返回
+    back: function () {
+        wx.navigateBack({ delta: 1 })
+    },
+
+    // 审核
+    toEdit: function (e) {
+        const that = this;
+        let { item } = e.currentTarget.dataset;
+        that.setData({ skip: 0, page: 0, list: [] })
+        wx.navigateTo({ url: `/pages/soneapply/info?id=${item._id}` })
+    },
+
+    // 分页
+    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 }) }
+    },
+    // 返回
+    back(e) {
+        wx.navigateBack({ delta: 1 })
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) { },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                // 学员等级
+                let aee = await app.$get(`/dict`, { code: 'student_grade' });
+                if (aee.errcode == '0' && aee.total > 0) that.setData({ levelList: aee.data[0].list })
+                let info = { skip: that.data.skip, limit: that.data.limit, school_id: res.data.info.id };
+                const arr = await app.$get(`/safs`, { ...info });
+                if (arr.errcode == '0') {
+                    for (const val of arr.data) {
+                        let level = that.data.levelList.find(i => i.value == val.student_id_level)
+                        if (level) val.zhLevel = level.label;
+                    }
+                    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 () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/soneapply/list.json → pages/schAdmin copy/soneapply/list.json


pages/soneapply/list.less → pages/schAdmin copy/soneapply/list.less


+ 36 - 0
pages/schAdmin copy/soneapply/list.wxml

@@ -0,0 +1,36 @@
+<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>
+        <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="item">
+                        <view class="list_1">
+                            <view class="icon">
+                                <image src="{{item.student_id_icon&&item.student_id_icon.length>0?item.student_id_icon[0].url:''}}">
+                                </image>
+                            </view>
+                            <view class="content">
+                                <view class="name textOver">{{item.student_id_name||'学员姓名'}}</view>
+                                <view class="other">学员等级:<text>{{item.zhLevel||'一级'}}</text>
+                                </view>
+                                <view class="other">联系电话:{{item.student_id_phone||'暂无'}}
+                                </view>
+                                <view class="other">状态:
+                                    <text>{{item.result==1?'已通过':item.result==-1?'已拒绝':'未审核'}}</text>
+                                </view>
+                            </view>
+                        </view>
+                        <view class="btn">
+                            <button bindtap="toEdit" data-item="{{item}}">审核信息</button>
+                        </view>
+                    </view>
+                </view>
+            </scroll-view>
+        </view>
+    </view>
+</mobile-main>

pages/soneapply/list.wxss → pages/schAdmin copy/soneapply/list.wxss


+ 166 - 0
pages/schAdmin copy/sonecoach/add.js

@@ -0,0 +1,166 @@
+const app = getApp()
+import WxValidate from '../../utils/wxValidate'
+
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        frameStyle: { useTop: true, name: '教练信息', leftArrow: true, useBar: false },
+        id: '',
+        school_id: '',
+        form: { icon: [] },
+        // 性别
+        genderList: [],
+        // 等级列表
+        levelList: [],
+    },
+    initValidate() {
+        const rules = { icon: { required: true }, name: { required: true }, gender: { required: true }, age: { required: true }, phone: { required: true, tel: true } }
+        // 验证字段的提示信息,若不传则调用默认的信息
+        const messages = { icon: { required: '请选择头像', }, name: { required: '请输入用户姓名', }, gender: { required: '请选择性别', }, age: { required: '请输入年龄', }, phone: { required: '请输入联系电话', } };
+        this.WxValidate = new WxValidate(rules, messages)
+    },
+    // 返回
+    back: function () {
+        wx.navigateBack({ delta: 1 })
+    },
+    imgUpl: function (e) {
+        const that = this;
+        let data = that.data.form.icon;
+        data.push(e.detail)
+        that.setData({ 'form.icon': data })
+    },
+    // 删除图片
+    imgDel: function (e) {
+        const that = this;
+        let list = that.data.form.icon;
+        let arr = list.filter((i, index) => index != e.detail.index)
+        that.setData({ 'form.icon': arr })
+    },
+    // 选择性别
+    genderChange: function (e) {
+        const that = this;
+        let data = that.data.genderList[e.detail.value];
+        if (data) {
+            that.setData({ 'form.gender': data.value });
+            that.setData({ 'form.zhGender': data.label });
+        }
+    },
+    //选择等级
+    coachChange: function (e) {
+        const that = this;
+        let data = that.data.levelList[e.detail.value];
+        if (data) {
+            that.setData({ 'form.level': data.value });
+            that.setData({ 'form.zhLevel': data.label });
+        }
+    },
+
+    // 提交登录
+    onSubmit: async function (e) {
+        const that = this;
+        const params = e.detail.value;
+        const form = that.data.form;
+        params.icon = form.icon;
+        params.school_id = that.data.school_id;
+        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 (form._id) { arr = await app.$post(`/coach/${form._id}`, params); }
+            else { arr = await app.$post(`/coach`, params); console.log(params); }
+            if (arr.errcode == '0') { wx.showToast({ title: `维护信息完成`, icon: 'success', duration: 2000 }); that.back(); }
+            else wx.showToast({ title: `${error.msg}`, icon: 'error', duration: 2000 })
+        }
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+        const that = this;
+        that.setData({ id: options.id || '' })
+        //验证规则函数
+        that.initValidate();
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                that.setData({ school_id: res.data.info.id })
+                const aee = await app.$get(`/dict`, { code: "coach_grade" });
+                if (aee.errcode == '0' && aee.total > 0) that.setData({ levelList: aee.data[0].list });
+                const ree = await app.$get(`/dict`, { code: "gender" });
+                if (ree.errcode == '0' && ree.total > 0) that.setData({ genderList: ree.data[0].list });
+                if (that.data.id) {
+                    const arr = await app.$get(`/coach/${that.data.id}`);
+                    if (arr.errcode == '0') {
+                        let gender = that.data.genderList.find(i => i.value == arr.data.gender)
+                        if (gender) arr.data.zhGender = gender.label;
+                        let level = that.data.levelList.find(i => i.value == arr.data.level)
+                        if (level) arr.data.zhLevel = level.label;
+                        that.setData({ form: arr.data });
+                    }
+                }
+            },
+            fail: res => {
+                wx.redirectTo({ url: '/pages/index/index', })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/sonecoach/add.json → pages/schAdmin copy/sonecoach/add.json


pages/sonecoach/add.less → pages/schAdmin copy/sonecoach/add.less


+ 73 - 0
pages/schAdmin copy/sonecoach/add.wxml

@@ -0,0 +1,73 @@
+<mobile-main frameStyle="{{frameStyle}}" bind:back="back">
+    <view slot="info" class="container main">
+        <form catchsubmit="onSubmit">
+            <view class="one">
+                <scroll-view scroll-y="true" class="scroll-view">
+                    <view class="list-scroll-view">
+                        <view class="content">
+                            <view class="label">头像:</view>
+                            <view class="value">
+                                <upload list="{{form.icon}}" count="{{1}}" previewSize="{{30}}" bind:imgUpload="imgUpl" bind:imgDel="imgDel"></upload>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">姓名:</view>
+                            <view class="value">
+                                <input name="name" value="{{form.name}}" placeholder="请输入姓名" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <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.zhGender||'请选择性别'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">年龄:</view>
+                            <view class="value">
+                                <input type="number" name="age" value="{{form.age}}" placeholder="请输入年龄" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">联系电话:</view>
+                            <view class="value">
+                                <input type="number" name="phone" maxlength="11" value="{{form.phone}}" placeholder="请输入联系电话" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">教练等级:</view>
+                            <view class="value">
+                                <picker mode="selector" bindchange="coachChange" name="level" value="{{form.level}}" range="{{levelList}}" range-key="label">
+                                    <view class="picker">{{form.zhLevel||'请选择教练等级'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">教练简介:</view>
+                            <view class="value">
+                                <textarea name="brief" value="{{form.brief}}" auto-height maxlength="-1" placeholder="请输入教练简介" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">过往荣誉:</view>
+                            <view class="value">
+                                <textarea name="honor" value="{{form.honor}}" auto-height maxlength="-1" placeholder="请输入过往荣誉" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">教学经历:</view>
+                            <view class="value">
+                                <textarea name="exp" value="{{form.exp}}" auto-height maxlength="-1" placeholder="请输入教学经历" />
+                            </view>
+                        </view>
+                    </view>
+                </scroll-view>
+            </view>
+            <view class="btn">
+                <button type="primary" size="mini" formType="submit">提交保存</button>
+            </view>
+        </form>
+    </view>
+</mobile-main>

pages/sonecoach/add.wxss → pages/schAdmin copy/sonecoach/add.wxss


+ 188 - 0
pages/schAdmin copy/sonecoach/list.js

@@ -0,0 +1,188 @@
+const app = getApp()
+import QRCode from '../../utils/weapp-qrcode.js';
+
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        frameStyle: { useTop: true, name: '教练信息', leftArrow: true, useBar: false },
+        list: [],
+        total: 0,
+        page: 0,
+        skip: 0,
+        limit: 5,
+        // 等级列表
+        levelList: [],
+        // 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/sonecoach/add' })
+    },
+    // 修改
+    toEdit: function (e) {
+        const that = this;
+        let { item } = e.currentTarget.dataset;
+        that.setData({ skip: 0, page: 0, list: [] })
+        wx.navigateTo({ url: `/pages/sonecoach/add?id=${item.coach_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(`/coach/${item.coach_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='2'`;
+        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) { },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+        const that = this;
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                // 教练等级
+                let aee = await app.$get(`/dict`, { code: 'coach_grade' });
+                if (aee.errcode == '0' && aee.total > 0) that.setData({ levelList: aee.data[0].list })
+                let info = { skip: that.data.skip, limit: that.data.limit, school_id: res.data.info.id };
+                const arr = await app.$get(`/rcs`, { ...info });
+                if (arr.errcode == '0') {
+                    for (const val of arr.data) {
+                        let level = that.data.levelList.find(i => i.value == val.coach_id_level)
+                        if (level) val.zhLevel = level.label;
+                    }
+                    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' })
+            }
+        })
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/sonecoach/list.json → pages/schAdmin copy/sonecoach/list.json


pages/sonecoach/list.less → pages/schAdmin copy/sonecoach/list.less


+ 48 - 0
pages/schAdmin copy/sonecoach/list.wxml

@@ -0,0 +1,48 @@
+<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 {{item.coach_id_level=='0'?'level_0':item.coach_id_level=='1'?'level_1':item.coach_id_level=='2'?'level_2':'level_3'}}" wx:for="{{list}}" wx:key="item">
+                        <view class="list_1">
+                            <view class="icon">
+                                <image src="{{item.coach_id_icon&&item.coach_id_icon.length>0?item.coach_id_icon[0].url:''}}">
+                                </image>
+                            </view>
+                            <view class="content">
+                                <view class="name textOver">{{item.coach_id_name}}</view>
+                                <view class="other">教练等级:<text>{{item.zhLevel||'暂无'}}</text></view>
+                                <view class="other">联系电话:<text>{{item.coach_id_phone}}</text>
+                                </view>
+                            </view>
+                        </view>
+                        <view class="btn">
+                            <button bindtap="toEdit" data-item="{{item}}">信息维护</button>
+                            <button bindtap="toBind" data-item="{{item}}">绑定账号</button>
+                            <button bindtap="toDel" data-item="{{item}}">删除信息</button>
+                        </view>
+                    </view>
+                </view>
+            </scroll-view>
+        </view>
+    </view>
+</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>

pages/sonecoach/list.wxss → pages/schAdmin copy/sonecoach/list.wxss


+ 67 - 0
pages/schAdmin copy/sonecoachstat/list.js

@@ -0,0 +1,67 @@
+const app = getApp()
+Page({
+    data: {
+        frameStyle: { useTop: true, name: '教练统计', leftArrow: true, useBar: false },
+    },
+    // 返回
+    back(e) {
+        wx.navigateBack({ delta: 1 })
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) { },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => { },
+            fail: async res => {
+                // wx.redirectTo({ url: '/pages/index/index' })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () { },
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+        const that = this;
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/sonecoachstat/list.json → pages/schAdmin copy/sonecoachstat/list.json


pages/sonecoachstat/list.less → pages/schAdmin copy/sonecoachstat/list.less


+ 5 - 0
pages/schAdmin copy/sonecoachstat/list.wxml

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

pages/sonecoachstat/list.wxss → pages/schAdmin copy/sonecoachstat/list.wxss


+ 67 - 0
pages/schAdmin copy/sonecourse/list.js

@@ -0,0 +1,67 @@
+const app = getApp()
+Page({
+    data: {
+        frameStyle: { useTop: true, name: '审批课学员', leftArrow: true, useBar: false },
+    },
+    // 返回
+    back(e) {
+        wx.navigateBack({ delta: 1 })
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) { },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => { },
+            fail: async res => {
+                // wx.redirectTo({ url: '/pages/index/index' })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () { },
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+        const that = this;
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/sonecourse/list.json → pages/schAdmin copy/sonecourse/list.json


pages/sonecourse/list.less → pages/schAdmin copy/sonecourse/list.less


+ 5 - 0
pages/schAdmin copy/sonecourse/list.wxml

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

pages/sonecourse/list.wxss → pages/schAdmin copy/sonecourse/list.wxss


+ 87 - 0
pages/schAdmin copy/sonefee/list.js

@@ -0,0 +1,87 @@
+const app = getApp()
+Page({
+    data: {
+        frameStyle: { useTop: true, name: '审批教练费', leftArrow: true, useBar: false },
+        list: [{ }, {}],
+        total: 0,
+        page: 0,
+        skip: 0,
+        limit: 5,
+    },
+    // 返回
+    back(e) {
+        wx.navigateBack({ delta: 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) { },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => { },
+            fail: async res => {
+                // wx.redirectTo({ url: '/pages/index/index' })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () { },
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+        const that = this;
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/sonefee/list.json → pages/schAdmin copy/sonefee/list.json


pages/sonefee/list.less → pages/schAdmin copy/sonefee/list.less


+ 36 - 0
pages/schAdmin copy/sonefee/list.wxml

@@ -0,0 +1,36 @@
+<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>
+        <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="item">
+                        <view class="list_1">
+                            <view class="icon">
+                                <image src="{{item.icon&&item.icon.length>0?item.icon[0].url:''}}">
+                                </image>
+                            </view>
+                            <view class="content">
+                                <view class="name textOver">{{item.name||'教练姓名'}}</view>
+                                <view class="other">提现金额:<text>{{item.money||'0.00'}}元</text>
+                                </view>
+                                <view class="other">申请原因:<text>{{item.yy||'暂无'}}</text>
+                                </view>
+                                <view class="other">申请时间:{{item.time||'暂无'}}
+                                </view>
+                            </view>
+                        </view>
+                        <view class="btn">
+                            <button bindtap="toEdit">通过</button>
+                            <button bindtap="toDel">拒绝</button>
+                        </view>
+                    </view>
+                </view>
+            </scroll-view>
+        </view>
+    </view>
+</mobile-main>

pages/sonefee/list.wxss → pages/schAdmin copy/sonefee/list.wxss


+ 67 - 0
pages/schAdmin copy/soneincome/list.js

@@ -0,0 +1,67 @@
+const app = getApp()
+Page({
+    data: {
+        frameStyle: { useTop: true, name: '收入统计', leftArrow: true, useBar: false },
+    },
+    // 返回
+    back(e) {
+        wx.navigateBack({ delta: 1 })
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) { },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => { },
+            fail: async res => {
+                // wx.redirectTo({ url: '/pages/index/index' })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () { },
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+        const that = this;
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/soneincome/list.json → pages/schAdmin copy/soneincome/list.json


pages/soneincome/list.less → pages/schAdmin copy/soneincome/list.less


+ 5 - 0
pages/schAdmin copy/soneincome/list.wxml

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

pages/soneincome/list.wxss → pages/schAdmin copy/soneincome/list.wxss


+ 211 - 0
pages/schAdmin copy/soneopen/add.js

@@ -0,0 +1,211 @@
+const app = getApp()
+import WxValidate from '../../utils/wxValidate'
+
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        frameStyle: { useTop: true, name: '公开课信息', leftArrow: true, useBar: false },
+        id: '',
+        school_id: '',
+        form: {
+            // 教练
+            coach_id: [],
+        },
+        // 状态列表
+        statusList: [],
+        coachForm: {},
+
+        // dialog弹框
+        dialog: { title: '添加教练', show: false, type: '1' },
+        // 教练列表
+        coachList: [],
+    },
+    initValidate() {
+        const rules = { title: { required: true }, brief: { required: true }, coach_id: { required: true }, limit: { required: true }, start_date: { required: true }, start_time: { required: true }, end_date: { required: true }, end_time: { required: true }, status: { required: true } }
+        // 验证字段的提示信息,若不传则调用默认的信息
+        const messages = { title: { required: '请输入课程标题', }, brief: { required: '请输入简介', }, coach_id: { required: '请选择教练', }, limit: { required: '请输入人数上限', }, start_date: { required: '请选择开始日期', }, start_time: { required: '请选择开始时间', }, end_date: { required: '请选择结束日期', }, end_time: { required: '请选择结束时间', }, status: { required: '请选择状态', } };
+        this.WxValidate = new WxValidate(rules, messages)
+    },
+    // 返回
+    back: function () {
+        wx.navigateBack({ delta: 1 })
+    },
+    // 选择性别
+    statusChange: function (e) {
+        const that = this;
+        let data = that.data.statusList[e.detail.value];
+        if (data) {
+            that.setData({ 'form.status': data.value });
+            that.setData({ 'form.zhstatus': data.label });
+        }
+    },
+    // 选择教练
+    coachChange: function (e) {
+        const that = this;
+        let data = that.data.coachList[e.detail.value];
+        if (data) {
+            that.setData({ 'coachForm.coach_id': data.coach_id });
+            that.setData({ 'coachForm.zhcoach': data.coach_id_name });
+        }
+    },
+    // 添加教练
+    toChange: function (e) {
+        const that = this;
+        that.setData({ dialog: { title: '添加教练', show: true, type: '1' } })
+    },
+    // 保存教练
+    coachSubmit: function (e) {
+        const that = this;
+        let data = e.detail.value;
+        let coachList = that.data.coachList;
+        let coach_id = [...that.data.form.coach_id];
+        let arr = coachList.find((i) => i.coach_id == data.coach_id);
+        if (arr) coach_id.push({ id: arr.coach_id, name: arr.coach_id_name, money: data.money })
+        that.setData({ 'form.coach_id': coach_id })
+        that.setData({ coachForm: {} })
+        that.setData({ dialog: { title: '添加教练', show: false, type: '1' } })
+    },
+    // 关闭弹框
+    toClose: function () {
+        const that = this;
+        that.setData({ form: {} })
+        that.setData({ dialog: { title: '账号绑定', show: false, type: '1' } })
+    },
+    // 开始上课日期
+    startdateChange: function (e) {
+        const that = this;
+        that.setData({ 'form.start_date': e.detail.value })
+    },
+    // 开始上课时间
+    starttimeChange: function (e) {
+        const that = this;
+        that.setData({ 'form.start_time': e.detail.value })
+    },
+    // 结束上课日期
+    enddateChange: function (e) {
+        const that = this;
+        that.setData({ 'form.end_date': e.detail.value })
+    },
+    // 结束上课时间
+    endtimeChange: function (e) {
+        const that = this;
+        that.setData({ 'form.end_time': e.detail.value })
+    },
+    // 提交保存
+    onSubmit: async function (e) {
+        const that = this;
+        const params = e.detail.value;
+        const form = that.data.form;
+        params.school_id = that.data.school_id;
+        params.time_start = form.start_date + '-' + form.start_time;
+        params.time_end = form.end_date + '-' + form.end_time;
+        params.coach_id = form.coach_id;
+        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 (form._id) { arr = await app.$post(`/lessonPublic/${form._id}`, params); }
+            else { arr = await app.$post(`/lessonPublic`, params); }
+            if (arr.errcode == '0') { wx.showToast({ title: `维护信息完成`, icon: 'success', duration: 2000 }); that.back(); }
+            else wx.showToast({ title: `${error.msg}`, icon: 'error', duration: 2000 })
+        }
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+        const that = this;
+        that.setData({ id: options.id || '' })
+        //验证规则函数
+        that.initValidate();
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                that.setData({ school_id: res.data.info.id })
+                const aee = await app.$get(`/dict`, { code: "lesson_status" });
+                if (aee.errcode == '0' && aee.total > 0) that.setData({ statusList: aee.data[0].list });
+                const abb = await app.$get(`/rcs`, { school_id: res.data.info.id });
+                if (abb.errcode == '0' && aee.total > 0) {
+                    that.setData({ coachList: abb.data })
+                }
+                if (that.data.id) {
+                    const arr = await app.$get(`/lessonPublic/${that.data.id}`);
+                    if (arr.errcode == '0') {
+                        // 状态
+                        let status = that.data.statusList.find(i => i.value == arr.data.status)
+                        if (status) arr.data.zhstatus = status.label;
+                        // 开始时间
+                        arr.data.start_date = arr.data.time_start.slice(0, 10);
+                        arr.data.start_time = arr.data.time_start.slice(11, arr.data.time_start.length);
+                        // 结束时间
+                        arr.data.end_date = arr.data.time_end.slice(0, 10);
+                        arr.data.end_time = arr.data.time_end.slice(11, arr.data.time_end.length);
+                        that.setData({ form: arr.data });
+                    }
+                }
+            },
+            fail: res => {
+                wx.redirectTo({ url: '/pages/index/index', })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/soneopen/add.json → pages/schAdmin copy/soneopen/add.json


pages/soneopen/add.less → pages/schAdmin copy/soneopen/add.less


+ 122 - 0
pages/schAdmin copy/soneopen/add.wxml

@@ -0,0 +1,122 @@
+<mobile-main frameStyle="{{frameStyle}}" bind:back="back">
+    <view slot="info" class="container main">
+        <form catchsubmit="onSubmit">
+            <view class="one">
+                <scroll-view scroll-y="true" class="scroll-view">
+                    <view class="list-scroll-view">
+                        <view class="content">
+                            <view class="label">课程标题:</view>
+                            <view class="value">
+                                <input name="title" value="{{form.title}}" placeholder="请输入课程标题" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">简介:</view>
+                            <view class="value">
+                                <textarea name="brief" maxlength="-1" auto-height value="{{form.brief}}" placeholder="请输入学员简介" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">教练:</view>
+                            <view class="value">
+                                <button type="primary" size="mini" bindtap="toChange">请添加教练</button>
+                                <view class="list" wx:for="{{form.coach_id}}" wx:key="item">
+                                    <view>{{item.name}}</view>
+                                    <view> 金额:{{item.money}}</view>
+                                </view>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">人数上限:</view>
+                            <view class="value">
+                                <input name="limit" type="number" value="{{form.limit}}" placeholder="请输入人数上限" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">上课开始日期:</view>
+                            <view class="value">
+                                <picker mode="date" name="start_date" value="{{form.start_date}}" bindchange="startdateChange">
+                                    <view class="picker">{{form.start_date||'请选择上课开始日期'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">上课开始时间:</view>
+                            <view class="value">
+                                <picker mode="time" name="start_time" value="{{form.start_time}}" bindchange="starttimeChange">
+                                    <view class="picker">{{form.start_time||'请选择上课开始时间'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">上课结束日期:</view>
+                            <view class="value">
+                                <picker mode="date" name="end_date" value="{{form.end_date}}" bindchange="enddateChange">
+                                    <view class="picker">{{form.end_date||'请选择上课结束日期'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">上课结束时间:</view>
+                            <view class="value">
+                                <picker mode="time" name="end_time" value="{{form.end_time}}" bindchange="endtimeChange">
+                                    <view class="picker">{{form.end_time||'请选择上课结束时间'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">状态:</view>
+                            <view class="value">
+                                <picker mode="selector" bindchange="statusChange" name="status" value="{{form.status}}" range="{{statusList}}" range-key="label">
+                                    <view class="picker">{{form.zhstatus||'请选择状态'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                    </view>
+                </scroll-view>
+            </view>
+            <view class="btn">
+                <button type="primary" size="mini" formType="submit">提交保存</button>
+            </view>
+        </form>
+    </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="coachSubmit">
+                <view class="content">
+                    <view class="label">教练:</view>
+                    <view class="value">
+                        <picker mode="selector" bindchange="coachChange" name="coach_id" value="{{coachForm.coach_id}}" range="{{coachList}}" range-key="coach_id_name">
+                            <view class="picker">{{coachForm.zhcoach||'请选择教练'}}</view>
+                        </picker>
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">价格:</view>
+                    <view class="value">
+                        <input name="money" value="{{coachForm.money}}" placeholder="请输入价格" />
+                    </view>
+                </view>
+                <view class="btn">
+                    <button type="primary" size="mini" formType="submit">保存</button>
+                </view>
+            </form>
+            <!-- <view>
+                <checkbox-group bindchange="memChange">
+                    <view class="coachList" wx:for="{{coachList}}" wx:key="item">
+                        <label>
+                            <text>{{item.coach_id_name}}</text>
+                            <checkbox value="{{item.coach_id}}" checked="{{item.checked}}" />
+                        </label>
+                    </view>
+                </checkbox-group>
+            </view>
+            <view class="btn">
+                <button type="primary" size="mini" bindtap="memfirmSubmit">确定</button>
+                <button type="warn" size="mini" bindtap="memClose">取消</button>
+            </view> -->
+        </view>
+    </view>
+</dialog>

pages/soneopen/add.wxss → pages/schAdmin copy/soneopen/add.wxss


+ 137 - 0
pages/schAdmin copy/soneopen/list.js

@@ -0,0 +1,137 @@
+const app = getApp()
+Page({
+    data: {
+        frameStyle: { useTop: true, name: '公开课', leftArrow: true, useBar: false },
+        list: [],
+        total: 0,
+        page: 0,
+        skip: 0,
+        limit: 5,
+        statusList: [],
+    },
+    // 返回
+    back(e) {
+        wx.navigateBack({ delta: 1 })
+    },
+    // 添加
+    toAdd() {
+        const that = this;
+        that.setData({ skip: 0, page: 0, list: [] })
+        wx.navigateTo({ url: '/pages/soneopen/add' })
+    },
+    // 修改
+    toEdit: function (e) {
+        const that = this;
+        let { item } = e.currentTarget.dataset;
+        that.setData({ skip: 0, page: 0, list: [] })
+        wx.navigateTo({ url: `/pages/soneopen/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(`/lessonPublic/${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 })
+                    }
+                }
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) { },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                const aee = await app.$get(`/dict`, { code: "lesson_status" });
+                if (aee.errcode == '0' && aee.total > 0) that.setData({ statusList: aee.data[0].list });
+                let info = { skip: that.data.skip, limit: that.data.limit, school_id: res.data.info.id };
+                const arr = await app.$get(`/lessonPublic`, { ...info });
+                if (arr.errcode == '0') {
+                    for (const val of arr.data) {
+                        let level = that.data.statusList.find(i => i.value == val.status)
+                        if (level) val.zhstatus = level.label;
+                    }
+                    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' })
+            }
+        })
+    },
+    // 分页
+    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 }) }
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () { },
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+        const that = this;
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/soneopen/list.json → pages/schAdmin copy/soneopen/list.json


pages/soneopen/list.less → pages/schAdmin copy/soneopen/list.less


+ 35 - 0
pages/schAdmin copy/soneopen/list.wxml

@@ -0,0 +1,35 @@
+<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="item">
+                        <view class="list_1">
+                            <view class="content">
+                                <view class="name textOver">{{item.title||'暂无'}}</view>
+                                <view class="other">公开课状态:<text>{{item.zhstatus||'暂无'}}</text>
+                                </view>
+                                <view class="other">公开课时间:{{item.time_start||'暂无'}}
+                                </view>
+                                <view class="other">公开课人数上限:{{item.limit||'暂无'}}
+                                </view>
+                            </view>
+                        </view>
+                        <view class="btn">
+                            <button bindtap="toEdit" data-item="{{item}}">信息维护</button>
+                            <button bindtap="toDel" data-item="{{item}}">删除信息</button>
+                        </view>
+                    </view>
+                </view>
+            </scroll-view>
+        </view>
+    </view>
+</mobile-main>

pages/soneopen/list.wxss → pages/schAdmin copy/soneopen/list.wxss


+ 183 - 0
pages/schAdmin copy/soneprivate/add.js

@@ -0,0 +1,183 @@
+const app = getApp()
+import WxValidate from '../../utils/wxValidate'
+
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+        frameStyle: { useTop: true, name: '私教课信息', leftArrow: true, useBar: false },
+        id: '',
+        school_id: '',
+        form: {},
+        // 状态列表
+        statusList: [],
+        // 教练列表
+        coachList: [],
+    },
+    initValidate() {
+        const rules = { title: { required: true }, brief: { required: true }, coach_id: { required: true }, limit: { required: true }, start_date: { required: true }, start_time: { required: true }, end_date: { required: true }, end_time: { required: true }, status: { required: true } }
+        // 验证字段的提示信息,若不传则调用默认的信息
+        const messages = { title: { required: '请输入课程标题', }, brief: { required: '请输入简介', }, coach_id: { required: '请选择教练', }, limit: { required: '请输入人数上限', }, start_date: { required: '请选择开始日期', }, start_time: { required: '请选择开始时间', }, end_date: { required: '请选择结束日期', }, end_time: { required: '请选择结束时间', }, status: { required: '请选择状态', } };
+        this.WxValidate = new WxValidate(rules, messages)
+    },
+    // 返回
+    back: function () {
+        wx.navigateBack({ delta: 1 })
+    },
+    // 选择性别
+    statusChange: function (e) {
+        const that = this;
+        let data = that.data.statusList[e.detail.value];
+        if (data) {
+            that.setData({ 'form.status': data.value });
+            that.setData({ 'form.zhstatus': data.label });
+        }
+    },
+    // 选择教练
+    coachChange: function (e) {
+        const that = this;
+        let data = that.data.coachList[e.detail.value];
+        if (data) {
+            that.setData({ 'form.coach_id': data.coach_id });
+            that.setData({ 'form.zhcoach': data.coach_id_name });
+        }
+    },
+    // 开始上课日期
+    startdateChange: function (e) {
+        const that = this;
+        that.setData({ 'form.start_date': e.detail.value })
+    },
+    // 开始上课时间
+    starttimeChange: function (e) {
+        const that = this;
+        that.setData({ 'form.start_time': e.detail.value })
+    },
+    // 结束上课日期
+    enddateChange: function (e) {
+        const that = this;
+        that.setData({ 'form.end_date': e.detail.value })
+    },
+    // 结束上课时间
+    endtimeChange: function (e) {
+        const that = this;
+        that.setData({ 'form.end_time': e.detail.value })
+    },
+    // 提交保存
+    onSubmit: async function (e) {
+        const that = this;
+        const params = e.detail.value;
+        const form = that.data.form;
+        params.school_id = that.data.school_id;
+        params.time_start = form.start_date + '-' + form.start_time;
+        params.time_end = form.end_date + '-' + form.end_time;
+        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 (form._id) { arr = await app.$post(`/lessonPrivate/${form._id}`, params); }
+            else { arr = await app.$post(`/lessonPrivate`, params); }
+            if (arr.errcode == '0') { wx.showToast({ title: `维护信息完成`, icon: 'success', duration: 2000 }); that.back(); }
+            else wx.showToast({ title: `${error.msg}`, icon: 'error', duration: 2000 })
+        }
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) {
+        const that = this;
+        that.setData({ id: options.id || '' })
+        //验证规则函数
+        that.initValidate();
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                that.setData({ school_id: res.data.info.id })
+                const aee = await app.$get(`/dict`, { code: "lesson_status" });
+                if (aee.errcode == '0' && aee.total > 0) that.setData({ statusList: aee.data[0].list });
+                const abb = await app.$get(`/rcs`, { school_id: res.data.info.id });
+                if (abb.errcode == '0' && aee.total > 0) {
+                    that.setData({ coachList: abb.data })
+                }
+                if (that.data.id) {
+                    const arr = await app.$get(`/lessonPrivate/${that.data.id}`);
+                    if (arr.errcode == '0') {
+                        // 状态
+                        let status = that.data.statusList.find(i => i.value == arr.data.status)
+                        if (status) arr.data.zhstatus = status.label;
+                        // 教练
+                        let coach_id = that.data.coachList.find(i => i.coach_id == arr.data.coach_id)
+                        if (coach_id) arr.data.zhcoach = coach_id.coach_id_name;
+                        // 开始时间
+                        arr.data.start_date = arr.data.time_start.slice(0, 10);
+                        arr.data.start_time = arr.data.time_start.slice(11, arr.data.time_start.length);
+                        // 结束时间
+                        arr.data.end_date = arr.data.time_end.slice(0, 10);
+                        arr.data.end_time = arr.data.time_end.slice(11, arr.data.time_end.length);
+                        that.setData({ form: arr.data });
+                    }
+                }
+            },
+            fail: res => {
+                wx.redirectTo({ url: '/pages/index/index', })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/soneprivate/add.json → pages/schAdmin copy/soneprivate/add.json


pages/soneprivate/add.less → pages/schAdmin copy/soneprivate/add.less


+ 87 - 0
pages/schAdmin copy/soneprivate/add.wxml

@@ -0,0 +1,87 @@
+<mobile-main frameStyle="{{frameStyle}}" bind:back="back">
+    <view slot="info" class="container main">
+        <form catchsubmit="onSubmit">
+            <view class="one">
+                <scroll-view scroll-y="true" class="scroll-view">
+                    <view class="list-scroll-view">
+                        <view class="content">
+                            <view class="label">课程标题:</view>
+                            <view class="value">
+                                <input name="title" value="{{form.title}}" placeholder="请输入课程标题" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">简介:</view>
+                            <view class="value">
+                                <textarea name="brief" maxlength="-1" auto-height value="{{form.brief}}" placeholder="请输入学员简介" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">教练:</view>
+                            <view class="value">
+                                <picker mode="selector" bindchange="coachChange" name="coach_id" value="{{form.coach_id}}" range="{{coachList}}" range-key="coach_id_name">
+                                    <view class="picker">{{form.zhcoach||'请选择教练'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">金额:</view>
+                            <view class="value">
+                                <input name="money" type="number" value="{{form.money}}" placeholder="请输入金额" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">人数上限:</view>
+                            <view class="value">
+                                <input name="limit" type="number" value="{{form.limit}}" placeholder="请输入人数上限" />
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">上课开始日期:</view>
+                            <view class="value">
+                                <picker mode="date" name="start_date" value="{{form.start_date}}" bindchange="startdateChange">
+                                    <view class="picker">{{form.start_date||'请选择上课开始日期'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">上课开始时间:</view>
+                            <view class="value">
+                                <picker mode="time" name="start_time" value="{{form.start_time}}" bindchange="starttimeChange">
+                                    <view class="picker">{{form.start_time||'请选择上课开始时间'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">上课结束日期:</view>
+                            <view class="value">
+                                <picker mode="date" name="end_date" value="{{form.end_date}}" bindchange="enddateChange">
+                                    <view class="picker">{{form.end_date||'请选择上课结束日期'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">上课结束时间:</view>
+                            <view class="value">
+                                <picker mode="time" name="end_time" value="{{form.end_time}}" bindchange="endtimeChange">
+                                    <view class="picker">{{form.end_time||'请选择上课结束时间'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                        <view class="content">
+                            <view class="label">状态:</view>
+                            <view class="value">
+                                <picker mode="selector" bindchange="statusChange" name="status" value="{{form.status}}" range="{{statusList}}" range-key="label">
+                                    <view class="picker">{{form.zhstatus||'请选择状态'}}</view>
+                                </picker>
+                            </view>
+                        </view>
+                    </view>
+                </scroll-view>
+            </view>
+            <view class="btn">
+                <button type="primary" size="mini" formType="submit">提交保存</button>
+            </view>
+        </form>
+    </view>
+</mobile-main>

pages/soneprivate/add.wxss → pages/schAdmin copy/soneprivate/add.wxss


+ 136 - 0
pages/schAdmin copy/soneprivate/list.js

@@ -0,0 +1,136 @@
+const app = getApp()
+Page({
+    data: {
+        frameStyle: { useTop: true, name: '私教课', leftArrow: true, useBar: false },
+        list: [],
+        total: 0,
+        page: 0,
+        skip: 0,
+        limit: 5,
+        statusList: [],
+    },
+    // 返回
+    back(e) {
+        wx.navigateBack({ delta: 1 })
+    },
+    // 添加
+    toAdd() {
+        const that = this;
+        that.setData({ skip: 0, page: 0, list: [] })
+        wx.navigateTo({ url: '/pages/soneprivate/add' })
+    },
+    // 修改
+    toEdit: function (e) {
+        const that = this;
+        let { item } = e.currentTarget.dataset;
+        that.setData({ skip: 0, page: 0, list: [] })
+        wx.navigateTo({ url: `/pages/soneprivate/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(`/lessonPrivate/${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 => {
+                const aee = await app.$get(`/dict`, { code: "lesson_status" });
+                if (aee.errcode == '0' && aee.total > 0) that.setData({ statusList: aee.data[0].list });
+                let info = { skip: that.data.skip, limit: that.data.limit, school_id: res.data.info.id };
+                const arr = await app.$get(`/lessonPrivate`, { ...info });
+                if (arr.errcode == '0') {
+                    for (const val of arr.data) {
+                        let level = that.data.statusList.find(i => i.value == val.status)
+                        if (level) val.zhstatus = level.label;
+                    }
+                    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 () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/soneprivate/list.json → pages/schAdmin copy/soneprivate/list.json


pages/soneprivate/list.less → pages/schAdmin copy/soneprivate/list.less


+ 35 - 0
pages/schAdmin copy/soneprivate/list.wxml

@@ -0,0 +1,35 @@
+<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="item">
+                        <view class="list_1">
+                            <view class="content">
+                                <view class="name textOver">{{item.title||'暂无'}}</view>
+                                <view class="other">公开课状态:<text>{{item.zhstatus||'暂无'}}</text>
+                                </view>
+                                <view class="other">公开课时间:{{item.time_start||'暂无'}}
+                                </view>
+                                <view class="other">公开课人数上限:{{item.limit||'暂无'}}
+                                </view>
+                            </view>
+                        </view>
+                        <view class="btn">
+                            <button bindtap="toEdit" data-item="{{item}}">信息维护</button>
+                            <button bindtap="toDel" data-item="{{item}}">删除信息</button>
+                        </view>
+                    </view>
+                </view>
+            </scroll-view>
+        </view>
+    </view>
+</mobile-main>

pages/soneprivate/list.wxss → pages/schAdmin copy/soneprivate/list.wxss


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 132 - 0
pages/schAdmin copy/soneschool/list.js


pages/soneschool/list.json → pages/schAdmin copy/soneschool/list.json


pages/soneschool/list.less → pages/schAdmin copy/soneschool/list.less


+ 71 - 0
pages/schAdmin copy/soneschool/list.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>

pages/soneschool/list.wxss → pages/schAdmin copy/soneschool/list.wxss


+ 177 - 0
pages/schAdmin copy/sonestudent/add.js

@@ -0,0 +1,177 @@
+const app = getApp()
+import WxValidate from '../../utils/wxValidate';
+Page({
+    data: {
+        frameStyle: { useTop: true, name: '学员信息管理', leftArrow: true, useBar: false },
+        id: '',
+        school_id: '',
+        form: { icon: [] },
+        // 性别
+        genderList: [],
+        //运动等级
+        levelList: [],
+    },
+    initValidate() {
+        const rules = { icon: { required: true }, name: { required: true }, age: { required: true }, gender: { required: true }, phone: { required: true, tel: true } }
+        // 验证字段的提示信息,若不传则调用默认的信息
+        const messages = { icon: { required: '请选择头像' }, name: { required: '请输入学员姓名' }, age: { required: '请输入年龄' }, gender: { required: '请选择性别' }, phone: { required: '请输入联系电话' } };
+        this.WxValidate = new WxValidate(rules, messages)
+    },
+    // 返回
+    back: function () {
+        wx.navigateBack({ delta: 1 })
+    },
+    //上传图片
+    imgUpl: function (e) {
+        const that = this;
+        let data = that.data.form.icon;
+        data.push(e.detail)
+        that.setData({ 'form.icon': data })
+    },
+    // 删除图片
+    imgDel: function (e) {
+        const that = this;
+        let list = that.data.form.icon;
+        let arr = list.filter((i, index) => index != e.detail.index)
+        that.setData({ 'form.icon': arr })
+    },
+    // 选择性别
+    genderChange: function (e) {
+        const that = this;
+        let data = that.data.genderList[e.detail.value];
+        if (data) {
+            that.setData({ 'form.gender': data.value });
+            that.setData({ 'form.zhGender': data.label });
+        }
+    },
+    // 选择等级
+    levelChange: function (e) {
+        const that = this;
+        let data = that.data.levelList[e.detail.value];
+        if (data) {
+            that.setData({ 'form.level': data.value });
+            that.setData({ 'form.zhLevel': data.label });
+        }
+    },
+    //提交
+    onSubmit: async function (e) {
+        const that = this;
+        const form = that.data.form;
+        const params = e.detail.value;
+        params.icon = form.icon;
+        params.school_id = that.data.school_id;
+        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 (form._id) arr = await app.$post(`/student/${form._id}`, params);
+            else arr = await app.$post(`/student`, params)
+            if (arr.errcode == '0') { wx.showToast({ title: `维护信息完成`, icon: 'success', duration: 2000 }); that.back(); }
+            else wx.showToast({ title: `${errmsg}`, icon: 'error', duration: 2000 })
+        }
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: async function (options) {
+        const that = this;
+        that.setData({ id: options.id || '' })
+        //验证规则函数
+        that.initValidate();
+        // 查询其他信息
+        await that.searchOther();
+        // 监听用户是否登录
+        await 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 })
+        }
+        // 运动等级
+        arr = await app.$get(`/dict`, { code: 'student_grade' });
+        if (arr.errcode == '0' && arr.total > 0) {
+            let list = arr.data[0].list;
+            that.setData({ levelList: list })
+        }
+    },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        let genderList = that.data.genderList;
+        let levelList = that.data.levelList;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                that.setData({ school_id: res.data.info.id })
+                if (that.data.id) {
+                    const arr = await app.$get(`/student/${that.data.id}`);
+                    if (arr.errcode == '0') {
+                        let gender = genderList.find(i => i.value == arr.data.gender)
+                        if (gender) arr.data.zhGender = gender.label;
+                        let level = levelList.find(i => i.value == arr.data.level)
+                        if (level) arr.data.zhLevel = level.label;
+                        that.setData({ form: arr.data });
+                    }
+                }
+            },
+            fail: async res => {
+                wx.redirectTo({ url: '/pages/index/index' })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/sonestudent/add.json → pages/schAdmin copy/sonestudent/add.json


pages/sonestudent/add.less → pages/schAdmin copy/sonestudent/add.less


+ 69 - 0
pages/schAdmin copy/sonestudent/add.wxml

@@ -0,0 +1,69 @@
+<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">
+                        <upload list="{{form.icon}}" count="{{1}}" previewSize="{{30}}" bind:imgUpload="imgUpl" bind:imgDel="imgDel"></upload>
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">姓名:</view>
+                    <view class="value">
+                        <input type="text" name="name" value="{{form.name}}" placeholder="请输入姓名" />
+                    </view>
+                </view>
+                <view class="content">
+                    <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.zhGender||'请选择性别'}}</view>
+                        </picker>
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">年龄:</view>
+                    <view class="value">
+                        <input type="number" name="age" value="{{form.age}}" placeholder="请输入年龄" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">联系电话:</view>
+                    <view class="value">
+                        <input type="text" name="phone" maxlength="11" value="{{form.phone}}" placeholder="请输入联系电话" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">运动等级:</view>
+                    <view class="value">
+                        <picker mode="selector" bindchange="levelChange" name="level" value="{{form.level}}" range="{{levelList}}" range-key="label">
+                            <view class="picker">{{form.zhLevel||'请选择运动等级'}}</view>
+                        </picker>
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">学员简介:</view>
+                    <view class="value">
+                        <textarea name="brief" maxlength="-1" auto-height value="{{form.brief}}" placeholder="请输入学员简介" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">过往荣誉:</view>
+                    <view class="value">
+                        <textarea name="honer" maxlength="-1" auto-height value="{{form.honer}}" placeholder="请输入过往荣誉" />
+                    </view>
+                </view>
+                <view class="content">
+                    <view class="label">训练经历:</view>
+                    <view class="value">
+                        <textarea name="exp" maxlength="-1" auto-height value="{{form.exp}}" placeholder="请输入训练经历" />
+                    </view>
+                </view>
+                <view class="btn">
+                    <button type="primary" size="mini" formType="submit">提交保存</button>
+                </view>
+            </form>
+        </view>
+    </view>
+</mobile-main>

pages/sonestudent/add.wxss → pages/schAdmin copy/sonestudent/add.wxss


+ 179 - 0
pages/schAdmin copy/sonestudent/list.js

@@ -0,0 +1,179 @@
+const app = getApp()
+import QRCode from '../../utils/weapp-qrcode.js';
+
+Page({
+    data: {
+        frameStyle: { useTop: true, name: '学员信息', leftArrow: true, useBar: false },
+        list: [],
+        total: 0,
+        page: 0,
+        skip: 0,
+        limit: 5,
+        // 等级列表
+        levelList: [],
+        // 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/sonestudent/add' })
+    },
+    // 修改
+    toEdit: function (e) {
+        const that = this;
+        let { item } = e.currentTarget.dataset;
+        that.setData({ skip: 0, page: 0, list: [] })
+        wx.navigateTo({ url: `/pages/sonestudent/add?id=${item.student_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(`/rss/${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(`/student/${item.student_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='2'`;
+        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 }) }
+    },
+    // 返回
+    back(e) {
+        wx.navigateBack({ delta: 1 })
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) { },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => {
+                // 学员等级
+                let aee = await app.$get(`/dict`, { code: 'student_grade' });
+                if (aee.errcode == '0' && aee.total > 0) that.setData({ levelList: aee.data[0].list })
+                let info = { skip: that.data.skip, limit: that.data.limit, school_id: res.data.info.id };
+                const arr = await app.$get(`/rss`, { ...info });
+                if (arr.errcode == '0') {
+                    for (const val of arr.data) {
+                        let level = that.data.levelList.find(i => i.value == val.student_id_level)
+                        if (level) val.zhLevel = level.label;
+                    }
+                    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 () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/sonestudent/list.json → pages/schAdmin copy/sonestudent/list.json


pages/sonestudent/list.less → pages/schAdmin copy/sonestudent/list.less


+ 49 - 0
pages/schAdmin copy/sonestudent/list.wxml

@@ -0,0 +1,49 @@
+<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="item">
+                        <view class="list_1">
+                            <view class="icon">
+                                <image src="{{item.student_id_icon&&item.student_id_icon.length>0?item.student_id_icon[0].url:''}}">
+                                </image>
+                            </view>
+                            <view class="content">
+                                <view class="name textOver">{{item.student_id_name||'学员姓名'}}</view>
+                                <view class="other">学员等级:<text>{{item.zhLevel||'一级'}}</text>
+                                </view>
+                                <view class="other">联系电话:{{item.student_id_phone||'暂无'}}
+                                </view>
+                            </view>
+                        </view>
+                        <view class="btn">
+                            <button bindtap="toEdit" data-item="{{item}}">信息维护</button>
+                            <button bindtap="toBind" data-item="{{item}}">绑定账号</button>
+                            <button bindtap="toDel" data-item="{{item}}">删除信息</button>
+                        </view>
+                    </view>
+                </view>
+            </scroll-view>
+        </view>
+    </view>
+</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>

pages/sonestudent/list.wxss → pages/schAdmin copy/sonestudent/list.wxss


+ 67 - 0
pages/schAdmin copy/sonestustat/list.js

@@ -0,0 +1,67 @@
+const app = getApp()
+Page({
+    data: {
+        frameStyle: { useTop: true, name: '学员统计', leftArrow: true, useBar: false },
+    },
+    // 返回
+    back(e) {
+        wx.navigateBack({ delta: 1 })
+    },
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad: function (options) { },
+    // 监听用户是否登录
+    watchLogin: async function () {
+        const that = this;
+        wx.getStorage({
+            key: 'user',
+            success: async res => { },
+            fail: async res => {
+                // wx.redirectTo({ url: '/pages/index/index' })
+            }
+        })
+    },
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady: function () { },
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow: function () {
+        const that = this;
+        // 监听用户是否登录
+        that.watchLogin();
+    },
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide: function () {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload: function () {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh: function () {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage: function () {
+
+    }
+})

pages/sonestustat/list.json → pages/schAdmin copy/sonestustat/list.json


pages/sonestustat/list.less → pages/schAdmin copy/sonestustat/list.less


+ 5 - 0
pages/schAdmin copy/sonestustat/list.wxml

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

pages/sonestustat/list.wxss → pages/schAdmin copy/sonestustat/list.wxss


+ 66 - 0
pages/schAdmin/coach/add.js

@@ -0,0 +1,66 @@
+// pages/schAdmin/coach/add.js
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad(options) {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload() {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh() {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom() {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage() {
+
+    }
+})

+ 3 - 0
pages/schAdmin/coach/add.json

@@ -0,0 +1,3 @@
+{
+    "usingComponents": {}
+}

+ 0 - 0
pages/schAdmin/coach/add.less


+ 2 - 0
pages/schAdmin/coach/add.wxml

@@ -0,0 +1,2 @@
+<!--pages/schAdmin/coach/add.wxml-->
+<text>pages/schAdmin/coach/add.wxml</text>

+ 1 - 0
pages/schAdmin/coach/add.wxss

@@ -0,0 +1 @@
+/* pages/schAdmin/coach/add.wxss */

+ 66 - 0
pages/schAdmin/coach/list.js

@@ -0,0 +1,66 @@
+// pages/schAdmin/coach/list.js
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad(options) {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload() {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh() {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom() {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage() {
+
+    }
+})

+ 3 - 0
pages/schAdmin/coach/list.json

@@ -0,0 +1,3 @@
+{
+    "usingComponents": {}
+}

+ 0 - 0
pages/schAdmin/coach/list.less


+ 2 - 0
pages/schAdmin/coach/list.wxml

@@ -0,0 +1,2 @@
+<!--pages/schAdmin/coach/list.wxml-->
+<text>pages/schAdmin/coach/list.wxml</text>

+ 1 - 0
pages/schAdmin/coach/list.wxss

@@ -0,0 +1 @@
+/* pages/schAdmin/coach/list.wxss */

+ 66 - 0
pages/schAdmin/coachexam/list.js

@@ -0,0 +1,66 @@
+// pages/schAdmin/coach/list.js
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad(options) {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload() {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh() {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom() {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage() {
+
+    }
+})

+ 3 - 0
pages/schAdmin/coachexam/list.json

@@ -0,0 +1,3 @@
+{
+    "usingComponents": {}
+}

+ 0 - 0
pages/schAdmin/coachexam/list.less


+ 2 - 0
pages/schAdmin/coachexam/list.wxml

@@ -0,0 +1,2 @@
+<!--pages/schAdmin/coach/list.wxml-->
+<text>pages/schAdmin/coach/list.wxml</text>

+ 1 - 0
pages/schAdmin/coachexam/list.wxss

@@ -0,0 +1 @@
+/* pages/schAdmin/coach/list.wxss */

+ 66 - 0
pages/schAdmin/coachstat/list.js

@@ -0,0 +1,66 @@
+// pages/schAdmin/coach/list.js
+Page({
+
+    /**
+     * 页面的初始数据
+     */
+    data: {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面加载
+     */
+    onLoad(options) {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面初次渲染完成
+     */
+    onReady() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面显示
+     */
+    onShow() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面隐藏
+     */
+    onHide() {
+
+    },
+
+    /**
+     * 生命周期函数--监听页面卸载
+     */
+    onUnload() {
+
+    },
+
+    /**
+     * 页面相关事件处理函数--监听用户下拉动作
+     */
+    onPullDownRefresh() {
+
+    },
+
+    /**
+     * 页面上拉触底事件的处理函数
+     */
+    onReachBottom() {
+
+    },
+
+    /**
+     * 用户点击右上角分享
+     */
+    onShareAppMessage() {
+
+    }
+})

+ 3 - 0
pages/schAdmin/coachstat/list.json

@@ -0,0 +1,3 @@
+{
+    "usingComponents": {}
+}

+ 0 - 0
pages/schAdmin/coachstat/list.less


+ 0 - 0
pages/schAdmin/coachstat/list.wxml


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů