Browse Source

Merge remote-tracking branch 'origin/master'

master
zhangf@suq.cn 3 weeks ago
parent
commit
36e09e9e52
  1. 95
      public/themes/dist_static/static/css/news.css
  2. 31
      public/themes/dist_static/static/js/announce.js
  3. 4
      public/themes/dist_static/static/js/download.js
  4. 34
      public/themes/dist_static/static/js/faq.js
  5. 87
      public/themes/dist_static/static/js/news2.js
  6. 31
      public/themes/dist_static/static/js/video.js
  7. 4
      public/themes/website/1/zh/demo/announce.html
  8. 6
      public/themes/website/1/zh/demo/download.html
  9. 4
      public/themes/website/1/zh/demo/faq.html
  10. 4
      public/themes/website/1/zh/demo/video.html

95
public/themes/dist_static/static/css/news.css

@ -43,7 +43,7 @@
font-size: var(--font-18);
font-weight: 400;
line-height: var(--font-24);
cursor: default;
cursor: pointer;
}
.n-tabs__item.is-active {
background: var(--color-primary);
@ -81,15 +81,21 @@
}
.n-featured {
display: grid;
grid-template-columns: minmax(0, 45rem) minmax(0, 1fr);
gap: 3rem;
align-items: center;
position: relative;
padding: 3rem;
margin-bottom: 5rem;
border-radius: 2.5rem;
background: rgba(175, 181, 185, 0.15);
}
.n-featured__swiper {
overflow: hidden;
}
.n-featured__slide {
display: grid;
grid-template-columns: minmax(0, 45rem) minmax(0, 1fr);
gap: 3rem;
align-items: center;
}
.n-featured__media {
min-width: 0;
border-radius: 2rem;
@ -130,8 +136,14 @@
font-family: "MiSans VF", "PingFang SC", sans-serif;
font-size: var(--font-28);
font-weight: 500;
line-height: var(--font-37);
line-height: var(--font-36);
transition: color var(--duration-fast) var(--easing);
min-height: 4.5rem;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.n-featured__desc {
margin: 0;
@ -140,6 +152,12 @@
font-size: var(--font-18);
font-weight: 400;
line-height: var(--font-28);
min-height: 5.25rem;
display: -webkit-box;
-webkit-line-clamp: 3;
line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
.n-featured__foot {
display: flex;
@ -148,13 +166,15 @@
gap: 1.5rem;
margin-top: auto;
padding-top: 2rem;
padding-right: 8rem;
border-top: 1px solid rgb(223, 224, 226);
transition: border-color var(--duration-fast) var(--easing);
}
.n-featured__nav {
display: flex;
align-items: center;
gap: 1rem;
position: absolute;
right: 3rem;
bottom: 3rem;
z-index: 2;
}
.n-featured:hover {
cursor: pointer;
@ -169,33 +189,6 @@
border-top-color: var(--color-primary);
}
.n-nav-btn {
display: inline-flex;
align-items: center;
justify-content: center;
width: 3rem;
height: 3rem;
padding: 0;
border: 1px solid rgba(46, 53, 58, 0.1);
border-radius: 1rem;
background: transparent;
cursor: default;
}
.n-nav-btn img {
display: block;
width: 0.875rem;
height: auto;
transform: scaleX(-1);
filter: grayscale(1) opacity(0.45);
}
.n-nav-btn--active {
border-color: var(--color-primary);
}
.n-nav-btn--active img {
transform: none;
filter: none;
}
.n-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
@ -330,12 +323,15 @@
font-size: 16Px;
}
.n-featured {
grid-template-columns: 1fr;
gap: 32Px;
padding: 32Px;
margin-bottom: 56Px;
border-radius: 24Px;
}
.n-featured__slide {
grid-template-columns: 1fr;
gap: 32Px;
}
.n-featured__media {
border-radius: 20Px;
}
@ -356,6 +352,11 @@
.n-featured__foot {
margin-top: 24Px;
padding-top: 24Px;
padding-right: 112Px;
}
.n-featured__nav {
right: 32Px;
bottom: 32Px;
}
.n-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
@ -408,6 +409,9 @@
margin-bottom: 40Px;
border-radius: 16Px;
}
.n-featured__slide {
gap: 20Px;
}
.n-featured__media {
border-radius: 12Px;
}
@ -420,27 +424,20 @@
.n-featured__title {
font-size: 20Px;
line-height: 28Px;
min-height: 56Px;
}
.n-featured__desc {
font-size: 14Px;
line-height: 22Px;
display: -webkit-box;
-webkit-line-clamp: 4;
line-clamp: 4;
-webkit-box-orient: vertical;
overflow: hidden;
min-height: 66Px;
}
.n-featured__foot {
margin-top: 16Px;
padding-top: 16Px;
min-height: 3rem;
}
.n-featured__nav {
gap: 12Px;
}
.n-nav-btn {
width: 40Px;
height: 40Px;
border-radius: 12Px;
right: 20Px;
bottom: 10Px;
}
.n-grid {
grid-template-columns: 1fr;

31
public/themes/dist_static/static/js/announce.js

@ -45,8 +45,39 @@ function initFilterDropdown() {
if (!$(event.target).closest("[data-filter-trigger], [data-filter-dropdown]").length) closeDropdown();
});
}
function getActiveTabId() {
return $("[data-filter-dropdown] .is-active[data-tab]").attr("data-tab") || "";
}
function activateTabById(tabId) {
if (!tabId) return;
const $item = $(`[data-filter-dropdown] [data-tab="${tabId}"]`).first();
if (!$item.length) return;
const $dropdown = $item.closest("[data-filter-dropdown]");
const $btn = $dropdown.prev("[data-filter-trigger]");
$item.addClass("is-active").siblings().removeClass("is-active");
$btn.find("span").text($item.text());
$btn.addClass("is-selected");
}
function initTabKeywordsSearch() {
$("[data-tab-search]").on("submit", function(event) {
event.preventDefault();
const params = new URLSearchParams();
const keywords = $(this).find('[name="keywords"]').val().trim();
const tabId = getActiveTabId();
if (tabId) params.set("tab", tabId);
if (keywords) params.set("keywords", keywords);
const query = params.toString();
window.location.href = query ? `${window.location.pathname}?${query}` : window.location.pathname;
});
const searchParams = new URLSearchParams(window.location.search);
const tabParam = searchParams.get("tab");
const keywordsParam = searchParams.get("keywords");
if (keywordsParam) $("[data-tab-search] [name='keywords']").val(keywordsParam);
if (tabParam) activateTabById(tabParam);
}
$(function() {
setActiveNav();
initFilterDropdown();
initTabKeywordsSearch();
});
//#endregion

