基于vue的電子商務(wù)平臺(tái)_第1頁
基于vue的電子商務(wù)平臺(tái)_第2頁
基于vue的電子商務(wù)平臺(tái)_第3頁
基于vue的電子商務(wù)平臺(tái)_第4頁
基于vue的電子商務(wù)平臺(tái)_第5頁
已閱讀5頁,還剩63頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

基于vue的電子商務(wù)平臺(tái)摘要計(jì)算機(jī)技術(shù)在很多行業(yè)都發(fā)展的很好,在不知不覺中人們的心里也有了網(wǎng)絡(luò)的概念。網(wǎng)絡(luò)在各個(gè)行業(yè)的發(fā)展戰(zhàn)略中都占據(jù)了很重要的位置,特別是網(wǎng)絡(luò)銷售這一塊,網(wǎng)絡(luò)已經(jīng)成為了商家不可分割的部分。很多商家宣傳商品已經(jīng)不只局限于電視、傳單和報(bào)紙,他們還會(huì)在網(wǎng)上進(jìn)行宣傳,而且網(wǎng)絡(luò)宣傳更實(shí)惠。所以商家們開始建立網(wǎng)站,將商品各方面的宣傳和服務(wù)在網(wǎng)絡(luò)上呈現(xiàn)給大家,通過網(wǎng)站,人們可以進(jìn)行網(wǎng)上購物、商品查詢和信息查詢等功能。網(wǎng)絡(luò)在改變我們原來的經(jīng)營理念和經(jīng)營模式的同時(shí),也給商家們帶來了更多的利益。所以,對(duì)于商家們來說,都希望有一個(gè)自己的網(wǎng)站。本商務(wù)平臺(tái)研究的是網(wǎng)上購物系統(tǒng),它是基于BS結(jié)構(gòu)的,也就是客戶端瀏覽器、web服務(wù)器和數(shù)據(jù)庫交互的結(jié)構(gòu)。主要開發(fā)包括前端頁面的一些Web設(shè)計(jì)和SQL數(shù)據(jù)庫的建立以及維護(hù)。系統(tǒng)主要是用node.js為核心語言進(jìn)行開發(fā),再結(jié)合SQL建立數(shù)據(jù)連接關(guān)系,不斷改進(jìn),直到功能系統(tǒng)的基本功能能夠?qū)崿F(xiàn)。本系統(tǒng)主要是有四個(gè)功能,分別是用戶的管理、資料的管理、商品的管理和訂單的管理。在用戶管理中的注冊模塊,郵箱和昵稱的唯一性性,加強(qiáng)了用戶注冊信息的嚴(yán)謹(jǐn)性。并且規(guī)定只有注冊成功和登錄成功的會(huì)員才能下訂單,不是會(huì)員的用戶只能夠?yàn)g覽商品。整個(gè)購物系統(tǒng)結(jié)構(gòu)清晰,功能明確,易操作。這樣使交易可以更加方便和便捷關(guān)鍵詞:node;SQL;Web;網(wǎng)上購物系統(tǒng)E-commerceplatformbasedonVueAbstractComputertechnologyhasdevelopedwellinmanyindustries,andpeopleunconsciouslyhavetheconceptofnetworkintheirhearts.Thenetworkoccupiesaveryimportantpositioninthedevelopmentstrategyofvariousindustries,especiallyintheareaofnetworksales,thenetworkhasbecomeanintegralpartofbusinesses.ManybusinessespromotetheirproductsnotonlyonTV,flyersandnewspapers,butalsoontheInternet,whichismoreaffordable.Therefore,businessesbegantoestablishwebsitestopresentallaspectsofthepublicityandservicesofgoodstoeveryoneonthenetwork.Throughthewebsites,peoplecancarryoutonlineshopping,commodityqueryandinformationqueryfunctions.Thenetworknotonlychangesouroriginalbusinessphilosophyandbusinessmodel,butalsobringsmorebenefitstobusinesses.So,forbusinesses,theyallwanttohaveawebsiteoftheirown.Thisbusinessplatformstudiesonlineshoppingsystem,whichisbasedonBSstructure,thatis,thestructureofclientbrowser,webserveranddatabaseinteraction.Themaindevelopmentincludessomewebdesignoffront-endpageandtheestablishmentandmaintenanceofSQLdatabase.Thesystemismainlydevelopedwithnode.jsasthecorelanguage,andthencombinedwithSQLtoestablishdataconnectionrelationship,andconstantlyimproveuntilthebasicfunctionsofthefunctionalsystemcanbeachieved.Thissystemhasfourfunctions:usermanagement,datamanagement,commoditymanagementandordermanagement.Theuniquenessofregistrationmodule,mailboxandnicknameinusermanagementstrengthenstheprecisenessofuserregistrationinformation.Italsostipulatesthatonlymemberswhohavesuccessfullyregisteredandloggedincanplaceorders,anduserswhoarenotmemberscanonlybrowseproducts.Thewholeshoppingsystemhasclearstructure,clearfunctionandeasyoperation.Thismakesthetransactionmoreconvenientandconvenient.Keywords:Node;SQL;Web;onlineshoppingsystem目錄1前言 11.1系統(tǒng)開發(fā)背景 11.2系統(tǒng)開發(fā)意義 22系統(tǒng)可行性分析 22.1技術(shù)可行性 32.2經(jīng)濟(jì)可行性 32.3社會(huì)可行性 33系統(tǒng)需求的分析 33.1系統(tǒng)介紹 33.2功能需求 33.3B/S結(jié)構(gòu) 53.4其他要求 54總體設(shè)計(jì) 64.1總體結(jié)構(gòu)和模塊設(shè)計(jì) 65數(shù)據(jù)庫設(shè)計(jì) 65.1數(shù)據(jù)庫表格設(shè)計(jì) 66頁面設(shè)計(jì) 86.1前臺(tái)頁面 86.1.1前臺(tái)主頁面 96.1.2購物車頁面 96.1.3注冊頁面 96.2后臺(tái)頁面 106.2.1后臺(tái)登錄頁面 106.2.2后臺(tái)管理頁面 117系統(tǒng)詳細(xì)設(shè)計(jì) 117.1前臺(tái)設(shè)計(jì) 117.1.1前臺(tái)模塊功能介紹 117.1.2用戶注冊模塊 127.1.3商品瀏覽模塊 147.1.4購物車模塊 157.1.5我的訂單模塊 167.1.6修改資料模塊 197.2后臺(tái)設(shè)計(jì) 227.2.1后臺(tái)模塊功能介紹 227.2.2用戶管理模塊 227.2.3商品管理模塊 237.2.4訂單管理模塊 247.2.5資料管理模塊 288測試 298.1測試方法 298.2測試步驟 298.3測試報(bào)告 298.4結(jié)果評(píng)價(jià) 309使用說明 309.1系統(tǒng)環(huán)境要求 309.2系統(tǒng)運(yùn)行 3010總結(jié) 31參考文獻(xiàn) 32致謝 33附錄 34電子商務(wù)網(wǎng)站的開發(fā)已有很長一段時(shí)間,而且有非常多成功的實(shí)例,所用的技術(shù)上也是很成熟的,所以技術(shù)上的準(zhǔn)備是沒有什么問題的。如果遇到不懂的或難以解決問題,可以多去網(wǎng)上學(xué)習(xí)一下,網(wǎng)上有很多案列的?,F(xiàn)在網(wǎng)上流行的購物系統(tǒng)的頁面都是比較簡單和漂亮的,頁面結(jié)構(gòu)也是清晰簡約的,而且邏輯上也是有嚴(yán)謹(jǐn)?shù)囊?guī)劃,注重每一個(gè)小細(xì)節(jié),在電子交易的時(shí)候避免一些不必要的錯(cuò)誤。我們前端將會(huì)使用HTML來搭建頁面結(jié)構(gòu)、CSS和JS來填充頁面。后端會(huì)使用Node搭建接口、Express框架和連接數(shù)據(jù)庫等[2]。我也希望能從這開發(fā)系統(tǒng)中,深入學(xué)習(xí)一下JavaScript和Node語言。2.2經(jīng)濟(jì)可行性我設(shè)計(jì)的這個(gè)系統(tǒng),主要是想鍛煉和提升自己,所以要求不是很高,在一些方面也有瑕疵。在開發(fā)這個(gè)系統(tǒng)前我自學(xué)了Node、Javascript,MYSQL等知識(shí),而且開發(fā)中用的軟件都是免費(fèi)的,如VScode、Navicat等,所以從各方面來說都沒有花費(fèi)太多的資金。2.3社會(huì)可行性社會(huì)對(duì)電子商務(wù)的發(fā)展是十分支持和認(rèn)可的。電子商務(wù)運(yùn)用網(wǎng)絡(luò)技術(shù)給社會(huì)創(chuàng)造了很多經(jīng)濟(jì)收益,也在推著社會(huì)往前進(jìn)。對(duì)于網(wǎng)絡(luò)銷售來說,本系統(tǒng)的效益是很可觀的,人們和社會(huì)都是需要的。3系統(tǒng)需求的分析3.1系統(tǒng)介紹本系統(tǒng)是一個(gè)建立在Windows平臺(tái)上,基于B/S結(jié)構(gòu)的一個(gè)網(wǎng)上購物平臺(tái)[1]。通過這個(gè)平臺(tái),可以更加方便的管理商品和銷售商品。3.2功能需求我在設(shè)計(jì)次系統(tǒng)的時(shí)候,觀察了淘寶、當(dāng)當(dāng)?shù)染W(wǎng)站,我覺得系統(tǒng)應(yīng)該有以下的基本功能:注冊登錄管理:能夠?qū)τ脩裘兔艽a進(jìn)行簡單驗(yàn)證,如果郵箱還沒有注冊會(huì)彈出一個(gè)彈框“該郵箱還沒有注冊,請前往注冊”,如果輸入的密碼錯(cuò)誤,會(huì)提示你“密碼錯(cuò)誤”。還可以對(duì)電子郵箱和昵稱的唯一性進(jìn)行驗(yàn)證,每一個(gè)Email和昵稱都只能注冊一次,如果郵箱重復(fù)會(huì)彈出“該郵箱已被注冊”,昵稱重復(fù)則會(huì)彈出“該昵稱已被注冊”。商品瀏覽:打開瀏覽器,默認(rèn)會(huì)出現(xiàn)首頁,也就是所有商品都會(huì)在首頁中展示出來。分類顯示商品,有首頁、包包、鞋子、彩妝、護(hù)膚品、衣服,根據(jù)不同的分類會(huì)有不同的頁面呈現(xiàn)。當(dāng)我們點(diǎn)擊商品的時(shí)候會(huì)出現(xiàn)商品詳情,可以點(diǎn)擊立即購買和加入購物車??梢詫?duì)商品進(jìn)行模糊查詢,需要輸入商品的名字就會(huì)出現(xiàn)所有符合的商品。所有人都可以瀏覽商品,但是只有登錄的用戶才能加入購物車。購物車管理:登錄成功的用戶可以把想要購買的商品添加到購物車,也就是點(diǎn)擊“加入購物車”這個(gè)按鈕的時(shí)候會(huì)出現(xiàn)“加入購物車成功!請前往個(gè)人中心->購物車結(jié)算”,然后我們就可以去個(gè)人中心查看商品了。用戶可以對(duì)商品進(jìn)行增加、減少和刪除,按‘+’和‘-’按鈕時(shí),數(shù)量變化的單位是1,數(shù)量輸入框中可以輸入你想買的數(shù)量[2]。金額也是隨著數(shù)量的改變而變化著。訂單管理:只有登錄成功的用戶才可以在商品詳情中點(diǎn)擊“立即購買”的按鈕,如果沒有登錄點(diǎn)擊“立即購買”,會(huì)彈出一個(gè)“請先登錄”。用戶可以查看自己的訂單,也可以刪除自己的訂單。在訂單狀態(tài)里:待付款對(duì)應(yīng)的是“確認(rèn)付款”按鈕;已發(fā)貨對(duì)應(yīng)的是“確認(rèn)收貨”;已完成對(duì)應(yīng)的是“評(píng)價(jià)”和“已評(píng)價(jià)”兩個(gè)狀態(tài)。管理員可以修改訂單的數(shù)量和狀態(tài),也可以刪除訂單。商品評(píng)價(jià):在商品詳情的頁面里,會(huì)顯示評(píng)價(jià)的內(nèi)容,所有人都是可以看見的。只有訂單狀態(tài)是已完成的時(shí)候,用戶才可以對(duì)其進(jìn)行評(píng)價(jià)。評(píng)價(jià)有兩部分,第一部分是給商品打分(5顆星為滿分100分,1顆星就代表20分),第二部分是輸入文字評(píng)論,兩個(gè)部分都不可以缺少,否者按“發(fā)表”按鈕的時(shí)候會(huì)出現(xiàn)“評(píng)分和評(píng)價(jià)不能為空”的彈框。商品管理:管理員可以添加商品的分類,現(xiàn)在有:包包、鞋子、彩妝、護(hù)膚品、衣服??梢跃庉嬓薷纳唐返拿Q、選擇類目、庫存量、價(jià)格,上傳照片等;根據(jù)自己的需求在不同類目中上傳新的商品;可以刪除商品。用戶管理:管理員可以查看所有的用戶??梢愿鶕?jù)email和phone條件查詢得到符合條件的用戶,還可以根據(jù)nickname、recipient、address進(jìn)行模糊查詢得到符合條件的用戶。還可以刪除某個(gè)用戶,刪除后用戶的名稱是:該用戶已注銷,頭像是灰白的默認(rèn)頭像。資料修改:管理員在修改資料模塊只有一個(gè)權(quán)限,就是修改密碼。用戶在修改資料模塊,修改昵稱、收件人、收貨地址、聯(lián)系電話和密碼等,但是不能修改賬號(hào)(郵箱)。管理員和用戶修改自己的密碼時(shí),都需要輸入原密碼、新密碼、確認(rèn)新密碼,原密碼必須正確并且新密碼和確認(rèn)新密碼必須一致,填完后點(diǎn)擊“確認(rèn)修改”按鈕。3.3B/S結(jié)構(gòu)B/S結(jié)構(gòu)(瀏覽器/服務(wù)器)。B/S架構(gòu)有三層。第一層:瀏覽器,展示頁面。它是一個(gè)面向客戶的角色。用戶不需要下載客戶端,只需要有一個(gè)瀏覽器就可以上網(wǎng)瀏覽了。用戶們在瀏覽器中進(jìn)行操作時(shí),如果需要訪問數(shù)據(jù)庫,瀏覽器就會(huì)生成HTTP報(bào)文,并向WEB服務(wù)器發(fā)送請求。第二層:WEB服務(wù)器,處理數(shù)據(jù)。它是一個(gè)傳送信息的角色。當(dāng)收到瀏覽器的請求后,WEB服務(wù)器根據(jù)請求和請求正文,處理業(yè)務(wù)邏輯轉(zhuǎn)化成SQL語句,向數(shù)據(jù)庫服務(wù)器發(fā)起訪問請求。第三層:數(shù)據(jù)庫服務(wù)器,存儲(chǔ)數(shù)據(jù)。它是一個(gè)很重要的角色,因?yàn)樗娣帕舜罅康臄?shù)據(jù)。當(dāng)數(shù)據(jù)庫服務(wù)器收到了來自WEB服務(wù)器的請求后,會(huì)對(duì)SQL語句進(jìn)行處理,并將把返回的結(jié)果發(fā)送給WEB服務(wù)器,然后,WEB服務(wù)器將收到的數(shù)據(jù)結(jié)果并且轉(zhuǎn)換為HTML文本形式發(fā)送給瀏覽器,瀏覽器接收響應(yīng),加載到頁面展示。客戶端瀏覽器客戶端瀏覽器Web服務(wù)器應(yīng)用服務(wù)器數(shù)據(jù)庫服務(wù)器反饋頁面HTTP請求事務(wù)邏輯請求結(jié)果圖3.1B/S結(jié)構(gòu)圖3.4其他要求頁面要求:頁面內(nèi)容要漂亮大方、頁面結(jié)構(gòu)要求清晰明了,頁面整體要有自己的特色。跳轉(zhuǎn)頁面時(shí)有顏色變化或者彈框出現(xiàn)、好看的按鈕小圖標(biāo)等會(huì)讓瀏覽者喜歡和留下深刻的印象,也會(huì)增加一些購買幾率。系統(tǒng)要求:系統(tǒng)要運(yùn)行穩(wěn)定。4總體設(shè)計(jì)4.1總體結(jié)構(gòu)和模塊設(shè)計(jì)用戶部分有:用戶注冊、商品瀏覽、購物車、我的訂單,資料修改等幾個(gè)部分[3]。管理部分有:用戶管理、商品管理、訂單管理,修改資料等幾個(gè)部分。功能結(jié)構(gòu)圖如下:購物系統(tǒng)購物系統(tǒng)系統(tǒng)用戶部分系統(tǒng)管理部分用戶注冊購物車商品管理商品瀏覽我的訂單用戶管理訂單管理修改資料修改資料圖4.1功能結(jié)構(gòu)圖5數(shù)據(jù)庫設(shè)計(jì)5.1數(shù)據(jù)庫表格設(shè)計(jì)表5.1AdminModel列名說明類型備注id主鍵BIGINT自增account賬號(hào)STRING(255)唯一name姓名STRING(64)不允許為nullpwd密碼STRING(255)不允許為null表5.2CommentModel列名說明類型備注id主鍵BIGINT自增userId用戶idBIGINT不允許為nullgoodsId商品idBIGINT不允許為nullgoodsDetailId頁面詳情idBIGINT不允許為nullorderId訂單idBIGINT不允許為null表5.3GoodsDetailModel列名說明類型備注id主鍵BIGINT自增goodsId商品idBIGINT不允許為nullspecName商品規(guī)格名稱STRING(500)不允許為nullstockNum商品存儲(chǔ)量INTEGER不允許為nullunitPrice商品單價(jià)FLOAT不允許為null表5.4GoodsModel列名說明類型備注id主鍵BIGINT自增name商品名字STRING(500)不允許為nulltypeId類型idBIGINT不允許為nullimg商品圖片STRING(500)允許為nulldesc商品描述TEXT允許為nullupdatetime修改時(shí)間DATE不允許為nullcreatetime創(chuàng)建時(shí)間DATE不允許為null表5.5OrderModel列名說明類型備注id主鍵BIGINT自增userId用戶idBIGINT不允許為nullgoodsDetailId頁面詳情idBIGINT不允許為nullgoodsNum商品數(shù)量INTEGER不允許為nullamount商品總金額FLOAT不允許為nullcreatetime創(chuàng)建時(shí)間DATE不允許為nullupdatetime修改時(shí)間DATE不允許為nullstate商品詳情TEXT不允許為null表5.6TypeModel列名說明類型備注id主鍵BIGINT自增name類名STRING(255)不允許為null表5.7UserModel列名說明類型備注id主鍵BIGINT自增email用戶郵箱STRING(64)唯一的pwd用戶密碼STRING(255)不允許為nullsex用戶性別INTEGER不允許為nullrecipient收件人STRING(64)允許為nulladdress收件地址STRING(500)允許為nullphone收貨電話STRING(64)允許為nullheadimg用戶頭像STRING(500)不允許為nullcreatetime創(chuàng)建時(shí)間DATE不允許為nullupdatetime修改時(shí)間DATE不允許為nullnickname用戶昵稱STRING(64)不允許為null6頁面設(shè)計(jì)6.1前臺(tái)頁面6.1.1前臺(tái)主頁面圖6.1前臺(tái)主頁圖6.1.2購物車頁面圖6.2購物車頁面6.1.3注冊頁面圖6.3注冊頁面6.2后臺(tái)頁面6.2.1后臺(tái)登錄頁面圖6.4后臺(tái)登錄頁面6.2.2后臺(tái)管理頁面圖6.5后臺(tái)管理頁面7系統(tǒng)詳細(xì)設(shè)計(jì)7.1前臺(tái)設(shè)計(jì)7.1.1用戶模塊功能介紹用戶注冊:用戶可以注冊一個(gè)屬于自己的賬號(hào)。需要輸入自己的一些基本信息,如:郵箱、昵稱、密碼、收貨地址,電話號(hào)碼等。會(huì)對(duì)用戶的注冊進(jìn)行了驗(yàn)證:郵箱用戶名和昵稱都必須是唯一的。如果其他用戶注冊了的郵箱或昵稱,你都不能成功注冊,會(huì)彈出:“該郵箱已被注冊”或“該昵稱已被注冊”。商品瀏覽:沒有登錄的用戶也可以瀏覽所有的商品,可以點(diǎn)擊不同的類目(包包、鞋子等),呈現(xiàn)出不同的頁面。點(diǎn)擊商品后,出現(xiàn)商品詳情還可以看到商品的評(píng)價(jià)。用戶還可以根據(jù)商品的名字來查找商品,只要是符合規(guī)定的商品都會(huì)在頁面上呈現(xiàn)。呈現(xiàn)有三種形式:一是默認(rèn)形式,二是價(jià)格從高到低形式、三是價(jià)格從低到高形式。購物車管理:選購的商品點(diǎn)擊添加“加入購物車”按鈕以后,會(huì)出現(xiàn)一個(gè)彈框“請到個(gè)人中心去結(jié)算”,我們選購的商品就會(huì)出現(xiàn)在個(gè)人中心的購物車模塊中。在購物車中我們,可以隨時(shí)添加、減少、刪除商品,也可以隨時(shí)下單結(jié)賬。我的訂單:我的訂單這個(gè)模塊在個(gè)人中心中,可以查看全部訂單和查看訂單的狀態(tài)。訂單狀態(tài)已完成的時(shí)候才可以對(duì)商品進(jìn)行評(píng)論。修改資料:用戶可以修改自己的基本信息,比如昵稱、收件人、收貨地址等。修改密碼時(shí)候,需要輸入正確的原密碼,并且新密碼和確認(rèn)新密碼的值是一樣的,才能夠修改成功。7.1.2用戶注冊模塊用戶注冊的密碼加密是用bcryp加密的,還有基于token的身份驗(yàn)證,這些使我們的系統(tǒng)更加的安全。我使用的是JWT(JSONWebToken),它由三部分組成,分別是jwt頭、有效載荷、簽名。JWT流程:一瀏覽器發(fā)起請求登陸。二服務(wù)端驗(yàn)證身份[4]。三驗(yàn)證成功后,根據(jù)算法,簽發(fā)一個(gè)token(令牌),在發(fā)送給瀏覽器。四瀏覽器接收到token以后,可以存儲(chǔ)起來,我是存到LocalStorage中。五以后瀏覽器請求資源都需要帶上token。六服務(wù)器端收到請求后,去驗(yàn)證token,如果正確就返回瀏覽器請求的數(shù)據(jù),如果錯(cuò)誤就不返回。1.郵箱和昵稱的唯一性。主要代碼如下://注冊exports.signup=async(ctx)=>{consthashPwd=bcrypt.hashSync(ctx.request.body.pwd,salt);//bcryptjs是一個(gè)第三方密碼加密庫 constuser={ email:ctx.request.body.email, pwd:hashPwd, nickname:ctx.request.body.nickname,recipient:ctx.request.body.recipient,address:ctx.request.body.address,phone:ctx.request.body.phone, createtime:newDate(),updatetime:newDate() }; //驗(yàn)證郵箱唯一性 constemailUniq=awaitUserModel.findOne({ where:{ email:ctx.request.body.email } }) //如果已經(jīng)存在 if(emailUniq){ ctx.body={ code:10000, message:'該郵箱已被注冊' }; return; } //驗(yàn)證昵稱唯一性 constnicknameUniq=awaitUserModel.findOne({ where:{ nickname:ctx.request.body.nickname }}) //如果已經(jīng)存在 if(nicknameUniq){ ctx.body={ code:10000, message:'該昵稱已被注冊'} return;} //插入數(shù)據(jù) constres=awaitUserModel.create(user); consttoken=jwt.sign(res.id,'chambers'); ctx.body={ code:0, data:{name:res.nickname,token:token}}}圖7.1注冊頁面7.1.3商品瀏覽模塊一個(gè)好看的商品瀏覽頁面的,會(huì)讓人更有購買欲。如果主頁都是亂糟糟的,我想很少有人會(huì)去買東西吧。我的瀏覽模塊都是比較簡單、大方的。1.根據(jù)商品名字來查找商品。是模糊查詢,不需要輸入商品的全部名字,都可以查到符合要求的商品。關(guān)鍵代碼如下:exports.searchGoods=async(ctx)=>{ constkeyword=ctx.query.keyword; try{ letgoods; goods=awaitGoodsModel.findAll({ attributes:['id','name','img','typeId'], where:{ name:{ '$like':'%'+keyword+'%' }}, order:[ ['createtime','DESC'] ], }); if(goods.length===0){ ctx.body={ code:0, data:[] }; return; }}7.1.4購物車模塊在現(xiàn)實(shí)生活中,如果我們?nèi)コ匈徫?,我們?huì)根據(jù)自己的需求把物品放到購物車籃中,這樣就不用拿著大包小包的東西了,這樣很方便。在網(wǎng)上購物,我們也用“購物車”來裝載我們想買的物品。點(diǎn)擊購物車就能看見我們加購的商品,還可以對(duì)商品進(jìn)行增加、減少、刪除和下單結(jié)賬。當(dāng)用戶在商城首頁中單擊商品展示區(qū)的“加入購物車”按鈕時(shí),系統(tǒng)會(huì)將該商品放入到購物車中。數(shù)量加減邏輯和計(jì)算價(jià)格。關(guān)鍵代碼如下:(1)數(shù)量加減methods:{minus(){if(this.num<=this.min){return;}this.num=Number(this.num)-1;},add(){if(this.num>=this.max){return;}this.num=Number(this.num)+1;},}(2)計(jì)算價(jià)格numberChange(orderId){this.orderList.map((item,index)=>{if(orderId===item.id){item.amount=item.temGoodsNum*item.goods.unitPrice;console.log(item.temGoodsNum,item.goods.unitPrice)}})},computed:{...mapState(['clientToken']),totalAmount(){letamount=0;this.orderList.map((item,index)=>{amount+=item.amount;//a+=b等效于a=a+b})returnamount;}},(3)刪除訂單deleteOrder(orderId){constres=deleteOrder(orderId);res.then(()=>{alert('刪除訂單成功!');this.orderList.map((item,index)=>{if(item.id===orderId){this.orderList.splice(index,1);}})}).catch((e)=>{alert(e);})}7.1.5我的訂單模塊購買商品以后,會(huì)產(chǎn)生訂單。在我的訂單中可以查看訂單的狀態(tài),和訂單的一些基本信息。訂單有五種呈現(xiàn)方式,分別為:全部訂單、待付款、待發(fā)貨、已發(fā)貨、已完成。(1)關(guān)于訂單模塊的頁面圖7.2我的訂單2.待付款=>確認(rèn)付款、已發(fā)貨=>確認(rèn)收貨、已完成=>評(píng)價(jià)和已評(píng)價(jià)。主要代碼如下:(1)頁面(按鈕確認(rèn)付款、確認(rèn)收貨、評(píng)價(jià)、已評(píng)價(jià))<buttonv-if="@click="confirmPay(item.id)">確認(rèn)付款</button><buttonv-else-if="item.state===2"@click="confirmReceive(item.id)">確認(rèn)收貨</button><buttonv-else-if="item.state===3&&!item.hasComment"@click="showPopup(item.id,item.goods.id,item.goods.goodsDetailId)">評(píng)價(jià)</button><spanclass="hasComment"v-else-if="item.state===3&&item.hasComment">已評(píng)價(jià)</span>圖7.3待付款和確認(rèn)付款圖7.4已發(fā)貨和確認(rèn)發(fā)貨3.當(dāng)商品已經(jīng)完成的時(shí)候,點(diǎn)擊“評(píng)論”按鈕,會(huì)出現(xiàn)一個(gè)打分和評(píng)價(jià)的彈框。(1)評(píng)分(打星)和評(píng)價(jià)頁面圖7.5我的評(píng)價(jià)(2)關(guān)于點(diǎn)擊“發(fā)表”按鈕的邏輯showPopup(orderId,goodsId,goodsDetailId){this.curCommentGoodsId=goodsId;this.curOrderId=orderId;this.curCommentGoodsDetailId=goodsDetailId;this.popupShow=true;},sendComment(){if(this.curStar<=0||ment==''){alert('評(píng)分和評(píng)價(jià)不能為空!');return;}constres=sendComment({token:this.clientToken,orderId:this.curOrderId,goodsId:this.curCommentGoodsId,goodsDetailId:this.curCommentGoodsDetailId,content:ment,score:this.curStar*20});res.then(()=>{alert('評(píng)價(jià)成功!');for(letorderofthis.orderList){if(order.id===this.curOrderId){order.hasComment=true;}}this.closePopup();}).catch((e)=>{alert(e);})},7.1.6修改資料模塊用戶可以查看自己的信息,也可以修改自己的基本信息,但是用戶賬號(hào)(郵箱)是不允許修改的,修改密碼之前需要輸入原來的密碼才可以修改。1.修改基本的個(gè)人信息。關(guān)鍵代碼如下:exports.updateUserData=async(ctx)=>{constdata=ctx.request.body;try{constres=awaitUserModel.update({recipient:data.recipient,address:data.address,phone:data.phone,nickname:data.nickname},{where:{id:data.id}})//正常修改ctx.body={code:0,}}catch(e){//發(fā)生錯(cuò)誤ctx.body={code:10000,message:'網(wǎng)絡(luò)出錯(cuò)'}}}2.修改密碼。關(guān)鍵代碼如下:exports.updatePwd=async(ctx)=>{constdata=ctx.request.body;constaccount=awaitUserModel.findOne({where:{id:data.id}})if(!pareSync(data.oldPwd,account.pwd)){ctx.body={code:10000,message:'密碼不正確'};return;}//密碼正確else{try{consthashPwd=bcrypt.hashSync(data.newPwd,salt);constres=awaitUserModel.update({pwd:hashPwd},{where:{id:data.id}})//正常修改ctx.body={code:0}}catch(e){//發(fā)生錯(cuò)誤ctx.body={code:10000,message:'修改密碼出錯(cuò)'}}}}圖7.6修改密碼7.2后臺(tái)設(shè)計(jì)7.2.1后臺(tái)模塊功能介紹:后臺(tái)部分有:用戶管理、商品管理、訂單管理、修改資料。用戶管理:管理者能夠通過用戶的賬號(hào)(email)和昵稱等搜索到符合要求的用戶,并展現(xiàn)出來。管理者還可以刪除用戶,刪除用戶以后這個(gè)用戶就不存在了,變成了“該用戶已注銷”。商品管理:管理者可以增加商品的分類。還可以在不同的分類中添加新的商品。也可以對(duì)原有的商品進(jìn)行修改和刪除該商品。訂單管理:管理者可以看到所有的訂單,可以對(duì)訂單進(jìn)行編輯和刪除操作。在編輯操作中管理者可以修改訂單的狀態(tài)(未付款、未發(fā)貨、已發(fā)貨、已到貨)和商品數(shù)量。修改資料:管理者可以修改自己的密碼,但是需要正確輸入原來的密碼。7.2.2用戶管理模塊1.可以對(duì)昵稱、地址、收貨人進(jìn)行模糊查詢。郵箱和電話號(hào)碼需要輸入完整數(shù)據(jù)才能查詢到符合要求的用戶。//查詢指定用戶exports.searchUser=async(ctx)=>{constword=ctx.query.word;try{constusers=awaitUserModel.findAll({attributes:['id','email','nickname','sex','recipient','address','phone'],where:{//where是查詢條件的意思'$or':[//或,只要其中一個(gè)條件成立就可以了{(lán)email:word},{phone:word},{nickname:{'$like':'%'+word+'%'}},//%是SQL的關(guān)鍵詞.可以代替任意長度的字符.包括數(shù)字字符.(模糊查詢){recipient:{'$like':'%'+word+'%'}},{address:{'$like':'%'+word+'%'}},]}});ctx.body={code:0,data:users}}2.刪除用戶exports.deleteUser=async(ctx)=>{constid=ctx.query.id;try{constres=awaitUserModel.destroy({where:{id:id}});ctx.body={code:0}}7.2.3商品管理模塊管理員可以對(duì)商品進(jìn)行添加,使商品更加豐富多彩;可以對(duì)商品進(jìn)行編輯,使商品更加完善;可以對(duì)商品進(jìn)行刪除,使多余或者庫存量不多的商品下架。1.編輯商品中,可以編輯商品名稱、類目、圖片、庫存量、價(jià)格等。(1)編輯商品頁面。圖7.7編輯頁面(2)添加和修改。主要代碼如下:exports.updateGoods=async(ctx)=>{ constdata=ctx.request.body; try{ constres=awaitGoodsModel.update( { name:, typeId:data.typeId, img:data.img, desc:data.desc },{ where:{ id:data.id }}); for(letitemofdata.specList){ constres2=awaitGoodsDetailModel.update( { specName:item.specName, stockNum:item.stockNum, unitPrice:item.unitPrice, }, { where:{ id:item.id } });} ctx.body={ code:0 } }2.刪除商品。主要代碼如下:exports.deleteGoods=async(ctx)=>{ constid=ctx.query.id; try{ constres=awaitGoodsModel.destroy({ where:{ id:id } }); constres2=awaitGoodsDetailModel.destroy({ where:{ goodsId:id } })7.2.4訂單管理模塊管理員可以看到所有的訂單,并且有權(quán)刪除和編輯訂單。1.編輯中可以修改訂單中商品的數(shù)量和訂單的狀態(tài)(未付款、未發(fā)貨、已發(fā)貨、已到貨)。(1)編輯的前端頁面。圖7.8訂單管理編輯頁面(2)修改訂單。主要代碼如下:exports.changeOrder=async(ctx)=>{ constorderObj=ctx.request.body; try{ constorder=awaitOrderModel.findOne({ attributes:['goodsNum'], where:{ id:orderObj.id } }); constspec=awaitGoodsDetailModel.findOne({ attributes:['unitPrice','stockNum'], where:{ id:orderObj.spec, } }); awaitGoodsDetailModel.update( { stockNum:spec.stockNum }, { where:{ id:orderObj.spec }}) constres=awaitOrderModel.update( { goodsNum:orderObj.num, goodsDetailId:orderObj.spec, state:orderObj.state, amount:spec.unitPrice*orderObj.num }, { where:{ id:orderObj.id } } ); ctx.body={ code:0, }}2.當(dāng)訂單的狀態(tài)不是state===3,也就是訂單狀態(tài)不是已到貨的時(shí)候,刪除訂單,庫存量會(huì)增加。exports.deleteOrder=async(ctx)=>{constid=ctx.query.id;try{ constorder=awaitOrderModel.findOne({ attributes:['state','goodsNum'], where:{ id:id } }); //還沒結(jié)束的訂單,那就庫存增加 if(order.state!==3){ constgoodsDetail=awaitGoodsDetailModel.findOne({ attributes:['stockNum'], where:{ id:id } }); awaitGoodsDetailModel.update( { stockNum:goodsDetail.stockNum+order.goodsNum }, { where:{ id:id }}); };constres=awaitOrderModel.destroy({where:{id:id}});ctx.body={code:0}}7.2.5修改資料模塊管理員在修改資料模塊可以修改自己的密碼,但需要正確的原密碼和兩次一致的新密碼。1.修改密碼,主要代碼如下:exports.changePwd=async(ctx)=>{constpwdObj=ctx.request.body;pwdObj.adminToken=jwt.decode(pwdObj.adminToken);try{constadminOldPwd=awaitAdminModel.findOne({attributes:['pwd'],where:{id:pwdObj.adminToken}});if(adminOldPwd.pwd!==pwdObj.oldPwd){ctx.body={code:10000,message:'舊密碼錯(cuò)誤'}return;}constres=awaitAdminModel.update({pwd:pwdObj.newPwd},{where:{id:pwdObj.adminToken}})ctx.body={code:0}}8測試8.1測試方法因?yàn)楸鞠到y(tǒng)針對(duì)的是網(wǎng)上用戶,所以我會(huì)選擇黑盒測試來檢測每個(gè)功能是否都可以正常使用。8.2測試步驟分為了用戶端測試和管理端測試。用戶端測試:1是首頁測試,2是登錄、注冊測試,3購物車測試。管理端測試:1是商品管理測試,2是訂單管理測試,3是用戶管理測試。8.3測試報(bào)告:表8.1測試報(bào)告模塊預(yù)計(jì)測試功能是否正常首頁測試可正常顯示各種商品正常登錄、注冊測試注冊時(shí),郵箱唯一性。登陸時(shí),跟數(shù)據(jù)庫用戶密碼一致正常購物車測試修改商品數(shù)量時(shí)價(jià)格有相應(yīng)變化正常商品管理測試可修改商品、添加商品正常訂單管理測試可修改訂單狀態(tài)、刪除訂單正常用戶管理測試可查找用戶、刪除用戶正常8.4測試結(jié)果評(píng)價(jià):系統(tǒng)基本達(dá)到設(shè)計(jì)要求,購物車、商品管理、訂單管理等功能基本完整,用戶界面良好。但是還存在一些需要改進(jìn)的地方,如:訂單管理中刪除訂單,不應(yīng)該直接刪除,應(yīng)該在刪除之前提示一下‘是否真的需要?jiǎng)h除’。對(duì)于商品瀏覽,查找類型有點(diǎn)少,希望能增添一些高級(jí)查找,或多添加幾種查找類型。希望以后能加以改進(jìn),讓系統(tǒng)更完善。9使用說明9.1系統(tǒng)環(huán)境要求硬件環(huán)境:硬盤:10G+,內(nèi)存:512M+9.2系統(tǒng)運(yùn)行:啟動(dòng)“npmrunstart”、“npmrundev”、“npmrundev:admin”和XAMPPControlPanel。訪問商城首頁:http://localhost:8080訪問后臺(tái)管理頁面:http://localhost:808110總結(jié)本系統(tǒng)是在陳文文老師的指導(dǎo)下和實(shí)習(xí)的空閑時(shí)間完成的,由于時(shí)間比較緊張可能很多問題我還沒有考慮到。我寫了電子商務(wù)系統(tǒng)從需求分析到開發(fā)實(shí)現(xiàn)的整個(gè)流程。用了4個(gè)月來做畢業(yè)設(shè)計(jì),從題目選擇到代碼實(shí)現(xiàn),我學(xué)到了很多知識(shí),如node.js、Express框架、接口、數(shù)據(jù)庫等。在實(shí)際的項(xiàng)目中,提高了自己的動(dòng)手能力,也鍛煉了自己獨(dú)立解決問題的能力。在開發(fā)這個(gè)系統(tǒng)的時(shí)候,不知不覺中把以前學(xué)習(xí)的理論知識(shí)進(jìn)行了實(shí)踐,而且運(yùn)用也更加熟練。以前一些理解不了的地方,在此次實(shí)踐中也有了新的理解。而且也提高了理論聯(lián)系實(shí)踐的能力。我很感謝學(xué)校和學(xué)院給我們一個(gè)自己動(dòng)手的機(jī)會(huì),在這過程中我學(xué)習(xí)到了很多新的知識(shí)并且把理論知識(shí)和實(shí)踐聯(lián)系到一起,不懂的就百度或者問老師和同學(xué)們。有了一個(gè)小項(xiàng)目的經(jīng)驗(yàn),走向社會(huì)就不會(huì)那么手足無措了,至少知道了大體流程。以后面對(duì)困難和挑戰(zhàn),我相信我不會(huì)退縮的!但是,由于做畢業(yè)設(shè)計(jì)的時(shí)間較少和技術(shù)上的不成熟,系統(tǒng)還是有一些問題和不夠完美的地方。比如在頁面兼容性方面,ie、火狐、谷歌等瀏覽器對(duì)css的某些特的支持度是不一樣的,所以頁面的呈現(xiàn)會(huì)有些差別。在數(shù)據(jù)容量方面,只進(jìn)行了很小量的數(shù)據(jù)測試,數(shù)據(jù)庫能承受多少數(shù)據(jù)還是不能確定的。在頁面比例和形象上,沒有太多的實(shí)際經(jīng)驗(yàn),所以頁面看上去不是那么漂亮。當(dāng)然,作為畢業(yè)設(shè)計(jì),我覺得這是一次很好的經(jīng)歷,從中學(xué)習(xí)到了如何把理論知識(shí)和實(shí)踐相結(jié)合,也學(xué)習(xí)到了很多新的知識(shí)。雖然中途有很崩潰很難的時(shí)候,但是在老師和同學(xué)們的鼓勵(lì)和幫助下我完成了這個(gè)系統(tǒng),對(duì)我自己也是一種鼓舞,也給我?guī)砹诵判?。參考文獻(xiàn)[1]肖燕成.一個(gè)小型圖書資料管理信息系統(tǒng)的設(shè)計(jì)[J].華中科技大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,2006,02期:4-5[2]張莉.電子商務(wù)中購物車的實(shí)現(xiàn)[J].福建電腦,2005,08期:28-37[3]零壹開發(fā).Vue.js前端開發(fā)基礎(chǔ)與項(xiàng)目實(shí)戰(zhàn)[M];人民郵電出版社,2020[4]杭州電子工業(yè)學(xué)院.網(wǎng)上購物系統(tǒng)若干關(guān)鍵技術(shù)研究[N];中國知網(wǎng)2003年01期.11

