Compare commits

...

2 Commits

Author SHA1 Message Date
6f4ad68cab
fix: 移除不需要的欄位 2024-09-01 19:54:26 +08:00
4d1d4c1e79
feat: download uploaded files 2024-09-01 19:45:43 +08:00
7 changed files with 78 additions and 20 deletions

View File

@ -18,6 +18,7 @@ router.get("/", async function(req, res) {
item_form.subsidy, item_form.subsidy,
scholarship_application.application_date, scholarship_application.application_date,
scholarship_application.student_id, scholarship_application.student_id,
scholarship_application.supplement_filename,
student.student_name, student.student_name,
audit_form.committee_review, audit_form.committee_review,
advisor.advisor_name, advisor.advisor_name,

34
api/download.js Normal file
View File

@ -0,0 +1,34 @@
const path = require('path');
const router = require('express').Router();
const fs = require('fs');
router.get("/", async function(req, res) {
const filename = req.query.filename;
console.log(filename);
const filePath = path.join('uploads', filename);
console.log(filePath);
if (filename) {
fs.access(filePath, fs.constants.F_OK, (err) => {
if (err) {
console.error('檔案不存在:', err);
res.status(404).send('檔案不存在');
} else {
res.download(filePath, (err) => {
if (err) {
console.error('檔案下載失敗:', err);
res.status(500).send('檔案下載失敗');
} else {
console.log("downloaded");
}
});
}
});
} else {
res.status(400).send('缺少 filename 參數');
}
});
module.exports = router;

View File

@ -43,10 +43,13 @@ router.post("/", upload.single('file'), async function(req, res) {
console.log(req.body); console.log(req.body);
if (req.file){ if (req.file){
console.log("Upload file: " + req.file.originalname); console.log("Upload file: " + req.file.filename);
var upload_file_name = req.file.filename;
} else { } else {
console.log("No file"); console.log("No file");
var upload_file_name = "";
} }
console.log(upload_file_name);
// data // data
const apply_infos_str = req.body.apply_infos; // get data from request const apply_infos_str = req.body.apply_infos; // get data from request
const application_units_str = req.body.application_units; const application_units_str = req.body.application_units;
@ -71,7 +74,7 @@ router.post("/", upload.single('file'), async function(req, res) {
} }
// insert data into table : scholarship_application // insert data into table : scholarship_application
const scholarship_application_info = await conn.batch("INSERT INTO scholarship_application(`application_date`, `student_id`) VALUES(?, ?);", [time, student_id]); const scholarship_application_info = await conn.batch("INSERT INTO scholarship_application(`application_date`, `student_id`, `supplement_filename`) VALUES(?, ?, ?);", [time, student_id, upload_file_name ]);
const scholarship_application_id = scholarship_application_info.insertId; // get the application_id of previous record const scholarship_application_id = scholarship_application_info.insertId; // get the application_id of previous record
// 這邊你們要再改 // 這邊你們要再改

View File

@ -25,6 +25,8 @@ app.use("/api/login", require("./api/login.js"));
app.use("/api/example", require("./api/example.js")); app.use("/api/example", require("./api/example.js"));
app.use("/api/main", require("./api/main.js")); app.use("/api/main", require("./api/main.js"));
app.use("/api/audit", require("./api/audit.js")); app.use("/api/audit", require("./api/audit.js"));
app.use("/api/download", require("./api/download.js"));
// // static files // // static files
app.use('/js', express.static('./js')); app.use('/js', express.static('./js'));
app.use('/css', express.static('./css')); app.use('/css', express.static('./css'));

View File

@ -1,6 +1,6 @@
let item_info_len = 0; let item_info_len = 0;
let all_audit_data = null; var all_audit_data = null;
let current_review_apllication_id; let current_review_apllication_id;
const application_detail_init_table_content = document.getElementById("application_detail").innerHTML; const application_detail_init_table_content = document.getElementById("application_detail").innerHTML;
let assistant_s_num; let assistant_s_num;
@ -31,12 +31,11 @@ async function getAuditedItemInfo() {
} }
} }
function combineSameAppData(data) { async function combineSameAppData(data) {
// combine the same application id data in a same record // combine the same application id data in a same record
let n_data = {}; let n_data = {};
let next_record = true; let next_record = true;
console.log("data:"); console.log('data:', data);
console.log(data);
for (let i = 0; i < data.length; i++) { for (let i = 0; i < data.length; i++) {
if (i > 0 && data[i].application_id != data[i-1].application_id) { if (i > 0 && data[i].application_id != data[i-1].application_id) {
// this record is different from the last // this record is different from the last
@ -62,6 +61,7 @@ function combineSameAppData(data) {
n_data[data[i].application_id].application_units = [data[i].application_unit]; n_data[data[i].application_id].application_units = [data[i].application_unit];
n_data[data[i].application_id].item_contents = [data[i].item_content]; n_data[data[i].application_id].item_contents = [data[i].item_content];
n_data[data[i].application_id].subsidys = [data[i].subsidy]; n_data[data[i].application_id].subsidys = [data[i].subsidy];
n_data[data[i].application_id].supplement_filename = [data[i].supplement_filename];
} }
else { else {
n_data[data[i].application_id].application_units.push(data[i].application_unit); n_data[data[i].application_id].application_units.push(data[i].application_unit);
@ -69,11 +69,13 @@ function combineSameAppData(data) {
n_data[data[i].application_id].subsidys.push(data[i].subsidy); n_data[data[i].application_id].subsidys.push(data[i].subsidy);
} }
} }
console.log("SameAPPData here");
console.log('n_data: ' , n_data);
all_audit_data = n_data; all_audit_data = n_data;
return n_data; return n_data;
} }
function auditCase(application_id) { async function auditCase(application_id) {
console.log(`set application_id = ${application_id}`); console.log(`set application_id = ${application_id}`);
current_review_apllication_id = application_id; current_review_apllication_id = application_id;
@ -81,6 +83,9 @@ function auditCase(application_id) {
const table_id = "application_detail"; const table_id = "application_detail";
document.getElementById(table_id).innerHTML = application_detail_init_table_content; document.getElementById(table_id).innerHTML = application_detail_init_table_content;
let table_content = document.getElementById(table_id).innerHTML; let table_content = document.getElementById(table_id).innerHTML;
if (all_audit_data == null) {
console.log("ERROR HERE");
}
const data = all_audit_data[application_id]; const data = all_audit_data[application_id];
console.log(all_audit_data); console.log(all_audit_data);
console.log(data); console.log(data);
@ -104,14 +109,24 @@ function auditCase(application_id) {
document.getElementById(table_id).innerHTML = table_content; document.getElementById(table_id).innerHTML = table_content;
// add simple info // add simple info
document.getElementById("application_info").innerHTML = let inner_html =
` `
申請編號${data.application_id} <br/> 申請編號${data.application_id} <br/>
申請日期${data.application_date} <br/> 申請日期${data.application_date} <br/>
申請人姓名${data.student_name} <br/> 申請人姓名${data.student_name} <br/>
申請人學號${data.student_id} <br/> 申請人學號${data.student_id} <br/>
未獲補助證明檔案:
`;
if (data.supplement_filename != '') {
inner_html += `${data.supplement_filename} <button><a href='/api/download?filename=${data.supplement_filename}'>下載</a></button>`
} else {
inner_html += "無";
}
inner_html +=
`<br>
申請內容 申請內容
`; `;
document.getElementById("application_info").innerHTML = inner_html;
console.log(); console.log();
} }
@ -119,7 +134,8 @@ function auditCase(application_id) {
async function putDataInTable(table_id) { async function putDataInTable(table_id) {
// get data // get data
const result = await getItemInfo(); const result = await getItemInfo();
const data = combineSameAppData(result.data); console.log('intable');
const data = await combineSameAppData(result.data);
const suc = result.success; const suc = result.success;
if (suc && data != null && table_id != null) { if (suc && data != null && table_id != null) {
// insert data into table // insert data into table
@ -155,7 +171,8 @@ async function putDataInTable(table_id) {
async function putDataInAuditedTable(table_id) { async function putDataInAuditedTable(table_id) {
// get data // get data
const result = await getAuditedItemInfo(); const result = await getAuditedItemInfo();
const data = combineSameAppData(result.data); console.log('audit_table');
const data = await combineSameAppData(result.data);
const suc = result.success; const suc = result.success;
if (suc && data != null && table_id != null) { if (suc && data != null && table_id != null) {
// insert data into table // insert data into table
@ -335,6 +352,7 @@ async function sendReviewResult() {
const result = await axios.post("/api/audit", data); const result = await axios.post("/api/audit", data);
if (result.data.suc) { if (result.data.suc) {
alert("審核成功!"); alert("審核成功!");
window.location.reload();
} }
else { else {
alert("審核失敗!", result.data.msg); alert("審核失敗!", result.data.msg);
@ -342,6 +360,11 @@ async function sendReviewResult() {
// window.location.reload(); // window.location.reload();
} }
setAssistantName(); async function main() {
putDataInTable("application_table"); setAssistantName();
putDataInAuditedTable("audit_block"); await putDataInAuditedTable("audit_block");
await putDataInTable("application_table");
}
main()

View File

@ -118,6 +118,8 @@ async function sendApplyData() {
// send data // send data
let result = await axios.post('/api/main', data, {headers: {'Content-Type': 'multipart/form-data'}}); let result = await axios.post('/api/main', data, {headers: {'Content-Type': 'multipart/form-data'}});
console.log(result); console.log(result);
window.location.reload();
} }
function setUserInfo() { function setUserInfo() {

View File

@ -13,13 +13,6 @@
<label>系所助理:<span id="assistant_name"></span></label> <label>系所助理:<span id="assistant_name"></span></label>
</div> </div>
<br> <br>
<div>
<label>選擇要審核的學號</label>
<select id="student_id_select">
<option value="">請選擇</option>
</select>
</div>
<br>
<fieldset> <fieldset>
<table border="1"> <table border="1">
<tr> <tr>