refactor:R&D Labs M. Management 메뉴 전체 삭제
- ManagementController.php 삭제 - lab/management/ 뷰 디렉토리 전체 삭제 (11개 파일) - sidebar-static.blade.php에서 M. Management 섹션 제거 - routes/web.php에서 lab.management.* 라우트 제거 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,174 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Lab;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\SalesScenarioService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\View\View;
|
||||
|
||||
/**
|
||||
* R&D Labs > M. 관리 메뉴 컨트롤러
|
||||
*/
|
||||
class ManagementController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private SalesScenarioService $salesScenarioService
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Presentation 레이아웃 페이지를 위한 HX-Redirect 처리
|
||||
* (presentation 레이아웃은 #main-content가 없어서 HTMX swap 불가)
|
||||
*/
|
||||
private function handlePresentationPage(Request $request, string $routeName): ?Response
|
||||
{
|
||||
if ($request->header('HX-Request')) {
|
||||
return response('', 200)->header('HX-Redirect', route($routeName));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
// 바로빌 테넌트 관리
|
||||
public function barobillTenant(Request $request): View|Response
|
||||
{
|
||||
if ($redirect = $this->handlePresentationPage($request, 'lab.management.barobill-tenant')) {
|
||||
return $redirect;
|
||||
}
|
||||
return view('lab.management.barobill-tenant');
|
||||
}
|
||||
|
||||
// 전자세금계산서 전략
|
||||
public function taxInvoiceStrategy(Request $request): View|Response
|
||||
{
|
||||
if ($redirect = $this->handlePresentationPage($request, 'lab.management.tax-invoice-strategy')) {
|
||||
return $redirect;
|
||||
}
|
||||
return view('lab.management.tax-invoice-strategy');
|
||||
}
|
||||
|
||||
// 전자세금계산서
|
||||
public function taxInvoice(Request $request): View|Response
|
||||
{
|
||||
if ($redirect = $this->handlePresentationPage($request, 'lab.management.tax-invoice')) {
|
||||
return $redirect;
|
||||
}
|
||||
return view('lab.management.tax-invoice');
|
||||
}
|
||||
|
||||
// 사업자등록번호 진위 확인
|
||||
public function businessVerify(Request $request): View|Response
|
||||
{
|
||||
if ($redirect = $this->handlePresentationPage($request, 'lab.management.business-verify')) {
|
||||
return $redirect;
|
||||
}
|
||||
return view('lab.management.business-verify');
|
||||
}
|
||||
|
||||
// 영업관리 & 매니저 미팅관리
|
||||
public function salesMeeting(Request $request): View|Response
|
||||
{
|
||||
if ($redirect = $this->handlePresentationPage($request, 'lab.management.sales-meeting')) {
|
||||
return $redirect;
|
||||
}
|
||||
return view('lab.management.sales-meeting');
|
||||
}
|
||||
|
||||
// 카드 세무항목 매칭 전략
|
||||
public function cardTaxMatching(Request $request): View|Response
|
||||
{
|
||||
if ($redirect = $this->handlePresentationPage($request, 'lab.management.card-tax-matching')) {
|
||||
return $redirect;
|
||||
}
|
||||
return view('lab.management.card-tax-matching');
|
||||
}
|
||||
|
||||
// 카드 사용내역 수집 후 매칭
|
||||
public function cardUsageMatching(Request $request): View|Response
|
||||
{
|
||||
if ($redirect = $this->handlePresentationPage($request, 'lab.management.card-usage-matching')) {
|
||||
return $redirect;
|
||||
}
|
||||
return view('lab.management.card-usage-matching');
|
||||
}
|
||||
|
||||
// 계좌입출금 내역 조회 API
|
||||
public function accountApi(Request $request): View|Response
|
||||
{
|
||||
if ($redirect = $this->handlePresentationPage($request, 'lab.management.account-api')) {
|
||||
return $redirect;
|
||||
}
|
||||
return view('lab.management.account-api');
|
||||
}
|
||||
|
||||
// 영업관리 시나리오
|
||||
public function salesScenario()
|
||||
{
|
||||
$steps = SalesScenarioService::getScenarioSteps();
|
||||
$user = auth()->user();
|
||||
$checklist = $user ? $this->salesScenarioService->getUserChecklist($user) : [];
|
||||
$progress = $user ? $this->salesScenarioService->getOverallProgress($user) : ['total' => 0, 'checked' => 0, 'percent' => 0];
|
||||
|
||||
return view('lab.management.sales-scenario', compact('steps', 'checklist', 'progress'));
|
||||
}
|
||||
|
||||
// 영업관리 시나리오 체크리스트 조회 API
|
||||
public function salesScenarioChecklist(): JsonResponse
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
if (! $user) {
|
||||
return response()->json(['success' => false, 'message' => '인증이 필요합니다.'], 401);
|
||||
}
|
||||
|
||||
$data = $this->salesScenarioService->getUserChecklist($user);
|
||||
$progress = $this->salesScenarioService->getOverallProgress($user);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'data' => $data,
|
||||
'progress' => $progress,
|
||||
]);
|
||||
}
|
||||
|
||||
// 영업관리 시나리오 체크포인트 토글 API
|
||||
public function salesScenarioToggle(Request $request): JsonResponse
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
if (! $user) {
|
||||
return response()->json(['success' => false, 'message' => '인증이 필요합니다.'], 401);
|
||||
}
|
||||
|
||||
$validated = $request->validate([
|
||||
'step_id' => 'required|integer|min:1|max:6',
|
||||
'checkpoint_index' => 'required|integer|min:0',
|
||||
'is_checked' => 'required|boolean',
|
||||
]);
|
||||
|
||||
$checkedIndices = $this->salesScenarioService->toggleCheckpoint(
|
||||
$user,
|
||||
$validated['step_id'],
|
||||
$validated['checkpoint_index'],
|
||||
$validated['is_checked']
|
||||
);
|
||||
|
||||
$progress = $this->salesScenarioService->getOverallProgress($user);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'data' => $checkedIndices,
|
||||
'progress' => $progress,
|
||||
]);
|
||||
}
|
||||
|
||||
// 매니저 시나리오
|
||||
public function managerScenario(Request $request): View|Response
|
||||
{
|
||||
if ($redirect = $this->handlePresentationPage($request, 'lab.management.manager-scenario')) {
|
||||
return $redirect;
|
||||
}
|
||||
return view('lab.management.manager-scenario');
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
@extends('layouts.presentation')
|
||||
|
||||
@section('title', '계좌입출금 내역 조회 API')
|
||||
|
||||
@push('styles')
|
||||
<style>
|
||||
.placeholder-container { min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
||||
.placeholder-icon { width: 5rem; height: 5rem; margin-bottom: 2rem; opacity: 0.6; color: #059669; }
|
||||
.placeholder-title { font-size: 2rem; font-weight: 700; color: #059669; margin-bottom: 1rem; }
|
||||
.placeholder-subtitle { font-size: 1.25rem; color: #64748b; max-width: 500px; text-align: center; line-height: 1.8; }
|
||||
.placeholder-badge { margin-top: 2rem; padding: 0.5rem 1.5rem; background: linear-gradient(135deg, #10b981, #059669); color: white; border-radius: 9999px; font-weight: 600; font-size: 0.875rem; }
|
||||
.feature-icon { width: 1.25rem; height: 1.25rem; color: #059669; }
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen bg-gradient-to-br from-emerald-50 to-teal-100">
|
||||
<div class="container mx-auto px-4 py-12">
|
||||
<div class="placeholder-container">
|
||||
<svg class="placeholder-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 21v-8.25M15.75 21v-8.25M8.25 21v-8.25M3 9l9-6 9 6m-1.5 12V10.332A48.36 48.36 0 0012 9.75c-2.551 0-5.056.2-7.5.582V21M3 21h18M12 6.75h.008v.008H12V6.75z" />
|
||||
</svg>
|
||||
<h1 class="placeholder-title">계좌입출금 내역 조회 API</h1>
|
||||
<p class="placeholder-subtitle">
|
||||
은행 계좌의 입출금 내역을 실시간으로
|
||||
조회하고 관리하는 API 서비스입니다.
|
||||
</p>
|
||||
<div class="placeholder-badge">Management</div>
|
||||
</div>
|
||||
|
||||
<div class="max-w-4xl mx-auto mt-12">
|
||||
<div class="bg-white rounded-2xl shadow-lg p-8">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-6 flex items-center">
|
||||
<svg class="feature-icon mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
</svg>
|
||||
예정 기능
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 gap-6">
|
||||
<div class="p-4 bg-emerald-50 rounded-lg">
|
||||
<h3 class="font-semibold text-emerald-800 mb-2">내역 조회</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 실시간 잔액 조회</li>
|
||||
<li>• 기간별 거래 내역</li>
|
||||
<li>• 다중 계좌 관리</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="p-4 bg-blue-50 rounded-lg">
|
||||
<h3 class="font-semibold text-blue-800 mb-2">데이터 활용</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 자동 전표 생성</li>
|
||||
<li>• 입금 확인 자동화</li>
|
||||
<li>• 현금흐름 분석</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,62 +0,0 @@
|
||||
@extends('layouts.presentation')
|
||||
|
||||
@section('title', '바로빌 테넌트 관리')
|
||||
|
||||
@push('styles')
|
||||
<style>
|
||||
.placeholder-container { min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
||||
.placeholder-icon { width: 5rem; height: 5rem; margin-bottom: 2rem; opacity: 0.6; color: #059669; }
|
||||
.placeholder-title { font-size: 2rem; font-weight: 700; color: #059669; margin-bottom: 1rem; }
|
||||
.placeholder-subtitle { font-size: 1.25rem; color: #64748b; max-width: 500px; text-align: center; line-height: 1.8; }
|
||||
.placeholder-badge { margin-top: 2rem; padding: 0.5rem 1.5rem; background: linear-gradient(135deg, #10b981, #059669); color: white; border-radius: 9999px; font-weight: 600; font-size: 0.875rem; }
|
||||
.feature-icon { width: 1.25rem; height: 1.25rem; color: #059669; }
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen bg-gradient-to-br from-emerald-50 to-teal-100">
|
||||
<div class="container mx-auto px-4 py-12">
|
||||
<div class="placeholder-container">
|
||||
<svg class="placeholder-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M2.25 21h19.5m-18-18v18m10.5-18v18m6-13.5V21M6.75 6.75h.75m-.75 3h.75m-.75 3h.75m3-6h.75m-.75 3h.75m-.75 3h.75M6.75 21v-3.375c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21M3 3h12m-.75 4.5H21m-3.75 3.75h.008v.008h-.008v-.008zm0 3h.008v.008h-.008v-.008zm0 3h.008v.008h-.008v-.008z" />
|
||||
</svg>
|
||||
<h1 class="placeholder-title">바로빌 테넌트 관리</h1>
|
||||
<p class="placeholder-subtitle">
|
||||
바로빌 API 연동을 위한 테넌트별 설정 및
|
||||
인증 정보를 관리하는 시스템입니다.
|
||||
</p>
|
||||
<div class="placeholder-badge">Management</div>
|
||||
</div>
|
||||
|
||||
<div class="max-w-4xl mx-auto mt-12">
|
||||
<div class="bg-white rounded-2xl shadow-lg p-8">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-6 flex items-center">
|
||||
<svg class="feature-icon mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
</svg>
|
||||
예정 기능
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 gap-6">
|
||||
<div class="p-4 bg-emerald-50 rounded-lg">
|
||||
<h3 class="font-semibold text-emerald-800 mb-2">테넌트 설정</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 바로빌 API 키 관리</li>
|
||||
<li>• 테넌트별 인증 설정</li>
|
||||
<li>• 사용 권한 관리</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="p-4 bg-blue-50 rounded-lg">
|
||||
<h3 class="font-semibold text-blue-800 mb-2">연동 현황</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• API 호출 통계</li>
|
||||
<li>• 오류 로그 모니터링</li>
|
||||
<li>• 연동 상태 대시보드</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,62 +0,0 @@
|
||||
@extends('layouts.presentation')
|
||||
|
||||
@section('title', '사업자등록번호 진위 확인')
|
||||
|
||||
@push('styles')
|
||||
<style>
|
||||
.placeholder-container { min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
||||
.placeholder-icon { width: 5rem; height: 5rem; margin-bottom: 2rem; opacity: 0.6; color: #059669; }
|
||||
.placeholder-title { font-size: 2rem; font-weight: 700; color: #059669; margin-bottom: 1rem; }
|
||||
.placeholder-subtitle { font-size: 1.25rem; color: #64748b; max-width: 500px; text-align: center; line-height: 1.8; }
|
||||
.placeholder-badge { margin-top: 2rem; padding: 0.5rem 1.5rem; background: linear-gradient(135deg, #10b981, #059669); color: white; border-radius: 9999px; font-weight: 600; font-size: 0.875rem; }
|
||||
.feature-icon { width: 1.25rem; height: 1.25rem; color: #059669; }
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen bg-gradient-to-br from-emerald-50 to-teal-100">
|
||||
<div class="container mx-auto px-4 py-12">
|
||||
<div class="placeholder-container">
|
||||
<svg class="placeholder-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 12.75L11.25 15 15 9.75m-3-7.036A11.959 11.959 0 013.598 6 11.99 11.99 0 003 9.749c0 5.592 3.824 10.29 9 11.623 5.176-1.332 9-6.03 9-11.622 0-1.31-.21-2.571-.598-3.751h-.152c-3.196 0-6.1-1.248-8.25-3.285z" />
|
||||
</svg>
|
||||
<h1 class="placeholder-title">사업자등록번호 진위 확인</h1>
|
||||
<p class="placeholder-subtitle">
|
||||
국세청 API를 통해 사업자등록번호의
|
||||
진위 여부와 휴폐업 상태를 확인합니다.
|
||||
</p>
|
||||
<div class="placeholder-badge">Management</div>
|
||||
</div>
|
||||
|
||||
<div class="max-w-4xl mx-auto mt-12">
|
||||
<div class="bg-white rounded-2xl shadow-lg p-8">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-6 flex items-center">
|
||||
<svg class="feature-icon mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
</svg>
|
||||
예정 기능
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 gap-6">
|
||||
<div class="p-4 bg-emerald-50 rounded-lg">
|
||||
<h3 class="font-semibold text-emerald-800 mb-2">진위 확인</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 실시간 진위 조회</li>
|
||||
<li>• 휴폐업 상태 확인</li>
|
||||
<li>• 과세 유형 확인</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="p-4 bg-blue-50 rounded-lg">
|
||||
<h3 class="font-semibold text-blue-800 mb-2">일괄 처리</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 대량 조회 지원</li>
|
||||
<li>• Excel 업로드/다운로드</li>
|
||||
<li>• 조회 이력 관리</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,62 +0,0 @@
|
||||
@extends('layouts.presentation')
|
||||
|
||||
@section('title', '카드 세무항목 매칭 전략')
|
||||
|
||||
@push('styles')
|
||||
<style>
|
||||
.placeholder-container { min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
||||
.placeholder-icon { width: 5rem; height: 5rem; margin-bottom: 2rem; opacity: 0.6; color: #059669; }
|
||||
.placeholder-title { font-size: 2rem; font-weight: 700; color: #059669; margin-bottom: 1rem; }
|
||||
.placeholder-subtitle { font-size: 1.25rem; color: #64748b; max-width: 500px; text-align: center; line-height: 1.8; }
|
||||
.placeholder-badge { margin-top: 2rem; padding: 0.5rem 1.5rem; background: linear-gradient(135deg, #10b981, #059669); color: white; border-radius: 9999px; font-weight: 600; font-size: 0.875rem; }
|
||||
.feature-icon { width: 1.25rem; height: 1.25rem; color: #059669; }
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen bg-gradient-to-br from-emerald-50 to-teal-100">
|
||||
<div class="container mx-auto px-4 py-12">
|
||||
<div class="placeholder-container">
|
||||
<svg class="placeholder-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M2.25 8.25h19.5M2.25 9h19.5m-16.5 5.25h6m-6 2.25h3m-3.75 3h15a2.25 2.25 0 002.25-2.25V6.75A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25v10.5A2.25 2.25 0 004.5 19.5z" />
|
||||
</svg>
|
||||
<h1 class="placeholder-title">카드 세무항목 매칭 전략</h1>
|
||||
<p class="placeholder-subtitle">
|
||||
카드 사용내역을 세무 항목과 자동으로 매칭하여
|
||||
세무 처리를 효율화하는 전략입니다.
|
||||
</p>
|
||||
<div class="placeholder-badge">Management</div>
|
||||
</div>
|
||||
|
||||
<div class="max-w-4xl mx-auto mt-12">
|
||||
<div class="bg-white rounded-2xl shadow-lg p-8">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-6 flex items-center">
|
||||
<svg class="feature-icon mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
</svg>
|
||||
예정 기능
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 gap-6">
|
||||
<div class="p-4 bg-emerald-50 rounded-lg">
|
||||
<h3 class="font-semibold text-emerald-800 mb-2">자동 매칭</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• AI 기반 분류</li>
|
||||
<li>• 가맹점별 규칙 설정</li>
|
||||
<li>• 학습 기반 개선</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="p-4 bg-blue-50 rounded-lg">
|
||||
<h3 class="font-semibold text-blue-800 mb-2">세무 연계</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 비용 항목 자동 분류</li>
|
||||
<li>• 증빙 자료 연결</li>
|
||||
<li>• 월별 정산 리포트</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,62 +0,0 @@
|
||||
@extends('layouts.presentation')
|
||||
|
||||
@section('title', '카드 사용내역 수집 후 매칭')
|
||||
|
||||
@push('styles')
|
||||
<style>
|
||||
.placeholder-container { min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
||||
.placeholder-icon { width: 5rem; height: 5rem; margin-bottom: 2rem; opacity: 0.6; color: #059669; }
|
||||
.placeholder-title { font-size: 2rem; font-weight: 700; color: #059669; margin-bottom: 1rem; }
|
||||
.placeholder-subtitle { font-size: 1.25rem; color: #64748b; max-width: 500px; text-align: center; line-height: 1.8; }
|
||||
.placeholder-badge { margin-top: 2rem; padding: 0.5rem 1.5rem; background: linear-gradient(135deg, #10b981, #059669); color: white; border-radius: 9999px; font-weight: 600; font-size: 0.875rem; }
|
||||
.feature-icon { width: 1.25rem; height: 1.25rem; color: #059669; }
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen bg-gradient-to-br from-emerald-50 to-teal-100">
|
||||
<div class="container mx-auto px-4 py-12">
|
||||
<div class="placeholder-container">
|
||||
<svg class="placeholder-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M7.5 21L3 16.5m0 0L7.5 12M3 16.5h13.5m0-13.5L21 7.5m0 0L16.5 12M21 7.5H7.5" />
|
||||
</svg>
|
||||
<h1 class="placeholder-title">카드 사용내역 수집 후 매칭</h1>
|
||||
<p class="placeholder-subtitle">
|
||||
카드 사용내역을 자동으로 수집하고
|
||||
거래처/품목과 매칭하는 시스템입니다.
|
||||
</p>
|
||||
<div class="placeholder-badge">Management</div>
|
||||
</div>
|
||||
|
||||
<div class="max-w-4xl mx-auto mt-12">
|
||||
<div class="bg-white rounded-2xl shadow-lg p-8">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-6 flex items-center">
|
||||
<svg class="feature-icon mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
</svg>
|
||||
예정 기능
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 gap-6">
|
||||
<div class="p-4 bg-emerald-50 rounded-lg">
|
||||
<h3 class="font-semibold text-emerald-800 mb-2">데이터 수집</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 카드사 연동 수집</li>
|
||||
<li>• 스크래핑 방식 지원</li>
|
||||
<li>• 실시간 동기화</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="p-4 bg-blue-50 rounded-lg">
|
||||
<h3 class="font-semibold text-blue-800 mb-2">매칭 처리</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 거래처 자동 매칭</li>
|
||||
<li>• 계정과목 분류</li>
|
||||
<li>• 예외 처리 관리</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,62 +0,0 @@
|
||||
@extends('layouts.presentation')
|
||||
|
||||
@section('title', '매니저 시나리오')
|
||||
|
||||
@push('styles')
|
||||
<style>
|
||||
.placeholder-container { min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
||||
.placeholder-icon { width: 5rem; height: 5rem; margin-bottom: 2rem; opacity: 0.6; color: #059669; }
|
||||
.placeholder-title { font-size: 2rem; font-weight: 700; color: #059669; margin-bottom: 1rem; }
|
||||
.placeholder-subtitle { font-size: 1.25rem; color: #64748b; max-width: 500px; text-align: center; line-height: 1.8; }
|
||||
.placeholder-badge { margin-top: 2rem; padding: 0.5rem 1.5rem; background: linear-gradient(135deg, #10b981, #059669); color: white; border-radius: 9999px; font-weight: 600; font-size: 0.875rem; }
|
||||
.feature-icon { width: 1.25rem; height: 1.25rem; color: #059669; }
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen bg-gradient-to-br from-emerald-50 to-teal-100">
|
||||
<div class="container mx-auto px-4 py-12">
|
||||
<div class="placeholder-container">
|
||||
<svg class="placeholder-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M20.25 14.15v4.25c0 1.094-.787 2.036-1.872 2.18-2.087.277-4.216.42-6.378.42s-4.291-.143-6.378-.42c-1.085-.144-1.872-1.086-1.872-2.18v-4.25m16.5 0a2.18 2.18 0 00.75-1.661V8.706c0-1.081-.768-2.015-1.837-2.175a48.114 48.114 0 00-3.413-.387m4.5 8.006c-.194.165-.42.295-.673.38A23.978 23.978 0 0112 15.75c-2.648 0-5.195-.429-7.577-1.22a2.016 2.016 0 01-.673-.38m0 0A2.18 2.18 0 013 12.489V8.706c0-1.081.768-2.015 1.837-2.175a48.111 48.111 0 013.413-.387m7.5 0V5.25A2.25 2.25 0 0013.5 3h-3a2.25 2.25 0 00-2.25 2.25v.894m7.5 0a48.667 48.667 0 00-7.5 0M12 12.75h.008v.008H12v-.008z" />
|
||||
</svg>
|
||||
<h1 class="placeholder-title">매니저 시나리오</h1>
|
||||
<p class="placeholder-subtitle">
|
||||
매니저 역할에 맞는 업무 시나리오와
|
||||
의사결정 가이드를 제공합니다.
|
||||
</p>
|
||||
<div class="placeholder-badge">Management</div>
|
||||
</div>
|
||||
|
||||
<div class="max-w-4xl mx-auto mt-12">
|
||||
<div class="bg-white rounded-2xl shadow-lg p-8">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-6 flex items-center">
|
||||
<svg class="feature-icon mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
</svg>
|
||||
예정 기능
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 gap-6">
|
||||
<div class="p-4 bg-emerald-50 rounded-lg">
|
||||
<h3 class="font-semibold text-emerald-800 mb-2">매니저 업무</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 팀원 관리 시나리오</li>
|
||||
<li>• 성과 평가 가이드</li>
|
||||
<li>• 리포팅 프로세스</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="p-4 bg-blue-50 rounded-lg">
|
||||
<h3 class="font-semibold text-blue-800 mb-2">의사결정 지원</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 승인 워크플로우</li>
|
||||
<li>• 예외 처리 가이드</li>
|
||||
<li>• 이슈 에스컬레이션</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,14 +0,0 @@
|
||||
@php
|
||||
$iconMap = [
|
||||
'search' => '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />',
|
||||
'phone-call' => '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" />',
|
||||
'stethoscope' => '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" />',
|
||||
'presentation' => '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 13v-1m4 1v-3m4 3V8M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z" />',
|
||||
'scale' => '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3" />',
|
||||
'pen-tool' => '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z" />',
|
||||
];
|
||||
$path = $iconMap[$icon] ?? $iconMap['search'];
|
||||
@endphp
|
||||
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
{!! $path !!}
|
||||
</svg>
|
||||
@@ -1,62 +0,0 @@
|
||||
@extends('layouts.presentation')
|
||||
|
||||
@section('title', '영업관리 & 매니저 미팅관리')
|
||||
|
||||
@push('styles')
|
||||
<style>
|
||||
.placeholder-container { min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
||||
.placeholder-icon { width: 5rem; height: 5rem; margin-bottom: 2rem; opacity: 0.6; color: #059669; }
|
||||
.placeholder-title { font-size: 2rem; font-weight: 700; color: #059669; margin-bottom: 1rem; }
|
||||
.placeholder-subtitle { font-size: 1.25rem; color: #64748b; max-width: 500px; text-align: center; line-height: 1.8; }
|
||||
.placeholder-badge { margin-top: 2rem; padding: 0.5rem 1.5rem; background: linear-gradient(135deg, #10b981, #059669); color: white; border-radius: 9999px; font-weight: 600; font-size: 0.875rem; }
|
||||
.feature-icon { width: 1.25rem; height: 1.25rem; color: #059669; }
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen bg-gradient-to-br from-emerald-50 to-teal-100">
|
||||
<div class="container mx-auto px-4 py-12">
|
||||
<div class="placeholder-container">
|
||||
<svg class="placeholder-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M18 18.72a9.094 9.094 0 003.741-.479 3 3 0 00-4.682-2.72m.94 3.198l.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0112 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 016 18.719m12 0a5.971 5.971 0 00-.941-3.197m0 0A5.995 5.995 0 0012 12.75a5.995 5.995 0 00-5.058 2.772m0 0a3 3 0 00-4.681 2.72 8.986 8.986 0 003.74.477m.94-3.197a5.971 5.971 0 00-.94 3.197M15 6.75a3 3 0 11-6 0 3 3 0 016 0zm6 3a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0zm-13.5 0a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0z" />
|
||||
</svg>
|
||||
<h1 class="placeholder-title">영업관리 & 매니저 미팅관리</h1>
|
||||
<p class="placeholder-subtitle">
|
||||
영업 활동과 매니저 미팅을 체계적으로
|
||||
관리하고 추적하는 통합 시스템입니다.
|
||||
</p>
|
||||
<div class="placeholder-badge">Management</div>
|
||||
</div>
|
||||
|
||||
<div class="max-w-4xl mx-auto mt-12">
|
||||
<div class="bg-white rounded-2xl shadow-lg p-8">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-6 flex items-center">
|
||||
<svg class="feature-icon mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
</svg>
|
||||
예정 기능
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 gap-6">
|
||||
<div class="p-4 bg-emerald-50 rounded-lg">
|
||||
<h3 class="font-semibold text-emerald-800 mb-2">영업 관리</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 영업 활동 기록</li>
|
||||
<li>• 파이프라인 관리</li>
|
||||
<li>• 성과 대시보드</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="p-4 bg-blue-50 rounded-lg">
|
||||
<h3 class="font-semibold text-blue-800 mb-2">미팅 관리</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 미팅 일정 관리</li>
|
||||
<li>• 미팅 노트 기록</li>
|
||||
<li>• 후속 조치 추적</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,610 +0,0 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('title', 'SAM 영업 시나리오')
|
||||
|
||||
@push('styles')
|
||||
<style>
|
||||
/* Custom Scrollbar */
|
||||
::-webkit-scrollbar { width: 8px; height: 8px; }
|
||||
::-webkit-scrollbar-track { background: #f1f5f9; }
|
||||
::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 4px; }
|
||||
::-webkit-scrollbar-thumb:hover { background: #94a3b8; }
|
||||
|
||||
/* Color Palette */
|
||||
.step-blue { --step-bg: #dbeafe; --step-text: #2563eb; --step-accent: #3b82f6; }
|
||||
.step-indigo { --step-bg: #e0e7ff; --step-text: #4f46e5; --step-accent: #6366f1; }
|
||||
.step-purple { --step-bg: #f3e8ff; --step-text: #9333ea; --step-accent: #a855f7; }
|
||||
.step-pink { --step-bg: #fce7f3; --step-text: #db2777; --step-accent: #ec4899; }
|
||||
.step-orange { --step-bg: #ffedd5; --step-text: #ea580c; --step-accent: #f97316; }
|
||||
.step-green { --step-bg: #dcfce7; --step-text: #16a34a; --step-accent: #22c55e; }
|
||||
|
||||
/* Step Cards Container */
|
||||
.steps-container {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 1rem;
|
||||
overflow-x: auto;
|
||||
padding: 1rem 2rem 2rem;
|
||||
scroll-behavior: smooth;
|
||||
margin: 0 -1rem;
|
||||
}
|
||||
.steps-container::before {
|
||||
content: '';
|
||||
flex-shrink: 0;
|
||||
width: 1rem;
|
||||
}
|
||||
.steps-container::after {
|
||||
content: '';
|
||||
flex-shrink: 0;
|
||||
width: 1rem;
|
||||
}
|
||||
|
||||
/* Step Card Wrapper */
|
||||
.step-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* Step Cards - Accordion Style */
|
||||
.step-card {
|
||||
position: relative;
|
||||
padding: 1.5rem;
|
||||
border-radius: 12px;
|
||||
border: 1px solid #e2e8f0;
|
||||
background: white;
|
||||
cursor: pointer;
|
||||
transition: all 0.5s cubic-bezier(0.25, 1, 0.5, 1);
|
||||
width: 8rem;
|
||||
opacity: 0.7;
|
||||
}
|
||||
.step-card:hover {
|
||||
border-color: #cbd5e1;
|
||||
box-shadow: 0 4px 12px -2px rgba(0,0,0,0.1);
|
||||
opacity: 1;
|
||||
}
|
||||
.step-card.active {
|
||||
width: 20rem;
|
||||
opacity: 1;
|
||||
border-color: var(--step-accent);
|
||||
box-shadow: 0 20px 40px -10px rgba(59, 130, 246, 0.25);
|
||||
z-index: 10;
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
/* Step Number Badge */
|
||||
.step-number {
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 1rem;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
border-radius: 9999px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 700;
|
||||
border: 2px solid white;
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
|
||||
transition: all 0.3s;
|
||||
background: #f1f5f9;
|
||||
color: #94a3b8;
|
||||
}
|
||||
.step-card.active .step-number {
|
||||
background: var(--step-accent);
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* Step Icon */
|
||||
.step-icon {
|
||||
width: 3rem;
|
||||
height: 3rem;
|
||||
border-radius: 1rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: #f8fafc;
|
||||
color: #94a3b8;
|
||||
margin: 0 auto 1rem;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.step-card.active .step-icon {
|
||||
width: 4rem;
|
||||
height: 4rem;
|
||||
background: var(--step-bg);
|
||||
color: var(--step-text);
|
||||
}
|
||||
|
||||
/* Step Title */
|
||||
.step-title {
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
transition: all 0.3s;
|
||||
font-size: 0.75rem;
|
||||
color: #64748b;
|
||||
}
|
||||
.step-card.active .step-title {
|
||||
font-size: 1.125rem;
|
||||
color: #1e293b;
|
||||
}
|
||||
|
||||
/* Step Subtitle & Description - Hidden when inactive */
|
||||
.step-subtitle,
|
||||
.step-description {
|
||||
display: none;
|
||||
}
|
||||
.step-card.active .step-subtitle {
|
||||
display: block;
|
||||
font-size: 0.75rem;
|
||||
color: #94a3b8;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.05em;
|
||||
text-align: center;
|
||||
margin-top: 0.25rem;
|
||||
animation: fadeIn 0.3s ease-out;
|
||||
}
|
||||
.step-card.active .step-description {
|
||||
display: block;
|
||||
font-size: 0.875rem;
|
||||
color: #64748b;
|
||||
text-align: left;
|
||||
margin-top: 1rem;
|
||||
padding-top: 1rem;
|
||||
border-top: 1px solid #f1f5f9;
|
||||
line-height: 1.6;
|
||||
animation: fadeIn 0.3s ease-out;
|
||||
}
|
||||
|
||||
/* Progress Bar below card */
|
||||
.step-progress-wrapper {
|
||||
width: 6rem;
|
||||
transition: width 0.5s cubic-bezier(0.25, 1, 0.5, 1);
|
||||
}
|
||||
.step-wrapper.active .step-progress-wrapper {
|
||||
width: 16rem;
|
||||
}
|
||||
.step-progress-label {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 0.75rem;
|
||||
color: #64748b;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
.step-progress-bar {
|
||||
height: 0.5rem;
|
||||
background: #e2e8f0;
|
||||
border-radius: 9999px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.step-progress-fill {
|
||||
height: 100%;
|
||||
border-radius: 9999px;
|
||||
transition: width 1s ease-out;
|
||||
}
|
||||
|
||||
/* Animations */
|
||||
@keyframes fadeIn {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
@keyframes slideUp {
|
||||
from { transform: translateY(20px); opacity: 0; }
|
||||
to { transform: translateY(0); opacity: 1; }
|
||||
}
|
||||
.animate-slide-up {
|
||||
animation: slideUp 0.4s ease-out;
|
||||
}
|
||||
|
||||
/* Checkbox Styling */
|
||||
.checkpoint-checkbox {
|
||||
appearance: none;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
border: 2px solid #d1d5db;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s;
|
||||
position: relative;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.checkpoint-checkbox:checked {
|
||||
background: #3b82f6;
|
||||
border-color: #3b82f6;
|
||||
}
|
||||
.checkpoint-checkbox:checked::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: 6px;
|
||||
top: 2px;
|
||||
width: 5px;
|
||||
height: 10px;
|
||||
border: solid white;
|
||||
border-width: 0 2px 2px 0;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
.checkpoint-item.checked .checkpoint-title { text-decoration: line-through; color: #9ca3af; }
|
||||
.checkpoint-item.checked .checkpoint-detail { color: #9ca3af; }
|
||||
|
||||
/* Modal */
|
||||
.modal-backdrop {
|
||||
background: rgba(0,0,0,0.5);
|
||||
backdrop-filter: blur(4px);
|
||||
animation: fadeIn 0.2s ease-out;
|
||||
}
|
||||
.modal-content {
|
||||
animation: slideUp 0.3s ease-out;
|
||||
}
|
||||
|
||||
/* Progress Bar Animation */
|
||||
.progress-bar {
|
||||
background: linear-gradient(90deg, #3b82f6, #2563eb);
|
||||
transition: width 0.8s ease-out;
|
||||
position: relative;
|
||||
}
|
||||
.progress-bar::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0; left: 0; right: 0; bottom: 0;
|
||||
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent);
|
||||
animation: shimmer 2s infinite;
|
||||
}
|
||||
@keyframes shimmer {
|
||||
0% { transform: translateX(-100%); }
|
||||
100% { transform: translateX(100%); }
|
||||
}
|
||||
|
||||
/* Responsive */
|
||||
@media (max-width: 1024px) {
|
||||
.steps-container {
|
||||
padding-left: 1rem;
|
||||
padding-right: 1rem;
|
||||
}
|
||||
.step-card.active {
|
||||
width: 16rem;
|
||||
}
|
||||
.step-wrapper.active .step-progress-wrapper {
|
||||
width: 12rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="max-w-7xl mx-auto">
|
||||
<!-- 페이지 헤더 -->
|
||||
<div class="mb-6 flex items-center justify-between">
|
||||
<div>
|
||||
<h1 class="text-2xl font-bold text-gray-800">SAM 영업 시나리오</h1>
|
||||
<p class="text-gray-600 mt-1">성공적인 영업을 위한 6단계 프로세스 가이드</p>
|
||||
</div>
|
||||
<span class="text-xs font-medium px-2.5 py-1 bg-slate-100 text-slate-600 rounded-full">v1.0 Standard</span>
|
||||
</div>
|
||||
|
||||
<!-- 전체 진행 현황 -->
|
||||
<div class="bg-white rounded-xl shadow-sm border border-gray-100 p-6 mb-8">
|
||||
<div class="flex flex-col md:flex-row md:items-center md:justify-between gap-4">
|
||||
<div class="flex-1">
|
||||
<div class="flex justify-between items-end mb-2">
|
||||
<div>
|
||||
<h2 class="text-lg font-bold text-gray-900">전체 진행 현황</h2>
|
||||
<p class="text-sm text-gray-500">모든 단계의 체크포인트를 완료하여 영업 성공률을 높이세요.</p>
|
||||
</div>
|
||||
<div class="text-right">
|
||||
<span id="overall-percent" class="text-3xl font-extrabold text-blue-600">{{ $progress['percent'] }}%</span>
|
||||
<span class="text-sm text-gray-400 ml-1">완료</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="w-full bg-gray-100 rounded-full h-4 overflow-hidden relative">
|
||||
<div id="overall-progress-bar" class="progress-bar h-full rounded-full relative" style="width: {{ $progress['percent'] }}%"></div>
|
||||
</div>
|
||||
<div class="flex justify-between mt-2 text-xs text-gray-400 font-medium">
|
||||
<span>시작</span>
|
||||
<span id="progress-text">{{ $progress['checked'] }} / {{ $progress['total'] }} 항목 완료</span>
|
||||
<span>완료</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden md:flex items-center justify-center w-16 h-16 rounded-full bg-blue-50 text-blue-600 border border-blue-100 shrink-0">
|
||||
<svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 단계 카드 (가로 아코디언 스타일) -->
|
||||
<div class="steps-container">
|
||||
@foreach($steps as $step)
|
||||
@php
|
||||
$stepChecked = isset($checklist[$step['id']]) ? count($checklist[$step['id']]) : 0;
|
||||
$stepTotal = count($step['checkpoints']);
|
||||
$stepPercent = $stepTotal > 0 ? round(($stepChecked / $stepTotal) * 100) : 0;
|
||||
@endphp
|
||||
<div class="step-wrapper {{ $loop->first ? 'active' : '' }}" data-step-id="{{ $step['id'] }}">
|
||||
<div class="step-card step-{{ $step['color'] }} {{ $loop->first ? 'active' : '' }}"
|
||||
data-step-id="{{ $step['id'] }}"
|
||||
onclick="selectStep({{ $step['id'] }})">
|
||||
<!-- 단계 번호 -->
|
||||
<div class="step-number">{{ $step['id'] }}</div>
|
||||
<!-- 아이콘 -->
|
||||
<div class="step-icon">
|
||||
@include('lab.management.partials.sales-scenario-icon', ['icon' => $step['icon']])
|
||||
</div>
|
||||
<!-- 제목 -->
|
||||
<h3 class="step-title">{{ $step['title'] }}</h3>
|
||||
<p class="step-subtitle">{{ $step['subtitle'] }}</p>
|
||||
<p class="step-description">{{ $step['description'] }}</p>
|
||||
</div>
|
||||
<!-- 진행률 바 -->
|
||||
<div class="step-progress-wrapper">
|
||||
<div class="step-progress-label">
|
||||
<span>진행률</span>
|
||||
<span id="progress-percent-{{ $step['id'] }}">{{ $stepPercent }}%</span>
|
||||
</div>
|
||||
<div class="step-progress-bar">
|
||||
<div class="step-progress-fill" id="progress-fill-{{ $step['id'] }}"
|
||||
style="width: {{ $stepPercent }}%; background: var(--step-accent);"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
<!-- 상세 패널 -->
|
||||
<div id="detail-panel" class="bg-white rounded-xl shadow-lg border border-gray-100 overflow-hidden animate-slide-up">
|
||||
@foreach($steps as $step)
|
||||
<div class="step-detail {{ $loop->first ? '' : 'hidden' }}" id="detail-{{ $step['id'] }}">
|
||||
<div class="p-6 md:p-8 flex flex-col lg:flex-row gap-8">
|
||||
<!-- 좌측: 헤더 & 설명 -->
|
||||
<div class="lg:w-1/3 space-y-6">
|
||||
<div>
|
||||
<div class="inline-flex items-center gap-2 px-3 py-1 rounded-full text-xs font-bold mb-4 step-{{ $step['color'] }}" style="background: var(--step-bg); color: var(--step-text);">
|
||||
STEP {{ $step['id'] }}
|
||||
</div>
|
||||
<h2 class="text-3xl font-bold text-gray-900 mb-2">{{ $step['title'] }}</h2>
|
||||
<p class="text-lg text-gray-500 font-light">{{ $step['subtitle'] }}</p>
|
||||
</div>
|
||||
<p class="text-gray-600 leading-relaxed">{{ $step['description'] }}</p>
|
||||
<div class="p-4 bg-gray-50 rounded-xl border border-gray-100">
|
||||
<h4 class="text-sm font-bold text-gray-800 mb-2 flex items-center gap-2">
|
||||
<svg class="w-4 h-4 text-yellow-500" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z" />
|
||||
</svg>
|
||||
Sales Tip
|
||||
</h4>
|
||||
<p class="text-sm text-gray-600 italic">"{{ $step['tips'] }}"</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 우측: 체크포인트 -->
|
||||
<div class="lg:w-2/3 bg-gray-50 rounded-xl p-6 border border-gray-100">
|
||||
<h3 class="text-lg font-bold text-gray-900 mb-4 flex items-center gap-2">
|
||||
<svg class="w-5 h-5 text-blue-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4" />
|
||||
</svg>
|
||||
핵심 체크포인트
|
||||
</h3>
|
||||
<div class="space-y-3">
|
||||
@foreach($step['checkpoints'] as $idx => $checkpoint)
|
||||
<div class="checkpoint-item relative group {{ isset($checklist[$step['id']]) && in_array($idx, $checklist[$step['id']]) ? 'checked' : '' }}"
|
||||
data-step="{{ $step['id'] }}" data-index="{{ $idx }}">
|
||||
<label class="flex items-start gap-4 p-4 bg-white rounded-xl border border-gray-200 hover:border-blue-300 hover:shadow-md transition-all cursor-pointer pr-12">
|
||||
<input type="checkbox" class="checkpoint-checkbox mt-1"
|
||||
data-step="{{ $step['id'] }}"
|
||||
data-index="{{ $idx }}"
|
||||
{{ isset($checklist[$step['id']]) && in_array($idx, $checklist[$step['id']]) ? 'checked' : '' }}
|
||||
onchange="toggleCheckpoint(this)">
|
||||
<div class="flex-grow">
|
||||
<span class="checkpoint-title block text-sm font-bold text-gray-800 mb-1">{{ $checkpoint['title'] }}</span>
|
||||
<span class="checkpoint-detail block text-sm text-gray-600 leading-relaxed">{{ $checkpoint['detail'] }}</span>
|
||||
</div>
|
||||
</label>
|
||||
<!-- 꿀팁 버튼 -->
|
||||
<button onclick="showTip({{ $step['id'] }}, {{ $idx }})"
|
||||
class="absolute right-4 top-4 p-2 text-gray-400 hover:text-yellow-500 hover:bg-yellow-50 rounded-full transition-all opacity-0 group-hover:opacity-100"
|
||||
title="꿀팁 보기">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 꿀팁 모달 -->
|
||||
<div id="tip-modal" class="fixed inset-0 z-50 hidden">
|
||||
<div class="modal-backdrop absolute inset-0" onclick="closeTipModal()"></div>
|
||||
<div class="flex items-center justify-center min-h-screen p-4">
|
||||
<div class="modal-content bg-white rounded-2xl shadow-2xl w-full max-w-lg overflow-hidden relative z-10">
|
||||
<div class="p-6 border-b border-gray-100 flex justify-between items-center bg-gray-50">
|
||||
<h3 class="text-lg font-bold text-gray-900 flex items-center gap-2">
|
||||
<svg class="w-5 h-5 text-yellow-500" fill="currentColor" viewBox="0 0 24 24">
|
||||
<path d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z" />
|
||||
</svg>
|
||||
Sales Pro Tip
|
||||
</h3>
|
||||
<button onclick="closeTipModal()" class="p-2 hover:bg-gray-200 rounded-full transition-colors">
|
||||
<svg class="w-5 h-5 text-gray-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="p-6">
|
||||
<h4 id="tip-title" class="text-xl font-bold text-gray-900 mb-3"></h4>
|
||||
<p id="tip-detail" class="text-gray-600 mb-6 leading-relaxed"></p>
|
||||
<div class="bg-blue-50 border border-blue-100 rounded-xl p-5">
|
||||
<div class="flex items-start gap-3">
|
||||
<div class="p-2 bg-blue-100 rounded-lg text-blue-600 shrink-0">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14 10h4.764a2 2 0 011.789 2.894l-3.5 7A2 2 0 0115.263 21h-4.017c-.163 0-.326-.02-.485-.06L7 20m7-10V5a2 2 0 00-2-2h-.095c-.5 0-.905.405-.905.905 0 .714-.211 1.412-.608 2.006L7 11v9m7-10h-2M7 20H5a2 2 0 01-2-2v-6a2 2 0 012-2h2.5" />
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="font-bold text-blue-800 mb-1">실전 꿀팁</h5>
|
||||
<p id="tip-pro" class="text-blue-700 text-sm leading-relaxed"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-4 border-t border-gray-100 bg-gray-50 flex justify-end">
|
||||
<button onclick="closeTipModal()" class="px-4 py-2 bg-gray-900 text-white rounded-lg hover:bg-gray-800 font-medium transition-colors">
|
||||
확인
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const csrfToken = '{{ csrf_token() }}';
|
||||
const stepsData = @json($steps);
|
||||
let checklistData = @json($checklist);
|
||||
let progressData = @json($progress);
|
||||
|
||||
// 단계 선택
|
||||
window.selectStep = function(stepId) {
|
||||
// 모든 wrapper와 card에서 active 제거
|
||||
document.querySelectorAll('.step-wrapper').forEach(w => w.classList.remove('active'));
|
||||
document.querySelectorAll('.step-card').forEach(card => card.classList.remove('active'));
|
||||
|
||||
// 선택된 항목에 active 추가
|
||||
const activeWrapper = document.querySelector(`.step-wrapper[data-step-id="${stepId}"]`);
|
||||
const activeCard = document.querySelector(`.step-card[data-step-id="${stepId}"]`);
|
||||
if (activeWrapper) activeWrapper.classList.add('active');
|
||||
if (activeCard) activeCard.classList.add('active');
|
||||
|
||||
// 상세 패널 전환
|
||||
document.querySelectorAll('.step-detail').forEach(detail => detail.classList.add('hidden'));
|
||||
const detailPanel = document.getElementById(`detail-${stepId}`);
|
||||
if (detailPanel) {
|
||||
detailPanel.classList.remove('hidden');
|
||||
detailPanel.classList.add('animate-slide-up');
|
||||
}
|
||||
|
||||
// 스크롤하여 카드를 가운데로
|
||||
if (activeWrapper) {
|
||||
activeWrapper.scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' });
|
||||
}
|
||||
};
|
||||
|
||||
// 체크포인트 토글
|
||||
window.toggleCheckpoint = function(checkbox) {
|
||||
const stepId = parseInt(checkbox.dataset.step);
|
||||
const index = parseInt(checkbox.dataset.index);
|
||||
const isChecked = checkbox.checked;
|
||||
|
||||
// UI 즉시 업데이트
|
||||
const item = checkbox.closest('.checkpoint-item');
|
||||
if (isChecked) {
|
||||
item.classList.add('checked');
|
||||
} else {
|
||||
item.classList.remove('checked');
|
||||
}
|
||||
|
||||
// API 호출
|
||||
fetch('{{ route("lab.management.sales-scenario.toggle") }}', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'X-CSRF-TOKEN': csrfToken
|
||||
},
|
||||
body: JSON.stringify({
|
||||
step_id: stepId,
|
||||
checkpoint_index: index,
|
||||
is_checked: isChecked
|
||||
})
|
||||
})
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
checklistData[stepId] = data.data;
|
||||
progressData = data.progress;
|
||||
updateProgressUI();
|
||||
updateStepProgress(stepId);
|
||||
} else {
|
||||
// 실패시 롤백
|
||||
checkbox.checked = !isChecked;
|
||||
item.classList.toggle('checked');
|
||||
showToast(data.message || '저장에 실패했습니다.', 'error');
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.error('API Error:', err);
|
||||
checkbox.checked = !isChecked;
|
||||
item.classList.toggle('checked');
|
||||
showToast('네트워크 오류가 발생했습니다.', 'error');
|
||||
});
|
||||
};
|
||||
|
||||
// 진행률 UI 업데이트
|
||||
function updateProgressUI() {
|
||||
document.getElementById('overall-percent').textContent = progressData.percent + '%';
|
||||
document.getElementById('overall-progress-bar').style.width = progressData.percent + '%';
|
||||
document.getElementById('progress-text').textContent = `${progressData.checked} / ${progressData.total} 항목 완료`;
|
||||
}
|
||||
|
||||
// 단계별 진행률 업데이트
|
||||
function updateStepProgress(stepId) {
|
||||
const step = stepsData.find(s => s.id === stepId);
|
||||
if (!step) return;
|
||||
|
||||
const checked = checklistData[stepId] ? checklistData[stepId].length : 0;
|
||||
const total = step.checkpoints.length;
|
||||
const percent = Math.round((checked / total) * 100);
|
||||
|
||||
const percentEl = document.getElementById(`progress-percent-${stepId}`);
|
||||
const fillEl = document.getElementById(`progress-fill-${stepId}`);
|
||||
if (percentEl) percentEl.textContent = percent + '%';
|
||||
if (fillEl) fillEl.style.width = percent + '%';
|
||||
}
|
||||
|
||||
// 꿀팁 모달 표시
|
||||
window.showTip = function(stepId, index) {
|
||||
const step = stepsData.find(s => s.id === stepId);
|
||||
if (!step) return;
|
||||
|
||||
const checkpoint = step.checkpoints[index];
|
||||
if (!checkpoint) return;
|
||||
|
||||
document.getElementById('tip-title').textContent = checkpoint.title;
|
||||
document.getElementById('tip-detail').textContent = checkpoint.detail;
|
||||
document.getElementById('tip-pro').textContent = checkpoint.pro_tip;
|
||||
document.getElementById('tip-modal').classList.remove('hidden');
|
||||
};
|
||||
|
||||
// 꿀팁 모달 닫기
|
||||
window.closeTipModal = function() {
|
||||
document.getElementById('tip-modal').classList.add('hidden');
|
||||
};
|
||||
|
||||
// ESC 키로 모달 닫기
|
||||
document.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Escape') {
|
||||
closeTipModal();
|
||||
}
|
||||
});
|
||||
|
||||
// 토스트 메시지 (간단한 구현)
|
||||
window.showToast = function(message, type = 'info') {
|
||||
console.log(`[${type.toUpperCase()}] ${message}`);
|
||||
};
|
||||
|
||||
// 첫 번째 카드 활성화
|
||||
selectStep(1);
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -1,62 +0,0 @@
|
||||
@extends('layouts.presentation')
|
||||
|
||||
@section('title', '전자세금계산서 전략')
|
||||
|
||||
@push('styles')
|
||||
<style>
|
||||
.placeholder-container { min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
||||
.placeholder-icon { width: 5rem; height: 5rem; margin-bottom: 2rem; opacity: 0.6; color: #059669; }
|
||||
.placeholder-title { font-size: 2rem; font-weight: 700; color: #059669; margin-bottom: 1rem; }
|
||||
.placeholder-subtitle { font-size: 1.25rem; color: #64748b; max-width: 500px; text-align: center; line-height: 1.8; }
|
||||
.placeholder-badge { margin-top: 2rem; padding: 0.5rem 1.5rem; background: linear-gradient(135deg, #10b981, #059669); color: white; border-radius: 9999px; font-weight: 600; font-size: 0.875rem; }
|
||||
.feature-icon { width: 1.25rem; height: 1.25rem; color: #059669; }
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen bg-gradient-to-br from-emerald-50 to-teal-100">
|
||||
<div class="container mx-auto px-4 py-12">
|
||||
<div class="placeholder-container">
|
||||
<svg class="placeholder-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 01-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 011.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 00-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 01-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 00-3.375-3.375h-1.5a1.125 1.125 0 01-1.125-1.125v-1.5a3.375 3.375 0 00-3.375-3.375H9.75" />
|
||||
</svg>
|
||||
<h1 class="placeholder-title">전자세금계산서 전략</h1>
|
||||
<p class="placeholder-subtitle">
|
||||
전자세금계산서 발행/수취 자동화 및
|
||||
세무 업무 효율화 전략을 수립합니다.
|
||||
</p>
|
||||
<div class="placeholder-badge">Management</div>
|
||||
</div>
|
||||
|
||||
<div class="max-w-4xl mx-auto mt-12">
|
||||
<div class="bg-white rounded-2xl shadow-lg p-8">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-6 flex items-center">
|
||||
<svg class="feature-icon mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
</svg>
|
||||
예정 기능
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 gap-6">
|
||||
<div class="p-4 bg-emerald-50 rounded-lg">
|
||||
<h3 class="font-semibold text-emerald-800 mb-2">발행 자동화</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 거래처별 자동 발행</li>
|
||||
<li>• 주기적 발행 스케줄</li>
|
||||
<li>• 대량 발행 처리</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="p-4 bg-blue-50 rounded-lg">
|
||||
<h3 class="font-semibold text-blue-800 mb-2">수취 관리</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 자동 수취 확인</li>
|
||||
<li>• 매입 세금계산서 매칭</li>
|
||||
<li>• 부가세 신고 연계</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -1,62 +0,0 @@
|
||||
@extends('layouts.presentation')
|
||||
|
||||
@section('title', '전자세금계산서')
|
||||
|
||||
@push('styles')
|
||||
<style>
|
||||
.placeholder-container { min-height: 70vh; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
||||
.placeholder-icon { width: 5rem; height: 5rem; margin-bottom: 2rem; opacity: 0.6; color: #059669; }
|
||||
.placeholder-title { font-size: 2rem; font-weight: 700; color: #059669; margin-bottom: 1rem; }
|
||||
.placeholder-subtitle { font-size: 1.25rem; color: #64748b; max-width: 500px; text-align: center; line-height: 1.8; }
|
||||
.placeholder-badge { margin-top: 2rem; padding: 0.5rem 1.5rem; background: linear-gradient(135deg, #10b981, #059669); color: white; border-radius: 9999px; font-weight: 600; font-size: 0.875rem; }
|
||||
.feature-icon { width: 1.25rem; height: 1.25rem; color: #059669; }
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
<div class="min-h-screen bg-gradient-to-br from-emerald-50 to-teal-100">
|
||||
<div class="container mx-auto px-4 py-12">
|
||||
<div class="placeholder-container">
|
||||
<svg class="placeholder-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" />
|
||||
</svg>
|
||||
<h1 class="placeholder-title">전자세금계산서</h1>
|
||||
<p class="placeholder-subtitle">
|
||||
전자세금계산서 발행, 조회, 관리를 위한
|
||||
통합 관리 시스템입니다.
|
||||
</p>
|
||||
<div class="placeholder-badge">Management</div>
|
||||
</div>
|
||||
|
||||
<div class="max-w-4xl mx-auto mt-12">
|
||||
<div class="bg-white rounded-2xl shadow-lg p-8">
|
||||
<h2 class="text-xl font-bold text-gray-800 mb-6 flex items-center">
|
||||
<svg class="feature-icon mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z" />
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" />
|
||||
</svg>
|
||||
예정 기능
|
||||
</h2>
|
||||
<div class="grid md:grid-cols-2 gap-6">
|
||||
<div class="p-4 bg-emerald-50 rounded-lg">
|
||||
<h3 class="font-semibold text-emerald-800 mb-2">세금계산서 발행</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 정발행/역발행 지원</li>
|
||||
<li>• 수정세금계산서</li>
|
||||
<li>• 발행 이력 관리</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="p-4 bg-blue-50 rounded-lg">
|
||||
<h3 class="font-semibold text-blue-800 mb-2">조회/관리</h3>
|
||||
<ul class="text-sm text-gray-600 space-y-1">
|
||||
<li>• 기간별 조회</li>
|
||||
<li>• 상태별 필터링</li>
|
||||
<li>• PDF 다운로드</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@@ -434,26 +434,6 @@ class="flex items-center gap-2 pr-3 py-2 rounded-lg text-sm text-gray-700 hover:
|
||||
<li class="border-t border-gray-100 pt-1 mt-1"></li>
|
||||
<li><a href="{{ route('lab.ai.sam-ai-menu') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="SAM AI 메뉴 이동"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z" /></svg><span class="font-medium sidebar-text">SAM AI 메뉴 이동</span></a></li>
|
||||
<li><a href="{{ route('lab.ai.sam-ai-alarm') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="SAM AI 알람음 제작"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z" /></svg><span class="font-medium sidebar-text">SAM AI 알람음 제작</span></a></li>
|
||||
<li class="border-t border-gray-100 pt-1 mt-1"></li>
|
||||
<li><a href="{{ route('lab.ai.gps-attendance') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="GPS 출퇴근 관리"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" /><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 11a3 3 0 11-6 0 3 3 0 016 0z" /></svg><span class="font-medium sidebar-text">GPS 출퇴근 관리</span></a></li>
|
||||
<li><a href="{{ route('lab.ai.company-overview') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="기업개황 조회"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4" /></svg><span class="font-medium sidebar-text">기업개황 조회</span></a></li>
|
||||
</ul>
|
||||
|
||||
<!-- M. Management 메뉴 (11개) -->
|
||||
<ul id="lab-panel-m" class="lab-panel space-y-1 hidden">
|
||||
<li><a href="{{ route('lab.management.barobill-tenant') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="바로빌 테넌트 관리"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4" /></svg><span class="font-medium sidebar-text">바로빌 테넌트 관리</span></a></li>
|
||||
<li><a href="{{ route('lab.management.tax-invoice-strategy') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="전자세금계산서 전략"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 14l6-6m-5.5.5h.01m4.99 5h.01M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16l3.5-2 3.5 2 3.5-2 3.5 2z" /></svg><span class="font-medium sidebar-text">전자세금계산서 전략</span></a></li>
|
||||
<li><a href="{{ route('lab.management.tax-invoice') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="전자세금계산서"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 14l6-6m-5.5.5h.01m4.99 5h.01M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16l3.5-2 3.5 2 3.5-2 3.5 2zM10 8.5a.5.5 0 11-1 0 .5.5 0 011 0zm5 5a.5.5 0 11-1 0 .5.5 0 011 0z" /></svg><span class="font-medium sidebar-text">전자세금계산서</span></a></li>
|
||||
<li><a href="{{ route('lab.management.business-verify') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="사업자등록번호 진위 확인"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" /></svg><span class="font-medium sidebar-text">사업자등록번호 진위 확인</span></a></li>
|
||||
<li><a href="{{ route('lab.management.sales-meeting') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="영업관리 & 매니저 미팅관리"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" /></svg><span class="font-medium sidebar-text">영업관리 & 매니저 미팅관리</span></a></li>
|
||||
<li class="border-t border-gray-100 pt-1 mt-1"></li>
|
||||
<li><a href="{{ route('lab.management.card-tax-matching') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="카드 세무항목 매칭 전략"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z" /></svg><span class="font-medium sidebar-text">카드 세무항목 매칭 전략</span></a></li>
|
||||
<li><a href="{{ route('lab.management.card-api-report') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="한국 카드사 API 보고서"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" /></svg><span class="font-medium sidebar-text">한국 카드사 API 보고서</span></a></li>
|
||||
<li><a href="{{ route('lab.management.card-usage-matching') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="카드 사용내역 수집 후 매칭"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4" /></svg><span class="font-medium sidebar-text">카드 사용내역 수집 후 매칭</span></a></li>
|
||||
<li><a href="{{ route('lab.management.account-api') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="계좌입출금 내역 조회 API"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3" /></svg><span class="font-medium sidebar-text">계좌입출금 내역 조회 API</span></a></li>
|
||||
<li class="border-t border-gray-100 pt-1 mt-1"></li>
|
||||
<li><a href="{{ route('lab.management.sales-scenario') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="영업관리 시나리오"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" /></svg><span class="font-medium sidebar-text">영업관리 시나리오</span></a></li>
|
||||
<li><a href="{{ route('lab.management.manager-scenario') }}" class="flex items-center gap-2 px-3 py-2 rounded-lg text-sm text-gray-600 hover:bg-gray-100 hover:text-gray-900 transition-colors" title="매니저 시나리오"><svg class="w-4 h-4 flex-shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" /></svg><span class="font-medium sidebar-text">매니저 시나리오</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -522,21 +502,6 @@ class="flex items-center gap-2 pr-3 py-2 rounded-lg text-sm text-gray-700 hover:
|
||||
<li><a href="{{ route('lab.ai.sam-ai-menu') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">SAM AI 메뉴 이동</a></li>
|
||||
<li><a href="{{ route('lab.ai.sam-ai-alarm') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">SAM AI 알람음 제작</a></li>
|
||||
</ul>
|
||||
<!-- M. Management (11개) -->
|
||||
<ul id="lab-flyout-panel-m" class="lab-flyout-panel space-y-0.5 hidden">
|
||||
<li><a href="{{ route('lab.management.barobill-tenant') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">바로빌 테넌트 관리</a></li>
|
||||
<li><a href="{{ route('lab.management.tax-invoice-strategy') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">전자세금계산서 전략</a></li>
|
||||
<li><a href="{{ route('lab.management.tax-invoice') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">전자세금계산서</a></li>
|
||||
<li><a href="{{ route('lab.management.business-verify') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">사업자등록번호 진위 확인</a></li>
|
||||
<li><a href="{{ route('lab.management.sales-meeting') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">영업관리 & 매니저 미팅</a></li>
|
||||
<li class="border-t border-gray-100 my-1"></li>
|
||||
<li><a href="{{ route('lab.management.card-tax-matching') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">카드 세무항목 매칭 전략</a></li>
|
||||
<li><a href="{{ route('lab.management.card-usage-matching') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">카드 사용내역 수집 후 매칭</a></li>
|
||||
<li><a href="{{ route('lab.management.account-api') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">계좌입출금 내역 조회 API</a></li>
|
||||
<li class="border-t border-gray-100 my-1"></li>
|
||||
<li><a href="{{ route('lab.management.sales-scenario') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">영업관리 시나리오</a></li>
|
||||
<li><a href="{{ route('lab.management.manager-scenario') }}" class="block px-2 py-1 text-xs text-gray-600 rounded hover:bg-gray-100 hover:text-gray-900">매니저 시나리오</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -469,22 +469,6 @@
|
||||
Route::get('/sam-ai-menu', [AIController::class, 'samAiMenu'])->name('sam-ai-menu');
|
||||
Route::get('/sam-ai-alarm', [AIController::class, 'samAiAlarm'])->name('sam-ai-alarm');
|
||||
});
|
||||
|
||||
// M. 관리 (Management)
|
||||
Route::prefix('management')->name('management.')->group(function () {
|
||||
Route::get('/barobill-tenant', [ManagementController::class, 'barobillTenant'])->name('barobill-tenant');
|
||||
Route::get('/tax-invoice-strategy', [ManagementController::class, 'taxInvoiceStrategy'])->name('tax-invoice-strategy');
|
||||
Route::get('/tax-invoice', [ManagementController::class, 'taxInvoice'])->name('tax-invoice');
|
||||
Route::get('/business-verify', [ManagementController::class, 'businessVerify'])->name('business-verify');
|
||||
Route::get('/sales-meeting', [ManagementController::class, 'salesMeeting'])->name('sales-meeting');
|
||||
Route::get('/card-tax-matching', [ManagementController::class, 'cardTaxMatching'])->name('card-tax-matching');
|
||||
Route::get('/card-usage-matching', [ManagementController::class, 'cardUsageMatching'])->name('card-usage-matching');
|
||||
Route::get('/account-api', [ManagementController::class, 'accountApi'])->name('account-api');
|
||||
Route::get('/sales-scenario', [ManagementController::class, 'salesScenario'])->name('sales-scenario');
|
||||
Route::get('/sales-scenario/checklist', [ManagementController::class, 'salesScenarioChecklist'])->name('sales-scenario.checklist');
|
||||
Route::post('/sales-scenario/toggle', [ManagementController::class, 'salesScenarioToggle'])->name('sales-scenario.toggle');
|
||||
Route::get('/manager-scenario', [ManagementController::class, 'managerScenario'])->name('manager-scenario');
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user