From 91632ea5b6fee566a9791da0e1600455380f2ef3 Mon Sep 17 00:00:00 2001
From: admin
Date: Mon, 1 Jun 2026 00:35:53 +0900
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/bank-statement.html | 638 +++++++++++++++++++++++-----------
frontend/egov.html | 15 +-
frontend/index.html | 145 ++++++--
frontend/journal-entry.html | 15 +-
frontend/opening_balance.html | 15 +-
frontend/payroll.html | 14 +-
frontend/trial-balance.html | 15 +-
7 files changed, 612 insertions(+), 245 deletions(-)
diff --git a/frontend/bank-statement.html b/frontend/bank-statement.html
index 470ca86..7b56e4b 100644
--- a/frontend/bank-statement.html
+++ b/frontend/bank-statement.html
@@ -28,8 +28,14 @@
flex-wrap: wrap;
gap: 10px;
}
- .page-header h2 { margin: 0; }
- .header-btns { display: flex; gap: 8px; flex-wrap: wrap; }
+ .page-header h2 {
+ margin: 0;
+ }
+ .header-btns {
+ display: flex;
+ gap: 8px;
+ flex-wrap: wrap;
+ }
/* ── 検索フォーム ── */
.search-form {
@@ -43,7 +49,10 @@
flex-wrap: wrap;
gap: 12px;
}
- .search-form label { font-weight: bold; white-space: nowrap; }
+ .search-form label {
+ font-weight: bold;
+ white-space: nowrap;
+ }
.search-form select,
.search-form input[type="number"] {
padding: 5px 10px;
@@ -65,16 +74,41 @@
text-decoration: none;
display: inline-block;
}
- .btn-primary { background: #4caf50; color: #fff; }
- .btn-primary:hover { background: #43a047; }
- .btn-blue { background: #2196f3; color: #fff; }
- .btn-blue:hover { background: #1976d2; }
- .btn-orange { background: #ff9800; color: #fff; }
- .btn-orange:hover { background: #f57c00; }
- .btn-danger { background: #e53935; color: #fff; }
- .btn-danger:hover { background: #c62828; }
- .btn-gray { background: #9e9e9e; color: #fff; }
- .btn-gray:hover { background: #757575; }
+ .btn-primary {
+ background: #4caf50;
+ color: #fff;
+ }
+ .btn-primary:hover {
+ background: #43a047;
+ }
+ .btn-blue {
+ background: #2196f3;
+ color: #fff;
+ }
+ .btn-blue:hover {
+ background: #1976d2;
+ }
+ .btn-orange {
+ background: #ff9800;
+ color: #fff;
+ }
+ .btn-orange:hover {
+ background: #f57c00;
+ }
+ .btn-danger {
+ background: #e53935;
+ color: #fff;
+ }
+ .btn-danger:hover {
+ background: #c62828;
+ }
+ .btn-gray {
+ background: #9e9e9e;
+ color: #fff;
+ }
+ .btn-gray:hover {
+ background: #757575;
+ }
/* ── 月別サマリー ── */
.monthly-summary {
@@ -92,8 +126,15 @@
font-size: 13px;
white-space: nowrap;
}
- .month-chip:hover { background: #e3f2fd; border-color: #2196f3; }
- .month-chip.active { background: #2196f3; color: #fff; border-color: #1976d2; }
+ .month-chip:hover {
+ background: #e3f2fd;
+ border-color: #2196f3;
+ }
+ .month-chip.active {
+ background: #2196f3;
+ color: #fff;
+ border-color: #1976d2;
+ }
/* ── 統計バー ── */
.stats-bar {
@@ -103,11 +144,23 @@
font-size: 13px;
flex-wrap: wrap;
}
- .stat-item { display: flex; align-items: center; gap: 6px; }
- .stat-label { color: #666; }
- .stat-value { font-weight: bold; }
- .stat-value.debit { color: #e53935; }
- .stat-value.credit { color: #1565c0; }
+ .stat-item {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ }
+ .stat-label {
+ color: #666;
+ }
+ .stat-value {
+ font-weight: bold;
+ }
+ .stat-value.debit {
+ color: #e53935;
+ }
+ .stat-value.credit {
+ color: #1565c0;
+ }
/* ── テーブル ── */
table {
@@ -115,7 +168,8 @@
width: 100%;
font-size: 13px;
}
- th, td {
+ th,
+ td {
border: 1px solid #bbb;
padding: 6px 10px;
}
@@ -125,14 +179,30 @@
text-align: center;
white-space: nowrap;
}
- td { background: #fff; }
- tr:nth-child(even) td { background: #fafafa; }
- tr:hover td { background: #e3f2fd; }
- .text-right { text-align: right; }
- .text-center { text-align: center; }
- .text-left { text-align: left; }
- td.debit-cell { color: #c62828; }
- td.credit-cell { color: #1565c0; }
+ td {
+ background: #fff;
+ }
+ tr:nth-child(even) td {
+ background: #fafafa;
+ }
+ tr:hover td {
+ background: #e3f2fd;
+ }
+ .text-right {
+ text-align: right;
+ }
+ .text-center {
+ text-align: center;
+ }
+ .text-left {
+ text-align: left;
+ }
+ td.debit-cell {
+ color: #c62828;
+ }
+ td.credit-cell {
+ color: #1565c0;
+ }
.no-data {
text-align: center;
color: #999;
@@ -145,23 +215,28 @@
display: none;
position: fixed;
inset: 0;
- background: rgba(0,0,0,0.5);
+ background: rgba(0, 0, 0, 0.5);
z-index: 1000;
justify-content: center;
align-items: flex-start;
padding: 30px 16px;
overflow-y: auto;
}
- .modal-overlay.active { display: flex; }
+ .modal-overlay.active {
+ display: flex;
+ }
.modal-box {
background: #fff;
border-radius: 8px;
padding: 28px;
width: 100%;
max-width: 920px;
- box-shadow: 0 10px 30px rgba(0,0,0,0.3);
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
+ }
+ .modal-box h3 {
+ margin: 0 0 18px;
+ font-size: 17px;
}
- .modal-box h3 { margin: 0 0 18px; font-size: 17px; }
.modal-form-row {
display: flex;
align-items: center;
@@ -169,7 +244,10 @@
margin-bottom: 16px;
flex-wrap: wrap;
}
- .modal-form-row label { font-weight: bold; white-space: nowrap; }
+ .modal-form-row label {
+ font-weight: bold;
+ white-space: nowrap;
+ }
.modal-form-row input[type="text"] {
flex: 1;
min-width: 160px;
@@ -188,15 +266,24 @@
color: #666;
cursor: pointer;
margin-bottom: 16px;
- transition: border-color 0.2s, background 0.2s;
+ transition:
+ border-color 0.2s,
+ background 0.2s;
}
- .drop-zone:hover, .drop-zone.dragover {
+ .drop-zone:hover,
+ .drop-zone.dragover {
border-color: #2196f3;
background: #e3f2fd;
color: #1565c0;
}
- .drop-zone input[type="file"] { display: none; }
- .drop-zone .drop-icon { font-size: 36px; display: block; margin-bottom: 8px; }
+ .drop-zone input[type="file"] {
+ display: none;
+ }
+ .drop-zone .drop-icon {
+ font-size: 36px;
+ display: block;
+ margin-bottom: 8px;
+ }
/* プレビュー結果 */
.preview-summary {
@@ -208,10 +295,19 @@
border-radius: 4px;
flex-wrap: wrap;
}
- .preview-summary .ps-item { font-size: 14px; }
- .ps-new { color: #2e7d32; font-weight: bold; }
- .ps-dup { color: #e65100; }
- .ps-total { font-weight: bold; }
+ .preview-summary .ps-item {
+ font-size: 14px;
+ }
+ .ps-new {
+ color: #2e7d32;
+ font-weight: bold;
+ }
+ .ps-dup {
+ color: #e65100;
+ }
+ .ps-total {
+ font-weight: bold;
+ }
.preview-table-wrap {
max-height: 360px;
@@ -220,10 +316,21 @@
border-radius: 4px;
margin-bottom: 16px;
}
- .preview-table-wrap table { font-size: 12px; }
- .preview-table-wrap th { position: sticky; top: 0; z-index: 1; }
- tr.row-new td { background: #e8f5e9 !important; }
- tr.row-dup td { background: #fff3e0 !important; color: #999; }
+ .preview-table-wrap table {
+ font-size: 12px;
+ }
+ .preview-table-wrap th {
+ position: sticky;
+ top: 0;
+ z-index: 1;
+ }
+ tr.row-new td {
+ background: #e8f5e9 !important;
+ }
+ tr.row-dup td {
+ background: #fff3e0 !important;
+ color: #999;
+ }
.badge {
display: inline-block;
padding: 2px 8px;
@@ -231,8 +338,14 @@
font-size: 11px;
font-weight: bold;
}
- .badge-new { background: #c8e6c9; color: #1b5e20; }
- .badge-dup { background: #ffe0b2; color: #bf360c; }
+ .badge-new {
+ background: #c8e6c9;
+ color: #1b5e20;
+ }
+ .badge-dup {
+ background: #ffe0b2;
+ color: #bf360c;
+ }
.modal-btn-row {
display: flex;
@@ -249,9 +362,21 @@
display: none;
font-size: 14px;
}
- .msg-bar.info { background: #e3f2fd; color: #0d47a1; border: 1px solid #90caf9; }
- .msg-bar.success { background: #e8f5e9; color: #1b5e20; border: 1px solid #a5d6a7; }
- .msg-bar.error { background: #ffebee; color: #b71c1c; border: 1px solid #ef9a9a; }
+ .msg-bar.info {
+ background: #e3f2fd;
+ color: #0d47a1;
+ border: 1px solid #90caf9;
+ }
+ .msg-bar.success {
+ background: #e8f5e9;
+ color: #1b5e20;
+ border: 1px solid #a5d6a7;
+ }
+ .msg-bar.error {
+ background: #ffebee;
+ color: #b71c1c;
+ border: 1px solid #ef9a9a;
+ }
/* ── ページネーション ── */
.pagination {
@@ -263,19 +388,48 @@
flex-wrap: wrap;
padding: 8px 0;
}
- .page-info { font-size: 13px; color: #333; }
- .btn-page { background: #f0f0f0; color: #333; border: 1px solid #bbb; }
- .btn-page:hover:not(:disabled) { background: #e0e0e0; }
- .btn-page:disabled { opacity: 0.4; cursor: default; }
+ .page-info {
+ font-size: 13px;
+ color: #333;
+ }
+ .btn-page {
+ background: #f0f0f0;
+ color: #333;
+ border: 1px solid #bbb;
+ }
+ .btn-page:hover:not(:disabled) {
+ background: #e0e0e0;
+ }
+ .btn-page:disabled {
+ opacity: 0.4;
+ cursor: default;
+ }
/* ── 印刷スタイル ── */
@media print {
- .no-print { display: none !important; }
- body { margin: 0; font-size: 12px; }
- table { font-size: 11px; }
- th, td { padding: 4px 6px; }
- .monthly-summary, .stats-bar { margin-bottom: 6px; }
- .month-chip { border: 1px solid #999 !important; color: #000 !important; background: #fff !important; }
+ .no-print {
+ display: none !important;
+ }
+ body {
+ margin: 0;
+ font-size: 12px;
+ }
+ table {
+ font-size: 11px;
+ }
+ th,
+ td {
+ padding: 4px 6px;
+ }
+ .monthly-summary,
+ .stats-bar {
+ margin-bottom: 6px;
+ }
+ .month-chip {
+ border: 1px solid #999 !important;
+ color: #000 !important;
+ background: #fff !important;
+ }
}
@@ -283,7 +437,9 @@
diff --git a/frontend/index.html b/frontend/index.html
index 441d1a7..daea9ec 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -3,7 +3,10 @@
-
+
NJTS 会計システム - メイン
@@ -92,41 +95,94 @@
cursor: pointer;
font-size: 13px;
}
- .change-pw-btn:hover { background: #545b62; }
+ .change-pw-btn:hover {
+ background: #545b62;
+ }
/* パスワード変更モーダル */
.modal-overlay {
display: none;
position: fixed;
inset: 0;
- background: rgba(0,0,0,0.5);
+ background: rgba(0, 0, 0, 0.5);
z-index: 1000;
justify-content: center;
align-items: center;
}
- .modal-overlay.active { display: flex; }
+ .modal-overlay.active {
+ display: flex;
+ }
.modal-box {
background: white;
border-radius: 10px;
padding: 32px;
width: 360px;
- box-shadow: 0 10px 30px rgba(0,0,0,0.3);
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
+ }
+ .modal-box h3 {
+ margin: 0 0 20px;
+ }
+ .modal-box .form-group {
+ margin-bottom: 14px;
+ }
+ .modal-box label {
+ display: block;
+ margin-bottom: 5px;
+ font-size: 13px;
+ font-weight: 600;
+ color: #333;
}
- .modal-box h3 { margin: 0 0 20px; }
- .modal-box .form-group { margin-bottom: 14px; }
- .modal-box label { display: block; margin-bottom: 5px; font-size: 13px; font-weight: 600; color: #333; }
.modal-box input[type="password"] {
- width: 100%; padding: 10px; border: 1px solid #ddd;
- border-radius: 5px; font-size: 14px; box-sizing: border-box;
+ width: 100%;
+ padding: 10px;
+ border: 1px solid #ddd;
+ border-radius: 5px;
+ font-size: 14px;
+ box-sizing: border-box;
+ }
+ .modal-box .btn-row {
+ display: flex;
+ gap: 10px;
+ margin-top: 20px;
+ }
+ .modal-box .btn-row button {
+ flex: 1;
+ padding: 10px;
+ border: none;
+ border-radius: 5px;
+ cursor: pointer;
+ font-size: 14px;
+ }
+ .modal-box .btn-submit {
+ background: #007bff;
+ color: white;
+ }
+ .modal-box .btn-submit:hover {
+ background: #0056b3;
+ }
+ .modal-box .btn-cancel {
+ background: #e9ecef;
+ color: #333;
+ }
+ .modal-box .btn-cancel:hover {
+ background: #d0d5db;
+ }
+ .modal-msg {
+ padding: 8px 12px;
+ border-radius: 4px;
+ margin-bottom: 12px;
+ display: none;
+ font-size: 13px;
+ }
+ .modal-msg.error {
+ background: #fee;
+ color: #c33;
+ border: 1px solid #fcc;
+ }
+ .modal-msg.success {
+ background: #efe;
+ color: #3a3;
+ border: 1px solid #cfc;
}
- .modal-box .btn-row { display: flex; gap: 10px; margin-top: 20px; }
- .modal-box .btn-row button { flex: 1; padding: 10px; border: none; border-radius: 5px; cursor: pointer; font-size: 14px; }
- .modal-box .btn-submit { background: #007bff; color: white; }
- .modal-box .btn-submit:hover { background: #0056b3; }
- .modal-box .btn-cancel { background: #e9ecef; color: #333; }
- .modal-box .btn-cancel:hover { background: #d0d5db; }
- .modal-msg { padding: 8px 12px; border-radius: 4px; margin-bottom: 12px; display: none; font-size: 13px; }
- .modal-msg.error { background: #fee; color: #c33; border: 1px solid #fcc; }
- .modal-msg.success { background: #efe; color: #3a3; border: 1px solid #cfc; }
@@ -134,7 +190,9 @@
NJTS
ユーザー: 読み込み中...
-
+
@@ -146,7 +204,11 @@
-
+
@@ -157,8 +219,12 @@
-
-
+
+
@@ -198,7 +264,9 @@
銀行のCSVデータを取込み、明細を管理します。重複チェック付きで安全に取込め、月別・銀行別の検索・印刷が可能です。
- 銀行明細を開く
+ 銀行明細を開く
@@ -245,28 +313,40 @@
}
async function submitChangePw() {
const current = document.getElementById("cpCurrent").value;
- const newPw = document.getElementById("cpNew").value;
+ const newPw = document.getElementById("cpNew").value;
const confirm = document.getElementById("cpConfirm").value;
- const user = getCurrentUser();
+ const user = getCurrentUser();
if (!current || !newPw || !confirm) {
- showChangePwMsg("すべての項目を入力してください", true); return;
+ showChangePwMsg("すべての項目を入力してください", true);
+ return;
}
if (newPw.length < 8) {
- showChangePwMsg("新しいパスワードは8文字以上にしてください", true); return;
+ showChangePwMsg("新しいパスワードは8文字以上にしてください", true);
+ return;
}
if (newPw !== confirm) {
- showChangePwMsg("新しいパスワードが一致しません", true); return;
+ showChangePwMsg("新しいパスワードが一致しません", true);
+ return;
}
try {
const res = await fetch("/api/users/change-password", {
method: "POST",
headers: { "Content-Type": "application/json" },
- body: JSON.stringify({ username: user.username, current_password: current, new_password: newPw })
+ body: JSON.stringify({
+ username: user.username,
+ current_password: current,
+ new_password: newPw,
+ }),
});
const data = await res.json();
if (res.ok) {
- showChangePwMsg("パスワードを変更しました。再ログインしてください", false);
- setTimeout(() => { logout(); }, 2000);
+ showChangePwMsg(
+ "パスワードを変更しました。再ログインしてください",
+ false,
+ );
+ setTimeout(() => {
+ logout();
+ }, 2000);
} else {
showChangePwMsg(data.detail || "変更に失敗しました", true);
}
@@ -274,7 +354,6 @@
showChangePwMsg("エラー: " + e.message, true);
}
}
-