Hệ thống pháp luật

ỦY BAN NHÂN DÂN
TỈNH YÊN BÁI
-------

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc
---------------

Số: 162/KH-UBND

Yên Bái, ngày 12 tháng 7 năm 2023

 

KẾ HOẠCH

TRUYỀN THÔNG, QUẢNG BÁ DU LỊCH TỈNH YÊN BÁI NĂM 2023 VÀ 2024

Căn cứ Nghị quyết số 28-NQ/TU ngày 24/02/2021 của Ban Chấp hành Đảng bộ tỉnh khóa XIX về phát triển du lịch tỉnh Yên Bái giai đoạn 2021 - 2025, định hướng đến năm 2030; Kế hoạch số 65/KH-UBND ngày 28/02/2023 của Ủy ban nhân dân tỉnh về tổ chức các hoạt động kỷ niệm những ngày lễ lớn và phát triển du lịch tỉnh Yên Bái năm 2023;

Ủy ban nhân dân tỉnh ban hành Kế hoạch Truyền thông, quảng bá du lịch tỉnh Yên Bái năm 2023 và 2024, với các nội dung cụ thể như sau:

I. MỤC ĐÍCH, YÊU CẦU:

1. Mục đích

- Bảo đảm triển khai hiệu quả công tác thông tin, tuyên truyền và quảng bá về vùng đất và con người Yên Bái “Thân thiện, nhân ái, đoàn kết, sáng tạo và hội nhập”; quảng bá sâu rộng các hoạt động du lịch trên địa bàn tỉnh.

- Giới thiệu, quảng bá các giá trị văn hóa vật thể, phi vật thể, tài nguyên và sản phẩm du lịch đặc sắc; các tuyến, điểm du lịch, thu hút khách du lịch trong nước và quốc tế; qua đó góp phần thúc đẩy phát triển du lịch, phát triển kinh tế - xã hội tỉnh Yên Bái.

- Tăng cường sự phối hợp giữa các đơn vị, địa phương liên quan, sự tham gia tích cực và chủ động của các cơ quan báo chí, truyền thông.

2. Yêu cầu

- Công tác truyền thông đảm bảo thực hiện đúng chỉ đạo của tỉnh; chủ động, tích cực, phù hợp với thực tiễn và khả năng của đơn vị.

- Nội dung và hình thức tuyên truyền phải đảm bảo kịp thời, chính xác, hấp dẫn, ấn tượng, tạo được sự lan tỏa sâu rộng và tiếp cận đến nhiều người.

- Phát huy tối đa thế mạnh về nội dung và hình thức của các cơ quan báo chí hợp tác truyền thông với tỉnh để nâng cao hiệu quả công tác tuyên truyền, quảng bá hình ảnh du lịch tỉnh Yên Bái đến với khán, thính giả trong và ngoài nước.

- Trong quá trình triển khai phải có sự phối hợp chặt chẽ giữa các sở, ban, ngành, tổ chức đoàn thể và các địa phương cùng với sự vào cuộc trách nhiệm của các tổ chức, doanh nghiệp, nhân dân trong tỉnh.

II. NỘI DUNG, THỜI GIAN THỰC HIỆN:

1. Tuyên truyền, cổ động trực quan

- Nội dung: Xây dựng nội dung đăng tải trên cổng chào điện tử, bảng thông tin điện tử cỡ lớn; tuyên truyền trực quan bằng hệ thống pano tấm lớn, pano chữ A, khung phướn, trụ phướn, standee, băng rôn.... đặt tại khu vực cửa ngõ vào tỉnh, trên các trục đường, tuyến phố chính, trung tâm, đô thị, khu vực nơi tổ chức các hoạt động du lịch.

- Thời gian thực hiện: Thường xuyên trong năm 2023 và 2024.

- Đơn vị thực hiện: Sở Văn hóa, Thể thao và Du lịch; Sở Thông tin và Truyền thông; UBND các huyện, thị xã, thành phố.

2. Tuyên truyền, quảng bá trên báo chí

2.1. Truyền thông trên báo chí địa phương, phương tiện truyền thông của tỉnh

a) Mở các chuyên trang, chuyên mục, chuyên đề trên các hạ tầng truyền thông của các cơ quan báo chí (báo in, báo điện tử, phát thanh, truyền hình, Cổng Thông tin điện tử tỉnh, mạng xã hội); chủ động bố trí thời gian, thời lượng, tần suất phát sóng phù hợp sự kiện du lịch; sử dụng đa dạng các hình thức, thể loại báo chí, chú trọng thực hiện tuyên truyền bằng hình ảnh, đồ họa như infographic, E-magazines, longfom, phóng sự truyền hình phản ánh sâu... để tuyên truyền, quảng bá hình ảnh du lịch Yên Bái là “điểm đến an toàn, thân thiện, bản sắc, hấp dẫn và ấn tượng”, cụ thể:

Trên Báo Yên Bái thường kỳ (báo in): Duy trì và phát triển chuyên mục tuyên truyền về du lịch tỉnh Yên Bái; cập nhật thông tin, sự kiện và các hoạt động du lịch diễn ra trên địa bàn tỉnh trong năm 2023. Thường xuyên hợp tác với cơ quan báo Đảng các tỉnh để thực hiện hỗ trợ truyền thông về du lịch của tỉnh, hướng đến giới thiệu cảnh quan thiên nhiên, các điểm du lịch hấp dẫn, những nét đặc sắc trong văn hóa, ẩm thực của các dân tộc tỉnh Yên Bái để thu hút khách du lịch tại các tỉnh bạn.

Trên Báo Yên Bái điện tử, trang thông tin điện tử của Đài Phát thanh và Truyền hình tỉnh và Cổng thông tin điện tử tỉnh: Tiếp tục phát triển chuyên mục cố định tuyên truyền về du lịch của tỉnh; tập trung sản xuất các sản phẩm truyền thông bằng hình ảnh, đồ họa như infographic, E-magazines, longfom... với nội dung, hình ảnh cuốn hút, hấp dẫn sự quan tâm độc giả.

Trên sóng phát thanh, truyền hình của Đài Phát thanh và Truyền hình tỉnh: Cập nhật thường xuyên các chương trình, sự kiện và các hoạt động du lịch; thực hiện truyền hình trực tiếp các sự kiện du lịch, văn hóa lớn của tỉnh và xây dựng các phim quảng bá tại các sự kiện du lịch (khi có yêu cầu); sản xuất 10 sản phẩm gồm: clip, trailer, phóng sự tài liệu quảng bá du lịch của tỉnh; giới thiệu điểm đến hấp dẫn, tour, tuyến du lịch mới lạ, độc đáo... phát trên các kênh sóng phát thanh, truyền hình của Đài Phát thanh và Truyền hình tỉnh. Đồng thời, trao đổi chương trình, cộng tác với các Đài Phát thanh và Truyền hình trong Cụm thi đua số 1 và các Đài Phát thanh và Truyền hình các tỉnh, thành phố, Đài Truyền hình Việt Nam, Đài Tiếng nói Việt Nam hỗ trợ phát sóng quảng bá du lịch tỉnh Yên Bái.

Trên ấn phẩm Tạp chí Văn nghệ Yên Bái (tạp chí in): Hàng số đăng tải các hình ảnh về cảnh đẹp, địa danh du lịch, nét đặc sắc trong văn hóa các dân tộc tỉnh Yên Bái; các bài viết chuyên sâu giới thiệu giá trị văn hóa vật thể, phi vật thể và sản phẩm du lịch đặc sắc của Yên Bái.

Trên các trang mạng xã hội (Fanpage, Youtube, Zalo Offical, Tiktok...) do các cơ quan báo chí và các sở, ngành, địa phương quản lý: Cập nhật các hình ảnh, video có nội dung hấp dẫn quảng bá du lịch, sản phẩm OCOP tỉnh Yên Bái; thông tin về các sự kiện văn hóa, du lịch diễn ra tại các địa phương nhằm thông tin đầy đủ đến du khách trong và ngoài tỉnh.

