清大學生會首個線上投票系統上線啦~
2020 年新型冠狀病毒全球大流行,為了減少人與人之間的接觸、保持社交距離,選委會決定將過往實體投票的選舉改為線上選舉,因此委託學生會資訊部開發,並且順利完成第 29 屆學生會正副會長、學生議會學生議員之選舉。
此專案歡迎各界高手幫忙開發貢獻,也歡迎其他學生自治組織使用這套投票系統,如果有好點子、改善建議也都相當歡迎提出 issue。
npm install
cp .env.dev .env
npm run dev
- 在 README/postman 中有 API 測試範本
- 記得改
service_token
,產生方式如下
- 記得改
- 如何關閉 OAuth,啟用學號模擬?
cp .env.dev
- 將 For development 中的註解拿掉
- 在網頁中登入後,開啟瀏覽器命令列輸入
jwtToken
即可獲得
- 如何從本機產生登入 JWT Token?
- 先透過
addUser
API 建立使用者,並取得_id
與student_id
- 打開 Node.js CLI 輸入以下程式碼產生 Token
- 將 Token 直接貼到瀏覽器 cookie 中
service_token
欄位
- 先透過
auth = require('./libs/ccxpAuth.js');
user = {"_id": "5ed699efdc02ue515d79627b","student_id": "108060001"}
auth.obtainServiceToken('108060001', user);
mongorestore --drop --host localhost --port 27017 -uroot -ppassword --db voting_sa README/dump
mongo
use DATABASE_NAME
db.TABLE_NAME.update({student_id:'{YOUR_STUDENTID}'}, {$set: {"remark":"admin"}})
-
透過 Postman 新增管理員(addUser)
{ "student_id": "108062001", }
加上 admin 權限
{ "student_id": "108062001", "remark": "admin" }
-
透過 Postman 新增活動(addActivity)
{ "name": "第 30 屆學生會正副會長", "type": "candidate", "rule": "choose_all", "open_from": "2020/06/28 12:00:00", "open_to": "2020/06/30 12:00:00" }
{ "name": "第 30 屆學生議員", "type": "candidate", "rule": "choose_all", "open_from": "2020/06/28 12:00:00", "open_to": "2020/06/30 12:00:00" }
會返回類似於下面的資訊,請把
_id
記下來。{ "users": [], "options": [], "_id": "60dea866076f71776b9da13b", "name": "第 30 屆學生會正副會長", "type": "candidate", "rule": "choose_all", "created_at": "2021-07-02T05:47:18.861Z", "updated_at": "2021-07-02T05:47:18.861Z", "open_from": "2020-06-28T04:00:00.000Z", "open_to": "2020-06-30T04:00:00.000Z", "__v": 0 }
{ "users": [], "options": [], "_id": "60dea866076f71776b9da13c", "name": "第 30 屆學生議員", "type": "candidate", "rule": "choose_all", "created_at": "2021-07-02T05:47:18.861Z", "updated_at": "2021-07-02T05:47:18.861Z", "open_from": "2020-06-28T04:00:00.000Z", "open_to": "2020-06-30T04:00:00.000Z", "__v": 0 }
-
新增選舉人(addOption)
記得把
activity_id
、avatar_url
換掉- 會長參選人
{ "activity_id": "60dea866076f71776b9da13b", "type": "candidate", "candidate": { "name": "王小明", "department": "人文社會學院學士班 20 級", "college": "人文社會學院", "avatar_url": "https://imgur.com/xxxxx.jpg", "personal_experiences": [ "國立清華大學105學年度下學期-書卷獎" ], "political_opinions": [ "1. 履行會長之職責。", "2. 持續關注學生感興趣的校內議題。" ] }, "vice1": { "personal_experiences": [ "國立清華大學轉學生聯誼會-活動" ], "name": "陳小明", "department": "科技管理學院學士班 22 級", "college": "科技管理學院", "avatar_url": "https://imgur.com/xxxxx.jpg" }, "vice2": { "personal_experiences": [ "國立清華大學學生會第29屆秘書部-部員" ], "name": "劉曉明", "department": "教育與學習科技學系 24 級", "college": "教育學院", "avatar_url": "https://imgur.com/xxxxx.jpg" } }
- 議員參選人
{ "activity_id": "60dea866076f71776b9da13c", "type": "candidate", "candidate": { "name": "陳小明", "department": "科技管理學院學士班 23 級", "college": "科技管理學院", "avatar_url": "https://imgur.com/xxxxxx.jpg", "personal_experiences": [ "國立清華大學第 28 屆學生會秘書部部員", "國立清華大學第 29 屆學生議會秘書長" ], "political_opinions": [ "1. 履行議員之職責。", "2. 持續關注學生感興趣的校內議題。" ] } }
-
到後台檢查名稱、日期(UTC+0)是否正確
-
修改
libs/全校在學學生資料.csv
,這是可以投票的學生名單
mongodump -h 127.0.0.1 -d DB_NAME -o ./mongo-backup
mongorestore -h 127.0.0.1 -d DB_NAME --directoryperdb DB_FILE
- 新增編輯投票人名單 UI
- 新增選舉活動、候選人增修查改 UI
- 將介面「我不投給他」改成「反對」
- 介面增加一人多票的說明
- 候選人增加一欄「參選執行長意願」
- 完善 README.md
- 加入登入跳轉到原先頁面
- 加入 debug、log
- 加入後台投票統計圓餅圖
- 加入自動化測試
- 修正投票按鈕點選範圍
- 重構前端程式碼