リクエスト詳細
✨ 既存アプリの改善
対応完了
対象アプリ: ClaimDesk
クレーム詳細画面へのコメント一覧・対応履歴タイムライン表示の改善(担当者アバター・アクション種別アイコン付き)
## 1. 目的
現在の詳細画面(detail.php)には claim_logs テーブルのデータを表示する「対応履歴」欄が存在するが、ステータス変更・編集・コメントが同一リストに並ぶだけで視認性が低い。アクション種別ごとにアイコンや色を付けたタイムライン形式に刷新し、誰がいつ何をしたかを一目で把握できるようにする。これにより複数人で運用する際のコミュニケーション効率が上がり、引き継ぎ・監査時の確認工数も削減できる。
## 2. 具体的な仕様
### 2-1. タイムライン UI(detail.php の対応履歴セクションを置き換え)
- 各ログを縦に並べたタイムライン形式で表示する。
- 左端にアクション種別アイコン(Unicode 絵文字 or CSS 疑似要素)を表示。
- `create` → 📋(新規登録)
- `status` → 🔄(ステータス変更)
- `edit` → ✏️(編集)
- `comment` → 💬(コメント)
- `status` 変更の場合は `old_status → new_status` を日本語ラベルで表示(例:「受付済 → 調査中」)。
- 担当者名が設定されていれば「担当者名の頭文字 1 文字」を丸いアバター(背景色はハッシュから決定する固定パレット 8 色)として表示。未設定は「-」グレー円。
- 投稿日時は `Y/m/d H:i` 形式で表示。
- コメント本文は最大 200 文字を折り返し表示(それ以上は「続きを表示」リンクで展開、JS で `hidden` クラストグル)。
- 最新が上(`ORDER BY logged_at DESC`)に表示。
### 2-2. コメント追加フォーム(既存機能との整合)
- 既存の `action=comment` POST フォームはそのまま保持する(壊さない)。
- フォームの位置をタイムラインの上部に移動し、送信後は `redirect_to('detail', ['id'=>$id])` で同ページにリダイレクトされる既存動作を維持。
### 2-3. PHP 側変更箇所(detail.php のみ)
- `fetch_claim_logs($id)` の結果(既存関数)を受け取り、タイムライン HTML を出力する `render_claim_logs(array $logs): void` をローカル関数として detail.php 内に定義する(lib.php は変更不要)。
- アバター背景色決定ロジック:`$colors = ['#1a56db','#057a55','#f59e0b','#7c3aed','#0891b2','#f05252','#64748b','#e11d48']`; インデックスは `crc32($name) % 8` の絶対値。
### 2-4. CSS 追加(既存 style を壊さない)
```css
.timeline { list-style: none; margin: 0; padding: 0; }
.timeline li { display: flex; gap: 12px; padding: 10px 0; border-bottom: 1px solid #e5e7eb; }
.timeline li:last-child { border-bottom: none; }
.tl-icon { font-size: 20px; flex-shrink: 0; width: 28px; text-align: center; }
.tl-avatar { width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-size: 12px; font-weight: bold; flex-shrink: 0; }
.tl-body { flex: 1; }
.tl-meta { font-size: 12px; color: #6b7280; margin-bottom: 2px; }
.tl-text { font-size: 14px; word-break: break-all; }
.tl-more { font-size: 12px; color: #1a56db; cursor: pointer; }
.tl-long { display: none; }
```
これらは `<style>` タグで detail.php 内に記述し、既存 CSS クラスと衝突しない命名(`tl-` プレフィックス)とする。
### 2-5. JS(detail.php 末尾に追記)
```javascript
document.querySelectorAll('.tl-more').forEach(function(el) {
el.addEventListener('click', function() {
var long = this.previousElementSibling;
if (long && long.classList.contains('tl-long')) {
long.style.display = long.style.display === '' ? 'inline' : '';
this.textContent = long.style.display === 'inline' ? '折りたたむ' : '続きを表示';
}
});
});
```
## 3. 既存機能との整合
- `claim_logs` テーブル・`fetch_claim_logs()` 関数・`add_claim_log()` 関数は一切変更しない。
- コメント投稿フォームの POST 処理も変更しない。
- 他ページ(dashboard, list, register, report, master, settings)には一切影響しない。
- スマホでは `flex-wrap: wrap` により自然に折り返し表示される(既存レスポンシブ CSS の流れを踏襲)。
現在の詳細画面(detail.php)には claim_logs テーブルのデータを表示する「対応履歴」欄が存在するが、ステータス変更・編集・コメントが同一リストに並ぶだけで視認性が低い。アクション種別ごとにアイコンや色を付けたタイムライン形式に刷新し、誰がいつ何をしたかを一目で把握できるようにする。これにより複数人で運用する際のコミュニケーション効率が上がり、引き継ぎ・監査時の確認工数も削減できる。
## 2. 具体的な仕様
### 2-1. タイムライン UI(detail.php の対応履歴セクションを置き換え)
- 各ログを縦に並べたタイムライン形式で表示する。
- 左端にアクション種別アイコン(Unicode 絵文字 or CSS 疑似要素)を表示。
- `create` → 📋(新規登録)
- `status` → 🔄(ステータス変更)
- `edit` → ✏️(編集)
- `comment` → 💬(コメント)
- `status` 変更の場合は `old_status → new_status` を日本語ラベルで表示(例:「受付済 → 調査中」)。
- 担当者名が設定されていれば「担当者名の頭文字 1 文字」を丸いアバター(背景色はハッシュから決定する固定パレット 8 色)として表示。未設定は「-」グレー円。
- 投稿日時は `Y/m/d H:i` 形式で表示。
- コメント本文は最大 200 文字を折り返し表示(それ以上は「続きを表示」リンクで展開、JS で `hidden` クラストグル)。
- 最新が上(`ORDER BY logged_at DESC`)に表示。
### 2-2. コメント追加フォーム(既存機能との整合)
- 既存の `action=comment` POST フォームはそのまま保持する(壊さない)。
- フォームの位置をタイムラインの上部に移動し、送信後は `redirect_to('detail', ['id'=>$id])` で同ページにリダイレクトされる既存動作を維持。
### 2-3. PHP 側変更箇所(detail.php のみ)
- `fetch_claim_logs($id)` の結果(既存関数)を受け取り、タイムライン HTML を出力する `render_claim_logs(array $logs): void` をローカル関数として detail.php 内に定義する(lib.php は変更不要)。
- アバター背景色決定ロジック:`$colors = ['#1a56db','#057a55','#f59e0b','#7c3aed','#0891b2','#f05252','#64748b','#e11d48']`; インデックスは `crc32($name) % 8` の絶対値。
### 2-4. CSS 追加(既存 style を壊さない)
```css
.timeline { list-style: none; margin: 0; padding: 0; }
.timeline li { display: flex; gap: 12px; padding: 10px 0; border-bottom: 1px solid #e5e7eb; }
.timeline li:last-child { border-bottom: none; }
.tl-icon { font-size: 20px; flex-shrink: 0; width: 28px; text-align: center; }
.tl-avatar { width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-size: 12px; font-weight: bold; flex-shrink: 0; }
.tl-body { flex: 1; }
.tl-meta { font-size: 12px; color: #6b7280; margin-bottom: 2px; }
.tl-text { font-size: 14px; word-break: break-all; }
.tl-more { font-size: 12px; color: #1a56db; cursor: pointer; }
.tl-long { display: none; }
```
これらは `<style>` タグで detail.php 内に記述し、既存 CSS クラスと衝突しない命名(`tl-` プレフィックス)とする。
### 2-5. JS(detail.php 末尾に追記)
```javascript
document.querySelectorAll('.tl-more').forEach(function(el) {
el.addEventListener('click', function() {
var long = this.previousElementSibling;
if (long && long.classList.contains('tl-long')) {
long.style.display = long.style.display === '' ? 'inline' : '';
this.textContent = long.style.display === 'inline' ? '折りたたむ' : '続きを表示';
}
});
});
```
## 3. 既存機能との整合
- `claim_logs` テーブル・`fetch_claim_logs()` 関数・`add_claim_log()` 関数は一切変更しない。
- コメント投稿フォームの POST 処理も変更しない。
- 他ページ(dashboard, list, register, report, master, settings)には一切影響しない。
- スマホでは `flex-wrap: wrap` により自然に折り返し表示される(既存レスポンシブ CSS の流れを踏襲)。
💬 返信 (3)
🛠 開発を開始しました (機能追加 (claimdesk))
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
ご要望ありがとうございます。AI 開発ワーカーが実装を開始します。
通常 5〜30 分で Pull Request を作成し、レビュー後にリリースされます。
📝 開発が完了しました
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
ご要望いただいた内容の実装が完了し、最終チェック段階に入りました。
レビュー (自動) → リリース、の流れで進みます。
もう少々お待ちください。
✅ リリース完了のお知らせ
ご要望いただいた「ClaimDesk」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=claimdesk
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/claimdesk/
ご利用ありがとうございます!
ご要望いただいた「ClaimDesk」を実装し、リリースいたしました。
【ご利用方法】
ダッシュボード: https://www.aiapps.jp/?action=dashboard
アプリ詳細: https://www.aiapps.jp/apps/show.php?slug=claimdesk
デモ環境は 1 時間以内に自動構築されます:
https://www.aiapps.jp/demo/claimdesk/
ご利用ありがとうございます!
Echo
Iris