リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: CalibrLog - 計測器・治工具 校正管理システム
校正期限一括メール通知レポート機能の追加(画面内通知サマリー+クリップボードコピー)
## 1. 目的
品質管理担当者が毎朝ダッシュボードを開いた際に、期限超過・7日以内・30日以内の計測器リストをワンクリックでメール本文としてコピーできる機能を追加する。外部メールサーバー連携不要(外部APIキー不使用)で、クリップボードへのテキストコピーのみで実現する。これにより、朝会・週次報告の連絡作業を削減できる。
## 2. 具体的な仕様
### 2-1. 画面追加箇所
- `pages/dashboard.php` の「緊急アラート」パネルの右上に「通知文をコピー」ボタン(`.btn.secondary` スタイル)を追加する。
- ボタンクリックで `#alertNoticeText`(`<textarea>` または `<pre>`)に生成されたテキストをクリップボードへコピーし、ボタンラベルを一時的に「コピーしました ✓」に変える(2秒後に戻す)。
### 2-2. コピーされるテキストの形式
```
【校正期限アラート通知】{今日の日付}
■ 期限超過({件数}件)
- CL-003 トルクレンチ 20Nm 期限:2026-09-01 担当:鈴木 由香
...
■ 7日以内({件数}件)
...
■ 30日以内({件数}件)
...
※ CalibrLog で確認: {アプリのURL}
```
- テキスト生成はPHP側で行い、`<input type="hidden" id="alertNoticeText" value="...">` としてページ内に埋め込む(XSS対策のため `h()` でエスケープ済みの値を `json_encode` で渡す)。
- アプリURLは `(isset($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . strtok($_SERVER['REQUEST_URI'], '?')` で動的生成する。
### 2-3. PHP側の変更(dashboard.php)
- 既存の `$alerts` クエリを「overdue」「due7」「due30」の3グループに分けて取得するよう変更する。具体的には以下の3クエリに分割する(既存のステータスJOIN構造は維持)。
- `$overdue_items`: `next_due_at < CURDATE()`
- `$due7_items`: `next_due_at BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)`
- `$due30_items`: `next_due_at BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY)`
- いずれも `status NOT IN ('disposed','suspended')` 条件付き、`LIMIT 50`
- 既存の `$alerts`(`<= $in30` まとめて取得)はアラートテーブル表示用にそのまま残す(後方互換)。
- 通知テキストをPHPで組み立て、`json_encode` でJS変数 `const ALERT_NOTICE_TEXT` として出力する。
### 2-4. JS側の変更(dashboard.phpのscriptブロック内)
```javascript
document.getElementById('btnCopyAlert').addEventListener('click', function() {
navigator.clipboard.writeText(ALERT_NOTICE_TEXT).then(function() {
var btn = document.getElementById('btnCopyAlert');
btn.textContent = 'コピーしました ✓';
setTimeout(function(){ btn.textContent = '通知文をコピー'; }, 2000);
});
});
```
- `navigator.clipboard` 非対応ブラウザ(IE等)向けフォールバックとして `document.execCommand('copy')` を利用した隠し `<textarea>` 方式も用意する。
### 2-5. 「通知文をコピー」ボタンの表示制御
- アラート件数(overdue + due7 + due30)が0件の場合はボタンを `disabled` 状態にし、「アラートなし」と表示する。
## 3. 既存機能との整合
- 既存のダッシュボードKPI・アラートテーブル・グラフ表示はすべてそのまま維持する。
- 新規テーブル・カラムの追加なし。
- `pages/export.php`・`pages/list.php` は変更しない。
- スマホ表示でもボタンはタップ操作可能なサイズ(最小44px高)を確保する。
- 外部API・外部ライブラリは使用しない(Chart.jsは既存のまま)。
品質管理担当者が毎朝ダッシュボードを開いた際に、期限超過・7日以内・30日以内の計測器リストをワンクリックでメール本文としてコピーできる機能を追加する。外部メールサーバー連携不要(外部APIキー不使用)で、クリップボードへのテキストコピーのみで実現する。これにより、朝会・週次報告の連絡作業を削減できる。
## 2. 具体的な仕様
### 2-1. 画面追加箇所
- `pages/dashboard.php` の「緊急アラート」パネルの右上に「通知文をコピー」ボタン(`.btn.secondary` スタイル)を追加する。
- ボタンクリックで `#alertNoticeText`(`<textarea>` または `<pre>`)に生成されたテキストをクリップボードへコピーし、ボタンラベルを一時的に「コピーしました ✓」に変える(2秒後に戻す)。
### 2-2. コピーされるテキストの形式
```
【校正期限アラート通知】{今日の日付}
■ 期限超過({件数}件)
- CL-003 トルクレンチ 20Nm 期限:2026-09-01 担当:鈴木 由香
...
■ 7日以内({件数}件)
...
■ 30日以内({件数}件)
...
※ CalibrLog で確認: {アプリのURL}
```
- テキスト生成はPHP側で行い、`<input type="hidden" id="alertNoticeText" value="...">` としてページ内に埋め込む(XSS対策のため `h()` でエスケープ済みの値を `json_encode` で渡す)。
- アプリURLは `(isset($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . strtok($_SERVER['REQUEST_URI'], '?')` で動的生成する。
### 2-3. PHP側の変更(dashboard.php)
- 既存の `$alerts` クエリを「overdue」「due7」「due30」の3グループに分けて取得するよう変更する。具体的には以下の3クエリに分割する(既存のステータスJOIN構造は維持)。
- `$overdue_items`: `next_due_at < CURDATE()`
- `$due7_items`: `next_due_at BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)`
- `$due30_items`: `next_due_at BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 30 DAY)`
- いずれも `status NOT IN ('disposed','suspended')` 条件付き、`LIMIT 50`
- 既存の `$alerts`(`<= $in30` まとめて取得)はアラートテーブル表示用にそのまま残す(後方互換)。
- 通知テキストをPHPで組み立て、`json_encode` でJS変数 `const ALERT_NOTICE_TEXT` として出力する。
### 2-4. JS側の変更(dashboard.phpのscriptブロック内)
```javascript
document.getElementById('btnCopyAlert').addEventListener('click', function() {
navigator.clipboard.writeText(ALERT_NOTICE_TEXT).then(function() {
var btn = document.getElementById('btnCopyAlert');
btn.textContent = 'コピーしました ✓';
setTimeout(function(){ btn.textContent = '通知文をコピー'; }, 2000);
});
});
```
- `navigator.clipboard` 非対応ブラウザ(IE等)向けフォールバックとして `document.execCommand('copy')` を利用した隠し `<textarea>` 方式も用意する。
### 2-5. 「通知文をコピー」ボタンの表示制御
- アラート件数(overdue + due7 + due30)が0件の場合はボタンを `disabled` 状態にし、「アラートなし」と表示する。
## 3. 既存機能との整合
- 既存のダッシュボードKPI・アラートテーブル・グラフ表示はすべてそのまま維持する。
- 新規テーブル・カラムの追加なし。
- `pages/export.php`・`pages/list.php` は変更しない。
- スマホ表示でもボタンはタップ操作可能なサイズ(最小44px高)を確保する。
- 外部API・外部ライブラリは使用しない(Chart.jsは既存のまま)。
💬 返信 (3)
🛠 開発を開始しました (機能追加 (calibrlog))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「CalibrLog - 計測器・治工具 校正管理システム」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=calibrlog
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/calibrlog/
ご利用ありがとうございます!
ご要望いただいた「CalibrLog - 計測器・治工具 校正管理システム」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=calibrlog
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/calibrlog/
ご利用ありがとうございます!
Echo
Iris