- Thời gian thực hiện: Thường xuyên trong năm 2023 và 2024; cao điểm vào thời điểm trước, trong và sau các dịp nghỉ lễ lớn trong năm (như: 30/4 - 1/5; Quốc khánh 2/9), thời điểm tổ chức các sự kiện, lễ hội lớn của tỉnh (các lễ hội đầu năm, dịp tháng 8, tháng 9 hàng năm...)

- Đơn vị chủ trì: Báo Yên Bái, Đài Phát thanh và Truyền hình tỉnh, Tạp chí Văn nghệ Yên Bái, Trung tâm Điều hành thông minh - Văn phòng Ủy ban nhân dân tỉnh.

- Đơn vị phối hợp: Sở Văn hóa, Thể thao và Du lịch; các sở, ngành, địa phương, đơn vị liên quan.

b) Xây dựng Kho dữ liệu số Du lịch Yên Bái: tập hợp các video giới thiệu chung về các huyện; lưu trữ và cập nhật mới ảnh, video, các sản phẩm số về tài nguyên du lịch, dịch vụ du lịch của các huyện; các ấn phẩm video, phim ngắn phục vụ công tác xúc tiến du lịch của tỉnh. Phối hợp tích hợp các tiện ích, nội dung của Cổng thông tin du lịch vào các ứng dụng, tiện ích của tỉnh đang triển khai như: ứng dụng Công dân số YenBai-S, Cổng thông tin điện tử tỉnh.

- Đơn vị thực hiện: Trung tâm Điều hành thông minh - Văn phòng Ủy ban nhân dân tỉnh chủ trì, phối hợp với Sở Văn hóa, Thể thao và Du lịch.

- Thời gian thực hiện: Hoàn thành trong tháng 8/2023, thường xuyên cập nhật, bổ sung hằng tháng theo tình hình thực tế.

c) UBND các huyện, thị xã, thành phố chỉ đạo các Trung tâm Truyền thông và Văn hóa khai thác các chương trình, phóng sự, tin, bài về du lịch đăng tải trên website yenbaitv.org.vn của Đài Phát thanh và Truyền hình tỉnh, đăng tải trên Báo Yên Bái, Tạp chí Văn nghệ Yên Bái, Cổng Thông tin điện tử tỉnh (ít nhất 08 số/tháng); thực hiện phát lại trên hệ thống truyền thanh - truyền hình cấp huyện và truyền thanh cơ sở.

- Đơn vị chủ trì: UBND các huyện, thị xã, thành phố.

- Đơn vị phối hợp: Báo Yên Bái, Đài PTTH Yên Bái, Tạp chí Văn nghệ Yên Bái, Trung tâm Điều hành thông minh.

- Thời gian thực hiện: Thường xuyên trong năm 2023 và 2024

2.2. Truyền thông trên các cơ quan báo chí Trung ương

a) Phối hợp tuyên truyền, quảng bá trên các Đài Truyền hình Trung ương.

- Nội dung: Hợp tác tuyên truyền, gửi sản phẩm cộng tác truyền thông, quảng bá giới thiệu du lịch, văn hóa và con người Yên Bái, điểm đến thú vị ở Yên Bái... phát sóng trong các chương trình của Đài Truyền hình Việt Nam (VTV), Đài truyền hình kỹ thuật số (VTC) và Truyền hình thông tấn (VOV TV).

- Thời gian thực hiện: Thường xuyên trong năm 2023 và 2024, tập trung tuyên truyền vào các đợt cao điểm về du lịch (trước các dịp nghỉ lễ lớn, các dịp lễ hội, sự kiện văn hóa, du lịch của tỉnh).

- Đơn vị thực hiện: Đài Phát thanh và Truyền hình tỉnh chủ trì, phối hợp với Sở Thông tin và Truyền thông, Sở Văn hóa, Thể thao và Du lịch, UBND các huyện, thị xã, thành phố.

b) Truyền thông trên các cơ quan báo chí Trung ương khác

- Nội dung:

Đề nghị Văn phòng đại diện, phóng viên các cơ quan báo chí Trung ương thường trú tại Yên Bái hỗ trợ tuyên truyền về các hoạt động du lịch của tỉnh, đặc biệt tuyên truyền đậm nét về tiềm năng phát triển du lịch của tỉnh, các tour tuyến, các điểm đến của tỉnh...

Hợp tác tuyên truyền với các cơ quan báo chí Trung ương khác, như: Thông tấn xã Việt Nam, Báo Vietnamnet, Báo Lao động, Báo Thanh niên Việt.

Phối hợp tuyên truyền trên các tạp chí chuyên về lĩnh vực du lịch: Tạp chí Du lịch (Tổng cục Du lịch), Tạp chí Heritage thuộc Tổng công ty Hàng không Quốc gia Việt Nam, Tạp chí điện tử tri thức trực tuyến (Zingnews.vn).

- Đơn vị thực hiện: Sở Thông tin và Truyền thông chủ trì, phối hợp với Sở Văn hóa, Thể thao và Du lịch, Ủy ban nhân dân các huyện, thị xã, thành phố.

- Thời gian thực hiện: Thường xuyên trong năm 2023 và 2024, tập trung tuyên truyền vào các đợt cao điểm về du lịch (trước các dịp nghỉ lễ lớn, các dịp lễ hội, sự kiện văn hóa, du lịch của tỉnh).

3. Truyền thông trên internet và mạng xã hội và hệ thống SMS

3.1. Truyền thông trên internet và mạng xã hội

- Nội dung:

Xây dựng chuyên trang cập nhật thông tin và thực hiện quảng bá về du lịch Yên Bái trên Trang thông tin điện tử du lịch Yên Bái, Cổng Thông tin đối ngoại tỉnh, Cổng Thông tin điện tử tỉnh, trang thông tin điện tử và các kênh: Fanpage, Instagram, Twitter, Youtube, Zalo OA, Tiktok... của các sở, ban, ngành, UBND các huyện, thị xã, thành phố và doanh nghiệp trên địa bàn tỉnh. (Sở Thông tin và Truyền thông hướng dẫn chi tiết để thực hiện).

Phối hợp truyền thông quảng bá trên website và fanpage của Tổng cục Du lịch (Sở Văn hóa, Thể thao và Du lịch thực hiện).