4
public/themes/dist_static/static/js/download.js

@ -65,7 +65,7 @@ $(function() {
$(document).on("click", function(event) {
if (!$(event.target).closest(".d-tabs__group").length) closeDropdowns();
});
$("[data-download-search]").on("submit", function(event) {
$("[data-tab-search]").on("submit", function(event) {
event.preventDefault();
const params = new URLSearchParams();
const keywords = $(this).find('[name="keywords"]').val().trim();
@ -78,7 +78,7 @@ $(function() {
const searchParams = new URLSearchParams(window.location.search);
const tabParam = searchParams.get("cid");
const keywordsParam = searchParams.get("keywords");
if (keywordsParam) $("[data-download-search] [name='keywords']").val(keywordsParam);
if (keywordsParam) $("[data-tab-search] [name='keywords']").val(keywordsParam);
if (tabParam) activateTabById(tabParam);
});
//#endregion

34
public/themes/dist_static/static/js/faq.js

@ -8,12 +8,39 @@ function setActiveNav() {
link.classList.toggle("is-active", active);
});
}
function activateFaqTab($btn) {
$btn.addClass("is-active").attr("aria-selected", "true");
$btn.siblings(".f-tabs__item").removeClass("is-active").attr("aria-selected", "false");
}
function getActiveTabId() {
return $(".f-tabs__item.is-active").attr("data-tab") || "";
}
function activateTabById(tabId) {
if (!tabId) return;
const $target = $(`.f-tabs__item[data-tab="${tabId}"]`).first();
if ($target.length) activateFaqTab($target);
}
function initTabKeywordsSearch() {
$("[data-tab-search]").on("submit", function(event) {
event.preventDefault();
const params = new URLSearchParams();
const keywords = $(this).find('[name="keywords"]').val().trim();
const tabId = getActiveTabId();
if (tabId) params.set("tab", tabId);
if (keywords) params.set("keywords", keywords);
const query = params.toString();
window.location.href = query ? `${window.location.pathname}?${query}` : window.location.pathname;
});
const searchParams = new URLSearchParams(window.location.search);
const tabParam = searchParams.get("tab");
const keywordsParam = searchParams.get("keywords");
if (keywordsParam) $("[data-tab-search] [name='keywords']").val(keywordsParam);
if (tabParam) activateTabById(tabParam);
}
$(function() {
setActiveNav();
$(".f-tabs__item").on("click", function() {
const $btn = $(this);
$btn.addClass("is-active").attr("aria-selected", "true");
$btn.siblings(".f-tabs__item").removeClass("is-active").attr("aria-selected", "false");
activateFaqTab($(this));
});
$(".f-item__trigger").on("click", function() {
const $item = $(this).closest(".f-item");
@ -22,5 +49,6 @@ $(function() {
$item.toggleClass("is-open", willOpen);
$(this).attr("aria-expanded", willOpen ? "true" : "false");
});
initTabKeywordsSearch();
});
//#endregion

87
public/themes/dist_static/static/js/news2.js

@ -1,4 +1,11 @@
//#region js/news.js
var NEWS_CATEGORY_PARAM = "cat";
var NEWS_CATEGORIES = [
"all",
"insight",
"company",
"event"
];
function setActiveNav() {
const pageNav = document.querySelector("[data-nav]")?.getAttribute("data-nav");
if (!pageNav) return;
@ -20,16 +27,94 @@ function newsDetailBackToggle() {
else back.removeAttribute("tabindex");
}, { threshold: 1 }).observe(pager);
}
var featuredSwiper = null;
function getCategoryFromQuery() {
const cat = new URLSearchParams(window.location.search).get(NEWS_CATEGORY_PARAM);
if (!cat || cat === "all") return "all";
return NEWS_CATEGORIES.includes(cat) ? cat : "all";
}
function setCategoryInUrl(cat) {
const url = new URL(window.location.href);
if (!cat || cat === "all") url.searchParams.delete(NEWS_CATEGORY_PARAM);
else url.searchParams.set(NEWS_CATEGORY_PARAM, cat);
window.history.replaceState(null, "", url);
}
function activateTab(cat) {
document.querySelectorAll(".n-tabs__item").forEach((btn) => {
const isActive = (btn.dataset.cat || "all") === cat;
btn.classList.toggle("is-active", isActive);
btn.setAttribute("aria-selected", isActive ? "true" : "false");
});
}
function filterNews(cat) {
const isMatch = (itemCat) => cat === "all" || itemCat === cat;
document.querySelectorAll(".n-featured__slide[data-category]").forEach((slide) => {
slide.hidden = !isMatch(slide.dataset.category);
});
document.querySelectorAll(".n-card[data-category]").forEach((card) => {
card.hidden = !isMatch(card.dataset.category);
});
const featured = document.querySelector(".n-featured");
if (!featured) return;
featured.hidden = featured.querySelectorAll(".n-featured__slide:not([hidden])").length === 0;
}
function updateFeaturedSwiper() {
const root = document.querySelector(".n-featured");
const el = root?.querySelector(".n-featured__swiper");
if (!el || !window.Swiper) return;
if (featuredSwiper) {
featuredSwiper.destroy(true, true);
featuredSwiper = null;
}
if (!root || root.hidden) return;
const slideCount = el.querySelectorAll(".swiper-wrapper > .swiper-slide:not([hidden])").length;
if (slideCount <= 1) return;
featuredSwiper = new window.Swiper(el, {
effect: "fade",
fadeEffect: { crossFade: true },
loop: slideCount > 1,
speed: 500,
observer: true,
observeParents: true,
watchOverflow: true,
navigation: {
prevEl: root.querySelector(".n-featured__nav .s-arrows__prev"),
nextEl: root.querySelector(".n-featured__nav .s-arrows__next")
}
});
}
function applyCategory(cat) {
activateTab(cat);
filterNews(cat);
updateFeaturedSwiper();
}
function initNewsTabs() {
const tabs = document.querySelector(".n-tabs");
if (!tabs) return;
applyCategory(getCategoryFromQuery());
tabs.addEventListener("click", (event) => {
const btn = event.target.closest(".n-tabs__item");
if (!btn) return;
const cat = btn.dataset.cat || "all";
setCategoryInUrl(cat);
applyCategory(cat);
});
window.addEventListener("popstate", () => {
applyCategory(getCategoryFromQuery());
});
}
function newsCardClick() {
$(".n-card, .n-featured").on("click", function(event) {
if ($(event.target).closest("a, button").length) return;
const href = $(this).find("a[href]").attr("href");
const $root = $(this);
const href = $root.hasClass("n-featured") ? $root.find(".swiper-slide-active a[href]").attr("href") : $root.find("a[href]").first().attr("href");
if (href) window.location.href = href;
});
}
$(function() {
setActiveNav();
newsDetailBackToggle();
initNewsTabs();
newsCardClick();
});
//#endregion

31
public/themes/dist_static/static/js/video.js

@ -86,9 +86,40 @@ function initFilterDropdown() {
if (!$(event.target).closest("[data-filter-trigger], [data-filter-dropdown]").length) closeDropdown();
});
}
function getActiveTabId() {
return $("[data-filter-dropdown] .is-active[data-tab]").attr("data-tab") || "";
}
function activateTabById(tabId) {
if (!tabId) return;
const $item = $(`[data-filter-dropdown] [data-tab="${tabId}"]`).first();
if (!$item.length) return;
const $dropdown = $item.closest("[data-filter-dropdown]");
const $btn = $dropdown.prev("[data-filter-trigger]");
$item.addClass("is-active").siblings().removeClass("is-active");
$btn.find("span").text($item.text());
$btn.addClass("is-selected");
}
function initTabKeywordsSearch() {
$("[data-tab-search]").on("submit", function(event) {
event.preventDefault();
const params = new URLSearchParams();
const keywords = $(this).find('[name="keywords"]').val().trim();
const tabId = getActiveTabId();
if (tabId) params.set("tab", tabId);
if (keywords) params.set("keywords", keywords);
const query = params.toString();
window.location.href = query ? `${window.location.pathname}?${query}` : window.location.pathname;
});
const searchParams = new URLSearchParams(window.location.search);
const tabParam = searchParams.get("tab");
const keywordsParam = searchParams.get("keywords");
if (keywordsParam) $("[data-tab-search] [name='keywords']").val(keywordsParam);
if (tabParam) activateTabById(tabParam);
}
$(function() {
setActiveNav();
initVideoModal();
initFilterDropdown();
initTabKeywordsSearch();
});
//#endregion

4
public/themes/website/1/zh/demo/announce.html

@ -80,9 +80,9 @@
<button type="button" class="a-filter__dropdown-item">纺织行业专用</button>
</div>
</div>
<form class="s-search" action="#" method="get" role="search" onsubmit="return false;">
<form class="s-search" role="search" data-tab-search>
<img class="s-search__icon" src="data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='24.000000'%20height='24.000000'%20fill='none'%3e%3crect%20id='搜索'%20width='24.000000'%20height='24.000000'%20x='0.000000'%20y='0.000000'%20fill='rgb(255,255,255)'%20fill-opacity='0'%20/%3e%3cpath%20id='矢量%203'%20d='M15.8481%2017.1208C14.4808%2018.2114%2012.7482%2018.8633%2010.8633%2018.8633C6.44506%2018.8633%202.86328%2015.2816%202.86328%2010.8633C2.86328%206.445%206.44506%202.86328%2010.8633%202.86328C15.2815%202.86328%2018.8633%206.445%2018.8633%2010.8633C18.8633%2012.7482%2018.2114%2014.4808%2017.1208%2015.8481L21.136%2019.8633L19.8633%2021.136L15.8481%2017.1208ZM17.0632%2010.8633C17.0632%207.43908%2014.2874%204.66326%2010.8633%204.66326C7.4392%204.66326%204.66332%207.43908%204.66332%2010.8633C4.66332%2014.2875%207.4392%2017.0633%2010.8633%2017.0633C14.2874%2017.0633%2017.0632%2014.2875%2017.0632%2010.8633Z'%20fill='rgb(175,181,185)'%20fill-rule='evenodd'%20/%3e%3c/svg%3e" alt="" width="24" height="24" />
<input class="s-search__input" type="search" name="q" placeholder="请输入您想搜索公告的关键词" autocomplete="off" />
<input class="s-search__input" type="search" name="keywords" placeholder="请输入您想搜索公告的关键词" autocomplete="off" />
<button class="s-search__btn" type="submit">搜索</button>
</form>
</div>

6
public/themes/website/1/zh/demo/download.html

@ -1,8 +1,6 @@
<!DOCTYPE html>
<html lang="zh-CN">
{php}$download_keywords = input('keywords', '');{/php}
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
@ -87,9 +85,9 @@
{/if}
{/volist}
</div>
<form class="s-search" role="search" data-download-search>
<form class="s-search" role="search" data-tab-search>
<img class="s-search__icon" src="data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='24.000000'%20height='24.000000'%20fill='none'%3e%3crect%20id='搜索'%20width='24.000000'%20height='24.000000'%20x='0.000000'%20y='0.000000'%20fill='rgb(255,255,255)'%20fill-opacity='0'%20/%3e%3cpath%20id='矢量%203'%20d='M15.8481%2017.1208C14.4808%2018.2114%2012.7482%2018.8633%2010.8633%2018.8633C6.44506%2018.8633%202.86328%2015.2816%202.86328%2010.8633C2.86328%206.445%206.44506%202.86328%2010.8633%202.86328C15.2815%202.86328%2018.8633%206.445%2018.8633%2010.8633C18.8633%2012.7482%2018.2114%2014.4808%2017.1208%2015.8481L21.136%2019.8633L19.8633%2021.136L15.8481%2017.1208ZM17.0632%2010.8633C17.0632%207.43908%2014.2874%204.66326%2010.8633%204.66326C7.4392%204.66326%204.66332%207.43908%204.66332%2010.8633C4.66332%2014.2875%207.4392%2017.0633%2010.8633%2017.0633C14.2874%2017.0633%2017.0632%2014.2875%2017.0632%2010.8633Z'%20fill='rgb(175,181,185)'%20fill-rule='evenodd'%20/%3e%3c/svg%3e" alt="" width="24" height="24" />
<input class="s-search__input" type="search" name="keywords" value="{$download_keywords}" placeholder="请输入您想下载的文件" autocomplete="off" />
<input class="s-search__input" type="search" name="keywords" placeholder="请输入您想下载的文件" autocomplete="off" />
<button class="s-search__btn" type="submit">搜索</button>
</form>
</div>

4
public/themes/website/1/zh/demo/faq.html

@ -68,9 +68,9 @@
<button type="button" class="f-tabs__item" role="tab" aria-selected="false">服务类</button>
<button type="button" class="f-tabs__item" role="tab" aria-selected="false">维护类</button>
</div>
<form class="s-search" action="#" method="get" role="search" onsubmit="return false;">
<form class="s-search" role="search" data-tab-search>
<img class="s-search__icon" src="data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='24.000000'%20height='24.000000'%20fill='none'%3e%3crect%20id='搜索'%20width='24.000000'%20height='24.000000'%20x='0.000000'%20y='0.000000'%20fill='rgb(255,255,255)'%20fill-opacity='0'%20/%3e%3cpath%20id='矢量%203'%20d='M15.8481%2017.1208C14.4808%2018.2114%2012.7482%2018.8633%2010.8633%2018.8633C6.44506%2018.8633%202.86328%2015.2816%202.86328%2010.8633C2.86328%206.445%206.44506%202.86328%2010.8633%202.86328C15.2815%202.86328%2018.8633%206.445%2018.8633%2010.8633C18.8633%2012.7482%2018.2114%2014.4808%2017.1208%2015.8481L21.136%2019.8633L19.8633%2021.136L15.8481%2017.1208ZM17.0632%2010.8633C17.0632%207.43908%2014.2874%204.66326%2010.8633%204.66326C7.4392%204.66326%204.66332%207.43908%204.66332%2010.8633C4.66332%2014.2875%207.4392%2017.0633%2010.8633%2017.0633C14.2874%2017.0633%2017.0632%2014.2875%2017.0632%2010.8633Z'%20fill='rgb(175,181,185)'%20fill-rule='evenodd'%20/%3e%3c/svg%3e" alt="" width="24" height="24" />
<input class="s-search__input" type="search" name="q" placeholder="请输入您想搜索问题的关键词" autocomplete="off" />
<input class="s-search__input" type="search" name="keywords" placeholder="请输入您想搜索问题的关键词" autocomplete="off" />
<button class="s-search__btn" type="submit">搜索</button>
</form>
</div>

4
public/themes/website/1/zh/demo/video.html

@ -80,9 +80,9 @@
<button type="button" class="v-filter__dropdown-item">纺织行业专用</button>
</div>
</div>
<form class="s-search" action="#" method="get" role="search" onsubmit="return false;">
<form class="s-search" role="search" data-tab-search>
<img class="s-search__icon" src="data:image/svg+xml,%3csvg%20viewBox='0%200%2024%2024'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='24.000000'%20height='24.000000'%20fill='none'%3e%3crect%20id='搜索'%20width='24.000000'%20height='24.000000'%20x='0.000000'%20y='0.000000'%20fill='rgb(255,255,255)'%20fill-opacity='0'%20/%3e%3cpath%20id='矢量%203'%20d='M15.8481%2017.1208C14.4808%2018.2114%2012.7482%2018.8633%2010.8633%2018.8633C6.44506%2018.8633%202.86328%2015.2816%202.86328%2010.8633C2.86328%206.445%206.44506%202.86328%2010.8633%202.86328C15.2815%202.86328%2018.8633%206.445%2018.8633%2010.8633C18.8633%2012.7482%2018.2114%2014.4808%2017.1208%2015.8481L21.136%2019.8633L19.8633%2021.136L15.8481%2017.1208ZM17.0632%2010.8633C17.0632%207.43908%2014.2874%204.66326%2010.8633%204.66326C7.4392%204.66326%204.66332%207.43908%204.66332%2010.8633C4.66332%2014.2875%207.4392%2017.0633%2010.8633%2017.0633C14.2874%2017.0633%2017.0632%2014.2875%2017.0632%2010.8633Z'%20fill='rgb(175,181,185)'%20fill-rule='evenodd'%20/%3e%3c/svg%3e" alt="" width="24" height="24" />
<input class="s-search__input" type="search" name="q" placeholder="请输入您想搜索视频的关键词" autocomplete="off" />
<input class="s-search__input" type="search" name="keywords" placeholder="请输入您想搜索视频的关键词" autocomplete="off" />
<button class="s-search__btn" type="submit">搜索</button>
</form>
</div>

Loading…
Cancel
Save