ncss2 / index.html
r2d209's picture
λ‹€μŒ "λ°°κ²½ 지식"을 μ°Έκ³ ν•΄, NCSS CP μ •μ‚°μ‹œμŠ€ν…œμ—μ„œ "NCSSλ‚΄ μ„ΈκΈˆκ³„μ‚°μ„œ 쑰회 및 μ „ν‘œλ°œν–‰ κΈ°λŠ₯ μ •μ˜" λ‚΄μ—­ 기반 화면듀을 μ œμ•ˆν•΄μ€˜. μ΄λ•Œ "κ°œμ„  포인트"에 μ–ΈκΈ‰ν•œ λ‚΄μš©λ„ 반영될 수 있게 ν•΄μ€˜ #λ°°κ²½ 지식 SKλΈŒλ‘œλ“œλ°΄λ“œλŠ” CP(Contents Provider)μ—μ„œ μ˜ν™”, λ“œλΌλ§ˆλ“±μ˜ μ½˜ν…μΈ λ₯Ό μˆ˜κΈ‰ν•΄ IPTVλ‚΄ VoD μ„œλΉ„μŠ€λ₯Ό μ œκ³΅μ€‘μ΄κ³ , 이 μ„œλΉ„μŠ€μ—μ„œ λ§€μ›” λ°œμƒν•œ 맀좜 λŒ€μƒ 각 CP별 κ³„μ•½μ‘°κ±΄μœΌλ‘œ μ •μ‚°ν•˜λŠ” NCSSλΌλŠ” μ‹œμŠ€ν…œμ΄ μžˆλ‹€. NCSSμ—λŠ” CP와 계약을 맺은 μ •μ‚°λ‹΄λ‹Ήμžλ“€μ΄ 계약쑰건을 μž…λ ₯ν•˜κ³ , κ·Έ 계약 쑰건에 따라 μ •μ‚°κ²°κ³Όκ°€ μ‚°μΆœλœλ‹€. PoCλΌλŠ” μš©μ–΄λŠ” VoDκ°€ νŽΈμ„±λ˜μ–΄ 맀좜이 λ°œμƒν•˜λŠ” 맀체 λ‹¨μœ„μ΄λ©°, B tv, IP-CATV, T Play μ„Έκ°€μ§€κ°€ μ‘΄μž¬ν•œλ‹€. NCSS상에 계약은 λ™μΌν•œ CP이더라도 각 μ •μ‚°λ‹΄λ‹Ήμžλ§ˆλ‹€ λ‹€λ₯Έ 쑰건에 따라 λ‹€μˆ˜μ˜ 계약을 μž…λ ₯ν•˜κ³  이에 따라 각 λ‹΄λ‹Ήμžμ˜ 계약별 μ •μ‚°κ²°κ³Όκ°€ μ‚°μΆœλœλ‹€. 즉, μ •μ‚°κ²°κ³ΌλŠ” 각 μ •μ‚°λ‹΄λ‹Ήμžμ˜ κ³„μ•½λ³„λ‘œ PoCλ‹¨μœ„λ‘œ κ·Έλ£Ήν•‘ λ˜μ–΄ μ‚°μΆœλœλ‹€. CPκ°€ λ°œν–‰ν•˜λŠ” μ„ΈκΈˆκ³„μ‚°μ„œλŠ” μ‚¬μ—…μžλͺ…, μ‚¬μ—…μžλ²ˆν˜Έ, 곡급가앑, μ„Έμ•‘, λ°œν–‰μΌ μ •λ³΄λ§Œ 있고, λŒ€μƒ PoCμ •λ³΄λ‚˜ SKλΈŒλ‘œλ“œλ°΄λ“œ μ •μ‚°λ‹΄λ‹Ήμž μ •λ³΄λŠ” μ œκ³΅λ˜μ§€ μ•ŠλŠ”λ‹€. μ„ΈκΈˆκ³„μ‚°μ„œλŠ” μ„œλΉ„μŠ€κ°€ μ œκ³΅λ˜λŠ” 맀체 λ‹¨μœ„μΈ PoC λ³„λ‘œ λ°œν–‰λœλ‹€. #NCSSλ‚΄ μ„ΈκΈˆκ³„μ‚°μ„œ 쑰회 및 μ „ν‘œλ°œν–‰ κΈ°λŠ₯ μ •μ˜ SKλΈŒλ‘œλ“œλ°΄λ“œ SAP에 λ“±λ‘λœ μœ„ "λ°°κ²½ 지식"에 κΈ°μˆ ν•œ 쑰건의 μ„ΈκΈˆκ³„μ‚°μ„œλ₯Ό μ‘°νšŒν•΄ μ •μ‚°λ‹΄λ‹ΉμžλŠ” 본인이 계약을 κ°€μ§€κ³  μžˆλŠ” λͺ¨λ“  CPλ‘œλΆ€ν„° λ°œν–‰λœ μ„ΈκΈˆκ³„μ‚°μ„œ λͺ©λ‘λ§Œ 필터링해 μ‘°νšŒν•  수 μžˆμ–΄μ•Ό ν•œλ‹€. 쑰회된 μ„ΈκΈˆκ³„μ‚°μ„œ λͺ©λ‘ ν™”λ©΄μ—μ„œ μ„ΈκΈˆκ³„μ‚°μ„œ 쀑 ν•˜λ‚˜λ₯Ό 선택해 μ„ΈλΆ€ νŒμ—…(=μž„μ‹œμ „ν‘œ λ°œν–‰ ν™”λ©΄) 으둜 λ“€μ–΄κ°€λ©΄ μžμ‹ μ΄ λ‹΄λ‹Ήν•˜λŠ” κ³„μ•½λ³„λ‘œ PoCλ‹¨μœ„ κ·Έλ£Ήν•‘λ˜μ–΄ μ‚°μΆœλœ 볡수개의 μ •μ‚°κ²°κ³Ό κΈˆμ•‘λ“€κ³Ό λŒ€μ‘°, 선택해 μ„ΈκΈˆκ³„μ‚°μ„œ-μ •μ‚°κ²°κ³Ό λ§€μΉ­ν•¨μœΌλ‘œ SAP에 μž„μ‹œμ „ν‘œλ₯Ό λ°œν–‰ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€. μ„ΈκΈˆκ³„μ‚°μ„œλŠ” μ‚¬μ—…μžλͺ…, μ‚¬μ—…μžλ²ˆν˜Έ, 곡급가앑, μ„Έμ•‘, λ°œν–‰μΌ μ •λ³΄λ§Œ μžˆμ–΄,Β  μ„ΈκΈˆκ³„μ‚°μ„œ λͺ©λ‘ ν™”λ©΄ 제곡 정보 μ„ΈκΈˆκ³„μ‚°μ„œ λ°œν–‰μΌμž, μ„ΈκΈˆκ³„μ‚°μ„œ 번호, νŒŒνŠΈλ„ˆμ‚¬λͺ…, λ§€μž…κΈˆμ•‘(μ„ΈκΈˆκ³„μ‚°μ„œ μƒμ˜ 세앑이 ν¬ν•¨λ˜μ§€ μ•Šμ€ 곡급가앑), μ „ν‘œλ°œν–‰μƒνƒœ, λ§€μΉ­PoC 이듀 제곡 ν•­λͺ© λ³„λ‘œ ν•„ν„°λ§ν•΄μ„œ μ‘°νšŒν•  수 μžˆλ„λ‘ 제곡 μ „ν‘œλ°œν–‰μƒνƒœ : 이미 μ„ΈκΈˆκ³„μ‚°μ„œ-μ •μ‚°κ²°κ³Όλ₯Ό λ§€μΉ­ν•΄ μž„μ‹œμ „ν‘œ λ°œν–‰λœ ν•­λͺ©μ€ "λ°œν–‰μ™„λ£Œ"둜 μƒνƒœ ν‘œμ‹œλ˜κ³ , 아직 λ§€μΉ­λ˜μ§€ μ•Šμ€ 건 "λ―Έλ°œν–‰"으둜 ꡬ뢄해 μƒνƒœ ν‘œκΈ° λ§€μΉ­PoC : μ„ΈκΈˆκ³„μ‚°μ„œ-μ •μ‚°κ²°κ³Όλ₯Ό λ§€μΉ­ν•΄ μž„μ‹œμ „ν‘œ λ°œν–‰μ‹œ 맀칭된 μ •μ‚°κ²°κ³Όμ˜ PoC ν‘œκΈ° μž„μ‹œμ „ν‘œ λ°œν–‰ ν™”λ©΄ 제곡 정보 νŒμ—… ν™”λ©΄μœΌλ‘œ 제곡 νŒμ—…ν™”λ©΄ μ’ŒμΈ‘μ—λŠ” "μ„ΈκΈˆκ²Œμ‚°μ„œ 정보" 제λͺ© μ΄ν•˜λ‘œ μ„ΈκΈˆκ³„μ‚°μ„œ λ°œν–‰μΌμž, μ„ΈκΈˆκ³„μ‚°μ„œ 번호, νŒŒνŠΈλ„ˆμ‚¬λͺ…, λ§€μž…κΈˆμ•‘, μ „ν‘œλ°œν–‰μƒνƒœ, λ§€μΉ­PoC ν‘œμ‹œν•˜κ³  νŒμ—…ν™”λ©΄ μš°μΈ‘μ—λŠ” "μ •μ‚° 정보 λ§€ν•‘" 제λͺ© μ΄ν•˜λ‘œ ν•΄λ‹Ή CP의 PoC별 μ •μ‚°κΈˆμ•‘ λͺ©λ‘ 제곡, 이 λͺ©λ‘μ€‘에 μ„ΈκΈˆκ³„μ‚°μ„œμƒ λ§€μž…κΈˆμ•‘κ³Ό μΌμΉ˜ν•˜λŠ” μ •μ‚°κΈˆμ•‘μ΄ 있으면 μžλ™μœΌλ‘œ μ²΄ν¬λ°•μŠ€μ— λ§€μΉ­ ν‘œμ‹œ CP의 PoC별 μ •μ‚°κΈˆμ•‘ λͺ©λ‘ 우츑의 "상세내역" λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄, ν•΄λ‹Ή λͺ©λ‘μ˜ μ •μ‚°κΈˆμ•‘μ΄ μ–΄λ–€ 계약과 PoCλ“€μ—μ„œ 각각 μ–Όλ§ˆμ˜ μ •μ‚°κΈˆμ•‘μ΄ λ°œμƒν•œκ±΄μ§€ μ„ΈλΆ€ λ‚΄μ—­ 확인 ν™”λ©΄ 제곡 μ „ν‘œλ°£ν–‰μƒνƒœκ°€ "λ―Έλ°œν–‰"μƒνƒœμΌλ•Œλ¬Έ νŒμ—… ν™”λ©΄ 우츑 ν•˜λ‹¨μ— "μž„μ‹œμ „ν‘œ λ°œν–‰" λ²„νŠΌμ΄ ν™œμ„±ν™”λ¨ #κ°œμ„  포인트 μ„ΈκΈˆκ³„μ‚°μ„œλŠ” μ‚¬μ—…μžλͺ…, 번호, κΈˆμ•‘ μ •λ³΄λ§Œ μžˆμ§€ λŒ€μƒ PoC와 SKB μ •μ‚°λ‹΄λ‹Ήμž μ •λ³΄λŠ” μ—†μœΌλ―€λ‘œ, PoC(B tv, IP-CATV, T Play) 별 μ„ΈκΈˆκ³„μ‚°μ„œκ°€ μ–΄λ–€ 것인지 기본적으둜 맀핑이 λΆˆκ°€ν•˜λ‚˜ 일일이 μ •μ‚°λ‹΄λ‹Ήμžκ°€ μ„ΈκΈˆκ³„μ‚°μ„œ-μ •μ‚°κ²°κ³Όμ˜ κΈˆμ•‘μ„ λŒ€μ‘°ν•˜μ—¬ μ „ν‘œλ₯Ό λ°œν–‰ν•˜λ©΄ μ‚¬μš©μ„±μ΄ λ–¨μ–΄μ§€λ―€λ‘œ, 기본적으둜 λ‹΄λ‹Ήμžμ˜ ν•΄λ‹Ή CP λŒ€μƒ 계약(SVOD, TVOD)을 PoC λ³„λ‘œ ν•©μ‚°ν•œ μ •μ‚°κ²°κ³Ό κΈˆμ•‘μ΄ CPμ—μ„œ 계약에 λŒ€ν•œ PoC별 λ°œν–‰ λ‚΄μ—­κ³Ό μΌμΉ˜ν•΄μ•Ό ν•˜λ―€λ‘œ NCSSμ—μ„œ νŒλ‹¨μ‹œ μ •μ‚°λ‹΄λ‹Ήμžκ°€ μžμ‹ μ˜ μ„ΈκΈˆκ³„μ‚°μ„œ-μ „ν‘œ 발의 λŒ€μƒ CPλ₯Ό μ‘°νšŒν•˜λŠ” μ„ΈκΈˆκ³„μ‚°μ„œ 쑰회 ν™”λ©΄μƒμ—μ„œ λ°œν–‰λœ μ„ΈκΈˆκ³„μ‚°μ„œμƒ κΈˆμ•‘κ³Ό ν•΄λ‹Ή CP의 μ •μ‚°κ²°κ³Ό κΈˆμ•‘ 쀑 일치 κΈˆμ•‘μ΄ μžˆμ„μ‹œ 이λ₯Ό μžλ™ λ§€μΉ­ν•˜μ—¬ μ„ΈκΈˆκ³„μ‚°μ„œ λͺ©λ‘ 화면상에 ν•΄λ‹Ή μ •μ‚°λŒ€μƒκΈˆμ•‘λ„ 같이 λ…ΈμΆœν•˜κ³  이 리슀트의 배경을 ν•˜μ΄λΌμ΄νŠΈλ˜κ²Œ λ‹€λ₯Έμƒ‰μœΌλ‘œ ν‘œκΈ°ν•˜μ—¬, λ§¨μ•žμ˜ μ²΄ν¬λ°•μŠ€ λ©€ν‹°λ‘œ 이듀 λŒ€μƒ 선택해 ν™”λ©΄ ν•˜λ‹¨μ˜ "μž„μ‹œμ „ν‘œ λ°œν–‰" λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μ„ νƒλœ λŒ€μƒμ€ μΌκ΄„λ‘œ SAP μž„μ‹œ μ „ν‘œκ°€ λ°œν–‰λ˜λ„λ‘ μ‚¬μš©μ„± κ°œμ„  - Initial Deployment
6d53cd9 verified
Raw
History Blame Contribute Delete
33.6 kB
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NCSS CP μ •μ‚° μ‹œμŠ€ν…œ - μ„ΈκΈˆκ³„μ‚°μ„œ 관리</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<script>
tailwind.config = {
theme: {
extend: {
colors: {
primary: '#3b82f6',
secondary: '#10b981',
highlight: '#fef3c7',
dark: '#1f2937',
}
}
}
}
</script>
<style>
.highlight-row {
background-color: #fef3c7;
}
.receipt-matched {
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.3); }
70% { box-shadow: 0 0 0 10px rgba(16, 185, 129, 0); }
100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0); }
}
.receipt-card {
transition: all 0.3s ease;
}
.receipt-card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
</style>
</head>
<body class="bg-gray-50 min-h-screen">
<div class="container mx-auto px-4 py-8">
<!-- 헀더 μ˜μ—­ -->
<header class="mb-8">
<div class="flex justify-between items-center">
<div>
<h1 class="text-3xl font-bold text-dark">NCSS CP μ •μ‚° μ‹œμŠ€ν…œ</h1>
<p class="text-gray-600">μ„ΈκΈˆκ³„μ‚°μ„œ 쑰회 및 μ „ν‘œλ°œν–‰</p>
</div>
<div class="flex items-center space-x-4">
<div class="relative">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
<i class="fas fa-user text-gray-400"></i>
</div>
<span class="pl-8 text-gray-700">κΉ€μ •μ‚° (μ •μ‚°λ‹΄λ‹Ήμž)</span>
</div>
<button class="bg-primary text-white px-4 py-2 rounded-lg hover:bg-blue-700 transition">
<i class="fas fa-sign-out-alt mr-2"></i>λ‘œκ·Έμ•„μ›ƒ
</button>
</div>
</div>
</header>
<!-- ν•„ν„° μ˜μ—­ -->
<div class="bg-white rounded-lg shadow-md p-6 mb-6">
<h2 class="text-xl font-semibold mb-4 text-dark">μ„ΈκΈˆκ³„μ‚°μ„œ 쑰회 ν•„ν„°</h2>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4">
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">κΈ°κ°„</label>
<div class="flex space-x-2">
<input type="date" class="w-full border-gray-300 rounded-md p-2 border focus:ring-primary focus:border-primary">
<span class="flex items-center">~</span>
<input type="date" class="w-full border-gray-300 rounded-md p-2 border focus:ring-primary focus:border-primary">
</div>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">CP사λͺ…</label>
<select class="w-full border-gray-300 rounded-md p-2 border focus:ring-primary focus:border-primary">
<option value="">전체</option>
<option value="1">λ„·ν”Œλ¦­μŠ€</option>
<option value="2">λ””μ¦ˆλ‹ˆ+</option>
<option value="3">μ›¨μ΄λΈŒ</option>
<option value="4">ν‹°λΉ™</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">PoC</label>
<select class="w-full border-gray-300 rounded-md p-2 border focus:ring-primary focus:border-primary">
<option value="">전체</option>
<option value="Btv">B tv</option>
<option value="IP-CATV">IP-CATV</option>
<option value="TPlay">T Play</option>
</select>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-1">μ „ν‘œ μƒνƒœ</label>
<select class="w-full border-gray-300 rounded-md p-2 border focus:ring-primary focus:border-primary">
<option value="">전체</option>
<option value="issued">λ°œν–‰μ™„λ£Œ</option>
<option value="not_issued">λ―Έλ°œν–‰</option>
</select>
</div>
</div>
<div class="mt-4 flex justify-end">
<button id="searchBtn" class="bg-primary text-white px-6 py-2 rounded-lg hover:bg-blue-700 transition">
<i class="fas fa-search mr-2"></i>쑰회
</button>
</div>
</div>
<!-- μ•Œλ¦Ό μ˜μ—­ -->
<div id="autoMatchAlert" class="bg-green-100 border-l-4 border-green-500 text-green-700 p-4 mb-6 rounded hidden">
<div class="flex items-center">
<i class="fas fa-info-circle text-green-500 mr-3 text-xl"></i>
<div>
<p class="font-semibold">μžλ™ λ§€μΉ­ μ™„λ£Œ</p>
<p class="text-sm">μ„ΈκΈˆκ³„μ‚°μ„œ κΈˆμ•‘κ³Ό μ •μ‚°κ²°κ³Ό κΈˆμ•‘μ΄ μΌμΉ˜ν•˜λŠ” <span id="matchedCount">3</span>건이 μžλ™μœΌλ‘œ λ§€μΉ­λ˜μ—ˆμŠ΅λ‹ˆλ‹€.</p>
</div>
</div>
</div>
<!-- κ²°κ³Ό μ˜μ—­ -->
<div class="bg-white rounded-lg shadow-md overflow-hidden">
<div class="flex justify-between items-center p-4 border-b">
<h2 class="text-xl font-semibold text-dark">μ„ΈκΈˆκ³„μ‚°μ„œ λͺ©λ‘</h2>
<div class="text-sm text-gray-600">
<span class="font-medium">총 <span id="totalCount">12</span>건</span>
<span class="mx-2">|</span>
<span class="text-green-600">μžλ™λ§€μΉ­ <span id="autoMatchedCount">3</span>건</span>
</div>
</div>
<!-- ν…Œμ΄λΈ” μ˜μ—­ -->
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-50">
<tr>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
<input type="checkbox" class="rounded text-primary focus:ring-primary">
</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">λ°œν–‰μΌμž</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">μ„ΈκΈˆκ³„μ‚°μ„œ 번호</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">νŒŒνŠΈλ„ˆμ‚¬λͺ…</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">λ§€μž…κΈˆμ•‘</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">μ „ν‘œμƒνƒœ</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">λ§€μΉ­PoC</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">λ§€μΉ­κΈˆμ•‘</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">μ•‘μ…˜</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
<!-- μžλ™ 맀칭된 ν–‰ (ν•˜μ΄λΌμ΄νŠΈ) -->
<tr class="highlight-row receipt-matched">
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" checked class="rounded text-primary focus:ring-primary">
</td>
<td class="px-6 py-4 whitespace-nowrap">2023-10-10</td>
<td class="px-6 py-4 whitespace-nowrap">20231010-001</td>
<td class="px-6 py-4 whitespace-nowrap">λ„·ν”Œλ¦­μŠ€</td>
<td class="px-6 py-4 whitespace-nowrap">12,500,000 원</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">λ―Έλ°œν–‰</span>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800">B tv</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-green-600">
<i class="fas fa-check-circle text-green-500 mr-1"></i> 12,500,000 원
</td>
<td class="px-6 py-4 whitespace-nowrap">
<button class="text-primary hover:text-blue-700" onclick="showReceiptDetail('20231010-001')">
<i class="fas fa-search-plus"></i> 상세보기
</button>
</td>
</tr>
<!-- 일반 ν–‰ -->
<tr>
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" class="rounded text-primary focus:ring-primary">
</td>
<td class="px-6 py-4 whitespace-nowrap">2023-10-05</td>
<td class="px-6 py-4 whitespace-nowrap">20231005-001</td>
<td class="px-6 py-4 whitespace-nowrap">λ””μ¦ˆλ‹ˆ+</td>
<td class="px-6 py-4 whitespace-nowrap">8,750,000 원</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">λ―Έλ°œν–‰</span>
</td>
<td class="px-6 py-4 whitespace-nowrap">-</td>
<td class="px-6 py-4 whitespace-nowrap">-</td>
<td class="px-6 py-4 whitespace-nowrap">
<button class="text-primary hover:text-blue-700" onclick="showReceiptDetail('20231005-001')">
<i class="fas fa-search-plus"></i> 상세보기
</button>
</td>
</tr>
<!-- λ°œν–‰μ™„λ£Œ ν–‰ -->
<tr>
<td class="px-6 py-4 whitespace-nowrap">
<input type="checkbox" disabled class="rounded text-gray-400 focus:ring-gray-400">
</td>
<td class="px-6 py-4 whitespace-nowrap">2023-09-28</td>
<td class="px-6 py-4 whitespace-nowrap">20230928-001</td>
<td class="px-6 py-4 whitespace-nowrap">μ›¨μ΄λΈŒ</td>
<td class="px-6 py-4 whitespace-nowrap">15,200,000 원</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800">λ°œν–‰μ™„λ£Œ</span>
</td>
<td class="px-6 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-purple-100 text-purple-800">IP-CATV</span>
</td>
<td class="px-6 py-4 whitespace-nowrap text-gray-500">
<i class="fas fa-check-circle text-gray-400 mr-1"></i> 15,200,000 원
</td>
<td class="px-6 py-4 whitespace-nowrap">
<button class="text-gray-400 cursor-not-allowed">
<i class="fas fa-search-plus"></i> 상세보기
</button>
</td>
</tr>
<!-- μΆ”κ°€ ν–‰λ“€... -->
</tbody>
</table>
</div>
<!-- νŽ˜μ΄μ§€λ„€μ΄μ…˜ 및 μ•‘μ…˜ λ²„νŠΌ -->
<div class="bg-white px-4 py-3 flex items-center justify-between border-t border-gray-200 sm:px-6">
<div class="flex-1 flex justify-between sm:hidden">
<a href="#" class="relative inline-flex items-center px-4 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50">
이전
</a>
<a href="#" class="ml-3 relative inline-flex items-center px-4 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:bg-gray-50">
λ‹€μŒ
</a>
</div>
<div class="hidden sm:flex-1 sm:flex sm:items-center sm:justify-between">
<div>
<p class="text-sm text-gray-700">
총 <span class="font-medium">12</span>건 쀑 <span class="font-medium">1</span>-<span class="font-medium">10</span>건 ν‘œμ‹œ
</p>
</div>
<div>
<nav class="relative z-0 inline-flex rounded-md shadow-sm -space-x-px" aria-label="Pagination">
<a href="#" class="relative inline-flex items-center px-2 py-2 rounded-l-md border border-gray-300 bg-white text-sm font-medium text-gray-500 hover:bg-gray-50">
<span class="sr-only">이전</span>
<i class="fas fa-chevron-left"></i>
</a>
<!-- Current: "z-10 bg-primary-50 border-primary-500 text-primary-600", Default: "bg-white border-gray-300 text-gray-500 hover:bg-gray-50" -->
<a href="#" aria-current="page" class="z-10 bg-primary-50 border-primary-500 text-primary-600 relative inline-flex items-center px-4 py-2 border text-sm font-medium">
1
</a>
<a href="#" class="bg-white border-gray-300 text-gray-500 hover:bg-gray-50 relative inline-flex items-center px-4 py-2 border text-sm font-medium">
2
</a>
<a href="#" class="bg-white border-gray-300 text-gray-500 hover:bg-gray-50 relative inline-flex items-center px-4 py-2 border text-sm font-medium">
3
</a>
<a href="#" class="relative inline-flex items-center px-2 py-2 rounded-r-md border border-gray-300 bg-white text-sm font-medium text-gray-500 hover:bg-gray-50">
<span class="sr-only">λ‹€μŒ</span>
<i class="fas fa-chevron-right"></i>
</a>
</nav>
</div>
</div>
<div class="ml-4">
<button id="issueBtn" class="bg-green-600 text-white px-6 py-2 rounded-lg hover:bg-green-700 transition disabled:bg-gray-300 disabled:cursor-not-allowed">
<i class="fas fa-file-invoice-dollar mr-2"></i>μž„μ‹œμ „ν‘œ λ°œν–‰
</button>
</div>
</div>
</div>
</div>
<!-- μ„ΈκΈˆκ³„μ‚°μ„œ 상세 νŒμ—… (μž„μ‹œμ „ν‘œ λ°œν–‰ ν™”λ©΄) -->
<div id="receiptModal" class="fixed inset-0 bg-gray-600 bg-opacity-50 overflow-y-auto h-full w-full hidden">
<div class="relative top-20 mx-auto p-5 border w-4/5 shadow-lg rounded-md bg-white" style="max-width: 1200px;">
<div class="flex justify-between items-center border-b pb-3">
<h3 class="text-xl font-semibold text-dark">μ„ΈκΈˆκ³„μ‚°μ„œ 상세 및 μ •μ‚° λ§€μΉ­</h3>
<button onclick="closeModal()" class="text-gray-500 hover:text-gray-700">
<i class="fas fa-times"></i>
</button>
</div>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6 mt-6">
<!-- μ„ΈκΈˆκ³„μ‚°μ„œ 정보 -->
<div class="bg-gray-50 p-4 rounded-lg">
<h4 class="text-lg font-semibold mb-4 text-dark border-b pb-2">μ„ΈκΈˆκ³„μ‚°μ„œ 정보</h4>
<div class="space-y-4">
<div class="grid grid-cols-2 gap-4">
<div>
<p class="text-sm text-gray-500 mb-1">λ°œν–‰μΌμž</p>
<p class="font-medium" id="receiptDate">2023-10-10</p>
</div>
<div>
<p class="text-sm text-gray-500 mb-1">μ„ΈκΈˆκ³„μ‚°μ„œ 번호</p>
<p class="font-medium" id="receiptNo">20231010-001</p>
</div>
</div>
<div>
<p class="text-sm text-gray-500 mb-1">νŒŒνŠΈλ„ˆμ‚¬λͺ…</p>
<p class="font-medium" id="partnerName">λ„·ν”Œλ¦­μŠ€</p>
</div>
<div class="grid grid-cols-2 gap-4">
<div>
<p class="text-sm text-gray-500 mb-1">λ§€μž…κΈˆμ•‘</p>
<p class="font-medium" id="receiptAmount">12,500,000 원</p>
</div>
<div>
<p class="text-sm text-gray-500 mb-1">μ „ν‘œμƒνƒœ</p>
<p id="receiptStatus">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">λ―Έλ°œν–‰</span>
</p>
</div>
</div>
<div>
<p class="text-sm text-gray-500 mb-1">λ§€μΉ­PoC</p>
<p id="matchedPoc">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800">B tv</span>
</p>
</div>
</div>
</div>
<!-- μ •μ‚° 정보 λ§€μΉ­ -->
<div class="bg-gray-50 p-4 rounded-lg">
<h4 class="text-lg font-semibold mb-4 text-dark border-b pb-2">μ •μ‚° 정보 λ§€μΉ­</h4>
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-100">
<tr>
<th scope="col" class="px-3 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">선택</th>
<th scope="col" class="px-3 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">PoC</th>
<th scope="col" class="px-3 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">μ •μ‚°κΈˆμ•‘</th>
<th scope="col" class="px-3 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">μƒνƒœ</th>
<th scope="col" class="px-3 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">μ•‘μ…˜</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
<!-- μžλ™ 맀칭된 ν•­λͺ© -->
<tr class="bg-green-50">
<td class="px-3 py-4 whitespace-nowrap">
<input type="checkbox" checked class="rounded text-green-600 focus:ring-green-600">
</td>
<td class="px-3 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-blue-100 text-blue-800">B tv</span>
</td>
<td class="px-3 py-4 whitespace-nowrap">
<span class="font-medium">12,500,000 원</span>
</td>
<td class="px-3 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800">λ§€μΉ­ κ°€λŠ₯</span>
</td>
<td class="px-3 py-4 whitespace-nowrap">
<button class="text-primary hover:text-blue-700" onclick="showDetail('B tv')">
<i class="fas fa-info-circle"></i> 상세내역
</button>
</td>
</tr>
<!-- λ‹€λ₯Έ ν•­λͺ© -->
<tr>
<td class="px-3 py-4 whitespace-nowrap">
<input type="checkbox" class="rounded text-primary focus:ring-primary">
</td>
<td class="px-3 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-purple-100 text-purple-800">IP-CATV</span>
</td>
<td class="px-3 py-4 whitespace-nowrap">
<span class="font-medium">8,750,000 원</span>
</td>
<td class="px-3 py-4 whitespace-nowrap">
<span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 text-red-800">κΈˆμ•‘ 뢈일치</span>
</td>
<td class="px-3 py-4 whitespace-nowrap">
<button class="text-primary hover:text-blue-700" onclick="showDetail('IP-CATV')">
<i class="fas fa-info-circle"></i> 상세내역
</button>
</td>
</tr>
<!-- μΆ”κ°€ ν•­λͺ©λ“€... -->
</tbody>
</table>
</div>
<div class="mt-4 p-3 bg-yellow-50 rounded border border-yellow-200 text-sm">
<i class="fas fa-exclamation-circle text-yellow-500 mr-2"></i>
λŒ€ν‘œ 계약: SVOD - 2023λ…„ λ„·ν”Œλ¦­μŠ€ 계약 (κ³„μ•½λ²ˆν˜Έ: NCT-2023-001)
</div>
<div class="mt-4 text-right">
<button id="issueSingleBtn" class="bg-green-600 text-white px-6 py-2 rounded-lg hover:bg-green-700 transition">
<i class="fas fa-file-invoice-dollar mr-2"></i>μž„μ‹œμ „ν‘œ λ°œν–‰
</button>
</div>
</div>
</div>
</div>
</div>
<!-- μ •μ‚° 상세 λ‚΄μ—­ νŒμ—… -->
<div id="detailModal" class="fixed inset-0 bg-gray-600 bg-opacity-50 overflow-y-auto h-full w-full hidden">
<div class="relative top-20 mx-auto p-5 border w-3/4 shadow-lg rounded-md bg-white" style="max-width: 900px;">
<div class="flex justify-between items-center border-b pb-3">
<h3 class="text-xl font-semibold text-dark">μ •μ‚° 상세 λ‚΄μ—­ - <span id="detailPocTitle">B tv</span></h3>
<button onclick="closeDetailModal()" class="text-gray-500 hover:text-gray-700">
<i class="fas fa-times"></i>
</button>
</div>
<div class="mt-4">
<h4 class="text-md font-semibold mb-2 text-dark">κΈ°λ³Έ 정보</h4>
<div class="grid grid-cols-3 gap-4 mb-4">
<div>
<p class="text-sm text-gray-500 mb-1">PoC</p>
<p class="font-medium" id="detailPoc">B tv</p>
</div>
<div>
<p class="text-sm text-gray-500 mb-1">μ •μ‚° κΈˆμ•‘</p>
<p class="font-medium" id="detailAmount">12,500,000 원</p>
</div>
<div>
<p class="text-sm text-gray-500 mb-1">μ •μ‚° κΈ°κ°„</p>
<p class="font-medium" id="detailPeriod">2023-10-01 ~ 2023-10-31</p>
</div>
</div>
<h4 class="text-md font-semibold mb-2 mt-6 text-dark">계약별 상세 λ‚΄μ—­</h4>
<div class="overflow-x-auto">
<table class="min-w-full divide-y divide-gray-200">
<thead class="bg-gray-100">
<tr>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">κ³„μ•½μœ ν˜•</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">κ³„μ•½λ²ˆν˜Έ</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">μ •μ‚°κΈˆμ•‘</th>
<th scope="col" class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">λ‹΄λ‹Ήμž</th>
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
<tr>
<td class="px-6 py-4 whitespace-nowrap">SVOD</td>
<td class="px-6 py-4 whitespace-nowrap">NCT-2023-001</td>
<td class="px-6 py-4 whitespace-nowrap">9,500,000 원</td>
<td class="px-6 py-4 whitespace-nowrap">κΉ€μ •μ‚°</td>
</tr>
<tr class="bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap">TVOD</td>
<td class="px-6 py-4 whitespace-nowrap">NCT-2023-002</td>
<td class="px-6 py-4 whitespace-nowrap">3,000,000 원</td>
<td class="px-6 py-4 whitespace-nowrap">κΉ€μ •μ‚°</td>
</tr>
<!-- 합계 ν–‰ -->
<tr class="bg-blue-50">
<td class="px-6 py-4 whitespace-nowrap font-semibold" colspan="2">총합</td>
<td class="px-6 py-4 whitespace-nowrap font-semibold">12,500,000 원</td>
<td class="px-6 py-4 whitespace-nowrap"></td>
</tr>
</tbody>
</table>
</div>
<div class="mt-6 flex justify-end">
<button onclick="closeDetailModal()" class="bg-gray-200 text-gray-700 px-6 py-2 rounded-lg hover:bg-gray-300 transition">
λ‹«κΈ°
</button>
</div>
</div>
</div>
</div>
<script>
// λͺ¨λ‹¬ 컨트둀 ν•¨μˆ˜λ“€
function showReceiptDetail(receiptNo) {
document.getElementById('receiptModal').classList.remove('hidden');
document.body.style.overflow = 'hidden';
// λͺ¨λ‹¬μ— 데이터 μ±„μš°κΈ° (μ‹€μ œ κ΅¬ν˜„μ—μ„œλŠ” AJAX둜 데이터λ₯Ό 가져와야 함)
document.getElementById('receiptNo').textContent = receiptNo;
// λ‹€λ₯Έ ν•„λ“œλ“€λ„ μ±„μš°κΈ°...
}
function closeModal() {
document.getElementById('receiptModal').classList.add('hidden');
document.body.style.overflow = 'auto';
}
function showDetail(poc) {
document.getElementById('detailModal').classList.remove('hidden');
document.getElementById('detailPocTitle').textContent = poc;
document.getElementById('detailPoc').textContent = poc;
// λ‹€λ₯Έ ν•„λ“œλ“€λ„ μ±„μš°κΈ°...
}
function closeDetailModal() {
document.getElementById('detailModal').classList.add('hidden');
}
// νŽ˜μ΄μ§€ λ‘œλ“œ μ‹œ μžλ™ λ§€μΉ­ μ•Œλ¦Ό ν‘œμ‹œ
document.addEventListener('DOMContentLoaded', function() {
const autoMatchAlert = document.getElementById('autoMatchAlert');
setTimeout(() => {
autoMatchAlert.classList.remove('hidden');
// 5초 ν›„ μ•Œλ¦Ό μžλ™ 숨기기
setTimeout(() => {
autoMatchAlert.classList.add('hidden');
}, 5000);
}, 1000);
// μ²΄ν¬λ°•μŠ€ μƒνƒœμ— 따라 λ°œν–‰ λ²„νŠΌ ν™œμ„±ν™”/λΉ„ν™œμ„±ν™”
const checkboxes = document.querySelectorAll('tbody input[type="checkbox"]');
const issueBtn = document.getElementById('issueBtn');
checkboxes.forEach(checkbox => {
checkbox.addEventListener('change', function() {
const checkedBoxes = document.querySelectorAll('tbody input[type="checkbox"]:checked');
issueBtn.disabled = checkedBoxes.length === 0;
});
});
// 쑰회 λ²„νŠΌ 클릭 이벀트 (μ‹€μ œ κ΅¬ν˜„μ—μ„œλŠ” AJAX 호좜)
document.getElementById('searchBtn').addEventListener('click', function() {
alert('쑰회 κΈ°λŠ₯이 μ‹€ν–‰λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ‹€μ œ κ΅¬ν˜„μ—μ„œλŠ” ν•„ν„° 쑰건에 λ§žλŠ” 데이터λ₯Ό μ„œλ²„μ—μ„œ κ°€μ Έμ˜΅λ‹ˆλ‹€.');
// μ• λ‹ˆλ©”μ΄μ…˜ 효과둜 μ‚¬μš©μžμ—κ²Œ ν”Όλ“œλ°± 제곡
this.innerHTML = '<i class="fas fa-spinner fa-spin mr-2"></i>쑰회 쀑...';
setTimeout(() => {
this.innerHTML = '<i class="fas fa-search mr-2"></i>쑰회';
}, 1500);
});
// λ°œν–‰ λ²„νŠΌ 클릭 이벀트
issueBtn.addEventListener('click', function() {
alert('μž„μ‹œμ „ν‘œ λ°œν–‰μ΄ μš”μ²­λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ‹€μ œ κ΅¬ν˜„μ—μ„œλŠ” μ„ νƒλœ μ„ΈκΈˆκ³„μ‚°μ„œμ— λŒ€ν•΄ SAP 연동을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.');
});
// 단건 λ°œν–‰ λ²„νŠΌ 클릭 이벀트
document.getElementById('issueSingleBtn').addEventListener('click', function() {
alert('단건 μž„μ‹œμ „ν‘œ λ°œν–‰μ΄ μš”μ²­λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ„ΈκΈˆκ³„μ‚°μ„œ 번호: ' + document.getElementById('receiptNo').textContent);
closeModal();
});
});
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=r2d209/ncss2" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
</html>