Lựa chọn sản phẩm quảng bá du lịch tiêu biểu gửi Cục Thông tin đối ngoại đăng tải trên Cổng Thông tin điện tử đối ngoại (https://www.vietnam.vn). Đồng thời, tập hợp được các sản phẩm sẵn có, đặc biệt là phim ngắn “Du lịch Yên Bái - Nơi hội tụ sắc mầu Tây Bắc”; "Nghệ thuật Xòe Thái - Tinh hoa miền di sản” quảng bá trên internet và mạng xã hội (Sở Thông tin và Truyền thông thực hiện)

- Thời gian: Thường xuyên trong năm 2023 và 2024.

- Đơn vị thực hiện: Các cơ quan, đơn vị, địa phương.

3.2. Truyền thông trên hệ thống SMS

- Nội dung: Liên kết các doanh nghiệp viễn thông như: Vinaphone, Viettel, Mobilphone xây dựng hệ thống tin nhắn SMS thông tin sự kiện du lịch lớn của tỉnh đến rộng rãi công chúng và du khách.

- Thời gian: Khi diễn ra các sự kiện, hoạt động du lịch lớn của tỉnh trong năm 2023 và 2024.

- Đơn vị chủ trì: Sở Thông tin và Truyền thông.

- Đơn vị phối hợp: Sở Văn hóa, Thể thao và Du lịch.

- Đơn vị thực hiện: Các doanh nghiệp Viễn thông.

4. Truyền thông, quảng bá qua xuất bản tài liệu

4.1. Xây dựng, xuất bản các ấn phẩm, tờ rơi, tờ gấp, poster... phục vụ tại các sự kiện du lịch của tỉnh; trong đó đặc biệt ưu tiên đối với các tài liệu song ngữ Việt - Anh nhằm hướng đến đối tượng khách du lịch người nước ngoài.

- Thời gian: Năm 2023.

- Đơn vị chủ trì: Sở Văn hóa, Thể thao và Du lịch.

- Đơn vị phối hợp: UBND các huyện, thị xã, thành phố.

4.2. Sưu tầm, nghiên cứu, tổng hợp và biên tập các câu chuyện về các di tích, danh lam thắng cảnh, điểm du lịch xuất bản thành sách song ngữ Việt - Anh “Yên Bái - con đường di sản”.

- Thời gian: Năm 2023.

- Đơn vị chủ trì: Sở Văn hóa, Thể thao và Du lịch.

- Đơn vị phối hợp: Trường Cao đẳng Yên Bái, Hội Liên hiệp VHNT tỉnh; UBND các huyện, thị xã, thành phố.

4.3. Xây dựng mã QR-Code các sản phẩm OCOP của tỉnh tích hợp trên Bản đồ du lịch số Yên Bái

- Thời gian: Quý III/2023.

- Đơn vị chủ trì: Sở Thông tin và Truyền thông

- Đơn vị phối hợp: Sở Văn hóa, Thể thao và Du lịch; Sở Nông nghiệp và Phát triển nông thôn; Sở Công Thương.

5. Tuyên truyền trên hệ thống thông tin cơ sở

- Nội dung: Triển khai Chiến dịch truyền thông để tuyên truyền đồng bộ trên hệ thống thông tin cơ sở việc phát triển sản phẩm du lịch tại các địa phương; các hoạt động sự kiện lễ hội quy mô cấp tỉnh và cấp huyện... bằng nhiều hình thức, cụ thể:

Lựa chọn tuyên truyền qua các bảng thông tin điện tử, xe tuyên truyền lưu động, cụm pano cổ động... phù hợp với đặc điểm của từng địa phương, phong tục, tập quán từng dân tộc, từng đối tượng.

Đăng tải nội dung tuyên truyền trên trang thông tin điện tử của các huyện, xã, phường, thị trấn, trên facebook chính thống của các địa phương.

Tuyên truyền trên hệ thống truyền thanh - truyền hình cấp huyện và đài truyền thanh cơ sở; ưu tiên sử dụng hiệu quả hệ thống loa phát thanh tại các thôn, bản, tổ dân phố.

- Hình thức triển khai: Trung tâm Truyền thông và Văn hóa các huyện, thị xã, thành phố chủ động thực hiện sản xuất tin, bài, phóng sự phát trên sóng truyền thanh - truyền hình của địa phương. Sở Thông tin và Truyền thông, Sở Văn hóa, Thể thao và Du lịch, Báo Yên Bái, Đài Phát thanh và Truyền hình tỉnh cung cấp các sản phẩm truyền thông cho Trung tâm Truyền thông và Văn hóa các huyện, thị, tối thiểu 01 sản phẩm mới/tuần để thực hiện phát mới, phát lại tại địa phương.

- Thời gian thực hiện: Thường xuyên trong năm 2023 và 2024.

- Đơn vị thực hiện: UBND các huyện, thị xã, thành phố.

- Đơn vị phối hợp cung cấp sản phẩm truyền thông: Sở Thông tin và Truyền thông, Sở Văn hóa, Thể thao và Du lịch, Báo Yên Bái, Đài Phát thanh và Truyền hình tỉnh.

6. Tuyên truyền trên Hãng Hàng không Quốc gia Việt Nam (Vietnam Airlines) (dự kiến)

- Nội dung: Hợp tác với Hãng Hàng không Quốc gia Việt Nam (Vietnam Airlines) để phát phim quảng bá du lịch Yên Bái trên các chuyến bay của Vietnam Airlines.

- Thời gian thực hiện: Năm 2023, 2024.

- Đơn vị thực hiện: Sở Văn hóa, Thể thao và Du lịch làm việc với Hãng Hàng không Quốc gia Việt Nam (Vietnam Airlines), tham mưu phương án phối hợp truyền thông và thực hiện ký hợp đồng truyền thông

7. Truyền thông qua các hoạt động xúc tiến du lịch và tổ chức đón các đoàn famtrip, blogger trong nước

- Nội dung: Tổ chức các cuộc hội thảo và các sự kiện văn hóa, du lịch tại các thành phố lớn gắn với công tác truyền thông theo Kế hoạch được phê duyệt năm 2023- Đơn vị thực hiện: Sở Văn hóa, Thể thao và Du lịch; Hội Liên hiệp Văn học Nghệ thuật tỉnh.

8. Truyền thông, quảng bá về du lịch Yên Bái ra nước ngoài

a) Phối hợp với Cục Thông tin đối ngoại, Bộ Thông tin và Truyền thông để tuyên truyền, quảng bá hình ảnh của tỉnh Yên Bái ra nước ngoài trên Cổng Thông tin điện tử đối ngoại (https://www.vietnam.vn)

- Thời gian thực hiện: Trong năm 2023, 2024

- Đơn vị thực hiện: Sở Thông tin và Truyền thông chủ trì, phối hợp với Sở Văn hóa, Thể thao và Du lịch, Văn phòng Ủy ban nhân dân tỉnh.

b) Trao đổi, phối hợp với các địa phương có quan hệ truyền thống với tỉnh (tỉnh Val de Marne - CH Pháp, tỉnh Viêng Chăn, tỉnh Xay Nhạ Bu Ly - CHDCND Lào, tỉnh Vân Nam - Trung Quốc, thành phố Mimasaka - Nhật Bản) để tuyên truyền về các hoạt động du lịch của tỉnh cũng như quảng bá hình ảnh của tỉnh để thu hút khách du lịch quốc tế đến với tỉnh.

Phối hợp với Vụ Thông tin Báo chí (Bộ Ngoại giao), Trung tâm hướng dẫn báo chí nước ngoài (Cục Phục vụ ngoại giao đoàn, Bộ Ngoại giao) để cung cấp thông tin, quảng bá hình ảnh du lịch của tỉnh Yên Bái tới các phóng viên nước ngoài thường trú tại Việt Nam và phóng viên không thường trú.

- Thời gian thực hiện: Trong năm 2023, 2024

- Đơn vị thực hiện: Văn phòng Ủy ban nhân dân tỉnh chủ trì, phối hợp với Sở Văn hóa, Thể thao và Du lịch, Sở Thông tin và Truyền thông, Ủy ban nhân dân các huyện, thị xã, thành phố.

III. KINH PHÍ THỰC HIỆN:

Các cơ quan, đơn vị, địa phương chủ động sử dụng nguồn kinh phí đã được Ủy ban nhân dân tỉnh bố trí giao dự toán trong năm 2023, các nguồn kinh phí hợp pháp khác và huy động từ các nguồn xã hội hóa để tổ chức triển khai thực hiện các nhiệm vụ được phân công.

Căn cứ tình hình thực tế triển khai các hoạt động truyền thông, quảng bá, để kịp thời tổ chức các đợt đẩy mạnh tuyên truyền vào các dịp cao điểm và dịp tổ chức các hoạt động, sự kiện văn hóa, du lịch lớn của tỉnh, Sở Văn hóa, Thể thao và Du lịch, Sở Thông tin và Truyền thông, Đài Phát thanh và Truyền hình tỉnh xây dựng dự toán kinh phí thực hiện các nội dung phối hợp tuyên truyền, quảng bá với các cơ quan, đơn vị Trung ương, gửi Sở Tài chính thẩm định, báo cáo Ủy ban nhân dân tỉnh xem xét, quyết định.

IV. TỔ CHỨC THỰC HIỆN:

1. Đề nghị Ban Tuyên giáo Tỉnh ủy

Chỉ đạo Ban Tuyên giáo các huyện, thị xã, thành phố phối hợp với UBND cùng cấp đẩy mạnh công tác truyền thông, quảng bá các hoạt động du lịch tỉnh Yên Bái trong năm 2023.

2. Sở Thông tin và Truyền thông

- Là cơ quan chủ trì đôn đốc các cơ quan, đơn vị, địa phương triển khai đảm bảo yêu cầu về tiến độ, chất lượng và hiệu quả truyền thông.

- Chủ trì tham mưu triển khai và thực hiện các nhiệm vụ được phân công tại Kế hoạch này; hướng dẫn các sở, ngành, địa phương nội dung chi tiết để thực hiện truyền thông, quảng bá đảm bảo theo yêu cầu đã đề ra.

