版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章緒論1.1項(xiàng)目開發(fā)背景現(xiàn)在的科技社會(huì)中,手機(jī)成為了每個(gè)人手中不可或缺的最好工具。騰訊公司的應(yīng)用微信是目前我國(guó)手機(jī)用戶中裝機(jī)量最大的軟件之一,截至2020年9月,微信平均日登錄用戶達(dá)到9億,其中微信公眾號(hào)的活躍粉絲數(shù)近8億,生活服務(wù)類小程序在其中是訪問(wèn)人數(shù)最多的一類。因此微信的用戶數(shù)量和小程序受眾人數(shù)較為龐大,廣大學(xué)生和企業(yè)員工作為手機(jī)用戶的主力軍,使用微信的基數(shù)也較為龐大?;邶嫶笥脩魯?shù)量進(jìn)行小程序的開發(fā),目標(biāo)用戶群體如學(xué)生、員工等能夠享受到便利的服務(wù)。民以食為天,我國(guó)自古以來(lái)就對(duì)“吃”很重視。如今已經(jīng)從如何吃飽變成了如何吃得開心、滿意。而往往在點(diǎn)餐這一環(huán)節(jié),傳統(tǒng)的點(diǎn)餐模式會(huì)讓大多數(shù)食客失去耐心;而現(xiàn)有的點(diǎn)餐應(yīng)用都有應(yīng)用體積龐大、應(yīng)用繁瑣的問(wèn)題。為此基于小程序的開發(fā),用輕便簡(jiǎn)潔的模式來(lái)打造個(gè)性化服務(wù),方便個(gè)人和商戶兩端直觀地點(diǎn)餐、備餐。在一次實(shí)地調(diào)研中,某公司食堂點(diǎn)餐模式仍舊為傳統(tǒng)紙筆記錄的形式,點(diǎn)餐訂餐效率低下,有時(shí)出現(xiàn)備餐不全、取餐菜品出錯(cuò)的問(wèn)題。為此,該公司負(fù)責(zé)人就此提出了針對(duì)食堂點(diǎn)餐,希望擁有一個(gè)方便的小程序來(lái)滿足智能化點(diǎn)餐的需求。因此本文以開發(fā)針對(duì)公司點(diǎn)餐的小程序作為基礎(chǔ),探討目前的點(diǎn)餐程序的模式,并實(shí)際設(shè)計(jì)和開發(fā)一個(gè)微信點(diǎn)餐小程序。1.2主要工作本論文旨在設(shè)計(jì)和開發(fā)基于小程序?qū)崿F(xiàn)的點(diǎn)餐系統(tǒng)。本論文使用軟件工程的開發(fā)流程進(jìn)行開發(fā),包括可行性分析、需求分析、系統(tǒng)總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)、系統(tǒng)測(cè)試等環(huán)節(jié)。需求分析階段,根據(jù)項(xiàng)目開始前的調(diào)查工作,以及部分網(wǎng)上資料來(lái)源進(jìn)行需求分析。在系統(tǒng)總體設(shè)計(jì)階段,會(huì)根據(jù)需求設(shè)計(jì)出E-R圖,并詳細(xì)介紹圖表內(nèi)容。在詳細(xì)設(shè)計(jì)階段,根據(jù)不同子模塊進(jìn)行對(duì)應(yīng)的編程,并給出代碼部分相關(guān)截圖展示。在系統(tǒng)測(cè)試階段,將進(jìn)行模擬機(jī)測(cè)試以及真機(jī)測(cè)試等方式,將最終成果以截圖的形式展示在系統(tǒng)測(cè)試部分中。1.3論文結(jié)構(gòu)安排本論文結(jié)構(gòu)安排如下:第一章為緒論。第二章為通過(guò)對(duì)市場(chǎng)和技術(shù)的可行性分析之后,給出基于微信小程序的食堂點(diǎn)餐系統(tǒng)的可行性分析。第三章提供了基于微信小程序的食堂點(diǎn)餐系統(tǒng)需求分析。第四章是基于微信小程序的食堂點(diǎn)餐系統(tǒng)的總體設(shè)計(jì),介紹相關(guān)使用的技術(shù),給出相關(guān)E-R圖,并給出系統(tǒng)功能圖。第五章介紹了系統(tǒng)的詳細(xì)設(shè)計(jì),這一章里針對(duì)具體功能給出設(shè)計(jì)思路,并給出相關(guān)代碼展示。第六章為系統(tǒng)測(cè)試,這一章中將進(jìn)行開發(fā)者工具中模擬展示,以及真機(jī)測(cè)試部分,并且給出相關(guān)測(cè)試界面的截圖。第七章為總結(jié)與展望,這一章總結(jié)本項(xiàng)目的開發(fā)過(guò)程,并對(duì)基于微信小程序的食堂點(diǎn)餐系統(tǒng)的不足之處進(jìn)行經(jīng)驗(yàn)總結(jié),同時(shí)展望未來(lái)相關(guān)發(fā)展。第2章可行性分析2.1市場(chǎng)可行性市場(chǎng)可行性研究是一個(gè)項(xiàng)目的建設(shè)是否符合社會(huì)或市場(chǎng)的需要,只有當(dāng)項(xiàng)目提供的產(chǎn)品或服務(wù)能諸方面滿足社會(huì)或市場(chǎng)近期與遠(yuǎn)期需要時(shí),它的建設(shè)才是有意義的。因此,在進(jìn)行項(xiàng)目可行性研究時(shí),首先要進(jìn)行市場(chǎng)可行性研究。在現(xiàn)代社會(huì),智能手機(jī)憑借便攜、智能、功能多樣的特點(diǎn),幾乎成為了大家出行的必備工具。我國(guó)目前的政策推行“互聯(lián)網(wǎng)+”的新模式,餐飲業(yè)與互聯(lián)網(wǎng)技術(shù)之間有了更深度的融合和應(yīng)用。點(diǎn)餐軟件層面,有美團(tuán)、餓了么、百度外賣等專注外賣的點(diǎn)餐平臺(tái);另外傳統(tǒng)西式快餐廳肯德基、麥當(dāng)勞也有自己的點(diǎn)餐配送服務(wù)。而目前缺乏針對(duì)在校學(xué)生、在職員工的微信小程序來(lái)為這類人群服務(wù),市場(chǎng)上存在一定的空缺?;谖⑿判〕绦虻氖程命c(diǎn)餐系統(tǒng)的開發(fā)設(shè)計(jì),就能滿足學(xué)生、員工對(duì)此方面的需求,同時(shí)彌補(bǔ)相關(guān)空缺。因此,食堂需要這樣一個(gè)多方面的綜合網(wǎng)絡(luò)平臺(tái),在為學(xué)生、員工提供點(diǎn)餐的便利服務(wù)的同時(shí),也提高了生活服務(wù)、后勤保障運(yùn)行的效率。2.2技術(shù)可行性本系統(tǒng)技術(shù)可行性主要有:①JS開發(fā)技術(shù)成熟,微信小程序技術(shù)成熟。②開發(fā)過(guò)程有對(duì)應(yīng)的微信小程序開發(fā)手冊(cè)、微信公眾平臺(tái)可以參考學(xué)習(xí)。③微信小程序開發(fā)者工具能提供相關(guān)開發(fā)工具、配置環(huán)境。④微信云開發(fā)技術(shù)提供數(shù)據(jù)庫(kù)和服務(wù)器,原生打通微信開放能力。
第3章需求分析3.1系統(tǒng)頂層需求分析基于微信小程序的食堂點(diǎn)餐系統(tǒng)分為點(diǎn)餐、支付、訂單、評(píng)價(jià)、管理員這五個(gè)模塊。圖3.1為本系統(tǒng)的頂層需求結(jié)構(gòu)。圖3圖3.SEQ圖表\*ARABIC1基于微信小程序的食堂點(diǎn)餐系統(tǒng)需求結(jié)構(gòu)圖3.2系統(tǒng)各模塊需求分析3.2.1點(diǎn)餐點(diǎn)餐界面是系統(tǒng)的核心模塊,主要功能是負(fù)責(zé)菜單展示以及點(diǎn)餐和食客的支付。食客在點(diǎn)餐頁(yè)面可以查看菜品圖、菜品名、菜品價(jià)格、銷量等信息作為點(diǎn)餐參考,當(dāng)確定需要的菜品后,選擇加入購(gòu)物車,在購(gòu)物車中選擇支付方式,完成支付后,生成一筆訂單,食客端點(diǎn)餐的流程就完成了。圖3.圖3.SEQ圖表\*ARABIC2點(diǎn)餐模塊流程圖3.2.2“我的”圖3.3“我的”模塊用例圖圖3.3“我的”模塊用例圖3.2.3管理員管理員模塊作為便利管理員操作的模塊,整合到小程序當(dāng)中。在進(jìn)入管理員模塊后,需要成功登錄到管理員頁(yè)面,才能進(jìn)行下一步操作。在管理員頁(yè)面,可以看到后廚管理訂單,此處可以收到來(lái)自食客點(diǎn)餐端的訂單,顯示為待制作菜品。制作完成后,點(diǎn)擊并確認(rèn)上菜,食客就可以取餐。后廚可以查看食客的評(píng)價(jià)情況,以及訂單是否完成,圖3.4管理員模塊用例圖圖3.4管理員模塊用例圖第4章系統(tǒng)總體設(shè)計(jì)4.1開發(fā)技術(shù)簡(jiǎn)介本節(jié)介紹基于微信小程序的食堂點(diǎn)餐系統(tǒng)開發(fā)時(shí)所用的一些技術(shù)和開發(fā)環(huán)境。用到的開發(fā)技術(shù)主要有:①前端:WXML、WXSS、JavaScript;②后端:微信小程序云開發(fā);③云開發(fā)提供的JSON數(shù)據(jù)庫(kù)。系統(tǒng)開發(fā)環(huán)境:微信小程序開發(fā)者工具、VSCode,操作系統(tǒng)WIN10、CPUi5-7300HQ、內(nèi)存16G。WXML:用以框架設(shè)計(jì),結(jié)合基礎(chǔ)組件、事件系統(tǒng),構(gòu)建出頁(yè)面的結(jié)構(gòu)。WXSS:一種類似于CSS的語(yǔ)言,用于描述WXML的組件樣式,決定WXML的組件如何顯示。JavaScript:作為即時(shí)編譯腳本語(yǔ)言用以開發(fā)web頁(yè)面。4.2系統(tǒng)功能圖4.2.1系統(tǒng)功能圖基于微信小程序的食堂點(diǎn)餐系統(tǒng)主要由客戶端(基于微信小程序和手機(jī)微信APP)、小程序管理端、WEB管理端所組成。其中客戶端、小程序管理端即為所研究的微信小程序的食堂點(diǎn)餐系統(tǒng),WEB管理端由微信小程序云開發(fā)的內(nèi)容管理系統(tǒng)CMS來(lái)進(jìn)行。主要包括以下三個(gè)主要的功能模塊,其中點(diǎn)餐、“我的”兩個(gè)模塊為主要模塊,管理員模塊作為管理員入口整合進(jìn)入小程序系統(tǒng)中。三個(gè)模塊下還有相對(duì)應(yīng)的子模塊,通過(guò)實(shí)現(xiàn)子模塊從而實(shí)現(xiàn)整個(gè)系統(tǒng)的功能,提供一個(gè)完整的小程序上的點(diǎn)餐服務(wù)。圖4.1微信點(diǎn)餐小程序系統(tǒng)功能圖圖4.1微信點(diǎn)餐小程序系統(tǒng)功能圖4.2.2小程序與服務(wù)器交互圖圖4.2微信點(diǎn)餐小程序與服務(wù)器端交互的流程圖微信小程序用戶與小程序與服務(wù)器之間交互的流程圖如下圖所示。圖4.2微信點(diǎn)餐小程序與服務(wù)器端交互的流程圖4.3數(shù)據(jù)庫(kù)設(shè)計(jì)4.3.1E-R圖點(diǎn)餐系統(tǒng)的E-R圖如下圖所示。菜品包括菜品編號(hào)、菜名、價(jià)格、銷量的屬性;下單后,訂單包括訂單編號(hào)、訂單發(fā)生時(shí)間、訂單包括菜品、訂單支付金額的屬性;訂單完成后需要評(píng)價(jià),評(píng)價(jià)里有當(dāng)前訂單的評(píng)價(jià)和歷史訂單評(píng)價(jià)兩個(gè)屬性;最后管理員負(fù)責(zé)管理菜品以及獲取評(píng)價(jià)。圖4.3小程序圖4.3小程序點(diǎn)餐系統(tǒng)E-R圖4.3.2關(guān)系表設(shè)計(jì)1、菜品關(guān)系表表4-1food表序列列名類型可空注釋1idstringNotnull由系統(tǒng)自動(dòng)生成的id2_createTimenumberNotnull由系統(tǒng)自動(dòng)生成的創(chuàng)造時(shí)間屬性3_updateTimenumberNotnull由系統(tǒng)自動(dòng)生成的更新時(shí)間屬性4fenleistringNull菜品分類5iconstringNull菜品圖6namestringNull菜品名稱7pricenumberNull菜品價(jià)格8sellnumberNull菜品銷量9statusstringNotnull菜品上架狀態(tài)2、訂單關(guān)系表表4-2order表序列列名類型可空注釋1idstringNotnull由系統(tǒng)自動(dòng)生成的id2_createTimenumberNotnull由系統(tǒng)自動(dòng)生成的創(chuàng)造時(shí)間屬性3_openidstringNotnull小程序開發(fā)必要的openid4addressstringNull店內(nèi)下單5beizhustringNull備注6namestringNull用戶名7orderListarrayNull點(diǎn)餐訂單8renshunumberNull人數(shù)9statusnumberNull大桌或小桌10totalPricestringNull總價(jià)3、評(píng)論關(guān)系表表4-3pinglun表序列列名類型可空注釋1idstringNotnull由系統(tǒng)自動(dòng)生成的id2_createTimenumberNotnull由系統(tǒng)自動(dòng)生成的創(chuàng)造時(shí)間屬性3_openidstringNotnull小程序開發(fā)必要的openid4avatarUrlstringNull用戶頭像5contentstringNull評(píng)論內(nèi)容6namestringNull用戶名7orderIdstringNull訂單號(hào)4、管理員登錄關(guān)系表表4-4admin表序列列名類型可空注釋1idstringNotnull由系統(tǒng)自動(dòng)生成的id2_createTimenumberNotnull由系統(tǒng)自動(dòng)生成的創(chuàng)造時(shí)間屬性3_updateTimenumberNotnull由系統(tǒng)自動(dòng)生成的更新時(shí)間屬性4namestringNull管理員用戶名5passwordstringNull管理員登錄密碼
第5章系統(tǒng)總體設(shè)計(jì)本章介紹基于微信小程序的食堂點(diǎn)餐系統(tǒng)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)。本章將通過(guò)相關(guān)核心代碼、系統(tǒng)運(yùn)行截圖,針對(duì)點(diǎn)餐、“我的”、管理員三大功能模塊進(jìn)行展示,另外將頁(yè)面設(shè)計(jì)也將展示。5.1點(diǎn)餐模塊的實(shí)現(xiàn)5.1.1功能介紹進(jìn)入微信點(diǎn)餐小程序,若要進(jìn)行點(diǎn)餐服務(wù),則首先需要登錄小程序。在“我的”頁(yè)面微信授權(quán)登錄小程序后,就可以回到首頁(yè)進(jìn)行點(diǎn)餐了。圖5.3③首頁(yè)圖5.2②授權(quán)登錄圖5.3③首頁(yè)圖5.2②授權(quán)登錄圖5.1①“我的”頁(yè)圖5.6⑥完成訂單圖5.5⑤支付頁(yè)圖5.4④菜單頁(yè)點(diǎn)餐5.1.2圖5.6⑥完成訂單圖5.5⑤支付頁(yè)圖5.4④菜單頁(yè)點(diǎn)餐1、點(diǎn)餐myOrder.js部分:
getMyOrderList()
{
let
openid
=
app._checkOpenid();
if
(!openid)
{
return;
}
wx.cloud.callFunction({
name:
'getOrderList',
data:
{
action:
'user',
orderStatus:
orderStatus
}
})
.then(res
=>
{
console.log("我的訂單列表",
res)
this.setData({
list:
res.result.data
})
}).catch(res
=>
{
console.log("我的訂單列表失敗",
res)
})
},myOrder.wxml部分:<view
wx:if="{{list.length>0}}">
<view
class='cont_count'
wx:for="{{list}}"
wx:key="key">
<view
class='dingdanbianhao'>訂單編號(hào):{{item._id}}
</view>
<view
class="content">
<view
class='mingxi'>
<block
wx:for="{{item.orderList}}"
wx:for-item="arr_item"
wx:key="key">
<view
class="mingxi_item">
<text>{{arr_}}
X{{arr_item.quantity}}</text>
<text
class="mingxi_price">
¥{{arr_item.price}}</text>
</view>
</block>
<view
class='dibuttxt'>地址:{{item.address}}</view>
<view
class='dibuttxt'>下單時(shí)間:{{item._createTime?filters.formatDate(item._createTime):''}}</view>
</view></view><view
wx:else
style="margin-top:16rpx;text-align:
center;">
<label
class='none_tab'>數(shù)據(jù)為空哦~~</label></view>2、支付pay.js部分:
onLoad()
{
console.log('app地址',
app.globalData.address)
this.setData({
address:
app.globalData.address
})
var
arr
=
wx.getStorageSync('cart')
||
[];
for
(var
i
in
arr)
{
this.data.totalPrice
+=
arr[i].quantity
*
arr[i].price;
this.data.totalNum
+=
arr[i].quantity
}
this.setData({
cartList:
arr,
totalPrice:
this.data.totalPrice.toFixed(2),
totalNum:
this.data.totalNum
})
},
getDinnerNUM(e)
{
this.setData({
diner_num:
e.currentTarget.dataset.num
});
},
getInputNum(e)
{
this.setData({
diner_num:
e.detail.value
})
},
getRemark(e)
{
this.setData({
beizhu:
e.detail.value
})
},
submitOrder:
function
(e)
{
let
arr
=
wx.getStorageSync('cart')
||
[];
let
arrNew
=
[]
arr.forEach(item
=>
{
arrNew.push({
_id:
item._id,
name:
,
price:
item.price,
quantity:
item.quantity,
name:
,
})
});pay.wxml部分:<view
class="mingxi_title">點(diǎn)餐明細(xì)</view><block
wx:for="{{cartList}}"
wx:key="index">
<view
class="mingxi_item">
<text>{{}}
X{{item.quantity}}</text>
<text
class="base_color">¥{{item.price}}</text>
</view></block><view
class="zongjia">合計(jì):<span>{{totalPrice}}元,{{totalNum}}份</span></view><view
class="base_line_10rpx"></view><view
class="mingxi_title">地址:{{address}}</view><input
focus
placeholder="請(qǐng)輸入用餐人數(shù)"
type="number"
bindinput="getInputNum"
value="{{diner_num}}"
/>5.2“我的”模塊的實(shí)現(xiàn)5.2.1功能介紹初次使用小程序,需要先微信授權(quán)登錄到小程序,才能繼續(xù)使用。由于微信授權(quán)登錄屬于微信自帶的功能,登陸后在“我的”頁(yè)通過(guò)查看頭像和昵稱則可以判斷是否登錄成功。后臺(tái)可以看到有數(shù)據(jù)的回傳,證明登錄成功??梢酝ㄟ^(guò)“我的”頁(yè)查看訂單情況,點(diǎn)擊進(jìn)入“我的訂單”即可以看到“待上餐”、“待評(píng)價(jià)”、“已完成”、“已取消”四個(gè)狀態(tài)的訂單情況,換言之,在此頁(yè)可以跟蹤訂單的進(jìn)度,也可以查看訂單點(diǎn)餐菜品、總價(jià)、下單時(shí)間等等詳細(xì)信息。另外在“待評(píng)價(jià)”分頁(yè),用戶需要進(jìn)行對(duì)訂單的評(píng)價(jià),評(píng)價(jià)完成后才完成一次完整的點(diǎn)餐評(píng)價(jià)流程。在“我的”頁(yè)還可以查看評(píng)價(jià),點(diǎn)擊進(jìn)入“評(píng)價(jià)列表”進(jìn)入評(píng)論查看歷史評(píng)價(jià),可以查看全部評(píng)價(jià),也可以查看我的評(píng)價(jià)?!拔业摹表?yè)面還提供了在線客服服務(wù),這一功能由微信的在線客服功能實(shí)現(xiàn),能夠及時(shí)與綁定小程序的管理員進(jìn)行微信聊天聯(lián)系,較為便利。圖5.11⑤在線客服對(duì)話圖5.10④查看歷史評(píng)價(jià)圖5.9圖5.11⑤在線客服對(duì)話圖5.10④查看歷史評(píng)價(jià)圖5.9②訂單狀態(tài)一覽圖5.8②授權(quán)登錄圖5.7①“我的”頁(yè)5.2.2代碼展示1、“我的”頁(yè)面me.js部分:const
app
=
getApp();Page({
data:
{
isShowUserName:
false,
userInfo:
null,
},
onGotUserInfo:
function
(e)
{
console.log('用戶信息',
e)
if
(e.detail.userInfo)
{
var
user
=
e.detail.userInfo;
this.setData({
isShowUserName:
true,
userInfo:
e.detail.userInfo,
})
user.openid
=
app.globalData.openid;
app._saveUserInfo(user);
}
else
{
app._showSettingToast('登陸需要允許授權(quán)');
}},
onShow(options)
{
var
user
=
app.globalData.userInfo;
if
(user
&&
user.nickName)
{
this.setData({
isShowUserName:
true,
userInfo:
user,
})
}
},
onLoad:
function
(options)
{
var
that
=
this;
var
user
=
app.globalData.userInfo;
},})me.wxml部分:<view
wx:if="{{isShowUserName}}">
<view
class='my_item'
bindtap="goToMyOrder">
<text>我的訂單</text>
<view
class='right_arrow'
/></view>
<view
class='my_item'
bindtap="goCommentPage">
<text>評(píng)價(jià)列表</text>
<view
class='right_arrow'
/>
</view></view><view
class='my_item'>
<button
class="button"
open-type="contact">在線客服</button>
<view
class='right_arrow'
/></view>2、評(píng)論頁(yè)面mycomment.js部分:var
app
=
getApp()let
DB
=
wx.cloud.database()Page({
data:
{
},
onLoad()
{
this.getCommentList();
},
getCommentList()
{
wx.cloud.callFunction({
name:
"getpinglun",
})
.then(res
=>
{
console.log("查詢?cè)u(píng)論成功",
res)
if
(res
&&
res.result)
{
let
dataList
=
res.result.data;
this.setData({
list:
dataList
})
}
else
{
this.setData({
list:
[]
})
}
}).catch(res
=>
{
console.log("查詢?cè)u(píng)論失敗",
res)
})
},})mycomment.wxml部分:<view
wx:if="{{list.length>0}}">
<view
class='cont_count'
wx:for="{{list}}"
wx:key="key">
<view
class="item_root">
<view
class="top_root">
<image
class='img_left'
src='{{item.avatarUrl}}'
/>
<view
class="top_right">
<text
class='name'>{{item._createTime?filters.formatDate(item._createTime):''}}</text>
<text
class='name'>{{}}評(píng)論:</text>
</view>
</view>
<view
class='content'>{{item.content}}</view>
</view>
</view></view><view
wx:else
class='nothing'>
<label
class='none_tab'>數(shù)據(jù)為空哦~~</label></view>5.3管理員模塊的實(shí)現(xiàn)5.3.1功能介紹管理員模塊,實(shí)際是提供給食堂后廚工作人員的功能。首先管理員在小程序端的入口位于“我的”頁(yè)中“管理員登錄”一項(xiàng),進(jìn)入后需要使用賬號(hào)與密碼,賬號(hào)密碼需要提前在數(shù)據(jù)庫(kù)中錄入,檢驗(yàn)通過(guò)后方可進(jìn)入管理員頁(yè)面。管理員頁(yè)面分為后廚人員管理訂單,此頁(yè)需要對(duì)訂單及時(shí)處理,菜品制作完成后,需要點(diǎn)擊制作完成,并通過(guò)確認(rèn)完成讓食客取餐。管理員頁(yè)面可以通過(guò)查看評(píng)論一覽,獲得來(lái)自食客的點(diǎn)評(píng)。具體內(nèi)容需要來(lái)到小程序云開發(fā)內(nèi)容管理系統(tǒng)CMS的WEB端對(duì)菜品、訂單、評(píng)論、進(jìn)行增刪改查,增減管理員、設(shè)置管理員密碼等也是在CMS中處理操作。
圖5.17⑥評(píng)論一覽圖5.16⑤訂單完成后圖5.15圖5.17⑥評(píng)論一覽圖5.16⑤訂單完成后圖5.15④后廚訂單管理圖5.14③管理員頁(yè)面圖5.13②管理員登錄頁(yè)圖5.12①管理員登錄入口圖5.18CMS系統(tǒng)后臺(tái)圖5.18CMS系統(tǒng)后臺(tái)5.3.2代碼展示1、管理員登錄部分admin.js部分:const
app
=
getApp()let
name
=
""let
password
=
""const
db
=
wx.cloud.database()Page({
data:
{
isAdmin:
false,
},
goHouchu()
{
wx.navigateTo({
url:
'/pages/adminHouchu/adminHouchu',
})
},
goCommentPage()
{
wx.navigateTo({
url:
'/pages/comment/comment',
})
},
onLoad()
{
let
admin
=
wx.getStorageSync('admin')
if
(admin
&&
&&
admin.password)
{
this.login(,
admin.password)
}
},
getName:
function
(e)
{
name
=
e.detail.value
},
getPassWord:
function
(e)
{
password
=
e.detail.value
},
formSubmit:
function
()
{
if
(name
==
''
||
name
==
undefined)
{
wx.showToast({
title:
'用戶名不能為空',
icon:
'none'
})
return;
}
if
(password
==
''
||
password
==
undefined)
{
wx.showToast({
title:
'密碼不能為空',
icon:
'none'
})
return;
}
this.login(name,
password)
},
login(name,
password)
{
db.collection('admin').where({
name:
name,
password:
password
}).get()
.then(res
=>
{
console.log("登陸成功",
res)
if
(res.data
&&
res.data.length
>
0)
{
this.setData({
isAdmin:
true
})
let
admin
=
{
name:
name,
password:
password
}
wx.setStorageSync('admin',
admin)
wx.showToast({
icon:
'none',
title:
'登錄成功',
})
}
else
{
this.setData({
isAdmin:
false
})
wx.showToast({
icon:
'none',
title:
'賬號(hào)或密碼錯(cuò)誤',
})
}
}).catch(res
=>
{
console.log("登陸失敗",
res)
wx.showToast({
icon:
'none',
title:
'賬號(hào)或密碼錯(cuò)誤',
})
this.setData({
isAdmin:
false
})
})
},})admin.wxml部分:<view
wx:if="{{!isAdmin}}"
class="container">
<view
class='line_1px'
/>
<view
class='item_root'>
賬號(hào):
<input
class="textarea25px"
bindinput="getName"
value="{{username}}"
maxlength='10'
/>
</view>
<view
class='line_1px'
/>
<view
class='item_root'>
密碼:
<input
class="textarea25px"
bindinput="getPassWord"
value="{{phone}}"
maxlength='11'
/>
</view>
<button
class='btn_fabu'
bindtap='formSubmit'
type='primary'>管理員登陸</button></view><view
wx:if="{{isAdmin}}">
<view
class="tab">
<text
class="tabNum"
bindtap="goHouchu">后廚人員訂單管理</text>
</view>
<view
class="tab">
<text
class="tabNum"
bindtap="goCommentPage">評(píng)論一覽</text>
</view></view>2、后廚人員訂單管理部分:adminHouchu.js部分:
getMyOrderList()
{
let
openid
=
app._checkOpenid();
if
(!openid)
{
return;
}
wx.cloud.callFunction({
name:
'getOrderList',
data:
{
action:'admin',
orderStatus:
orderStatus
}
})
.then(res
=>
{
console.log("用戶訂單列表",
res)
this.setData({
list:
res.result.data
})
}).catch(res
=>
{
console.log("用戶訂單列表失敗",
res)
})
},
zhizuowancheng(e)
{
console.log(e.currentTarget.dataset.id)
wx.cloud.callFunction({
name:
'houchu',
data:
{
id:
e.currentTarget.dataset.id
}
}).then(res
=>
{
console.log('制作完成ok',
res)
if
(res.result
&&
res.result.stats
&&
res.result.stats.updated
>
0)
{
wx.showToast({
title:
'修改成功',
})
this.getMyOrderList()
}
else
{
wx.showToast({
icon:
'none',
title:
'提交失敗',
})
}
}).catch(res
=>
{
console.log('制作完成failed',
res)
wx.showToast({
icon:
'none',
title:
'提交失敗',
})
})
},
onGotUserInfo:
function
(e)
{
console.log('用戶信息',
e)
},adminHouchu.wxml部分:
<view
class="content">
<view
class='mingxi'>
<block
wx:for="{{item.orderList}}"
wx:for-item="arr_item"
wx:key="key">
<view
class="mingxi_item">
<text>{{arr_}}</text>
<text
class="mingxi_price">{{arr_item.quantity}}份</text>
</view>
</block>
</view>
<view
wx:if="{{item.status!=-1}}"
class='coent_list'>
<label
wx:if="{{item.status==0}}"
class='dingdanbtn'
data-id='{{item._id}}'
bindtap='zhizuowancheng'>制作完成</label>
</view>
</view>
<view
class='dibuttxt'>用戶名:{{userInfo.nickName}}</view>
<view
class='dibuttxt'>下單時(shí)間:{{item._createTime?filters.formatDate(item._createTime):''}}</view>
</view></view><view
wx:else
style="margin-top:16rpx;text-align:
center;">
<label
class='none_tab'>數(shù)據(jù)為空哦~~</label></view>5.4小程序樣式的實(shí)現(xiàn)5.4.1小程序樣式設(shè)計(jì)1、全局樣式:app.wxss部分:.container
{
display:
flex;
flex-direction:
column;
min-height:
100%;}.my_item
{
width:
100%;
display:
flex;
flex-direction:
row;
align-items:
center;
padding:
17px;
background:
white;
border-bottom:
1px
solid
gainsboro;}.line_5px
{
height:
15px;}.line_8pt
{
height:
8pt;}.line_1px
{
height:
1px;
background:
gainsboro}.right_arrow
{
border:
solid
black;
border-width:
0
3px
3px
0;
padding:
3px;
position:
absolute;
right:
15px;
transform:
rotate(-45deg);
-webkit-transform:
rotate(-45deg);}圖5.19首頁(yè)圖5.19首頁(yè)①主頁(yè)部分(home.js):
onShow()
{
this.getTopBanner();
//請(qǐng)求頂部輪播圖
searchKey
=
''
//每次返回首頁(yè)時(shí),清空搜索詞
},
diancan()
{
if
(app.globalData.isNeedSaoMa)
{
wx.scanCode({
success:
res
=>
{
console.log('掃碼結(jié)果',
res.result)
app.globalData.address
=
res.result
wx.navigateTo({
url:
this.checkFoodPage()
})
}
})
}
else
{
wx.navigateTo({
url:
this.checkFoodPage()
})
}
},
goToPhone()
{
wx.makePhoneCall({
phoneNumber:
'xxxxxxxxx'
//以本人聯(lián)系電話示例
})
},
getSearchKey(e)
{
searchKey
=
e.detail.value
},
goSearch()
{
wx.navigateTo({
url:
this.checkFoodPage()
+
'?searchKey='
+
searchKey,
})
},②主頁(yè)部分(home.wxss):swiper
{
height:
380rpx;}.searchRoot
{
background:
rgb(255,
255,
255);
padding:
25rpx;
display:
flex;
flex-direction:
row;
justify-content:
space-between;}.searchInput
{
flex:
1;
height:
70rpx;
padding-left:
30rpx;
border:
1px
solid
#f4c903;
border-radius:
30rpx;}.searchImg
{
width:
70rpx;
height:
70rpx;
margin:
0
15rpx;}.category-panel1
{
height:
250px;
width:
100%;
display:
flex;
color:
#666;
flex-direction:
column;
font-size:
11px;
justify-content:
space-around;}.category-panel2
{
height:
90px;
width:
100%;
display:
flex;
color:
#666;
flex-direction:
row;
font-size:
11px;
justify-content:
space-around;}.category-item
{
display:
flex;
width:
60px;
text-align:
center;
flex-direction:
column;}.category-item-image
{
width:
50px;
height:
50px;
overflow:
unset;
padding:
15px
12px
0
6px;}.category-item-image1
{
width:
50px;
height:
45px;
overflow:
unset;
padding:
15px
12px
0
6px;}.kf_button
{
background-color:
rgba(255,
255,
255,
0);
padding:
0px
0px
0px
0px;
border:
0px;}.kf_button::after
{
border:
0px;}.category-item-text
{
margin-top:
11px;}.category-item-text1
{
margin-top:
0px;}③“我的”部分(me.wxss):page
{
background:#f4c903;}.header
{
width:
100%;
display:
flex;
flex-direction:
column;
padding-bottom:
15px;
align-items:
center;
background:
#f4c903;}.btn-login{
padding:
8%;
background:
white;}.userinfo-avatar
{
border-radius:
128rpx;
width:
128rpx;
height:
128rpx;
margin-block-start:
10px;}.userinfo-nickname
{
margin-top:
20rpx;
font-size:
38rpx;}.runner_desc{
font-size:
10pt;
color:
red}.button
{
width:
100%;
background:
white;
border:
none;
text-align:
left;
padding:
0px;
margin:
0px;
line-height:
1.5;
font-size:
16px}.button::after
{
border:
none;
border-radius:
0;}5.4.2首頁(yè)輪播圖設(shè)計(jì)①home.js部分:
//頁(yè)面可見
onShow()
{
this.getTopBanner();
//請(qǐng)求頂部輪播圖
searchKey
=
''
//每次返回首頁(yè)時(shí),清空搜索詞
},
//輪播圖點(diǎn)擊事件
goFood()
{
wx.navigateTo({
url:
this.checkFoodPage()
})
},
//獲取首頁(yè)頂部輪播圖
getTopBanner()
{
wx.cloud.database().collection("lunbotu")
.get()
.then(res
=>
{
console.log("首頁(yè)banner成功",
res.data)
if
(res.data
&&
res.data.length
>
0)
{
this.setData({
banner:
res.data
})
}
}).catch(res
=>
{
console.log("首頁(yè)banner失敗",
res)
})
}②home.wxml部分:<!--
頂部輪播圖
--><view>
<swiper
indicator-dots="{{true}}"
indicator-color="#f4c903"
autoplay="true"
circular="true">
<block
wx:for="{{banner}}"
wx:key="banner">
<swiper-item
bindtap="goFood">
<image
src='{{item.picUrl}}'
mode="widthFix"
style="width:100%;height:100%;"
/>
</swiper-item>
</block>
</swiper></view>5.4.3菜品搜索功能設(shè)計(jì)圖5.21②菜單頁(yè)搜索結(jié)果圖5.21②菜單頁(yè)搜索結(jié)果圖5.20①首頁(yè)搜索①food.js部分:
onLoad(e)
{
let
searchKey
=
e.searchKey
if
(searchKey)
{
//搜索菜品
this.getFoodList('search',
searchKey)
this.setData({
searchKey:
searchKey
//搜索詞
})
}
else
{
//獲取菜品數(shù)據(jù)
this.getFoodList('getAll')
}
},
//獲取用戶輸入的搜索詞
getSearchKey(e)
{
this.setData({
searchKey:
e.detail.value
//搜索詞
})
},
//搜索事件
goSearch()
{
this.getFoodList('search',
this.data.searchKey)
},
//獲取菜品數(shù)據(jù)
getFoodList(action,
searchKey)
{
//獲取購(gòu)物車菜品
let
cartList
=
wx.getStorageSync('cart')
||
[];
wx.cloud.callFunction({
name:
"getFoodList",
data:
{
action:
action,
searchKey:
searchKey
}
}).then(res
=>
{
let
dataList
=
res.result.data;
console.log("菜品數(shù)據(jù)",
res)
//遍歷
dataList.forEach(food
=>
{
food.quantity
=
0;
cartList.forEach(cart
=>
{
if
(cart._id
==
food._id)
{
food.quantity
=
cart.quantity
?
cart.quantity
:
0;
}
})
});
this.setData({
cartList:
cartList,
foodList:
dataList,
})
this.getTotalPrice()
}).catch(res
=>
{
console.log("菜品數(shù)據(jù)請(qǐng)求失敗",
res)
})
},②food.wxml部分:<!--
搜索框
--><view
class="searchRoot"><input
class="searchInput"
bindconfirm='goSearch'
confirm-type='search'
bindinput="getSearchKey"
placeholder="搜索菜品"
value="{{searchKey}}"></input><image
class="searchImg"
bindtap="goSearch"
src="/image/sousuo.png"></image></view>第6章系統(tǒng)測(cè)試6.1開發(fā)者工具模擬測(cè)試6.1.1開發(fā)者工具測(cè)試介紹開發(fā)者工具程序測(cè)試主要有三大功能區(qū):模擬器、調(diào)試工具和小程序操作區(qū)。其中,調(diào)試工具分為7大功能模塊:Wxml:用于幫助開發(fā)者開發(fā)wxml轉(zhuǎn)化后的界面。Console:開發(fā)者可以在此輸入和調(diào)試代碼;小程序的錯(cuò)誤輸出,會(huì)顯示在此處。Network:用于觀察和顯示request和socket的請(qǐng)求情況。Appdata:用于顯示當(dāng)前項(xiàng)目運(yùn)行時(shí)小程序AppData具體數(shù)據(jù),實(shí)時(shí)地反映項(xiàng)目數(shù)據(jù)情況。此外還有Sources、Storage、Sensor功能模塊,本測(cè)試中暫未涉及,故不作詳細(xì)介紹。圖6.1開發(fā)者工具調(diào)試器Console選項(xiàng)卡部分圖6.1開發(fā)者工具調(diào)試器Console選項(xiàng)卡部分6.1.2開發(fā)者工具模擬測(cè)試開發(fā)者工具模擬測(cè)試中,嘗試進(jìn)行用戶登錄測(cè)試。在“我的”頁(yè)微信授權(quán)登錄后,可以看到調(diào)試器Console中回傳了用戶信息,包括昵稱“微信用戶”、用戶地址“city”等(由于在開發(fā)者工具中模擬測(cè)試,沒(méi)有實(shí)際地址可以獲?。⒂脩纛^像圖片圖6.2登錄后回傳用戶信息圖示“avatarUrl”等信息,說(shuō)明有數(shù)據(jù)回傳,登錄成功。圖6.2登錄后回傳用戶信息圖示圖6.3下單付款成功后回傳數(shù)據(jù)圖示開發(fā)者工具模擬測(cè)試中,嘗試進(jìn)行下單付款操作??梢栽贑onsole看到回傳了支付成功的數(shù)據(jù),獲取到了訂單編號(hào)”id”、是否成功”errMsg:ok”。并且在
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鄭州市頸肩腰腿痛醫(yī)院工作人員招聘12人的備考題庫(kù)及完整答案詳解一套
- 2025年河南省水利水電學(xué)校公開招聘工作人員6人備考題庫(kù)及一套參考答案詳解
- 3D打印血管網(wǎng)絡(luò)技術(shù)的臨床應(yīng)用與推廣策略
- 同仁堂集團(tuán)2026屆高校畢業(yè)生招聘?jìng)淇碱}庫(kù)及答案詳解參考
- 城市熱島效應(yīng)對(duì)城市居民生活品質(zhì)的影響與對(duì)策教學(xué)研究課題報(bào)告
- 3D打印導(dǎo)板在神經(jīng)外科手術(shù)中的精準(zhǔn)設(shè)計(jì)與精準(zhǔn)固定
- 3D打印導(dǎo)板對(duì)神經(jīng)外科手術(shù)切口的美容效果
- 2025年文元育英中學(xué)招聘6人備考題庫(kù)及1套參考答案詳解
- 2025年鄭州大學(xué)第二附屬醫(yī)院公開招聘員額制工作人員(碩士)23人備考題庫(kù)及1套參考答案詳解
- 2025年周口市第二人民醫(yī)院(周口市老年醫(yī)院)專業(yè)技術(shù)人員招聘?jìng)淇碱}庫(kù)及一套完整答案詳解
- 投資者關(guān)系部經(jīng)理筆試題及解析
- 《當(dāng)代廣播電視概論(第3版)》全套教學(xué)課件
- 防水補(bǔ)漏合同協(xié)議
- 2025年樂(lè)山市商業(yè)銀行社會(huì)招聘筆試參考題庫(kù)附答案解析
- 急救護(hù)理:基礎(chǔ)技能與操作
- 一件代發(fā)協(xié)議合同
- 2025年商洛市中心醫(yī)院招聘(35人)參考筆試試題及答案解析
- ISO15614-1 2017 金屬材料焊接工藝規(guī)程及評(píng)定(中文版)
- 低壓線路的安裝、運(yùn)行及維護(hù)
- 表-柴油的理化性質(zhì)及危險(xiǎn)特性
- 四年級(jí)道德與法治復(fù)習(xí)教案
評(píng)論
0/150
提交評(píng)論