智聯-我的代辦頁面增加欄位
(智聯)我的待辦 ---> 查詢條件加上新欄位 建立人省份
寫本篇文章的目的是記錄一下我真實業務下的第一個需求,其次是為了培養良好的實現需求的思路
由於後端程式碼不能外傳,故只能自己偷偷學習,筆記上面不能展示
注意:本篇文章的需求實現並不難,如果是學程式碼技術不建議看
需求分析
對智聯-我的工單中的我的代辦工單的最佳化
新增建立人省份欄位
思路:
(1) 在前端新增一個輸入下拉框,這個下拉框的內容和省份內容一致就可以。
- 在點選查詢時,需要根據建立人省份去查詢我需要處理的工單(待辦工單)
- 修改後端list介面的查詢條件
(2)工單不同狀態的數量統計需要修改
- 在進行數量統計時,也要對建立人省份欄位進行判斷
- 修改queryCount介面的查詢條件
(3)重置按鈕
- 在我們點選重置時,新新增的這個欄位需要置為null
- 修改前端資料
具體實現
新增前端按鈕
根據系統中的選單管理找到代辦的index元件(你也可以在router.index.js)
直接複製前面的item項然後直接複用
el-row 表示行
el-col 表示列
el-form-item 一個表單項
el-select 表示這裡是一個可選的輸入框 v-model 繫結物件中的資料
el-option 表示el-select中的選項 裡面使用v-for表示迴圈
<el-form :model = "formData" label-width="100px" class="form-button">
<el-form>是 Element UI 庫中的一個表單元件,它用於建立和管理表單。
:model="formData" 是Vue.js的一個動態屬性(使用冒號字首) ,它將表單的值繫結到Vue例項物件formData上。這意味著表單中的所有的輸入元件(input、select、checkbox等)都會自動與formData物件中的屬性同步。當使用者在表單中輸入內容時,formData物件中的資料會被自動更新。
label-width="100px" (標籤寬度)用於佈局美化
class="form-button" 給<el-form>標籤定義類名,css可以透過類名進行修飾美化
不同狀態的工單數量統計
在queryPro中存在queryCount方法
在這個方法中有四個狀態下的數量的統計,但是後面請求的都是後端的同一個介面
在forData中新增新的欄位屬性createPro
在進行list和queryCount的介面中都需要該欄位
formData: {
creatorPro: null
}
這裡後端的邏輯就不寫了,主要是思路的一個分析,這個需求很簡單
在原有的基礎上新增一個if標籤,然後進行數量統計的判斷
查詢按鈕
和上面的介面實現一樣,在原有的基礎上擴充一個欄位,只需要在後端sql的 where 後面加一個條件
重置按鈕
當我們點選重置按鈕時就會觸發resetFormData方法將 所有的屬性 置為null ,所以這裡需要新增新的欄位,否則重置對新的欄位沒有作用
隨後呼叫queryPro()重新查詢資料
resetFormData() {
this.formData = {
creatorPro: null
}
this.queryPro()
}
後臺-工單受理組人員姓名的模糊查詢
記錄該需求是因為在該需求在測試時發現了程式碼bug,並且該bug很有意思
本文用於學習實際專案bug的排查思路,順帶學一點PageHelper知識!!!
需求分析
將姓名欄位的精準查詢最佳化為模糊查詢
- 在後端SQL查詢條件where處將姓名欄位的判斷變成模糊查詢 --- 入門級別
程式碼Bug分析
原始程式碼產生分頁相關的bug
- 如果有比較好的排查問題的思路,可以很快的找到問題 ---- 中簡單級別
問題展示
在無條件的情況下查詢出所有的新增成員,共8000多條
查詢 "運維001" 無資料回顯(最佳化模糊查詢前後均存在這個bug)
這個在知道時分頁的原因之後,發現只有第一頁的資料可以查詢到,後面的所有的資料均無法找到
問題排查
思路:
後端查詢時,根據name查詢的邏輯有問題?
- 這裡部分資料可以查詢到的就說明name查詢邏輯沒有問題
- 這裡我去分析了後端的程式碼發現是沒有問題的,所以問題不是在這裡
剛開始並不清楚只有第一頁能查到,所以就想到為什麼只有一部分資料不可以查詢,難道是因為某些 使用者物件資料 是無法被查到的?
這個仔細一想就不可能。
- 因為當時認為只有一部分資料不可以查詢,所以我就想可能是資料的問題?
- 然後在debug的時候看到sql在查詢的時候有一個 not in ("id","id","id") 然後就印證了自己的這個想法
- 但是後續新增一個人員後發現這個id多了一個正是新增的那個人的id,發現這裡的這個ids是 已新增人員(剛熟悉這個專案,業務不熟悉,然後前後端專案中又沒有excludeids的註釋),所以並不是資料的問題,所以問題不在這裡
初始思路就是這樣的,但是在debug的過程中發現問題都不是這些。
debug發現資料獲取都是沒有問題的
這裡查詢到一個資料,說明後端是存在這個資料
但是這裡沒有查到資料
說明問題肯定是出在這裡!!!
然後我去控制檯看了sql程式碼
SELECT p.id, p.province, p.city, p.employee_code, p.employee_name, p.org_id, (SELECT INSERT(p.employee_phone, 4, 4, '****')) AS employee_phone, p.type, p.state, p.isValid, p.creator_id, p.creator, p.create_time, p.update_time FROM employee_pro_10096 p WHERE 1 = 1 AND p.employee_name LIKE concat('%', '運維01', '%') LIMIT 10, 10;
拉到navicat中執行,發現確實沒有任何資料
發現limit 引數起始資料直接從第10條開始查詢?
如果查詢的資料沒有10條,那查詢的結果集就會為空
所以這裡的分頁的引數計算肯定是有問題的
這裡的計算是有問題的!!!
比如:當我們在前端介面第二頁進行查詢 "運維01" ,那麼傳到後端的pageNo = 2 ,那麼這裡計算的startRow = (2 - 1) * 10 這樣就導致了問題。
然後補齊思路
繼續測試:
這裡劉的模糊查詢出來有280條資料
然後我這裡去30頁查詢,出現了bug
debug解決:
這裡發現我們的startRow成功設定,但是我們的pageNo並沒有成功設定(記得前端接收pageNo)
所以將if判斷從裡面移出來,同時也避免了其他程式碼複用這個類時造成意外的衝突!!!
修改程式碼如下:
繼續測試:
發現忘記思考一個點,就是當我們的當前頁數和itemCount相同時
比如說當前頁為29頁,if條件就會變成 (29-1)*10 > 280
- 所以修改判斷條件為 >=
最後測試:
站在使用者的角度去思考!!!
我們去搜尋某個名字的時候,不需要 當前頁在第幾頁就把資料顯示到第幾頁,而是預設第一頁就可以了(這個你可以試試,作為使用者正常的邏輯思維是這樣的)
所以當(pageNo * pageSize) > itemCount 直接將頁碼置為1,防止出現最開始討論的問題
到這裡需求及bug就完成了。
這裡因為專案耦合性太強了,所以這裡沒法使用PageHelper。這裡建議學一下pageHelper的原理,看看和這個專案中的邏輯的差別,學習一下。