邪性 3 ani în urmă
părinte
comite
97745dc6be

+ 3 - 8
app.js

@@ -64,13 +64,6 @@ App({
         console.log(this.globalData)
       }
     }).catch(res => this.globalData.error(res))
-    // 请求用户地址
-    this.globalData["useraddress"] = {
-      name: "张三",
-      tel: "188xxxx5629",
-      lock: true, //默认
-      address: "北京北京市房山区东海道场"
-    };
   },
   globalData: {
     // 定义tabber
@@ -97,7 +90,9 @@ App({
       face: "https://img.yzcdn.cn/vant/cat.jpeg",
     },
     // 支付时,用户地址
-    useraddress: {},
+    useraddress: {
+      id: null
+    },
     // 全局请求方法
     axios ({ url: _url = '', method: _method = 'post', data: _data = {}, success: _success = () => { }, complete: _complete = () => { } }) {
       let globalurl = "http://192.168.2.45:8887", error = (data) => {

+ 2 - 0
app.json

@@ -1,6 +1,8 @@
 {
   "pages": [
     "pages/index/index",
+    "pages/leaveadd/leaveadd",
+    "pages/leave/leave",
     "pages/order/order",
     "pages/sgin/sgin",
     "pages/addinput/addinput",

+ 1 - 1
app.less

@@ -4,7 +4,7 @@ page{
   --themeNavBg: white;
   /* nav可以改动 */
   --themeNavColor1: white;
-  --themeNavBg1: #f03;
+  --themeNavBg1: #1989fa;
   // 容器
   --themeCtrBg:#eee;
   background-color:var(--themeCtrBg);

+ 1 - 1
app.wxss

@@ -4,7 +4,7 @@ page {
   --themeNavBg: white;
   /* nav可以改动 */
   --themeNavColor1: white;
-  --themeNavBg1: #f03;
+  --themeNavBg1: #1989fa;
   --themeCtrBg: #eee;
   background-color: var(--themeCtrBg);
 }

+ 52 - 5
components/l-form/index.js

@@ -13,7 +13,10 @@ Component({
   data: {
     areaList,//地址列表
     show: true,//控制地址
+    columns: [],//选择器配置
+    pickershow: true,//控制选择器
     areaindex: 0,//区分地址所在数据位置
+    pickerindex: 0,//区分选择器所在数据位置
     arealist: [],//储存不同地址选项
     // 默认提交
     Success (data) {
@@ -38,21 +41,49 @@ Component({
     input (e) {
       let { detail } = e, { item, index } = e.currentTarget.dataset, { formData } = this.data;
       item["value"] = detail;
+      item["err"] = false;
       formData[index] = item;
       this.setData({ formData })
     },
+    // 选择器
+    pickerchoose (e) {
+      let { index } = e.currentTarget.dataset, { formData } = this.data;
+      this.setData({ pickershow: false, columns: formData[index]['columns'], pickerindex: index })
+    },
+    pickercancel () { this.setData({ pickershow: true }) },
+    // 选择器
+    pickerfunc (e, boolen) {
+      let { value, index: indexd } = e.detail, { formData } = this.data, { index } = e.currentTarget.dataset;
+      indexd = boolen ? '' : indexd;
+      if (indexd == 0) {
+        let { data, columns } = formData[index];
+        columns[1]["values"] = Object.keys(data[value[0]]);
+        columns[2]["values"] = data[value[0]][value[1]];
+      }
+      if (indexd == 1) {
+        let { data, columns } = formData[index];
+        columns[2]["values"] = data[value[0]][value[1]];
+        formData[index]["columns"] = columns;
+      }
+      formData[index]["values"] = value;
+      formData[index]["err"] = false;
+      formData[index]["value"] = value.join(" ");
+      this.setData({ formData, columns: formData[index]["columns"], pickershow: boolen ? true : false })
+    },
+    pickerconfirm (e) {
+      this.pickerfunc(e, true)
+    },
     // 挑选地址
     choose (e) {
-      let { name, index } = e.currentTarget.dataset;
-      this.setData({ show: false, area: name, areaindex: index })
+      let { index } = e.currentTarget.dataset;
+      this.setData({ show: false, areaindex: index })
     },
     // area完成
     areaconfirm (e) {
       this.areafunc(e);
     },
-    // area取消
-    areacancel (e) {
-      this.areafunc(e);
+    cancel () {
+      this.setData({ show: true })
     },
     // area改变
     areachange (e) { this.areafunc(e, true); },
@@ -64,11 +95,20 @@ Component({
       })
       formData[index]["value"] = addresss;
       formData[index]["values"] = values;
+      formData[index]["err"] = false;
       this.setData({
         formData,
         show: boolean ? false : true
       })
     },
+    // 单选框
+    onChangeradio (e) {
+      let { detail } = e, { index } = e.currentTarget.dataset, { formData } = this.data;
+      formData[index]["value"] = detail;
+      this.setData({
+        formData
+      })
+    },
     // 复选框
     onChange (e) {
       let { item, index } = e.currentTarget.dataset, { formData } = this.data, { detail } = e;
@@ -93,6 +133,13 @@ Component({
               reg = /^1[34578]\d{9}$/;
               reg.test(item.value) ? lock.push(true) : item.err = true;
               break;
+            case 'picker':
+              if (!item.value) {
+                item.err = true;
+                break;
+              }
+              lock.push(true);
+              break;
             case 'address':
               if (!item.values || !item.values[2] || item.values[2].code == '') {
                 item.err = true;

+ 2 - 1
components/l-form/index.json

@@ -5,6 +5,7 @@
     "van-radio-group": "@vant/weapp/radio-group/index",
     "van-field": "@vant/weapp/field/index",
     "van-area": "@vant/weapp/area/index",
-    "van-checkbox": "@vant/weapp/checkbox/index"
+    "van-checkbox": "@vant/weapp/checkbox/index",
+    "van-picker": "@vant/weapp/picker/index"
   }
 }

+ 5 - 2
components/l-form/index.less

@@ -5,10 +5,13 @@
   }
   .flex{
     display: flex;
-    justify-content: flex-start;
+    width: 100%;
+    flex: wrap;
+    justify-content: space-evenly;
     align-items: center;
     .radio{
-      max-width: 200rpx;
+     flex: 1;
+     padding-right:30rpx;
     }
   }
   .area{

+ 15 - 3
components/l-form/index.wxml

@@ -9,10 +9,17 @@
           选择
         </van-button>
       </van-field>
+      <!--多列选择器 -->
+      <van-field wx:if="{{item.type=='picker'}}" required="{{item.require}}" readonly label-class="label"
+        label="{{item.label}}" value="{{item.value }}" error-message="{{item.err ? item.errmsg : ''}}" use-button-slot>
+        <van-button bindtap="pickerchoose" data-index="{{index}}" slot="button" size="small">
+          选择
+        </van-button>
+      </van-field>
       <!-- 单选 -->
       <van-field input-class="disinput" wx:elif="{{item.type=='radio'}}" readonly label-class="label"
         label="{{item.label}}" use-button-slot>
-        <van-radio-group slot="button" value="{{ item.value }}" bind:change="onChangeradio">
+        <van-radio-group slot="button" value="{{ item.value }}" bind:change="onChangeradio" data-index="{{index}}">
           <view class="flex">
             <view class="radio" wx:for="{{item.arr}}" wx:for-item="it" wx:for-index="in" wx:key="in">
               <van-radio name="{{it.value}}">
@@ -42,9 +49,14 @@
       <van-button round block type="info" bindtap="submit">提交</van-button>
     </view>
   </van-cell-group>
+  <!-- 多列联动选择器 -->
+  <view class="area" hidden="{{pickershow}}">
+    <van-picker show-toolbar="true" columns="{{ columns }}" data-index="{{pickerindex}}" bind:change="pickerfunc"
+      bind:cancel="pickercancel" bind:confirm="pickerconfirm" />
+  </view>
   <!-- 地址 -->
   <view class="area" hidden="{{show}}">
-    <van-area data-index="{{areaindex}}" bind:confirm="areaconfirm" bind:cancel="areacancel" bind:change="areachange"
-      columns-placeholder="{{ ['请选择', '请选择', '请选择'] }}" area-list="{{ areaList }}" value="{{area}}" />
+    <van-area data-index="{{areaindex}}" bind:confirm="areaconfirm" bind:change="areachange" bind:cancel="cancel"
+      columns-placeholder="{{ ['请选择', '请选择', '请选择'] }}" area-list="{{ areaList }}" />
   </view>
 </view>

+ 5 - 2
components/l-form/index.wxss

@@ -4,11 +4,14 @@
 }
 .form .flex {
   display: flex;
-  justify-content: flex-start;
+  width: 100%;
+  flex: wrap;
+  justify-content: space-evenly;
   align-items: center;
 }
 .form .flex .radio {
-  max-width: 200rpx;
+  flex: 1;
+  padding-right: 30rpx;
 }
 .form .area {
   position: fixed;

+ 31 - 22
pages/adddata/adddata.js

@@ -1,5 +1,6 @@
 // pages/adddata/adddata.js
 const app = getApp();
+const { axios } = app.globalData;
 Page({
 
   /**
@@ -10,24 +11,28 @@ Page({
   },
   // 请求管理数据
   AdddataRequest () {
-    let moni = [{
-      name: "张三",
-      tel: "188xxxx5629",
-      lock: true, //默认
-      address: "北京北京市房山区东海道场"
-    }, {
-      name: "张三",
-      tel: "188xxxx5629",
-      address: "北京北京市房山区东海道场"
-    }, {
-      name: "张三",
-      tel: "188xxxx5629",
-      address: "北京北京市房山区东海道场"
-    }];
-    this.setData({
-      datalist: moni
+    let that = this;
+    axios({
+      url: "/option/student/", method: 'get', success (res) {
+        let { data } = res.data, datalist = [];
+        data.forEach(item => {
+          let { classes, name, gender, id } = item;
+          datalist.push({
+            id,
+            name,
+            tel: gender == 1 ? '女' : "男",
+            gender,
+            grade: [item.school_text, item.grade_text, item.classes_text],
+            address: [item.school_text, item.grade_text, item.classes_text].join(" "),
+            classes,
+          })
+          that.setData({
+            datalist
+          })
+          wx.stopPullDownRefresh();
+        })
+      }
     })
-    wx.stopPullDownRefresh();
   },
   // 新增
   Add () {
@@ -38,7 +43,7 @@ Page({
   // 返回支付页面
   Back (e) {
     let { source } = this.data;
-    if (source != "pay") return false;
+    if (source != "pay" && source != "leaveadd") return false;
     let { item } = e.currentTarget.dataset;
     app.globalData.useraddress = item;
     wx.navigateBack({
@@ -54,10 +59,14 @@ Page({
   },
   // 删除
   Del (e) {
-    let { item } = e.currentTarget.dataset;
-    wx.showToast({
-      title: `删除${JSON.stringify(item)}`,
-      icon: 'none'
+    let { item } = e.currentTarget.dataset, that = this;
+    axios({
+      method: 'delete',
+      url: `/option/student/${item.id}/`,
+      success (res) {
+        console.log(res)
+        that.AdddataRequest();
+      }
     })
   },
   /**

+ 75 - 11
pages/addinput/addinput.js

@@ -1,4 +1,6 @@
 // pages/addinput/addinput.js
+const app = getApp();
+const { axios } = app.globalData;
 Page({
 
   /**
@@ -7,9 +9,10 @@ Page({
   data: {
     formData: [
       { label: "姓名", name: "name", value: "", errmsg: "姓名不能为空!", require: true, placeholder: "请输入姓名" },
-      { label: "姓别", name: "sex", type: "radio", value: 0, arr: [{ type: "男", value: 0 }, { type: "女", value: 1 }] },
-      { label: "收货地址", name: "address", type: "address", value: "", require: true, rule: "address" },
-      { label: "默认状态", name: "lock", type: "checkbox", value: false }
+      { label: "姓别", name: "sex", type: "radio", value: 2, arr: [{ type: "男", value: 2 }, { type: "女", value: 1 }] },
+      {
+        label: "年级", name: "grade", type: 'picker', rule: "picker", value: "", key: "福建", data: {}, datas: [], columns: [], col: 3, require: true, errmsg: "年级不能为空"
+      },
     ],
   },
   // 挑选地址
@@ -28,22 +31,47 @@ Page({
    * 生命周期函数--监听页面加载
    */
   onLoad: function (options) {
-    let { data } = options;
+    let { data } = options, put = null, { formData } = this.data;
     if (!!data) {
-      data = JSON.parse(data);
-      console.log(data)
-      // this.setData({
-      //   ...data
-      // })
+      put = JSON.parse(data).updata;
+      formData[0]["value"] = put.name;
+      formData[1]["value"] = put.gender;
+      formData[2]["value"] = put.address;
+      formData[2]["values"] = put.grade;
+      this.setData({ formData, id: put.id })
     }
     wx.lxd.Ctr({
       // nav
       title: !!data ? "修改" : "新增", //标题
       back: true,//返回按钮,tabber必须false(除非会改)
     })
+    let that = this;
     wx.lxd.Form({
       Success (data) {
-        console.log("1", data)
+        let name = data[0]["value"], gender = data[1]["value"];
+        let grade = JSON.parse(JSON.stringify(data[2])), { datas, values } = grade;
+        let i = -1;
+        datas[0].forEach((item, index) => {
+          if (JSON.stringify(item.sort()) == JSON.stringify(values.sort())) {
+            i = index;
+          }
+        })
+        let school = datas[1][i][0], classes = datas[1][i][2];
+        axios({
+          url: !put ? "/option/student/" : `/option/student/${that.data.id}/`,
+          method: !put ? "post" : 'put',
+          data: {
+            school,
+            classes,
+            name,
+            gender,
+          },
+          success (res) {
+            wx.navigateBack({
+              delta: 1, // 回退前 delta(默认为1) 页面
+            })
+          }
+        })
       }
     })
   },
@@ -59,7 +87,43 @@ Page({
    * 生命周期函数--监听页面显示
    */
   onShow: function () {
-
+    let { formData } = this.data, keya = '', keyb = '', that = this;
+    //  年级
+    axios({
+      url: "/option/school_tree/",
+      method: 'get',
+      success (res) {
+        let { data } = res.data, obj = {}, objs = [[], []];
+        data.forEach((item, index) => {
+          index == 0 ? keya = item.title : '';
+          obj[item["title"]] = {};
+          item["children"].forEach((it, ind) => {
+            ind == 0 ? keyb = it.title : "";
+            obj[item["title"]][it["title"]] = [];
+            it["children"].forEach(em => {
+              objs[0].push([item.title, it.title, em.title]);
+              objs[1].push([item.id, it.id, em.id]);
+              obj[item["title"]][it["title"]].push(em.title);
+            })
+          })
+        })
+        formData[2]["data"] = obj,
+          formData[2]["datas"] = objs,
+          formData[2]["columns"] = [{
+            values: Object.keys(obj),
+            className: '学校',
+          },
+          {
+            values: Object.keys(obj[keya]),
+            className: '年级',
+          },
+          {
+            values: obj[keya][keyb],
+            className: '班级',
+          }];
+        that.setData({ formData })
+      }
+    })
   },
 
   /**

+ 0 - 10
pages/detail/detail.js

@@ -15,9 +15,7 @@ Page({
   },
   // 点击按钮事件
   onClickButton (e) {
-    console.log("点击按钮", e)
     let { type } = e.currentTarget.dataset;
-    console.log(type)
     // 点击立即购买
     if (type == "buy") {
       let { id, shopdetail } = this.data;
@@ -30,14 +28,6 @@ Page({
   // 请求数据
   ShopRequest () {
     let { id, shopdetail } = this.data, that = this;
-    let moni = {
-      img: "https://img.yzcdn.cn/vant/cat.jpeg",
-      name: "宠物猫",
-      price: "100.00",
-      sales: 40,
-      desc: "如果只是自定义的间距距离, 设置margin就好了. 如果是想让两个div每个div占百分之n的宽度. 比如想让第一个div占宽度的百分之30. 第二个占百分之70. 可以设置第一个div:flex:3; 第二个div:flex:7; 如果你已经设置这两个div的宽高了, 想让他们均分。",
-      detaillist: ["https://img.yzcdn.cn/vant/cat.jpeg", "https://img.yzcdn.cn/vant/cat.jpeg", "https://img.yzcdn.cn/vant/cat.jpeg"]
-    };
     axios({
       url: `/commodity/wx_commodity_detail/${id}/`,
       method: "get",

+ 0 - 1
pages/detail/detail.json

@@ -5,7 +5,6 @@
     "van-goods-action-icon": "@vant/weapp/goods-action-icon/index",
     "van-goods-action-button": "@vant/weapp/goods-action-button/index",
     "van-cell": "@vant/weapp/cell/index",
-    "van-tag": "@vant/weapp/tag/index",
     "van-divider": "@vant/weapp/divider/index"
   }
 }

+ 2 - 0
pages/detail/detail.less

@@ -7,10 +7,12 @@
     padding: 20rpx 0;
   }
   .detail-shop-detail{
+    .value{font-size: 36rpx; color: #f03;font-weight: 600;}
     .detail-flex{
       display: flex;
       .detail-name{
         margin-right: 10rpx;
+        font-size: 36rpx;
       }
     }
     .detail-text{

+ 3 - 4
pages/detail/detail.wxml

@@ -7,18 +7,17 @@
     </view>
     <!-- 商品数据 -->
     <view class="detail-shop-detail">
-      <van-cell use-label-slot border="{{ false }}">
+      <van-cell use-label-slot value-class="value" value="¥{{shopdetail.price}}" border="{{ false }}">
         <view class="detail-flex" slot="title">
           <view class="detail-name">{{shopdetail.name}}</view>
-          <van-tag type="danger">¥{{shopdetail.price}}</van-tag>
         </view>
       </van-cell>
-      <van-cell title="商品描述" use-label-slot>
+      <van-cell use-label-slot>
         <view class="detail-text" slot="label">{{shopdetail.desc}}</view>
       </van-cell>
     </view>
     <!-- 图文详情 -->
-    <view class="detail-shop-detailimg">
+    <view wx:if="{{shopdetail.detaillist.length!=0}}" class="detail-shop-detailimg">
       <van-divider contentPosition="center">图文详情</van-divider>
       <view class="detail-shop-img">
         <van-image lazy-load wx:for="{{shopdetail.detaillist}}" wx:key="index" width="100%" fit="widthFix"

+ 6 - 0
pages/detail/detail.wxss

@@ -4,11 +4,17 @@
   text-align: center;
   padding: 20rpx 0;
 }
+.detail .detail-shop-detail .value {
+  font-size: 36rpx;
+  color: #f03;
+  font-weight: 600;
+}
 .detail .detail-shop-detail .detail-flex {
   display: flex;
 }
 .detail .detail-shop-detail .detail-flex .detail-name {
   margin-right: 10rpx;
+  font-size: 36rpx;
 }
 .detail .detail-shop-detail .detail-text {
   text-align: justify;

+ 75 - 0
pages/leave/leave.js

@@ -0,0 +1,75 @@
+// pages/leave/leave.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    wx.lxd.Ctr({
+      // nav
+      title: "请假管理", //标题
+      back: true,//返回按钮,tabber必须false(除非会改)
+    });
+  },
+  // 新增
+  Add () {
+    wx.navigateTo({
+      url: '/pages/leaveadd/leaveadd',
+    })
+  },
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
+})

+ 3 - 0
pages/leave/leave.json

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

+ 38 - 0
pages/leave/leave.less

@@ -0,0 +1,38 @@
+/* pages/adddata/adddata.wxss */
+.adddata{
+  .adddata-data{
+    background-color: white;
+    padding: 10rpx 16rpx;
+    .item-flex{
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 20rpx 0;
+      border-bottom: 1rpx solid #e6e6e6;
+      .flex-left{
+        .left-h1{
+          font-weight: 600;
+        }
+        .left-h2{
+          max-width: 85vw;
+          overflow: hidden;
+          text-overflow:ellipsis;
+          white-space: nowrap;
+        }
+      }
+      .flex-right{
+        .right-icon{
+          display: block;
+          margin: 10rpx;
+        }
+      }
+    }
+  }
+  .adddata-button{
+    position: fixed;
+    bottom: 0;
+    width: 100%;
+    box-sizing: border-box;
+    padding: 10rpx 20rpx;
+  }
+}

+ 24 - 0
pages/leave/leave.wxml

@@ -0,0 +1,24 @@
+<l-container>
+  <view class="globstyle adddata">
+    <!-- 自定义 -->
+    <!-- 列表 -->
+    <view class="adddata-data">
+      <view bindtap="Back" data-item="{{item}}" wx:for="{{datalist}}" wx:key="index" class="item-flex">
+        <view class="flex-left">
+          <view class="left-h1">{{item.name}} {{item.tel}} <van-tag wx:if="{{item.lock}}" round type="danger">默认
+            </van-tag>
+          </view>
+          <view class="left-h2">{{item.address}}</view>
+        </view>
+        <view class="flex-right">
+          <van-icon catchtap="Update" data-item="{{item}}" size="25" class="right-icon" name="edit" />
+          <van-icon catchtap="Del" data-item="{{item}}" size="25" class="right-icon" name="delete-o" />
+        </view>
+      </view>
+    </view>
+    <!-- 新增  -->
+    <view class="adddata-button">
+      <van-button bind:click="Add" round type="danger" block>新增</van-button>
+    </view>
+  </view>
+</l-container>

+ 32 - 0
pages/leave/leave.wxss

@@ -0,0 +1,32 @@
+/* pages/adddata/adddata.wxss */
+.adddata .adddata-data {
+  background-color: white;
+  padding: 10rpx 16rpx;
+}
+.adddata .adddata-data .item-flex {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 20rpx 0;
+  border-bottom: 1rpx solid #e6e6e6;
+}
+.adddata .adddata-data .item-flex .flex-left .left-h1 {
+  font-weight: 600;
+}
+.adddata .adddata-data .item-flex .flex-left .left-h2 {
+  max-width: 85vw;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.adddata .adddata-data .item-flex .flex-right .right-icon {
+  display: block;
+  margin: 10rpx;
+}
+.adddata .adddata-button {
+  position: fixed;
+  bottom: 0;
+  width: 100%;
+  box-sizing: border-box;
+  padding: 10rpx 20rpx;
+}

+ 157 - 0
pages/leaveadd/leaveadd.js

@@ -0,0 +1,157 @@
+// pages/leaveadd/leaveadd.js
+const app = getApp();
+const { axios } = app.globalData;
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    wx.lxd.Ctr({
+      // nav
+      title: "新增", //标题
+      back: true,//返回按钮,tabber必须false(除非会改)
+    });
+  },
+  // 挑选地址
+  ChooseAddress () {
+    wx.navigateTo({
+      url: `/pages/adddata/adddata?data=${JSON.stringify({ source: 'leaveadd' })}`,
+    })
+  },
+  // 选择日期
+  choosedata (e) {
+    let { datas } = this.data, { index } = e.currentTarget.dataset;
+    datas[index][2] = !datas[index][2] ? true : false;
+    this.setData({ datas })
+  },
+  // 选择类别
+  choosetype (e) {
+    let { type } = this.data, { index } = e.currentTarget.dataset;
+    type[index]["lock"] = !type[index]["lock"] ? true : false;
+    this.setData({ type });
+  },
+  // 提交
+  submit () {
+    let { useraddress, datas, type } = this.data;
+    if (!useraddress.id) {
+      wx.showToast({
+        title: '请选择学生',
+        icon: "error"
+      })
+      return false;
+    }
+    let arr = [], brr = [];
+    datas.forEach(item => {
+      item[2] ? arr.push(item[0]) : '';
+    })
+    if (arr.length <= 0) {
+      wx.showToast({
+        title: '请选择请假日期',
+        icon: "error"
+      })
+      return false;
+    }
+    type.forEach(item => {
+      item['lock'] ? brr.push(item["id"]) : '';
+    })
+    if (brr.length <= 0) {
+      wx.showToast({
+        title: '请选择请假内容',
+        icon: "error"
+      })
+      return false;
+    }
+    console.log(arr)
+    axios({
+      url: '/order/student_leave/',
+      method: 'post',
+      data: {
+        student: useraddress.id,
+        leave_dates: JSON.stringify(arr),
+        order_ids: JSON.stringify(brr)
+      },
+      success (res) {
+        wx.navigateBack({
+          delta: 1, // 回退前 delta(默认为1) 页面
+        })
+      }
+    })
+  },
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+    let { useraddress } = app.globalData, datas = [], type = [], that = this;
+    if (!useraddress.id) {
+      useraddress["name"] = "请挑选学生"
+    } else {
+      axios({
+        url: `/order/student_leave/get_info/?student=${useraddress.id}`,
+        method: "get",
+        success (res) {
+          let { data } = res.data, { lead_dates, orders } = data;
+          type = orders;
+          datas = lead_dates.map(item => {
+            item = item.replace(/\(/, '?');
+            item = item.replace(/\)/, '?');
+            item = item.split("?").splice(0, 2);
+            return item;
+          })
+          console.log(type)
+          that.setData({ datas, type })
+        }
+      })
+    }
+    this.setData({ useraddress })
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
+})

+ 5 - 0
pages/leaveadd/leaveadd.json

@@ -0,0 +1,5 @@
+{
+  "usingComponents": {
+    "van-cell": "@vant/weapp/cell/index"
+  }
+}

+ 34 - 0
pages/leaveadd/leaveadd.less

@@ -0,0 +1,34 @@
+/* pages/leaveadd/leaveadd.wxss */
+.leaveadd{
+  .user-address{
+    .user-address-h1{
+      font-weight: 600;
+    }
+    .user-address-h2{
+      max-width: 85vw;
+      overflow: hidden;
+      text-overflow:ellipsis;
+      white-space: nowrap;
+    }
+  }
+  .flex{
+    display: flex;
+    justify-content: start;
+    align-items: center;
+    flex-wrap: wrap;
+    .item{
+      margin: 10rpx 20rpx;
+      padding: 5rpx 15rpx;
+      color: black;
+    }
+    .block{
+      background-color: #1989fa;
+      color: #fff;
+      border-radius: 10rpx;
+    }
+  }
+  .button{
+    margin-top: 50rpx;
+    padding: 20rpx;
+  }
+}

+ 32 - 0
pages/leaveadd/leaveadd.wxml

@@ -0,0 +1,32 @@
+<l-container>
+  <view class="globstyle  leaveadd">
+    <!-- 自定义 -->
+    <!-- 收货方 -->
+    <van-cell bind:click="ChooseAddress" center is-link>
+      <view class="user-address" slot="title">
+        <view class="user-address-h1">{{useraddress.name}} {{useraddress.tel}}</view>
+        <view class="user-address-h2">
+          <van-tag wx:if="{{useraddress.lock}}" round type="danger">默认</van-tag>
+          {{useraddress.address}}
+        </view>
+      </view>
+    </van-cell>
+    <!-- 选择日期 -->
+    <van-cell title="选择日期" use-label-slot>
+      <view class="flex" slot="label">
+        <view bindtap="choosedata" data-index="{{index}}" wx:for="{{datas}}" wx:key="index"
+          class="item {{item[2] ? 'block' : ''}}">{{item[0]}} {{item[1]}}</view>
+      </view>
+    </van-cell>
+    <!-- 选择类别 -->
+    <van-cell title="选择内容" use-label-slot>
+      <view class="flex" slot="label">
+        <view bindtap="choosetype" data-index="{{index}}" wx:for="{{type}}" wx:key="index"
+          class="item {{item['lock'] ? 'block' : ''}}">{{item.name}}</view>
+      </view>
+    </van-cell>
+    <view class="button">
+      <van-button round block type="info" bindtap="submit">提交</van-button>
+    </view>
+  </view>
+</l-container>

+ 30 - 0
pages/leaveadd/leaveadd.wxss

@@ -0,0 +1,30 @@
+/* pages/leaveadd/leaveadd.wxss */
+.leaveadd .user-address .user-address-h1 {
+  font-weight: 600;
+}
+.leaveadd .user-address .user-address-h2 {
+  max-width: 85vw;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.leaveadd .flex {
+  display: flex;
+  justify-content: start;
+  align-items: center;
+  flex-wrap: wrap;
+}
+.leaveadd .flex .item {
+  margin: 10rpx 20rpx;
+  padding: 5rpx 15rpx;
+  color: black;
+}
+.leaveadd .flex .block {
+  background-color: #1989fa;
+  color: #fff;
+  border-radius: 10rpx;
+}
+.leaveadd .button {
+  margin-top: 50rpx;
+  padding: 20rpx;
+}

+ 1 - 1
pages/login/login.js

@@ -25,7 +25,7 @@ Page({
       {
         title: "请假管理", icon: "column", require: true, success () {
           wx.navigateTo({
-            url: `/pages/leaveadmin/leaveadmin`,
+            url: `/pages/leave/leave`,
           })
         }
       },

+ 28 - 14
pages/order/order.js

@@ -8,7 +8,7 @@ Page({
    */
   data: {
     active: 0,
-    orderlist: [],
+    orderlist: [[], [], [], []],
   },
 
   /**
@@ -26,31 +26,41 @@ Page({
     this.setData({
       active
     })
-    this.totalPage = 1;
-    this.currentPage = 1;
     this.orderRequest();
   },
   // 请求数据
-  totalPage: 1,
-  currentPage: 1,
+  orderlist: [{
+    totalPage: 1,
+    currentPage: 1,
+  }, {
+    totalPage: 1,
+    currentPage: 1,
+  }, {
+    totalPage: 1,
+    currentPage: 1,
+  }, {
+    totalPage: 1,
+    currentPage: 1,
+  }],
   orderRequest () {
-    if (this.currentPage > this.totalPage) return false;
-    let { active } = this,
+    let { active, orderlist } = this.data,
       status = active == 0 ? '' : active, that = this;
+    if (this.orderlist[active]["totalPage"] < this.orderlist[active]["currentPage"]) return false;
     axios({
       url: "/order/",
       method: 'get',
       data: {
         status,
         limit: 10,
-        page: that.currentPage
+        page: that.orderlist[active]["currentPage"]
       },
       success (res) {
-        let { totalPage, currentPage, data: orderlist } = res.data;
-        console.log(orderlist)
+        let { totalPage, data } = res.data;
+        orderlist[active] = [...orderlist[active], ...data];
         that.setData({ orderlist });
-        that.totalPage = totalPage;
-        that.currentPage++;
+        console.log(orderlist)
+        that.orderlist[active]["totalPage"] = totalPage;
+        that.orderlist[active]["currentPage"]++;
       }
     })
   },
@@ -86,8 +96,12 @@ Page({
    * 页面相关事件处理函数--监听用户下拉动作
    */
   onPullDownRefresh: function () {
-    this.totalPage = 1;
-    this.currentPage = 1;
+    let { active } = this.data;
+    this.orderlist[active]["totalPage"] = 1;
+    this.orderlist[active]["currentPage"] = 1;
+    this.setData({
+      orderlist: [[], [], [], []],
+    })
     this.orderRequest()
   },
 

+ 1 - 0
pages/order/order.json

@@ -1,6 +1,7 @@
 {
   "enablePullDownRefresh": true,
   "usingComponents": {
+    "van-cell": "@vant/weapp/cell/index",
     "van-tab": "@vant/weapp/tab/index",
     "van-tabs": "@vant/weapp/tabs/index"
   }

+ 27 - 0
pages/order/order.less

@@ -0,0 +1,27 @@
+/* pages/order/order.wxss */
+.order{
+  .nav{
+    width: 100vw;
+    position: fixed;
+    background-color: #fff;
+  }
+  .item{
+    .value{
+      color: green;
+    }
+    .title{
+      font-size: 32rpx;
+    }
+    .label{
+      width: 70vw;
+    }
+    .g{
+      padding: 5rpx 0;
+      font-size: 28rpx;
+      color: black;
+    }
+    .price{
+      .txt{color: #f03;}
+    }
+  }
+}

+ 61 - 4
pages/order/order.wxml

@@ -1,9 +1,66 @@
 <l-container>
   <view class="globstyle order">
-    <van-tabs bind:click="tabs" active="{{ active }}">
-      <van-tab title="全部">内容 1</van-tab>
-      <van-tab title="待付款">内容 2</van-tab>
-      <van-tab title="已付款">内容 3</van-tab>
+    <van-tabs nav-class="nav" bind:click="tabs" active="{{ active }}">
+      <van-tab title="全部">
+        <view wx:for="{{orderlist[0]}}" wx:key="index" class="item">
+          <van-cell title="{{item.no}}" title-class="title" value-class="value" use-label-slot
+            value="{{item.status_text}}">
+            <view slot="label" class="label">
+              <view class="g name">名称:{{item.commodity_text}}</view>
+              <view class="g date">下单时间:{{item.create_time_f}}</view>
+              <view class="g price">购买金额:<text class="txt">¥{{item.total_amount}}</text></view>
+              <view class="g stutdent">
+                {{item.student_text}}: {{item.school_text}} {{item.grade_text}} {{item.class_text}}
+              </view>
+            </view>
+          </van-cell>
+        </view>
+      </van-tab>
+      <van-tab title="待付款">
+        <view wx:for="{{orderlist[1]}}" wx:key="index" class="item">
+          <van-cell title="{{item.no}}" title-class="title" value-class="value" use-label-slot
+            value="{{item.status_text}}">
+            <view slot="label" class="label">
+              <view class="g name">名称:{{item.commodity_text}}</view>
+              <view class="g date">下单时间:{{item.create_time_f}}</view>
+              <view class="g price">购买金额:<text class="txt">¥{{item.total_amount}}</text></view>
+              <view class="g stutdent">
+                {{item.student_text}}: {{item.school_text}} {{item.grade_text}} {{item.class_text}}
+              </view>
+            </view>
+          </van-cell>
+        </view>
+      </van-tab>
+      <van-tab title="已付款">
+        <view wx:for="{{orderlist[2]}}" wx:key="index" class="item">
+          <van-cell title="{{item.no}}" title-class="title" value-class="value" use-label-slot
+            value="{{item.status_text}}">
+            <view slot="label" class="label">
+              <view class="g name">名称:{{item.commodity_text}}</view>
+              <view class="g date">下单时间:{{item.create_time_f}}</view>
+              <view class="g price">购买金额:<text class="txt">¥{{item.total_amount}}</text></view>
+              <view class="g stutdent">
+                {{item.student_text}}: {{item.school_text}} {{item.grade_text}} {{item.class_text}}
+              </view>
+            </view>
+          </van-cell>
+        </view>
+      </van-tab>
+      <van-tab title="已取消">
+        <view wx:for="{{orderlist[3]}}" wx:key="index" class="item">
+          <van-cell title="{{item.no}}" title-class="title" value-class="value" use-label-slot
+            value="{{item.status_text}}">
+            <view slot="label" class="label">
+              <view class="g name">名称:{{item.commodity_text}}</view>
+              <view class="g date">下单时间:{{item.create_time_f}}</view>
+              <view class="g price">购买金额:<text class="txt">¥{{item.total_amount}}</text></view>
+              <view class="g stutdent">
+                {{item.student_text}}: {{item.school_text}} {{item.grade_text}} {{item.class_text}}
+              </view>
+            </view>
+          </van-cell>
+        </view>
+      </van-tab>
     </van-tabs>
   </view>
 </l-container>

+ 23 - 1
pages/order/order.wxss

@@ -1 +1,23 @@
-/* pages/order/order.wxss */
+/* pages/order/order.wxss */
+.order .nav {
+  width: 100vw;
+  position: fixed;
+  background-color: #fff;
+}
+.order .item .value {
+  color: green;
+}
+.order .item .title {
+  font-size: 32rpx;
+}
+.order .item .label {
+  width: 70vw;
+}
+.order .item .g {
+  padding: 5rpx 0;
+  font-size: 28rpx;
+  color: black;
+}
+.order .item .price .txt {
+  color: #f03;
+}

+ 50 - 5
pages/pay/pay.js

@@ -1,5 +1,6 @@
 // pages/pay/pay.js
 const app = getApp();
+const { axios } = app.globalData;
 Page({
 
   /**
@@ -13,10 +14,52 @@ Page({
   },
   // 提交支付
   onSubmit () {
-    this.setData({ loadding: true })
-    setTimeout(() => {
-      this.setData({ loadding: false, disabled: true })
-    }, 3000)
+    let { id: commodity, message: notes, useraddress } = this.data, { id: student } = useraddress, that = this;
+    if (!student) {
+      wx.showToast({
+        title: '请挑选学生',
+        icon: 'error'
+      })
+      return false;
+    }
+    let { appid, user } = app.globalData, { openid } = user;
+    function pay () {
+      return new Promise(resolve => {
+        axios({
+          url: `/order/`,
+          method: 'post',
+          data: {
+            appid, openid, notes, commodity, student
+          },
+          success (res) {
+            that.setData({ loadding: true })
+            let { data } = res.data;
+            wx.requestPayment({
+              timeStamp: data.timeStamp,
+              nonceStr: data.nonceStr,
+              package: data.package,
+              signType: data.signType,
+              paySign: data.paySign,
+              success: function (res) {
+                resolve({ type: 1, value: "支付成功" })
+              },
+              fail: function () {
+                // 取消付款
+                resolve({ type: 2, value: "支付失败" })
+              },
+            })
+          }
+        })
+      })
+    }
+    pay().then(
+      res => {
+        that.setData({ loadding: false, disabled: true })
+        wx.navigateTo({
+          url: '/pages/order/order',
+        })
+      }
+    );
   },
   // 挑选地址
   ChooseAddress () {
@@ -39,7 +82,6 @@ Page({
       bgc: false,//使用更改后的颜色;配合json使用
     })
     let { data } = options;
-    console.log(data)
     if (!!data) {
       data = JSON.parse(data);
       this.setData({
@@ -60,6 +102,9 @@ Page({
    */
   onShow: function () {
     let { useraddress } = app.globalData;
+    if (!useraddress.id) {
+      useraddress["name"] = "请挑选学生"
+    }
     this.setData({ useraddress })
   },
 

+ 0 - 8
pages/pay/pay.wxml

@@ -41,14 +41,6 @@
             </view>
           </view>
         </van-cell>
-        <van-cell border="{{false}}">
-          <view class="type" slot="title">
-            <view class="str">支付宝支付</view>
-            <view class="radio">
-              <van-radio disabled name="2" />
-            </view>
-          </view>
-        </van-cell>
       </van-radio-group>
     </view>
     <!-- 提交支付 -->

+ 1 - 1
project.config.json

@@ -24,7 +24,7 @@
     "lazyloadPlaceholderEnable": false,
     "useMultiFrameRuntime": true,
     "useApiHook": true,
-    "useApiHostProcess": true,
+    "useApiHostProcess": false,
     "babelSetting": {
       "ignore": [],
       "disablePlugins": [],

+ 12 - 0
project.private.config.json

@@ -53,6 +53,18 @@
           "pathName": "pages/order/order",
           "query": "",
           "scene": null
+        },
+        {
+          "name": "请假管理",
+          "pathName": "pages/leave/leave",
+          "query": "",
+          "scene": null
+        },
+        {
+          "name": "请假新增",
+          "pathName": "pages/leaveadd/leaveadd",
+          "query": "",
+          "scene": null
         }
       ]
     }