……謝辭四個(gè)月的用心準(zhǔn)備,畢業(yè)論文終于完成了。我要感謝我的指導(dǎo)老師陳文文老師。陳老師不厭其煩的發(fā)布各種通知各種要求,對(duì)我們的論文也是一審再審,大到文章的布局,小到語句格式的瑕疵,都會(huì)一一給我們指出來。同時(shí),我也要感謝所有給我上過課的老師。老師們嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度、淵博的學(xué)術(shù)知識(shí)以及寬容待人的風(fēng)范使我受益良多。你們傳授給我們知識(shí)是我不斷成長的源泉,也是完成此次論文的基礎(chǔ)。同時(shí),我也要感謝我的父母。他們永遠(yuǎn)是我成長路上最無私的奉獻(xiàn)者。在外地讀書的時(shí)候,他們總是給予我最溫暖的鼓勵(lì)和關(guān)懷。在精神上和經(jīng)濟(jì)上都給了我很大的支持!期末的臨近、論文的完成也就意味著我在北京理工大學(xué)珠海學(xué)院的大學(xué)四年的旅途也即將結(jié)束。這四年過得很快也很幸福。和同學(xué)們一起上課下課、一起寫作業(yè)、一起吃零食。和室友們一起玩鬧、一起歡聲笑語。遇到不懂的知識(shí)都可以問老師,老師也會(huì)很快回答你。生活中遇到一些困難,輔導(dǎo)員也會(huì)很快幫忙解決。遇到不開心的事,可以跟朋友們一起聊天。遇到學(xué)習(xí)上的小麻煩也可以向同學(xué)們請教。最后衷心的感謝母校、父母、老師、輔導(dǎo)員、同學(xué)、朋友、室友們!附錄goods.jsconstGoodsDetailModel=require('../models/GoodsDetailModel.js');constGoodsModel=require('../models/GoodsModel.js');constTypeModel=require('../models/TypeModel.js');constUserModel=require('../models/UserModel.js');constOrderModel=require('../models/OrderModel.js');constCommentModel=require('../models/CommentModel.js');constjwt=require('jsonwebtoken');constmoment=require('moment');//得到不同類目的商品exports.getGoodsByType=async(ctx)=>{ consttypeId=ctx.query.typeId; try{ letgoods; //查全部 if(typeId==='-1'){ goods=awaitGoodsModel.findAll({ attributes:['id','name','img','typeId'], order:[ ['createtime','DESC']//從大到小 ], }); }else{ goods=awaitGoodsModel.findAll({ attributes:['id','name','img','typeId'], where:{ typeId:typeId }, order:[ ['createtime','DESC'] ], }); } if(goods.length===0){ ctx.body={ code:0, data:[] }; return; } letgoodsList=[]; for(letitemofgoods){ constspec=awaitGoodsDetailModel.findOne({ attributes:['unitPrice'], where:{ goodsId:item.dataValues.id } }); goodsList.push({ id:item.dataValues.id, img:item.dataValues.img, name:item.dataV, price:spec.unitPrice, typeId:item.dataValues.typeId }) }; ctx.body={ code:0, data:goodsList } } catch(e){ ctx.body={ code:10000, message:'網(wǎng)絡(luò)錯(cuò)誤' } }}//得到商品詳情頁信息exports.getGoodsInfo=async(ctx)=>{ constid=ctx.query.id; try{ constgoods=awaitGoodsModel.findOne({ attributes:['id','name','img','desc','typeId'], where:{ id:id }, }); if(!goods){ ctx.body={ code:0, data:{ img:'', name:'', desc:'', specs:[], typeId:'' } }; return; } constspecs=awaitGoodsDetailModel.findAll({ attributes:['id','specName','stockNum','unitPrice'], where:{ goodsId:id } }); ctx.body={ code:0, data:{ img:goods.img, name:, desc:goods.desc, typeId:goods.typeId, specs:specs } } } catch(e){ ctx.body={ code:10000, message:'網(wǎng)絡(luò)錯(cuò)誤' } }}//加入購物車或立即購買exports.addOrder=async(ctx)=>{ consttoken=ctx.request.body.token; try{ constres=OrderModel.create({ userId:jwt.verify(token,'chambers'), goodsDetailId:ctx.request.body.goodsDetailId, goodsNum:ctx.request.body.num, amount:ctx.request.body.amount, state:ctx.request.body.state, updatetime:newDate(), createtime:newDate() }); //如果是立即購買的話,庫存要馬上變動(dòng) if(ctx.request.body.state===1){ constspec=awaitGoodsDetailModel.findOne({ attributes:['stockNum'], where:{ id:ctx.request.body.goodsDetailId } }); letnewNum=spec.stockNum-ctx.request.body.num; awaitGoodsDetailModel.update( { stockNum:newNum }, { where:{ id:ctx.request.body.goodsDetailId } } ); }; ctx.body={ code:0 } } catch(e){ ctx.body={ code:10000, message:'網(wǎng)絡(luò)出錯(cuò)' } }}//獲得用戶訂單exports.getOrderByState=async(ctx)=>{//以上案例,獲取訂單詳情信息,要查詢出訂單詳情里面每條商品的數(shù)據(jù), //先查詢出來該訂單的數(shù)據(jù),然后循環(huán)訂單數(shù)據(jù)里面商品數(shù)組,再根據(jù)數(shù)組去根據(jù)每一個(gè)id去獲取對(duì)應(yīng)的商品數(shù)據(jù)。 conststate=Number(ctx.query.state); constuserId=jwt.verify(ctx.query.token,'chambers');//驗(yàn)證token try{ letorders; //查全部的 if(state===-1){ orders=awaitOrderModel.findAll({ where:{ userId:userId,//WHERE子句用于提取那些滿足指定條件的記錄。 }, order:[ ['createtime','DESC'] ], }); }else{ orders=awaitOrderModel.findAll({ where:{ userId:userId, state:state }, order:[ ['createtime','DESC'] ], }); }; letorderList=[]; for(letorderoforders){ constspec=awaitGoodsDetailModel.findOne({ attributes:['id','goodsId','specName','unitPrice'],//attributes可以獲取一個(gè)對(duì)象中的一個(gè)屬性,并且作為對(duì)象來調(diào)用,注意在這里要使用“[]” where:{ id:order.dataValues.goodsDetailId } }); if(!spec){ continue; } constgoods=awaitGoodsModel.findOne({ attributes:['id','name','img'], where:{ id:spec.goodsId } }); if(!goods){ continue; } //如果是已完成訂單,那就看看評(píng)價(jià)過沒有 lethasComment=false; if(order.dataValues.state===3){ letcomment=awaitCommentModel.findOne({ where:{ orderId:order.dataValues.id } }); if(comment){ hasComment=true; } } orderList.push({ id:order.dataValues.id, createtime:moment(order.dataValues.createtime).add('hours',8).format('MM-DDHH:mm'), goods:{ img:goods.img, id:goods.id, goodsDetailId:spec.id, name:, spec:spec.specName, unitPrice:spec.unitPrice, }, goodsNum:order.dataValues.goodsNum, amount:order.dataValues.amount, state:order.dataValues.state, hasComment:hasComment }) } ctx.body={ code:0, data:orderList } } catch(e){ console.log(e); ctx.body={ code:10000, message:'網(wǎng)絡(luò)出錯(cuò)' } }}//確認(rèn)收貨exports.confirmReceive=async(ctx)=>{ constorderId=ctx.query.id; try{ awaitOrderModel.update( { state:3 }, { where:{ id:orderId } } ); ctx.body={ code:0 } } catch(e){ ctx.body={ code:10000, message:'網(wǎng)絡(luò)出錯(cuò)' } }}//確認(rèn)付款exports.pay=async(ctx)=>{ constorderId=ctx.query.id; try{ awaitOrderModel.update( { state:1 }, { where:{ id:orderId } } ); ctx.body={ code:0 } } catch(e){ ctx.body={ code:10000, message:'網(wǎng)絡(luò)出錯(cuò)' } }}//購物車結(jié)算exports.settleAccounts=async(ctx)=>{ letcartList=ctx.request.body.cartList; try{ for(letitemofcartList){ letorder=awaitOrderModel.findOne({ attributes:['goodsDetailId'], where:{ id:item.id } }); awaitOrderModel.update( { state:1, goodsNum:item.goodsNum, amount:item.amount },{ where:{ id:item.id } } ); //更新庫存 letspec=awaitGoodsDetailModel.findOne({ attributes:['stockNum'], where:{ id:order.goodsDetailId } }); letnewNum=spec.stockNum-item.goodsNum; awaitGoodsDetailModel.update( { stockNum:newNum },{ where:{ id:order.goodsDetailId } } ) }; ctx.body={ code:0 } } catch(e){ ctx.body={ code:10000, message:'網(wǎng)絡(luò)出錯(cuò)' } }}//發(fā)送評(píng)價(jià)exports.sendComment=async(ctx)=>{ try{ constres=awaitCommentModel.create({ userId:jwt.verify(ctx.request.body.token,'chambers'), goodsId:ctx.request.body.goodsId, goodsDetailId:ctx.request.body.goodsDetailId, orderId:ctx.request.body.orderId, content:ctx.request.body.content, score:ctx.request.body.score, createtime:newDate() }); ctx.body={ code:0 } } catch(e){ ctx.body={ code:10000, message:'網(wǎng)絡(luò)出錯(cuò)' } }}//獲得商品評(píng)論exports.getGoodsComment=async(ctx)=>{ constgoodsId=ctx.query.goodsId; try{ constcomments=awaitCommentModel.findAll({ where:{ goodsId:goodsId }, order:[ ['createtime','DESC'] ], }); if(comments.length<=0){ ctx.body={ code:0, data:{} }; return; } //分?jǐn)?shù)累加 letsum=0; letcommentList=[]; for(letcommentofcomments){ sum+=comment.score; letuser=awaitUserModel.findOne({ attributes:['nickname','headimg'], where:{ id:comment.dataValues.userId } }); if(!user){ user={ nickname:'該用戶已注銷',

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論