- Chỉ đạo các doanh nghiệp bưu chính, viễn thông đảm bảo thông tin liên lạc thông suốt khi diễn ra các hoạt động du lịch của tỉnh trong năm 2023.

- Phối hợp với các cơ quan báo chí của tỉnh, văn phòng đại diện, phóng viên thường trú các cơ quan báo chí Trung ương tại Yên Bái, các cơ quan báo chí hợp tác truyền thông với tỉnh, các công ty truyền thông tổ chức triển khai thực hiện các nội dung tuyên truyền, quảng bá về du lịch của tỉnh.

- Phối hợp với Cục Thông tin đối ngoại, Bộ Thông tin và Truyền thông để tuyên truyền, quảng bá hình ảnh của tỉnh Yên Bái ra nước ngoài trên Cổng Thông tin điện tử đối ngoại (https://www.vietnam.vn)

3. Sở Văn hóa, Thể thao và Du lịch

- Phối hợp chặt chẽ với Sở Thông tin và Truyền thông, các cơ quan báo chí, truyền thông trong công tác thông tin, tuyên truyền; Thường xuyên cập nhật, cung cấp thông tin trên các kênh truyền thông của đơn vị như trang thông tin điện tử, bản tin và trang mạng xã hội của đơn vị về các nội dung liên quan đến chương trình kích cầu du lịch, các điểm đến và sản phẩm du lịch hấp dẫn, độc đáo của tỉnh Yên Bái.

- Chủ trì thực hiện các nội dung được giao tại Kế hoạch này; vận động doanh nghiệp thực hiện xã hội hóa tuyên truyền, cổ động trực quan về du lịch của tỉnh.

- Làm việc với với Hãng Hàng không Quốc gia Việt Nam (Vietnam Airlines), xây dựng phương án cụ thể việc phát phim quảng bá du lịch Yên Bái trên các chuyến bay của hãng trong năm 2023, 2024 với lộ trình, thời gian phù hợp theo yêu cầu tại Kế hoạch này; báo cáo Ủy ban nhân dân tỉnh xem xét, quyết định. Sau khi được phê duyệt phương án, thực hiện ký kết và triển khai hợp tác đảm bảo thiết thực, hiệu quả, đúng quy định.

4. Văn phòng Ủy ban nhân dân tỉnh

Thực hiện tuyên truyền, quảng bá về du lịch Yên Bái qua các kênh truyền thông của nước ngoài theo nhiệm vụ tại Kế hoạch này.

5. Sở Tài chính

- Thẩm định dự toán Kinh phí hỗ trợ Sở Văn hóa, Thể thao và Du lịch, Sở Thông tin và Truyền thông, Đài Phát thanh và Truyền hình tỉnh thực hiện các nội dung phối hợp, hợp tác truyền thông, báo cáo Ủy ban nhân dân tỉnh xem xét, quyết định (tùy từng thời điểm theo đề xuất của các cơ quan, đơn vị).

- Hướng dẫn các đơn vị sử dụng và thanh quyết toán kinh phí theo đúng quy định hiện hành.

6. Các sở, ban, ngành của tỉnh

- Căn cứ chức năng, nhiệm vụ, phối hợp chặt chẽ với Sở Thông tin và Truyền thông, Sở Văn hóa, Thể thao và Du lịch để triển khai các nhiệm vụ tại Kế hoạch này.

- Vận động, hướng dẫn các cán bộ, công chức, viên chức, người lao động tại các cơ quan, đơn vị trực thuộc thực hiện chia sẻ, quảng bá các thông tin, hình ảnh về du lịch, các sự kiện văn hóa, du lịch của tỉnh, của địa phương bằng nhiều hình thức phù hợp, đặc biệt là trên các nền tảng mạng xã hội.

7. Đài Phát thanh và Truyền hình tỉnh, Báo Yên Bái, Tạp chí Văn nghệ Yên Bái, Trung tâm Điều hành thông minh - Văn phòng Ủy ban nhân dân tỉnh

- Triển khai thực hiện các nhiệm vụ được giao tại Kế hoạch. Tuyên truyền hiệu quả du lịch tỉnh Yên Bái trên các ấn phẩm, phương tiện truyền thông do đơn vị quản lý, đặc biệt nghiên cứu xuất bản các bài dưới dạng infographic, E-magazines, longform với hình thức phong phú, hấp dẫn thu hút độc giả quan tâm.

* Đài Phát thanh và Truyền hình tỉnh:

- Hợp tác tuyên truyền và cung cấp các sản phẩm truyền thông về du lịch tỉnh cộng tác với các Đài truyền hình Trung ương để thực hiện phát sóng;

- Đề nghị Đài Phát thanh và Truyền hình các tỉnh trong Cụm Thi đua số 1 và các tỉnh, thành phố hỗ trợ triển khai công tác tuyên truyền, quảng bá cho du lịch Yên Bái.

7. Ủy ban nhân dân các huyện, thị xã, thành phố

Phối hợp chặt chẽ với Sở Thông tin và Truyền thông đẩy mạnh các hoạt động truyền thông tại cơ sở, đảm bảo thông tin được tuyên truyền sâu rộng đến đông đảo Nhân dân. Trong đó lưu ý:

- Thực hiện tuyên truyền trên cổng thông tin điện tử của địa phương, chú trọng trên hệ thống truyền thanh cơ sở.

- Chỉ đạo các Phòng, Ban chuyên môn phối hợp với các cơ quan báo chí, truyền thông để xây dựng các nội dung và phối hợp tuyên truyền.

- Vận động, hướng dẫn các cán bộ, công chức, viên chức, người lao động tại các cơ quan, đơn vị trên địa bàn và các tầng lớp nhân dân thực hiện chia sẻ, quảng bá các thông tin, hình ảnh về du lịch, các sự kiện văn hóa, du lịch của tỉnh, của địa phương bằng nhiều hình thức phù hợp, đặc biệt là trên các nền tảng mạng xã hội.

V. CHẾ ĐỘ BÁO CÁO:

Các cơ quan, đơn vị, địa phương xây dựng báo cáo kết quả thực hiện gửi về Sở Thông tin và Truyền thông trước ngày 20/12/2023 để tổng hợp, báo cáo Ủy ban nhân dân tỉnh.

Trên đây là Kế hoạch triển khai chiến dịch truyền thông, quảng bá du lịch tỉnh Yên Bái năm 2023, đề nghị các cơ quan, đơn vị, địa phương căn cứ triển khai thực hiện. Trong quá trình thực hiện nếu có phát sinh vướng mắc báo cáo về Ủy ban nhân dân tỉnh (qua Sở Thông và Truyền thông) để kịp thời chỉ đạo giải quyết./.

 


Nơi nhận:
- Thường trực Tỉnh ủy;
- Chủ tịch, các PCT UBND tỉnh;
- Ban Tuyên giáo Tỉnh ủy;
- Các sở, ban, ngành, đoàn thể tỉnh;
- UBND các huyện, thị xã, thành phố;
- Báo Yên Bái, Đài PTTH tỉnh; TT ĐHTM;
- Hội Liên hiệp VHNT tỉnh;
- Trường Cao đẳng Yên Bái;
- Hiệp hội du lịch Yên Bái;
- Chánh VP; Phó CVP (đ/c V/Anh);
- Lưu: VT, TC, VX.

KT. CHỦ TỊCH
PHÓ CHỦ TỊCH




Vũ Thị Hiền Hạnh

 



lồng nhau (bên trong) hay không const memberID = 0; const vbID = '8904a663cfd5dfa3655566ba90f60d98'; // State management cho phân tích let isAnalyzing = false; // Có đang phân tích không let currentAnalyzingAddress = null; // Address đang được phân tích let currentAnalyzingElement = null; // Element đang được phân tích let currentAnalyzingBadge = null; // Badge của element đang phân tích let isPanelOpen = false; // Panel phân tích có đang mở không console.log('Tiện ích loaded - memberID:', memberID, 'vbID:', vbID); function isInViewportAndTabNoiDung(element) { const rect = element.getBoundingClientRect(); const buffer = 1500; // Buffer to preload content below the viewport (approx. 50+ lines) const viewHeight = window.innerHeight || document.documentElement.clientHeight; const isInViewport = rect.top < viewHeight + buffer && rect.bottom >= 0; const isInTabNoiDung = $(element).closest('#tab_noi_dung_vb').length > 0; return isInViewport && isInTabNoiDung; } function getAddress(element) { const validTags = ['trichyeu', 'cancu', 'phan', 'chuong', 'muc', 'tieumuc', 'dieu', 'khoan', 'diem']; const $parent = $(element).closest(validTags.join(',')); if (!$parent.length) { return null; } let addr = $parent.attr('address'); if (!addr && $parent.prop('tagName').toLowerCase() === 'trichyeu') { addr = 'trichyeu'; $parent.attr('address', addr); } return addr || null; } function processTnplClasses($element) { const tnplKeysInLine = new Set(); // key = slug hoặc text (thường là slug) $element.find('tnpl').each(function () { const $tnpl = $(this); const tnplSlug = ($tnpl.attr('slug') || '').trim().toLowerCase(); const tnplKey = tnplSlug || $tnpl.text().trim().toLowerCase(); // Đã xử lý trong cùng dòng => bỏ if (tnplKeysInLine.has(tnplKey)) { return; } tnplKeysInLine.add(tnplKey); let tnplExists = false; // Chỉ duyệt các tnpl đã được tô màu (class on) $('tnpl.on').each(function () { const $existingTnpl = $(this); const existingSlug = ($existingTnpl.attr('slug') || '').trim().toLowerCase(); const existingKey = existingSlug || $existingTnpl.text().trim().toLowerCase(); if ( existingKey === tnplKey && isInViewportAndTabNoiDung($existingTnpl[0]) ) { tnplExists = true; return false; // break each } }); if (!tnplExists) { $tnpl.addClass('on'); } }); } function processQueue() { while (pendingRequests < maxConcurrentRequests && requestQueue.length > 0) { const task = requestQueue.shift(); pendingRequests++; task() .always(() => { pendingRequests--; processQueue(); }); } } function processVisibleParagraphs() { try { $('#tab_noi_dung_vb p:not([is-posted="1"])').each(function () { let $element = $(this); if (isInViewportAndTabNoiDung(this)) { $element.attr('is-posted', '1'); $element.addClass('loading-content'); let p_innerHTML = $element.html(); let address = null; if (cac_cau_hinh.loai_noi_dung.includes('docs')) { address = getAddress($element); } const isSubP = $element.parents('p').length > 0; if (isSubP && !allow_sub_p) { $element.removeClass('loading-content'); return; // Không gửi nếu không cho phép } const postData = { p_content: p_innerHTML, cac_cau_hinh, address }; if (isSubP && allow_sub_p) { postData.sub_p = 1; } requestQueue.push(() => $.ajax({ url: '//tnpl' + (Math.floor(Math.random() * 10) + 1) + '.hethongphapluat.com/tien-ich/tim.tien.ich.php', type: 'POST', data: postData, success: function(response) { $element.html(response); processTnplClasses($element); // Đợi CTTD và các tiện ích load xong rồi mới attach badge if (memberID === 4 && typeof attachPhanTichBadge === 'function') { setTimeout(function() { // $element chính là thẻ p, kiểm tra và attach badge trực tiếp const $parent = $element.closest('phan, chuong, muc, tieumuc, dieu, khoan, diem'); if ($parent.length > 0 && $parent.find('.badge-phan-tich[data-for="' + $parent.attr('address') + '"]').length === 0) { const address = $parent.attr('address'); $element.attr('data-address', address); // Lấy tên loại thẻ cho tooltip const parentType = getParentTypeName($parent.prop('tagName').toLowerCase()); // Append badge VÀO PARENT (dieu, khoan,...) thay vì vào

để tránh xung đột CTTD const $badge = $('Phân tích'); $parent.append($badge); // Thêm class để CSS set position: relative CHỈ cho element có badge $parent.addClass('has-phan-tich-badge'); } // Xử lý các p con (nếu có sub-p) attachPhanTichBadge($element); }, 300); // Đợi 300ms để CTTD render xong } }, complete: function() { $element.removeClass('loading-content'); } }) ); processQueue(); } }); } catch(e) { console.error('Lỗi processVisibleParagraphs:', e); } } $(window).on('scroll resize', function () { processVisibleParagraphs(); }); console.log('Bắt đầu processVisibleParagraphs lần đầu...'); processVisibleParagraphs(); console.log('processVisibleParagraphs lần đầu hoàn thành'); // Chức năng phân tích điều luật (chỉ cho member_id = 4) if (memberID === 4) { // Modal cảnh báo function showWarningModal(message) { // Tạo modal nếu chưa có if ($('#warningModal').length === 0) { const modalHTML = `

`; $('body').append(modalHTML); } $('#warningModalBody').html('

' + message + '

'); $('#warningModal').modal('show'); } // Hàm lấy tên tiếng Việt của thẻ function getParentTypeName(tagName) { const typeNames = { 'phan': 'Phần', 'chuong': 'Chương', 'muc': 'Mục', 'tieumuc': 'Tiểu mục', 'dieu': 'Điều', 'khoan': 'Khoản', 'diem': 'Điểm' }; return typeNames[tagName] || 'Nội dung'; } function attachPhanTichBadge($container) { const validTags = 'phan, chuong, muc, tieumuc, dieu, khoan, diem'; $container.find('p').each(function() { const $p = $(this); const $parent = $p.closest(validTags); if ($parent.length > 0) { const address = $parent.attr('address'); // Kiểm tra đã có badge cho parent này chưa if ($parent.find('.badge-phan-tich[data-for="' + address + '"]').length === 0) { // Lưu address vào data attribute $p.attr('data-address', address); // Lấy tên loại thẻ cho tooltip const parentType = getParentTypeName($parent.prop('tagName').toLowerCase()); // Append badge vào PARENT, không vào

const $badge = $('Phân tích'); $parent.append($badge); // Thêm class để CSS set position: relative CHỈ cho element có badge $parent.addClass('has-phan-tich-badge'); } } }); } // Helper: Escape HTML entities function escapeHtml(text) { const map = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }; return String(text).replace(/[&<>"']/g, function(m) { return map[m]; }); } // Helper: Convert Markdown to HTML (đơn giản) function markdownToHtml(markdown) { if (!markdown) return ''; let html = markdown; // Headers html = html.replace(/^### (.*$)/gim, '

$1
'); html = html.replace(/^## (.*$)/gim, '

$1

'); html = html.replace(/^# (.*$)/gim, '

$1

'); // Bold html = html.replace(/\*\*(.*?)\*\*/g, '$1'); // Italic html = html.replace(/\*(.*?)\*/g, '$1'); // Blockquote html = html.replace(/^> (.*$)/gim, '
$1
'); html = html.replace(/^> (.*$)/gim, '
$1
'); // Lists (unordered) html = html.replace(/^\- (.*$)/gim, '
  • $1
  • '); html = html.replace(/(
  • .*<\/li>)/s, '
      $1
    '); // Lists (ordered) html = html.replace(/^\d+\. (.*$)/gim, '
  • $1
  • '); // Line breaks và paragraphs html = html.split('\n\n').map(para => { para = para.trim(); if (para.startsWith('')) { return para; } if (para) { return '

    ' + para.replace(/\n/g, '
    ') + '

    '; } return ''; }).join('\n'); // Clean up multiple line breaks html = html.replace(/\n{3,}/g, '\n\n'); return html; } // Panel fixed position function closePhanTichPanel() { const $panel = $('#phanTichPanel'); if ($panel.length) { $panel.removeClass('show'); setTimeout(() => { $panel.remove(); }, 300); } // Reset highlight và badge khi đóng panel if (currentAnalyzingElement) { currentAnalyzingElement.removeClass('highlight-border-persistent'); } if (currentAnalyzingBadge) { currentAnalyzingBadge.text('Phân tích').removeClass('analyzing'); currentAnalyzingBadge.data('analyzing', false); currentAnalyzingBadge.data('hovering', false); currentAnalyzingBadge.css({display: 'none'}); // Ẩn badge khi đóng } // Reset tất cả các element khác (trong trường hợp có nhiều) $('#tab_noi_dung_vb .highlight-border-persistent').removeClass('highlight-border-persistent'); $('#tab_noi_dung_vb .badge-phan-tich-container.analyzing').each(function() { $(this).text('Phân tích').removeClass('analyzing').data('analyzing', false); }); // Check: có CTTD pointer đang mở không? const $visiblePointers = $('.pointer:visible'); const hadCTTDOpen = $visiblePointers.length > 0; if (hadCTTDOpen) { // CÓ CTTD đang mở → giữ rightdocinfo ẩn console.log('ℹ️ CTTD pointer is visible, keeping rightdocinfo hidden'); } else { // KHÔNG có CTTD → SHOW lại rightdocinfo const $rightdocinfo = $('#rightdocinfo'); if ($rightdocinfo.length > 0) { $rightdocinfo.show(); console.log('✅ Showing rightdocinfo back (no CTTD pointer)'); } } // Reset state isAnalyzing = false; currentAnalyzingAddress = null; currentAnalyzingElement = null; currentAnalyzingBadge = null; isPanelOpen = false; // Đánh dấu panel đã đóng console.log('✅ Panel closed, state reset, isPanelOpen = false'); } // Panel đã song song với rightdocinfo → không cần MutationObserver nữa console.log('✅ Panel running in standalone mode (parallel to rightdocinfo)'); // Resize event để update panel dimensions khi browser resize let resizeTimer; $(window).on('resize', function() { clearTimeout(resizeTimer); resizeTimer = setTimeout(function() { if (isPanelOpen && $('#phanTichPanel').length > 0) { updatePanelDimensions(); console.log('✅ Panel dimensions updated on window resize'); } }, 250); // Debounce 250ms }); // Function để detect và áp dụng dimensions từ rightdocinfo function updatePanelDimensions() { const $panel = $('#phanTichPanel'); const $rightdocinfo = $('#rightdocinfo'); const $docRightCol = $('#doc-right-col'); if ($panel.length === 0) return; // Ưu tiên: doc-right-col > rightdocinfo let $reference = $docRightCol.length > 0 ? $docRightCol : $rightdocinfo; // Nếu reference bị ẩn (display:none), tạm show để get dimensions let wasHidden = false; if ($reference.length > 0 && !$reference.is(':visible')) { wasHidden = true; $reference.css('visibility', 'hidden').show(); } if ($reference.length > 0) { const refWidth = $reference.outerWidth(); const refOffset = $reference.offset(); if (refWidth && refOffset) { // Tính vị trí right từ edge màn hình const windowWidth = $(window).width(); const rightPosition = windowWidth - (refOffset.left + refWidth); $panel.css({ 'width': refWidth + 'px', 'right': rightPosition + 'px' }); console.log('✅ Panel dimensions updated:', { width: refWidth + 'px', right: rightPosition + 'px', reference: $reference.attr('id') }); } else { console.warn('⚠️ Could not get dimensions from reference element'); } // Restore trạng thái hidden nếu cần if (wasHidden) { $reference.hide().css('visibility', ''); } } else { console.warn('⚠️ No reference element found for panel dimensions'); } } function openPhanTichPanel(address, vbID) { console.log('openPhanTichPanel called with address:', address); console.log('Current state - isAnalyzing:', isAnalyzing, 'currentAnalyzingAddress:', currentAnalyzingAddress); // Kiểm tra nếu đang phân tích element khác if (isAnalyzing && currentAnalyzingAddress && currentAnalyzingAddress !== address) { const currentName = getElementDisplayName(currentAnalyzingAddress); console.warn('Already analyzing:', currentAnalyzingAddress, 'Cannot analyze:', address); showWarningModal('Vui lòng chờ phân tích ' + currentName + ' hoàn tất...'); return; } // Nếu đang phân tích cùng element → không làm gì if (isAnalyzing && currentAnalyzingAddress === address) { console.log('Already analyzing this element, ignoring duplicate request'); return; } // Panel sẽ fixed position append vào body const $rightdocinfo = $('#rightdocinfo'); // KHÔNG ẨN CTTD pointer - cho phép CTTD và panel cùng tồn tại console.log('Panel opening, CTTD pointer can stay visible'); // ẨN rightdocinfo để tiết kiệm không gian if ($rightdocinfo.length > 0) { $rightdocinfo.hide(); console.log('Hidden rightdocinfo to save space'); } // XÓA highlight persistent của TẤT CẢ elements cũ trước $('#tab_noi_dung_vb .highlight-border-persistent').removeClass('highlight-border-persistent'); console.log('Removed all previous highlight-border-persistent'); // Tìm element đang được phân tích và badge của nó const $element = $('[address="' + address + '"]'); const $badge = $element.find('.badge-phan-tich-container[data-for="' + address + '"]').first(); // Set state isAnalyzing = true; currentAnalyzingAddress = address; currentAnalyzingElement = $element; currentAnalyzingBadge = $badge; console.log('State set:', { isAnalyzing: isAnalyzing, currentAnalyzingAddress: currentAnalyzingAddress, elementFound: $element.length > 0, badgeFound: $badge.length > 0 }); // Thêm highlight persistent cho element MỚI này $element.addClass('highlight-border-persistent'); // Thay đổi badge thành "Đang phân tích..." và giữ hiển thị if ($badge.length > 0) { $badge.text('Đang phân tích...').addClass('analyzing'); // Giữ badge hiển thị và ở đúng vị trí $badge.data('analyzing', true); $badge.data('hovering', true); // Prevent auto-hide console.log('Badge set to analyzing state'); // Đảm bảo badge hiển thị ở đúng vị trí (vì dùng position: fixed) showPhanTichBadgeForParent($element); } // Tạo panel nếu chưa có - fixed position append vào body if ($('#phanTichPanel').length === 0) { const panelHTML = `
    Phân tích điều luật
    Đang phân tích...

    Đang phân tích...

    `; // Append vào body (fixed position không cần container cụ thể) $('body').append(panelHTML); // Detect width từ rightdocinfo và áp dụng cho panel updatePanelDimensions(); // Trigger show và set flag setTimeout(() => { $('#phanTichPanel').addClass('show'); isPanelOpen = true; console.log('✅ Panel opened (fixed position), isPanelOpen = true'); }, 10); } else { $('#phanTichPanelBody').html(`
    Đang phân tích...

    Đang phân tích...

    `); // Update dimensions khi re-open updatePanelDimensions(); $('#phanTichPanel').addClass('show'); isPanelOpen = true; console.log('✅ Panel re-opened (fixed position), isPanelOpen = true'); } // Bind nút đóng và ESC $(document).off('click.closePhanTich').on('click.closePhanTich', '.close-phan-tich', function() { closePhanTichPanel(); }); $(document).off('keyup.closePhanTich').on('keyup.closePhanTich', function(e) { if (e.key === 'Escape') closePhanTichPanel(); }); // Bind nút refresh - phân tích lại $(document).off('click.refreshPhanTich').on('click.refreshPhanTich', '.btn-refresh-phan-tich', function(e) { e.preventDefault(); e.stopPropagation(); const $btn = $(this); const $icon = $btn.find('i'); // Disable button và thêm animation $btn.prop('disabled', true); $icon.addClass('fa-spin'); console.log('🔄 Refresh: Phân tích lại address:', address); // Show loading trong panel $('#phanTichPanelBody').html(`
    Đang phân tích lại...

    Đang xóa cache và phân tích lại...

    `); // Gọi API xóa cache trước deletePhanTichCache(address, vbID, function(deleteSuccess) { if (deleteSuccess) { console.log('✅ Cache deleted, now re-analyzing...'); // Sau khi xóa cache, gọi lại API phân tích callPhanTichAPI(address, vbID, function() { // Enable lại button $btn.prop('disabled', false); $icon.removeClass('fa-spin'); }); } else { console.error('❌ Failed to delete cache'); $('#phanTichPanelBody').html(` `); $btn.prop('disabled', false); $icon.removeClass('fa-spin'); } }); }); // Gọi API phân tích (dùng function helper) callPhanTichAPI(address, vbID); } // Helper: Gọi API phân tích (tách riêng để dùng lại) function callPhanTichAPI(address, vbID, callback) { const randomServer = Math.floor(Math.random() * 10) + 1; $.ajax({ url: '//tnpl' + randomServer + '.hethongphapluat.com/tien-ich/phan.tich.dieu.luat.php', type: 'POST', contentType: 'application/json', timeout: 300000, // 5 phút data: JSON.stringify({ address: address, vb_id: vbID }), success: function(response) { console.log('Analysis complete for:', address, response); // Reset badge về trạng thái bình thường (nhưng vẫn hiển thị) if (currentAnalyzingBadge) { currentAnalyzingBadge.text('Phân tích').removeClass('analyzing'); currentAnalyzingBadge.data('analyzing', false); console.log('Badge reset to normal state'); } // Reset state analyzing để có thể phân tích element khác isAnalyzing = false; console.log('State reset: isAnalyzing = false, can analyze other elements now'); if (response.ok) { // Render kết quả phân tích let html = ''; html += '
    '; html += '
    ' + escapeHtml(response.ten_van_ban) + '
    '; if (response.so_hieu) { html += 'Số hiệu: ' + escapeHtml(response.so_hieu) + '
    '; } html += 'Điều khoản: ' + escapeHtml(response.address) + ''; if (response.from_cache) { html += ' Cache'; } html += '
    '; html += '
    ' + markdownToHtml(response.phan_tich) + '
    '; if (response.usage) { html += '
    '; html += 'Thống kê: '; html += 'Input tokens: ' + (response.usage.promptTokenCount || 0) + ', '; html += 'Output tokens: ' + (response.usage.candidatesTokenCount || 0); html += '
    '; } $('#phanTichPanelBody').html(html); } else { $('#phanTichPanelBody').html(` `); } if (callback) callback(); }, error: function(xhr, status, error) { console.error('Analysis error:', error); // Reset badge về trạng thái bình thường if (currentAnalyzingBadge) { currentAnalyzingBadge.text('Phân tích').removeClass('analyzing'); currentAnalyzingBadge.data('analyzing', false); } // Reset state analyzing isAnalyzing = false; let errorMsg = error; if (xhr.responseJSON && xhr.responseJSON.error) { errorMsg = xhr.responseJSON.error; } $('#phanTichPanelBody').html(` `); if (callback) callback(); } }); } // Helper: Xóa cache phân tích function deletePhanTichCache(address, vbID, callback) { const randomServer = Math.floor(Math.random() * 10) + 1; $.ajax({ url: '//tnpl' + randomServer + '.hethongphapluat.com/tien-ich/delete.phan.tich.cache.php', type: 'POST', contentType: 'application/json', timeout: 10000, data: JSON.stringify({ address: address, vb_id: vbID }), success: function(response) { console.log('Delete cache response:', response); if (callback) callback(response.ok || false); }, error: function(xhr, status, error) { console.error('Delete cache error:', error); if (callback) callback(false); } }); } // Helper: Lấy tên hiển thị của element từ address function getElementDisplayName(address) { if (!address) return 'nội dung'; const $element = $('[address="' + address + '"]'); if ($element.length === 0) return address; // Parse address: vd "dieu_3_khoan_29" -> "Khoản 29 Điều 3" // Address format: lớn đến nhỏ (phan > chuong > muc > dieu > khoan > diem) const parts = address.split('_'); const displayParts = []; for (let i = 0; i < parts.length; i += 2) { if (i + 1 < parts.length) { const type = getParentTypeName(parts[i]); const num = parts[i + 1]; displayParts.push(type + ' ' + num); } } // Reverse để hiển thị từ nhỏ đến lớn: "Khoản 29 Điều 3" (thay vì "Điều 3 Khoản 29") return displayParts.reverse().join(' '); } function openPhanTichModal(address, vbID) { // Tạo modal nếu chưa có if ($('#modalPhanTich').length === 0) { const modalHTML = ` `; $('body').append(modalHTML); } // Reset và hiển thị modal với loading $('#modalPhanTichBody').html(`
    Đang phân tích...

    Đang phân tích...

    `); $('#modalPhanTich').modal('show'); // AJAX request const randomServer = Math.floor(Math.random() * 10) + 1; $.ajax({ url: '//tnpl' + randomServer + '.hethongphapluat.com/tien-ich/phan.tich.dieu.luat.php', type: 'POST', contentType: 'application/json', data: JSON.stringify({ address: address, vb_id: vbID }), success: function(response) { if (response.ok) { // Render kết quả phân tích let html = ''; // Header thông tin văn bản html += '
    '; html += '
    ' + escapeHtml(response.ten_van_ban) + '
    '; if (response.so_hieu) { html += 'Số hiệu: ' + escapeHtml(response.so_hieu) + '
    '; } html += 'Điều khoản: ' + escapeHtml(response.address) + ''; html += '
    '; // Nội dung phân tích (Markdown -> HTML) html += '
    '; html += markdownToHtml(response.phan_tich); html += '
    '; // Thông tin usage (nếu có) if (response.usage) { html += '
    '; html += 'Thống kê: '; html += 'Input tokens: ' + (response.usage.promptTokenCount || 0) + ', '; html += 'Output tokens: ' + (response.usage.candidatesTokenCount || 0); html += '
    '; } $('#modalPhanTichBody').html(html); } else { $('#modalPhanTichBody').html(` `); } }, error: function(xhr, status, error) { let errorMsg = error; if (xhr.responseJSON && xhr.responseJSON.error) { errorMsg = xhr.responseJSON.error; } $('#modalPhanTichBody').html(` `); } }); } // Helpers: show/hide badge cho parent element (dieu, khoan,...) với position: fixed function showPhanTichBadgeForParent($parent) { // Lấy badge CỦA CHÍNH parent này (match data-for với address của parent) const parentAddress = $parent.attr('address'); const $badge = $parent.find('.badge-phan-tich-container[data-for="' + parentAddress + '"]').first(); if ($badge.length === 0) { console.warn('No badge found for parent:', parentAddress); return; } // Ẩn TẤT CẢ các badge khác để tránh overlap $('.badge-phan-tich-container').not($badge).each(function() { const $otherBadge = $(this); // Chỉ ẩn badge KHÔNG đang analyzing if (!$otherBadge.data('analyzing')) { $otherBadge.css({display: 'none'}); } }); // Show badge tạm để tính width $badge.css({display: 'inline-block', opacity: 0, visibility: 'hidden'}); const badgeWidth = $badge.outerWidth(); // Tính toán vị trí fixed dựa trên offset của parent const offset = $parent.offset(); const scrollTop = $(window).scrollTop(); const scrollLeft = $(window).scrollLeft(); // Position badge top-right của parent và show $badge.css({ display: 'inline-block', visibility: 'visible', opacity: 1, top: (offset.top - scrollTop) + 'px', left: (offset.left + $parent.outerWidth() - badgeWidth - scrollLeft - 5) + 'px' // -5px padding }); console.log('Showing badge for:', parentAddress, 'at position:', $badge.css('top'), $badge.css('left')); $parent.addClass('highlight-border'); } function hidePhanTichBadgeForParent($parent) { const $badge = $parent.find('.badge-phan-tich-container').first(); if ($badge.length === 0) return; $badge.css({display: 'none', opacity: 0}); $parent.removeClass('highlight-border'); } // Biến lưu element đang hover let currentHoveredElement = null; let hoverDebounceTimer = null; // Dùng mousemove để track chính xác element nào đang được hover $(document).on('mousemove', '#tab_noi_dung_vb', function(e) { // Tìm element gần nhất (phan, chuong, muc, dieu, khoan, diem) tại vị trí chuột const $target = $(e.target).closest('phan, chuong, muc, tieumuc, dieu, khoan, diem'); if ($target.length === 0) { // Không hover vào element nào return; } const address = $target.attr('address'); // Nếu đang hover vào cùng element → skip if (currentHoveredElement && currentHoveredElement[0] === $target[0]) { return; } // Clear debounce timer cũ if (hoverDebounceTimer) { clearTimeout(hoverDebounceTimer); } // Debounce để tránh trigger quá nhiều hoverDebounceTimer = setTimeout(function() { // Element thay đổi console.log('Hover changed to:', address); // Set flag hovering cho element mới $target.data('hovering', true); // Cancel timeout nếu có const timeoutId = $target.data('hideTimeout'); if (timeoutId) { clearTimeout(timeoutId); } // Ẩn badge của TẤT CẢ elements khác $('#tab_noi_dung_vb phan, #tab_noi_dung_vb chuong, #tab_noi_dung_vb muc, #tab_noi_dung_vb tieumuc, #tab_noi_dung_vb dieu, #tab_noi_dung_vb khoan, #tab_noi_dung_vb diem') .not($target) .each(function() { const $el = $(this); // Chỉ xóa highlight-border, KHÔNG xóa highlight-border-persistent $el.removeClass('highlight-border'); // Ẩn badge nếu KHÔNG đang analyzing const $badge = $el.find('.badge-phan-tich-container'); if ($badge.length && !$badge.data('analyzing')) { $badge.css({display: 'none'}); } }); // Attach badge nếu chưa có if (address && $target.find('.badge-phan-tich-container[data-for="' + address + '"]').length === 0) { const parentType = getParentTypeName($target.prop('tagName').toLowerCase()); const $badge = $('Phân tích'); console.log('Creating badge for address:', address, 'parentType:', parentType); $target.append($badge); $target.addClass('has-phan-tich-badge'); } // Show badge cho element này if ($target.find('.badge-phan-tich-container').length > 0) { showPhanTichBadgeForParent($target); } // Update current hovered element currentHoveredElement = $target; }, 50); // Debounce 50ms }); // Event delegation cho hover ra khỏi #tab_noi_dung_vb $(document).on('mouseleave', '#tab_noi_dung_vb', function(e) { // Clear current hovered element currentHoveredElement = null; // Ẩn tất cả badge không đang analyzing sau một khoảng thời gian setTimeout(function() { if (currentHoveredElement === null) { // Chỉ ẩn nếu thực sự không hover vào element nào $('#tab_noi_dung_vb phan, #tab_noi_dung_vb chuong, #tab_noi_dung_vb muc, #tab_noi_dung_vb tieumuc, #tab_noi_dung_vb dieu, #tab_noi_dung_vb khoan, #tab_noi_dung_vb diem') .each(function() { const $el = $(this); const $badge = $el.find('.badge-phan-tich-container'); if ($badge.length && !$badge.data('analyzing')) { $badge.css({display: 'none'}); } }); console.log('Mouse left tab_noi_dung_vb, hiding all badges'); } }, 300); }); // Event delegation cho hover ra khỏi parent (giữ lại cho badge behavior) $(document).on('mouseleave', '#tab_noi_dung_vb phan, #tab_noi_dung_vb chuong, #tab_noi_dung_vb muc, #tab_noi_dung_vb tieumuc, #tab_noi_dung_vb dieu, #tab_noi_dung_vb khoan, #tab_noi_dung_vb diem', function(e) { const $parent = $(this); const parentAddress = $parent.attr('address'); const $badge = $parent.find('.badge-phan-tich-container[data-for="' + parentAddress + '"]').first(); // Set flag parent not hovering $parent.data('hovering', false); // Nếu badge đang analyzing thì KHÔNG ẩn, GIỮ hiển thị if ($badge.length > 0 && $badge.data('analyzing')) { console.log('Badge is analyzing, keep visible'); return; } // Delay để có thời gian di chuột vào badge const timeoutId = setTimeout(() => { // Chỉ ẩn nếu cả parent và badge đều không hover và không analyzing if ($badge.length > 0 && !$parent.data('hovering') && !$badge.data('hovering') && !$badge.data('analyzing')) { hidePhanTichBadgeForParent($parent); } }, 300); // Tăng lên 300ms $parent.data('hideTimeout', timeoutId); }); // Hover vào badge → giữ hiển thị $(document).on('mouseenter', '.badge-phan-tich-container', function(e) { e.stopPropagation(); const $badge = $(this); const $parent = $badge.parent(); $badge.data('hovering', true); // Cancel timeout của parent const timeoutId = $parent.data('hideTimeout'); if (timeoutId) { clearTimeout(timeoutId); } }); // Hover ra khỏi badge → ẩn nếu không hover parent $(document).on('mouseleave', '.badge-phan-tich-container', function(e) { const $badge = $(this); $badge.data('hovering', false); const $parent = $badge.parent(); // Nếu badge đang analyzing thì KHÔNG ẩn, GIỮ hiển thị if ($badge.data('analyzing') || $badge.hasClass('analyzing')) { console.log('Badge is analyzing on mouseleave, keep visible'); return; } setTimeout(() => { // Chỉ ẩn nếu cả parent và badge đều không hover và không analyzing if (!$parent.data('hovering') && !$badge.data('hovering') && !$badge.data('analyzing') && !$badge.hasClass('analyzing')) { hidePhanTichBadgeForParent($parent); } }, 300); }); // Event delegation cho hover vào badge → hiện tooltip $(document).on('mouseenter', '.badge-phan-tich, .badge-phan-tich-container, .badge-phan-tich-fixed', function() { const $badge = $(this); const parentType = $badge.attr('data-parent-type') || 'Nội dung'; if ($badge.find('.badge-tooltip').length === 0) { const $tooltip = $('Phân tích chi tiết nội dung ' + parentType + ' này'); $badge.append($tooltip); setTimeout(() => $tooltip.addClass('show'), 10); } }); // Event delegation cho hover ra khỏi badge → ẩn tooltip $(document).on('mouseleave', '.badge-phan-tich, .badge-phan-tich-container, .badge-phan-tich-fixed', function() { const $tooltip = $(this).find('.badge-tooltip'); if ($tooltip.length > 0) { $tooltip.removeClass('show'); setTimeout(() => $tooltip.remove(), 300); } }); // Event delegation cho click badge → mở panel $(document).on('click', '.badge-phan-tich, .badge-phan-tich-container, .badge-phan-tich-fixed', function(e) { e.preventDefault(); e.stopPropagation(); const $badge = $(this); console.log('Badge clicked! Element:', $badge[0]); console.log('Badge parent:', $badge.parent().prop('tagName'), $badge.parent().attr('address')); console.log('Badge data-for:', $badge.attr('data-for')); console.log('Badge data-parent-type:', $badge.attr('data-parent-type')); // Nếu badge đang analyzing thì không cho click if ($badge.hasClass('analyzing') || $badge.data('analyzing')) { console.log('Badge is analyzing, click ignored'); return; } // Lấy address từ data-for attribute const address = $badge.attr('data-for'); console.log('Will analyze address:', address, 'vbID:', vbID); if (address && vbID) { openPhanTichPanel(address, vbID); } else { console.error('Missing address or vbID', {address, vbID}); showWarningModal('Không tìm thấy địa chỉ điều luật hoặc ID văn bản!'); } }); // Ẩn badge khi click vào CTTD $(document).on('click', 'cttd.chuthichtudong span, dctk span, dctd span', function(e) { console.log('CTTD clicked'); // Ẩn TẤT CẢ badge KHÔNG đang analyzing $('.badge-phan-tich-container').each(function() { const $badge = $(this); if (!$badge.data('analyzing') && !$badge.hasClass('analyzing')) { $badge.css({display: 'none'}); console.log('Hiding badge:', $badge.attr('data-for')); } }); }); // Update badge position khi scroll hoặc resize (vì dùng position: fixed) function updateBadgePositions() { $('.badge-phan-tich-container:visible').each(function() { const $badge = $(this); const $parent = $badge.parent(); // Cập nhật position nếu parent đang hover HOẶC badge đang analyzing if ($parent.length && ($parent.is(':hover') || $badge.data('analyzing'))) { // Re-calculate position const offset = $parent.offset(); const scrollTop = $(window).scrollTop(); const scrollLeft = $(window).scrollLeft(); const badgeWidth = $badge.outerWidth(); $badge.css({ top: (offset.top - scrollTop) + 'px', left: (offset.left + $parent.outerWidth() - badgeWidth - scrollLeft - 5) + 'px' }); } }); } $(window).on('scroll', updateBadgePositions); $(window).on('resize', updateBadgePositions); } });