management_system
簡介
這是一個基於koa2
的後台管理系統
使用jQuery
作為前端JS框架使用bootstrap
作為CSS框架使用pug
/ jade
和handlebars
作為HTML頁面模板使用PostgreSql
存儲業務數據使用mongodb
存儲session
使用Bookshelf
+ Knex
作為ORM
和Query Builder
使用Sentry
作為錯誤訊息的收集回饋平台採用AJAX
處理前端請求使用CronJob
庫完成定時任務的執行
目錄結構和babel的配置參考了https://github.com/17koa/koa-demo
原始連結似乎已經被刪掉了,這個是我fork過來的版本https://github.com/liuyueyi1995/koa2-demo
網站的前端程式碼來自我之前的一個專案https://github.com/liuyueyi1995/oa
基本任務
- A 後台管理員的登入註冊
- B 使用者資訊管理
- C 使用者角色管理
- D 機構管理
- E 專案管理
- F 透過後端分頁+
AJAX
顯示查詢和搜尋得到的內容 - G 臨時使用者的創建與臨時角色的分配與回收
- H 日誌管理
完成度
- 基本的MVC結構已經完成;
- 任務A已全部完成,包括註冊、登入、session讀寫;
- 任務B已全部完成,包括使用者資訊查詢、模糊搜尋、新增、刪除、修改基本資訊、修改密碼;
- 任務C已全部完成,包括多表查詢、模糊搜尋、級聯下拉選單的處理、資訊新增和刪除;
- 任務D已全部完成,包括機構資訊查詢、模糊搜尋、新增、刪除、修改;
- 任務E已全部完成,包括項目資訊查詢、模糊搜尋、新增、刪除、修改;
- 任務F已全部完成,透過判斷分頁按鈕點擊事件觸發時搜尋框是否有內容,來決定後台傳回的結果集;
- 任務G已全部完成,透過將使用者區分為內部和外部,採用不同的密碼產生方式,為角色增加過期時間的屬性,後台定期清理過期的角色資訊;
- 任務G已全部完成,包括日誌檢視和模糊搜尋;
- 表單的呈現形式做了改良,下拉式選單已經修改完成、加入了日期控制項、對於布林值輸入採用radio的形式;
- 已經關聯了使用者登入及資料管理兩部分功能;
- 已經完成外部角色與內部角色的區分,已經完成角色的截止日期設定;
TODOs
- 對於日期、數字、布林值的查詢還有待完善(例如:timestamp、boolean);
- 對於使用者輸入的校驗還有待完善(例如:email、phone);
- 提高程式碼復用的程度;
Focus
repo中已經將包含敏感資訊的config.js
檔案刪除掉,使用時需要額外新增:
var config = {
database: '',
username: '',
password: '',
host: '',
port:
};
module.exports = config;
ISSUEs
- 級聯選單,有bug,初始時,在沒有改變
type
的情況下, site
的列表出不來。- 已解決。
- 應該是
onchange
的問題, - 透過給
type
下拉選單增加一個預設的空值,強制使用者去改變它。
- 修改資料庫之後,
updated_at
值沒有變化。- 已解決。
- 在
model
定義的時候加上hasTimestamps:true
即可。
- 修改資料庫之後,列表的順序會被打亂。
- 已解決。
- 在資料庫傳回搜尋結果前使用
orderBy
進行排序。
- 角色管理頁,site值為空白時,偶爾會出現新增失敗的狀況。
- 已解決。
- 前端
null
傳回後端時變成了空字串,與外鍵的integer
型別衝突。
- 分頁之後,如果修改了後面的內容,修改成功之後會跳到第一頁。
- 分頁之後,搜尋結果如果有多頁內容,點選第二頁,會傳回原始結果的第二頁。
- 已解決。
- 因為現在只有一個分頁的
AJAX
處理,如果要讓搜尋後的結果可以分頁展示,就需要再增加一個狀態, - 在原有分頁基礎上增加判斷,
- 如果此時搜尋框內有內容,則會帶著這個內容去查詢資料庫,並回傳對應頁的內容;
- 如果此時搜尋框為空,則傳回原始資料對應頁的內容。
- 搜尋之後,分頁元件的頁面數量不正確,例如原始結果有5頁,但是搜尋結果只有2頁,但仍會顯示5個頁碼按鈕。
- 多次搜尋時,分頁元件的頁數不正確,例如第一次搜尋結果有2頁,第二次搜尋結果有3頁,但仍只顯示2個頁碼按鈕。
- 已解決。
- 即時取得搜尋框的內容,當其內容變為空時,重新整理頁面。
- 使用
handlebars
模板的時候,時間戳解析不正確。 - 未登錄的情況下,透過修改URL會跳過登錄,直接操作資料庫。
- 已解決。
- 在每個
get
請求回傳之前,加入session
的判斷, session
為空則跳到login
頁。
- 針對內部使用者的刪除需要join,pgsql的delete只支援
using
,bookshelf不支援using
。 - date/time field value out of range
- 已解決。
- 在本地的測試資料庫和阿里雲的資料庫雖然都是pgsql9.4,但是審查機制不同,
- 阿里雲的日期判別似乎不能出現上下午(AM/PM)
- 所以給
Date
類別增加了format
方法,用於格式化日期。
- 搜尋結果和全部結果之間的切換問題。
- 已解決。
- 最早是採用即時監聽,當搜尋框為空時,刷新頁面,但是在有的瀏覽器和作業系統上無效;
- 因此,改用banner中帶連結的方法,給一個從搜尋結果到全部結果的連結。
- 長日期格式佔用頁面太多。
- 如果後台的資料庫操作報錯,前端得不到相關資訊的回饋。
- 已解決。
- 後端增加then().catch()區塊,做錯誤判斷。
- 下一步透過分析具體的錯誤碼,將詳細資訊告知前端。
- 新增角色時,重名用戶無法區分。
- 已解決。
- 透過在使用者名稱之後註明其郵箱,來區分重名使用者。