微信小程序開(kāi)發(fā)之OFO共享單車(chē),微信小程序選擇器
2017-12-20
導(dǎo)讀:上一節(jié)實(shí)現(xiàn)了掃碼,這一節(jié)我們開(kāi)始實(shí)現(xiàn)點(diǎn)擊單車(chē)報(bào)障控件之后跳轉(zhuǎn)的頁(yè)面: Screenshot_2017-05-07-10-13-55-110_com.tencent.mm.png (130 KB, 下載次數(shù): 5) 下載附件 保存到相冊(cè) 2017-6-5 14:33 上傳 Screens...
上一節(jié)實(shí)現(xiàn)了掃碼,這一節(jié)我們開(kāi)始實(shí)現(xiàn)點(diǎn)擊單車(chē)報(bào)障控件之后跳轉(zhuǎn)的頁(yè)面:
頁(yè)面分析
頁(yè)面結(jié)構(gòu)
復(fù)制代碼
這里用到的組件和指令有:
組件什么的看看組件文檔就知道了唄
頁(yè)面樣式
復(fù)制代碼
頁(yè)面數(shù)據(jù)邏輯
復(fù)制代碼
當(dāng)你不熟悉一個(gè)函數(shù)或者說(shuō)API返回的參數(shù)時(shí)(比如上述代碼中的e參數(shù)),可以嘗試去console.log一下,看看這個(gè)參數(shù)裝載著什么數(shù)據(jù)。這對(duì)于學(xué)習(xí)一個(gè)新的API是非常好的一個(gè)方法
其他章節(jié)
微信小程序開(kāi)發(fā)之OFO共享單車(chē)——掃碼
微信小程序開(kāi)發(fā)之OFO共享單車(chē)——單車(chē)報(bào)障頁(yè)
微信小程序開(kāi)發(fā)之OFO共享單車(chē)——個(gè)人中心頁(yè)
微信小程序開(kāi)發(fā)之OFO共享單車(chē)——錢(qián)包與充值
頁(yè)面分析
- 頁(yè)面可以勾選故障類(lèi)型,所以需要用到復(fù)選框組件;可以選擇上傳或拍攝圖片,所以要使用wx.chooseImage({})這個(gè)API選取圖片;可以輸入車(chē)牌號(hào)和備注,所以需要使用input輸入組件。
- 勾選類(lèi)型,選擇圖片,輸入備注信息完成后,后臺(tái)需要獲取這些輸入的數(shù)據(jù)提交到服務(wù)器以獲得反饋。
- 必須勾選類(lèi)型和選擇周?chē)h(huán)境圖片才能提交,否則彈窗提示??梢赃x擇多張圖片,也可以取消選擇的圖片。
頁(yè)面結(jié)構(gòu)
- <!--pages/warn/index.wxml-->
- <view class="container">
- <view class="choose">
- <view class="title">請(qǐng)選擇故障類(lèi)型</view>
- <checkbox-group bindchange="checkboxChange" class="choose-grids">
- <!-- itemsValue是data對(duì)象里定義的數(shù)組,item代表數(shù)組的每一項(xiàng),此處語(yǔ)法為循環(huán)輸出數(shù)組的每一項(xiàng)并渲染到每一個(gè)復(fù)選框。下面還有類(lèi)似語(yǔ)法 -->
- <block wx:for="{{itemsValue}}" wx:key="{{item}}">
- <view class="grid">
- <checkbox value="{{item.value}}" checked="{{item.checked}}" color="{{item.color}}" />{{item.value}}
- </view>
- </block>
- </checkbox-group>
- </view>
- <view class="action">
- <view class="title">拍攝單車(chē)周?chē)h(huán)境,便于維修師傅找車(chē)</view>
- <view class="action-photo">
- <block wx:for="{{picUrls}}" wx:key="{{item}}" wx:index="{{index}}">
- <image src="{{item}}"><icon type="cancel" data-index="{{index}}" color="red" size="18" class ="del" bindtap="delPic" /></image>
- </block>
- <text class="add" bindtap="bindCamera">{{actionText}}</text>
- </view>
- <view class="action-input">
- <input bindinput="numberChange" name="number" placeholder="車(chē)牌號(hào)(車(chē)牌損壞不用填)" />
- <input bindinput="descChange" name="desc" placeholder="備注" />
- </view>
- <view class="action-submit">
- <button class="submit-btn" type="default" loading="{{loading}}" bindtap="formSubmit" style="background-color: {{btnBgc}}">提交</button>
- </view>
- </view>
- </view>
這里用到的組件和指令有:
- 復(fù)選框組件 <checkbox-group>
- 單個(gè)復(fù)選框<checkbox>
- 輸入框組件<input>
- 按鈕組件<button>
- 圖標(biāo)組件<icon>
- 循環(huán)指令:wx:for = "itemValues" wx:key="item" 表示 :
- 循環(huán)一個(gè)數(shù)組itemValues,數(shù)組每一項(xiàng)為item,item是一個(gè)對(duì)象,具體渲染到模板可能是對(duì)象的某個(gè)key的value,如:{{item.value}}
組件什么的看看組件文檔就知道了唄
頁(yè)面樣式
- /* pages/wallet/index.wxss */
- .choose{
- background-color: #fff;
- }
- .choose-grids{
- display: flex;
- flex-wrap: wrap;
- justify-content: space-around;
- padding: 50rpx;
- }
- .choose-grids .grid{
- width: 45%;
- height: 100rpx;
- margin-top: 36rpx;
- border-radius: 6rpx;
- line-height: 100rpx;
- text-align: center;
- border: 2rpx solid #b9dd08;
- }
- .choose-grids .grid:first-child,
- .choose-grids .grid:nth-of-type(2){
- margin-top: 0;
- }
- .action .action-photo{
- background-color: #fff;
- padding: 40rpx 0px 40rpx 50rpx;
- }
- .action .action-photo image{
- position: relative;
- display: inline-block;
- width: 120rpx;
- height: 120rpx;
- overflow: visible;
- margin-left: 25rpx;
- }
- .action .action-photo image icon.del{
- display: block;
- position: absolute;
- top: -20rpx;
- right: -20rpx;
- }
- .action .action-photo text.add{
- display: inline-block;
- width: 120rpx;
- height: 120rpx;
- line-height: 120rpx;
- text-align: center;
- font-size: 24rpx;
- color: #ccc;
- border: 2rpx dotted #ccc;
- margin-left: 25rpx;
- vertical-align: top;
- }
- .action .action-input{
- padding-left: 50rpx;
- margin-top: 30rpx;
- background-color: #fff;
- }
- .action .action-input input{
- width: 90%;
- padding-top: 40rpx;
- padding-bottom: 40rpx;
- }
- .action .action-input input:first-child{
- border-bottom: 2rpx solid #ccc;
- padding-bottom: 20rpx;
- }
- .action .action-input input:last-child{
- padding-top: 20rpx;
- }
- .action .action-submit{
- padding: 40rpx 40rpx;
- background-color: #f2f2f2;
- }
頁(yè)面數(shù)據(jù)邏輯
- // pages/wallet/index.js
- Page({
- data:{
- // 故障車(chē)周?chē)h(huán)境圖路徑數(shù)組
- picUrls: [],
- // 故障車(chē)編號(hào)和備注
- inputValue: {
- num: 0,
- desc: ""
- },
- // 故障類(lèi)型數(shù)組
- checkboxValue: [],
- // 選取圖片提示
- actionText: "拍照/相冊(cè)",
- // 提交按鈕的背景色,未勾選類(lèi)型時(shí)無(wú)顏色
- btnBgc: "",
- // 復(fù)選框的value,此處預(yù)定義,然后循環(huán)渲染到頁(yè)面
- itemsValue: [
- {
- checked: false,
- value: "私鎖私用",
- color: "#b9dd08"
- },
- {
- checked: false,
- value: "車(chē)牌缺損",
- color: "#b9dd08"
- },
- {
- checked: false,
- value: "輪胎壞了",
- color: "#b9dd08"
- },
- {
- checked: false,
- value: "車(chē)鎖壞了",
- color: "#b9dd08"
- },
- {
- checked: false,
- value: "違規(guī)亂停",
- color: "#b9dd08"
- },
- {
- checked: false,
- value: "密碼不對(duì)",
- color: "#b9dd08"
- },
- {
- checked: false,
- value: "剎車(chē)壞了",
- color: "#b9dd08"
- },
- {
- checked: false,
- value: "其他故障",
- color: "#b9dd08"
- }
- ]
- },
- // 頁(yè)面加載
- onLoad:function(options){
- wx.setNavigationBarTitle({
- title: '報(bào)障維修'
- })
- },
- // 勾選故障類(lèi)型,獲取類(lèi)型值存入checkboxValue
- checkboxChange: function(e){
- let _values = e.detail.value;
- if(_values.length == 0){
- this.setData({
- btnBgc: ""
- })
- }else{
- this.setData({
- checkboxValue: _values,
- btnBgc: "#b9dd08"
- })
- }
- },
- // 輸入單車(chē)編號(hào),存入inputValue
- numberChange: function(e){
- this.setData({
- inputValue: {
- num: e.detail.value,
- desc: this.data.inputValue.desc
- }
- })
- },
- // 輸入備注,存入inputValue
- descChange: function(e){
- this.setData({
- inputValue: {
- num: this.data.inputValue.num,
- desc: e.detail.value
- }
- })
- },
- // 提交到服務(wù)器
- formSubmit: function(e){
- // 圖片和故障類(lèi)型必選
- if(this.data.picUrls.length > 0 && this.data.checkboxValue.length> 0){
- wx.request({
- url: 'https://www.easy-mock.com/mock/59098d007a878d73716e966f/ofodata/msg',
- data: {
- // 如果是post請(qǐng)求就把這些數(shù)據(jù)傳到服務(wù)器,這里用get請(qǐng)求模擬一下假裝獲得了服務(wù)器反饋
- // picUrls: this.data.picUrls,
- // inputValue: this.data.inputValue,
- // checkboxValue: this.data.checkboxValue
- },
- method: 'get', //
- // header: {}, // 設(shè)置請(qǐng)求的 header
- success: function(res){
- wx.showToast({
- title: res.data.data.msg,
- icon: 'success',
- duration: 2000
- })
- }
- })
- }else{
- wx.showModal({
- title: "請(qǐng)?zhí)顚?xiě)反饋信息",
- content: '看什么看,趕快填反饋信息,削你啊',
- confirmText: "我我我填",
- cancelText: "勞資不填",
- success: (res) => {
- if(res.confirm){
- // 繼續(xù)填
- }else{
- console.log("back")
- wx.navigateBack({
- delta: 1 // 回退前 delta(默認(rèn)為1) 頁(yè)面
- })
- }
- }
- })
- }
- },
- // 選擇故障車(chē)周?chē)h(huán)境圖 拍照或選擇相冊(cè)
- bindCamera: function(){
- wx.chooseImage({
- count: 4,
- sizeType: ['original', 'compressed'],
- sourceType: ['album', 'camera'],
- success: (res) => {
- let tfps = res.tempFilePaths; // 圖片本地路徑
- let _picUrls = this.data.picUrls;
- for(let item of tfps){
- _picUrls.push(item);
- this.setData({
- picUrls: _picUrls,
- actionText: "+"
- });
- }
- }
- })
- },
- // 刪除選擇的故障車(chē)周?chē)h(huán)境圖
- delPic: function(e){
- let index = e.target.dataset.index;
- let _picUrls = this.data.picUrls;
- _picUrls.splice(index,1);
- this.setData({
- picUrls: _picUrls
- })
- }
- })
當(dāng)你不熟悉一個(gè)函數(shù)或者說(shuō)API返回的參數(shù)時(shí)(比如上述代碼中的e參數(shù)),可以嘗試去console.log一下,看看這個(gè)參數(shù)裝載著什么數(shù)據(jù)。這對(duì)于學(xué)習(xí)一個(gè)新的API是非常好的一個(gè)方法
其他章節(jié)
微信小程序開(kāi)發(fā)之OFO共享單車(chē)——掃碼
微信小程序開(kāi)發(fā)之OFO共享單車(chē)——單車(chē)報(bào)障頁(yè)
微信小程序開(kāi)發(fā)之OFO共享單車(chē)——個(gè)人中心頁(yè)
微信小程序開(kāi)發(fā)之OFO共享單車(chē)——錢(qián)包與充值
第二部分:如何開(kāi)通一個(gè)小商店