首先實現顯示圖書庫存?
1?
if條件標簽里的test=""要和實體類的屬性名保持一致?
否則會報找不到get方法的錯誤
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'stock' in 'class
2
后端已經把bookStock傳到前端了,但是顯示不出來
?因為傳入的是整個form表單,所以前端標簽的form.bookStock和后端對象的屬性名應保持一致
我的Book里是bookStock屬性
比如?
</el-form-item><el-form-item label="圖書庫存" prop="bookStock"><el-input v-model="form.bookStock" placeholder="請輸入圖書庫存"/>
</el-form-item>
和
<el-table-column label="圖書庫存" align="center" prop="bookStock"/>
3
庫存修改不到0
<if test="bookStock != null and bookStock != ''">stock = #{bookStock},</if>
這樣修改的時候在輸入框輸入0時點擊修改,會顯示修改成功但是庫存數據在數據庫和前端顯示都沒有被修改?
<if test="bookStock != null">stock = #{bookStock},</if>
去掉判斷空的條件即可?
實現狀態
1.
使用但沒有導入數據字典,導致頁面加載空白
導入數據字典即可
export default {name: "Book",dicts: ['sys_normal_disable'],...
}
2.
前后端數據不一致
當庫存為0的時候我想直接加一個js代碼,判斷如果庫存為0則把狀態改為1(禁用狀態)
//當庫存為0時狀態變為不可借閱processBookStatus(book) {if (book.bookStock === 0) {book.status = "1"; return false; }return true; },
// 批量處理圖書列表processBookList(bookList) {bookList.forEach(book => this.processBookStatus(book));return bookList;},
已經實現了當庫存設置為0時可以看到前端頁面是不可借閱狀態
但數據庫中還是可借用狀態,導致查詢的時候選擇可借閱書籍會查到不可借閱書籍
為了前后端一致要新增sql語句作為判斷條件?
update t_book set status = 1 where stock =0
我有兩種思路:
1.直接修改后端,在后端執行Bookmapper.selectBookList的時候執行一次sql,這樣在每次查詢前都能把庫存為0書籍改為不可借閱狀態
2.先改前端,寫一個js函數,當bookStock為0的時候,設置status為1,在函數里通過url把請求傳給后端讓后端執行sql語句保證數據一致
最后選擇兩種都用,用第一種的思路修改后端,第二種方式修改前端,這樣同時保證數據一致性和用戶體驗
在實現1有在查詢時動態計算狀態這種處理方法就是在執行selectBookVo的時候多加了判斷
<sql id="selectBookVo">SELECTa.id aid,a.name aname,author,a.num anum,price,b.name bname,type_id,stock,CASEWHEN stock = 0 THEN 1 -- 庫存為0時返回狀態1(不可借閱)ELSE a.status -- 否則返回原始狀態END AS status -- 重命名為status,前端統一使用該字段FROM t_book aLEFT JOIN t_book_type b ON a.type_id = b.id
</sql>
還有一個問題未解決,就是當我編輯圖書庫存為0后,立即點擊查詢可借圖書,還是會查到不可被借的圖書,刷新一下就正常了。