DB 테이블 정보 및 스크립트 수정(20260303)
This commit is contained in:
@@ -1,12 +1,595 @@
|
||||
-- 팀원들이 공통으로 사용할 초기 테이블 구조 생성
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(50) NOT NULL,
|
||||
email VARCHAR(100) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
-- 컨텐츠 등록
|
||||
CREATE TABLE `edu`.`contents` (
|
||||
`content_id` VARCHAR(20) NOT NULL COMMENT '콘텐츠ID', -- 콘텐츠ID
|
||||
`category_code` VARCHAR(20) NULL COMMENT '카테고리', -- 카테고리
|
||||
`category_group` VARCHAR(20) NULL COMMENT '케테고리구분', -- 케테고리구분
|
||||
`title` VARCHAR(200) NULL COMMENT '콘텐츠명', -- 콘텐츠명
|
||||
`description` TEXT NULL COMMENT '콘텐츠설명', -- 콘텐츠설명
|
||||
`description2` TEXT NULL COMMENT '콘텐츠설명2', -- 콘텐츠설명2
|
||||
`content_url` VARCHAR(200) NULL COMMENT '콘텐츠url', -- 콘텐츠url
|
||||
`thumbnail_url` VARCHAR(200) NULL COMMENT '썸네일url', -- 썸네일url
|
||||
`base_year` CHAR(4) NULL COMMENT '기준년도', -- 기준년도
|
||||
`start_date` DATE NULL COMMENT '기준일자', -- 기준일자
|
||||
`end_date` DATE NULL COMMENT '종료일자', -- 종료일자
|
||||
`sort_order` INTEGER NULL COMMENT '정렬순번', -- 정렬순번
|
||||
`goal_code` VARCHAR(20) NULL COMMENT '학습목표코드', -- 학습목표코드
|
||||
`image_name` VARCHAR(200) NULL COMMENT '대표이미지명', -- 대표이미지명
|
||||
`image_path` VARCHAR(200) NULL COMMENT '이미지경로', -- 이미지경로
|
||||
`is_offer` CHAR(1) NULL COMMENT '추천콘텐츠적용여부', -- 추천콘텐츠적용여부
|
||||
`offer_id` VARCHAR(20) NULL COMMENT '제안ID', -- 제안ID
|
||||
`issue_type_code` VARCHAR(20) NULL COMMENT '인사이트이슈구분', -- 인사이트이슈구분
|
||||
`is_active` CHAR(1) NULL COMMENT '사용여부', -- 사용여부
|
||||
`created_by` VARCHAR(20) NULL COMMENT '등록자', -- 등록자
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_by` VARCHAR(20) NULL COMMENT '수정자', -- 수정자
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '컨텐츠 등록';
|
||||
|
||||
-- 초기 테스트를 위한 더미 데이터 삽입 (선택 사항)
|
||||
INSERT INTO users (username, email) VALUES
|
||||
('test_user_1', 'user1@hmac-edu.com'),
|
||||
('test_user_2', 'user2@hmac-edu.com');
|
||||
-- 컨텐츠 등록
|
||||
ALTER TABLE `edu`.`contents`
|
||||
ADD CONSTRAINT `PK_contents` -- 컨텐츠 등록 기본키
|
||||
PRIMARY KEY (
|
||||
`content_id` -- 콘텐츠ID
|
||||
);
|
||||
|
||||
-- 마이클래스 학습목표 등록
|
||||
CREATE TABLE `edu`.`learning_goals` (
|
||||
`goal_code` VARCHAR(20) NOT NULL COMMENT '학습목표 코드', -- 학습목표 코드
|
||||
`title` VARCHAR(200) NULL COMMENT '학습목표제목', -- 학습목표제목
|
||||
`base_year` CHAR(4) NULL COMMENT '기준년도', -- 기준년도
|
||||
`end_date` DATE NULL COMMENT '종료일', -- 종료일
|
||||
`is_active` CHAR(1) NULL COMMENT '사용여부', -- 사용여부
|
||||
`sort_order` INTEGER NULL COMMENT '정렬순번', -- 정렬순번
|
||||
`remarks` VARCHAR(200) NULL COMMENT '비고', -- 비고
|
||||
`created_by` VARCHAR(20) NULL COMMENT '등록자', -- 등록자
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_by` VARCHAR(20) NULL COMMENT '수정자', -- 수정자
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '마이클래스 학습목표 등록';
|
||||
|
||||
-- 마이클래스 학습목표 등록
|
||||
ALTER TABLE `edu`.`learning_goals`
|
||||
ADD CONSTRAINT `PK_learning_goals` -- 마이클래스 학습목표 등록 기본키
|
||||
PRIMARY KEY (
|
||||
`goal_code` -- 학습목표 코드
|
||||
);
|
||||
|
||||
-- 코드상세
|
||||
CREATE TABLE `edu`.`codes` (
|
||||
`group_code` VARCHAR(10) NOT NULL COMMENT '메인코드', -- 메인코드
|
||||
`code` VARCHAR(10) NOT NULL COMMENT '서브코드', -- 서브코드
|
||||
`base_code` VARCHAR(20) NOT NULL COMMENT '기준코드', -- 기준코드
|
||||
`code_name` VARCHAR(250) NULL COMMENT '코드명', -- 코드명
|
||||
`is_active` CHAR(1) NULL COMMENT '사용구분', -- 사용구분
|
||||
`desc01` VARCHAR(250) NULL COMMENT '설명1', -- 설명1
|
||||
`desc02` VARCHAR(250) NULL COMMENT '설명2', -- 설명2
|
||||
`desc03` VARCHAR(250) NULL COMMENT '설명3', -- 설명3
|
||||
`desc04` VARCHAR(250) NULL COMMENT '설명4', -- 설명4
|
||||
`desc05` VARCHAR(250) NULL COMMENT '설명5', -- 설명5
|
||||
`created_by` VARCHAR(20) NULL COMMENT '등록자', -- 등록자
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_by` VARCHAR(20) NULL COMMENT '수정자', -- 수정자
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '코드상세';
|
||||
|
||||
-- 코드상세
|
||||
ALTER TABLE `edu`.`codes`
|
||||
ADD CONSTRAINT `PK_codes` -- 코드상세 기본키
|
||||
PRIMARY KEY (
|
||||
`group_code`, -- 메인코드
|
||||
`code` -- 서브코드
|
||||
);
|
||||
|
||||
-- 통합인사정보
|
||||
CREATE TABLE `edu`.`users` (
|
||||
`member_id` VARCHAR(20) NOT NULL COMMENT 'id', -- id
|
||||
`sys_comp_code` VARCHAR(20) NOT NULL COMMENT '기준법인', -- 기준법인
|
||||
`name` VARCHAR(100) NULL COMMENT '성명', -- 성명
|
||||
`dept_name` VARCHAR(100) NULL COMMENT '부서', -- 부서
|
||||
`rank_name` VARCHAR(100) NULL COMMENT '직위', -- 직위
|
||||
`join_date` DATE NULL COMMENT '입사일', -- 입사일
|
||||
`belong_comp` VARCHAR(100) NULL COMMENT '소속회사', -- 소속회사
|
||||
`working_cpmp` VARCHAR(100) NULL COMMENT '근무회사', -- 근무회사
|
||||
`intra_pw` VARCHAR(20) NULL COMMENT 'password' -- password
|
||||
)
|
||||
COMMENT '통합인사정보';
|
||||
|
||||
-- 통합인사정보
|
||||
ALTER TABLE `edu`.`users`
|
||||
ADD CONSTRAINT `PK_users` -- 통합인사정보 기본키
|
||||
PRIMARY KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
);
|
||||
|
||||
-- 댓글정보
|
||||
CREATE TABLE `edu`.`comments` (
|
||||
`id` VARCHAR(12) NOT NULL COMMENT '댓글ID', -- 댓글ID
|
||||
`parent_id` VARCHAR(12) NULL COMMENT '상위댓글ID', -- 상위댓글ID
|
||||
`sys_comp_code` VARCHAR(20) NULL COMMENT '기준법인', -- 기준법인
|
||||
`member_id` VARCHAR(20) NOT NULL COMMENT 'id', -- id
|
||||
`comment` VARCHAR(255) NULL COMMENT '내용', -- 내용
|
||||
`content_id` INTEGER NULL COMMENT '콘텐츠ID', -- 콘텐츠ID
|
||||
`created_by` VARCHAR(20) NULL COMMENT '등록자', -- 등록자
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_by` VARCHAR(20) NULL COMMENT '수정자', -- 수정자
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '댓글정보';
|
||||
|
||||
-- 댓글정보
|
||||
ALTER TABLE `edu`.`comments`
|
||||
ADD CONSTRAINT `PK_comments` -- 댓글정보 기본키
|
||||
PRIMARY KEY (
|
||||
`id` -- 댓글ID
|
||||
);
|
||||
|
||||
-- 학습이력
|
||||
CREATE TABLE `edu`.`learning_histories` (
|
||||
`member_id` VARCHAR(20) NOT NULL COMMENT 'id', -- id
|
||||
`sys_comp_code` VARCHAR(20) NOT NULL COMMENT '기준법인', -- 기준법인
|
||||
`content_id` VARCHAR(20) NOT NULL COMMENT '콘텐츠ID', -- 콘텐츠ID
|
||||
`first_viewed_at` DATETIME NULL COMMENT '최초시청일시', -- 최초시청일시
|
||||
`last_viewed_at` DATETIME NULL COMMENT '최종시청일시', -- 최종시청일시
|
||||
`watch_tm` DECIMAL(18) NULL COMMENT '영상시작길이', -- 영상시작길이
|
||||
`content_tm` DECIMAL(18) NULL COMMENT '영상길이', -- 영상길이
|
||||
`all_tm` DECIMAL(18) NULL COMMENT '누적시청시간', -- 누적시청시간
|
||||
`completed_at` DATETIME NULL COMMENT '학습완료일시', -- 학습완료일시
|
||||
`comment` VARCHAR(200) NULL COMMENT '한줄소감', -- 한줄소감
|
||||
`is_watching` CHAR(1) NULL COMMENT '시청중컨텐츠여부' -- 시청중컨텐츠여부
|
||||
)
|
||||
COMMENT '학습이력';
|
||||
|
||||
-- 학습이력
|
||||
ALTER TABLE `edu`.`learning_histories`
|
||||
ADD CONSTRAINT `PK_learning_histories` -- 학습이력 기본키
|
||||
PRIMARY KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code`, -- 기준법인
|
||||
`content_id` -- 콘텐츠ID
|
||||
);
|
||||
|
||||
-- 컨텐츠저장
|
||||
CREATE TABLE `edu`.`content_wishlist` (
|
||||
`member_id` VARCHAR(20) NOT NULL COMMENT 'id', -- id
|
||||
`sys_comp_code` VARCHAR(20) NOT NULL COMMENT '기준법인', -- 기준법인
|
||||
`content_id` INTEGER NOT NULL COMMENT '콘텐츠ID', -- 콘텐츠ID
|
||||
`favorited_at` DATETIME NULL COMMENT '찜한일시', -- 찜한일시
|
||||
`is_active` CHAR(1) NULL COMMENT '사용여부', -- 사용여부
|
||||
`created_by` VARCHAR(20) NULL COMMENT '등록자', -- 등록자
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_by` VARCHAR(20) NULL COMMENT '수정자', -- 수정자
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '컨텐츠저장';
|
||||
|
||||
-- 컨텐츠저장
|
||||
ALTER TABLE `edu`.`content_wishlist`
|
||||
ADD CONSTRAINT `PK_content_wishlist` -- 컨텐츠저장 기본키
|
||||
PRIMARY KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code`, -- 기준법인
|
||||
`content_id` -- 콘텐츠ID
|
||||
);
|
||||
|
||||
-- 사용자 키워드
|
||||
CREATE TABLE `edu`.`user_keywords` (
|
||||
`member_id` VARCHAR(20) NOT NULL COMMENT 'id', -- id
|
||||
`sys_comp_code` VARCHAR(20) NOT NULL COMMENT '기준법인', -- 기준법인
|
||||
`keyword_code` VARCHAR(20) NOT NULL COMMENT '키워드코드', -- 키워드코드
|
||||
`keyword_name` VARCHAR(100) NULL COMMENT '키워드명', -- 키워드명
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '사용자 키워드';
|
||||
|
||||
-- 사용자 키워드
|
||||
ALTER TABLE `edu`.`user_keywords`
|
||||
ADD CONSTRAINT `PK_user_keywords` -- 사용자 키워드 기본키
|
||||
PRIMARY KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code`, -- 기준법인
|
||||
`keyword_code` -- 키워드코드
|
||||
);
|
||||
|
||||
-- 컨텐츠제안하기
|
||||
CREATE TABLE `edu`.`content_offer` (
|
||||
`offer_id` VARCHAR(20) NOT NULL COMMENT '제안ID', -- 제안ID
|
||||
`type_code` VARCHAR(20) NULL COMMENT '제안구분', -- 제안구분
|
||||
`title` VARCHAR(200) NULL COMMENT '제목', -- 제목
|
||||
`reference_url` VARCHAR(255) NULL COMMENT 'URL', -- URL
|
||||
`reason` TEXT NULL COMMENT '추천이유', -- 추천이유
|
||||
`status_code` VARCHAR(20) NULL COMMENT '제안상태', -- 제안상태
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일', -- 수정일
|
||||
`member_id` VARCHAR(20) NULL COMMENT 'id', -- id
|
||||
`sys_comp_code` VARCHAR(20) NULL COMMENT '기준법인' -- 기준법인
|
||||
)
|
||||
COMMENT '컨텐츠제안하기';
|
||||
|
||||
-- 컨텐츠제안하기
|
||||
ALTER TABLE `edu`.`content_offer`
|
||||
ADD CONSTRAINT `PK_content_offer` -- 컨텐츠제안하기 기본키
|
||||
PRIMARY KEY (
|
||||
`offer_id` -- 제안ID
|
||||
);
|
||||
|
||||
-- 년도별학습레벨
|
||||
CREATE TABLE `edu`.`yearly_learning_stats` (
|
||||
`member_id` VARCHAR(20) NOT NULL COMMENT 'id', -- id
|
||||
`sys_comp_code` VARCHAR(20) NOT NULL COMMENT '기준법인', -- 기준법인
|
||||
`stats_year` CHAR(4) NOT NULL COMMENT '년도', -- 년도
|
||||
`learning_level` VARCHAR(20) NULL COMMENT '학습레벨', -- 학습레벨
|
||||
`total_minutes` DECIMAL(18) NULL COMMENT '총학습시간(분)', -- 총학습시간(분)
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '년도별학습레벨';
|
||||
|
||||
-- 년도별학습레벨
|
||||
ALTER TABLE `edu`.`yearly_learning_stats`
|
||||
ADD CONSTRAINT `PK_yearly_learning_stats` -- 년도별학습레벨 기본키
|
||||
PRIMARY KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code`, -- 기준법인
|
||||
`stats_year` -- 년도
|
||||
);
|
||||
|
||||
-- 컨텐츠 키워드
|
||||
CREATE TABLE `edu`.`content_keywords` (
|
||||
`content_id` VARCHAR(20) NOT NULL COMMENT '콘텐츠ID', -- 콘텐츠ID
|
||||
`keyword_code` VARCHAR(20) NOT NULL COMMENT '키워드코드', -- 키워드코드
|
||||
`is_active` CHAR(1) NULL COMMENT '사용여부', -- 사용여부
|
||||
`created_by` VARCHAR(20) NULL COMMENT '등록자', -- 등록자
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_by` VARCHAR(20) NULL COMMENT '수정자', -- 수정자
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '컨텐츠 키워드';
|
||||
|
||||
-- 컨텐츠 키워드
|
||||
ALTER TABLE `edu`.`content_keywords`
|
||||
ADD CONSTRAINT `PK_content_keywords` -- 컨텐츠 키워드 기본키
|
||||
PRIMARY KEY (
|
||||
`content_id`, -- 콘텐츠ID
|
||||
`keyword_code` -- 키워드코드
|
||||
);
|
||||
|
||||
-- 접속이력
|
||||
CREATE TABLE `edu`.`access_history` (
|
||||
`accessed_at` TIMESTAMP NOT NULL COMMENT '접속일시', -- 접속일시
|
||||
`member_id` VARCHAR(20) NOT NULL COMMENT '사번', -- 사번
|
||||
`sys_comp_code` VARCHAR(20) NULL COMMENT '기준법인', -- 기준법인
|
||||
`ip_address` VARCHAR(20) NULL COMMENT '접속IP' -- 접속IP
|
||||
)
|
||||
COMMENT '접속이력';
|
||||
|
||||
-- 접속이력
|
||||
ALTER TABLE `edu`.`access_history`
|
||||
ADD CONSTRAINT `PK_access_history` -- 접속이력 기본키
|
||||
PRIMARY KEY (
|
||||
`accessed_at` -- 접속일시
|
||||
);
|
||||
|
||||
-- 코드마스터
|
||||
CREATE TABLE `edu`.`code_group` (
|
||||
`group_code` VARCHAR(10) NOT NULL COMMENT '메인코드', -- 메인코드
|
||||
`group_name` VARCHAR(250) NULL COMMENT '코드명', -- 코드명
|
||||
`is_active` CHAR(1) NULL COMMENT '사용구분', -- 사용구분
|
||||
`sort_order` INTEGER NULL COMMENT '정렬구분', -- 정렬구분
|
||||
`comment` VARCHAR(250) NULL COMMENT '코멘트', -- 코멘트
|
||||
`desc01` VARCHAR(250) NULL COMMENT '설명1', -- 설명1
|
||||
`desc02` VARCHAR(250) NULL COMMENT '설명2', -- 설명2
|
||||
`desc03` VARCHAR(250) NULL COMMENT '설명3', -- 설명3
|
||||
`desc04` VARCHAR(250) NULL COMMENT '설명4', -- 설명4
|
||||
`desc05` VARCHAR(250) NULL COMMENT '설명5', -- 설명5
|
||||
`created_by` VARCHAR(20) NULL COMMENT '등록자', -- 등록자
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_by` VARCHAR(20) NULL COMMENT '수정자', -- 수정자
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '코드마스터';
|
||||
|
||||
-- 코드마스터
|
||||
ALTER TABLE `edu`.`code_group`
|
||||
ADD CONSTRAINT `PK_code_group` -- 코드마스터 기본키
|
||||
PRIMARY KEY (
|
||||
`group_code` -- 메인코드
|
||||
);
|
||||
|
||||
-- 첨부파일
|
||||
CREATE TABLE `edu`.`files` (
|
||||
`content_id` VARCHAR(20) NOT NULL COMMENT '콘텐츠ID', -- 콘텐츠ID
|
||||
`id` INTEGER NOT NULL COMMENT '파일ID', -- 파일ID
|
||||
`file_name` VARCHAR(200) NULL COMMENT '파일명', -- 파일명
|
||||
`file_type` VARCHAR(20) NULL COMMENT '파일구분', -- 파일구분
|
||||
`file_path` VARCHAR(200) NULL COMMENT '저장위치', -- 저장위치
|
||||
`created_by` VARCHAR(20) NULL COMMENT '등록자', -- 등록자
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_by` VARCHAR(20) NULL COMMENT '수정자', -- 수정자
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '첨부파일';
|
||||
|
||||
-- 첨부파일
|
||||
ALTER TABLE `edu`.`files`
|
||||
ADD CONSTRAINT `PK_files` -- 첨부파일 기본키
|
||||
PRIMARY KEY (
|
||||
`content_id`, -- 콘텐츠ID
|
||||
`id` -- 파일ID
|
||||
);
|
||||
|
||||
-- 선택학습목표
|
||||
CREATE TABLE `edu`.`user_learning_goals` (
|
||||
`member_id` VARCHAR(20) NOT NULL COMMENT 'id', -- id
|
||||
`sys_comp_code` VARCHAR(20) NOT NULL COMMENT '기준법인', -- 기준법인
|
||||
`goal_code` VARCHAR(20) NOT NULL COMMENT '학습목표 코드', -- 학습목표 코드
|
||||
`quarter` VARCHAR(20) NULL COMMENT '분기', -- 분기
|
||||
`completed_date` DATE NULL COMMENT '학습완료일', -- 학습완료일
|
||||
`is_active` CHAR(1) NULL COMMENT '사용여부', -- 사용여부
|
||||
`created_by` VARCHAR(20) NULL COMMENT '등록자', -- 등록자
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_by` VARCHAR(20) NULL COMMENT '수정자', -- 수정자
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '선택학습목표';
|
||||
|
||||
-- 선택학습목표
|
||||
ALTER TABLE `edu`.`user_learning_goals`
|
||||
ADD CONSTRAINT `PK_user_learning_goals` -- 선택학습목표 기본키
|
||||
PRIMARY KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code`, -- 기준법인
|
||||
`goal_code` -- 학습목표 코드
|
||||
);
|
||||
|
||||
-- 법인별키워드
|
||||
CREATE TABLE `edu`.`recommend_keywords` (
|
||||
`sys_comp_code` VARCHAR(20) NOT NULL COMMENT '기준법인', -- 기준법인
|
||||
`keyword_code` VARCHAR(20) NOT NULL COMMENT '키워드코드', -- 키워드코드
|
||||
`is_active` CHAR(1) NULL COMMENT '사용여부', -- 사용여부
|
||||
`created_by` VARCHAR(20) NULL COMMENT '등록자', -- 등록자
|
||||
`created_at` TIMESTAMP NULL COMMENT '등록일', -- 등록일
|
||||
`updated_by` VARCHAR(20) NULL COMMENT '수정자', -- 수정자
|
||||
`updated_at` TIMESTAMP NULL COMMENT '수정일' -- 수정일
|
||||
)
|
||||
COMMENT '법인별키워드';
|
||||
|
||||
-- 법인별키워드
|
||||
ALTER TABLE `edu`.`recommend_keywords`
|
||||
ADD CONSTRAINT `PK_recommend_keywords` -- 법인별키워드 기본키
|
||||
PRIMARY KEY (
|
||||
`sys_comp_code`, -- 기준법인
|
||||
`keyword_code` -- 키워드코드
|
||||
);
|
||||
|
||||
-- 뱃지정보
|
||||
CREATE TABLE `edu`.`user_badges` (
|
||||
`member_id` VARCHAR(20) NOT NULL COMMENT 'id', -- id
|
||||
`sys_comp_code` VARCHAR(20) NOT NULL COMMENT '기준법인', -- 기준법인
|
||||
`seq` INTEGER NOT NULL COMMENT '순번', -- 순번
|
||||
`badge_code` VARCHAR(20) NULL COMMENT '뱃지코드', -- 뱃지코드
|
||||
`issued_at` DATETIME NULL COMMENT '지급일자' -- 지급일자
|
||||
)
|
||||
COMMENT '뱃지정보';
|
||||
|
||||
-- 뱃지정보
|
||||
ALTER TABLE `edu`.`user_badges`
|
||||
ADD CONSTRAINT `PK_user_badges` -- 뱃지정보 기본키
|
||||
PRIMARY KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code`, -- 기준법인
|
||||
`seq` -- 순번
|
||||
);
|
||||
|
||||
-- 검색어이력
|
||||
CREATE TABLE `edu`.`search_logs` (
|
||||
`member_id` VARCHAR(20) NOT NULL COMMENT 'id', -- id
|
||||
`sys_comp_code` VARCHAR(20) NOT NULL COMMENT '기준법인', -- 기준법인
|
||||
`seq` INTEGER NOT NULL COMMENT '순번', -- 순번
|
||||
`keyword` VARCHAR(50) NULL COMMENT '검색어', -- 검색어
|
||||
`searched_at` DATETIME NULL COMMENT '등록일' -- 등록일
|
||||
)
|
||||
COMMENT '검색어이력';
|
||||
|
||||
-- 검색어이력
|
||||
ALTER TABLE `edu`.`search_logs`
|
||||
ADD CONSTRAINT `PK_search_logs` -- 검색어이력 기본키
|
||||
PRIMARY KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code`, -- 기준법인
|
||||
`seq` -- 순번
|
||||
);
|
||||
|
||||
-- 알람이력
|
||||
CREATE TABLE `edu`.`notifications` (
|
||||
`member_id` VARCHAR(20) NOT NULL COMMENT 'id', -- id
|
||||
`corp_code` VARCHAR(20) NOT NULL COMMENT '기준법인', -- 기준법인
|
||||
`seq` INTEGER NOT NULL COMMENT '순번', -- 순번
|
||||
`type_code` VARCHAR(20) NULL COMMENT '알람코드', -- 알람코드
|
||||
`message` VARCHAR(255) NULL COMMENT '알람내용', -- 알람내용
|
||||
`sent_at` DATETIME NULL COMMENT '알람일시' -- 알람일시
|
||||
)
|
||||
COMMENT '알람이력';
|
||||
|
||||
-- 알람이력
|
||||
ALTER TABLE `edu`.`notifications`
|
||||
ADD CONSTRAINT `PK_notifications` -- 알람이력 기본키
|
||||
PRIMARY KEY (
|
||||
`member_id`, -- id
|
||||
`corp_code`, -- 기준법인
|
||||
`seq` -- 순번
|
||||
);
|
||||
|
||||
-- 코드상세
|
||||
ALTER TABLE `edu`.`codes`
|
||||
ADD CONSTRAINT `FK_code_group_TO_codes` -- 코드마스터 -> 코드상세
|
||||
FOREIGN KEY (
|
||||
`group_code` -- 메인코드
|
||||
)
|
||||
REFERENCES `edu`.`code_group` ( -- 코드마스터
|
||||
`group_code` -- 메인코드
|
||||
);
|
||||
|
||||
-- 댓글정보
|
||||
ALTER TABLE `edu`.`comments`
|
||||
ADD CONSTRAINT `FK_users_TO_comments` -- 통합인사정보 -> 댓글정보
|
||||
FOREIGN KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
)
|
||||
REFERENCES `edu`.`users` ( -- 통합인사정보
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
);
|
||||
|
||||
-- 학습이력
|
||||
ALTER TABLE `edu`.`learning_histories`
|
||||
ADD CONSTRAINT `FK_users_TO_learning_histories` -- 통합인사정보 -> 학습이력
|
||||
FOREIGN KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
)
|
||||
REFERENCES `edu`.`users` ( -- 통합인사정보
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
);
|
||||
|
||||
-- 학습이력
|
||||
ALTER TABLE `edu`.`learning_histories`
|
||||
ADD CONSTRAINT `FK_contents_TO_learning_histories` -- 컨텐츠 등록 -> 학습이력
|
||||
FOREIGN KEY (
|
||||
`content_id` -- 콘텐츠ID
|
||||
)
|
||||
REFERENCES `edu`.`contents` ( -- 컨텐츠 등록
|
||||
`content_id` -- 콘텐츠ID
|
||||
);
|
||||
|
||||
-- 컨텐츠저장
|
||||
ALTER TABLE `edu`.`content_wishlist`
|
||||
ADD CONSTRAINT `FK_users_TO_content_wishlist` -- 통합인사정보 -> 컨텐츠저장
|
||||
FOREIGN KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
)
|
||||
REFERENCES `edu`.`users` ( -- 통합인사정보
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
);
|
||||
|
||||
-- 사용자 키워드
|
||||
ALTER TABLE `edu`.`user_keywords`
|
||||
ADD CONSTRAINT `FK_users_TO_user_keywords` -- 통합인사정보 -> 사용자 키워드
|
||||
FOREIGN KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
)
|
||||
REFERENCES `edu`.`users` ( -- 통합인사정보
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
);
|
||||
|
||||
-- 컨텐츠제안하기
|
||||
ALTER TABLE `edu`.`content_offer`
|
||||
ADD CONSTRAINT `FK_users_TO_content_offer` -- 통합인사정보 -> 컨텐츠제안하기
|
||||
FOREIGN KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
)
|
||||
REFERENCES `edu`.`users` ( -- 통합인사정보
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
);
|
||||
|
||||
-- 년도별학습레벨
|
||||
ALTER TABLE `edu`.`yearly_learning_stats`
|
||||
ADD CONSTRAINT `FK_users_TO_yearly_learning_stats` -- 통합인사정보 -> 년도별학습레벨
|
||||
FOREIGN KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
)
|
||||
REFERENCES `edu`.`users` ( -- 통합인사정보
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
);
|
||||
|
||||
-- 컨텐츠 키워드
|
||||
ALTER TABLE `edu`.`content_keywords`
|
||||
ADD CONSTRAINT `FK_contents_TO_content_keywords` -- 컨텐츠 등록 -> 컨텐츠 키워드
|
||||
FOREIGN KEY (
|
||||
`content_id` -- 콘텐츠ID
|
||||
)
|
||||
REFERENCES `edu`.`contents` ( -- 컨텐츠 등록
|
||||
`content_id` -- 콘텐츠ID
|
||||
);
|
||||
|
||||
-- 첨부파일
|
||||
ALTER TABLE `edu`.`files`
|
||||
ADD CONSTRAINT `FK_contents_TO_files` -- 컨텐츠 등록 -> 첨부파일
|
||||
FOREIGN KEY (
|
||||
`content_id` -- 콘텐츠ID
|
||||
)
|
||||
REFERENCES `edu`.`contents` ( -- 컨텐츠 등록
|
||||
`content_id` -- 콘텐츠ID
|
||||
);
|
||||
|
||||
-- 선택학습목표
|
||||
ALTER TABLE `edu`.`user_learning_goals`
|
||||
ADD CONSTRAINT `FK_users_TO_user_learning_goals` -- 통합인사정보 -> 선택학습목표
|
||||
FOREIGN KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
)
|
||||
REFERENCES `edu`.`users` ( -- 통합인사정보
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
);
|
||||
|
||||
-- 선택학습목표
|
||||
ALTER TABLE `edu`.`user_learning_goals`
|
||||
ADD CONSTRAINT `FK_learning_goals_TO_user_learning_goals` -- 마이클래스 학습목표 등록 -> 선택학습목표
|
||||
FOREIGN KEY (
|
||||
`goal_code` -- 학습목표 코드
|
||||
)
|
||||
REFERENCES `edu`.`learning_goals` ( -- 마이클래스 학습목표 등록
|
||||
`goal_code` -- 학습목표 코드
|
||||
);
|
||||
|
||||
-- 뱃지정보
|
||||
ALTER TABLE `edu`.`user_badges`
|
||||
ADD CONSTRAINT `FK_users_TO_user_badges` -- 통합인사정보 -> 뱃지정보
|
||||
FOREIGN KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
)
|
||||
REFERENCES `edu`.`users` ( -- 통합인사정보
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
);
|
||||
|
||||
-- 검색어이력
|
||||
ALTER TABLE `edu`.`search_logs`
|
||||
ADD CONSTRAINT `FK_users_TO_search_logs` -- 통합인사정보 -> 검색어이력
|
||||
FOREIGN KEY (
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
)
|
||||
REFERENCES `edu`.`users` ( -- 통합인사정보
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
);
|
||||
|
||||
-- 알람이력
|
||||
ALTER TABLE `edu`.`notifications`
|
||||
ADD CONSTRAINT `FK_users_TO_notifications` -- 통합인사정보 -> 알람이력
|
||||
FOREIGN KEY (
|
||||
`member_id`, -- id
|
||||
`corp_code` -- 기준법인
|
||||
)
|
||||
REFERENCES `edu`.`users` ( -- 통합인사정보
|
||||
`member_id`, -- id
|
||||
`sys_comp_code` -- 기준법인
|
||||
);
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,5 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
:root {
|
||||
/* text - 텍스트 색상 */
|
||||
--text-intro-base: #1b1810;
|
||||
@@ -33,41 +34,32 @@
|
||||
--bg-base: #e4ddcf;
|
||||
--bg-primary: #ece3d2;
|
||||
--bg-secondary:
|
||||
radial-gradient(
|
||||
93.89% 93.89% at 49.32% 6.11%,
|
||||
radial-gradient(93.89% 93.89% at 49.32% 6.11%,
|
||||
rgba(255, 255, 255, 0) 0%,
|
||||
rgba(255, 255, 255, 0.11) 86.06%,
|
||||
rgba(134, 114, 77, 0.2) 88.94%
|
||||
),
|
||||
rgba(134, 114, 77, 0.2) 88.94%),
|
||||
linear-gradient(180deg, #f9f6f0 0%, #e6ddcc 100%);
|
||||
--bg-main-card: rgba(255, 255, 255, 0.6);
|
||||
--bg-intro-mask: #1b1810;
|
||||
--bg-intro: linear-gradient(
|
||||
180deg,
|
||||
#f9f5f2 0%,
|
||||
#fff 18.77%,
|
||||
#fff 41.8%,
|
||||
#ece8e4 100%
|
||||
);
|
||||
--bg-intro: linear-gradient(180deg,
|
||||
#f9f5f2 0%,
|
||||
#fff 18.77%,
|
||||
#fff 41.8%,
|
||||
#ece8e4 100%);
|
||||
--bg-main:
|
||||
linear-gradient(
|
||||
90deg,
|
||||
#0f3025 0%,
|
||||
#194335 38%,
|
||||
#0b221b 87.51%,
|
||||
#0d231c 100%
|
||||
)
|
||||
top / 100% 114px no-repeat,
|
||||
linear-gradient(90deg,
|
||||
#0f3025 0%,
|
||||
#194335 38%,
|
||||
#0b221b 87.51%,
|
||||
#0d231c 100%) top / 100% 114px no-repeat,
|
||||
#ece3d2;
|
||||
--bg-video: #1b1b1b;
|
||||
--bg-comment: #2a2a2a;
|
||||
--bg-nav: linear-gradient(
|
||||
90deg,
|
||||
#0f3025 0%,
|
||||
#194335 38%,
|
||||
#0b221b 87.51%,
|
||||
#0d231c 100%
|
||||
);
|
||||
--bg-nav: linear-gradient(90deg,
|
||||
#0f3025 0%,
|
||||
#194335 38%,
|
||||
#0b221b 87.51%,
|
||||
#0d231c 100%);
|
||||
--bg-nav-depth: #fff;
|
||||
--bg-nav-alerts: #ff2200;
|
||||
--bg-nav-alerts-hover: #188f6b;
|
||||
@@ -190,85 +182,111 @@
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes arrow-next {
|
||||
0%, 100% {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
right: 72px;
|
||||
}
|
||||
|
||||
50% {
|
||||
right: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%, 100% {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
transform: translateX(-50%) translateY(0);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateX(-50%) translateY(-12px);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes slideUp {
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes scroll-down {
|
||||
0% {
|
||||
transform-origin: 50% 100%;
|
||||
transform: scaleY(1);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform-origin: 50% 100%;
|
||||
transform: scaleY(0);
|
||||
}
|
||||
|
||||
50.1% {
|
||||
transform-origin: 50% 0;
|
||||
transform: scaleY(0);
|
||||
}
|
||||
|
||||
to {
|
||||
transform-origin: 50% 0;
|
||||
transform: scaleY(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
50% {
|
||||
opacity: 0.4;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes borderFadeIn {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: scale(0.95);
|
||||
}
|
||||
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes borderPulse {
|
||||
0%, 100% {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
border-color: #fff;
|
||||
box-shadow: 0 0 20px rgba(255, 255, 255, 0.4);
|
||||
}
|
||||
|
||||
50% {
|
||||
border-color: #fff;
|
||||
box-shadow: 0 0 30px rgba(255, 255, 255, 0.6);
|
||||
}
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "YeogiOttaeJalnan";
|
||||
src: url("https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_four@1.2/JalnanOTF00.woff") format("woff");
|
||||
font-weight: normal;
|
||||
font-display: swap;
|
||||
}
|
||||
|
||||
.intro {
|
||||
background: var(--bg-intro);
|
||||
background-attachment: fixed;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.intro .container {
|
||||
position: relative;
|
||||
top: 0;
|
||||
@@ -286,12 +304,18 @@
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.intro .text-ani {
|
||||
display: none;
|
||||
}
|
||||
.intro .text-ani:has(.welcome span.show), .intro .text-ani:has(.update-line span.show), .intro .text-ani:has(.card.show), .intro .text-ani.animating {
|
||||
|
||||
.intro .text-ani:has(.welcome span.show),
|
||||
.intro .text-ani:has(.update-line span.show),
|
||||
.intro .text-ani:has(.card.show),
|
||||
.intro .text-ani.animating {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 991px) {
|
||||
.intro .text-ani:has(.card.show) {
|
||||
display: flex;
|
||||
@@ -301,83 +325,102 @@
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .text-area {
|
||||
min-height: 160px;
|
||||
margin-bottom: 34px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.intro .text-area:has(.greeting.hidden, .update-text.hidden) {
|
||||
min-height: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.intro .greeting {
|
||||
font-size: 36px;
|
||||
font-weight: 300;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1024px) {
|
||||
.intro .greeting {
|
||||
height: 656px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .greeting {
|
||||
font-size: 2.8rem;
|
||||
min-height: 15.8rem;
|
||||
}
|
||||
.intro .greeting p.welcome > *:nth-child(5) {
|
||||
|
||||
.intro .greeting p.welcome>*:nth-child(5) {
|
||||
display: block;
|
||||
line-height: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .name {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.intro .welcome span {
|
||||
display: inline-block;
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
}
|
||||
|
||||
.intro .welcome span.show {
|
||||
animation: fadeInUp 0.4s forwards;
|
||||
}
|
||||
|
||||
.intro .welcome em {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .welcome {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .update-text {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.intro .update-line {
|
||||
overflow: hidden;
|
||||
font-size: 36px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .update-line {
|
||||
font-size: 2.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .update-line:last-child {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .update-line.bold,
|
||||
.intro .update-line em {
|
||||
font-weight: 500;
|
||||
}
|
||||
.intro .update-line > span {
|
||||
|
||||
.intro .update-line>span {
|
||||
display: inline-block;
|
||||
opacity: 0;
|
||||
transform: translateY(100%);
|
||||
}
|
||||
.intro .update-line > span.show {
|
||||
|
||||
.intro .update-line>span.show {
|
||||
animation: slideUp 0.6s forwards;
|
||||
}
|
||||
|
||||
.intro .cta-text {
|
||||
position: relative;
|
||||
width: 100vw;
|
||||
@@ -387,12 +430,14 @@
|
||||
line-height: 1.2;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .cta-text {
|
||||
font-size: 2.8rem;
|
||||
}
|
||||
}
|
||||
.intro .cta-text > div {
|
||||
|
||||
.intro .cta-text>div {
|
||||
width: 100vw;
|
||||
height: var(--window-inner-height);
|
||||
display: flex;
|
||||
@@ -400,34 +445,41 @@
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
.intro .cta-text > div:not(.mask) {
|
||||
|
||||
.intro .cta-text>div:not(.mask) {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
cursor: default;
|
||||
}
|
||||
.intro .cta-text > div:not(.mask) .text-section {
|
||||
|
||||
.intro .cta-text>div:not(.mask) .text-section {
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
}
|
||||
.intro .cta-text > div:not(.mask) .text-section:has(.show) {
|
||||
|
||||
.intro .cta-text>div:not(.mask) .text-section:has(.show) {
|
||||
background-image: url(../images/intro/promise.svg);
|
||||
background-position: bottom;
|
||||
background-size: 586px auto;
|
||||
background-repeat: no-repeat;
|
||||
animation: fadeInUp 0.5s forwards;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .cta-text > div:not(.mask) .text-section:has(.show) {
|
||||
.intro .cta-text>div:not(.mask) .text-section:has(.show) {
|
||||
background-size: 120% auto;
|
||||
}
|
||||
}
|
||||
.intro .cta-text > div:not(.mask) p {
|
||||
|
||||
.intro .cta-text>div:not(.mask) p {
|
||||
opacity: 0;
|
||||
transform: translateY(20px);
|
||||
}
|
||||
.intro .cta-text > div:not(.mask) p.show {
|
||||
|
||||
.intro .cta-text>div:not(.mask) p.show {
|
||||
animation: fadeInUp 0.5s forwards;
|
||||
}
|
||||
|
||||
.intro .cta-text .text-section {
|
||||
height: 260px;
|
||||
translate: 0 -35%;
|
||||
@@ -437,6 +489,7 @@
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .cta-text .text-section {
|
||||
width: calc(100% - 32px);
|
||||
@@ -445,12 +498,15 @@
|
||||
translate: 0 -40%;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .cta-text .text-section.show {
|
||||
animation: opacity 0.5s forwards;
|
||||
}
|
||||
|
||||
.intro .cta-text em {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.intro .cta-btn {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
@@ -472,6 +528,7 @@
|
||||
transform: translate(-50%, 25%) translateY(50px);
|
||||
transition: all 0.3s;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .cta-btn {
|
||||
width: calc(100% - 32px);
|
||||
@@ -480,16 +537,19 @@
|
||||
font-size: 28px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 992px) {
|
||||
.intro .cta-btn {
|
||||
box-shadow: 0 -4px 4px 0 #e18d36 inset, 4px 4px 12px -4px rgba(220, 196, 172, 0.85);
|
||||
}
|
||||
}
|
||||
|
||||
.intro .cta-btn.show {
|
||||
opacity: 1;
|
||||
transform: translate(-50%, 25%) translateY(0);
|
||||
transition: all 0.3s linear;
|
||||
}
|
||||
|
||||
.intro .cta-btn::after {
|
||||
content: " ";
|
||||
position: absolute;
|
||||
@@ -505,12 +565,13 @@
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
-webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
|
||||
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
|
||||
mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
|
||||
-webkit-mask-composite: xor;
|
||||
mask-composite: exclude;
|
||||
pointer-events: none;
|
||||
border-radius: inherit;
|
||||
}
|
||||
|
||||
.intro .cta-btn .ico-arrow {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
@@ -526,6 +587,7 @@
|
||||
transform: translateY(-50%);
|
||||
animation: arrow-next 3s infinite ease-in-out;
|
||||
}
|
||||
|
||||
.intro .mask {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
@@ -554,6 +616,7 @@
|
||||
transition: mask-size 0.2s linear;
|
||||
transition: mask-size 0.2s linear, -webkit-mask-size 0.2s linear;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 991px) {
|
||||
.intro .mask {
|
||||
-webkit-mask-image: none;
|
||||
@@ -561,27 +624,33 @@
|
||||
clip-path: circle(0% at 50% 50%);
|
||||
transition: clip-path 3.5s ease-out;
|
||||
}
|
||||
|
||||
.intro .mask.expand {
|
||||
clip-path: circle(300% at 50% 50%);
|
||||
}
|
||||
}
|
||||
|
||||
.intro .mask .text-section {
|
||||
background-image: url(../images/intro/promise_b.svg);
|
||||
background-position: bottom;
|
||||
background-size: auto;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .mask .text-section {
|
||||
background-size: 95% auto;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .mask .mask-text {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.intro .mask .mask-text em {
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.intro .content-area {
|
||||
margin-top: 34px;
|
||||
display: flex;
|
||||
@@ -589,6 +658,7 @@
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 991px) {
|
||||
.intro .content-area {
|
||||
flex: 1 1 0;
|
||||
@@ -597,6 +667,7 @@
|
||||
align-items: stretch;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .card {
|
||||
opacity: 0;
|
||||
transform: translateY(60px);
|
||||
@@ -611,12 +682,14 @@
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 992px) {
|
||||
.intro .card {
|
||||
flex: 0 0 calc(50% - 12px);
|
||||
padding: 60px 32px 48px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1200px) {
|
||||
.intro .card {
|
||||
flex: 1 1 0;
|
||||
@@ -624,6 +697,7 @@
|
||||
padding: 86px 22px 68px;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 991px) {
|
||||
.intro .card {
|
||||
flex: 1 1 0;
|
||||
@@ -640,26 +714,31 @@
|
||||
border-radius: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .card.show {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
.intro .card-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 1200px) {
|
||||
.intro .card-list {
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .card-list {
|
||||
gap: 2.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 991px) {
|
||||
.intro .card-list {
|
||||
flex-direction: column;
|
||||
@@ -671,6 +750,7 @@
|
||||
align-items: stretch;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .card-num {
|
||||
font-family: YeogiOttaeJalnan;
|
||||
font-size: 120px;
|
||||
@@ -682,11 +762,13 @@
|
||||
-webkit-background-clip: text;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .card-num {
|
||||
font-size: 6rem;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .card-title {
|
||||
margin-top: -46px;
|
||||
margin-bottom: 42px;
|
||||
@@ -694,30 +776,36 @@
|
||||
font-weight: 300;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .card-title {
|
||||
font-size: 2.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 991px) {
|
||||
.intro .card-title {
|
||||
margin-top: -32px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .card-desc {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 1023px) {
|
||||
.intro .card-desc {
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 991px) {
|
||||
.intro .card-desc {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.intro .card em {
|
||||
font-weight: 700;
|
||||
}
|
||||
@@ -745,18 +833,22 @@
|
||||
gap: 24px;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.scroll-indicator.hidden {
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.scroll-indicator.sec2 .bar {
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
.scroll-indicator span {
|
||||
font-size: 16px;
|
||||
color: var(--text-intro-base);
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.scroll-indicator .bar {
|
||||
width: 2px;
|
||||
height: 110px;
|
||||
@@ -764,6 +856,7 @@
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
transition: height 0.5s linear;
|
||||
}
|
||||
|
||||
.scroll-indicator .bar::before {
|
||||
content: " ";
|
||||
display: block;
|
||||
|
||||
@@ -1376,6 +1376,11 @@ class ContentManager {
|
||||
return CONFIG.IMAGE_PATHS.BASE;
|
||||
}
|
||||
|
||||
// type이 file인 경우 YouTube 썸네일 사용 불가 → 기본 이미지 반환
|
||||
if (chapterInfo.chapter.type === 'file') {
|
||||
return CONFIG.IMAGE_PATHS.BASE;
|
||||
}
|
||||
|
||||
const firstLesson = chapterInfo.chapter.lessons[0];
|
||||
if (!firstLesson.url) {
|
||||
return CONFIG.IMAGE_PATHS.BASE;
|
||||
@@ -2934,7 +2939,7 @@ class PuzzleModalManager {
|
||||
static _createLearningList(modal, chapter, chapterIndex, modalState) {
|
||||
try {
|
||||
const domUtils = typeof DOMUtils !== 'undefined' ? DOMUtils : null;
|
||||
const eventManager = typeof eventManager !== 'undefined' ? eventManager : null;
|
||||
const _eventManager = typeof eventManager !== 'undefined' ? eventManager : null;
|
||||
const errorHandler = typeof ErrorHandler !== 'undefined' ? ErrorHandler : null;
|
||||
|
||||
const list = domUtils?.$(".learning-list", modal) || modal.querySelector(".learning-list");
|
||||
@@ -3040,8 +3045,8 @@ class PuzzleModalManager {
|
||||
}
|
||||
};
|
||||
|
||||
if (eventManager) {
|
||||
const listenerId = eventManager.on(link, "click", clickHandler);
|
||||
if (_eventManager) {
|
||||
const listenerId = _eventManager.on(link, "click", clickHandler);
|
||||
// 리스너 ID를 modal에 저장하여 나중에 정리할 수 있도록
|
||||
if (!modal._learningListListenerIds) {
|
||||
modal._learningListListenerIds = [];
|
||||
@@ -3927,7 +3932,7 @@ function updatePieceGaugeByCompletion(pieceId) {
|
||||
function initializeOverlay() {
|
||||
try {
|
||||
const domUtils = typeof DOMUtils !== 'undefined' ? DOMUtils : null;
|
||||
const eventManager = typeof eventManager !== 'undefined' ? eventManager : null;
|
||||
const _eventManager = typeof eventManager !== 'undefined' ? eventManager : null;
|
||||
const errorHandler = typeof ErrorHandler !== 'undefined' ? ErrorHandler : null;
|
||||
|
||||
const overlay = domUtils?.$("#overlay") || document.getElementById("overlay");
|
||||
@@ -3947,8 +3952,8 @@ function initializeOverlay() {
|
||||
}
|
||||
};
|
||||
|
||||
if (eventManager) {
|
||||
eventManager.on(overlay, "click", clickHandler);
|
||||
if (_eventManager) {
|
||||
_eventManager.on(overlay, "click", clickHandler);
|
||||
} else {
|
||||
overlay.addEventListener("click", clickHandler);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
/>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100..900&display=swap" rel="stylesheet">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Caveat:wght@400..700&family=Noto+Sans+KR:wght@100..900&display=swap" rel="stylesheet">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="/css/lib/swiper11.min.css" />
|
||||
|
||||
|
||||
Reference in New Issue
Block a user