This commit is contained in:
dsyoon
2025-08-18 09:41:39 +09:00
parent d56d136522
commit f5f362e075
5 changed files with 8 additions and 8 deletions

View File

@@ -1,11 +1,11 @@
# 톡 프론트엔드 (React + Vite) # 엔큐톡 프론트엔드 (React + Vite)
웅톡(WoongTalk)은 다양한 AI 엔진(챗봇·PDF QA·Text-to-SQL 등)을 한 화면에서 사용할 수 있게 해 주는 통합 프론트엔드입니다. 기존 jQuery SPA 구조를 **React 18 / Vite 7** 기반으로 전면 개편하였습니다. 엔큐톡(ncuetalk)은 다양한 AI 엔진(챗봇·PDF QA·Text-to-SQL 등)을 한 화면에서 사용할 수 있게 해 주는 통합 프론트엔드입니다. 기존 jQuery SPA 구조를 **React 18 / Vite 7** 기반으로 전면 개편하였습니다.
## 폴더 구조 ## 폴더 구조
``` ```
woongtalk_frontend/ ncuetalk_frontend/
├── index.html # Vite 진입점 (root div 및 module script) ├── index.html # Vite 진입점 (root div 및 module script)
├── style.css # 전역 스타일 기존 CSS 그대로 유지 ├── style.css # 전역 스타일 기존 CSS 그대로 유지
├── package.json # 의존성 & 스크립트 ├── package.json # 의존성 & 스크립트

View File

@@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>톡 AI엔진</title> <title>엔큐톡 AI엔진</title>
<link rel="stylesheet" href="/style.css" /> <link rel="stylesheet" href="/style.css" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
</head> </head>

4
package-lock.json generated
View File

@@ -1,11 +1,11 @@
{ {
"name": "woongtalk-frontend", "name": "ncuetalk-frontend",
"version": "1.0.0", "version": "1.0.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "woongtalk-frontend", "name": "ncuetalk-frontend",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"marked": "^5.1.2", "marked": "^5.1.2",

View File

@@ -1,5 +1,5 @@
{ {
"name": "woongtalk-frontend", "name": "ncuetalk-frontend",
"version": "1.0.0", "version": "1.0.0",
"private": true, "private": true,
"scripts": { "scripts": {

View File

@@ -13,7 +13,7 @@ export default function Sidebar({ current, onChange }) {
const { setSelectedTool } = useTool(); const { setSelectedTool } = useTool();
return ( return (
<aside className="sidebar"> <aside className="sidebar">
<div className="logo" onClick={() => { setSelectedTool(null); try { localStorage.removeItem('selectedToolId'); } catch {}; onChange('chat'); }} style={{cursor:'pointer'}}></div> <div className="logo" onClick={() => { setSelectedTool(null); try { localStorage.removeItem('selectedToolId'); } catch {}; onChange('chat'); }} style={{cursor:'pointer'}}>엔큐</div>
<nav className="menu"> <nav className="menu">
<ul> <ul>
{MENU.map((item) => ( {MENU.map((item) => (