用戶
 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

掃一掃,登錄網站

小程序社區 首頁 教程 查看內容

湖人vs火箭:記《高??記諳低場沸〕絳潁?)

湖人vs爵士季后赛 www.nbgeh.club Rolan 2019-11-29 00:12

這是其他幾篇的地址:記《高??記諳低場沸〕絳潁?)前面講了用戶注冊和首頁天氣功能,下面講講課程表頁的實現.五.課程表頁這里參考了簡書上面軒轅夜空位作者的案例,以及其參考極樂叔的課程表的思路.同樣制作課程表 ...

這是其他幾篇的地址:

記《高??記諳低場沸〕絳潁?)

前面講了用戶注冊和首頁天氣功能,下面講講課程表頁的實現.

五.課程表頁

  • 這里參考了簡書上面 軒轅夜空 位作者的案例,以及其參考 極樂叔 的課程表的思路.
  • 同樣制作課程表需要用到云開發來存儲數據,以及結合云函數對數據的修改,后面會講到為什么要用到云函數.

先來看看完成后的效果圖

  • 1.先搭建整體結構
    • 頭部和左側因為樣式是一樣的,可以將數據寫入data中,再通過for循環渲染出來,這里就直接展示了.(偷個懶:blush::blush:)
    <!-- 星期 -->
    <view class="top">  
        <view class="top-text">
            <text>節\日</text>
        </view>
        <view class="top-text">
            <text></text>
        </view>
        <view class="top-text">
            <text></text>
        </view>
        <view class="top-text">
            <text></text>
        </view>
        <view class="top-text">
            <text></text>
        </view>
        <view class="top-text">
            <text></text>
        </view>
        <view class="top-text">
            <text></text>
        </view>
        <view class="top-text">
            <text></text>
        </view>
    </view>
    <!-- 課程 -->
    <view class="cont">
        <view class="cont-left">
            <view class="left"> 1 </view>
            <view class="left"> 2 </view>
            <view class="left"> 3 </view>
            <view class="left"> 4 </view>
            <view class="left"> 5 </view>
            <view class="left"> 6 </view>
            <view class="left"> 7 </view>
            <view class="left"> 8 </view>
        </view>
        <view class="cont-right">
        </view>
    </view>
    <view class="bottom">
        ————<text>讀萬卷書 行萬里路</text>————
    </view>
    復制代碼
    點擊查看wxss代碼
    page {
        width: 100%;
        height: 100%;
        position: relative;
    }
    .top {
        padding: 16rpx 0;
        border-top: 1px solid #e9e9e9;
        border-bottom: 1px dashed #d3d3d3;
        display: flex;
        justify-content: flex-start;
    }
    .top-text {
        width: 12.5%;
        text-align: center;
        font-size: 32rpx;
        font-weight: 600;
        align-items: center;
    }
    .top .top-text {
        border-left: 1px dashed #d3d3d3;
    }
    .top .top-text:nth-child(1) {
        font-size: 24rpx;
        border-left: none;
        line-height: 46rpx;
    }
    .cont {
        display: flex;
        justify-content: start;
    }
    .cont-left {
        display: inline-block;
    }
    .left {
        width: 90rpx;
        height: 120rpx;
        justify-content: center;
        display: flex;
        align-items: center;
        border-bottom: 1px dashed #d3d3d3;
        box-sizing: border-box;
        color: #666;
        font-size: 28rpx;
        font-weight: 600;
    }
    .cont-right {
        width: calc(100% - 90rpx);
    }
    .bottom {
        width: 100%;
        text-align: center;
        position: absolute;
        bottom: 20rpx;
        font-size: 24rpx;
        color: #ddd;
        display: inline-block;
    }
    .bottom text {
        margin-left: 20rpx;
        margin-right: 20rpx;
        color: #9b9b9b;
    }
    復制代碼

  • 2.結合云開發編寫課程表.
    • 這里需要考慮到云開發中單次獲取數據上限是20條,所以我將課程表數據分為兩部分(上午和下午),當然你可以直接使用云函數來提高獲取數據的上限,在后面會有介紹,這里就先不做過多的解釋了,上代碼.

    單個數據結構

    {
        //"_id": "296065c95da529b2055b57301b5afa75",  云開發導入數據會直接生成_id,這里不用自己編寫
        "data_name": "Java高級開發技術(JavaEE)",  //課程名
        "address": "@康莊行知樓301",              //地點
        "weekNum": "10-15周",                     //周數
        "pitchNum": "3-4",                        //節數
        "teacher": "趙老師",                      //任課老師
        "_openid": "oQnNa5NJfKqSZntKFLGZWnZuXNbo"  //修改者的openid,本來是想做判斷,后面使用了云函數,發現可有可無
    }
    復制代碼
    • 下面是從云開發數據庫中獲取我們編寫好的課程表數據,如果對操作不熟悉可以查看 官方文檔
      1.打開云開發控制臺. 
      2.創建兩個集合對應上午下午課程表. 
      3.導入我們已經編寫好的數據 (一個星期早上和下午的課程分別為14節,所以導入數據時需要注意,如果想要當前課程沒有信息,也是需要導入空的字段數據來占一格) . 
      4.打開權限管理. 
      5.選中第一個.
    • 其中最后兩個步驟一定不能忘記!

    點擊查看js代碼
    data: {
        colorArr: ["rgb(229,188,76, 0.8)", "rgb(104,172,246, 0.8)", "rgb(183,135,242, 0.8)", "rgb(149,226,48, 0.8)", "#ff7070",
            "#e54d42", "#0081ff", "#7DC67D", "#E17572", "#C35CFF", "#33BCBA", "#FF8533", "#6E6E6E", "#ebd4ef",
            "#428BCA", "#39b54a", "#FF674F", "#e03997", "#00CED1", "#9F79EE", "#FFC125", "#32CD32", "#00BFFF", "#8799a3","#FF69B4"
        ],
        // 存儲隨機顏色
        randomColorArr: [],
        randomColorArr2: [],
        i: 25,
        random: '',
        random2: '',
    },
    onLoad: function(options) {
        this.data.randomColorArr = [] // 重置顏色數組1為空
        this.data.randomColorArr2 = [] // 重置顏色數組2為空
        const db = wx.cloud.database({
            env: '*****'  //你的云開發環境名
        })
    
        //獲取課程表上午數據
        db.collection('數據集合中你的表名').get().then((res) => {
            this.kechengbiao = res.data
            for (let j = 0; j <= 13; j++) { //for循環判斷課名和地名為空則不加顏色
                if (this.kechengbiao[j].data_name == '' && this.kechengbiao[j].address == '') {
                    this.random = 'none'
                    this.data.randomColorArr.push(this.random)
                } else {
                    this.random = this.data.colorArr[Math.floor(Math.random() * this.data.i)] //隨機顏色
                    this.data.randomColorArr.push(this.random)
                }
            }
            this.setData({
                loding: true,
                kechengbiao: this.kechengbiao,
                randomColorArr: this.data.randomColorArr
            })
        })
        //獲取課程表下午
        db.collection('數據集合中你的表名').get().then((res) => {
            this.kechengbiao2 = res.data
            for (let j = 0; j <= 13; j++) { //for循環判斷課名和地名為空則不加顏色
                if (this.kechengbiao2[j].data_name == '' && this.kechengbiao2[j].address == '') {
                    this.random2 = 'none'
                    this.data.randomColorArr2.push(this.random2)
                } else {
                    this.random2 = this.data.colorArr[Math.floor(Math.random() * this.data.i)] //隨機顏色
                    this.data.randomColorArr2.push(this.random2)
                }
            }
            this.setData({
                kechengbiao2: this.kechengbiao2,
                randomColorArr2: this.data.randomColorArr2
            })
        })
    },
    復制代碼
    <view class="cont-right">
        <view>
            <view class='appointent-date'>  //上午
                <view class="appointent-date-div" bindtap="select_date" wx:for="{{kechengbiao}}" wx:key="{{index}}" data-key='{{index}}' style="background-color:{{randomColorArr[index]}}">
                    <view class="flex-item" >
                        <text class='data_name'>{{item.data_name}}</text>
                        <text class='address'>{{item.address}}</text>
                    </view>
                </view>
            </view>
            <view class='appointent-date'>  //下午
                <view class="appointent-date-div" bindtap="select_date2" wx:for="{{kechengbiao2}}" wx:key="{{index}}" data-key='{{index}}' style="background-color:{{randomColorArr2[index]}}">
                    <view class="flex-item">
                        <text class='data_name'>{{item.data_name}}</text>
                        <text class='address'>{{item.address}}</text>
                </view>
            </view>
        </view>
    </view>
    復制代碼
    點擊查看wxss代碼
    .appointent-date {
        display: flex;
        justify-content: space-around;
        flex-wrap: wrap;
    }
    .appointent-date-div {
        height: 236rpx;
        border-radius: 10rpx;
        margin-bottom: 6rpx;
        color: white;
    }
    .flex-item {
        display: flex;
        justify-content: flex-start;
        flex-direction: column;
        width: 76rpx;
        height: 212rpx;
        font-size: 24rpx;
        padding: 6rpx;
        border: 1rpx solid transparent;
        text-align: left;
        border-radius: 10rpx;
        cursor: pointer;
        overflow: hidden;
    }
    .data_name {
        display: inline-block;
    }
    .address {
        display: inline-block;
    }
    復制代碼

  • 3.對課程實現增刪改查
    • 首先來做最簡單的  吧,我們需要在for循環中加入 data-='{{index}}' ,如上代碼所示:point_up_2:我加了data-key='{{index}}',其中key可以自定義,目的是為了在點擊課程時,可以獲取相循環中對應的下標,這樣我就可以在數據庫中搜索到當前點擊的數據并渲染出來.

    //點擊課程內容彈出詳細框
    select_date: function(e) {
      this.id = e.currentTarget.dataset.key //獲取當前點擊課程的下標
      const db = wx.cloud.database({
        env: '****'
      })
      db.collection('***').get().then(res => {
        console.log(res.data[this.id])   //獲取點擊時課程表數據
      })
    },
    復制代碼

    • 獲取到數據后我們可以根據自己的需求渲染在頁面上,這里我結合了vant的tab組件,左上角為返回,右上角為刪除課程表信息,下面就講  除課程信息.
    • 這里的刪除不是說真的將數據從我們的數據庫中刪除,而是將數據賦值為“”也就是空值,這樣就做到了刪除的功能,在此結合 云函數 來實現,因為云開發中的操作權限無法滿足我們對數據操作的要求.

    首先我們在云函數中創建一個新的 云函數 ,修改index.js文件

    • 這里會有一個問題也就是為什么我們要使用云函數,而不直接用云開發對數據進行處理,是因為云開發中的操作權限只能對自己提交到數據庫中的數據進行修改,如果是別人那么就無法修改.正常情況下,管理員肯定不止一位,所以對數據操作不能只限定一個人.
    //修改課程表
    const cloud = require('wx-server-sdk')
    cloud.init({
        env: '***',//你的開發環境
        traceUser: true
    })
    const db = cloud.database();
    exports.main = async (event, context) => { // 云函數入口函數
        try {
            return await db.collection('***').doc(event.id).update({  //需要修改的數據庫
                data: {
                    data_name: event.data_name,
                    address: event.address,
                    weekNum: event.weekNum,
                    pitchNum: event.pitchNum,
                    teacher: event.teacher
              },
            })
        } catch (e) {
            console.error(e)
        }
        return {
            event,
            openid: wxContext.OPENID,
            appid: wxContext.APPID,
            unionid: wxContext.UNIONID,
        }
    }
    復制代碼

    然后在js文件中編寫對應的代碼

    tapDialogButton(e) { //從課表刪除課程
        wx.cloud.callFunction({
            name: '***',// 你的云函數名稱
            data: {
              id: this._id,  //將數據進行空值賦值
              data_name: "",
              address: "",
              weekNum: "",
              pitchNum: "",
              teacher: ""
            },
            success: res => {
              // 關閉當前點擊課程詳情
            }
        })
    },
    復制代碼

    改,增

    • 做完了刪其實對改和增的實現應該也變得相對簡單,這里也是需要用到云函數,道理和上面講的一致.
    • 在獲取當前點擊的數據時先將此條數據存儲在data中,需要修改時,可以將數據賦值給input的value,在通過云函數來修改數據庫中對應的數據.增也是同樣的道理.這里就拿改為例.

    wxml

    <!-- 編輯頁 -->
    <view class="edit" hidden="{{ editShow }}">
        <van-nav-bar title="編輯課程" right-text="完成" left-arrow bind:click-left="editLeft" bind:click-right="editRight" />
        <view class="label className">
            <text>課名</text>
            <input  value="{{ nowClass.data_name }}" bindinput="bindKeyInput1"></input>
        </view>
        <view class="label">
            <text>教室</text>
            <input  value="{{ nowClass.address }}" bindinput="bindKeyInput2"></input>
        </view>
        <view class="label">
            <text>周數</text>
            <input  value="{{ nowClass.weekNum }}" bindinput="bindKeyInput3"></input>
        </view>
        <view class="label">
            <text>節數</text>
            <input  value="{{ nowClass.pitchNum }}" bindinput="bindKeyInput4"></input>
        </view>
        <view class="label">
            <text>老師</text>
            <input  value="{{ nowClass.teacher }}" bindinput="bindKeyInput5"></input>
        </view>
    </view>
    復制代碼

    新建修改課程表數據的云函數

    //修改課程表
    const cloud = require('wx-server-sdk')
    cloud.init({
        env: '***',//你的開發環境
        traceUser: true
    })
    const db = cloud.database();
    exports.main = async (event, context) => { // 云函數入口函數
        try {
            return await db.collection('***').doc(event.id).update({  //你要操作的數據庫
                data: {
                    data_name: event.data_name,
                    address: event.address,
                    weekNum: event.weekNum,
                    pitchNum: event.pitchNum,
                    teacher: event.teacher
                },
            })
        } catch (e) {
            console.error(e)
        }
        return {
            event,
            openid: wxContext.OPENID,
            appid: wxContext.APPID,
            unionid: wxContext.UNIONID,
        }
    }
    復制代碼

    js

    //  1.首先獲取輸入框的值,存在data中
    bindKeyInput1(e) { //課名
        this.editClassName = e.detail.value
    },
    bindKeyInput2(e) { //教室
        this.editAddress = e.detail.value
    },
    bindKeyInput3(e) { //周數
        this.editWeekNum = e.detail.value
    },
    bindKeyInput4(e) { //節數
        this.editPitchNum = e.detail.value
    },
    bindKeyInput5(e) { //老師
        this.editTeacher = e.detail.value
    },
    editRight() { //  2.編輯完成,點擊提交按鈕時將輸入框的值賦值給對應的字段名
      wx.cloud.callFunction({
        name: '***',// 修改課程表數據的云函數名稱
        data: {
          id: this._id,
          data_name: this.editClassName,
          address: this.editAddress,
          weekNum: this.editWeekNum,
          pitchNum: this.editPitchNum,
          teacher: this.editTeacher
        },
        success: res => {
        },
        fail: console.error
      })
    
    },
    復制代碼

    到這里課程表功能就做完了,如果有什么不懂得地方歡迎留言,或者寫的不好的地方,請大家指出一起探討,之后會繼續分享后面的內容。大家也可以提前掃碼查看湖人vs爵士季后赛,歡迎指出不足,謝謝

    鮮花
    鮮花 (1)
    雞蛋
    雞蛋

    剛表態過的朋友 (1 人)

    分享至 : QQ空間
    收藏
    原作者: 我是一個小菜雞 來自: 掘金
    飞艇前三计划直选计划 假内存 赚钱吗 大概要养多少才能赚钱 pos手刷怎么赚钱 捷报篮球比分网即时比分 浙江体彩6加1开奖结果 什么职业最赚钱知乎 浙江快乐12规则和奖金 任选9场奖金多少 家电水管清洗设备真的赚钱吗 广西快3app官方开奖 蓝洞棋牌 开水果店怎样能赚钱吗 东方6十1开奖结果 炸猪排赚钱 生化危机21點所有王牌