版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
模塊四管理端-套餐管理《JavaEE企業(yè)級(jí)應(yīng)用開發(fā)項(xiàng)目教程(SSM)》知識(shí)目標(biāo)/Target了解七牛云存儲(chǔ)服務(wù),能夠說出七牛云存儲(chǔ)服務(wù)的使用步驟熟悉Redis的基本操作,能夠獨(dú)立完成Redis的下載、配置與啟動(dòng)熟悉Redis可視化工具,能夠完成Redis可視化工具的安裝并使用Redis可視化工具連接Redis技能目標(biāo)/Target掌握七牛云存儲(chǔ)服務(wù)的實(shí)現(xiàn)方式,能夠使用七牛云實(shí)現(xiàn)圖片上傳的功能掌握新增套餐功能的實(shí)現(xiàn)方法掌握查詢套餐功能的實(shí)現(xiàn)方法技能目標(biāo)/Target掌握編輯套餐功能的實(shí)現(xiàn)方法掌握刪除套餐功能的實(shí)現(xiàn)方法掌握Redis和Quartz的實(shí)現(xiàn)方式,能夠使用Redis和Quartz實(shí)現(xiàn)定時(shí)清理垃圾圖片的功能章節(jié)概述/
Summary在日常的體檢中,客戶并不知道哪些檢查是必須的,為了避免客戶盲目選擇體檢項(xiàng)目而導(dǎo)致的時(shí)間、金錢的浪費(fèi),一般情況下,健康管理機(jī)構(gòu)不直接將單個(gè)的檢查項(xiàng)或檢查組在線上對客戶銷售。為了給客戶提供方便,會(huì)根據(jù)群體需求推出了不同類型的體檢套餐,套餐中包含客戶需要的所有檢查項(xiàng)目。這些體檢套餐可以在管理端進(jìn)行新增、查詢、編輯和刪除。目錄/Contents01020304新增套餐查詢套餐編輯套餐刪除套餐05定時(shí)清理垃圾圖片新增套餐4-1任務(wù)描述用戶在預(yù)約體檢時(shí)需要選擇相應(yīng)的套餐,體檢套餐的豐富程度會(huì)間接影響客戶的選擇。為了滿足各個(gè)用戶群的體檢需求,應(yīng)該盡可能地豐富套餐種類,使體檢套餐更有針對性。套餐可以在管理端的套餐管理中進(jìn)行新增。任務(wù)描述單擊套餐管理頁面中的“新增”按鈕彈出新增套餐對話框。輸入套餐的基本信息,勾選檢查組信息后,單擊“確定”按鈕完成套餐的新增。新增套餐可以分解成2個(gè)功能,分別是彈出帶有檢查組數(shù)據(jù)的對話框、完成套餐的新增。任務(wù)分析任務(wù)分析(1)彈出新增套餐對話框?yàn)閟etmeal.html頁面的“新增”按鈕綁定單擊事件,在單擊事件觸發(fā)后彈出新增套餐對話框,再提交查詢所有檢查組的請求。(2)接收和處理查詢檢查組請求客戶端發(fā)起查詢檢查組的請求后,由CheckGroupController類的findAll()方法接收頁面提交的請求,并調(diào)用CheckGroupService接口的findAll()方法查詢所有檢查組。1.彈出帶有檢查組數(shù)據(jù)的新增套餐對話框任務(wù)分析(3)查詢所有檢查組在CheckGroupServiceImpl類中重寫CheckGroupService接口的findAll()方法,并調(diào)用CheckGroupDao接口的findAll()方法從數(shù)據(jù)庫中查詢所有檢查組。(4)顯示查詢結(jié)果CheckGroupController類中的findAll()方法將查詢結(jié)果返回setmeal.html頁面,setmeal.html頁面根據(jù)結(jié)果在對話框中顯示所有的檢查組信息。1.彈出帶有檢查組數(shù)據(jù)的新增套餐對話框任務(wù)分析彈出帶有檢查組數(shù)據(jù)對話框的實(shí)現(xiàn)過程1.彈出帶有檢查組數(shù)據(jù)的新增套餐對話框任務(wù)分析(1)提交新增套餐請求為setmeal.html頁面新增套餐對話框“確定”按鈕綁定單擊事件,在單擊事件觸發(fā)后提交對話框中的數(shù)據(jù)。(2)接收和處理新增套餐請求客戶端發(fā)起提交數(shù)據(jù)的請求后,由控制器類SetmealController中的add()方法接收頁面提交的請求,請求的參數(shù)中包含套餐基本信息和套餐對檢查組的引用信息。2.完成套餐的新增任務(wù)分析(3)保存新增套餐數(shù)據(jù)在SetmealServiceImpl類中重寫SetmealService接口的add()方法,調(diào)用SetmealDao接口中用于新增套餐基本信息的add()方法、用于新增套餐對檢查組的引用的setSetmealAndCheckGroup()方法。(4)提示新增結(jié)果SetmealController類中的add()方法將新增套餐的結(jié)果返回setmeal.html頁面,setmeal.html頁面根據(jù)返回結(jié)果提示新增套餐成功或失敗的信息。2.完成套餐的新增任務(wù)分析完成套餐新增的實(shí)現(xiàn)過程知識(shí)進(jìn)階七牛云存儲(chǔ)服務(wù)七牛云是國內(nèi)知名的云計(jì)算及數(shù)據(jù)服務(wù)提供商,推出了對象存儲(chǔ)、融合CDN加速、容器云、大數(shù)據(jù)平臺(tái)、深度學(xué)習(xí)平臺(tái)等服務(wù)。在七牛云提供的多種服務(wù)中,傳智健康主要使用的是七牛云提供的對象存儲(chǔ)服務(wù),將圖片存儲(chǔ)在七牛云的存儲(chǔ)空間中。知識(shí)進(jìn)階在使用七牛云之前,需要注冊成為會(huì)員。訪問七牛云官方網(wǎng)站。注冊七牛云知識(shí)進(jìn)階在七牛云官方網(wǎng)站首頁中,單擊右上角“立即注冊”按鈕,進(jìn)入七牛云注冊頁面。注冊七牛云知識(shí)進(jìn)階使用注冊賬號(hào)進(jìn)行登錄,登錄成功后還不能進(jìn)行后續(xù)操作,因?yàn)樾枰M(jìn)行實(shí)名認(rèn)證。實(shí)名認(rèn)證在【個(gè)人中心】→【個(gè)人信息】完成。實(shí)名認(rèn)證知識(shí)進(jìn)階認(rèn)證完成后,返回七牛云產(chǎn)品主頁面。新建存儲(chǔ)空間知識(shí)進(jìn)階七牛云產(chǎn)品主頁面中,單擊頁面資源管理欄中的“+新增存儲(chǔ)空間”選項(xiàng),新增存儲(chǔ)空間。輸入存儲(chǔ)空間名稱,勾選存儲(chǔ)區(qū)域和訪問控制,單擊“確定”按鈕,完成存儲(chǔ)空間的創(chuàng)建。新建存儲(chǔ)空間知識(shí)進(jìn)階新建存儲(chǔ)空間需要注意的是,系統(tǒng)會(huì)自動(dòng)為該空間配備測試域名,有效期30天,僅限用于業(yè)務(wù)對接測試。30天后系統(tǒng)會(huì)自動(dòng)回收,為了不影響使用,讀者可以重新創(chuàng)建新的存儲(chǔ)空間。生成的默認(rèn)域名需要讀者記錄,因?yàn)樵诤罄m(xù)開發(fā)中需要使用該域名。知識(shí)進(jìn)階在操作七牛云存儲(chǔ)服務(wù)時(shí)需要引入七牛云的依賴,打開health_parent父工程的pom.xml文件,引入七牛云的JAR包。操作七牛云存儲(chǔ)服務(wù)<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId><version>7.7.0</version></dependency>
</dependencies></dependencyManagement>知識(shí)進(jìn)階打開health_common模塊pom文件,引入七牛云的JAR包。
<dependencies>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId></dependency>
</dependencies>操作七牛云存儲(chǔ)服務(wù)知識(shí)進(jìn)階鑒權(quán)注意:一個(gè)賬號(hào)最多擁有兩對密鑰(Access/SecretKey);更換密鑰時(shí),請創(chuàng)建第二個(gè)密鑰;刪除密鑰前須停用服務(wù);出于安全考慮,建議讀者周期性地更換密鑰。JavaSDK的所有功能都要合法的授權(quán)才能使用。授權(quán)憑證的簽算需要七牛云賬號(hào)下的一對有效的AccessKey和SecretKey,這對密鑰可以通過【個(gè)人中心】→【密鑰管理】進(jìn)行查看。知識(shí)進(jìn)階封裝工具類在七牛開發(fā)者中心的JavaSDK幫助文檔中提供了圖片上傳和刪除的官方使用案例,為了方便讀者操作七牛云存儲(chǔ)服務(wù),我們對官方提供的使用案例進(jìn)行了簡單改造,封裝成工具類QiniuUtils,在項(xiàng)目中進(jìn)行圖片上傳與刪除時(shí)直接調(diào)用該工具類即可。在health_common模塊的com.itheima.utils包下創(chuàng)建QiniuUtils類,在類中定義upload2Qiniu()方法,用于圖片上傳。定義deleteFileFromQiniu()方法,用于圖片刪除。知識(shí)進(jìn)階在QiniuUtils類中配置存儲(chǔ)區(qū)域時(shí),需要注意七牛云的存儲(chǔ)區(qū)域與Zone對象的對應(yīng)關(guān)系。存儲(chǔ)區(qū)域Zone對象華東Zone.zone0()華北Zone.zone1()華南Zone.zone2()北美Zone.zoneNa0()東南亞Zone.zoneAs0()上述表格中的內(nèi)容記錄了每個(gè)存儲(chǔ)區(qū)域?qū)?yīng)的Zone對象。需要注意的是,其中的內(nèi)容是本書截稿時(shí)七牛云官方網(wǎng)站提供的存儲(chǔ)區(qū)域與Zone對象的對應(yīng)關(guān)系,如果讀者在編寫代碼時(shí)出現(xiàn)對應(yīng)關(guān)系不匹配,可以前往官網(wǎng)獲取最新的對應(yīng)關(guān)系。。封裝工具類任務(wù)實(shí)現(xiàn)在setmeal.html頁面中定義handleCreate()方法,將dialogFormVisible的值修改為true,并且在每次彈出對話框之前,調(diào)用resetForm()方法將對話框中的數(shù)據(jù)清空。resetForm(){this.formData={};//清空表單域this.checkgroupIds=[];//清空勾選的檢查組this.imageUrl=null;//清除上傳的圖片域},handleCreate(){this.resetForm();//重置表單數(shù)據(jù)this.activeName='first';//每次彈出的新增對話框默認(rèn)顯示基本信息區(qū)this.dialogFormVisible=true;//顯示新增對話框axios.get("/checkgroup/findAll.do").then((res)=>{if(res.data.flag){this.tableData=res.data.data;//基于Vue數(shù)據(jù)綁定展示}else{this.$message.error(res.data.message);}});}1.彈出帶有檢查組數(shù)據(jù)的新增套餐對話框(1)彈出新增套餐對話框任務(wù)實(shí)現(xiàn)在setmeal.html頁面為“新增”按鈕綁定單擊事件,并設(shè)置單擊時(shí)調(diào)用handleCreate()方法。<el-buttontype="primary"class="butT"
@click="handleCreate()">新增</el-button>1.彈出帶有檢查組數(shù)據(jù)的對話框1.彈出帶有檢查組數(shù)據(jù)的新增套餐對話框(1)彈出新增套餐對話框任務(wù)實(shí)現(xiàn)在health_backend子模塊的CheckGroupController類定義findAll()方法,用于處理查詢所有檢查組的請求。@RequestMapping("/findAll")publicResultfindAll(){try{List<CheckGroup>list=checkGroupService.findAll();//服務(wù)調(diào)用成功,返回查詢結(jié)果與查詢成功提示信息returnnewResult(true,MessageConstant.
QUERY_CHECKGROUP_SUCCESS,list);}catch(Exceptione){e.printStackTrace();//服務(wù)調(diào)用失敗,返回查詢失敗提示信息returnnewResult(false,MessageConstant.QUERY_CHECKGROUP_FAIL);}}(2)實(shí)現(xiàn)查詢所有檢查組1.彈出帶有檢查組數(shù)據(jù)的對話框1.彈出帶有檢查組數(shù)據(jù)的新增套餐對話框任務(wù)實(shí)現(xiàn)在health_interface子模塊的CheckGroupService接口中定義findAll()方法,用于查詢所有檢查組。//查詢檢查組信息publicList<CheckGroup>findAll();在health_service_provider子模塊的CheckGroupServiceImpl類中重寫CheckGroupService接口的findAll()方法,用于查詢所有檢查組。@OverridepublicList<CheckGroup>findAll(){returncheckGroupDao.findAll();//調(diào)用持久層方法}1.彈出帶有檢查組數(shù)據(jù)的對話框1.彈出帶有檢查組數(shù)據(jù)的新增套餐對話框(2)實(shí)現(xiàn)查詢所有檢查組任務(wù)實(shí)現(xiàn)在health_service_provider子模塊的CheckGroupDao接口中定義findAll()方法,用于查詢所有檢查組。//查詢檢查組信息publicList<CheckGroup>findAll();在health_service_provider子模塊的CheckGroupDao.xml文件中,使用<select>標(biāo)簽映射查詢語句查詢所有檢查組。<!--查詢檢查組信息--><selectid="findAll"
resultType="com.itheima.pojo.CheckGroup">
SELECT*FROMt_checkgroup</select>1.彈出帶有檢查組數(shù)據(jù)的對話框1.彈出帶有檢查組數(shù)據(jù)的新增套餐對話框(2)實(shí)現(xiàn)查詢所有檢查組任務(wù)實(shí)現(xiàn)啟動(dòng)Zookeeper服務(wù),在IDEA依次啟動(dòng)health_service_provider和health_backend。在瀏覽器中訪問http://localhost:82/pages/setmeal.html。(3)測試彈出帶有檢查組數(shù)據(jù)的新增套餐對話框1.彈出帶有檢查組數(shù)據(jù)的對話框1.彈出帶有檢查組數(shù)據(jù)的新增套餐對話框任務(wù)實(shí)現(xiàn)在套餐管理頁面單擊“新增”按鈕,彈出新增套餐對話框。(3)測試彈出帶有檢查組數(shù)據(jù)的新增套餐對話框1.彈出帶有檢查組數(shù)據(jù)的對話框1.彈出帶有檢查組數(shù)據(jù)的新增套餐對話框任務(wù)實(shí)現(xiàn)在新增套餐對話框中單擊“檢查組信息”,顯示檢查組信息。(3)測試彈出帶有檢查組數(shù)據(jù)的新增套餐對話框1.彈出帶有檢查組數(shù)據(jù)的對話框1.彈出帶有檢查組數(shù)據(jù)的新增套餐對話框任務(wù)實(shí)現(xiàn)要想實(shí)現(xiàn)圖片上傳功能,需要使用文件上傳組件commons-fileupload,并在springmvc.xml文件中配置commons-fileupload組件的信息。首先在health_parent父工程的pom.xml文件中引入commons-fileupload的依賴信息。<properties>
<commons-fileupload.version>1.3.1</commons-fileupload.version></properties><dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version> </dependency>
</dependencies></dependencyManagement>2.圖片上傳(1)配置文件上傳組件任務(wù)實(shí)現(xiàn)<dependencies>
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId></dependency></dependencies>在health_common子模塊的pom.xml文件中引入commons-fileupload的依賴信息。2.圖片上傳(1)配置文件上傳組件任務(wù)實(shí)現(xiàn)在health_backend子模塊的springmvc.xml文件中配置文件上傳組件。<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"
<!--文件上傳組件--><beanid="multipartResolver"
class="mons.CommonsMultipartResolver"><propertyname="maxUploadSize"value="104857600"/><propertyname="maxInMemorySize"value="4096"/><propertyname="defaultEncoding"value="UTF-8"/></bean></beans>表示以字節(jié)為單位的最大文件大小表示讀取文件到內(nèi)存中最大的字節(jié)數(shù),默認(rèn)是1024表示文件上傳頭部編碼默認(rèn)是iso-8859-12.圖片上傳(1)配置文件上傳組件任務(wù)實(shí)現(xiàn)為setmeal.html頁面中的上傳組件el-upload設(shè)置對應(yīng)屬性的值。<el-form-itemlabel="上傳圖片"><el-upload
class="avatar-uploader"
action="/setmeal/upload.do"
:auto-upload="true"
name="imgFile"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"><imgv-if="imageUrl":src="imageUrl"class="avatar"><!--用于上傳圖片預(yù)覽--><iv-elseclass="el-icon-plusavatar-uploader-icon"></i><!--用于展示圖片預(yù)覽--></el-upload></el-form-item>表示上傳的文件提交到后臺(tái)的地址上傳文件的名稱選中文件后是否自動(dòng)上傳是否顯示已上傳文件列表上傳文件之前執(zhí)行的鉤子函數(shù)文件上傳成功時(shí)執(zhí)行的鉤子函數(shù)2.圖片上傳(2)提交圖片上傳的請求任務(wù)實(shí)現(xiàn)beforeAvatarUpload(file){constisJPG=file.type==='image/jpeg';if(!isJPG){this.$message.error('上傳套餐圖片只能是JPG格式!');}constisLt2M=file.size/1024/1024<2;if(!isLt2M){this.$message.error('上傳套餐圖片大小不能超過2MB!');}returnisJPG&&isLt2M;}判斷圖片格式是jpeg判斷大小不超過2MB2.圖片上傳(2)提交圖片上傳的請求在setmeal.html頁面中定義beforeAvatarUpload()方法,用于校驗(yàn)圖片的格式和大小。任務(wù)實(shí)現(xiàn)在setmeal.html頁面中定義handleAvatarSuccess()方法,用于返回上傳成功或失敗的提示信息。handleAvatarSuccess(response,file){this.$message({type:response.flag?"success":"error",message:response.message});if(response.flag){//預(yù)覽剛剛上傳的文件this.imageUrl="/"+response.data;//將文件名稱賦值給模型數(shù)據(jù),用于表單提交this.formData.img=response.data;}}七牛云存儲(chǔ)空間的域名,讀者需要依照自己創(chuàng)建的存儲(chǔ)空間的域名進(jìn)行替換。2.圖片上傳(2)提交圖片上傳的請求任務(wù)實(shí)現(xiàn)在health_backend子模塊的com.itheima.controller包下創(chuàng)建控制器類SetmealController,在類中定義upload()方法,用于處理圖片上傳的請求。@RestController
@RequestMapping("/setmeal")publicclassSetmealController{@Reference
privateSetmealServicesetmealService;@RequestMapping("/upload")publicResultupload(@RequestParam("imgFile")MultipartFileimgFile){StringoriginalFilename=imgFile.getOriginalFilename();//獲取原始文件名intindex=originalFilename.lastIndexOf(".");Stringsuffix=originalFilename.substring(index);//獲取文件后綴StringfileName=UUID.randomUUID().toString()+suffix;//圖片名稱try{
QiniuUtils.upload2Qiniu(imgFile.getBytes(),fileName);//將圖片保存到七牛云returnnewResult(true,MessageConstant.PIC_UPLOAD_SUCCESS,fileName);}catch(Exceptione){}}}2.圖片上傳(3)實(shí)現(xiàn)圖片上傳控制器任務(wù)實(shí)現(xiàn)啟動(dòng)Zookeeper服務(wù)、health_service_provider和health_backend。在瀏覽器中訪問http://localhost:82/pages/setmeal.html。單擊“+”,選擇圖片進(jìn)行上傳。2.圖片上傳(4)測試圖片上傳任務(wù)實(shí)現(xiàn)為新增套餐對話框中的“取消”和“確定”按鈕綁定單擊事件,并設(shè)置單擊時(shí)要執(zhí)行的操作。<divslot="footer"class="dialog-footer"><el-button@click="dialogFormVisible=false">取消</el-button><el-buttontype="primary"@click="handleAdd()">確定</el-button></div>3.完成套餐的新增(1)提交新增套餐請求任務(wù)實(shí)現(xiàn)handleAdd(){//發(fā)送axios請求,包括兩部分:套餐基本信息、關(guān)聯(lián)的檢查組id數(shù)組
axios.post("/setmeal/add.do?checkgroupIds="+this.checkgroupIds,this.formData).then((res)=>{if(res.data.flag){//執(zhí)行成功,提示信息this.$message({type:'success',message:res.data.message});this.dialogFormVisible=false;//關(guān)閉新增對話框}else{this.$message.error(res.data.message);}});}關(guān)聯(lián)的檢查組id數(shù)組套餐基本信息3.完成套餐的新增(1)提交新增套餐請求任務(wù)實(shí)現(xiàn)在health_common子模塊的com.itheima.pojo包下創(chuàng)建Setmeal類,在類中聲明套餐的屬性,并定義各個(gè)屬性的getter/setter方法。3.完成套餐的新增(2)創(chuàng)建套餐類任務(wù)實(shí)現(xiàn)在health_common子模塊的SetmealController類中定義add()方法,用于處理新增套餐的請求。@RequestMapping("/add")publicResultadd(@RequestBodySetmealsetmeal,Integer[]checkgroupIds){try{setmealService.add(setmeal,checkgroupIds);//調(diào)用服務(wù)add()發(fā)送請求//調(diào)用服務(wù)成功,返回新增成功提示信息returnnewResult(true,MessageConstant.ADD_SETMEAL_SUCCESS);}catch(Exceptione){e.printStackTrace();//調(diào)用服務(wù)失敗,返回新增失敗提示信息returnnewResult(false,MessageConstant.ADD_SETMEAL_FAIL);}}3.完成套餐的新增(3)實(shí)現(xiàn)新增套餐控制器任務(wù)實(shí)現(xiàn)在health_interface子模塊的com.itheima.service包下創(chuàng)建接口SetmealService,在接口中定義新增套餐的add()方法。publicinterfaceSetmealService{publicvoidadd(Setmealsetmeal,Integer[]checkgroupIds);//新增套餐}3.完成套餐的新增(4)創(chuàng)建新增套餐服務(wù)任務(wù)實(shí)現(xiàn)在health_service_provider子模塊的com.itheima.service.impl包下創(chuàng)建SetmealService接口實(shí)現(xiàn)類SetmealServiceImpl,并重寫接口的add()方法,用于新增套餐。@Service(interfaceClass=SetmealService.class)@TransactionalpublicclassSetmealServiceImpl
implementsSetmealService{@Autowired//注入DAO對象privateSetmealDaosetmealDao;//新增套餐同時(shí)需要關(guān)聯(lián)檢查組(設(shè)置多對多關(guān)系)
@Overridepublicvoidadd(Setmealsetmeal,Integer[]checkgroupIds){
setmealDao.add(setmeal);//調(diào)用持久層接口IntegersetmealId=setmeal.getId();//獲取套餐id//關(guān)聯(lián)檢查組this.setSetmealAndCheckGroup(setmealId,checkgroupIds);}}3.完成套餐的新增(5)實(shí)現(xiàn)新增套餐服務(wù)任務(wù)實(shí)現(xiàn)publicvoidsetSetmealAndCheckGroup(IntegersetmealId,Integer[]
checkgroupIds){if(checkgroupIds!=null&&checkgroupIds.length>0){for(IntegercheckgroupId:checkgroupIds){//遍歷檢查組idMap<String,Integer>map=newHashMap<>();map.put("setmealId",setmealId);//套餐idmap.put("checkgroupId",checkgroupId);//勾選的檢查組id//調(diào)用持久層接口,新增套餐與檢查組關(guān)聯(lián)信息setmealDao.setSetmealAndCheckGroup(map);}}}設(shè)置套餐對檢查組的引用,遍歷數(shù)組checkgroupIds,把套餐id和遍歷的檢查組id存儲(chǔ)到map集合中。3.完成套餐的新增(5)實(shí)現(xiàn)新增套餐服務(wù)任務(wù)實(shí)現(xiàn)在health_service_provider子模塊的com.itheima.dao包下創(chuàng)建持久層接口SetmealDao,用于處理與套餐相關(guān)的操作。publicinterfaceSetmealDao{publicvoidadd(Setmealsetmeal);//新增套餐基本信息//新增套餐與檢查組的關(guān)聯(lián)信息publicvoidsetSetmealAndCheckGroup(Map<String,Integer>map);}3.完成套餐的新增(6)實(shí)現(xiàn)持久層新增套餐任務(wù)實(shí)現(xiàn)在health_service_provider子模塊的resources文件夾的com.itheima.dao目錄下創(chuàng)建與SetmealDao接口同名的映射文件SetmealDao.xml,在文件中使用<intert>標(biāo)簽映射新增語句,分別新增套餐的基本信息和新增套餐對檢查組的引用。<!--新增套餐--><insertid="add"parameterType="com.itheima.pojo.Setmeal"><selectKeykeyProperty="id"resultType="int"order="AFTER">selectLAST_INSERT_ID()</selectKey>INSERTINTOt_setmeal(code,name,sex,age,helpCode,price,remark,attention,img)
VALUES(#{code},#{name},#{sex},#{age},#{helpCode},#{price},#{remark},#{attention},#{img})</insert><!--設(shè)置套餐和檢查組多對多關(guān)系,操作的是中間關(guān)系表--><insertid="setSetmealAndCheckGroup"parameterType="map">INSERTINTOt_setmeal_checkgroup(setmeal_id,checkgroup_id)VALUES(#{setmealId},#{checkgroupId})</insert>3.完成套餐的新增(6)實(shí)現(xiàn)持久層新增套餐任務(wù)實(shí)現(xiàn)依次啟動(dòng)ZooKeeper服務(wù)、health_service_provider和health_backend,在瀏覽器中訪問http://localhost:82/pages/setmeal.html,按照要求填寫套餐的基本信息。3.完成套餐的新增(7)測試新增套餐任務(wù)實(shí)現(xiàn)填寫套餐基本信息后,單擊“檢查組信息”,勾選套餐包含的檢查組信息。3.完成套餐的新增(7)測試新增套餐任務(wù)實(shí)現(xiàn)勾選檢查組信息后,單擊“確定”按鈕,將數(shù)據(jù)提交到后臺(tái)。3.完成套餐的新增(7)測試新增套餐任務(wù)實(shí)現(xiàn)由于查詢套餐的功能暫未開發(fā)完成,剛新增的套餐數(shù)據(jù)并不會(huì)展示在套餐管理頁面中。套餐是否新增成功可以通過查詢數(shù)據(jù)庫中的數(shù)據(jù)表進(jìn)行驗(yàn)證。3.完成套餐的新增(7)測試新增套餐查詢套餐4-2任務(wù)描述套餐的查詢,既可以根據(jù)指定需求查詢,也可以查詢所有套餐。考慮到頁面可視化效果,本任務(wù)通過分頁形式展示查詢出的套餐。查詢套餐可以分解成3個(gè)功能,分別是分頁展示套餐、頁碼切換、按條件查詢套餐。任務(wù)分析任務(wù)分析(1)提交分頁查詢套餐的請求。(2)接收和處理分頁查詢套餐請求。(3)分頁查詢套餐。(4)展示分頁查詢結(jié)果。分頁展示套餐為setmeal.html頁面的分頁條綁定單擊事件,在單擊事件觸發(fā)后根據(jù)要跳轉(zhuǎn)的頁碼進(jìn)行分頁查詢。頁碼切換為setmeal.html頁面的“查詢”按鈕綁定單擊事件,在單擊事件觸發(fā)后執(zhí)行按條件的分頁查詢。按條件查詢套餐查詢套餐任務(wù)分析分頁查詢套餐的實(shí)現(xiàn)過程任務(wù)實(shí)現(xiàn)在setmeal.html頁面中定義findPage()方法,用于分頁查詢套餐。findPage(){//定義分頁參數(shù)varparam={currentPage:this.pagination.currentPage,//當(dāng)前頁pageSize:this.pagination.pageSize,//每頁顯示記錄數(shù)
queryString:this.pagination.queryString//查詢條件};//發(fā)送Ajax請求,進(jìn)行分頁查詢
axios.post("/setmeal/findPage.do",param).then((res)=>{this.dataList=res.data.rows;//查詢結(jié)果this.pagination.total=res.data.total;//總記錄數(shù)});}1.分頁展示套餐(1)提交分頁查詢套餐的請求任務(wù)實(shí)現(xiàn)在鉤子函數(shù)created()中調(diào)用findPage()方法,訪問setmeal.html頁面后即可實(shí)現(xiàn)查詢套餐并分頁顯示。created(){
this.findPage();//調(diào)用分頁查詢方法完成分頁查詢}1.分頁展示套餐(1)提交分頁查詢套餐的請求任務(wù)實(shí)現(xiàn)在health_backend子模塊的SetmealController類中定義findPage()方法,用于處理分頁查詢套餐的請求。@RequestMapping("/findPage")publicPageResultfindPage(@RequestBodyQueryPageBeanpageBean){//調(diào)用服務(wù)接口findPage(),返回分頁結(jié)果封裝對象returnsetmealService.findPage(pageBean);}1.分頁展示套餐(2)實(shí)現(xiàn)查詢套餐控制器任務(wù)實(shí)現(xiàn)在health_interface子模塊的SetmealService接口定義findPage()方法,用于分頁查詢套餐。//分頁查詢套餐接口publicPageResultfindPage(QueryPageBeanpageBean);1.分頁展示套餐(3)創(chuàng)建查詢套餐服務(wù)任務(wù)實(shí)現(xiàn)在health_service_provider子模塊的SetmealServiceImpl類重寫CheckGroupService接口的findPage()方法,用于分頁查詢套餐。@OverridepublicPageResultfindPage(QueryPageBeanpageBean){IntegercurrentPage=pageBean.getCurrentPage();//獲取當(dāng)前頁面IntegerpageSize=pageBean.getPageSize();//獲取每頁顯示的記錄數(shù)StringqueryString=pageBean.getQueryString();//獲取查詢條件
PageHelper.startPage(currentPage,pageSize);//使用分頁助手插件實(shí)現(xiàn)分頁查詢//調(diào)用持久層接口方法Page<Setmeal>page=setmealDao.findByCondition(queryString);//返回分頁結(jié)果對象returnnewPageResult(page.getTotal(),page.getResult());//返回分頁對象}1.分頁展示套餐(4)實(shí)現(xiàn)查詢套餐服務(wù)任務(wù)實(shí)現(xiàn)在health_service_provider子模塊的SetmealDao接口定義findByCondition()方法,用于分頁查詢套餐。//分頁查詢套餐publicPage<Setmeal>findByCondition(StringqueryString);1.分頁展示套餐(5)實(shí)現(xiàn)持久層查詢套餐在health_service_provider子模塊的SetmealDao.xml映射文件中使用<select>元素映射查詢語句,進(jìn)行套餐的條件查詢、分頁查詢。<selectid="findByCondition"parameterType="string"
resultType="com.itheima.pojo.Setmeal">SELECT*FROMt_setmeal<iftest="value!=nullandvalue.length>0">
WHEREcode=#{value}ORnameLIKE'%${value}%'ORhelpCode=#{value}</if></select>任務(wù)實(shí)現(xiàn)依次啟動(dòng)ZooKeeper服務(wù)、health_service_provider和health_backend。在瀏覽器中訪問http://localhost:82/pages/setmeal.html1.分頁展示套餐(6)測試分頁展示套餐任務(wù)實(shí)現(xiàn)優(yōu)化handleAdd()方法,在新增套餐成功后調(diào)用findPage()方法,以展示系統(tǒng)中最新的套餐。//新增套餐handleAdd(){//發(fā)送axios請求,包括兩部分:套餐基本信息、關(guān)聯(lián)的檢查組id數(shù)組axios.post("/setmeal/add.do?checkgroupIds=" +this.checkgroupIds,this.formData).then((res)=>{if(res.data.flag){
this.findPage();//分頁查詢套餐}
});}1.分頁展示套餐(7)完善setmeal.html頁面的handleAdd()方法任務(wù)實(shí)現(xiàn)在setmeal.html頁面中定義handleCurrentChange()方法,該方法會(huì)在頁碼發(fā)生改變時(shí)被調(diào)用。//切換頁碼handleCurrentChange(currentPage){this.pagination.currentPage=currentPage;//指定最新的頁碼this.findPage();//調(diào)用分頁方法}2.頁碼切換任務(wù)實(shí)現(xiàn)在setmeal.html頁面中提供了分頁組件el-pagination,為分頁組件el-pagination設(shè)置對應(yīng)屬性的值。<el-pagination
class="pagiantion"
@current-change="handleCurrentChange"
:current="pagination.currentPage"
:size="pagination.pageSize"
:total="pagination.total"
layout="total,prev,pager,next,jumper"></el-pagination>表示在頁碼發(fā)生改變時(shí)觸發(fā)的方法2.頁碼切換任務(wù)實(shí)現(xiàn)往數(shù)據(jù)庫導(dǎo)入測試數(shù)據(jù)。依次啟動(dòng)Zookeeper服務(wù)、health_service_provider和health_backend。在瀏覽器中訪問http://localhost:82/pages/setmeal.htm。2.頁碼切換任務(wù)實(shí)現(xiàn)在套餐管理頁面,單擊“>”按鈕,跳轉(zhuǎn)到第2頁。2.頁碼切換任務(wù)實(shí)現(xiàn)在setmeal.html頁面中為“查詢”按鈕綁定單擊事件,并在單擊時(shí)調(diào)用handleCurrentChange(1)方法。<el-buttonclass="dalfBut"
@click="handleCurrentChange(1)">查詢</el-button>強(qiáng)制指定currentPage的方式可以使返回的數(shù)據(jù)從查詢結(jié)果的第1條開始返回3.按條件查詢套餐任務(wù)實(shí)現(xiàn)依次啟動(dòng)Zookeeper服務(wù)、health_service_provider和health_backend。在瀏覽器中訪問http://localhost:82/pages/setmeal.html。在查詢條件輸入框輸入0002后,單擊“查詢”按鈕。3.按條件查詢套餐編輯套餐4-3任務(wù)描述在setmeal.html頁面中,單擊“編輯”按鈕會(huì)彈出編輯套餐對話框,該對話框中展示對應(yīng)套餐的基本信息和所有的檢查組信息,并將套餐中包含的檢查組信息設(shè)置為勾選狀態(tài)。由于套餐是針對不同的用戶群體的需求設(shè)計(jì)的,當(dāng)群體需求發(fā)生變化時(shí),不可避免地會(huì)對套餐進(jìn)行修改,這時(shí)就可以進(jìn)行套餐的編輯??梢詫⒕庉嬏撞头纸獬?個(gè)功能實(shí)現(xiàn),分別是彈出帶有套餐數(shù)據(jù)的編輯套餐對話框、完成套餐的編輯。任務(wù)分析任務(wù)分析(1)彈出編輯套餐對話框?yàn)閟etmeal.html頁面的“編輯”按鈕綁定單擊事件,在單擊事件觸發(fā)后彈出編輯套餐對話框,再提交查詢套餐基本信息、查詢所有檢查組、查詢對檢查組的引用的請求。(2)接收和處理查詢套餐請求套餐數(shù)據(jù)包含基本信息和對檢查組的引用信息,因此,客戶端發(fā)起查詢套餐的請求時(shí),需要接收和處理查詢基本信息的請求、查詢所有檢查組的請求、查詢對檢查組的引用的請求。1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框任務(wù)分析(3)查詢套餐數(shù)據(jù)在SetmealServiceImpl類中實(shí)現(xiàn)查詢套餐基本信息、查詢對檢查組的引用的相關(guān)方法。(4)顯示查詢結(jié)果setmeal.html頁面根據(jù)返回結(jié)果在編輯套餐對話框中展示套餐基本信息、所有的檢查組信息和勾選的檢查組信息。1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框任務(wù)分析彈出帶有套餐數(shù)據(jù)的對話框任務(wù)分析(1)提交編輯套餐請求為setmeal.html頁面編輯套餐對話框“確定”按鈕綁定單擊事件,在單擊事件觸發(fā)后提交對話框中的數(shù)據(jù)。(2)接收和處理編輯套餐請求客戶端發(fā)起編輯套餐的請求后,由SetmealController類的edit()方法接收頁面提交的請求,并調(diào)用SetmealService接口的edit()方法編輯套餐。(3)編輯套餐數(shù)據(jù)編輯套餐包括對套餐基本信息的編輯和套餐對檢查組的引用信息的編輯,將原有的套餐對檢查組的引用信息刪除,然后重新添加新的套餐對檢查組的引用信息。(4)提示編輯結(jié)果SetmealController類中的edit()方法將編輯結(jié)果返回setmeal.html頁面,setmeal.html頁面根據(jù)返回結(jié)果提示編輯成功或失敗的信息。2.完成套餐的編輯任務(wù)分析完成套餐編輯的實(shí)現(xiàn)過程任務(wù)實(shí)現(xiàn)在setmeal.html頁面中定義handleUpdate()方法,用于彈出編輯套餐對話框、回顯套餐數(shù)據(jù)。handleUpdate(row){this.imageUrl=null;//清空圖片模型數(shù)據(jù)this.activeName='first';//每次彈出的編輯對話框默認(rèn)顯示基本信息區(qū)this.dialogFormVisible4Edit=true;//編輯對話框顯示//基本信息回顯,發(fā)送Ajax請求查詢套餐基本信息
axios.get("/setmeal/findById.do?id="+row.id).then((res)=>{if(res.data.flag){//為模型數(shù)據(jù)賦值,基于Vue數(shù)據(jù)綁定進(jìn)行回顯this.formData=res.data.data;this.imageUrl="/"+res.data.data.img;}});//發(fā)送Ajax請求,加載檢查組列表,以表格的形式展示到對話框中
axios.get("/checkgroup/findAll.do").then((res)=>{
//省略});}1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框(1)彈出編輯套餐對話框任務(wù)實(shí)現(xiàn)setmeal.html頁面中的“編輯”按鈕綁定單擊事件,并設(shè)置在單擊時(shí)調(diào)用handleUpdate()方法。<el-buttontype="primary"class="mini"
@click="handleUpdate(scope.row)">編輯</el-button>1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框(1)彈出編輯套餐對話框任務(wù)實(shí)現(xiàn)在health_backend子模塊的SetmealController類定義findById()方法,用于接收和處理根據(jù)套餐id查詢套餐基本信息的請求。@RequestMapping("/findById")publicResultfindById(Integerid){try{
Setmealsetmeal=setmealService.findById(id);//服務(wù)調(diào)用成功,返回查詢結(jié)果與查詢成功提示信息returnnewResult(true,MessageConstant.QUERY_SETMEAL_SUCCESS,setmeal);}catch(Exceptione){e.printStackTrace();//服務(wù)調(diào)用失敗,返回查詢失敗提示信息returnnewResult(false,MessageConstant.QUERY_SETMEAL_FAIL);}}(2)實(shí)現(xiàn)查詢套餐控制器1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框任務(wù)實(shí)現(xiàn)在SetmealController類中定義findCheckGroupIdsBySetmealId()方法,用于接收和處理根據(jù)套餐id查詢套餐對檢查組的引用的請求。@RequestMapping("/findCheckGroupIdsBySetmealId")publicResultfindCheckGroupIdsBySetmealId(IntegersetmealId){try{//調(diào)用服務(wù)接口,發(fā)送請求,返回關(guān)聯(lián)的id列表List<Integer>list=setmealService .findCheckGroupIdsBySetmealId(setmealId);//服務(wù)調(diào)用成功,返回查詢結(jié)果與查詢成功提示信息returnnewResult(true, MessageConstant.QUERY_CHECKGROUP_SUCCESS,list);}catch(Exceptione){e.printStackTrace();returnnewResult(false,MessageConstant.QUERY_CHECKGROUP_FAIL);}}1.彈出帶有套餐數(shù)據(jù)的對話框(2)實(shí)現(xiàn)查詢套餐控制器1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框任務(wù)實(shí)現(xiàn)在health_interface子模塊的SetmealService接口定義findById()方法,用于根據(jù)套餐id查詢套餐基本信息;定義findCheckGroupIdsBySetmealId()方法,用于根據(jù)套餐id查詢套餐對檢查組的引用。//根據(jù)套餐id查詢套餐publicSetmealfindById(Integerid);//根據(jù)套餐id查詢套餐對檢查組的引用publicList<Integer>findCheckGroupIdsBySetmealId(IntegersetmealId);(3)創(chuàng)建查詢套餐服務(wù)1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框任務(wù)實(shí)現(xiàn)在health_service_provide子r模塊的SetmealServiceImpl類重寫SetmealService接口的findById()方法和findCheckGroupIdsBySetmealId()方法。//根據(jù)id查詢套餐@OverridepublicSetmealfindById(Integerid){returnsetmealDao.findById(id);//調(diào)用持久層接口}@Override//根據(jù)套餐id查詢與之關(guān)聯(lián)的檢查組idpublicList<Integer>findCheckGroupIdsBySetmealId(IntegersetmealId){returnsetmealDao.findCheckGroupIdsBySetmealId(setmealId);}(4)實(shí)現(xiàn)查詢套餐服務(wù)1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框任務(wù)實(shí)現(xiàn)在health_service_provider子模塊的SetmealDao接口中定義findById()方法,用于根據(jù)套餐id查詢套餐基本信息;定義findCheckGroupIdsBySetmealId()方法,用于根據(jù)套餐id查詢套餐對檢查組的引用。//根據(jù)套餐id查詢套餐publicSetmealfindById(Integerid);//根據(jù)套餐id查詢套餐對檢查組的引用publicList<Integer>findCheckGroupIdsBySetmealId(IntegersetmealId);(5)實(shí)現(xiàn)持久層查詢套餐1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框任務(wù)實(shí)現(xiàn)在health_service_provider子模塊的SetmealDao.xml映射文件中使用<select>元素映射查詢語句,分別根據(jù)套餐id查詢套餐基本信息、根據(jù)套餐id查詢套餐對檢查組的引用。<!--根據(jù)id查詢套餐--><selectid="findById"parameterType="int"
resultType="com.itheima.pojo.Setmeal">select*fromt_setmealwhereid=#{id}</select><!--根據(jù)套餐id查詢與之關(guān)聯(lián)的檢查組id--><selectid="findCheckGroupIdsBySetmealId" parameterType="int"resultType="int">selectcheckgroup_idfromt_setmeal_checkgroupwheresetmeal_id=#{setmeal_id}</select>(5)實(shí)現(xiàn)持久層查詢套餐1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框任務(wù)實(shí)現(xiàn)依次啟動(dòng)ZooKeeper服務(wù)、health_service_provider和health_backend。在瀏覽器中訪問http://localhost:82/pages/setmeal.html。(6)測試彈出帶有套餐數(shù)據(jù)的編輯套餐對話框1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框任務(wù)實(shí)現(xiàn)以編輯套餐編碼0005的套餐為例,單擊套餐右側(cè)的“編輯”按鈕,彈出編輯套餐對話框。(6)測試彈出帶有套餐數(shù)據(jù)的編輯套餐對話框1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框任務(wù)實(shí)現(xiàn)在編輯套餐對話框中默認(rèn)顯示的是該套餐的基本信息,單擊“檢查組信息”,跳轉(zhuǎn)到檢查組信息選項(xiàng)卡。(6)測試彈出帶有套餐數(shù)據(jù)的編輯套餐對話框1.彈出帶有套餐數(shù)據(jù)的編輯套餐對話框任務(wù)實(shí)現(xiàn)為編輯套餐對話框中的“取消”和“確定”按鈕綁定單擊事件,并設(shè)置單擊時(shí)要執(zhí)行的操作。<divslot="footer"class="dialog-footer"><el-button@click="dialogFormVisible4Edit=false">取消</el-button><el-buttontype="primary"@click="handleEdit()">確定</el-button></div>2.完成套餐的編輯(1)提交編輯套餐請求任務(wù)實(shí)現(xiàn)handleEdit(){axios.post("/setmeal/edit.do?checkgroupIds="+this.checkgroupIds,this.formData).then((res)=>{if(res.data.flag){this.dialogFormVisible4Edit=false;//隱藏編輯對話框this.$message({type:'success',message:res.data.message});
this.findPage();//執(zhí)行分頁查詢}else{this.$message.error(res.data.message);}});}2.完成套餐的編輯(1)提交編輯套餐請求在setmeal.html頁面中定義handleEdit()方法,用于提交套餐請求。任務(wù)實(shí)現(xiàn)在health_backend子模塊的SetmealController類定義edit()方法,用于接收和處理編輯套餐數(shù)據(jù)的請求。//編輯套餐@RequestMapping("/edit")publicResultedit(@RequestBodySetmealsetmeal,Integer[]checkgroupIds){try{
setmealService.edit(setmeal,checkgroupIds);//調(diào)用服務(wù)edit()發(fā)送請求//調(diào)用服務(wù)成功,返回編輯成功提示信息returnnewResult(true,MessageConstant.EDIT_SETMEAL_SUCCESS);}catch(Exceptione){e.printStackTrace();//調(diào)用服務(wù)失敗,返回編輯失敗提示信息returnnewResult(false,MessageConstant.EDIT_SETMEAL_FAIL);}}2.完成套餐的編輯(2)實(shí)現(xiàn)編輯套餐控制器任務(wù)實(shí)現(xiàn)在health_interface子模塊的SetmealService接口中定義edit()方法,用于編輯套餐。//編輯套餐publicvoidedit(Setmealsetmeal,Integer[]checkgroupIds);2.完成套餐的編輯(3)創(chuàng)建編輯套餐服務(wù)任務(wù)實(shí)現(xiàn)在health_service_provider子模塊的SetmealServiceImpl類中重寫SetmealService接口的edit()方法,用于編輯套餐。//編輯套餐publicvoidedit(Setmealsetmeal,Integer[]checkgroupIds){//編輯套餐基本信息
setmealDao.edit(setmeal);//刪除套餐與檢查組關(guān)聯(lián)關(guān)系setmealDao.deleteAssociation(setmeal.getId());//重新設(shè)置套餐對檢查組的引用this.setSetmealAndCheckGroup(setmeal.getId(),checkgroupIds);}2.完成套餐的編輯(4)實(shí)現(xiàn)編輯套餐服務(wù)任務(wù)實(shí)現(xiàn)在health_service_provider子模塊的SetmealDao接口中定義edit()方法和deleteAssociation()方法。//編輯套餐基本信息publicvoidedit(Setmealsetmeal);//刪除套餐對檢查組的引用publicvoiddeleteAssociation(Integerid);2.完成套餐的編輯(5)實(shí)現(xiàn)持久層編輯套餐任務(wù)實(shí)現(xiàn)在health_service_provider模塊的SetmealDao.xml映射文件中使用<update>標(biāo)簽映射修改語句編輯套餐基本信息。<!--編輯檢查組基本信息--><updateid="edit"parameterType="com.itheima.pojo.Setmeal">UPDATE
t_setmeal<set><iftest="name!=null">name=#{name},</if>
省略其他字段</set>WHERE
id=#{id}</update>2.完成套餐的編輯(5)實(shí)現(xiàn)持久層編輯套餐任務(wù)實(shí)現(xiàn)在SetmealDao.xml映射文件中使用<delete>元素映射刪除語句,刪除套餐對檢查組的引用。<!--清理套餐和檢查組的關(guān)聯(lián)關(guān)系--><deleteid="deleteAssociation"parameterType="int">DELETEFROM
t_setmeal_checkgroupWHERE
setmeal_id=#{setmeal_id}</delete>2.完成套餐的編輯(5)實(shí)現(xiàn)持久層編輯套餐任務(wù)實(shí)現(xiàn)2.完成套餐的編輯(6)測試編輯套餐依次啟動(dòng)Zookeeper服務(wù)、health_service_provider和health_backend。在瀏覽器中訪問http://localhost:82/pages/setmeal.html。在編輯套餐對話框中,將“適用年齡”修改為“18-56”,將“說明”修改為“需要空腹”。任務(wù)實(shí)現(xiàn)單擊“確定”按鈕,提交套餐數(shù)據(jù),頁面會(huì)提示“編輯套餐失敗”或“編輯套餐成功”。2.完成套餐的編輯(6)測試編輯套餐刪除套餐4-4任務(wù)描述套餐管理頁面每個(gè)套餐右側(cè)都有一個(gè)“刪除”按鈕,單擊“刪除”按鈕提交刪除套餐的請求。為了防止誤刪數(shù)據(jù)的情況發(fā)生,在單擊“刪除”按鈕后彈出提示對話框,讓用戶確認(rèn)
溫馨提示
- 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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版拆遷安置房產(chǎn)權(quán)分割及交易協(xié)議4篇
- 專業(yè)平面視覺創(chuàng)作協(xié)議版
- 2025年度文化展覽場地租賃保證金三方執(zhí)行協(xié)議4篇
- 專業(yè)樹木銷售協(xié)議2024年版細(xì)化范本版A版
- 2025年度高端醫(yī)療設(shè)備采購合同模板4篇
- 2025年度拆遷項(xiàng)目資金監(jiān)管與居間服務(wù)協(xié)議4篇
- 二零二五年度農(nóng)家樂合伙人合作協(xié)議3篇
- 2025年廠區(qū)公共區(qū)域清潔與物業(yè)管理合作協(xié)議范本4篇
- 2025年度商業(yè)綜合體室內(nèi)外裝修一體化合同4篇
- 專業(yè)羽毛球場租借合同(2024年)版B版
- 2023社會(huì)責(zé)任報(bào)告培訓(xùn)講稿
- 2023核電廠常規(guī)島及輔助配套設(shè)施建設(shè)施工技術(shù)規(guī)范 第8部分 保溫及油漆
- 2025年蛇年春聯(lián)帶橫批-蛇年對聯(lián)大全新春對聯(lián)集錦
- 表B. 0 .11工程款支付報(bào)審表
- 警務(wù)航空無人機(jī)考試題庫及答案
- 空氣自動(dòng)站儀器運(yùn)營維護(hù)項(xiàng)目操作說明以及簡單故障處理
- 新生兒窒息復(fù)蘇正壓通氣課件
- 法律顧問投標(biāo)書
- 班主任培訓(xùn)簡報(bào)4篇(一)
- 成都市數(shù)學(xué)八年級(jí)上冊期末試卷含答案
- T-CHSA 020-2023 上頜骨缺損手術(shù)功能修復(fù)重建的專家共識(shí)
評(píng)論
0/150
提交評(píng)論