feat(site): integrate multilingual content management / 集成多语言内容管理

完善官网、管理后台与后端的多语言内容编辑和发布流程,调整站点页面及相关接口,并同步数据库脚本。

新增容器部署配置,改用环境变量注入数据库凭据;补充仓库忽略规则,并停止跟踪本地环境文件和 Maven 构建产物。
This commit is contained in:
liuwenxin committed 2026-09-10 14:46:06 +08:00
1 parent 4ee6e9ae83
commit 85083ab962
1056 files changed
+15449 -132933

No files matched your search

-8
View File
@@ -1,8 +0,0 @@
# 本地开发:与 vite代理一致
VITE_BASE_URL=/
# 纯静态调试模式:默认 true;改为 false 可恢复后端接口联调
VITE_STATIC_ONLY=false
VITE_DEV_PROXY_TARGET=http://localhost:8080
VITE_ADMIN_API_BASE=/admin-api/api
# 若依门户公开接口(公司简介等),开发环境由 Vite 代理到 VITE_DEV_PROXY_TARGET
VITE_SITE_API_BASE=/site
-6
View File
@@ -1,6 +0,0 @@
# 生产构建(宝塔等):默认站点在端口根路径;若网站在子目录,改为 /子目录名/
VITE_BASE_URL=/
# 与开发一致需要 Nginx 将 /admin-api 反代到 Java 等服务;否则可改为完整后端地址(需后端开 CORS)
VITE_ADMIN_API_BASE=/admin-api/api
# 生产环境需 Nginx 将 /site/ 反代到 Java(见 deploy/baota-nginx-snippet.conf)
VITE_SITE_API_BASE=/site
+1 -2
View File
@@ -2,9 +2,8 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>haiho-vue</title>
<title>大连华阳食品有限公司</title>
</head>
<body>
<div id="app"></div>
+2 -1
View File
@@ -8,7 +8,8 @@
"build": "vite build",
"preview": "vite preview",
"extract:page": "node scripts/extract-page.mjs",
"sync:fastimg": "node scripts/sync-fastimg-assets.mjs"
"sync:fastimg": "node scripts/sync-fastimg-assets.mjs",
"i18n:check": "node scripts/i18n-check.mjs"
},
"dependencies": {
"swiper": "^12.1.3",
-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="46" fill="none" viewBox="0 0 48 46"><path fill="#863bff" d="M25.946 44.938c-.664.845-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.287c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.497 0-3.578-1.842-3.578H1.237c-.92 0-1.456-1.04-.92-1.788L10.013.474c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.579 1.842 3.579h11.377c.943 0 1.473 1.088.89 1.83L25.947 44.94z" style="fill:#863bff;fill:color(display-p3 .5252 .23 1);fill-opacity:1"/><mask id="a" width="48" height="46" x="0" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#000" d="M25.842 44.938c-.664.844-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.183c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.498 0-3.579-1.842-3.579H1.133c-.92 0-1.456-1.04-.92-1.787L9.91.473c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.578 1.842 3.578h11.377c.943 0 1.473 1.088.89 1.832L25.843 44.94z" style="fill:#000;fill-opacity:1"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="5.508" cy="14.704" fill="#ede6ff" rx="5.508" ry="14.704" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -4.47 31.516)"/></g><g filter="url(#c)"><ellipse cx="10.399" cy="29.851" fill="#ede6ff" rx="10.399" ry="29.851" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -39.328 7.883)"/></g><g filter="url(#d)"><ellipse cx="5.508" cy="30.487" fill="#7e14ff" rx="5.508" ry="30.487" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -25.913 -14.639)scale(1 -1)"/></g><g filter="url(#e)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -32.644 -3.334)scale(1 -1)"/></g><g filter="url(#f)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -34.34 30.47)"/></g><g filter="url(#g)"><ellipse cx="14.072" cy="22.078" fill="#ede6ff" rx="14.072" ry="22.078" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="rotate(93.35 24.506 48.493)scale(-1 1)"/></g><g filter="url(#h)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#i)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#j)"><ellipse cx=".387" cy="8.972" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(39.51 .387 8.972)"/></g><g filter="url(#k)"><ellipse cx="47.523" cy="-6.092" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 47.523 -6.092)"/></g><g filter="url(#l)"><ellipse cx="41.412" cy="6.333" fill="#47bfff" rx="5.971" ry="9.665" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 41.412 6.333)"/></g><g filter="url(#m)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#n)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#o)"><ellipse cx="35.651" cy="29.907" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 35.651 29.907)"/></g><g filter="url(#p)"><ellipse cx="38.418" cy="32.4" fill="#47bfff" rx="5.971" ry="15.297" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 38.418 32.4)"/></g></g><defs><filter id="b" width="60.045" height="41.654" x="-19.77" y="16.149" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="c" width="90.34" height="51.437" x="-54.613" y="-7.533" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filtLine truncated

Before

Width:  |  Height:  |  Size: 9.3 KiB

+81
View File
@@ -0,0 +1,81 @@
import fs from 'node:fs/promises'
import path from 'node:path'
import process from 'node:process'
import { fileURLToPath } from 'node:url'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
function isPlainObject(v) {
return v != null && typeof v === 'object' && !Array.isArray(v)
}
function flattenKeys(obj, prefix = '') {
const out = new Set()
if (!isPlainObject(obj)) return out
for (const k of Object.keys(obj)) {
const next = prefix ? `${prefix}.${k}` : k
const v = obj[k]
if (isPlainObject(v)) {
for (const sub of flattenKeys(v, next)) out.add(sub)
} else {
out.add(next)
}
}
return out
}
function diff(a, b) {
// items in a but not in b
const out = []
for (const x of a) if (!b.has(x)) out.push(x)
out.sort()
return out
}
async function readJson(p) {
const raw = await fs.readFile(p, 'utf8')
return JSON.parse(raw)
}
async function main() {
const root = path.resolve(__dirname, '../src/locales')
const files = {
zh: path.join(root, 'zh.json'),
en: path.join(root, 'en.json'),
ja: path.join(root, 'ja.json')
}
const [zh, en, ja] = await Promise.all([readJson(files.zh), readJson(files.en), readJson(files.ja)])
const keysZh = flattenKeys(zh)
const keysEn = flattenKeys(en)
const keysJa = flattenKeys(ja)
const missingEn = diff(keysZh, keysEn)
const missingJa = diff(keysZh, keysJa)
const extraEn = diff(keysEn, keysZh)
const extraJa = diff(keysJa, keysZh)
const problems = []
if (missingEn.length) problems.push({ title: 'en 缺少 key', items: missingEn })
if (missingJa.length) problems.push({ title: 'ja 缺少 key', items: missingJa })
if (extraEn.length) problems.push({ title: 'en 多余 key', items: extraEn })
if (extraJa.length) problems.push({ title: 'ja 多余 key', items: extraJa })
if (problems.length) {
console.error('[i18n-check] locales key mismatch found:')
for (const p of problems) {
console.error(`\n- ${p.title}(${p.items.length})`)
for (const it of p.items) console.error(` - ${it}`)
}
process.exit(1)
}
console.log(`[i18n-check] OK: ${keysZh.size} keys in sync (zh/en/ja).`)
}
main().catch((err) => {
console.error('[i18n-check] Failed:', err)
process.exit(1)
})
+1246 -433
View File
File diff suppressed because it is too large. Load diff
+4 -9
View File
@@ -4,6 +4,7 @@
*/
import { resolveImageUrl } from './companyInfo'
import { currentLang } from './language'
function resolveHonorImageUrl(url) {
return resolveImageUrl(url)
@@ -33,7 +34,9 @@ function marqueeDurationSec(count) {
*/
export async function fetchCompanyHonorPublic(baseUrl) {
const base = (baseUrl || import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const res = await fetch(`${base}/companyHonor/public`, { credentials: 'omit', cache: 'no-store' })
const lang = (currentLang && currentLang.value) || (typeof localStorage !== 'undefined' && localStorage.getItem('huayang_lang')) || 'zh_cn'
const query = new URLSearchParams({ lang: String(lang) }).toString()
const res = await fetch(`${base}/companyHonor/public?${query}`, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
@@ -52,9 +55,7 @@ function buildHonorCardHtml(h) {
}
const title = escapeHtml(h.honorTitle || '')
const type = typeMap[h.honorType] || h.honorType || ''
const desc = escapeHtml(h.honorDesc || '')
const image = escapeHtml(resolveHonorImageUrl(h.honorImage || ''))
const link = h.linkUrl ? escapeHtml(h.linkUrl) : ''
const idRaw = h.honorId != null ? String(h.honorId).trim() : ''
const id = /^\d+$/.test(idRaw) ? idRaw : ''
const inner = `
@@ -62,13 +63,7 @@ function buildHonorCardHtml(h) {
${image ? `<div class="huayang-honor-card-img"><img src="${image}" alt="${title}" loading="lazy" /></div>` : ''}
<p class="huayang-honor-card-title">${title}</p>
${type ? `<p class="huayang-honor-card-type">${escapeHtml(type)}</p>` : ''}
${desc ? `<p class="huayang-honor-card-desc">${desc}</p>` : ''}
</div>`
if (link) {
return `<div class="huayang-honor-card" ${id ? `data-honor-id="${id}"` : ''}>
<a class="huayang-honor-card-link" href="${link}" target="_blank" rel="noopener">${inner}</a>
</div>`
}
return `<div class="huayang-honor-card" ${id ? `data-honor-id="${id}"` : ''}>${inner}</div>`
}
+166 -347
View File
@@ -2,96 +2,45 @@
* 公司简介与实景信息(若依公开接口)
*/
import { currentLang } from './language'
import { currentLang, normalizeLangCode } from './language'
import { fetchSiteConfigPublic } from './siteConfig'
import { translationLooksLikePlaceholder } from '../config/translation-placeholder'
import i18n from '../i18n'
import { resolveImageUrl } from '../utils/asset'
import { ARCHIVE_IMG_PLACEHOLDER } from '../utils/imageLoading'
export { resolveImageUrl }
const API_BASE = import.meta.env.VITE_SITE_API_BASE || '/site'
const LOCAL_HOST_SET = new Set(['localhost', '127.0.0.1', '0.0.0.0', '[::1]'])
const FORCE_IMAGE_CACHE_BUSTER =
String(import.meta.env.VITE_FORCE_IMAGE_CACHE_BUSTER ?? 'true').toLowerCase() !== 'false'
const PROFILE_UPLOAD_CACHE_BUSTER_VALUE = String(
import.meta.env.VITE_IMAGE_CACHE_BUSTER || Date.now().toString(36)
)
const PROFILE_UPLOAD_CACHE_BUSTER = `cb=${encodeURIComponent(PROFILE_UPLOAD_CACHE_BUSTER_VALUE)}`
function shouldBypassCache() {
if (typeof window === 'undefined') return false
if (FORCE_IMAGE_CACHE_BUSTER) return true
return LOCAL_HOST_SET.has(String(window.location.hostname || '').toLowerCase())
}
function appendProfileUploadCacheBuster(input) {
if (!input || !shouldBypassCache()) return input
if (!/\/profile\/upload\//i.test(input)) return input
if (/[?&]cb=/.test(input)) return input
return input.includes('?') ? `${input}&${PROFILE_UPLOAD_CACHE_BUSTER}` : `${input}?${PROFILE_UPLOAD_CACHE_BUSTER}`
function ui(key, fallback = '') {
const v = i18n.global.t(key)
return v && v !== key ? v : fallback
}
/** 与 App.vue `pageConfigs` 一致:公司简介 DOM 调整、发展历程页勿注入 about_intro */
const ABOUT_SPA_PAGE_ID = '0f314d44-bcb7-4dea-b818-1abd55ce0152'
const HISTORY_SPA_PAGE_ID = '5fa12ca5-7145-40f4-b43c-346ffb358bd0'
function sectionsUrl() {
const lang = (currentLang && currentLang.value) || localStorage.getItem('huayang_lang') || 'zh_cn'
/**
* @param {string} [langCode] 若传入(如语言切换事件里的目标语种),必须与界面注入使用同一语种,避免仍请求 zh 接口。
*/
function sectionsUrl(langCode) {
const lang = normalizeLangCode(
langCode ||
(currentLang && currentLang.value) ||
(typeof localStorage !== 'undefined' ? localStorage.getItem('huayang_lang') : '') ||
'zh_cn'
)
const q = new URLSearchParams({ lang: String(lang) })
return `${API_BASE}/company/sections?${q.toString()}`
}
/**
* 解析后台返回的图片地址(公司简介、店面展示、历程图等)。
* - 多图逗号分隔时取第一张
* - 去掉若依接口前缀 /dev-api、/prod-api、/stage-api
* - 若库中存的是 http://localhost(或 127.0.0.1)/profile/... 完整地址,转为同源路径 /profile/...,
* 避免访客浏览器把 localhost 解析到自己电脑导致大面积裂图
* - /profile、/images、/resource、/assets 使用站点根路径,由 Vite 开发代理或 Nginx 反代到后端
*/
export function resolveImageUrl(url) {
if (!url) return ''
const first = String(url).split(',')[0].trim().replace(/\\/g, '/')
if (!first) return ''
if (/^https?:\/\//i.test(first)) {
try {
const u = new URL(first)
const pathOnly = u.pathname + (u.search || '')
const h = u.hostname
const loopback =
h === 'localhost' ||
h === '127.0.0.1' ||
h === '0.0.0.0' ||
h === '[::1]'
if (
loopback &&
(u.pathname.startsWith('/profile') ||
u.pathname.startsWith('/images') ||
u.pathname.startsWith('/resource') ||
u.pathname.startsWith('/assets'))
) {
return appendProfileUploadCacheBuster(pathOnly)
}
} catch {
/* ignore */
}
return appendProfileUploadCacheBuster(first)
}
let path = first.startsWith('/') ? first : `/${first}`
path = path.replace(/^\/(?:dev-api|prod-api|stage-api)(?=\/)/i, '')
if (path.startsWith('/assets/')) {
return path
}
if (
path.startsWith('/profile/') ||
path.startsWith('/images/') ||
path.startsWith('/resource/')
) {
return appendProfileUploadCacheBuster(path)
}
if (path.startsWith('/')) {
return appendProfileUploadCacheBuster(path)
}
return appendProfileUploadCacheBuster(first)
function techListUrl() {
const lang = (currentLang && currentLang.value) || localStorage.getItem('huayang_lang') || 'zh_cn'
const q = new URLSearchParams({ lang: String(lang) })
return `${API_BASE}/company/tech?${q.toString()}`
}
/**
@@ -137,220 +86,99 @@ function hasMeaningfulHtml(html) {
return t.length > 0
}
export async function fetchCompanySectionsPublic() {
try {
const res = await fetch(sectionsUrl())
if (!res.ok) return null
const json = await res.json()
return json.code === 200 ? json.data : null
} catch (error) {
console.error('Failed to fetch company sections:', error)
return null
/** 若依 AjaxResult:兼容 code、列表在 data / rows / data.rows */
function extractAjaxRows(json) {
if (json == null || typeof json !== 'object') return null
const code = Number(json.code)
if (Number.isNaN(code) || code !== 200) return null
let raw = json.data !== undefined ? json.data : json.rows
if (raw != null && typeof raw === 'object' && !Array.isArray(raw)) {
if (Array.isArray(raw.rows)) raw = raw.rows
else if (Array.isArray(raw.data)) raw = raw.data
}
return Array.isArray(raw) ? raw : null
}
const JOIN_PAGE_SPA_ID = 'join-page'
const JOIN_SECTION_DOM_IDS = {
join_rules: 'c_static_001_P_4578-1660723020064',
join_process: 'c_static_001_P_18090-17097726409610',
join_qualification: 'c_static_001_P_18090-17097744608470'
/** 与后端 SiteCompanyController#getLangContentEntry:键可为 JA_JP、ja-jp 等与 normalizeLangCode 等价 */
function resolveLangContentEntryObject(root, localeNorm) {
if (!root || typeof root !== 'object' || !localeNorm || localeNorm === 'zh_cn') return null
const lc = root.langContent || root.lang_content
if (!lc || typeof lc !== 'object') return null
const norm = normalizeLangCode(localeNorm)
const direct = lc[norm]
if (direct != null) return direct
for (const k of Object.keys(lc)) {
if (normalizeLangCode(k) === norm) {
return lc[k]
}
}
return null
}
function joinPageDisplayTitle(raw, fallback) {
const s = String(raw || '').trim()
if (!s) return fallback
const stripped = s.replace(/^招商加盟[--]\s*/i, '').trim()
return stripped || fallback
}
function parseJoinRulesExtraJson(raw) {
if (raw == null || !String(raw).trim()) return null
/**
* 与管理端 extra_data 约定一致:langContent.{en_us|ja_jp} = { title, content } 或旧版纯 HTML 字符串
*/
function parseManualTechLang(extraRaw, localeNorm) {
if (!localeNorm || localeNorm === 'zh_cn') return null
const raw = extraRaw != null ? (typeof extraRaw === 'string' ? extraRaw.trim() : extraRaw) : ''
if (!raw && typeof extraRaw !== 'object') return null
try {
const o = JSON.parse(String(raw))
if (o && typeof o === 'object') return o
const root =
typeof extraRaw === 'string'
? JSON.parse(extraRaw)
: extraRaw && typeof extraRaw === 'object'
? extraRaw
: null
if (!root || typeof root !== 'object') return null
const entry = resolveLangContentEntryObject(root, localeNorm)
if (entry == null) return null
if (typeof entry === 'object' && !Array.isArray(entry)) {
return {
title: String(entry.title || '').trim(),
content: String(entry.content || '').trim()
}
}
if (typeof entry === 'string') return { title: '', content: entry.trim() }
} catch {
/* ignore */
}
return null
}
function revealJoinPageStaticBlocks() {
const ids = Object.values(JOIN_SECTION_DOM_IDS)
for (const id of ids) {
const root = document.getElementById(id)
if (!root) continue
root.style.opacity = '1'
root.style.visibility = 'visible'
root.classList.remove('saf-scroll-animation', 'saf-fadeInUp')
root.querySelectorAll('.saf-scroll-animation, .saf-fadeInUp').forEach((el) => {
el.classList.remove('saf-scroll-animation', 'saf-fadeInUp', 'saf-scroll-in', 'saf-scrolled')
el.style.opacity = '1'
el.style.visibility = 'visible'
})
/** 门户接口异常或未合并时,用 extra_data 覆盖英文/日文标题与正文(与翻译管理保存结构一致) */
function applyManualTechLocaleForList(list, localeNorm) {
if (!Array.isArray(list) || !localeNorm || localeNorm === 'zh_cn') return list
return list.map((row) => {
const extra = fieldTech(row, 'extraData', 'extra_data')
const parsed = parseManualTechLang(extra, localeNorm)
if (!parsed) return row
const next = { ...row }
if (parsed.title && !translationLooksLikePlaceholder(parsed.title)) next.techTitle = parsed.title
if (parsed.content && !translationLooksLikePlaceholder(parsed.content)) next.techContent = parsed.content
return next
})
}
async function fetchTechAjaxJson(url) {
try {
const res = await fetch(url, { cache: 'no-store', credentials: 'omit' })
if (!res.ok) return null
return await res.json()
} catch {
return null
}
}
function applyJoinRulesSection(section) {
const code = sectionField(section, 'sectionCode', 'section_code')
if (!section || code !== 'join_rules') return
const bannerRaw = sectionField(section, 'bannerImage', 'banner_image')
const bannerUrl = bannerRaw ? resolveImageUrl(bannerRaw) : ''
const bannerRoot = document.querySelector('#c_banner_011_P_019-1660721999854')
applyBannerUrlToDom(bannerRoot, bannerUrl)
const root = document.getElementById(JOIN_SECTION_DOM_IDS.join_rules)
if (!root) return
const title = sectionField(section, 'sectionTitle', 'section_title')
const h1 = root.querySelector('h1.e_h1-6')
if (h1) {
h1.textContent = joinPageDisplayTitle(title, '加盟细则')
export async function fetchCompanySectionsPublic(langCode) {
try {
const res = await fetch(sectionsUrl(langCode), { cache: 'no-store', credentials: 'omit' })
if (!res.ok) return null
const json = await res.json()
return extractAjaxRows(json)
} catch (error) {
console.error('Failed to fetch company sections:', error)
return null
}
const extra = parseJoinRulesExtraJson(sectionField(section, 'extraData', 'extra_data'))
const advRich = root.querySelector('.cbox-28-0 .e_richText-24')
const col1Rich = root.querySelector('.cbox-18-0 .e_richText-8')
const col2Rich = root.querySelector('.cbox-18-1 .e_richText-25')
const rightImg = root.querySelector('.cbox-26-1 .e_image-27 img')
const img1 = resolveImageUrl(sectionField(section, 'contentImage1', 'content_image1') || '')
if (extra && (extra.advantageBody || extra.col1Body || extra.col2Body)) {
const advTitle = escapeHtmlText(extra.advantageTitle || '加盟优势')
const advBody = String(extra.advantageBody || '')
if (advRich) {
advRich.innerHTML = `<p><span style="color:#FFFFFF;"><span style="font-size:18px;">${advTitle}</span></span></p>${advBody}`
resolveRichImages(advRich)
}
const c1t = escapeHtmlText(extra.col1Title || '')
const c1b = String(extra.col1Body || '')
if (col1Rich) {
col1Rich.innerHTML = `<p><span style="font-size:18px;"><span style="color:#2449a4;"><strong>${c1t}</strong></span></span></p>${c1b}`
resolveRichImages(col1Rich)
}
const c2t = escapeHtmlText(extra.col2Title || '')
const c2b = String(extra.col2Body || '')
if (col2Rich) {
col2Rich.innerHTML = `<p><span style="font-size:18px;"><span style="color:#2449a4;"><strong>${c2t}</strong></span></span></p>${c2b}`
resolveRichImages(col2Rich)
}
} else {
const merged = String(sectionField(section, 'sectionContent', 'section_content') || '').trim()
if (hasMeaningfulHtml(merged) && advRich) {
const tmp = document.createElement('div')
tmp.innerHTML = merged
const advBlock = tmp.querySelector('.hy-adv-body')
const titles = tmp.querySelectorAll('.hy-col-title')
const bodies = tmp.querySelectorAll('.hy-col-body')
if (advBlock) {
const tEl = tmp.querySelector('.hy-adv-title')
const t = tEl ? escapeHtmlText(tEl.textContent || '加盟优势') : '加盟优势'
advRich.innerHTML = `<p><span style="color:#FFFFFF;"><span style="font-size:18px;">${t}</span></span></p>${advBlock.innerHTML}`
resolveRichImages(advRich)
if (titles[0] && bodies[0] && col1Rich) {
col1Rich.innerHTML = `<p><span style="font-size:18px;"><span style="color:#2449a4;"><strong>${escapeHtmlText(titles[0].textContent || '')}</strong></span></span></p>${bodies[0].innerHTML}`
resolveRichImages(col1Rich)
}
if (titles[1] && bodies[1] && col2Rich) {
col2Rich.innerHTML = `<p><span style="font-size:18px;"><span style="color:#2449a4;"><strong>${escapeHtmlText(titles[1].textContent || '')}</strong></span></span></p>${bodies[1].innerHTML}`
resolveRichImages(col2Rich)
}
} else {
advRich.innerHTML = merged
resolveRichImages(advRich)
}
}
}
if (img1 && rightImg) {
rightImg.src = img1
rightImg.removeAttribute('lazy')
}
}
function applyJoinProcessOrQualificationSection(section, kind) {
const code = sectionField(section, 'sectionCode', 'section_code')
if (!section || code !== kind) return
const domId = JOIN_SECTION_DOM_IDS[kind]
if (!domId) return
const root = document.getElementById(domId)
if (!root) return
const title = sectionField(section, 'sectionTitle', 'section_title')
const h1 = root.querySelector('h1.e_h1-44, h1.e_h1-6')
if (h1) {
const fb = kind === 'join_process' ? '加盟流程' : '加盟资质'
h1.textContent = joinPageDisplayTitle(title, fb)
}
const html = String(sectionField(section, 'sectionContent', 'section_content') || '').trim()
const mainRich =
kind === 'join_process'
? root.querySelector('.e_richText-45')
: root.querySelector('.e_richText-51') || root.querySelector('.e_richText-45')
if (mainRich && hasMeaningfulHtml(html)) {
mainRich.innerHTML = html
resolveRichImages(mainRich)
}
const u1 = resolveImageUrl(sectionField(section, 'contentImage1', 'content_image1') || '')
const u2 = resolveImageUrl(sectionField(section, 'contentImage2', 'content_image2') || '')
const u3 = resolveImageUrl(sectionField(section, 'contentImage3', 'content_image3') || '')
const pickImg = (sel) => root.querySelector(sel)
if (kind === 'join_process') {
const img = pickImg('.e_image-51 img')
if (u1 && img) {
img.src = u1
img.removeAttribute('lazy')
}
} else {
const i1 = pickImg('.e_image-62 img')
const i2 = pickImg('.e_image-63 img')
if (u1 && i1) {
i1.src = u1
i1.removeAttribute('lazy')
}
if (u2 && i2) {
i2.src = u2
i2.removeAttribute('lazy')
}
if (u3) {
const imgs = Array.from(root.querySelectorAll('.e_container-52 img'))
const third = imgs.find((im) => im !== i1 && im !== i2)
if (third) {
third.src = u3
third.removeAttribute('lazy')
}
}
}
const tabBanner = sectionField(section, 'bannerImage', 'banner_image')
if (tabBanner && String(tabBanner).trim()) {
const tabBannerUrl = resolveImageUrl(tabBanner)
const bannerRoot = document.querySelector('#c_banner_011_P_019-1660721999854')
applyBannerUrlToDom(bannerRoot, tabBannerUrl)
}
}
/**
* 招商加盟页:从 huayang_company_section(join_rules / join_process / join_qualification)注入门户 DOM
*/
export async function injectJoinPageContent() {
if (typeof document === 'undefined') return
if (document.body.getAttribute('data-pageid') !== JOIN_PAGE_SPA_ID) return
const sections = await fetchCompanySectionsPublic()
if (!Array.isArray(sections)) return
const rules = sections.find((s) => (s.sectionCode || s.section_code) === 'join_rules')
const proc = sections.find((s) => (s.sectionCode || s.section_code) === 'join_process')
const qual = sections.find((s) => (s.sectionCode || s.section_code) === 'join_qualification')
if (rules) applyJoinRulesSection(rules)
if (proc) applyJoinProcessOrQualificationSection(proc, 'join_process')
if (qual) applyJoinProcessOrQualificationSection(qual, 'join_qualification')
revealJoinPageStaticBlocks()
}
export async function fetchCompanyStoresPublic() {
@@ -507,7 +335,7 @@ export function syncStoreLocationRightImageFromItem(sItem) {
img.src = src
const titleEl = sItem?.querySelector?.('.map_title')
const nameHint = titleEl ? extractMapLocationTitle(titleEl) : ''
img.alt = nameHint || '店面位置'
img.alt = nameHint || ui('common.title.store_location', '店面位置')
}
/**
@@ -594,7 +422,7 @@ export async function injectStoreLocationImagePanel() {
img.className = 'huayang-store-location-img-panel__img'
img.src = initialSrc
const titleEl = previewItem?.querySelector('.map_title')
img.alt = titleEl ? extractMapLocationTitle(titleEl) : '店面位置'
img.alt = titleEl ? extractMapLocationTitle(titleEl) : ui('common.title.store_location', '店面位置')
img.loading = 'lazy'
wrap.appendChild(img)
mapHost.appendChild(wrap)
@@ -652,30 +480,12 @@ function buildStoreShowcaseMarqueeHtml(stores) {
</div>`
}
/**
* 发展历程页:div + CSS 动画横向无限向左跑马灯(双段拼接,非 Swiper 轮播)
*/
export function buildHistoryStoreShowcaseHtml(stores) {
return buildStoreShowcaseMarqueeHtml(stores)
}
/** 发展历程页底部轮播:仅 store_type = history */
export async function fetchCompanyStoresHistoryPublic() {
try {
const res = await fetch(`${API_BASE}/company/stores/history`)
if (!res.ok) return null
const json = await res.json()
return json.code === 200 ? json.data : null
} catch (error) {
console.error('Failed to fetch history page stores:', error)
return null
}
}
/** 店面展示页(page=store)底部图集:仅 store_type = about_showcase */
export async function fetchCompanyStoresAboutShowcasePublic() {
try {
const res = await fetch(`${API_BASE}/company/stores/about-showcase`)
const lang = (currentLang && currentLang.value) || localStorage.getItem('huayang_lang') || 'zh_cn'
const url = `${API_BASE}/company/stores/about-showcase?${new URLSearchParams({ lang: String(lang) }).toString()}`
const res = await fetch(url)
if (!res.ok) return null
const json = await res.json()
return json.code === 200 ? json.data : null
@@ -688,7 +498,9 @@ export async function fetchCompanyStoresAboutShowcasePublic() {
/** 全国门店页「店面位置」左侧列表:仅 store_type = map_location */
export async function fetchCompanyStoresMapLocationsPublic() {
try {
const res = await fetch(`${API_BASE}/company/stores/map-locations`)
const lang = (currentLang && currentLang.value) || localStorage.getItem('huayang_lang') || 'zh_cn'
const url = `${API_BASE}/company/stores/map-locations?${new URLSearchParams({ lang: String(lang) }).toString()}`
const res = await fetch(url)
if (!res.ok) return null
const json = await res.json()
return json.code === 200 ? json.data : null
@@ -745,7 +557,9 @@ export async function injectStoreMapLocationList() {
if (!data?.length) {
itemsRoot.dataset.huayangMapListFromApi = '0'
itemsRoot.innerHTML =
'<div class="cbox-1 sItem on"><div class="huayang-map-location-row"><div class="huayang-map-location-row__text"><div class="e_container-15 s_layout clickhaoadd"><div class="cbox-15-0 p_item"><div class="e_text-2 s_title map_title">店面数据加载中或暂无数据</div></div></div></div></div></div>'
`<div class="cbox-1 sItem on"><div class="huayang-map-location-row"><div class="huayang-map-location-row__text"><div class="e_container-15 s_layout clickhaoadd"><div class="cbox-15-0 p_item"><div class="e_text-2 s_title map_title">${ui(
'ui.company.store_loading_or_empty'
)}</div></div></div></div></div></div>`
return
}
const sorted = [...data].sort((a, b) => {
@@ -758,18 +572,26 @@ export async function injectStoreMapLocationList() {
}
export async function fetchCompanyTechPublic() {
console.log('[SPA] fetchCompanyTechPublic start, URL:', `${API_BASE}/company/tech`)
try {
const res = await fetch(`${API_BASE}/company/tech`)
console.log('[SPA] fetchCompanyTechPublic status:', res.status)
if (!res.ok) return null
const json = await res.json()
console.log('[SPA] fetchCompanyTechPublic json code:', json.code, 'count:', json.data?.length)
return json.code === 200 ? json.data : null
} catch (error) {
console.error('[SPA] Failed to fetch company tech:', error)
return null
const localeNorm = normalizeLangCode(
(currentLang && currentLang.value) ||
(typeof localStorage !== 'undefined' && localStorage.getItem('huayang_lang')) ||
'zh_cn'
)
const primaryUrl = techListUrl()
console.log('[SPA] fetchCompanyTechPublic start, URL:', primaryUrl, 'locale:', localeNorm)
let json = await fetchTechAjaxJson(primaryUrl)
let rows = extractAjaxRows(json)
console.log('[SPA] fetchCompanyTechPublic primary code:', json?.code, 'count:', rows?.length)
/** 英文/日文路径偶发空列表或解析失败时,回退拉取中文列表(含完整 extra_data),再在前端套用翻译管理中的 langContent */
if ((!rows || rows.length === 0) && localeNorm !== 'zh_cn') {
const fb = `${API_BASE}/company/tech?${new URLSearchParams({ lang: 'zh_cn' }).toString()}`
console.warn('[SPA] fetchCompanyTechPublic: fallback to zh_cn list from', fb)
json = await fetchTechAjaxJson(fb)
rows = extractAjaxRows(json)
console.log('[SPA] fetchCompanyTechPublic fallback count:', rows?.length)
}
const merged = applyManualTechLocaleForList(rows, localeNorm)
return merged
}
/**
@@ -826,7 +648,7 @@ function applyAboutIntroSection(section) {
rich.innerHTML = tmp.innerHTML
rich.querySelectorAll('img[src]').forEach((img) => {
const src = img.getAttribute('src')
if (src && !/^https?:\/\//i.test(src)) {
if (src) {
img.src = resolveImageUrl(src)
}
})
@@ -842,18 +664,9 @@ function applyAboutIntroSection(section) {
const img17 = root.querySelector('.e_image-17 img')
const img20 = root.querySelector('.e_image-20 img')
const img22 = root.querySelector('.e_image-22 img')
if (u1 && img17) {
img17.src = u1
img17.removeAttribute('lazy')
}
if (u2 && img20) {
img20.src = u2
img20.removeAttribute('lazy')
}
if (u3 && img22) {
img22.src = u3
img22.removeAttribute('lazy')
}
applyImageUrlToDom(img17, u1)
applyImageUrlToDom(img20, u2)
applyImageUrlToDom(img22, u3)
const layout = root.querySelector('.e_container-5.s_layout')
if (layout) {
@@ -889,17 +702,30 @@ function applyQualityTopBannerFromAboutIntro(sections) {
}
function applyBannerUrlToDom(bannerRoot, bannerUrl) {
if (!bannerUrl || !bannerRoot) return
if (!bannerRoot) return
bannerRoot.querySelectorAll('.p_img img').forEach((img) => {
img.src = bannerUrl
applyImageUrlToDom(img, bannerUrl)
})
bannerRoot.querySelectorAll('.swiper-slide .p_img').forEach((wrap) => {
if (!bannerUrl) {
wrap.style.removeProperty('background-image')
return
}
wrap.style.backgroundImage = `url("${bannerUrl.replace(/"/g, '\\"')}")`
wrap.style.backgroundSize = 'cover'
wrap.style.backgroundPosition = 'center'
})
}
function applyImageUrlToDom(img, url) {
if (!img) return
img.onerror = null
img.src = url || ARCHIVE_IMG_PLACEHOLDER
img.removeAttribute('lazy')
img.removeAttribute('srcset')
img.removeAttribute('sizes')
}
function escapeHtmlText(s) {
return String(s || '')
.replace(/&/g, '&amp;')
@@ -933,7 +759,7 @@ function resolveRichImages(rootEl) {
if (!rootEl) return
rootEl.querySelectorAll('img[src]').forEach((img) => {
const src = img.getAttribute('src')
if (src && !/^https?:\/\//i.test(src)) {
if (src) {
img.src = resolveImageUrl(src)
}
})
@@ -941,14 +767,18 @@ function resolveRichImages(rootEl) {
/**
* 品质技术页:顶部横幅沿用 about_intro 的横幅图;页顶说明/三图见 quality_page;各技术区块含展示图片
* @param {{ shouldAbort?: () => boolean }} [options] 传入 SPA bootstrap 的 isStale,避免切换语言后旧请求覆盖新 DOM
*/
export async function injectQualityPageContent() {
export async function injectQualityPageContent(options = {}) {
const shouldAbort =
typeof options.shouldAbort === 'function' ? options.shouldAbort : () => false
const sections = await fetchCompanySectionsPublic()
if (shouldAbort()) return
applyQualityTopBannerFromAboutIntro(sections)
const qualitySection = Array.isArray(sections)
? sections.find((s) => (s.sectionCode || s.section_code) === QUALITY_PAGE_SECTION_CODE)
: null
await injectTechSections(qualitySection)
await injectTechSections(qualitySection, options)
}
/**
@@ -1081,37 +911,26 @@ export async function injectAboutPageContent() {
})
})
// 发展历程页:时间线下方「店面展示」图片网格(store_type = history;通用列表不含 history)
const historyStores = await fetchCompanyStoresHistoryPublic()
hideLegacyHistoryPageStaticStoreCarousel()
const historyStoreRoot = document.getElementById('huayang-history-store-wrap')
const historyStorePList = document.querySelector('#huayang-history-store-wrap .huayang-history-store-swiper .p_list')
if (historyStoreRoot && (!historyStores || !historyStores.length)) {
historyStoreRoot.style.display = 'none'
}
if (historyStorePList && historyStores && historyStores.length > 0) {
if (historyStoreRoot) {
historyStoreRoot.style.display = ''
historyStoreRoot.style.removeProperty('visibility')
}
const html = buildHistoryStoreShowcaseHtml(historyStores)
if (html) historyStorePList.innerHTML = html
}
}
/**
* 注入品质技术页面内容区(由 injectQualityPageContent 调用;也可单独调试用)
* @param {object|null} qualityPageSection 板块 section_code = quality_page 时的配置(页顶说明与三图)
* @param {{ shouldAbort?: () => boolean }} [options]
*/
export async function injectTechSections(qualityPageSection = null) {
export async function injectTechSections(qualityPageSection = null, options = {}) {
const shouldAbort =
typeof options.shouldAbort === 'function' ? options.shouldAbort : () => false
console.log('[SPA] injectTechSections invoked')
const techList = await fetchCompanyTechPublic()
if (shouldAbort()) return
const container = document.querySelector('.tech-list-container')
console.log('[SPA] injectTechSections - container exists:', !!container, 'items:', techList?.length)
const introHtml = buildQualityIntroBlockHtml(qualityPageSection)
if (shouldAbort()) return
if (container) {
if (techList && techList.length > 0) {
const blocks = techList
@@ -1145,7 +964,7 @@ export async function injectTechSections(qualityPageSection = null) {
} else {
container.innerHTML =
introHtml ||
'<div style="padding: 50px; text-align: center; color: #999;">暂无品质技术相关内容,请在后台「品质技术」菜单添加。</div>'
`<div style="padding: 50px; text-align: center; color: #999;">${ui('ui.company.no_quality_content')}</div>`
const introRoot = container.querySelector('.quality-page-intro')
if (introRoot) resolveRichImages(introRoot)
console.log('[SPA] tech list is empty or null')
+4 -1
View File
@@ -3,6 +3,7 @@
*/
import { resolveImageUrl } from './companyInfo'
import { currentLang } from './language'
function escapeHtml(text) {
if (text == null || text === '') return ''
@@ -24,7 +25,9 @@ function escapeAttr(s) {
*/
export async function fetchCompanyTimelinePublic(baseUrl) {
const base = (baseUrl || import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const res = await fetch(`${base}/companyTimeline/public`, { credentials: 'omit', cache: 'no-store' })
const lang = (currentLang && currentLang.value) || (typeof localStorage !== 'undefined' && localStorage.getItem('huayang_lang')) || 'zh_cn'
const url = `${base}/companyTimeline/public?${new URLSearchParams({ lang: String(lang) }).toString()}`
const res = await fetch(url, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
+310 -146
View File
@@ -1,26 +1,30 @@
/**
* 门户联系与加盟(若依公开接口)
* 门户联系(若依公开接口)
*/
const API_BASE = import.meta.env.VITE_SITE_API_BASE || '/site'
const LOCAL_HOST_SET = new Set(['localhost', '127.0.0.1', '0.0.0.0', '[::1]'])
const PROFILE_UPLOAD_CACHE_BUSTER = `cb=${Date.now().toString(36)}`
import i18n from '../i18n'
import { resolveImageUrl } from '../utils/asset'
function appendProfileUploadCacheBuster(input) {
if (!input || typeof window === 'undefined') return input
const h = String(window.location.hostname || '').toLowerCase()
if (!LOCAL_HOST_SET.has(h)) return input
if (!/\/profile\/upload\//i.test(input)) return input
if (/[?&]cb=/.test(input)) return input
return input.includes('?') ? `${input}&${PROFILE_UPLOAD_CACHE_BUSTER}` : `${input}?${PROFILE_UPLOAD_CACHE_BUSTER}`
const API_BASE = import.meta.env.VITE_SITE_API_BASE || '/site'
function ui(key, fallback = '') {
const v = i18n.global.t(key)
return v && v !== key ? v : fallback
}
function resolveImageUrl(raw) {
const value = raw == null ? '' : String(raw).trim()
if (!value) return ''
if (/^https?:\/\//i.test(value)) return appendProfileUploadCacheBuster(value)
if (value.startsWith('/')) return appendProfileUploadCacheBuster(value)
return appendProfileUploadCacheBuster(`/${value}`)
function translatedValue(key) {
const v = i18n.global.t(key)
if (!v || v === key) return ''
return String(v).trim()
}
function contactLabel(key, fallback) {
return ui(`contact.label_${key}`, fallback)
}
function langQueryParam() {
const code = localStorage.getItem('huayang_lang') || 'zh_cn'
return `lang=${encodeURIComponent(String(code))}`
}
async function fetchSiteConfigPublic() {
@@ -36,21 +40,69 @@ async function fetchSiteConfigPublic() {
}
/**
* 旧模板页脚公司信息块:「地址」标题段落的下一行正文(.s_tmpl_footer .e_richText-81 内相邻 p)
* 旧模板页脚公司信息块(.e_richText-81):热线 / 邮箱 / 地址 标签与下一行值。
* 兼容归档文案「商务热线」「服务热线」及英/日切换后的标签文案。
*/
export function patchFooterCompanyRichAddress(addressText) {
const v = addressText == null ? '' : String(addressText).trim()
if (!v) return
document.querySelectorAll('.s_tmpl_footer .e_richText-81').forEach((rich) => {
const addressValue = addressText == null ? '' : String(addressText).trim()
const phoneValue = translatedValue('footer.contact_phone') || translatedValue('contact.phone') || ''
const emailValue = translatedValue('footer.contact_email') || translatedValue('contact.email') || ''
const hotlineLabel = contactLabel('hotline', '商务热线:')
const emailLabel = contactLabel('email', 'E-mail:')
const addressLabel = contactLabel('address', '地址:')
const richBlocks = Array.from(
document.querySelectorAll(
'.s_tmpl_footer .e_richText-81, [data-haiho-footer-bg-scope="1"] .e_richText-81, .e_container-60 .e_richText-81'
)
)
richBlocks.forEach((rich) => {
const ps = Array.from(rich.querySelectorAll(':scope > p'))
ps.forEach((p) => {
const raw = (p.textContent || '').replace(/\s+/g, '')
if (!raw) return
if (
/商务热线|服务热线|客服热线|热线电话|热线|客服|^电话[::]?$/i.test(raw) ||
/^电话/.test(raw) ||
/^Service\s*Hotline|^Business\s*Hotline/i.test(raw)
) {
p.textContent = hotlineLabel
} else if (/e-mail|电子邮件|邮箱/i.test(raw)) {
p.textContent = emailLabel
} else if (/^地址|^住址|地址[::\s]|地址\s*:/i.test(raw)) {
p.textContent = addressLabel
}
})
const hotNorm = (hotlineLabel || '').replace(/\s+/g, '')
const mailNorm = (emailLabel || '').replace(/\s+/g, '')
const addrNorm = (addressLabel || '').replace(/\s+/g, '')
for (let i = 0; i < ps.length - 1; i++) {
const labelRaw = (ps[i].textContent || '').replace(/\s+/g, '')
if (/地址/.test(labelRaw)) {
const valP = ps[i + 1]
if (!valP) return
// 直接覆盖整行文本,避免旧模板遗留前缀符号/脏字符残留
valP.textContent = v
return
const line = (ps[i].textContent || '').trim()
const lineCmp = line.replace(/\s+/g, '')
const next = ps[i + 1]
if (!next) continue
const isHotLabel =
lineCmp === hotNorm ||
/商务热线|服务热线|客服热线|热线电话|Business\s*Hotline|Service\s*Hotline|ビジネスホットライン|サービスホットライン/i.test(
lineCmp
)
const isMailLabel =
lineCmp === mailNorm ||
/^E-mail|^邮箱|^电子邮件|^Email|^メール|^eメール/i.test(lineCmp)
const isAddrLabel =
lineCmp === addrNorm ||
/^地址|^Address|^住所|^住址/i.test(lineCmp)
if (isHotLabel && phoneValue) {
next.textContent = phoneValue
} else if (isMailLabel && emailValue) {
next.textContent = emailValue
} else if (isAddrLabel && addressValue) {
next.textContent = addressValue
}
}
})
@@ -58,7 +110,7 @@ export function patchFooterCompanyRichAddress(addressText) {
export async function fetchContactInfoPublic() {
try {
const res = await fetch(`${API_BASE}/contact/list`)
const res = await fetch(`${API_BASE}/contact/list?${langQueryParam()}`)
if (!res.ok) return null
const json = await res.json()
return json.code === 200 ? json.data : null
@@ -68,54 +120,160 @@ export async function fetchContactInfoPublic() {
}
}
export async function submitJoinApply(data) {
try {
const res = await fetch(`${API_BASE}/contact/join`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
})
if (!res.ok) return { code: 500, msg: '网络错误' }
return await res.json()
} catch (error) {
console.error('Failed to submit join apply:', error)
return { code: 500, msg: '请求失败' }
}
}
/**
* 注入全站页脚联系信息(地址、电话、邮箱等)
*/
export async function injectFooterContact() {
const data = await fetchContactInfoPublic()
if (!data || data.length === 0) return
const phoneItem = data.find(c => c.contactType === 'phone')
const emailItem = data.find(c => c.contactType === 'email')
const addressItem = data.find(c => c.contactType === 'address')
if (addressItem && addressItem.contactValue) {
patchFooterCompanyRichAddress(addressItem.contactValue)
if (!data || data.length === 0) {
document.querySelectorAll('.saf-online p a').forEach((el) => {
if (el.textContent.includes('电话') || el.textContent.includes('邮箱') || el.textContent.includes('地址')) {
el.closest('p, li, .saf-lineitem')?.remove()
}
})
return
}
const phoneRow = data.find(c => c.contactType === 'phone')
const emailRow = data.find(c => c.contactType === 'email')
const addressRow = data.find(c => c.contactType === 'address')
const phoneValue = translatedValue('footer.contact_phone') || phoneRow?.contactValue || ''
const emailValue = translatedValue('footer.contact_email') || emailRow?.contactValue || ''
const addressValue = translatedValue('footer.contact_address') || addressRow?.contactValue || ''
patchFooterCompanyRichAddress(addressValue || '')
// 匹配 saf-online 中的电话和邮箱
const contactEls = document.querySelectorAll('.saf-online p a')
const phoneLabel = contactLabel('hotline', '商务热线:')
const emailLabel = contactLabel('email', 'E-mail:')
contactEls.forEach(el => {
if (el.textContent.includes('电话') && phoneItem) {
el.textContent = `电话:${phoneItem.contactValue}`
} else if (el.textContent.includes('邮箱') && emailItem) {
el.textContent = `邮箱:${emailItem.contactValue}`
if (el.textContent.includes('电话') && phoneValue) {
el.textContent = `${phoneLabel}${phoneValue}`
} else if (el.textContent.includes('邮箱') && emailValue) {
el.textContent = `${emailLabel}${emailValue}`
}
})
}
const CONTACT_ICON_SVG = {
phone:
'<svg t="1669706984096" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1471" width="200" height="200"><path d="M759.296 17.92H264.704c-34.816 0-60.928 28.16-60.928 60.928v864.768c0 34.816 28.16 60.928 60.928 60.928h494.08c34.816 0 62.464-28.16 62.464-60.928V78.848c-1.024-33.28-27.648-60.928-61.952-60.928zM512 945.152c-34.816 0-60.928-28.16-60.928-60.928 0-34.816 28.16-60.928 60.928-60.928 34.816 0 62.464 28.16 62.464 60.928-1.536 33.28-27.648 60.928-62.464 60.928z m247.296-185.856H264.704V141.312h494.08v617.984z" p-id="1472"></path></svg>',
email:
'<svg t="1668655465458" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12992" width="200" height="200"><path d="M1022.08 716.928V300.48l-217.28 217.344 217.28 199.04M655.36 667.2a188.16 188.16 0 0 1-133.888 55.488c-50.56 0-98.176-19.712-133.952-55.488L270.976 550.592 20.864 779.84v38.4c0 50.24 40.832 91.072 91.008 91.072h819.2c50.176 0 91.008-40.832 91.008-91.008v-39.68l-249.536-228.608-117.12 117.12" p-id="12993"></path><path d="M932.928 128h-819.2C63.616 128 22.848 168.832 22.848 219.008v19.008l398.784 398.912c27.2 27.136 63.36 42.112 101.76 42.112 38.464 0 74.624-14.976 101.76-42.112L1024 238.016v-19.008C1024 168.832 983.04 128 932.928 128M20.864 300.48v417.6L238.72 518.4 20.864 300.48" p-id="12994"></path></svg>',
address:
'<svg t="1654096485319" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3899" width="200" height="200"><path d="M511.449009 213.858462a179.278769 179.278769 0 1 1 0 358.557538 179.278769 179.278769 0 0 1 0-358.557538z m393.294769 179.357538A393.294769 393.294769 0 1 0 182.036086 608.098462l294.203077 392.270769a39.384615 39.384615 0 0 0 70.498462 0l294.754461-392.270769c39.699692-61.912615 63.251692-135.483077 63.251692-214.882462z" p-id="3900"></path></svg>'
}
function defaultContactLabel(type) {
if (type === 'phone') return contactLabel('hotline', '商务热线:')
if (type === 'email') return contactLabel('email', 'E-mail:')
if (type === 'address') return contactLabel('address', '地址:')
return '联系方式:'
}
function contactIconSvg(type) {
return CONTACT_ICON_SVG[type] || CONTACT_ICON_SVG.address
}
function formatContactLabel(item) {
const raw = String(item?.contactLabel || '').trim()
if (raw) {
return /[::]$/.test(raw) ? raw : `${raw}:`
}
return defaultContactLabel(item?.contactType)
}
function splitContactLines(raw) {
return String(raw || '')
.split(/\r?\n/)
.map((line) => line.trim())
.filter(Boolean)
}
const CONTACT_TYPE_ORDER = ['phone', 'email', 'address', 'wechat']
function groupContactPageItems(flatList) {
const bucket = new Map()
flatList.forEach((item) => {
const type = item?.contactType || 'phone'
if (!bucket.has(type)) {
bucket.set(type, {
contactType: type,
contactLabel: item?.contactLabel || '',
values: []
})
}
const group = bucket.get(type)
if (!group.contactLabel && item?.contactLabel) {
group.contactLabel = item.contactLabel
}
splitContactLines(item?.contactValue).forEach((value) => {
if (!group.values.includes(value)) {
group.values.push(value)
}
})
})
return CONTACT_TYPE_ORDER
.filter((type) => bucket.has(type) && bucket.get(type).values.length)
.map((type) => bucket.get(type))
}
function formatGroupedValuesHtml(type, values) {
return values
.map((value) => {
if (type === 'phone') {
return `<a href="tel:${value.replace(/[^0-9-]/g, '')}" target="_self" rel="nofollow">${value}</a>`
}
if (type === 'email') {
return `<a href="mailto:${value}" target="_self" rel="nofollow">${value}</a>`
}
return value
})
.join('<br>')
}
function buildContactRowHtml(group) {
const type = group?.contactType || 'phone'
const label = formatContactLabel(group)
const valueHtml = formatGroupedValuesHtml(type, group?.values || [])
return `<div class="cbox-21 p_loopitem"><div class="e_container-22 s_layout response-transition">
<div class="cbox-22-0 p_item"><div class="e_icon-23 s_title response-transition">
${contactIconSvg(type)}
</div></div>
<div class="cbox-22-1 p_item"><p class="e_text-25 s_body response-transition">
${label}
</p><p class="e_text-26 s_body response-transition">
${valueHtml}
</p></div>
</div></div>`
}
function resolveContactPageItems(data, configs) {
const list = Array.isArray(data) ? data.filter((item) => String(item?.contactValue || '').trim()) : []
if (list.length) {
return groupContactPageItems(list)
}
const fallback = []
const phones = splitContactLines(configs.contact_phone)
const emails = splitContactLines(configs.contact_email)
const address = String(configs.contact_address || '').trim()
if (phones.length) {
fallback.push({ contactType: 'phone', contactLabel: '商务热线', values: phones })
}
if (emails.length) {
fallback.push({ contactType: 'email', contactLabel: 'E-mail', values: emails })
}
if (address) {
fallback.push({ contactType: 'address', contactLabel: '地址', values: [address] })
}
return fallback
}
/**
* 注入联系我们页面的内容
*/
export async function injectContactPageContent() {
const [data, configs] = await Promise.all([fetchContactInfoPublic(), fetchSiteConfigPublic()])
const phone = String(configs.contact_phone || '').trim()
const email = String(configs.contact_email || '').trim()
const address = String(configs.contact_address || '').trim()
const content = String(configs.contact_content || '').trim()
// 同步“联系我们”段落文案
@@ -125,6 +283,9 @@ export async function injectContactPageContent() {
const lines = content.split(/\r?\n/).map((line) => line.trim()).filter(Boolean)
contentHost.innerHTML = lines.map((line) => `<p>${line}</p>`).join('')
}
} else {
const contentHost = document.querySelector('#c_static_001-1669701780184 .e_richText-18')
if (contentHost) contentHost.innerHTML = ''
}
// 同步顶部图片(联系我们页横幅)
@@ -134,100 +295,43 @@ export async function injectContactPageContent() {
if (topBannerImg) {
topBannerImg.setAttribute('src', topImage)
}
} else {
const topBannerImg = document.querySelector('#c_banner_011_P_019-16753395542060 .p_img img')
if (topBannerImg) topBannerImg.remove()
}
// 同步“我们的位置”图片(替换百度地图容器)
const mapImage = resolveImageUrl(configs.contact_map_image)
if (mapImage) {
const mapHost = document.querySelector('#c_static_001-1669701780184 .e_mapbaidu-46')
if (mapHost) {
// 限制图片始终不超出「我们的位置」阴影容器
mapHost.style.overflow = 'hidden'
mapHost.style.display = 'flex'
mapHost.style.alignItems = 'center'
mapHost.style.justifyContent = 'center'
mapHost.innerHTML = `<img src="${mapImage}" alt="我们的位置" style="display:block;max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;border:1px solid #e5e7eb;box-sizing:border-box;">`
}
}
// 同步电话/邮箱/地址显示(优先配置值,其次联系表数据)
const phoneItem = phone || data?.find((c) => c.contactType === 'phone')?.contactValue || ''
const emailItem = email || data?.find((c) => c.contactType === 'email')?.contactValue || ''
const addressItem = address || data?.find((c) => c.contactType === 'address')?.contactValue || ''
const items = resolveContactPageItems(data, configs)
const listHost = document.querySelector('#c_static_001-1669701780184 .e_loop-21 .p_list')
if (listHost) {
const rowEls = listHost.querySelectorAll('.cbox-21.p_loopitem')
if (rowEls[0] && phoneItem) {
const phoneVal = rowEls[0].querySelector('.e_text-26')
if (phoneVal) {
phoneVal.innerHTML = `<a href="tel:${phoneItem.replace(/[^0-9-]/g, '')}" target="_self" rel="nofollow">${phoneItem}</a>`
}
}
if (rowEls[1] && emailItem) {
const emailVal = rowEls[1].querySelector('.e_text-26')
if (emailVal) {
emailVal.innerHTML = `<a href="mailto:${emailItem}" target="_self" rel="nofollow">${emailItem}</a>`
}
}
if (rowEls[2] && addressItem) {
const addressVal = rowEls[2].querySelector('.e_text-26')
if (addressVal) {
addressVal.textContent = addressItem
}
if (items.length) {
listHost.innerHTML = items.map((item) => buildContactRowHtml(item)).join('')
} else {
listHost.innerHTML = ''
}
}
}
export async function submitMessage(data) {
try {
const res = await fetch(`${API_BASE}/message/submit`, {
const inquiryPayload = {
inquiryName: data?.messageName || '',
inquiryPhone: data?.messagePhone || '',
inquiryProduct: data?.messageEmail || '',
inquiryMessage: data?.messageContent || ''
}
const res = await fetch(`${API_BASE}/product/inquiry`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
body: JSON.stringify(inquiryPayload)
})
if (!res.ok) return { code: 500, msg: '网络错误' }
if (!res.ok) return { code: 500, msg: ui('ui.network.network_error') }
return await res.json()
} catch (error) {
console.error('Failed to submit message:', error)
return { code: 500, msg: '请求失败' }
return { code: 500, msg: ui('ui.network.request_failed') }
}
}
/**
* 初始化加盟表单提交
*/
export function initJoinForm() {
const form = document.querySelector('.join-form, .e_form-94')
if (!form) return
const handler = async (e) => {
e.preventDefault()
const formData = new FormData(form)
const data = Object.fromEntries(formData.entries())
// 映射字段名(如果 HTML 中不是 applyName 等)
const payload = {
applyName: data.name || data.applyName || '',
applyPhone: data.phone || data.applyPhone || '',
applyCompany: data.company || data.applyCompany || '',
applyIntent: data.intent || data.applyIntent || '',
applyArea: data.area || data.applyArea || ''
}
const res = await submitJoinApply(payload)
if (res.code === 200) {
alert('提交成功,我们将尽快联系您!')
form.reset()
} else {
alert(res.msg || '提交失败')
}
}
form.onsubmit = handler
const btn = form.querySelector('.e_formBtn-96')
if (btn) btn.onclick = handler
}
/**
* 初始化在线留言表单
*/
@@ -235,28 +339,88 @@ export function initMessageForm() {
const form = document.querySelector('.message-form, .e_form-10')
if (!form) return
const readValue = (selectorList = [], fallbackNames = [], fallbackPlaceholders = []) => {
for (const selector of selectorList) {
const el = form.querySelector(selector)
if (el && typeof el.value === 'string' && el.value.trim()) return el.value.trim()
}
const controls = Array.from(form.querySelectorAll('input, textarea, select'))
for (const el of controls) {
const name = String(el.getAttribute('name') || '').trim().toLowerCase()
if (name && fallbackNames.some((n) => name === String(n).toLowerCase())) {
const v = String(el.value || '').trim()
if (v) return v
}
const placeholder = String(el.getAttribute('placeholder') || '').trim()
if (placeholder && fallbackPlaceholders.some((p) => placeholder.includes(p))) {
const v = String(el.value || '').trim()
if (v) return v
}
}
return ''
}
const ensureSubmitButton = () => {
let btn = form.querySelector('.e_formBtn-16, button[type="submit"], .btn-primary')
if (btn) return btn
btn = document.createElement('button')
btn.type = 'submit'
btn.className = 'e_formBtn-16 btn btn-primary'
btn.textContent = ui('ui.contact.submit_message', '提交留言')
btn.style.marginTop = '12px'
btn.style.minWidth = '120px'
const host = form.querySelector('.cbox-10') || form
host.appendChild(btn)
return btn
}
const submitBtn = ensureSubmitButton()
const handler = async (e) => {
e.preventDefault()
const formData = new FormData(form)
const data = Object.fromEntries(formData.entries())
const payload = {
messageName: data.name || data.messageName || '',
messagePhone: data.phone || data.messagePhone || '',
messageEmail: data.email || data.messageEmail || '',
messageContent: data.message || data.messageContent || ''
messageName: readValue(
['input[name="messageName"]', 'input[name="name"]', 'input[name="e_input-12"]'],
['messagename', 'name', 'e_input-12'],
['姓名', '联系人']
),
messagePhone: readValue(
['input[name="messagePhone"]', 'input[name="phone"]', 'input[name="e_input-13"]'],
['messagephone', 'phone', 'e_input-13'],
['电话', '手机', '联系方式']
),
messageEmail: readValue(
['input[name="messageEmail"]', 'input[name="email"]', 'input[name="e_input-14"]'],
['messageemail', 'email', 'e_input-14'],
['邮箱', 'email']
),
messageContent: readValue(
['textarea[name="messageContent"]', 'textarea[name="message"]', 'textarea[name="e_textarea-15"]'],
['messagecontent', 'message', 'e_textarea-15'],
['留言', '内容', '需求']
)
}
if (!payload.messageName || !payload.messagePhone || !payload.messageContent) {
alert(ui('ui.status.contact_required', '请填写姓名、电话和留言内容'))
return
}
if (submitBtn) submitBtn.disabled = true
const res = await submitMessage(payload)
if (res.code === 200) {
alert('留言提交成功,我们会尽快与您联系!')
form.reset()
} else {
alert(res.msg || '提交失败')
try {
if (res.code === 200) {
alert(ui('ui.status.submit_ok_message'))
form.reset()
} else {
alert(res.msg || ui('ui.status.submit_fail_retry'))
}
} finally {
if (submitBtn) submitBtn.disabled = false
}
}
form.onsubmit = handler
const btn = form.querySelector('.e_formBtn-16')
if (btn) btn.onclick = handler
if (submitBtn) submitBtn.onclick = handler
}
+11
View File
@@ -2,6 +2,7 @@
* 门户版权信息注入(复用 Logo 公共接口)
*/
import { fetchLogoPublic } from './logo'
import i18n from '../i18n'
function escapeHtml(text) {
if (text == null || text === '') {
@@ -19,6 +20,16 @@ function escapeHtml(text) {
* 将版权信息注入到底部模板(找不到容器则跳过)
*/
export async function injectFooterCopyright() {
const translated = i18n.global.t('footer.site_copyright')
if (translated && translated !== 'footer.site_copyright') {
const t = escapeHtml(translated)
const candidates = Array.from(document.querySelectorAll('.s_tmpl_footer p span, .s_tmpl_footer p, .e_richText-89 p'))
const target = candidates.find((el) => /版权所有|Copyright/i.test(el.textContent || ''))
if (target) {
target.textContent = t
return
}
}
const config = await fetchLogoPublic('copyright')
if (!config || config.isEnabled !== '1') {
return
+153 -41
View File
@@ -2,7 +2,9 @@
* 门户华阳文化页:分类、标签、详情(公开接口)
*/
import { nextTick } from 'vue'
import { resolveImageUrl } from '../utils/asset'
import { resolveImageUrl, resolveRichImageHtml } from '../utils/asset'
import { currentLang } from './language'
import i18n from '../i18n'
function escapeHtml(text) {
if (text == null || text === '') {
@@ -16,12 +18,21 @@ function escapeHtml(text) {
.replace(/'/g, '&#39;')
}
function ui(key, fallback = '') {
const v = i18n.global.t(key)
return v && v !== key ? v : fallback
}
function siteBase() {
return (import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
}
function langQuery() {
return `lang=${encodeURIComponent(String(currentLang.value || localStorage.getItem('huayang_lang') || 'zh_cn'))}`
}
export async function fetchCultureCategoriesPublic() {
const res = await fetch(`${siteBase()}/culture/categories/public`, { credentials: 'omit', cache: 'no-store' })
const res = await fetch(`${siteBase()}/culture/categories/public?${langQuery()}`, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
@@ -34,7 +45,7 @@ export async function fetchCultureCategoriesPublic() {
export async function fetchCultureTagsPublic(categoryId) {
const id = encodeURIComponent(String(categoryId))
const res = await fetch(`${siteBase()}/culture/tags/public?categoryId=${id}`, {
const res = await fetch(`${siteBase()}/culture/tags/public?categoryId=${id}&${langQuery()}`, {
credentials: 'omit',
cache: 'no-store'
})
@@ -49,7 +60,7 @@ export async function fetchCultureTagsPublic(categoryId) {
}
export async function fetchCultureTagDetailPublic(tagId) {
const res = await fetch(`${siteBase()}/culture/tags/${encodeURIComponent(String(tagId))}/public`, {
const res = await fetch(`${siteBase()}/culture/tags/${encodeURIComponent(String(tagId))}/public?${langQuery()}`, {
credentials: 'omit',
cache: 'no-store'
})
@@ -114,6 +125,62 @@ function tagLoopRoot() {
)
}
async function navigateCultureHref(href) {
if (!href) return false
let url
try {
url = new URL(href, window.location.href)
} catch {
return false
}
if (url.searchParams.get('page') !== 'culture') return false
const tagId = url.searchParams.get('cultureTagId')
const categoryId = url.searchParams.get('categoryId')
window.history.pushState({}, '', `${url.pathname}${url.search}${url.hash}`)
if (tagId && String(tagId).trim() !== '') {
await injectCultureDetail(tagId, categoryId)
} else {
await injectCultureList(categoryId)
}
await injectCulturePageBanner()
window.scrollTo({ top: 0, behavior: 'smooth' })
return true
}
function bindCultureInternalLinks(root) {
if (!root) return
root.dataset.hyCultureNavRoot = '1'
if (root.dataset.hyCultureLinksBound === '1') return
root.dataset.hyCultureLinksBound = '1'
root.addEventListener('click', (event) => {
const link = event.target?.closest?.('a[href]')
const card = event.target?.closest?.('.hy-culture-card[data-href]')
const href = link?.getAttribute('href') || card?.getAttribute('data-href')
if (!href) return
let url
try {
url = new URL(href, window.location.href)
} catch {
return
}
if (url.searchParams.get('page') !== 'culture') return
event.preventDefault()
event.stopPropagation()
void navigateCultureHref(href)
}, true)
root.addEventListener('keydown', (event) => {
if (event.key !== 'Enter' && event.key !== ' ') return
const card = event.target?.closest?.('.hy-culture-card[data-href]')
if (!card) return
event.preventDefault()
event.stopPropagation()
void navigateCultureHref(card.getAttribute('data-href'))
})
}
/**
* 列表态:渲染顶部分类 + 当前分类下标签卡片
* @param {string|number|null|undefined} selectedCategoryId 来自 URL ?categoryId=
@@ -124,68 +191,108 @@ export async function injectCultureList(selectedCategoryId) {
if (!catHost || !loopRoot) {
return
}
catHost.innerHTML = ''
loopRoot.innerHTML = ''
bindCultureInternalLinks(catHost)
bindCultureInternalLinks(loopRoot)
let categories = []
try {
categories = await fetchCultureCategoriesPublic()
} catch {
catHost.innerHTML = '<div class="empty-tip">分类加载失败,请稍后重试</div>'
catHost.innerHTML = `<div class="empty-tip">${escapeHtml(ui('ui.culture.category_load_failed'))}</div>`
loopRoot.innerHTML = ''
return
}
if (!categories.length) {
catHost.innerHTML = '<div class="empty-tip">暂无文化分类,请在管理端「华阳文化页」中添加</div>'
catHost.innerHTML = `<div class="empty-tip">${escapeHtml(ui('ui.culture.no_categories'))}</div>`
loopRoot.innerHTML = '<div class=""></div>'
return
}
let activeId = selectedCategoryId != null && String(selectedCategoryId).trim() !== '' ? String(selectedCategoryId).trim() : null
if (!activeId || !categories.some((c) => String(c.categoryId) === activeId)) {
activeId = String(categories[0].categoryId)
}
const hasSelectedCategory =
selectedCategoryId != null &&
String(selectedCategoryId).trim() !== '' &&
categories.some((c) => String(c.categoryId) === String(selectedCategoryId).trim())
const activeId = hasSelectedCategory ? String(selectedCategoryId).trim() : null
catHost.innerHTML = categories
.map((c) => {
const isActive = String(c.categoryId) === activeId
const activeStyle = isActive
? ' style="color:#c0392b;font-weight:600;border-bottom:2px solid #c0392b;padding-bottom:2px"'
: ''
return `<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition"><a href="?page=culture&categoryId=${encodeURIComponent(
String(c.categoryId)
)}"${activeStyle}>${escapeHtml(c.categoryName)}</a></p></div>`
})
.join('')
const allCategoryEntry = `<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition"><a href="?page=culture"${
!activeId ? ' style="color:#c0392b;font-weight:600;border-bottom:2px solid #c0392b;padding-bottom:2px"' : ''
}>${escapeHtml(ui('ui.common.all', '全部'))}</a></p></div>`
catHost.innerHTML =
allCategoryEntry +
categories
.map((c) => {
const isActive = activeId != null && String(c.categoryId) === activeId
const activeStyle = isActive
? ' style="color:#c0392b;font-weight:600;border-bottom:2px solid #c0392b;padding-bottom:2px"'
: ''
return `<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition"><a href="?page=culture&categoryId=${encodeURIComponent(
String(c.categoryId)
)}"${activeStyle}>${escapeHtml(c.categoryName)}</a></p></div>`
})
.join('')
let tags = []
try {
tags = await fetchCultureTagsPublic(activeId)
} catch {
loopRoot.innerHTML =
'<div class=""><div class="p_list"><div class="empty-tip">标签加载失败,请稍后重试</div></div></div>'
return
if (activeId) {
try {
tags = await fetchCultureTagsPublic(activeId)
} catch {
loopRoot.innerHTML =
`<div class=""><div class="p_list"><div class="empty-tip">${escapeHtml(ui('ui.culture.tag_load_failed'))}</div></div></div>`
return
}
} else {
try {
const grouped = await Promise.all(
categories.map(async (c) => {
const list = await fetchCultureTagsPublic(c.categoryId)
return Array.isArray(list)
? list.map((item) => ({
...item,
categoryId: item?.categoryId ?? c.categoryId
}))
: []
})
)
tags = grouped.flat()
} catch {
loopRoot.innerHTML =
`<div class=""><div class="p_list"><div class="empty-tip">${escapeHtml(ui('ui.culture.tag_load_failed'))}</div></div></div>`
return
}
}
if (!tags.length) {
loopRoot.innerHTML =
'<div class=""><div class="p_list"><div class="empty-tip">该分类下暂无内容,请在管理端添加文化标签</div></div></div>'
`<div class=""><div class="p_list"><div class="empty-tip">${escapeHtml(ui('ui.culture.no_tags'))}</div></div></div>`
return
}
const cards = tags
.map((t) => {
const href = `?page=culture&categoryId=${encodeURIComponent(activeId)}&cultureTagId=${encodeURIComponent(String(t.tagId))}`
return `<div class="cbox-29 p_loopitem"><div class="e_container-30 s_layout response-transition">
const detailCategoryId = t.categoryId != null && String(t.categoryId).trim() !== ''
? String(t.categoryId).trim()
: activeId
const href = detailCategoryId
? `?page=culture&categoryId=${encodeURIComponent(detailCategoryId)}&cultureTagId=${encodeURIComponent(String(t.tagId))}`
: `?page=culture&cultureTagId=${encodeURIComponent(String(t.tagId))}`
const title = escapeHtml(t.tagTitle)
const safeHref = escapeHtml(href)
return `<div class="cbox-29 p_loopitem hy-culture-card" data-href="${safeHref}" role="link" tabindex="0" aria-label="${title}"><div class="e_container-30 s_layout response-transition">
<div class="cbox-30-0 p_item"><div class="e_container-31 s_layout response-transition">
<div class="cbox-31-0 p_item"><p class="e_text-32 s_title response-transition">
<a href="${href}">${escapeHtml(t.tagTitle)}</a>
</p><p class="e_text-33 s_title response-transition"><a href="${href}"></a></p></div>
<a href="${safeHref}">${title}</a>
</p><p class="e_text-33 s_title response-transition"><a href="${safeHref}" aria-label="${title}"></a></p></div>
</div></div>
</div></div>`
})
.join('')
loopRoot.innerHTML = `<div class=""><div class="p_list">${cards}</div></div>`
bindCultureInternalLinks(loopRoot)
if (window.setupSwiperFallback && typeof window.setupSwiperFallback === 'function') {
nextTick(() => {
@@ -193,7 +300,7 @@ export async function injectCultureList(selectedCategoryId) {
})
}
document.title = `华阳文化 - 烟台华阳食品有限公司`
document.title = `${ui('common.title.culture_nav', '华阳文化')} - ${ui('common.title.site_name', '大连华阳食品有限公司')}`
}
/**
@@ -212,13 +319,15 @@ export async function injectCultureDetail(cultureTagId, categoryIdHint) {
tag = await fetchCultureTagDetailPublic(cultureTagId)
} catch {
loopRoot.innerHTML =
'<div class=""><div class="p_list"><div class="empty-tip">内容加载失败</div></div></div>'
`<div class=""><div class="p_list"><div class="empty-tip">${escapeHtml(ui('ui.culture.content_load_failed'))}</div></div></div>`
return
}
if (!tag) {
loopRoot.innerHTML =
'<div class=""><div class="p_list"><div class="empty-tip" style="text-align:center;padding:40px;">暂无该内容或已下架</div></div></div>'
`<div class=""><div class="p_list"><div class="empty-tip" style="text-align:center;padding:40px;">${escapeHtml(
ui('ui.culture.content_not_found')
)}</div></div></div>`
return
}
@@ -232,16 +341,19 @@ export async function injectCultureDetail(cultureTagId, categoryIdHint) {
loopRoot.innerHTML = `<div class=""><div class="p_list hy-culture-detail-root">
<div style="max-width:900px;margin:0 auto;padding:16px 12px 32px">
<p style="margin:0 0 16px"><a href="${listHref}" style="color:#c0392b;text-decoration:none;font-size:14px">返回文化列表</a></p>
<p style="margin:0 0 16px"><a href="${listHref}" style="color:#c0392b;text-decoration:none;font-size:14px">${escapeHtml(
ui('ui.culture.back_list')
)}</a></p>
<h1 style="font-size:24px;font-weight:600;color:#1a1a1a;margin:0 0 12px;text-align:center">${escapeHtml(tag.tagTitle)}</h1>
<p style="text-align:center;color:#888;font-size:13px;margin:0 0 20px">阅读量:${read}</p>
<p style="text-align:center;color:#888;font-size:13px;margin:0 0 20px">${escapeHtml(ui('ui.culture.read_count'))}:${read}</p>
${coverBlock}
<div class="hy-culture-rich" style="line-height:1.8;font-size:15px;color:#333">${tag.tagContent || ''}</div>
<div class="hy-culture-rich" style="line-height:1.8;font-size:15px;color:#333">${resolveRichImageHtml(tag.tagContent || '')}</div>
</div>
</div></div>`
bindCultureInternalLinks(loopRoot)
const plainTitle = String(tag.tagTitle || '').replace(/\s+/g, ' ').trim()
document.title = plainTitle
? `${plainTitle} - 华阳文化 - 烟台华阳食品有限公司`
: `华阳文化 - 烟台华阳食品有限公司`
const cultureTitle = ui('common.title.culture_nav', '华阳文化')
const siteTitle = ui('common.title.site_name', '大连华阳食品有限公司')
document.title = plainTitle ? `${plainTitle} - ${cultureTitle} - ${siteTitle}` : `${cultureTitle} - ${siteTitle}`
}
+23 -94
View File
@@ -1,7 +1,13 @@
/**
* 门户客户服务(若依公开接口)- 在线留言、招商加盟、联系信息
* 门户客户服务(若依公开接口)- 在线留言、联系信息
*/
import { nextTick } from 'vue'
import i18n from '../i18n'
function ui(key, fallback = '') {
const v = i18n.global.t(key)
return v && v !== key ? v : fallback
}
function escapeHtml(text) {
if (text == null || text === '') {
@@ -39,13 +45,19 @@ export async function fetchContactList() {
*/
export async function submitMessage(data) {
const base = (import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const res = await fetch(`${base}/message/submit`, {
const inquiryPayload = {
inquiryName: data?.messageName || '',
inquiryPhone: data?.messagePhone || '',
inquiryProduct: data?.messageEmail || '',
inquiryMessage: data?.messageContent || ''
}
const res = await fetch(`${base}/product/inquiry`, {
method: 'POST',
credentials: 'omit',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
body: JSON.stringify(inquiryPayload)
})
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
@@ -54,28 +66,12 @@ export async function submitMessage(data) {
}
/**
* 提交招商申请
* @param {Object} data { applyName, applyPhone, applyCompany, applyIntent, applyArea }
* @returns {Promise<Object>}
* 注入联系信息并初始化留言表单
*/
export async function submitJoinApply(data) {
const base = (import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const res = await fetch(`${base}/join/apply`, {
method: 'POST',
credentials: 'omit',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
return await res.json()
export async function injectContactAndInitForms() {
await injectContactInfo()
initMessageForm()
}
/**
* 将联系信息注入到页面
* 注入目标:联系我们页面的联系信息展示区域
*/
export async function injectContactInfo() {
@@ -141,20 +137,20 @@ export function initMessageForm() {
}
if (!data.messageName || !data.messagePhone || !data.messageContent) {
alert('请填写姓名、联系电话和留言内容')
alert(ui('ui.form.contact_required'))
return
}
try {
const result = await submitMessage(data)
if (result.code === 200) {
alert('留言提交成功,我们会尽快与您联系!')
alert(ui('ui.status.submit_ok_message'))
form.reset()
} else {
alert(result.msg || '提交失败,请稍后重试')
alert(result.msg || ui('ui.status.submit_fail_retry'))
}
} catch (error) {
alert('提交失败,请稍后重试')
alert(ui('ui.status.submit_fail_retry'))
}
}
@@ -163,64 +159,6 @@ export function initMessageForm() {
submitBtn?.addEventListener('click', submitHandler)
}
/**
* 初始化招商申请表单
* 给招商表单绑定提交事件
*/
export function initJoinForm() {
const form = resolveJoinForm()
if (!form) {
return
}
if (form.dataset.huayangBoundJoin === '1') {
return
}
form.dataset.huayangBoundJoin = '1'
const submitHandler = async (event) => {
event.preventDefault()
const data = {
applyName: pickFormValue(form, ['name', 'applyName'], ['姓名', '联系人']),
applyPhone: pickFormValue(form, ['phone', 'applyPhone'], ['电话', '手机', '联系方式']),
applyCompany: pickFormValue(form, ['company', 'applyCompany'], ['公司', '企业']),
applyIntent: pickFormValue(form, ['intent', 'applyIntent'], ['意向', '需求']),
applyArea: pickFormValue(form, ['area', 'applyArea'], ['区域', '地区'])
}
if (!data.applyName || !data.applyPhone) {
alert('请填写姓名和联系电话')
return
}
try {
const result = await submitJoinApply(data)
if (result.code === 200) {
alert('申请提交成功,我们的招商经理会尽快与您联系!')
form.reset()
} else {
alert(result.msg || '提交失败,请稍后重试')
}
} catch (error) {
alert('提交失败,请稍后重试')
}
}
form.addEventListener('submit', submitHandler)
const submitBtn = form.querySelector('.e_formBtn-16, .e_formBtn-96, .btn-primary')
submitBtn?.addEventListener('click', submitHandler)
}
/**
* 注入联系信息并初始化表单
* 页面初始化时调用
*/
export async function injectContactAndInitForms() {
await injectContactInfo()
initMessageForm()
initJoinForm()
}
function resolveMessageForm() {
const explicit = document.querySelector('.message-form, #messageForm')
if (explicit) return explicit
@@ -230,15 +168,6 @@ function resolveMessageForm() {
return document.querySelector('.e_form-10, form.e_form-10, form.e_form-94')
}
function resolveJoinForm() {
const explicit = document.querySelector('.join-form, #joinForm')
if (explicit) return explicit
const isJoinPage =
window.location.search.includes('page=join') || window.location.pathname.toLowerCase().includes('join')
if (!isJoinPage) return null
return document.querySelector('form.e_form-94, .e_form-94')
}
function pickFormValue(form, nameCandidates, placeholderCandidates) {
const byName = nameCandidates
.map((name) => form.querySelector(`[name="${name}"]`))
+437 -86
View File
@@ -1,24 +1,111 @@
/**
* 固定板块内容注入逻辑
/**
* 鍥哄畾鏉垮潡鍐呭娉ㄥ叆閫昏緫
*/
import { resolveImageUrl } from '../utils/asset'
import { remember } from '../utils/asyncCache'
import i18n from '../i18n'
import { currentLang, normalizeLangCode } from './language'
const API_BASE = import.meta.env.VITE_SITE_API_BASE || '/site'
const IMG_FALLBACK =
'data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA='
const SECTION4_CARD_KEYS = ['select', 'freeze', 'test', 'preserve', 'craft', 'deliver', 'restore']
const SECTION4_LEGACY_TITLE_PLACEHOLDERS = new Set(['华', '阳', '大', '连', '食', '品'])
const SECTION4_LEGACY_DESC_PLACEHOLDERS = new Set(['华阳', '大连', '食品'])
/** 首页竖滑「关于华阳」屏:Home_*.min.css 在此写死大楼背景,板块二背景图应对齐该节点 */
function trFixed(key, fallback = '') {
const hit = i18n.global.t(key)
if (hit && hit !== key) return String(hit)
// 瀵瑰姩鎬侀敭锛堝 home.section2.item.12.title锛夊仛璺緞鐩磋鍏滃簳锛? // 閬垮厤鏌愪簺璺緞瑙f瀽鍦烘櫙涓?i18n.t 杩斿洖 key 鏈韩
try {
const localeRef = i18n.global.locale
const locale =
localeRef && typeof localeRef === 'object' && 'value' in localeRef
? localeRef.value
: localeRef
const msg = i18n.global.getLocaleMessage(locale) || {}
const val = String(key || '')
.split('.')
.filter(Boolean)
.reduce((acc, part) => (acc && typeof acc === 'object' ? acc[part] : undefined), msg)
if (val !== undefined && val !== null && String(val) !== '') {
return String(val)
}
} catch (e) {
// ignore and fallback
}
return String(fallback || '')
}
function getCurrentLocale() {
const localeRef = i18n.global.locale
return localeRef && typeof localeRef === 'object' && 'value' in localeRef
? String(localeRef.value || '').toLowerCase()
: String(localeRef || '').toLowerCase()
}
function applyFixedSectionTranslations(code, data) {
if (!data || !Array.isArray(data.itemList)) return data
if (getCurrentLocale() === 'zh_cn') return data
const translated = {
...data,
itemList: data.itemList.map((item) => {
const id = item && item.itemId
const titleKey = `home.${code}.item.${id}.title`
const descKey = `home.${code}.item.${id}.desc`
return {
...item,
itemTitle: trFixed(titleKey, item.itemTitle || ''),
itemDesc: trFixed(descKey, item.itemDesc || '')
}
})
}
const mainTitleKey = `home.${code}.main.title`
const mainTextKey = `home.${code}.main.text`
translated.sectionName = trFixed(mainTitleKey, data.sectionName || '')
translated.sectionText = trFixed(mainTextKey, data.sectionText || '')
return translated
}
/** 棣栭〉绔栨粦銆屽叧浜庡崕闃炽€嶅睆锛欻ome_*.min.css 鍦ㄦ鍐欐澶фゼ鑳屾櫙锛屾澘鍧椾簩鑳屾櫙鍥惧簲瀵归綈璇ヨ妭鐐?*/
const SECTION2_ABOUT_SLIDE_IDS = [
'c_static_001_P_5212-1683353667670',
'c_static_001_P_5212-17155923594210'
]
const SECTION2_ABOUT_MARK = 'data-hy-section2-about'
function getSection2AboutSlide() {
return SECTION2_ABOUT_SLIDE_IDS.map((sid) => document.getElementById(sid)).find(Boolean)
function uniqueElements(elements) {
const seen = new Set()
return elements.filter((el) => {
if (!el || seen.has(el)) return false
seen.add(el)
return true
})
}
/** 管理端「标题」填 主数字|单位,如 1992|年、60000|㎡、10|+;无竖线则整段作为主数字 */
function isSection2AboutSlide(el) {
return !!(
el &&
el.querySelector?.('.e_text-60') &&
el.querySelector?.('.e_richText-67') &&
el.querySelector?.('.e_loop-39 .p_list')
)
}
function getSection2AboutSlides() {
const fromIds = SECTION2_ABOUT_SLIDE_IDS.map((sid) => document.getElementById(sid)).filter(Boolean)
const fromStats = Array.from(document.querySelectorAll('.e_loop-39 .p_list'))
.map((list) => list.closest('.swiper-slide') || list.closest('[id]'))
.filter(isSection2AboutSlide)
const slides = uniqueElements([...fromIds, ...fromStats]).filter(isSection2AboutSlide)
slides.forEach((slide) => slide.setAttribute(SECTION2_ABOUT_MARK, '1'))
return slides
}
/** 绠$悊绔€屾爣棰樸€嶅~ 涓绘暟瀛梶鍗曚綅锛屽 1992|骞淬€?0000|銕°€?0|+锛涙棤绔栫嚎鍒欐暣娈典綔涓轰富鏁板瓧 */
function splitSection2StatTitle(raw) {
const s = String(raw || '').trim()
const i = s.indexOf('|')
@@ -26,7 +113,7 @@ function splitSection2StatTitle(raw) {
return { num: s.slice(0, i).trim(), unit: s.slice(i + 1).trim() }
}
/** 「关于华阳」屏右侧四宫格:.e_loop-39 .p_list + .cbox-39.p_loopitem */
/** 銆屽叧浜庡崕闃炽€嶅睆鍙充晶鍥涘鏍硷細.e_loop-39 .p_list + .cbox-39.p_loopitem */
function injectSection2AboutStatGrid(listEl, templateEl, items) {
const clone = templateEl.cloneNode(true)
listEl.innerHTML = ''
@@ -50,15 +137,91 @@ function injectSection2AboutStatGrid(listEl, templateEl, items) {
})
}
function bindImageFallback(img, url) {
function applySection2AboutMainContent(slideEl, localizedData, code) {
if (!slideEl) return
const rich = slideEl.querySelector('.e_richText-67')
if (rich && localizedData.sectionText) rich.innerHTML = localizedData.sectionText
if (localizedData.sectionName) {
const titleLink = slideEl.querySelector('.e_text-60 a')
if (titleLink) titleLink.textContent = localizedData.sectionName
else {
const titleP = slideEl.querySelector('.e_text-60')
if (titleP) titleP.textContent = localizedData.sectionName
}
}
const moreText = trFixed(`home.${code}.more`, '')
if (moreText) {
const moreSpan = slideEl.querySelector('.e_button-62 span, .btn.btn-primary span')
if (moreSpan) {
moreSpan.textContent = moreText
const moreBtn = moreSpan.closest('.e_button-62, .btn.btn-primary')
if (moreBtn) moreBtn.style.display = ''
const link = moreSpan.closest('a')
if (link) {
link.style.display = ''
link.href = '?page=about'
link.target = '_self'
}
}
}
}
function injectSection2AboutStats(slideEl, items) {
if (!slideEl) return false
const statList = slideEl.querySelector('.e_loop-39 .p_list')
const statTpl =
statList &&
statList.querySelector('.cbox-39.p_loopitem, .p_loopitem')
if (statList && statTpl && items.length > 0) {
const statLoop = statList.closest('.e_loop-39')
if (statLoop) statLoop.style.display = ''
injectSection2AboutStatGrid(statList, statTpl, items)
return true
}
const statLoop = slideEl.querySelector('.e_loop-39')
if (statLoop && items.length === 0) statLoop.style.display = 'none'
return false
}
function bindImageFallback(img, url, fallbackUrl = '') {
if (!img || !url) return
const safeFallback = fallbackUrl && fallbackUrl !== url ? fallbackUrl : ''
img.src = url
img.removeAttribute('lazy')
img.removeAttribute('srcset')
img.removeAttribute('sizes')
img.onerror = () => {
img.onerror = null
img.src = IMG_FALLBACK
img.src = safeFallback || IMG_FALLBACK
}
}
function clearImageSource(img) {
if (!img) return
img.removeAttribute('src')
img.removeAttribute('lazy')
img.removeAttribute('srcset')
img.removeAttribute('sizes')
img.style.removeProperty('background-image')
}
function resetCardImages(node, { preserveExisting = false } = {}) {
if (!node) return
if (preserveExisting) {
node.querySelectorAll('img').forEach((img) => {
img.onerror = null
})
return
}
node.querySelectorAll('img').forEach((img) => {
clearImageSource(img)
img.onerror = null
})
node.querySelectorAll('[style*="background-image"]').forEach((el) => {
el.style.removeProperty('background-image')
})
}
function ensureCardImage(node, wrapperSelector, className) {
const wrap = node.querySelector(wrapperSelector)
if (!wrap) return null
@@ -77,35 +240,51 @@ function ensureCardImage(node, wrapperSelector, className) {
}
export async function fetchFixedSection(code) {
try {
const res = await fetch(`${API_BASE}/fixedSection/code/${code}`, { cache: 'no-store' })
if (!res.ok) {
console.error(`[fixedSection] HTTP ${res.status} for ${code}: ${API_BASE}/fixedSection/code/${code}`)
return null
}
const json = await res.json()
if (json.code !== 200) {
console.error(`[fixedSection] API code ${json.code} for ${code}:`, json.msg || json)
return null
}
return json.data || null
} catch (error) {
console.error(`Failed to fetch fixed section ${code}:`, error)
return null
}
const safeCode = String(code || '').trim()
if (!safeCode) return null
const lang = normalizeLangCode(
(currentLang && currentLang.value) ||
(typeof localStorage !== 'undefined' ? localStorage.getItem('huayang_lang') : '') ||
'zh_cn'
)
const url = `${API_BASE}/fixedSection/code/${encodeURIComponent(safeCode)}?${new URLSearchParams({
lang
}).toString()}`
return remember(
`fixed-section:${url}`,
async () => {
try {
const res = await fetch(url, { cache: 'no-store' })
if (!res.ok) {
console.error(`[fixedSection] HTTP ${res.status} for ${safeCode}: ${url}`)
return null
}
const json = await res.json()
if (json.code !== 200) {
console.error(`[fixedSection] API code ${json.code} for ${safeCode}:`, json.msg || json)
return null
}
return json.data || null
} catch (error) {
console.error(`Failed to fetch fixed section ${safeCode}:`, error)
return null
}
},
{ ttlMs: 15000, cacheEmpty: false }
)
}
/**
* 注入所有固定板块
*/
* 娉ㄥ叆鎵€鏈夊浐瀹氭澘鍧? */
export async function injectAllFixedSections() {
const codes = ['section1', 'section2', 'section3', 'section4', 'section5']
for (const code of codes) {
const data = await fetchFixedSection(code)
const sections = await Promise.all(codes.map((code) => fetchFixedSection(code)))
sections.forEach((data, index) => {
if (data) {
injectSection(code, data)
injectSection(codes[index], data)
}
}
})
}
function firstImageUrl(raw) {
@@ -114,7 +293,7 @@ function firstImageUrl(raw) {
return first || ''
}
/** 转义进 CSS url("...") / content: url(...) */
/** 杞箟杩?CSS url("...") / content: url(...) */
function escapeForCssString(u) {
return String(u || '')
.replace(/\\/g, '\\\\')
@@ -123,10 +302,11 @@ function escapeForCssString(u) {
}
/**
* 板块二背景:建站器 Home_*.min.css 对竖滑屏 #id 写死 background-image,需用 style 标签 + !important 覆盖
* 鏉垮潡浜岃儗鏅細寤虹珯鍣?Home_*.min.css 瀵圭珫婊戝睆 #id 鍐欐 background-image锛岄渶鐢?style 鏍囩 + !important 瑕嗙洊
*/
function applySection2BackgroundOverride(slideEl, resolvedUrl) {
if (!resolvedUrl || !slideEl) return
slideEl.setAttribute(SECTION2_ABOUT_MARK, '1')
const safe = escapeForCssString(resolvedUrl)
const id = 'huayang-section2-bg-override'
let tag = document.getElementById(id)
@@ -135,9 +315,7 @@ function applySection2BackgroundOverride(slideEl, resolvedUrl) {
tag.id = id
document.head.appendChild(tag)
}
const slideId = slideEl.id
const head =
slideId && /^[a-zA-Z0-9_-]+$/.test(slideId) ? `#${slideId}` : '[data-section="section2"]'
const head = `[${SECTION2_ABOUT_MARK}="1"]`
tag.textContent = `
${head} {
background: linear-gradient(rgba(255,255,255,0.82), rgba(255,255,255,0.82)), url("${safe}") center / cover no-repeat !important;
@@ -160,7 +338,72 @@ ${head} .e_container-51 {
slideEl.setAttribute('data-hy-bg-applied', '1')
}
/** 首页「华阳七道鲜」竖滑屏(建站器 id 前缀固定,后缀随导出变化) */
export function clearHomeAboutArchiveFallback() {
const slides = getSection2AboutSlides()
if (!slides.length) return
slides.forEach((slide) => slide.setAttribute('data-hy-about-archive-cleared', '1'))
const head = `[${SECTION2_ABOUT_MARK}="1"]`
const id = 'huayang-section2-bg-override'
let tag = document.getElementById(id)
if (!tag) {
tag = document.createElement('style')
tag.id = id
document.head.appendChild(tag)
}
tag.textContent = `
${head} {
background: #fff !important;
background-image: none !important;
background-repeat: no-repeat !important;
}
${head}::before,
${head}::after,
${head} .e_container-18,
${head} .e_container-51 {
background: transparent !important;
background-image: none !important;
}
`
slides.forEach((slide) => slide.removeAttribute('data-hy-bg-applied'))
slides.forEach((slide) => {
const titleEl = slide.querySelector('.e_text-60 a') || slide.querySelector('.e_text-60')
if (titleEl) titleEl.textContent = ''
const rich = slide.querySelector('.e_richText-67')
if (rich) rich.innerHTML = ''
const moreBtn = slide.querySelector('.e_button-62, .btn.btn-primary')
if (moreBtn) moreBtn.style.display = 'none'
const moreLink = moreBtn?.closest?.('a')
if (moreLink) moreLink.style.display = 'none'
const statLoop = slide.querySelector('.e_loop-39')
if (statLoop) statLoop.style.display = 'none'
slide.querySelectorAll('.e_loop-39 .p_loopitem').forEach((card) => {
const num = card.querySelector('.p_num')
if (num) {
num.textContent = ''
num.removeAttribute('data-num')
}
const plus = card.querySelector('.p_plus')
if (plus) plus.textContent = ''
const label = card.querySelector('.e_text-41')
if (label) label.textContent = ''
card.querySelectorAll('img').forEach((img) => {
clearImageSource(img)
img.onerror = null
})
card.querySelectorAll('[style*="background"]').forEach((el) => {
el.style.removeProperty('background')
el.style.removeProperty('background-image')
})
})
})
}
/** 棣栭〉銆屽崕闃充竷閬撻矞銆嶇珫婊戝睆锛堝缓绔欏櫒 id 鍓嶇紑鍥哄畾锛屽悗缂€闅忓鍑哄彉鍖栵級 */
function getSection4SevenFreshSlide() {
const fromIndustry = document.querySelector('.industry-list')
if (fromIndustry) {
@@ -175,7 +418,7 @@ function getSection4SevenFreshSlide() {
}
/**
* 板块四(华阳七道鲜)整屏背景:覆盖 Home_*.min.css 中写死的 background-image
* 鏉垮潡鍥涳紙鍗庨槼涓冮亾椴滐級鏁村睆鑳屾櫙锛氳鐩?Home_*.min.css 涓啓姝荤殑 background-image
*/
function applySection4SevenFreshBackground(slideEl, resolvedUrl) {
if (!resolvedUrl || !slideEl) return
@@ -201,32 +444,58 @@ ${head} {
slideEl.setAttribute('data-hy-section4-bg', '1')
}
/** 七道鲜横向卡片:主背景图、小图标、大字、说明 */
/** 涓冮亾椴滄í鍚戝崱鐗囷細涓昏儗鏅浘銆佸皬鍥炬爣銆佸ぇ瀛椼€佽鏄?*/
function normalizeSevenFreshTitle(raw) {
const title = String(raw || '').trim()
if (!title) return ''
const parts = title.split(/[::]/)
const normalized = (parts[parts.length - 1] || title).trim()
const cultureTitle = trFixed('home.section4.main.title', '') || trFixed('common.title.culture_nav', '')
if (!cultureTitle) return ''
if (/七道鲜/i.test(normalized)) return cultureTitle
if ([cultureTitle, '华阳文化', 'Culture', '企業文化'].includes(normalized)) return cultureTitle
return ''
}
function shouldInjectSevenFreshItems(_data, items, listContainer) {
return !!listContainer && Array.isArray(items) && items.length > 0
}
function injectSevenFreshIndustryList(listContainer, items) {
const template = listContainer.querySelector('.p_loopitem1, .p_loopitem')
if (!template || !items.length) return
const clone = template.cloneNode(true)
const templates = Array.from(listContainer.querySelectorAll('.p_loopitem1, .p_loopitem'))
const fallbackTemplate = template.cloneNode(true)
listContainer.setAttribute('data-hy-fixed-section', 'section4')
listContainer.innerHTML = ''
items.forEach((item) => {
const node = clone.cloneNode(true)
const sourceTemplate = templates[listContainer.children.length] || fallbackTemplate
const node = sourceTemplate.cloneNode(true)
node.classList.remove('swiper-slide-duplicate', 'swiper-slide-active', 'swiper-slide-next', 'now', 'sible')
resetCardImages(node, { preserveExisting: true })
const primary = node.querySelector('.e_text-9')
if (primary) primary.textContent = item.itemTitle || ''
if (primary) primary.textContent = ''
const sub = node.querySelector('.e_text-10')
if (sub) sub.textContent = item.itemDesc || ''
if (sub) sub.textContent = ''
const mainImg =
ensureCardImage(node, '.e_image-6', '') ||
node.querySelector('.e_image-6 img') ||
node.querySelector('img')
const imgUrl = firstImageUrl(item.itemImage)
if (mainImg && imgUrl) bindImageFallback(mainImg, resolveImageUrl(imgUrl))
if (mainImg) {
if (imgUrl) bindImageFallback(mainImg, resolveImageUrl(imgUrl))
else clearImageSource(mainImg)
}
const iconImg = ensureCardImage(node, '.e_image-17', '') || node.querySelector('.e_image-17 img')
const iconUrl = firstImageUrl(item.itemIcon)
if (iconImg && iconUrl) bindImageFallback(iconImg, resolveImageUrl(iconUrl))
if (iconImg) {
if (iconUrl) bindImageFallback(iconImg, resolveImageUrl(iconUrl))
else clearImageSource(iconImg)
}
if (item.itemLink) {
node.querySelectorAll('a').forEach((link) => {
@@ -238,47 +507,125 @@ function injectSevenFreshIndustryList(listContainer, items) {
})
}
function looksLikeSection4TitlePlaceholder(title, desc) {
if (!title) return true
if (title === desc) return true
if (/^\d+$/.test(title)) return true
return SECTION4_LEGACY_TITLE_PLACEHOLDERS.has(title)
}
function looksLikeSection4DescPlaceholder(title, desc) {
if (!desc) return true
if (title === desc) return true
if (/^\d+$/.test(desc)) return true
return SECTION4_LEGACY_DESC_PLACEHOLDERS.has(desc)
}
function localizeSevenFreshItemsByOrder(items) {
const isDefaultLocale = getCurrentLocale() === 'zh_cn'
return items.map((item, index) => {
const key = SECTION4_CARD_KEYS[index]
if (!key) return item
if (!isDefaultLocale) {
return {
...item,
itemTitle: trFixed(`home.section4.cards.${key}.badge`, item.itemTitle || ''),
itemDesc: trFixed(`home.section4.cards.${key}.desc`, item.itemDesc || '')
}
}
const title = String(item?.itemTitle || '').trim()
const desc = String(item?.itemDesc || '').trim()
return {
...item,
itemTitle: looksLikeSection4TitlePlaceholder(title, desc)
? trFixed(`home.section4.cards.${key}.badge`, item.itemTitle || '')
: item.itemTitle,
itemDesc: looksLikeSection4DescPlaceholder(title, desc)
? trFixed(`home.section4.cards.${key}.desc`, item.itemDesc || '')
: item.itemDesc
}
})
}
function injectSection(code, data) {
const items = (data.itemList || [])
const localizedData = applyFixedSectionTranslations(code, data)
let items = (localizedData.itemList || [])
.slice()
.sort((a, b) => Number(a.sortOrder ?? 0) - Number(b.sortOrder ?? 0))
if (code === 'section4') {
items = localizeSevenFreshItemsByOrder(items)
}
// 板块四 → 首页「华阳七道鲜」整屏 + .industry-list(不依赖 data-section 占位)
if (code === 'section4') {
const sevenSlide = getSection4SevenFreshSlide()
if (sevenSlide) {
const bgOne = firstImageUrl(data.backgroundImage)
const bgOne = firstImageUrl(localizedData.backgroundImage)
if (bgOne) {
const u = resolveImageUrl(bgOne)
if (u) applySection4SevenFreshBackground(sevenSlide, u)
}
if (data.sectionName) {
const sevenFreshTitle =
trFixed('home.section4.main.title', '') || normalizeSevenFreshTitle(localizedData.sectionName)
if (sevenFreshTitle) {
const titleLink = sevenSlide.querySelector('.e_text-28 a')
const titleBlock = sevenSlide.querySelector('.e_text-28')
if (titleLink) titleLink.textContent = data.sectionName
else if (titleBlock) titleBlock.textContent = data.sectionName
if (titleLink) titleLink.textContent = sevenFreshTitle
else if (titleBlock) titleBlock.textContent = sevenFreshTitle
}
const moreText = trFixed(`home.${code}.more`, '')
if (moreText) {
const moreSpan = sevenSlide.querySelector('.e_button-29 span, .btn.btn-primary span')
if (moreSpan) {
moreSpan.textContent = moreText
const link = moreSpan.closest('a')
if (link) {
link.href = '?page=culture'
link.target = '_self'
}
}
}
const list = sevenSlide.querySelector('.industry-list')
if (list && items.length > 0) {
if (list && shouldInjectSevenFreshItems(localizedData, items, list)) {
injectSevenFreshIndustryList(list, items)
}
return
}
}
// 根据不同的 code 查找对应的 DOM 容器(板块二:矩阵在 data-section 屏;背景与「关于华阳」正文在主屏 5212)
const container = document.querySelector(`[data-section="${code}"]`) || document.getElementById(code)
const section2About = code === 'section2' ? getSection2AboutSlide() : null
const section2AboutSlides = code === 'section2' ? getSection2AboutSlides() : []
const section2About =
section2AboutSlides.find((slide) => slide.classList.contains('swiper-slide-active')) ||
section2AboutSlides.find((slide) => !slide.classList.contains('swiper-slide-duplicate')) ||
section2AboutSlides[0] ||
null
const container =
code === 'section2'
? section2About
: document.querySelector(`[data-section="${code}"]`) || document.getElementById(code)
// 1. 设置背景图(管理端组件曾允许多图逗号拼接,前台只展示第一张)
const bgRaw = data.backgroundImage
// 1. 璁剧疆鑳屾櫙鍥撅紙绠$悊绔粍浠舵浘鍏佽澶氬浘閫楀彿鎷兼帴锛屽墠鍙板彧灞曠ず绗竴寮狅級
const bgRaw = localizedData.backgroundImage
const bgOne = firstImageUrl(bgRaw)
if (code === 'section2' && section2About) {
const hasBackendAboutData =
!!bgOne ||
!!String(localizedData.sectionName || '').trim() ||
!!String(localizedData.sectionText || '').trim() ||
items.length > 0
if (!hasBackendAboutData) {
clearHomeAboutArchiveFallback()
return
}
section2AboutSlides.forEach((slide) => slide.removeAttribute('data-hy-about-archive-cleared'))
}
if (bgOne) {
const u = resolveImageUrl(bgOne)
if (u) {
if (code === 'section2') {
if (section2About) {
applySection2BackgroundOverride(section2About, u)
if (section2AboutSlides.length > 0) {
section2AboutSlides.forEach((slide) => applySection2BackgroundOverride(slide, u))
} else if (container) {
applySection2BackgroundOverride(container, u)
}
@@ -291,40 +638,41 @@ function injectSection(code, data) {
}
}
// 2. 描述文字 / 标题(板块二:写入 5212「关于华阳」屏;其它板块仍写回 data-section 容器)
if (code === 'section2' && section2About) {
const rich = section2About.querySelector('.e_richText-67')
if (rich && data.sectionText) rich.innerHTML = data.sectionText
if (data.sectionName) {
const titleLink = section2About.querySelector('.e_text-60 a')
if (titleLink) titleLink.textContent = data.sectionName
else {
const titleP = section2About.querySelector('.e_text-60')
if (titleP) titleP.textContent = data.sectionName
}
}
section2AboutSlides.forEach((slide) => applySection2AboutMainContent(slide, localizedData, code))
} else if (container) {
if (localizedData.sectionName) {
const titleLink =
container.querySelector('.s_title a, .e_text-18 a, .e_text-31 a') ||
container.querySelector('.s_title, .e_text-18, .e_text-31')
if (titleLink) titleLink.textContent = localizedData.sectionName
}
const textEl = container.querySelector('.section-text') || container.querySelector('.e_richText')
if (textEl && data.sectionText) textEl.innerHTML = data.sectionText
if (textEl && localizedData.sectionText) textEl.innerHTML = localizedData.sectionText
const moreText = trFixed(`home.${code}.more`, '')
if (moreText) {
const moreSpan = container.querySelector('.btn.btn-primary span, .s_button5 span')
if (moreSpan) moreSpan.textContent = moreText
}
}
// 板块二:子项优先写入「关于华阳」屏四宫格(e_loop-39);存在该结构时不再写 33409 industry-list
// 鏉垮潡浜岋細瀛愰」浼樺厛鍐欏叆銆屽叧浜庡崕闃炽€嶅睆鍥涘鏍硷紙e_loop-39锛夛紱瀛樺湪璇ョ粨鏋勬椂涓嶅啀鍐?33409 industry-list
if (code === 'section2' && section2About && items.length > 0) {
const statList = section2About.querySelector('.e_loop-39 .p_list')
const statTpl =
statList &&
statList.querySelector('.cbox-39.p_loopitem, .p_loopitem')
if (statList && statTpl) {
injectSection2AboutStatGrid(statList, statTpl, items)
const injected = section2AboutSlides
.map((slide) => injectSection2AboutStats(slide, items))
.some(Boolean)
if (injected) {
return
}
} else if (code === 'section2' && section2About) {
section2AboutSlides.forEach((slide) => injectSection2AboutStats(slide, items))
}
if (!container) return
if (items.length === 0) return
// 3. 处理项 (轮播/矩阵/卡片)
// 查找列表容器:首页「华阳七道鲜」矩阵为 .industry-list
// 3. 澶勭悊椤?(杞挱/鐭╅樀/鍗$墖)
// 鏌ユ壘鍒楄〃瀹瑰櫒锛氶椤点€屽崕闃充竷閬撻矞銆嶇煩闃典负 .industry-list
const listContainer =
container.querySelector('.swiper-wrapper, .item-list, .matrix-container') ||
(code === 'section2' ? container.querySelector('.industry-list') : null)
@@ -338,8 +686,9 @@ function injectSection(code, data) {
items.forEach(item => {
const node = clone.cloneNode(true)
node.classList.remove('swiper-slide-duplicate', 'swiper-slide-active', 'swiper-slide-next')
resetCardImages(node)
// 设置标题
// 璁剧疆鏍囬
const title =
node.querySelector('.item-title, .e_text-10, .p_btitle') ||
node.querySelector('.item-title, .e_text, .p_btitle')
@@ -350,16 +699,18 @@ function injectSection(code, data) {
badge.textContent = String(item.itemTitle).slice(0, 1)
}
// 设置图片(矩阵区块大图优先 .e_image-6)
const mainImg = node.querySelector('.e_image-6 img') || node.querySelector('img')
const imgUrl = firstImageUrl(item.itemImage)
if (mainImg && imgUrl) bindImageFallback(mainImg, resolveImageUrl(imgUrl))
if (mainImg) {
if (imgUrl) bindImageFallback(mainImg, resolveImageUrl(imgUrl))
else clearImageSource(mainImg)
}
// 设置描述
// 璁剧疆鎻忚堪
const desc = node.querySelector('.item-desc, .e_summary, .e_text-11')
if (desc) desc.textContent = item.itemDesc || ''
// 设置链接
// 璁剧疆閾炬帴
const links = node.querySelectorAll('a')
if (item.itemLink) {
links.forEach((link) => {
@@ -370,7 +721,7 @@ function injectSection(code, data) {
listContainer.appendChild(node)
})
// 如果是轮播图,重新初始化
// 濡傛灉鏄疆鎾浘锛岄噸鏂板垵濮嬪寲
if (listContainer.classList.contains('swiper-wrapper') && window.initSwiper) {
window.initSwiper()
}
+100 -237
View File
@@ -1,10 +1,18 @@
import { resolveImageUrl } from '../utils/asset'
import { fetchFixedSection, injectAllFixedSections } from './fixedSection'
import { applyImageLoadPriority } from '../utils/imageLoading'
import { remember } from '../utils/asyncCache'
import { clearHomeAboutArchiveFallback, fetchFixedSection, injectAllFixedSections } from './fixedSection'
import { fetchProductPublic } from './product'
import { currentLang } from './language'
import i18n from '../i18n'
const API_BASE = import.meta.env.VITE_SITE_API_BASE || '/site'
function ui(key, fallback = '') {
const v = i18n.global.t(key)
return v && v !== key ? v : fallback
}
function homePublicUrl() {
const lang = (currentLang && currentLang.value) || localStorage.getItem('huayang_lang') || 'zh_cn'
const q = new URLSearchParams({ lang: String(lang) })
@@ -36,8 +44,9 @@ function firstProductImageUrl(raw) {
return parts.length ? resolveImageUrl(parts[0]) : ''
}
function bindImageWithFallback(img, candidates) {
function bindImageWithFallback(img, candidates, { priority = 'lazy' } = {}) {
if (!img || !Array.isArray(candidates) || candidates.length === 0) return
applyImageLoadPriority(img, priority === 'high' ? 'high' : 'lazy')
let cursor = 0
img.src = candidates[cursor]
img.onerror = () => {
@@ -50,6 +59,12 @@ function bindImageWithFallback(img, candidates) {
}
}
/** 首页 API 预取:与 v-html 渲染并行,缩短注入等待 */
export function warmupHomePageData() {
const codes = ['section1', 'section2', 'section3', 'section4', 'section5']
return Promise.all([fetchHomeDataPublic(), ...codes.map((code) => fetchFixedSection(code))])
}
function ensureHomePrivacySkeletonStyle() {
const styleId = 'hy-home-privacy-skeleton-style'
if (document.getElementById(styleId)) return
@@ -83,6 +98,11 @@ function ensureHomePrivacySkeletonStyle() {
function applyPrivacySkeletonFallback() {
ensureHomePrivacySkeletonStyle()
clearHomeAboutArchiveFallback()
if (document.querySelector('[data-hy-about-archive-cleared="1"]')) {
hideHomeNewsSections()
return
}
// 关于模块正文(原静态文案)统一替换为骨架,避免暴露旧站文本
const aboutRichText = document.querySelector('.e_richText-67')
@@ -105,7 +125,7 @@ function applyPrivacySkeletonFallback() {
if (plusEl) plusEl.textContent = ''
const titleEl = card.querySelector('.e_text-41')
if (titleEl) {
titleEl.textContent = '内容建设中'
titleEl.textContent = ui('ui.loading.building')
titleEl.classList.add('hy-privacy-mask-text')
}
const imgWrap = card.querySelector('.e_image-42')
@@ -114,114 +134,41 @@ function applyPrivacySkeletonFallback() {
}
})
// 新闻区:不在此处改写 DOM。原逻辑用骨架覆盖 .p_loopitem 会破坏建站器结构,
// 导致后续即使 /site/news/homeRecommend 有数据,克隆模板也无法写入标题/封面(仍显示「内容建设中」)。
// 无数据时的占位在 injectHomeContent 末尾统一处理。
// 七道鲜矩阵(section4)由 fixedSection 独立注入,fallback 阶段不要改写其图片 DOM,
// 否则后续 clone 模板时会继承骨架占位,导致图片无法恢复。
const industryCards = document.querySelectorAll('.industry-list .p_loopitem1, .industry-list .p_loopitem')
industryCards.forEach((card) => {
const titleEl = card.querySelector('.e_text-9')
if (titleEl) {
titleEl.textContent = '—'
titleEl.classList.add('hy-privacy-mask-text')
}
const descEl = card.querySelector('.e_text-10')
if (descEl) {
descEl.textContent = '内容建设中'
descEl.classList.add('hy-privacy-mask-text')
}
card.querySelectorAll('a').forEach((link) => {
link.removeAttribute('href')
link.setAttribute('aria-disabled', 'true')
link.style.pointerEvents = 'none'
})
})
hideHomeNewsSections()
// 通用兜底:任何残留的旧站图片链接全部替换为空白占位,防止漏网
document.querySelectorAll('img').forEach((img) => {
const src = String(img.getAttribute('src') || img.src || '')
if (src.includes('烟台华阳食品有限公司') || src.includes('haihofoods.com')) {
if (src.includes('烟台华阳食品有限公司') || src.includes('大连华阳食品有限公司') || src.includes('haihofoods.com')) {
img.setAttribute(
'src',
'data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA='
)
img.setAttribute('alt', '内容建设中')
img.setAttribute('alt', ui('ui.loading.building'))
}
})
}
export async function fetchHomeDataPublic() {
try {
const res = await fetch(homePublicUrl(), { cache: 'no-store' })
if (!res.ok) return null
const json = await res.json()
if (json.code === 200 && json.data) {
return json.data
}
return null
} catch (error) {
console.error('Failed to fetch home data:', error)
return null
}
}
/** 首页推荐新闻(与 /site/home/public 中 news 同源;用于聚合接口失败或 news 为空时兜底) */
export async function fetchHomeRecommendNewsPublic(limit = 3) {
try {
const base = API_BASE.replace(/\/$/, '')
const q = new URLSearchParams({ limit: String(limit) })
const res = await fetch(`${base}/news/homeRecommend?${q.toString()}`, {
credentials: 'omit',
cache: 'no-store',
})
if (!res.ok) return []
const json = await res.json()
if (json.code !== 200) return []
const payload = json.data
if (Array.isArray(payload)) return payload
if (payload && typeof payload === 'object' && Array.isArray(payload.rows)) return payload.rows
return []
} catch (e) {
console.warn('[fetchHomeRecommendNewsPublic] failed:', e)
return []
}
}
function buildHomeNewsArchiveLoopItemHtml(news) {
const nid = Number(news?.newsId)
const href = Number.isFinite(nid) && nid > 0 ? `?page=news&newsId=${nid}` : '?page=news'
const title = escapeHtml(news?.newsTitle || '')
const rawCover = news?.newsCover ? String(news.newsCover).trim() : ''
const cover = rawCover ? resolveImageUrl(rawCover) : '/images/no-news.png'
let dateStr = ''
if (news?.publishTime) {
const d = new Date(news.publishTime)
if (!Number.isNaN(d.getTime())) {
dateStr = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`
}
}
const safeCover = escapeHtml(cover)
const safeHref = escapeHtml(href)
const safeDate = escapeHtml(dateStr)
return `<div class="cbox-6 p_loopitem"><div class="e_container-7 s_layout">
<div class="cbox-7-0 p_item"><div class="e_image-8 s_img">
<img src="${safeCover}" alt="${title}" loading="lazy" />
</div><h3 class="e_h3-9 s_summary">
<a href="${safeHref}" target="_self">${title}</a>
</h3><p class="e_text-10 s_title">
<a href="${safeHref}" target="_self"></a>
</p><p class="e_timeFormat-11 s_title">${safeDate}</p></div>
</div></div>`
}
function homeNewsPrivacySkeletonInnerHtml() {
return `
<div class="p_loopitem"><p class="hy-privacy-mask-text">内容建设中</p><div class="hy-privacy-skeleton-line" style="width: 92%"></div></div>
<div class="p_loopitem"><p class="hy-privacy-mask-text">内容建设中</p><div class="hy-privacy-skeleton-line" style="width: 88%"></div></div>
<div class="p_loopitem"><p class="hy-privacy-mask-text">内容建设中</p><div class="hy-privacy-skeleton-line" style="width: 84%"></div></div>
`
const url = homePublicUrl()
return remember(
`home-public:${url}`,
async () => {
try {
const res = await fetch(url, { cache: 'no-store' })
if (!res.ok) return null
const json = await res.json()
if (json.code === 200 && json.data) {
return json.data
}
return null
} catch (error) {
console.error('Failed to fetch home data:', error)
return null
}
},
{ ttlMs: 15000, cacheEmpty: false }
)
}
function buildHomeProductCardHtml(product, iconChat, iconLink, contactHref) {
@@ -235,88 +182,21 @@ function buildHomeProductCardHtml(product, iconChat, iconLink, contactHref) {
${imgHtml}
<p class="home-product-card__title"><a href="${detailHref}">${name}</a></p>
<div class="home-product-card__actions">
<a class="home-product-card__btn home-product-card__btn--chat" href="${contactHref}" aria-label="在线咨询">${iconChat}</a>
<a class="home-product-card__btn home-product-card__btn--detail" href="${detailHref}" aria-label="产品详情">${iconLink}</a>
<a class="home-product-card__btn home-product-card__btn--chat" href="${contactHref}" aria-label="${escapeHtml(ui('ui.product.actions.contact'))}">${iconChat}</a>
<a class="home-product-card__btn home-product-card__btn--detail" href="${detailHref}" aria-label="${escapeHtml(ui('ui.product.actions.detail'))}">${iconLink}</a>
</div>
</article>`
}
function escapeForCssString(u) {
return String(u || '')
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\n/g, '')
function hideHomeNewsSections() {
document.querySelectorAll('.home-news-container, #c_static_001-17153293778700').forEach((el) => {
el.style.display = 'none'
el.setAttribute('aria-hidden', 'true')
})
}
function applyHomeNewsBackgroundOverride(resolvedUrl) {
if (!resolvedUrl) return
let slideEl = document.getElementById('c_static_001-17153293778700')
if (!slideEl) {
// 兼容建站器导出 id 变化:从“华阳新闻”标题定位所在整屏 swiper-slide
const link = Array.from(document.querySelectorAll('a')).find((a) => (a.textContent || '').trim() === '华阳新闻')
slideEl =
link?.closest('.swiper-slide') ||
link?.closest('[id^="c_static_001"]') ||
null
}
if (!slideEl) return
const safe = escapeForCssString(resolvedUrl)
const id = 'huayang-home-news-bg-override'
let tag = document.getElementById(id)
if (!tag) {
tag = document.createElement('style')
tag.id = id
document.head.appendChild(tag)
}
const selector =
slideEl.id && /^[a-zA-Z0-9_-]+$/.test(slideEl.id) ? `#${slideEl.id}` : null
if (selector) {
tag.textContent = `
${selector} {
background-image: url("${safe}") !important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: cover !important;
}
`
} else {
// 没有可用 id 时,走内联兜底(仍可能被 !important 覆盖,但优于无效)
slideEl.style.backgroundImage = `url("${safe}")`
slideEl.style.backgroundRepeat = 'no-repeat'
slideEl.style.backgroundPosition = 'center'
slideEl.style.backgroundSize = 'cover'
}
slideEl.setAttribute('data-hy-home-news-bg', '1')
}
async function tryApplyHomeNewsBackgroundOverride() {
const base = (import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
let res
try {
res = await fetch(`${base}/fixedSection/code/news_banner`, { credentials: 'omit', cache: 'no-store' })
} catch {
return
}
if (!res.ok) return
let body
try {
body = await res.json()
} catch {
return
}
if (body?.code !== 200 || !body?.data) return
const section = body.data
const items = Array.isArray(section?.itemList) ? section.itemList : []
const bgItem = items.find((it) => it && it.itemType === 'home_news_bg' && it.itemImage)
if (!bgItem?.itemImage) return
const raw = String(bgItem.itemImage)
const first = raw.split(',').map((s) => s.trim()).filter(Boolean)[0] || ''
const u = first ? resolveImageUrl(first) : ''
if (!u) return
applyHomeNewsBackgroundOverride(u)
}
export async function injectHomeContent() {
export async function injectHomeContent(options = {}) {
const injectFixedSections = options.injectFixedSections !== false
const data = await fetchHomeDataPublic()
let productFallbackList = []
if (!data) {
@@ -329,8 +209,6 @@ export async function injectHomeContent() {
console.warn('[injectHomeContent] product/public fallback failed:', error)
productFallbackList = []
}
} else {
console.log('Home data fetched:', data)
}
try {
@@ -399,7 +277,7 @@ export async function injectHomeContent() {
const img = slide.querySelector('img')
if (img) {
bindImageWithFallback(img, [imageUrl])
bindImageWithFallback(img, [imageUrl], { priority: slideIndex === 0 ? 'high' : 'lazy' })
img.alt = banner.bannerTitle || ''
}
@@ -419,12 +297,14 @@ export async function injectHomeContent() {
}
})
if (window.setupSwiperFallback) window.setupSwiperFallback()
if (typeof window.setupSwiperFallback === 'function') {
await window.setupSwiperFallback({ heroOnly: true })
}
// 触发自定义轮播重新初始化(如果脚本已加载)
if (window.initCustomCarousels) window.initCustomCarousels()
}
// 1.1 首屏轮播区背景(仅第一屏 #c_banner_019_*,勿写到「关于华阳」「华阳七道鲜」等内页屏,否则会盖住模块二背景)
// 1.1 首屏竖滑第一屏背景(#c_banner_019_* 整屏铺图;与轮播内 img 不同层,不可删)
if (effectiveBanners.length > 0) {
const banner = effectiveBanners[0]
const heroRoot =
@@ -435,6 +315,7 @@ export async function injectHomeContent() {
heroRoot.style.backgroundImage = `url(${imgUrl})`
heroRoot.style.backgroundSize = 'cover'
heroRoot.style.backgroundPosition = 'center'
heroRoot.style.backgroundRepeat = 'no-repeat'
}
}
@@ -451,7 +332,10 @@ export async function injectHomeContent() {
const descEl = item.querySelector('.e_text-41')
if (descEl) descEl.textContent = feature.featureDesc
const imgEl = item.querySelector('.e_image-42 img')
if (imgEl) imgEl.src = resolveImageUrl(feature.featureIcon)
if (imgEl) {
applyImageLoadPriority(imgEl, 'lazy')
imgEl.src = resolveImageUrl(feature.featureIcon)
}
featureListContainer.appendChild(item)
})
}
@@ -460,11 +344,13 @@ export async function injectHomeContent() {
const products = Array.isArray(data?.products) && data.products.length > 0 ? data.products : productFallbackList
const productGridHost = document.querySelector('#home-product-grid')
// 归档静态产品列表(e_loop-20)始终隐藏,避免后端不可用时显示旧站内容
const legacyProductSection = document.querySelector('#c_static_001-1679768653128 .e_loop-20')
if (legacyProductSection) {
legacyProductSection.style.display = 'none'
legacyProductSection.setAttribute('aria-hidden', 'true')
}
document
.querySelectorAll(
'#c_static_001-1679768653128 .e_loop-20, .home-product-grid-wrap + .e_loop-20, .home-product-grid-wrap ~ .e_loop-20'
)
.forEach((el) => {
el.remove()
})
const contactHref = '?page=contact#c_static_001-1669701780184'
const iconChat =
'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm-2 12H6v-2h12v2zm0-3H6V9h12v2zm0-3H6V6h12v2z"/></svg>'
@@ -485,65 +371,42 @@ export async function injectHomeContent() {
</div>
</div>`
} else {
productGridHost.innerHTML = '<p class="home-product-grid__empty">暂无推荐产品</p>'
productGridHost.innerHTML = `<p class="home-product-grid__empty">${escapeHtml(ui('ui.empty.recommend_products'))}</p>`
}
}
// 4. 新闻注入 — 仅显示「首页推荐」新闻;首页模板为 e_loop-6(非 e_loop-16),需同时匹配
let newsList = (data?.news || []).slice(0, 3)
if (newsList.length === 0) {
newsList = await fetchHomeRecommendNewsPublic(3)
}
const newsContainer = document.querySelector(
'.home-news-container .p_list, .e_loop-6 .p_list, .e_loop-16 .p_list'
)
if (newsContainer && newsList.length > 0) {
const template = newsContainer.querySelector('.p_loopitem')
const templateOk = !!(template && template.querySelector('h3.e_h3-9, .e_h3-9'))
if (templateOk) {
const itemTemplate = template.cloneNode(true)
newsContainer.innerHTML = ''
newsList.forEach((news) => {
const item = itemTemplate.cloneNode(true)
const titleEl = item.querySelector('.e_text-41, .news-title, h3.e_h3-9, .e_h3-9')
if (titleEl) titleEl.textContent = news.newsTitle
const timeEl = item.querySelector('.e_timeFormat-11, p.e_timeFormat-11')
if (timeEl && news.publishTime) {
const d = new Date(news.publishTime)
if (!Number.isNaN(d.getTime())) {
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
const day = String(d.getDate()).padStart(2, '0')
timeEl.textContent = `${y}-${m}-${day}`
}
}
const imgEl = item.querySelector('img')
if (imgEl) imgEl.src = resolveImageUrl(news.newsCover)
const aTags = item.querySelectorAll('a')
aTags.forEach((a) => {
a.href = `?page=news&newsId=${news.newsId}`
})
newsContainer.appendChild(item)
})
} else {
newsContainer.innerHTML = newsList.map((n) => buildHomeNewsArchiveLoopItemHtml(n)).join('')
}
} else if (newsContainer && newsList.length === 0) {
ensureHomePrivacySkeletonStyle()
newsContainer.innerHTML = homeNewsPrivacySkeletonInnerHtml()
}
// 4. 新闻模块已下线,隐藏首页新闻区块
hideHomeNewsSections()
// 5. 首页其他静态按钮动态化
const learnMoreBtn = Array.from(document.querySelectorAll('span')).find(el => el.textContent.includes('了解更多'))
if (learnMoreBtn) {
const link = learnMoreBtn.closest('a')
if (link) link.href = '?page=about'
// 5. 首页「产品展示」区块静态标题/按钮 i18n 化
const productGridWrap = document.querySelector('.home-product-grid-wrap')
const productSection = productGridWrap
? productGridWrap.closest('.swiper-slide, [id^="c_static_001-"]')
: null
if (productSection) {
const titleEl =
productSection.querySelector('.e_text-18 a') ||
productSection.querySelector('.e_text-18')
if (titleEl) {
titleEl.textContent = ui('home.section3.main.title', '产品展示')
}
const moreSpan =
productSection.querySelector('.e_button-17 span') ||
productSection.querySelector('.btn.btn-primary span')
if (moreSpan) {
moreSpan.textContent = ui('home.section3.more', '了解更多 >')
const link = moreSpan.closest('a')
if (link) {
link.href = '?page=product'
link.target = '_self'
}
}
}
} finally {
// 固定板块与首页 public 解耦:public 失败时仍应写入背景/矩阵等 CMS 数据
await injectAllFixedSections()
// 首页「华阳新闻」整屏背景图:独立于 public 接口,始终尝试覆盖(no-store 拉最新)
await tryApplyHomeNewsBackgroundOverride()
if (injectFixedSections) {
await injectAllFixedSections()
}
}
}
+711 -154
View File
@@ -1,201 +1,501 @@
/**
* 门户多语言(若依公开接口)
* 门户多语言(主流 i18n 标准实践)
* 1) 本地 JSON 作为基础文案
* 2) 后端词典按语言增量覆盖
* 3) 语言来源优先级:用户选择(localStorage) > 浏览器语言 > 默认语言
*/
import { ref } from 'vue'
import i18n, { DEFAULT_LOCALE, SUPPORTED_LOCALES } from '../i18n'
// 当前语言
const currentLang = ref('zh_cn')
// 翻译缓存
const STORAGE_KEY = 'huayang_lang'
const API_BASE = (import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const FALLBACK_BY_LOCALE = {
en_us: ['zh_cn'],
ja_jp: ['en_us', 'zh_cn'],
zh_cn: []
}
const LOCALE_LABEL_MAP = {
zh_cn: '中',
en_us: '英',
ja_jp: '日'
}
const HTML_LANG_MAP = {
zh_cn: 'zh-CN',
en_us: 'en-US',
ja_jp: 'ja-JP'
}
const currentLang = ref(DEFAULT_LOCALE)
const languageList = ref([])
const translationCache = {}
// 语言列表
const languageList = ref([])
export function normalizeLangCode(input) {
const raw = String(input || '').trim().toLowerCase().replace('-', '_')
if (!raw) return DEFAULT_LOCALE
if (raw.startsWith('zh')) return 'zh_cn'
if (raw.startsWith('en')) return 'en_us'
if (raw.startsWith('ja') || raw.startsWith('jp')) return 'ja_jp'
return SUPPORTED_LOCALES.includes(raw) ? raw : DEFAULT_LOCALE
}
/**
* 获取语言列表
*/
export async function fetchLanguageList() {
const base = (import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const res = await fetch(`${base}/language/list`, { credentials: 'omit', cache: 'no-store' })
function toHtmlLang(locale) {
return HTML_LANG_MAP[normalizeLangCode(locale)] || 'zh-CN'
}
function getBrowserLocale() {
const languages = Array.isArray(navigator.languages) ? navigator.languages : []
if (languages.length > 0) return normalizeLangCode(languages[0])
return normalizeLangCode(navigator.language || DEFAULT_LOCALE)
}
function getLocalMessages(locale) {
try {
const msg = i18n.global.getLocaleMessage(locale)
return msg && typeof msg === 'object' ? msg : {}
} catch {
return {}
}
}
function mergeLocaleMessages(base, patch) {
if (!patch || typeof patch !== 'object') return { ...(base || {}) }
const out = { ...(base || {}) }
Object.keys(patch).forEach((k) => {
const pv = patch[k]
const bv = out[k]
if (
pv &&
typeof pv === 'object' &&
!Array.isArray(pv) &&
bv &&
typeof bv === 'object' &&
!Array.isArray(bv)
) {
out[k] = mergeLocaleMessages(bv, pv)
} else {
out[k] = pv
}
})
return out
}
function expandDotKeys(flatMap) {
const out = {}
if (!flatMap || typeof flatMap !== 'object') return out
Object.keys(flatMap).forEach((key) => {
const rawValue = flatMap[key]
if (!key) return
const parts = String(key).split('.').filter(Boolean)
if (!parts.length) return
let cur = out
for (let i = 0; i < parts.length; i += 1) {
const part = parts[i]
const isLast = i === parts.length - 1
if (isLast) {
cur[part] = rawValue
} else {
if (!cur[part] || typeof cur[part] !== 'object' || Array.isArray(cur[part])) {
cur[part] = {}
}
cur = cur[part]
}
}
})
return out
}
function resolveLangCode(item) {
return normalizeLangCode(item?.langCode || item?.lang_code || item?.code || '')
}
function resolveLangName(item) {
return item?.langName || item?.lang_name || item?.name || ''
}
function syncLocale(langCode) {
const locale = normalizeLangCode(langCode)
currentLang.value = locale
i18n.global.locale.value = locale
document.documentElement.lang = toHtmlLang(locale)
localStorage.setItem(STORAGE_KEY, locale)
}
async function fetchRemoteTranslationMap(langCode, options = {}) {
const forceRefresh = Boolean(options.forceRefresh)
const locale = normalizeLangCode(langCode)
if (!forceRefresh && translationCache[locale]) {
return translationCache[locale]
}
const res = await fetch(`${API_BASE}/i18n/${locale}`, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) throw new Error(`HTTP ${res.status}`)
const body = await res.json()
if (body.code !== 200) throw new Error(body.msg)
languageList.value = Array.isArray(body.data) ? body.data : []
if (body.code !== 200) throw new Error(body.msg || 'load i18n failed')
const map = {}
const rows = Array.isArray(body.data) ? body.data : []
rows.forEach((row) => {
const key = row?.i18nKey || row?.i18n_key
const value = row?.i18nValue ?? row?.i18n_value
if (key && value != null && String(value).trim() !== '') {
map[key] = value
}
})
translationCache[locale] = map
return map
}
function applyLocaleMessagesWithFallback(locale) {
const norm = normalizeLangCode(locale)
let merged = { ...getLocalMessages(norm) }
const fallbackLocales = FALLBACK_BY_LOCALE[norm] || []
fallbackLocales.forEach((fbLocale) => {
merged = mergeLocaleMessages(getLocalMessages(fbLocale), merged)
})
const remote = translationCache[norm] || {}
merged = mergeLocaleMessages(merged, expandDotKeys(remote))
i18n.global.setLocaleMessage(norm, merged)
}
/**
* 获取语言列表(后端可配置启用语种)
*/
export async function fetchLanguageList() {
const res = await fetch(`${API_BASE}/language/list`, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) throw new Error(`HTTP ${res.status}`)
const body = await res.json()
if (body.code !== 200) throw new Error(body.msg || 'load language list failed')
const source = Array.isArray(body.data) ? body.data : []
languageList.value = source
.map((item) => {
const langCode = resolveLangCode(item)
return {
...item,
langCode,
langName: resolveLangName(item)
}
})
.filter((item) => SUPPORTED_LOCALES.includes(item.langCode))
if (!languageList.value.length) {
languageList.value = SUPPORTED_LOCALES.map((code) => ({ langCode: code, langName: LOCALE_LABEL_MAP[code] }))
}
return languageList.value
}
/**
* 获取翻译内容
* @param {string} langCode 语言代码
* @returns {Promise<Object>} 翻译键值对
* 加载远端翻译并合并到当前 locale message
*/
export async function fetchTranslations(langCode) {
if (translationCache[langCode]) {
return translationCache[langCode]
export async function fetchTranslations(langCode, options = {}) {
const locale = normalizeLangCode(langCode)
/* fetch 长期挂起会导致 runLanguageSwitch 内锁无法释放(若保留锁);此处限时放弃远端词典 */
const timeoutMs = 8000
try {
await Promise.race([
fetchRemoteTranslationMap(locale, options),
new Promise((_, reject) => {
setTimeout(() => reject(new Error('i18n fetch timeout')), timeoutMs)
})
])
} catch {
/* 超时或接口失败:仅用本地 JSON + 已有缓存 */
}
const base = (import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const res = await fetch(`${base}/i18n/${langCode}`, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) throw new Error(`HTTP ${res.status}`)
const body = await res.json()
if (body.code !== 200) throw new Error(body.msg)
// 转换为键值对对象
const translations = {}
if (Array.isArray(body.data)) {
body.data.forEach(item => {
if (item.i18n_key) {
translations[item.i18n_key] = item.i18n_value
}
})
}
translationCache[langCode] = translations
return translations
applyLocaleMessagesWithFallback(locale)
return translationCache[locale]
}
/**
* 获取单个翻译值
* @param {string} langCode
* @param {string} key
* @returns {Promise<string>}
* 按 key 获取翻译
*/
export async function t(langCode, key) {
if (translationCache[langCode]) {
return translationCache[langCode][key] || key
const locale = normalizeLangCode(langCode)
if (!translationCache[locale]) {
await fetchTranslations(locale)
}
const base = (import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const res = await fetch(`${base}/i18n/${langCode}/${key}`, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) return key
const body = await res.json()
if (body.code === 200 && body.data) {
return body.data.i18nValue || key
}
return key
const hit = i18n.global.t(key)
if (hit && hit !== key) return hit
return translationCache[locale]?.[key] || key
}
/**
* 设置当前语言
* @param {string} langCode
*/
export function setCurrentLang(langCode) {
if (langCode === 'ko_kr') {
langCode = 'zh_cn'
}
currentLang.value = langCode
// 保存到 localStorage
localStorage.setItem('huayang_lang', langCode)
syncLocale(langCode)
}
/**
* 初始化语言设置
* 从 localStorage 读取上次选择
* 初始化语言:URL ?lang= 优先(可分享链接),其次 localStorage,再次浏览器语言。
* 须在应用挂载前调用一次(main.js),避免 vue-i18n 默认 zh_cn 导致刷新后仍像「回到中文」。
*/
export function initLanguage() {
const saved = localStorage.getItem('huayang_lang')
if (saved) {
if (saved === 'ko_kr') {
localStorage.setItem('huayang_lang', 'zh_cn')
currentLang.value = 'zh_cn'
} else {
currentLang.value = saved
let fromUrl = ''
try {
if (typeof window !== 'undefined' && window.location?.search) {
const q = new URLSearchParams(window.location.search).get('lang')
if (q) fromUrl = String(q).trim()
}
} catch {
/* ignore */
}
const saved =
typeof localStorage !== 'undefined' ? localStorage.getItem(STORAGE_KEY) || '' : ''
const initial = normalizeLangCode(fromUrl || saved || getBrowserLocale() || DEFAULT_LOCALE)
syncLocale(initial)
}
function syncLangQueryToUrl(locale) {
if (typeof window === 'undefined' || !window.history?.replaceState) return
try {
const u = new URL(window.location.href)
u.searchParams.set('lang', String(locale))
window.history.replaceState(window.history.state, '', u.toString())
} catch {
/* ignore */
}
}
/**
* 注入多语言切换器到页面头部
* 注入页面语言切换器
*/
export async function injectLanguageSwitcher() {
let languages = await fetchLanguageList()
languages = languages.filter((l) => l.langCode !== 'ko_kr')
if (!languages || languages.length <= 1) return
let languages = []
try {
languages = await fetchLanguageList()
} catch {
languages = SUPPORTED_LOCALES.map((code) => ({ langCode: code, langName: LOCALE_LABEL_MAP[code] }))
languageList.value = languages
}
const container = document.querySelector('.lang')
/** 必须与 Logo 旁「微信公众号」容器 .lang 区分:优先顶栏 .topbar/.header 内的 .user01 */
const userTopContainer =
document.querySelector('.header .topbar .user01') ||
document.querySelector('.e_navigationA-12 .topbar .user01') ||
document.querySelector('.header .user01') ||
document.querySelector('.user01')
const legacyLangContainer =
document.querySelector('.header .topbar .lang') || document.querySelector('.topbar .lang')
const container = userTopContainer || legacyLangContainer
if (!container) return
// 动态生成“中 | 英 | …”结构(韩语已下线)
container.innerHTML = ''
languages.forEach((lang, index) => {
container.style.pointerEvents = 'auto'
container.style.position = container.style.position || 'relative'
container.style.zIndex = container.style.zIndex || '9999'
languages.forEach((item, index) => {
const code = resolveLangCode(item)
const span = document.createElement('span')
span.textContent = lang.langName.substring(0, 1) // 取第一个字,如“中”、“英”
span.dataset.lang = lang.langCode
span.textContent = LOCALE_LABEL_MAP[code] || (resolveLangName(item).slice(0, 1) || code)
span.dataset.lang = code
span.setAttribute('role', 'button')
span.setAttribute('tabindex', '0')
span.style.cursor = 'pointer'
if (currentLang.value === lang.langCode) {
span.style.color = '#3b82f6' // 高亮当前语言
span.style.pointerEvents = 'auto'
if (currentLang.value === code) {
span.style.color = '#3b82f6'
span.style.fontWeight = 'bold'
}
container.appendChild(span)
// 添加分隔符
if (index < languages.length - 1) {
const separator = document.createTextNode(' | ')
container.appendChild(separator)
}
if (index < languages.length - 1) container.appendChild(document.createTextNode(' | '))
})
// 绑定点击行为
hydrateUser01Accessibility()
bindNativeLanguageSwitcher(languages)
ensureLanguageSwitcherPointerHitFix()
}
/**
* 应用翻译到页面元素
* @param {string} langCode
* 应用翻译到归档 DOM + locale
*/
export async function applyTranslations(langCode) {
const translations = await fetchTranslations(langCode)
export async function applyTranslations(langCode, options = {}) {
const forceRefresh = options.forceRefresh !== false
const locale = normalizeLangCode(langCode)
syncLocale(locale)
try {
await fetchTranslations(locale, { forceRefresh })
} catch {
applyLocaleMessagesWithFallback(locale)
}
// 应用到带有 data-i18n 属性的元素
document.querySelectorAll('[data-i18n]').forEach(el => {
document.querySelectorAll('[data-i18n]').forEach((el) => {
const key = el.getAttribute('data-i18n')
if (translations[key]) {
el.textContent = translations[key]
}
const value = i18n.global.t(key)
if (value && value !== key) el.textContent = value
})
// 应用到 placeholder
document.querySelectorAll('[data-i18n-placeholder]').forEach(el => {
document.querySelectorAll('[data-i18n-placeholder]').forEach((el) => {
const key = el.getAttribute('data-i18n-placeholder')
if (translations[key]) {
el.placeholder = translations[key]
}
const value = i18n.global.t(key)
if (value && value !== key) el.placeholder = value
})
// 归档页没有 data-i18n 标记,按业务键做显式映射。
applyCommonTranslations(translations)
applyCommonTranslations()
}
// 导出当前语言
export { currentLang }
export function tr(key, fallback = '') {
const value = i18n.global.t(key)
if (value && value !== key) return value
if (fallback) return fallback
const locale = normalizeLangCode(currentLang.value || DEFAULT_LOCALE)
return translationCache[locale]?.[key] || key
}
/**
* 从节点解析语言码:data-lang、外链 host、或「中/英/日」文案(兼容 "| 英")
*/
function detectLangCodeFromNode(node) {
if (node.dataset && node.dataset.lang) {
return node.dataset.lang
}
const href = String(node.getAttribute('href') || '').toLowerCase()
if (href.includes('en.haihofoods') || href.includes('//en.')) {
return 'en_us'
}
if (href.includes('jp.haihofoods') || href.includes('//jp.')) {
return 'ja_jp'
}
if (href.includes('haihofoods.com') && !href.includes('en.haihofoods') && !href.includes('jp.haihofoods')) {
return 'zh_cn'
}
const t = String(node.textContent || '')
.replace(/\|/g, '')
.replace(/\s+/g, '')
.trim()
.toLowerCase()
if (t.includes('简体') || t.includes('中文') || t === '中') return 'zh_cn'
if (t.includes('english') || t.includes('en') || t === '英') return 'en_us'
if (t.includes('日本') || t.includes('ja') || t === '日') return 'ja_jp'
return ''
}
/** 任意页切换语言后须重灌页脚联系块与站点配置 */
async function refreshFooterAfterLangSwitch() {
try {
const { injectFooterContact } = await import('./contact.js')
const { injectFooterCopyright } = await import('./copyright.js')
const { injectSiteGlobalConfig } = await import('./siteConfig.js')
await injectFooterContact()
await injectSiteGlobalConfig()
await injectFooterCopyright()
} catch (err) {
console.warn('[language] footer refresh failed', err)
}
}
async function runLanguageSwitch(code) {
const locale = normalizeLangCode(code)
if (!SUPPORTED_LOCALES.includes(locale)) return
setCurrentLang(locale)
syncLangQueryToUrl(locale)
await applyTranslations(locale)
await injectLanguageSwitcher()
document.dispatchEvent(new CustomEvent('langchange', { detail: { lang: locale } }))
await refreshFooterAfterLangSwitch()
}
function collectLangHitFromPoint(clientX, clientY) {
if (typeof document.elementsFromPoint !== 'function') return null
const stack = document.elementsFromPoint(clientX, clientY)
if (!stack?.length) return null
const langHit = stack.find(
(node) =>
node &&
node.nodeType === 1 &&
typeof node.closest === 'function' &&
node.getAttribute?.('data-lang') &&
node.closest('.user01')
)
if (!langHit) return null
const top = stack[0]
if (top === langHit || langHit.contains(top)) return null
const code = normalizeLangCode(langHit.getAttribute('data-lang'))
if (!SUPPORTED_LOCALES.includes(code)) return null
return code
}
/** 顶栏语言常被正文通栏、Teleport、透明层盖住;捕获阶段 + 命中栈穿透 */
let languagePointerHitFixBound = false
function ensureLanguageSwitcherPointerHitFix() {
if (languagePointerHitFixBound || typeof document.elementsFromPoint !== 'function') return
languagePointerHitFixBound = true
const maybeSwitch = (e, clientX, clientY) => {
if (e.defaultPrevented) return
if (typeof clientX !== 'number' || typeof clientY !== 'number') return
const code = collectLangHitFromPoint(clientX, clientY)
if (!code) return
e.preventDefault()
e.stopImmediatePropagation()
void runLanguageSwitch(code)
}
document.addEventListener(
'click',
(e) => {
maybeSwitch(e, e.clientX, e.clientY)
},
true
)
}
/** 点击逻辑见 ensureUser01LanguageDelegation(document 捕获委托,不依赖每次 inject 绑 onclick) */
function hydrateUser01Accessibility() {
document.querySelectorAll('.user01 [data-lang]').forEach((node) => {
node.style.cursor = 'pointer'
if (!node.getAttribute('role')) node.setAttribute('role', 'button')
if (node.getAttribute('tabindex') == null) node.setAttribute('tabindex', '0')
})
}
/** 顶栏中英日:归档页常有透明层盖住 span,单靠各节点 onclick 不可靠;与 collectLangHitFromPoint 穿透配合 */
let user01DelegationBound = false
function ensureUser01LanguageDelegation() {
if (user01DelegationBound) return
user01DelegationBound = true
document.addEventListener(
'click',
(e) => {
const el = e.target?.closest?.('.user01 [data-lang]')
if (!el) return
const code = normalizeLangCode(el.getAttribute('data-lang'))
if (!SUPPORTED_LOCALES.includes(code)) return
e.preventDefault()
e.stopPropagation()
void runLanguageSwitch(code)
},
true
)
document.addEventListener(
'keydown',
(e) => {
if (e.key !== 'Enter' && e.key !== ' ') return
const el = e.target?.closest?.('.user01 [data-lang]')
if (!el) return
const code = normalizeLangCode(el.getAttribute('data-lang'))
if (!SUPPORTED_LOCALES.includes(code)) return
e.preventDefault()
void runLanguageSwitch(code)
},
true
)
}
ensureUser01LanguageDelegation()
function bindNativeLanguageSwitcher(languages) {
const languageNodes = Array.from(document.querySelectorAll('.lang span, .lang a, .lang li, .lang option'))
if (!languageNodes.length) return
const detectCode = (node) => {
if (node.dataset.lang) return node.dataset.lang
const t = String(node.textContent || '').toLowerCase()
if (t.includes('简体') || t.includes('中文') || t === '中') return 'zh_cn'
if (t.includes('english') || t.includes('en') || t === '英') return 'en_us'
if (t.includes('日本') || t.includes('ja') || t === '日') return 'ja_jp'
return ''
}
const supportedCodes = new Set(languages.map((l) => l.langCode))
const supportedCodes = new Set(languages.map((l) => resolveLangCode(l)).filter(Boolean))
languageNodes.forEach((node) => {
const code = detectCode(node)
const code = detectLangCodeFromNode(node)
if (!code || !supportedCodes.has(code)) return
node.style.cursor = 'pointer'
node.addEventListener('click', async (event) => {
event.preventDefault()
setCurrentLang(code)
await applyTranslations(code)
// 重新注入以更新高亮状态
injectLanguageSwitcher()
document.dispatchEvent(new CustomEvent('langchange', { detail: { lang: code } }))
event.stopPropagation()
await runLanguageSwitch(code)
})
})
}
@@ -211,6 +511,15 @@ function setTextBySelectors(selectors, value) {
}
}
function setAllTextBySelectors(selectors, value) {
if (!value) return
selectors.forEach((selector) => {
document.querySelectorAll(selector).forEach((el) => {
if (el) el.textContent = value
})
})
}
function setPlaceholderBySelectors(selectors, value) {
if (!value) return
selectors.forEach((selector) => {
@@ -222,42 +531,290 @@ function setPlaceholderBySelectors(selectors, value) {
})
}
function applyCommonTranslations(translations) {
const t = (key) => translations[key]
function applyCommonTranslations() {
const safeT = (key) => {
const v = i18n.global.t(key)
return v && v !== key ? v : ''
}
// 顶部主导航(与后台 7 项一级菜单顺序一致:首页、关于、产品、文化、动态、加盟、联系)
setTextBySelectors(['.header .p_level1Item:nth-child(1) .p_menuItem span'], t('common.title.site_home'))
setTextBySelectors(['.header .p_level1Item:nth-child(2) .p_menuItem span'], t('common.title.about'))
setTextBySelectors(['.header .p_level1Item:nth-child(3) .p_menuItem span'], t('common.title.product'))
setTextBySelectors(['.header .p_level1Item:nth-child(4) .p_menuItem span'], t('common.title.culture_nav'))
setTextBySelectors(['.header .p_level1Item:nth-child(5) .p_menuItem span'], t('common.title.news'))
setTextBySelectors(['.header .p_level1Item:nth-child(6) .p_menuItem span'], t('common.button.join'))
setTextBySelectors(['.header .p_level1Item:nth-child(7) .p_menuItem span'], t('common.title.contact'))
// 顶部主导航(与后台一级菜单顺序一致:首页、关于、产品、文化、联系)
setTextBySelectors(['.header .p_level1Item:nth-child(1) .p_menuItem span'], safeT('common.title.site_home'))
setTextBySelectors(['.header .p_level1Item:nth-child(2) .p_menuItem span'], safeT('common.title.about'))
setTextBySelectors(['.header .p_level1Item:nth-child(3) .p_menuItem span'], safeT('common.title.product'))
setTextBySelectors(['.header .p_level1Item:nth-child(4) .p_menuItem span'], safeT('common.title.culture_nav'))
setTextBySelectors(
[
'.header .navitem .p_level1Item:nth-child(5) .p_menuItem span',
'.header .p_level1Item:nth-child(5) .p_menuItem span'
],
safeT('common.title.contact')
)
/** 华阳文化归档页:顶部导航、移动折叠菜单与 Banner 标题均来自静态模板,需要单独覆盖所有副本。 */
const cultureNavText = safeT('common.title.culture_nav')
if (cultureNavText) {
setAllTextBySelectors(
[
'body[data-pagekey="culture"] .header .p_level1Box > .navitem > .p_level1Item:nth-child(4) > .p_menuItem > a > span',
'body[data-pagekey="culture"] .header .p_level1Item.actived > .p_menuItem.cntitle > a > span',
'body[data-pagekey="culture"] .header .p_level1Item.open > .p_menuItem.s_templatetitle > a > span',
'body[data-pagekey="culture"] .e_bottomNav-47 .p_level1Item:nth-child(4) > .p_menuItem span'
],
cultureNavText
)
document.querySelectorAll('body[data-pagekey="culture"] .e_bannerA-1 .p_btitle').forEach((titleEl) => {
const link = titleEl.querySelector('a')
if (link) link.textContent = cultureNavText
else titleEl.textContent = cultureNavText
})
}
// 关于我们二级导航
setTextBySelectors(['.header .p_level1Item:nth-child(2) .p_level2Item:nth-child(1) .p_menuItem span'], t('common.title.company_intro'))
setTextBySelectors(['.header .p_level1Item:nth-child(2) .p_level2Item:nth-child(2) .p_menuItem span'], t('common.title.honor'))
setTextBySelectors(['.header .p_level1Item:nth-child(2) .p_level2Item:nth-child(3) .p_menuItem span'], t('common.title.tech'))
setTextBySelectors(['.header .p_level1Item:nth-child(2) .p_level2Item:nth-child(4) .p_menuItem span'], t('common.title.timeline'))
setTextBySelectors(['.header .p_level1Item:nth-child(2) .p_level2Item:nth-child(5) .p_menuItem span'], t('common.title.store'))
setTextBySelectors(['.header .p_level1Item:nth-child(2) .p_level2Item:nth-child(1) .p_menuItem span'], safeT('common.title.company_intro'))
setTextBySelectors(['.header .p_level1Item:nth-child(2) .p_level2Item:nth-child(2) .p_menuItem span'], safeT('common.title.honor'))
setTextBySelectors(['.header .p_level1Item:nth-child(2) .p_level2Item:nth-child(3) .p_menuItem span'], safeT('common.title.timeline'))
setTextBySelectors(['.header .p_level1Item:nth-child(2) .p_level2Item:nth-child(4) .p_menuItem span'], safeT('common.title.store'))
// 底部导航(底部同样使用 p_level1Box)
setTextBySelectors(['.e_bottomNav-47 .p_level1Item:nth-child(1) .p_menuItem span'], t('common.title.about'))
setTextBySelectors(['.e_bottomNav-47 .p_level1Item:nth-child(2) .p_menuItem span'], t('common.title.product'))
setTextBySelectors(['.e_bottomNav-47 .p_level1Item:nth-child(3) .p_menuItem span'], t('common.title.news'))
setTextBySelectors(['.e_bottomNav-47 .p_level1Item:nth-child(4) .p_menuItem span'], t('common.button.join'))
setTextBySelectors(['.e_bottomNav-47 .p_level1Item:nth-child(5) .p_menuItem span'], t('common.title.contact'))
/** 首页各屏「了解更多 >」按钮(归档为多套 .e_button-*;injectHomeContent 仅覆盖其中一处) */
if (cultureNavText) {
const homeCultureTitle = safeT('home.section4.main.title') || cultureNavText
document.querySelectorAll('body[data-pagekey="home"] [id^="c_static_001_P_33409-"] .e_text-28').forEach((titleEl) => {
const link = titleEl.querySelector('a')
if (link) link.textContent = homeCultureTitle
else titleEl.textContent = homeCultureTitle
})
}
// 常见按钮
document.querySelectorAll('.e_formBtn-16, .e_formBtn-96, .btn-primary').forEach((btn) => {
if (t('common.button.submit')) {
btn.textContent = t('common.button.submit')
const learnMoreLabel = safeT('home.section3.more')
if (learnMoreLabel) {
document
.querySelectorAll(
'body[data-pagekey="home"] .e_button-62 span, body[data-pagekey="home"] .e_button-17 span, body[data-pagekey="home"] .e_button-29 span'
)
.forEach((span) => {
const raw = (span.textContent || '').replace(/\s+/g, ' ').trim()
if (
raw === '了解更多 >' ||
raw === '了解更多>' ||
raw === 'Learn more >' ||
raw === 'Learn More >' ||
raw === '詳しく見る >'
) {
span.textContent = learnMoreLabel
}
})
}
/** 联系我们页:面包屑、右侧「联系我们」标题、左侧「在线留言」与说明 */
const contactCrumbUl = document.querySelector(
'body[data-pagekey="contact"] .e_breadcrumb-4 ul.p_breadcrumb'
)
if (contactCrumbUl) {
const crumbItems = contactCrumbUl.querySelectorAll(':scope > li.p_breadcrumbItem')
const homeCrumbTitle = crumbItems[0]?.querySelector('.p_title')
const homeText = safeT('common.title.site_home')
if (homeCrumbTitle && homeText) homeCrumbTitle.textContent = homeText
const contactCrumb = safeT('common.title.contact')
if (crumbItems[1] && contactCrumb) crumbItems[1].textContent = contactCrumb
}
const contactSectionRoot = 'body[data-pagekey="contact"] #c_static_001-1669701780184'
setTextBySelectors(
[`${contactSectionRoot} .cbox-19-0 .e_text-17.s_summary`],
safeT('common.title.contact')
)
setTextBySelectors(
[`${contactSectionRoot} .cbox-2-0 .e_text-3.s_summary`],
safeT('contact.page.online_title')
)
const onlineHintEl = document.querySelector(`${contactSectionRoot} .cbox-2-0 .e_richText-4 p`)
const onlineHintText = safeT('contact.page.online_hint')
if (onlineHintEl && onlineHintText) onlineHintEl.textContent = onlineHintText
/**
* 归档页「关于我们」模块顶部的横向 Tab(公司简介 / 资质荣誉 / 品质技术…)
* 与页头 .header 主导航不是同一套 DOM,切换语言时必须单独替换文案。
*/
const aboutStripList = document.querySelector(
'#c_static_001_P_8883-17121276215300 .e_loop-3 .p_list'
)
if (aboutStripList) {
const tabKeys = [
'common.title.company_intro',
'common.title.honor',
'common.title.timeline',
'common.title.store'
]
const tabAnchors = aboutStripList.querySelectorAll(':scope > .p_loopitem a')
tabKeys.forEach((key, i) => {
const a = tabAnchors[i]
if (!a) return
const text = safeT(key)
if (text) a.textContent = text
})
}
/** 同上模块内的面包屑第二项随归档子页变化:关于我们 / 发展历程 / 品质技术 / 店面展示 */
const aboutCrumbUl = document.querySelector(
'#c_static_001_P_8883-17121276215300 .e_breadcrumb-2 ul.p_breadcrumb'
)
if (aboutCrumbUl) {
const crumbItems = aboutCrumbUl.querySelectorAll(':scope > li.p_breadcrumbItem')
const homeCrumbTitle = crumbItems[0]?.querySelector('.p_title')
const homeText = safeT('common.title.site_home')
if (homeCrumbTitle && homeText) homeCrumbTitle.textContent = homeText
const pageKey = typeof document !== 'undefined' ? document.body?.getAttribute('data-pagekey') || '' : ''
let secondCrumbKey = 'common.title.about'
if (pageKey === 'history') secondCrumbKey = 'common.title.timeline'
else if (pageKey === 'store') secondCrumbKey = 'common.title.store'
const secondText = safeT(secondCrumbKey)
if (crumbItems[1] && secondText) crumbItems[1].textContent = secondText
}
/** 发展历程归档页主标题 */
if (typeof document !== 'undefined' && document.body?.getAttribute('data-pagekey') === 'history') {
const timelineH1 = document.querySelector(
'#c_static_001_P_4578-1660723020064 > .e_container-5:first-child h1.e_h1-6'
)
const timelineTitle = safeT('common.title.timeline')
if (timelineH1 && timelineTitle) timelineH1.textContent = timelineTitle
}
/** 全国门店页左侧列表上方标题「店面位置」 */
setTextBySelectors(
[
'body[data-pagekey="store"] #c_introl_list_003-1753691901047 .e_text-25.s_title',
'body[data-pagekey="store"] .e_container-23 .cbox-23-0 .e_text-25.s_title'
],
safeT('common.title.store_location')
)
/** 全国门店页底部图集区块标题「店面展示」(该页仅此一处 .e_text-14) */
setTextBySelectors(
['body[data-pagekey="store"] #c_static_001_P_4578-16941414442160 .e_text-14.s_title'],
safeT('common.title.store')
)
/** 关于我们页「资质荣誉」轮播区块主标题(同 id 在全国门店页为「店面展示」的 p,此处限定 about + h1) */
setTextBySelectors(
[
'body[data-pagekey="about"] #c_static_001_P_4578-16941414442160 > .e_container-5:first-child .cbox-5-0 > h1.e_h1-6'
],
safeT('common.title.honor')
)
// 底部导航一级(与归档 footer 顺序一致:首页、关于、产品、文化、商城、联系)
setTextBySelectors(['.e_bottomNav-47 .p_level1Item:nth-child(1) .p_menuItem span'], safeT('common.title.site_home'))
setTextBySelectors(['.e_bottomNav-47 .p_level1Item:nth-child(2) .p_menuItem span'], safeT('common.title.about'))
setTextBySelectors(['.e_bottomNav-47 .p_level1Item:nth-child(3) .p_menuItem span'], safeT('common.title.product'))
setTextBySelectors(['.e_bottomNav-47 .p_level1Item:nth-child(4) .p_menuItem span'], safeT('common.title.culture_nav'))
setTextBySelectors(['.e_bottomNav-47 .p_level1Item:nth-child(5) .p_menuItem span'], safeT('common.title.contact'))
// 常见按钮(在线留言表单使用「提交留言」,勿与通用「提交」混用)
document.querySelectorAll('.e_formBtn-16, .e_formBtn-96').forEach((btn) => {
if (btn.closest?.('.e_form-10')) {
const msg = safeT('ui.contact.submit_message')
if (msg) btn.textContent = msg
return
}
const text = safeT('common.button.submit')
if (text) {
btn.textContent = text
}
})
// 常见输入框占位符(按关键词特征分配)
setPlaceholderBySelectors(['input[placeholder*="姓名"]', 'input[placeholder*="联系人"]'], t('common.placeholder.name'))
setPlaceholderBySelectors(['input[placeholder*="电话"]', 'input[placeholder*="手机"]', 'input[placeholder*="联系方式"]'], t('common.placeholder.phone'))
setPlaceholderBySelectors(['input[placeholder*="邮箱"]', 'input[placeholder*="email"]'], t('common.placeholder.email'))
setPlaceholderBySelectors(['textarea[placeholder*="留言"]', 'input[placeholder*="需求"]', 'textarea[placeholder*="内容"]'], t('common.placeholder.message'))
}
// 常见输入框占位符(中英日归档占位均需命中)
setPlaceholderBySelectors(
[
'input[placeholder*="姓名"]',
'input[placeholder*="联系人"]',
'input[placeholder*="Your name"]',
'input[placeholder*="your name"]',
'input[placeholder*="お名前"]'
],
safeT('common.placeholder.name')
)
setPlaceholderBySelectors(
[
'input[placeholder*="电话"]',
'input[placeholder*="手机"]',
'input[placeholder*="联系方式"]',
'input[placeholder*="Phone"]',
'input[placeholder*="phone"]',
'input[placeholder*="電話"]'
],
safeT('common.placeholder.phone')
)
setPlaceholderBySelectors(
[
'input[placeholder*="邮箱"]',
'input[placeholder*="email"]',
'input[placeholder*="Email"]',
'input[placeholder*="メール"]'
],
safeT('common.placeholder.email')
)
setPlaceholderBySelectors(
[
'textarea[placeholder*="留言"]',
'input[placeholder*="需求"]',
'textarea[placeholder*="内容"]',
'textarea[placeholder*="message"]',
'textarea[placeholder*="Message"]',
'textarea[placeholder*="メッセージ"]'
],
safeT('common.placeholder.message')
)
// 页脚「关于我们」下「发展历程」及上轮切换后的英文/日文占位
const timelineFoot = safeT('common.title.timeline')
if (timelineFoot) {
document.querySelectorAll('.p_level2Box .p_menuItem > a > span').forEach((span) => {
const raw = (span.textContent || '').replace(/\s+/g, ' ').trim()
if (raw === '发展历程' || raw === 'Timeline' || raw === '沿革') {
span.textContent = timelineFoot
}
})
}
// 页脚「关于我们」下「资质荣誉」及上轮占位(含旧版 en Honors / ja 認証・受賞)
const honorFoot = safeT('common.title.honor')
if (honorFoot) {
document.querySelectorAll('.p_level2Box .p_menuItem > a > span').forEach((span) => {
const raw = (span.textContent || '').replace(/\s+/g, ' ').trim()
if (
raw === '资质荣誉' ||
raw === 'Honors' ||
raw === 'Qualifications & Honors' ||
raw === '認証・受賞' ||
raw === '資格・栄誉'
) {
span.textContent = honorFoot
}
})
}
// 页脚「关于我们」下「店面展示」及上轮语言缓存(含旧版 en Stores / ja 店舗)
const storeFoot = safeT('common.title.store')
if (storeFoot) {
document.querySelectorAll('.p_level2Box .p_menuItem > a > span').forEach((span) => {
const raw = (span.textContent || '').replace(/\s+/g, ' ').trim()
if (
raw === '店面展示' ||
raw === 'Stores' ||
raw === 'Store Showcase' ||
raw === '店舗' ||
raw === '店舗展示'
) {
span.textContent = storeFoot
}
})
}
}
/**
* 归档页整段 HTML 经 bootstrapLegacyPage 重挂后,静态模板会还原为中文;再执行一遍 DOM 文案替换。
* runLanguageSwitch 里 applyTranslations 先于 langchange → bootstrap,故需在重挂后补调用。
*/
export function reapplyArchiveStaticTranslations() {
applyCommonTranslations()
}
+141 -74
View File
@@ -1,17 +1,11 @@
/**
* 门户Logo配置(若依公开接口)
*/
import { resolveImageUrl } from '../utils/asset'
import { remember } from '../utils/asyncCache'
function escapeHtml(text) {
if (text == null || text === '') {
return ''
}
return String(text)
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;')
function normalizeLogoImage(logoImage) {
return resolveImageUrl(logoImage)
}
/**
@@ -22,89 +16,162 @@ function escapeHtml(text) {
*/
export async function fetchLogoPublic(logoType, baseUrl) {
const base = (baseUrl || import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
let url = `${base}/logo/public`
if (logoType) {
url += `?logoType=${encodeURIComponent(logoType)}`
}
const res = await fetch(url, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
const body = await res.json()
if (body.code !== 200) {
throw new Error(body.msg || '接口返回异常')
}
return body.data || null
}
/**
* 注入Logo到页面
* @param {string} logoType Logo类型
*/
export async function injectLogo(logoType = 'header') {
const logoContainer = document.querySelector('.logorim')
if (!logoContainer) {
return
}
logoContainer.innerHTML = ''
const logo = await fetchLogoPublic(logoType)
if (!logo) {
return
}
const rawLogoImage = logo.logoImage || ''
const logoImage = escapeHtml(normalizeLogoImage(rawLogoImage))
const logoTitle = escapeHtml(logo.logoTitle || '')
const logoUrl = escapeHtml(logo.logoUrl || '/')
// 构建新的logo HTML
const logoHtml = `
<a href="${mapHaihoPathToLocal(logoUrl)}">
<img src="${logoImage}" alt="${logoTitle}" title="${logoTitle}">
</a>
`
logoContainer.innerHTML = logoHtml
}
import { resolveImageUrl } from '../utils/asset'
function normalizeLogoImage(logoImage) {
return resolveImageUrl(logoImage)
const safeType = logoType ? String(logoType).trim() : ''
return remember(
`logo:${base}:${safeType || 'default'}`,
async () => {
let url = `${base}/logo/public`
if (safeType) {
url += `?logoType=${encodeURIComponent(safeType)}`
}
const res = await fetch(url, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
const body = await res.json()
if (body.code !== 200) {
throw new Error(body.msg || '接口返回异常')
}
return body.data || null
},
{ ttlMs: 15000, cacheEmpty: false }
)
}
function mapHaihoPathToLocal(pathname) {
if (!pathname) return '/'
// 已处理外部链接
if (pathname.startsWith('http://') || pathname.startsWith('https://')) {
return pathname
const raw = pathname == null ? '' : String(pathname).trim()
if (!raw || raw.toLowerCase().startsWith('javascript:')) {
return spaHref('page=home')
}
const normalizePath = pathname && pathname.endsWith('/') && pathname.length > 1 ? pathname.slice(0, -1) : pathname || '/'
if (raw.startsWith('http://') || raw.startsWith('https://')) {
return raw
}
const normalizePath = raw.endsWith('/') && raw.length > 1 ? raw.slice(0, -1) : raw || '/'
if (normalizePath === '/' || normalizePath === '') return spaHref('page=home')
if (normalizePath === '/About.html') return spaHref('page=about')
if (normalizePath === '/Quality.html') return spaHref('page=quality')
if (normalizePath === '/Quality.html') return spaHref('page=about')
if (normalizePath === '/History.html') return spaHref('page=history')
if (normalizePath === '/mendian.html') return spaHref('page=store')
if (normalizePath === '/mendian.html') return spaHref('page=about')
if (normalizePath === '/product/2.html') return spaHref('page=product')
if (normalizePath === '/news/8') return spaHref('page=culture')
if (normalizePath === '/news/1') return spaHref('page=news')
if (normalizePath === '/join.html') return spaHref('page=join')
if (normalizePath === '/news' || normalizePath.startsWith('/news/')) return spaHref('page=home')
if (normalizePath === '/join.html') return spaHref('page=home')
if (normalizePath === '/contact.html') return spaHref('page=contact')
if (normalizePath.startsWith('/news/')) return spaHref('page=news')
if (normalizePath.startsWith('/clture/')) return spaHref('page=culture')
if (normalizePath.startsWith('/product/')) return spaHref('page=product')
if (normalizePath.startsWith('/about')) return spaHref('page=about')
return spaHref('page=home')
}
/**
* 生成带base的链接
*/
function spaHref(query) {
const base = import.meta.env.BASE_URL || '/'
return `${base}?${query}`
}
/**
* 将后台「头部」Logo 写入顶栏 .logorim:只替换直接子级 a 标签内图片,保留同容器内的 .lang 等兄弟节点。
* footer / copyright 类型当前模板无对应 DOM,调用时直接跳过,避免误覆盖页头。
* @param {string} logoType 仅处理 header(默认)
*/
export async function injectLogo(logoType = 'header') {
const type = String(logoType || 'header').trim().toLowerCase()
// 归档模板中 Logo 容器为 .logorim,仅出现在顶栏;非 header 类型勿写入,避免误用页脚配置覆盖页头
if (type !== 'header') {
return
}
const containers = document.querySelectorAll('.header .logorim, .e_navigationA-12 .logorim')
const roots = containers.length ? containers : document.querySelectorAll('.logorim')
if (!roots.length) {
return
}
let logo = null
try {
logo = await fetchLogoPublic('header')
} catch (e) {
console.error('[injectLogo] 获取 Logo 失败,保留模板默认图:', e)
return
}
if (!logo) {
return
}
const rawImage = logo.logoImage == null ? '' : String(logo.logoImage).trim()
const src = normalizeLogoImage(rawImage)
if (!src) {
return
}
const href = mapHaihoPathToLocal(logo.logoUrl)
const title = logo.logoTitle == null ? '' : String(logo.logoTitle)
roots.forEach((logoContainer) => {
let anchor = logoContainer.querySelector(':scope > a')
if (!anchor) {
anchor = document.createElement('a')
logoContainer.insertBefore(anchor, logoContainer.firstChild)
}
anchor.setAttribute('href', href)
anchor.innerHTML = ''
const img = document.createElement('img')
img.setAttribute('src', src)
img.setAttribute('alt', title)
img.setAttribute('title', title)
anchor.appendChild(img)
})
// 同步浏览器标签页 favicon 与标题
applyFavicon(src)
if (title) {
applyTabTitle(title)
}
}
/**
* 用后台 Logo 替换页面 favicon。原 index.html 中默认的 /favicon.svg 不存在,
* 浏览器会使用占位图;这里直接覆盖 href,按文件扩展名同步 type。
*/
function applyFavicon(src) {
if (!src || typeof document === 'undefined') return
const lowered = String(src).split('?')[0].toLowerCase()
let type = 'image/png'
if (lowered.endsWith('.svg')) type = 'image/svg+xml'
else if (lowered.endsWith('.ico')) type = 'image/x-icon'
else if (lowered.endsWith('.jpg') || lowered.endsWith('.jpeg')) type = 'image/jpeg'
else if (lowered.endsWith('.gif')) type = 'image/gif'
else if (lowered.endsWith('.webp')) type = 'image/webp'
const head = document.head || document.getElementsByTagName('head')[0]
if (!head) return
// 移除已有的 icon / shortcut icon,避免老引用残留
head
.querySelectorAll('link[rel~="icon"], link[rel="shortcut icon"]')
.forEach((node) => node.parentNode && node.parentNode.removeChild(node))
const link = document.createElement('link')
link.setAttribute('rel', 'icon')
link.setAttribute('type', type)
link.setAttribute('href', src)
head.appendChild(link)
}
/**
* 站点配置未填 site_title 时,使用后台 Logo 的 logoTitle 作为浏览器标题兜底。
* 已设过非空标题的不再覆盖,避免冲掉 site_title 的设置。
*/
function applyTabTitle(title) {
if (!title || typeof document === 'undefined') return
const current = (document.title || '').trim()
// 仅当标题为空 / 是已知占位标题时才覆盖;不要覆盖 site_title 已写入的有效值
const placeholders = new Set(['', '华阳网站', '华阳食品', '大连华阳食品有限公司', 'Vite + Vue'])
if (placeholders.has(current)) {
document.title = title
}
}
+92 -30
View File
@@ -3,6 +3,7 @@
*/
import { resolveImageUrl } from '../utils/asset'
import { remember } from '../utils/asyncCache'
function firstCsvUrl(raw) {
if (!raw || typeof raw !== 'string') return ''
@@ -36,6 +37,62 @@ function escapeHtml(text) {
.replace(/'/g, '&#39;')
}
function normalizeQualityNavPath(rawUrl) {
if (!rawUrl) return ''
const raw = String(rawUrl).trim()
if (!raw) return ''
try {
const parsed = new URL(raw, 'https://haihofoods.com')
return `${parsed.pathname || ''}${parsed.hash || ''}`.toLowerCase()
} catch {
return raw.toLowerCase()
}
}
function isQualityTechNavItem(item) {
const title = String(item?.navTitle || '')
.replace(/\s+/g, '')
.trim()
.toLowerCase()
const path = normalizeQualityNavPath(item?.navUrl)
return (
path === '/quality.html' ||
path === '/about/tech' ||
path === '/mendian.html' ||
path === '/about/store' ||
title === '\u54c1\u8d28\u6280\u672f' ||
title === '\u5e97\u9762\u5c55\u793a' ||
title === '\u5168\u56fd\u95e8\u5e97' ||
title === 'quality&tech' ||
title === 'quality&technology' ||
title === 'store' ||
title === 'stores' ||
title === '\u54c1\u8cea\u30fb\u6280\u8853'
)
}
function isJoinNavItem(item) {
const title = String(item?.navTitle || '')
.replace(/\s+/g, '')
.trim()
.toLowerCase()
const code = String(item?.navCode || '')
.replace(/\s+/g, '')
.trim()
.toLowerCase()
const path = normalizeQualityNavPath(item?.navUrl)
return (
code === 'main_join' ||
path === '/join.html' ||
path === '/join' ||
path.startsWith('/join/') ||
title === '\u62db\u5546\u52a0\u76df' ||
title === '\u52a0\u76df' ||
title === 'franchise' ||
title === '\u52a0\u76df\u30fb\u30d5\u30e9\u30f3\u30c1\u30e3\u30a4\u30ba'
)
}
/**
* 获取导航菜单列表
* @param {string} navType 导航类型(main/footer),不传默认main
@@ -44,19 +101,27 @@ function escapeHtml(text) {
*/
export async function fetchNavigationPublic(navType, baseUrl) {
const base = (baseUrl || import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
let url = `${base}/navigation/public`
if (navType) {
url += `?navType=${encodeURIComponent(navType)}`
}
const res = await fetch(url, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
const body = await res.json()
if (body.code !== 200) {
throw new Error(body.msg || '接口返回异常')
}
return Array.isArray(body.data) ? body.data : []
const safeType = navType ? String(navType).trim() : ''
return remember(
`navigation:${base}:${safeType || 'all'}`,
async () => {
let url = `${base}/navigation/public`
if (safeType) {
url += `?navType=${encodeURIComponent(safeType)}`
}
const res = await fetch(url, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
const body = await res.json()
if (body.code !== 200) {
throw new Error(body.msg || '接口返回异常')
}
const items = Array.isArray(body.data) ? body.data : []
return items.filter((item) => !isQualityTechNavItem(item) && !isJoinNavItem(item))
},
{ ttlMs: 15000, cacheEmpty: false }
)
}
/**
@@ -75,6 +140,13 @@ export function removePickupEntryFromPage() {
const li = a.closest('li.p_level1Item')
if (li) li.remove()
})
root.querySelectorAll('a').forEach((a) => {
const href = String(a.getAttribute('href') || '').toLowerCase()
const text = String(a.textContent || '').replace(/\s+/g, '').trim()
if (!href.includes('join.html') && !href.includes('page=join') && !text.includes('招商加盟')) return
const li = a.closest('li.p_level1Item')
if (li) li.remove()
})
})
}
@@ -328,8 +400,6 @@ function shouldShowFooterByPage() {
about: 'footer_show_about',
product: 'footer_show_product',
culture: 'footer_show_culture',
news: 'footer_show_news',
join: 'footer_show_join',
contact: 'footer_show_contact',
history: 'footer_show_history',
store: 'footer_show_store',
@@ -508,27 +578,19 @@ function mapHaihoPathToLocal(pathname) {
}
if (normalizePath === '/about/intro') return spaHref('page=about')
if (normalizePath === '/about/honor') return spaHref('page=about#c_static_001_P_4578-16941414442160')
if (normalizePath === '/Quality.html') return spaHref(`page=quality${finalHash}`)
if (normalizePath === '/about/tech') return spaHref(`page=quality${finalHash}`)
if (normalizePath === '/History.html') {
if (finalHash.includes('16941414442160')) return spaHref(`page=store`)
return spaHref(`page=history${finalHash}`)
}
if (normalizePath === '/Quality.html') return spaHref(`page=about${finalHash}`)
if (normalizePath === '/about/tech') return spaHref(`page=about${finalHash}`)
if (normalizePath === '/History.html') return spaHref(`page=history${finalHash}`)
if (normalizePath === '/about/timeline') return spaHref(`page=history${finalHash}`)
if (normalizePath === '/mendian.html') return spaHref(`page=store${finalHash}`)
if (normalizePath === '/about/store') return spaHref(`page=store${finalHash}`)
if (normalizePath === '/mendian.html') return spaHref(`page=about${finalHash}`)
if (normalizePath === '/about/store') return spaHref(`page=about${finalHash}`)
if (normalizePath === '/product') return spaHref(`page=product${finalHash}`)
if (normalizePath === '/product/2.html') return spaHref(`page=product${finalHash}`)
if (normalizePath === '/culture') return spaHref(`page=culture${finalHash}`)
if (normalizePath === '/news') return spaHref(`page=news${finalHash}`)
if (normalizePath === '/news/8') return spaHref(`page=culture${finalHash}`)
if (normalizePath === '/news/1') return spaHref(`page=news${finalHash}`)
if (normalizePath === '/news/4') return spaHref(`page=news&newsType=news${finalHash}`)
if (normalizePath === '/news/5') return spaHref(`page=news&newsType=culture${finalHash}`)
if (normalizePath === '/news/6') return spaHref(`page=news&newsType=media${finalHash}`)
if (normalizePath === '/join.html') return spaHref(`page=join${finalHash}`)
if (normalizePath === '/news' || normalizePath.startsWith('/news/')) return spaHref(`page=home${finalHash}`)
if (normalizePath === '/join.html') return spaHref(`page=home${finalHash}`)
if (normalizePath === '/contact.html') return spaHref(`page=contact${finalHash}`)
if (normalizePath.startsWith('/news/')) return spaHref(`page=news${finalHash}`)
if (normalizePath.startsWith('/clture/')) return spaHref(`page=culture${finalHash}`)
if (normalizePath.startsWith('/product/')) return spaHref(`page=product${finalHash}`)
if (normalizePath.startsWith('/about')) return spaHref(`page=about${finalHash}`)
-541
View File
@@ -1,541 +0,0 @@
/**
* 门户新闻动态(若依公开接口)
*/
import { nextTick } from 'vue'
import { resolveImageUrl } from '../utils/asset'
function escapeHtml(text) {
if (text == null || text === '') {
return ''
}
return String(text)
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;')
}
/** 列表页右侧日期:年/月 */
function formatNewsListDateParts(publishTime) {
if (!publishTime) {
return { ym: '' }
}
const d = new Date(publishTime)
if (Number.isNaN(d.getTime())) {
return { ym: '' }
}
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
return { ym: `${y} / ${m}` }
}
/**
* 获取新闻列表
* @param {string} baseUrl
* @param {string|null} newsType culture/news
* @param {number|null} pageNum
* @param {number|null} pageSize
* @returns {Promise<{ rows: Array, total: number }>}
*/
export async function fetchNewsPublic(baseUrl, newsType, pageNum, pageSize) {
const base = (baseUrl || import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
let url = `${base}/news/public`
const params = []
if (newsType) {
params.push(`newsType=${newsType}`)
}
if (pageNum) {
params.push(`pageNum=${pageNum}`)
}
if (pageSize) {
params.push(`pageSize=${pageSize}`)
}
if (params.length > 0) {
url += '?' + params.join('&')
}
const res = await fetch(url, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
const body = await res.json()
if (body.code !== 200) {
throw new Error(body.msg || '接口返回异常')
}
const payload = body.data
if (payload && typeof payload === 'object' && !Array.isArray(payload) && Array.isArray(payload.rows)) {
return {
rows: payload.rows,
total: Number(payload.total) || 0,
}
}
const arr = Array.isArray(payload) ? payload : []
return { rows: arr, total: arr.length }
}
/**
* 获取新闻详情
* @param {string} baseUrl
* @param {number} newsId
* @returns {Promise<Object>}
*/
export async function fetchNewsDetailPublic(baseUrl, newsId) {
const base = (baseUrl || import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const res = await fetch(`${base}/news/${newsId}/public`, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
const body = await res.json()
if (body.code !== 200) {
throw new Error(body.msg || '接口返回异常')
}
return body.data || null
}
/**
* 获取最新新闻
* @param {string} baseUrl
* @param {string|null} newsType
* @param {number} limit
* @returns {Promise<Array>}
*/
export async function fetchLatestNews(baseUrl, newsType, limit) {
const base = (baseUrl || import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
let url = `${base}/news/latest`
const params = []
if (newsType) {
params.push(`newsType=${newsType}`)
}
if (limit) {
params.push(`limit=${limit}`)
}
if (params.length > 0) {
url += '?' + params.join('&')
}
const res = await fetch(url, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
const body = await res.json()
if (body.code !== 200) {
throw new Error(body.msg || '接口返回异常')
}
return Array.isArray(body.data) ? body.data : []
}
const DEFAULT_NEWS_TABS = [
{ label: '华阳新闻', value: 'news' },
{ label: '行业动态', value: 'culture' },
{ label: '媒体报道', value: 'media' },
]
let newsTabs = [...DEFAULT_NEWS_TABS]
let newsTabsLoaded = false
let newsTabsLoadingPromise = null
export function getNewsTabs() {
return [...newsTabs]
}
export function getNewsTabTypes() {
return newsTabs.map((item) => item.value)
}
export function isNewsTabType(value) {
return getNewsTabTypes().includes(value)
}
export async function fetchNewsTypesPublic(baseUrl) {
const base = (baseUrl || import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const res = await fetch(`${base}/news/types`, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
const body = await res.json()
if (body.code !== 200) {
throw new Error(body.msg || '接口返回异常')
}
return Array.isArray(body.data) ? body.data : []
}
function normalizeNewsTabs(rawList) {
if (!Array.isArray(rawList)) return [...DEFAULT_NEWS_TABS]
const list = rawList
.map((item) => ({
label: String(item?.label || '').trim(),
value: String(item?.value || '').trim(),
sort: Number(item?.sort) || 0,
}))
.filter((item) => item.label && item.value)
.sort((a, b) => a.sort - b.sort)
.map((item) => ({ label: item.label, value: item.value }))
return list.length ? list : [...DEFAULT_NEWS_TABS]
}
export async function ensureNewsTabs() {
if (newsTabsLoaded) return getNewsTabs()
if (!newsTabsLoadingPromise) {
newsTabsLoadingPromise = fetchNewsTypesPublic(null)
.then((list) => {
newsTabs = normalizeNewsTabs(list)
newsTabsLoaded = true
return getNewsTabs()
})
.catch(() => {
newsTabs = [...DEFAULT_NEWS_TABS]
newsTabsLoaded = true
return getNewsTabs()
})
.finally(() => {
newsTabsLoadingPromise = null
})
}
return newsTabsLoadingPromise
}
const NEWS_LIST_PAGE_SIZE = 10
function getNewsListContainer() {
return document.querySelector(
'.e_loop-16 .p_list, .e_loop-20 .p_list, .news-list-container'
)
}
/** 归档列表旁分页容器:与 news-page-body 中 .e_loop-16 .p_page 对齐 */
function getNewsPaginationHost() {
const listHost = getNewsListContainer()
const loop = listHost?.closest('.e_loop-16') || listHost?.closest('.e_loop-20')
if (loop) {
return loop.querySelector('.p_page')
}
return document.querySelector('.e_loop-16.s_list .p_page, .e_loop-16 .p_page')
}
/**
* 当前窗口内要展示的页码(最多 max 个),用于底部分页条
*/
export function getNewsListPageNumbers(current, totalPages, max = 5) {
const tp = Math.max(0, Math.floor(totalPages))
const cur = Math.min(Math.max(1, Math.floor(current || 1)), Math.max(1, tp))
if (tp <= 0) return []
if (tp <= max) {
return Array.from({ length: tp }, (_, i) => i + 1)
}
const half = Math.floor(max / 2)
let start = cur - half
let end = cur + (max - half - 1)
if (start < 1) {
end += 1 - start
start = 1
}
if (end > tp) {
start -= end - tp
end = tp
if (start < 1) start = 1
}
const out = []
for (let p = start; p <= end; p++) out.push(p)
return out
}
function replaceNewsListUrl(newsType, pageNum) {
const next = new URLSearchParams(window.location.search)
next.set('page', 'news')
next.delete('newsId')
next.set('newsType', newsType)
if (pageNum <= 1) {
next.delete('newsPage')
} else {
next.set('newsPage', String(pageNum))
}
window.history.replaceState(null, '', `${window.location.pathname}?${next.toString()}`)
}
function renderNewsListPagination(newsType, pageNum, total, pageSize) {
const host = getNewsPaginationHost()
if (!host) {
return
}
const totalPages = Math.ceil(total / pageSize)
if (total <= 0 || totalPages <= 0) {
host.innerHTML = ''
host.style.display = 'none'
host.classList.add('huayang-news-pagination')
return
}
host.style.display = ''
const safeTotalPages = Math.max(1, totalPages)
const cur = Math.min(Math.max(1, pageNum), safeTotalPages)
const pages = getNewsListPageNumbers(cur, safeTotalPages, 5)
const prevDisabled = cur <= 1
const nextDisabled = cur >= safeTotalPages
const nums = pages
.map(
(p) =>
`<button type="button" class="page_a page_num${p === cur ? ' current' : ''}" data-page="${p}">${p}</button>`
)
.join('')
host.classList.add('huayang-news-pagination')
host.setAttribute('data-news-type', newsType)
host.setAttribute('data-current-page', String(cur))
host.setAttribute('data-total-pages', String(safeTotalPages))
host.innerHTML = `<div class="page_con">
<button type="button" class="page_a page_prev" aria-label="上一页" ${prevDisabled ? 'disabled' : ''}>&lt;</button>
${nums}
<button type="button" class="page_a page_next" aria-label="下一页" ${nextDisabled ? 'disabled' : ''}>&gt;</button>
</div>`
}
function ensureNewsPaginationClickDelegate() {
if (typeof window === 'undefined' || window.__huayangNewsPagerBound) {
return
}
window.__huayangNewsPagerBound = true
document.body.addEventListener('click', (e) => {
const btn = e.target.closest('.huayang-news-pagination button.page_a')
if (!btn || btn.disabled) return
const host = btn.closest('.huayang-news-pagination')
if (!host) return
const newsType = host.getAttribute('data-news-type')
if (!newsType) return
e.preventDefault()
let nextPage = parseInt(host.getAttribute('data-current-page') || '1', 10)
const totalPages = parseInt(host.getAttribute('data-total-pages') || '1', 10)
if (btn.classList.contains('page_prev')) {
nextPage = Math.max(1, nextPage - 1)
} else if (btn.classList.contains('page_next')) {
nextPage = Math.min(totalPages, nextPage + 1)
} else if (btn.classList.contains('page_num')) {
const v = parseInt(btn.getAttribute('data-page') || '1', 10)
if (Number.isFinite(v)) nextPage = v
} else {
return
}
replaceNewsListUrl(newsType, nextPage)
void injectNewsList(newsType)
})
}
/**
* 绑定归档新闻页顶部分类 Tab(e_loop-3),切换 URL 参数 newsType 并重新拉取列表
*/
export function bindNewsCategoryTabs() {
const tabRoot = document.querySelector('.e_loop-3 .p_list')
if (!tabRoot || tabRoot.dataset.huayangNewsTabsBound === '1') {
return
}
tabRoot.dataset.huayangNewsTabsBound = '1'
const tabLinks = tabRoot.querySelectorAll('.p_loopitem a')
const tabItems = getNewsTabs()
tabLinks.forEach((a, idx) => {
const tab = tabItems[idx]
const type = tab?.value
if (!type) return
if (tab.label) {
a.textContent = tab.label
}
a.setAttribute('href', `?page=news&newsType=${encodeURIComponent(type)}`)
a.addEventListener('click', (e) => {
e.preventDefault()
const next = new URLSearchParams(window.location.search)
next.set('page', 'news')
next.delete('newsId')
next.delete('newsPage')
next.set('newsType', type)
const qs = next.toString()
window.history.replaceState(null, '', `${window.location.pathname}?${qs}`)
injectNewsList(type)
syncNewsTabActiveState(idx)
})
})
const cur = new URLSearchParams(window.location.search).get('newsType') || 'news'
const activeIdx = Math.max(0, getNewsTabTypes().indexOf(cur))
syncNewsTabActiveState(activeIdx)
}
function syncNewsTabActiveState(activeIdx) {
const items = document.querySelectorAll('.e_loop-3 .p_list .p_loopitem')
items.forEach((el, i) => {
el.classList.toggle('huayang-news-tab--active', i === activeIdx)
})
}
/** 根据当前列表请求的 newsType 高亮对应 Tab(避免与 URL/bootstrap 竞态) */
function syncNewsTabHighlightForType(newsType) {
const tabTypes = getNewsTabTypes()
const fallbackType = tabTypes[0] || 'news'
const t = tabTypes.includes(newsType) ? newsType : fallbackType
const idx = Math.max(0, tabTypes.indexOf(t))
syncNewsTabActiveState(idx)
}
/**
* 将新闻列表注入到页面
* 注入目标:新闻列表页的列表容器
*/
export async function injectNewsList(newsType) {
ensureNewsPaginationClickDelegate()
await ensureNewsTabs()
const newsListHost = getNewsListContainer()
if (!newsListHost) {
return
}
const params = new URLSearchParams(window.location.search)
let pageNum = parseInt(params.get('newsPage') || '1', 10)
if (!Number.isFinite(pageNum) || pageNum < 1) {
pageNum = 1
}
newsListHost.innerHTML = ''
const pack = await fetchNewsPublic(null, newsType, pageNum, NEWS_LIST_PAGE_SIZE)
const total = Number(pack.total) || 0
const totalPages = Math.max(0, Math.ceil(total / NEWS_LIST_PAGE_SIZE))
if (total > 0 && totalPages > 0 && pageNum > totalPages) {
replaceNewsListUrl(newsType, totalPages)
return injectNewsList(newsType)
}
const newsList = pack.rows || []
if (!newsList.length) {
if (total > 0 && pageNum > 1) {
replaceNewsListUrl(newsType, 1)
return injectNewsList(newsType)
}
newsListHost.innerHTML = '<div class="empty-tip">暂无新闻</div>'
renderNewsListPagination(newsType, pageNum, total, NEWS_LIST_PAGE_SIZE)
syncNewsTabHighlightForType(newsType)
bindNewsCategoryTabs()
return
}
const newsHtml = newsList.map((news) => {
const cover = news.newsCover ? resolveImageUrl(news.newsCover) : '/images/no-news.png'
const { ym } = formatNewsListDateParts(news.publishTime)
return `
<div class="cbox-16 p_loopitem huayang-news-list-item">
<div class="huayang-news-list-item__inner">
<a class="huayang-news-list-item__thumb" href="?page=news&newsId=${news.newsId}">
<img src="${escapeHtml(cover)}" alt="${escapeHtml(news.newsTitle)}" loading="lazy" />
</a>
<div class="huayang-news-list-item__main">
<a class="huayang-news-list-item__title" href="?page=news&newsId=${news.newsId}">${escapeHtml(news.newsTitle)}</a>
</div>
<div class="huayang-news-list-item__date">
<span class="huayang-news-list-item__ym">${escapeHtml(ym)}</span>
</div>
</div>
</div>
`
}).join('')
newsListHost.innerHTML = newsHtml
renderNewsListPagination(newsType, pageNum, total, NEWS_LIST_PAGE_SIZE)
syncNewsTabHighlightForType(newsType)
bindNewsCategoryTabs()
if (window.setupSwiperFallback && typeof window.setupSwiperFallback === 'function') {
nextTick(() => {
window.setupSwiperFallback()
})
}
}
/**
* 新闻动态页通栏横幅(固定板块 news_banner)
*/
export async function injectNewsPageBanner() {
const base = (import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
let res
try {
res = await fetch(`${base}/fixedSection/code/news_banner`, { credentials: 'omit', cache: 'no-store' })
} catch {
return
}
if (!res.ok) {
return
}
const body = await res.json()
if (body.code !== 200 || !body.data) {
return
}
const section = body.data
const useHomeBackground = String(section.sectionText || '').trim() === '1'
let url = ''
if (useHomeBackground) {
try {
const homeRes = await fetch(`${base}/fixedSection/code/section1`, { credentials: 'omit', cache: 'no-store' })
if (homeRes.ok) {
const homeBody = await homeRes.json()
const homeSection = homeBody?.code === 200 ? homeBody.data : null
const homeItems = Array.isArray(homeSection?.itemList) ? homeSection.itemList : []
const firstActive = homeItems.find((it) => it && (it.status === '0' || it.status === 0)) || homeItems[0]
if (firstActive?.itemImage) {
url = resolveImageUrl(firstActive.itemImage)
}
}
} catch {
// 忽略首页背景读取失败,继续走新闻横幅兜底图
}
}
if (!url) {
url = section.backgroundImage ? resolveImageUrl(section.backgroundImage) : ''
}
if (!url && Array.isArray(section.itemList) && section.itemList.length > 0) {
const first =
section.itemList.find((it) => it.status === '0' || it.status === 0) || section.itemList[0]
if (first && first.itemImage) {
url = resolveImageUrl(first.itemImage)
}
}
if (!url) {
return
}
const root = document.querySelector('.e_bannerA-1')
if (!root) {
return
}
root.querySelectorAll('.p_img img').forEach((img) => {
img.src = url
})
}
/**
* 将新闻详情注入到页面
* 注入目标:新闻详情页的标题、内容、发布时间等
*/
export async function injectNewsDetail(newsId) {
const newsListHost = document.querySelector('.e_loop-16 > div') || document.querySelector('.e_loop-16')
if (!newsListHost) {
return
}
newsListHost.innerHTML = ''
const news = await fetchNewsDetailPublic(null, newsId)
if (!news) {
newsListHost.innerHTML = '<div class="empty-tip" style="text-align:center; padding: 50px;">抱歉,该文章不存在或已被删除</div>'
return
}
const timeHtml = news.publishTime ? new Date(news.publishTime).toLocaleDateString() : ''
const coverHtml = news.newsCover
? `<div class="news-cover-thumb"><img src="${escapeHtml(resolveImageUrl(news.newsCover))}" alt="${escapeHtml(news.newsTitle)}"></div>`
: ''
newsListHost.innerHTML = `
<div class="news-detail-container" style="padding: 20px; max-width: 900px; margin: 0 auto; background: #fff; box-shadow: 0 0 10px rgba(0,0,0,0.05); border-radius: 8px;">
<h1 class="e_text-30" style="font-size: 28px; text-align: center; margin-bottom: 20px; color: #333;">${escapeHtml(news.newsTitle)}</h1>
<div style="text-align: center; color: #888; margin-bottom: 30px; border-bottom: 1px solid #eee; padding-bottom: 15px; font-size: 14px;">
<span style="margin-right: 25px;">发布时间:${timeHtml}</span>
<span style="margin-right: 25px;">作者:${escapeHtml(news.newsAuthor || '华阳食品')}</span>
<span>阅读量:${news.readCount || 0}</span>
</div>
${coverHtml}
<div class="e_richText-40 news-rich-text" style="line-height: 1.8; font-size: 16px; color: #444; padding: 0 20px;">
${news.newsContent || ''}
</div>
</div>
`
}
+102 -102
View File
@@ -2,14 +2,22 @@
* 门户产品中心(若依公开接口)
*/
import { nextTick } from 'vue'
import Swiper from 'swiper/bundle'
import 'swiper/css/bundle'
import { resolveImageUrl } from '../utils/asset'
import { resolveImageUrl, resolveRichImageHtml } from '../utils/asset'
import { spaHref } from '../utils/publicPath'
import { fetchContactInfoPublic } from './contact'
import { fetchSiteConfigPublic } from './siteConfig'
import { currentLang } from './language'
import i18n from '../i18n'
const BLANK_IMAGE_DATA_URI = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=='
let productDetailSwiperPromise = null
function ui(key, fallback = '') {
const v = i18n.global.t(key)
return v && v !== key ? v : fallback
}
function getLangParam() {
return encodeURIComponent(String(currentLang.value || localStorage.getItem('huayang_lang') || 'zh_cn'))
}
function escapeHtml(text) {
if (text == null || text === '') {
@@ -23,6 +31,46 @@ function escapeHtml(text) {
.replace(/'/g, '&#39;')
}
/**
* 产品富文本中「写死在 HTML 里、后台未拆字段」的文案:用 i18n 按当前语言替换。
* 1) 可选占位符 [[HY_I18N:ui.product.rich.xxx]](便于以后在编辑器中插入)
* 2) 已知归档页固定字面量(如粉红鲑系列标题、规格表标签、水印等)
*/
function localizeEmbeddedProductRichHtml(html) {
if (!html || typeof html !== 'string') {
return html
}
let out = html.replace(/\[\[HY_I18N:([\w.]+)\]\]/g, (_, rawKey) => {
const key = String(rawKey || '').trim()
if (!key) return ''
const v = ui(key)
return escapeHtml(v && v !== key ? v : '')
})
/** @type {Array<[string, string]>} 顺序:先长后短,避免子串误伤 */
const literalToI18nKey = [
['FROZEN PINK SALMON SERIES', 'ui.product.rich.salmon_line_en_caps'],
['冻粉红鲑鱼系列', 'ui.product.rich.salmon_line_zh'],
['PINK SALMON', 'ui.product.rich.salmon_wordmark'],
['カラフトマス', 'ui.product.rich.salmon_line_ja'],
['COUNTRY OF ORIGIN', 'ui.product.rich.country_origin_subcaption'],
['LATIN NAME', 'ui.product.rich.latin_name_subcaption'],
['原产国', 'ui.product.rich.country_origin_label'],
['学名', 'ui.product.rich.scientific_name_label'],
['俄罗斯,美国', 'ui.product.rich.salmon_origin_zh'],
['俄罗斯,美国', 'ui.product.rich.salmon_origin_zh'],
['俄罗斯、美国', 'ui.product.rich.salmon_origin_zh'],
['RUSSIA, US', 'ui.product.rich.salmon_origin_en'],
['华阳文化', 'ui.product.rich.watermark_brand']
]
for (const [literal, i18nKey] of literalToI18nKey) {
if (!out.includes(literal)) continue
const v = ui(i18nKey)
if (!v || v === i18nKey) continue
out = out.split(literal).join(escapeHtml(v))
}
return resolveRichImageHtml(out)
}
/**
* 解析后台/管理端上传的图片字段:逗号分隔、JSON 数组、或带引号片段
*/
@@ -51,13 +99,34 @@ function parseImageListField(raw) {
.filter(Boolean)
}
async function ensureProductDetailSwiper() {
if (typeof window !== 'undefined' && window.Swiper) {
return window.Swiper
}
if (!productDetailSwiperPromise) {
productDetailSwiperPromise = import('swiper/bundle')
.then((mod) => {
const SwiperClass = mod?.default || mod?.Swiper || null
if (SwiperClass && typeof window !== 'undefined' && !window.Swiper) {
window.Swiper = SwiperClass
}
return SwiperClass
})
.catch((error) => {
productDetailSwiperPromise = null
throw error
})
}
return productDetailSwiperPromise
}
/**
* @param {string} baseUrl 如 /site 或完整域名
* @returns {Promise<Array>}
*/
export async function fetchProductCategoryPublic(baseUrl) {
const base = (baseUrl || import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const res = await fetch(`${base}/product/category/public`, { credentials: 'omit', cache: 'no-store' })
const res = await fetch(`${base}/product/category/public?lang=${getLangParam()}`, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
@@ -84,6 +153,7 @@ export async function fetchProductPublic(baseUrl, categoryId, keyword) {
if (keyword) {
params.push(`keyword=${encodeURIComponent(keyword)}`)
}
params.push(`lang=${getLangParam()}`)
if (params.length > 0) {
url += '?' + params.join('&')
}
@@ -106,7 +176,7 @@ export async function fetchProductPublic(baseUrl, categoryId, keyword) {
export async function fetchProductDetailPublic(baseUrl, productId) {
const base = (baseUrl || import.meta.env.VITE_SITE_API_BASE || '/site').replace(/\/$/, '')
const idSeg = encodeURIComponent(String(productId).trim())
const res = await fetch(`${base}/product/${idSeg}/public`, { credentials: 'omit', cache: 'no-store' })
const res = await fetch(`${base}/product/${idSeg}/public?lang=${getLangParam()}`, { credentials: 'omit', cache: 'no-store' })
if (!res.ok) {
throw new Error(`HTTP ${res.status}`)
}
@@ -325,7 +395,7 @@ function buildRelatedProductsSection(related) {
.join('')
return `
<section class="haiho-product-detail-related" aria-labelledby="haiho-related-heading">
<h2 id="haiho-related-heading" class="haiho-product-detail-related__title">相关产品</h2>
<h2 id="haiho-related-heading" class="haiho-product-detail-related__title">${escapeHtml(ui('ui.product.related'))}</h2>
<div class="haiho-product-detail-related__grid">${items}</div>
</section>`
}
@@ -349,11 +419,13 @@ export async function injectProductList(categoryId, keyword) {
productGridHost.innerHTML = ''
let products = await fetchProductPublic(null, categoryId, keyword)
if ((!products || !products.length) && categoryId != null && String(categoryId).trim() !== '') {
products = await fetchProductPublic(null, null, keyword)
// 分类页严格过滤:选了分类就只展示该分类,避免混入其他分类数据。
if (categoryId != null && String(categoryId).trim() !== '') {
const selectedCategoryId = String(categoryId).trim()
products = (products || []).filter((p) => String(p?.categoryId ?? '') === selectedCategoryId)
}
if (!products || !products.length) {
productGridHost.innerHTML = '<div class="empty-tip">暂无产品</div>'
productGridHost.innerHTML = `<div class="empty-tip">${escapeHtml(ui('ui.empty.products'))}</div>`
return
}
@@ -362,7 +434,6 @@ export async function injectProductList(categoryId, keyword) {
const productsHtml = products.map(p => {
const images = parseImageListField(p.productImages)
const firstImage = images.length > 0 ? resolveImageUrl(images[0]) : '/images/no-product.png'
const priceHtml = p.productPrice ? `<span class="price">¥${p.productPrice}</span>` : ''
const detailHref = escapeHtml(
spaHref(`page=product&productId=${encodeURIComponent(String(p.productId))}`)
)
@@ -382,11 +453,14 @@ export async function injectProductList(categoryId, keyword) {
<a href="${detailHref}">${escapeHtml(p.productName)}</a>
</p>
</div>
${priceHtml ? `<div class="cbox-25 p_item"><p class="e_text-26 s_price">${priceHtml}</p></div>` : ''}
</div>
<div class="haiho-product-card__actions" role="group" aria-label="产品操作">
<a class="haiho-product-card__action haiho-product-card__action--contact" href="${contactListHref}">联系我们</a>
<a class="haiho-product-card__action haiho-product-card__action--detail" href="${detailHref}">产品详情</a>
<div class="haiho-product-card__actions" role="group" aria-label="${escapeHtml(ui('ui.product.operate'))}">
<a class="haiho-product-card__action haiho-product-card__action--contact" href="${contactListHref}">${escapeHtml(
ui('ui.product.actions.contact')
)}</a>
<a class="haiho-product-card__action haiho-product-card__action--detail" href="${detailHref}">${escapeHtml(
ui('ui.product.actions.detail')
)}</a>
</div>
</div>
</div>
@@ -425,7 +499,7 @@ export async function injectProductDetail(productId) {
const product = await fetchProductDetailPublic(null, productId)
if (!product) {
productGridHost.innerHTML =
'<div class="empty-tip" style="text-align:center; padding: 50px;">抱歉,该产品不存在或已被下架</div>'
`<div class="empty-tip" style="text-align:center; padding: 50px;">${escapeHtml(ui('ui.culture.content_not_found'))}</div>`
return
}
@@ -449,69 +523,9 @@ export async function injectProductDetail(productId) {
related = related.slice(0, 24)
const listHref = escapeHtml(spaHref('page=product'))
const contactHref = escapeHtml(spaHref('page=contact#c_static_001-1669701780184'))
let telDisplay = '4006-535-700'
let telHrefRaw = 'tel:4006-535-700'
let mailDisplay = 'haiho@haihofoods.com'
let addrDisplay = '中国•烟台•芝罘岛东路51号'
try {
const siteConfig = await fetchSiteConfigPublic()
const configPhone = siteConfig?.product_detail_contact_phone == null
? ''
: String(siteConfig.product_detail_contact_phone).trim()
const configEmail = siteConfig?.product_detail_contact_email == null
? ''
: String(siteConfig.product_detail_contact_email).trim()
const configAddress = siteConfig?.product_detail_contact_address == null
? ''
: String(siteConfig.product_detail_contact_address).trim()
if (configPhone) {
telDisplay = configPhone
const digits = telDisplay.replace(/[^\d+]/g, '')
telHrefRaw = digits ? `tel:${digits}` : `tel:${telDisplay.replace(/\s/g, '')}`
}
if (configEmail) {
mailDisplay = configEmail
}
if (configAddress) {
addrDisplay = configAddress
}
const contacts = await fetchContactInfoPublic()
if (Array.isArray(contacts) && contacts.length) {
const phoneItem = contacts.find((c) => c.contactType === 'phone')
const emailItem = contacts.find((c) => c.contactType === 'email')
const addressItem = contacts.find((c) => c.contactType === 'address')
if (!configPhone && phoneItem && String(phoneItem.contactValue || '').trim() !== '') {
telDisplay = String(phoneItem.contactValue).trim()
const digits = telDisplay.replace(/[^\d+]/g, '')
telHrefRaw = digits ? `tel:${digits}` : `tel:${telDisplay.replace(/\s/g, '')}`
}
if (!configEmail && emailItem && String(emailItem.contactValue || '').trim() !== '') {
mailDisplay = String(emailItem.contactValue).trim()
}
if (!configAddress && addressItem && String(addressItem.contactValue || '').trim() !== '') {
addrDisplay = String(addressItem.contactValue).trim()
}
}
} catch {
/* 与页脚一致接口失败时沿用默认文案 */
}
const telHref = escapeHtml(telHrefRaw)
const telDisplayEsc = escapeHtml(telDisplay)
const mailDisplayEsc = escapeHtml(mailDisplay)
const addrDisplayEsc = escapeHtml(addrDisplay)
const mailHrefEsc = escapeHtml(`mailto:${mailDisplay}`)
const images = parseImageListField(product.productImages)
const priceHtml = product.productPrice
? `<div class="haiho-product-detail-price">参考价格:<strong>¥${escapeHtml(String(product.productPrice))}</strong></div>`
: ''
let imagesHtml = ''
if (images.length === 0) {
const ph = escapeHtml(BLANK_IMAGE_DATA_URI)
@@ -538,8 +552,8 @@ export async function injectProductDetail(productId) {
}
const descSafe = product.productDesc
? String(product.productDesc)
: '<p class="haiho-product-detail-desc__empty">暂无详细描述</p>'
? localizeEmbeddedProductRichHtml(String(product.productDesc))
: `<p class="haiho-product-detail-desc__empty">${escapeHtml(ui('ui.empty.product_desc'))}</p>`
const qualRaw = product.qualificationImages ?? product.qualification_images
const qualUrls = parseImageListField(qualRaw)
@@ -553,7 +567,7 @@ export async function injectProductDetail(productId) {
.join('')
qualHtml = `
<section class="haiho-product-detail-qual" aria-labelledby="haiho-qual-heading">
<h2 id="haiho-qual-heading" class="haiho-product-detail-qual__title">资质与认证</h2>
<h2 id="haiho-qual-heading" class="haiho-product-detail-qual__title">${escapeHtml(ui('ui.product.qualifications'))}</h2>
<div class="haiho-product-detail-qual__grid">${qualItems}</div>
</section>`
}
@@ -563,28 +577,13 @@ export async function injectProductDetail(productId) {
productGridHost.innerHTML = `
<div class="haiho-product-detail-page">
<div class="haiho-product-detail-layout">
<aside class="haiho-product-detail-sidebar" aria-label="联系方式">
<div class="haiho-product-detail-sidecard">
<h3 class="haiho-product-detail-sidecard__title">联系方式</h3>
<p class="haiho-product-detail-sidecard__block"><strong>电话</strong><br><a href="${telHref}">${telDisplayEsc}</a></p>
<p class="haiho-product-detail-sidecard__block"><strong>邮箱</strong><br><a href="${mailHrefEsc}">${mailDisplayEsc}</a></p>
<p class="haiho-product-detail-sidecard__block"><strong>地址</strong><br>${addrDisplayEsc}</p>
<a class="haiho-product-detail-back" href="${listHref}">返回产品列表</a>
</div>
</aside>
<div class="haiho-product-detail-main">
<a class="haiho-product-detail-back" href="${listHref}">${escapeHtml(ui('ui.product.back_list'))}</a>
${imagesHtml}
<h1 class="haiho-product-detail-title">${escapeHtml(product.productName || '')}</h1>
${priceHtml}
<div class="haiho-product-detail-meta" role="group" aria-label="快捷联系">
<a class="haiho-product-detail-meta__link" href="${telHref}">${telDisplayEsc}</a>
<hr class="haiho-product-detail-meta__hr">
<a class="haiho-product-detail-meta__link" href="${mailHrefEsc}">${mailDisplayEsc}</a>
</div>
${qualHtml}
<div class="haiho-product-detail-desc e_richText-40">${descSafe}</div>
${relatedHtml}
<p class="haiho-product-detail-inquiry-hint">需要<strong>产品咨询</strong>请填写本页下方表单,或<a href="${contactHref}">联系我们</a>。</p>
</div>
</div>
</div>`
@@ -592,8 +591,9 @@ export async function injectProductDetail(productId) {
if (images.length > 1) {
await nextTick()
const swiperEl = productGridHost.querySelector('.product-detail-swiper .swiper')
if (swiperEl && typeof Swiper !== 'undefined') {
productGridHost.__productDetailSwiper = new Swiper(swiperEl, {
const SwiperClass = swiperEl ? await ensureProductDetailSwiper().catch(() => null) : null
if (swiperEl && SwiperClass) {
productGridHost.__productDetailSwiper = new SwiperClass(swiperEl, {
direction: 'horizontal',
slidesPerView: 1,
spaceBetween: 10,
@@ -647,7 +647,7 @@ export function initProductInquiryForm(productId) {
const inquiryMessage = messageInput?.value?.trim() || ''
if (!inquiryName || !inquiryPhone || !inquiryMessage) {
alert('请完整填写姓名、电话和需求信息')
alert(ui('ui.form.inquiry_required'))
return
}
@@ -661,13 +661,13 @@ export function initProductInquiryForm(productId) {
inquiryMessage
})
if (result?.code === 200) {
alert(result?.msg || '咨询提交成功,我们会尽快与您联系!')
alert(result?.msg || ui('ui.status.submit_ok_contact'))
form.reset()
} else {
alert(result?.msg || '提交失败,请稍后重试')
alert(result?.msg || ui('ui.status.submit_fail_retry'))
}
} catch {
alert('提交失败,请稍后重试')
alert(ui('ui.status.submit_fail_retry'))
}
}
+490 -84
View File
@@ -2,30 +2,399 @@
* 站点全局配置接口
*/
import { resolveImageUrl } from '../utils/asset'
import { remember } from '../utils/asyncCache'
import { patchFooterCompanyRichAddress } from './contact'
import i18n from '../i18n'
const API_BASE = import.meta.env.VITE_SITE_API_BASE || '/site'
const FOOTER_BG_STYLE_ID = 'haiho-footer-bg-style'
const FOOTER_BG_SCOPE_ATTR = 'data-haiho-footer-bg-scope'
const NAV_MENU_BG_STYLE_ID = 'haiho-nav-menu-left-bg-style'
function translatedValue(key) {
const v = i18n.global.t(key)
if (!v || v === key) return ''
return String(v).trim()
}
function escapeCssUrl(raw) {
return String(raw || '')
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\)/g, '\\)')
}
function escapeHtml(raw) {
return String(raw == null ? '' : raw)
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#39;')
}
function escapeAttr(raw) {
return escapeHtml(raw)
}
/** 联系我们页右侧联系方式列表由 injectContactPageContent 单独渲染,勿被全站配置覆盖 */
function isContactPageListNode(el) {
return Boolean(el?.closest?.('#c_static_001-1669701780184 .e_loop-21'))
}
function firstContactLine(raw) {
const lines = String(raw || '')
.split(/\r?\n/)
.map((line) => line.trim())
.filter(Boolean)
return lines[0] || ''
}
/**
* 重建页脚公司信息块(.e_richText-81):
* 原始模板只有"E-mail:"、"地址:"等标签,没有为值预留位置;
* 这里按 footer_company_name / contact_phone / contact_email / contact_address
* 重新拼装 innerHTML,保证 4 项都能完整渲染(任一项为空则不输出该行)。
* 注意:若用户配置了 footer_company_html,会在调用方稍后用 innerHTML 覆盖以兼容自定义富文本。
*/
function rebuildFooterCompanyBlockFromFields(configs) {
if (typeof document === 'undefined') return
const blocks = document.querySelectorAll(
'.s_tmpl_footer .e_richText-81, [data-haiho-footer-bg-scope="1"] .e_richText-81, .e_container-60 .e_richText-81'
)
if (!blocks.length) return
const name = configs.footer_company_name == null ? '' : String(configs.footer_company_name).trim()
const phone = firstContactLine(configs.contact_phone)
const email = firstContactLine(configs.contact_email)
const address = configs.contact_address == null ? '' : String(configs.contact_address).trim()
if (!name && !phone && !email && !address) return
// 层级参考门户参考稿:标签小号灰;电话/邮箱大号加粗红;公司名与地址中等深灰
const lbl = 'font-size:13px;line-height:1.5;color:#6b7280;margin:0;'
const body = 'font-size:18px;line-height:1.65;color:#374151;margin:0;'
const valRed =
'font-size:32px;line-height:1.25;font-weight:700;color:#d8231d;text-decoration:none;display:inline-block;margin:2px 0 14px;'
const gap = 'margin:0 0 4px;'
const parts = []
if (name) {
parts.push(`<p style="${body}font-weight:500;margin:0 0 14px;">${escapeHtml(name)}</p>`)
}
if (phone) {
const telHref = phone.replace(/[^\d+\-]/g, '')
parts.push(`<p style="${lbl}${gap}">服务热线:</p>`)
parts.push(
`<p style="margin:0;"><a href="tel:${escapeAttr(telHref)}" style="${valRed}">${escapeHtml(phone)}</a></p>`
)
}
if (email) {
parts.push(`<p style="${lbl}${gap}">E-mail:</p>`)
parts.push(
`<p style="margin:0;"><a href="mailto:${escapeAttr(email)}" style="${valRed}">${escapeHtml(email)}</a></p>`
)
}
if (address) {
parts.push(`<p style="${lbl}${gap}">地址:</p>`)
parts.push(`<p style="${body}margin:0;">${escapeHtml(address)}</p>`)
}
const html = parts.join('\n')
blocks.forEach((el) => {
el.innerHTML = html
})
}
function collectFooterBgScopeElements() {
if (typeof document === 'undefined') return []
const scopes = new Set()
const addScope = (el) => {
if (!el || !(el instanceof Element)) return
scopes.add(el)
}
document.querySelectorAll('.s_tmpl_footer').forEach((el) => addScope(el))
document.querySelectorAll('.e_bottomNav-47').forEach((nav) => {
const scope =
nav.closest('.s_tmpl_footer') ||
nav.closest('.swiper-slide') ||
nav.closest('.p_gridbox') ||
nav.closest('.e_container-74') ||
nav.parentElement
addScope(scope)
})
return Array.from(scopes)
}
function markFooterBgScopes() {
if (typeof document === 'undefined') return []
document.querySelectorAll(`[${FOOTER_BG_SCOPE_ATTR}="1"]`).forEach((el) => {
el.removeAttribute(FOOTER_BG_SCOPE_ATTR)
})
const scopes = collectFooterBgScopeElements()
scopes.forEach((el) => {
el.setAttribute(FOOTER_BG_SCOPE_ATTR, '1')
})
return scopes
}
function upsertFooterBackgroundStyle({ footerBgUrl }) {
if (typeof document === 'undefined') return
const scopedRoots = markFooterBgScopes()
let styleEl = document.getElementById(FOOTER_BG_STYLE_ID)
const hasFooterBg = !!footerBgUrl && scopedRoots.length > 0
if (!hasFooterBg) {
if (styleEl) styleEl.remove()
return
}
if (!styleEl) {
styleEl = document.createElement('style')
styleEl.id = FOOTER_BG_STYLE_ID
document.head.appendChild(styleEl)
}
styleEl.textContent = `
body [${FOOTER_BG_SCOPE_ATTR}="1"] {
background-image: url("${escapeCssUrl(footerBgUrl)}") !important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: cover !important;
}
body [${FOOTER_BG_SCOPE_ATTR}="1"] .e_bottomNav-47 {
background-image: url("${escapeCssUrl(footerBgUrl)}") !important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: cover !important;
}
body [${FOOTER_BG_SCOPE_ATTR}="1"] .e_bottomNav-47 .p_level1Box {
background-image: url("${escapeCssUrl(footerBgUrl)}") !important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: cover !important;
}
body [${FOOTER_BG_SCOPE_ATTR}="1"] .e_container-74,
body [${FOOTER_BG_SCOPE_ATTR}="1"] .e_container-91,
body [${FOOTER_BG_SCOPE_ATTR}="1"] .e_container-60,
body [${FOOTER_BG_SCOPE_ATTR}="1"] .cbox-60-0,
body [${FOOTER_BG_SCOPE_ATTR}="1"] .cbox-60-1,
body [${FOOTER_BG_SCOPE_ATTR}="1"] .cbox-60-2,
body [${FOOTER_BG_SCOPE_ATTR}="1"] .e_bottomNav-47 .p_level1Item,
body [${FOOTER_BG_SCOPE_ATTR}="1"] .e_bottomNav-47 .p_menuItem {
background-color: transparent !important;
background-image: none !important;
}
`
}
function applyFooterBackgroundInline({ footerBgUrl }) {
if (typeof document === 'undefined') return
const scopedRoots = markFooterBgScopes()
const setBg = (el, url) => {
if (!el) return
if (!url) {
el.style.removeProperty('background-image')
el.style.removeProperty('background-repeat')
el.style.removeProperty('background-position')
el.style.removeProperty('background-size')
return
}
const safe = String(url).replace(/\\/g, '\\\\').replace(/"/g, '\\"')
el.style.setProperty('background-image', `url("${safe}")`, 'important')
el.style.setProperty('background-repeat', 'no-repeat', 'important')
el.style.setProperty('background-position', 'center', 'important')
el.style.setProperty('background-size', 'cover', 'important')
}
// 整个页脚统一一张背景图(同时保证底部导航栏本身也被覆盖)
scopedRoots.forEach((el) => setBg(el, footerBgUrl))
document.querySelectorAll(`[${FOOTER_BG_SCOPE_ATTR}="1"] .e_bottomNav-47`).forEach((el) => setBg(el, footerBgUrl))
document
.querySelectorAll(`[${FOOTER_BG_SCOPE_ATTR}="1"] .e_bottomNav-47 .p_level1Box`)
.forEach((el) => setBg(el, footerBgUrl))
// 子层透明,避免遮挡父层背景
document
.querySelectorAll(
`[${FOOTER_BG_SCOPE_ATTR}="1"] .e_container-74, [${FOOTER_BG_SCOPE_ATTR}="1"] .e_container-91, [${FOOTER_BG_SCOPE_ATTR}="1"] .e_container-60, [${FOOTER_BG_SCOPE_ATTR}="1"] .cbox-60-0, [${FOOTER_BG_SCOPE_ATTR}="1"] .cbox-60-1, [${FOOTER_BG_SCOPE_ATTR}="1"] .cbox-60-2, [${FOOTER_BG_SCOPE_ATTR}="1"] .e_bottomNav-47, [${FOOTER_BG_SCOPE_ATTR}="1"] .e_bottomNav-47 .p_level1Box`
)
.forEach((el) => {
el.style.setProperty('background-color', 'transparent', 'important')
if (!el.classList.contains('e_bottomNav-47') && !el.classList.contains('p_level1Box')) {
el.style.setProperty('background-image', 'none', 'important')
}
})
document
.querySelectorAll(
`[${FOOTER_BG_SCOPE_ATTR}="1"] .e_bottomNav-47 .p_level1Item, [${FOOTER_BG_SCOPE_ATTR}="1"] .e_bottomNav-47 .p_menuItem`
)
.forEach((el) => {
el.style.setProperty('background-color', 'transparent', 'important')
el.style.setProperty('background-image', 'none', 'important')
})
}
function setNavMenuBackgroundInline(url, transparent = false) {
if (typeof document === 'undefined') return
document.querySelectorAll('.header ul.p_level1Box, .header ul.p_level1Box > .navitem').forEach((el) => {
if (transparent) {
el.style.setProperty('background-image', 'none', 'important')
el.style.setProperty('background-color', 'transparent', 'important')
el.style.removeProperty('background-repeat')
el.style.removeProperty('background-position')
el.style.removeProperty('background-size')
return
}
const safe = String(url).replace(/\\/g, '\\\\').replace(/"/g, '\\"')
el.style.setProperty('background-image', `url("${safe}")`, 'important')
el.style.setProperty('background-repeat', 'no-repeat', 'important')
el.style.setProperty('background-position', 'center', 'important')
el.style.setProperty('background-size', 'cover', 'important')
el.style.setProperty('background-color', 'transparent', 'important')
})
document.querySelectorAll('.header').forEach((el) => {
el.style.setProperty('background-image', 'none', 'important')
el.style.setProperty('background-color', 'transparent', 'important')
})
document.querySelectorAll('.header .leftNav').forEach((el) => {
el.style.setProperty('background', 'transparent', 'important')
})
}
function upsertNavMenuBackgroundStyle({ navMenuBgUrl, transparent = false }) {
if (typeof document === 'undefined') return
let styleEl = document.getElementById(NAV_MENU_BG_STYLE_ID)
if (!navMenuBgUrl && !transparent) {
if (styleEl) styleEl.remove()
return
}
if (!styleEl) {
styleEl = document.createElement('style')
styleEl.id = NAV_MENU_BG_STYLE_ID
document.head.appendChild(styleEl)
}
const menuBgRules = transparent
? `
body .haiho-page .header ul.p_level1Box,
body .header ul.p_level1Box,
body .haiho-page .header ul.p_level1Box > .navitem,
body .header ul.p_level1Box > .navitem {
background-image: none !important;
background-color: transparent !important;
}`
: `
body .haiho-page .header ul.p_level1Box,
body .header ul.p_level1Box,
body .haiho-page .header ul.p_level1Box > .navitem,
body .header ul.p_level1Box > .navitem {
background-image: url("${escapeCssUrl(navMenuBgUrl)}") !important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: cover !important;
background-color: transparent !important;
}`
styleEl.textContent = `
body .haiho-page .header,
body .header {
background-image: none !important;
background-color: transparent !important;
}
body .haiho-page .header .leftNav,
body .header .leftNav {
background: transparent !important;
}
${menuBgRules}
`
}
export function applyNavMenuLeftBackground(configs = null) {
const source = configs || (typeof window !== 'undefined' ? window.__haihoSiteConfigs : {}) || {}
const rawMenuBg = source.nav_menu_left_bg
const menuBgTrim = rawMenuBg != null ? String(rawMenuBg).trim() : ''
if (!menuBgTrim) {
upsertNavMenuBackgroundStyle({ navMenuBgUrl: '' })
return
}
const lower = menuBgTrim.toLowerCase()
if (lower === 'transparent' || lower === 'none') {
upsertNavMenuBackgroundStyle({ navMenuBgUrl: '', transparent: true })
setNavMenuBackgroundInline('', true)
return
}
const bg = resolveImageUrl(menuBgTrim)
if (!bg) return
upsertNavMenuBackgroundStyle({ navMenuBgUrl: bg })
setNavMenuBackgroundInline(bg)
}
function resolveFooterBackgroundUrl(configs = {}) {
const rawFooterNavBg = configs.footer_nav_bg
const footerNavBgTrim = rawFooterNavBg != null ? String(rawFooterNavBg).trim() : ''
if (!footerNavBgTrim) return ''
const lower = footerNavBgTrim.toLowerCase()
if (lower === 'transparent' || lower === 'none') return ''
return resolveImageUrl(footerNavBgTrim) || ''
}
export function applySiteConfigLayoutStyles(configs = null) {
const source = configs || (typeof window !== 'undefined' ? window.__haihoSiteConfigs : {}) || {}
applyNavMenuLeftBackground(source)
upsertFooterBackgroundStyle({ footerBgUrl: resolveFooterBackgroundUrl(source) })
}
export async function fetchSiteConfigPublic() {
try {
const res = await fetch(`${API_BASE}/config/public/list`)
if (!res.ok) return {}
const json = await res.json()
return json.code === 200 ? json.data : {}
} catch (error) {
console.error('Failed to fetch site config:', error)
return {}
}
return remember(
'site-config:public',
async () => {
try {
const res = await fetch(`${API_BASE}/config/public/list`, {
cache: 'no-store'
})
if (!res.ok) return {}
const json = await res.json()
return json.code === 200 ? json.data : {}
} catch (error) {
console.error('Failed to fetch site config:', error)
return {}
}
},
{ ttlMs: 15000 }
)
}
/**
* 注入站点全局信息(SEO、联系方式等)
*/
export async function injectSiteGlobalConfig() {
const configs = await fetchSiteConfigPublic()
window.__haihoSiteConfigs = configs || {}
if (!configs || Object.keys(configs).length === 0) return
const contactAddress = configs.contact_address == null ? '' : String(configs.contact_address).trim()
const configs = (await fetchSiteConfigPublic()) || {}
window.__haihoSiteConfigs = configs
const tFooterCompanyName = translatedValue('footer.company_name')
const tFooterPhone = translatedValue('footer.contact_phone') || translatedValue('contact.phone')
const tFooterEmail = translatedValue('footer.contact_email') || translatedValue('contact.email')
const tFooterAddress = translatedValue('footer.contact_address') || translatedValue('contact.address')
const tFooterCopyright = translatedValue('footer.site_copyright')
const tFooterIcp = translatedValue('footer.site_icp')
const tFooterPolicyText = translatedValue('footer.policy_text')
const tFooterSeoText = translatedValue('footer.seo_text')
const tFooterBuilderText = translatedValue('footer.builder_text')
const mergedConfigs = {
...configs,
footer_company_name: tFooterCompanyName || configs.footer_company_name,
contact_phone: tFooterPhone || configs.contact_phone,
contact_email: tFooterEmail || configs.contact_email,
contact_address: tFooterAddress || configs.contact_address,
site_copyright: tFooterCopyright || configs.site_copyright,
site_icp: tFooterIcp || configs.site_icp,
footer_policy_text: tFooterPolicyText || configs.footer_policy_text,
footer_seo_text: tFooterSeoText || configs.footer_seo_text,
footer_builder_text: tFooterBuilderText || configs.footer_builder_text
}
const contactPhone = firstContactLine(mergedConfigs.contact_phone)
const contactEmail = firstContactLine(mergedConfigs.contact_email)
const contactAddress = mergedConfigs.contact_address == null ? '' : String(mergedConfigs.contact_address).trim()
// 1. 注入 SEO 信息
if (configs.site_title) {
@@ -33,25 +402,30 @@ export async function injectSiteGlobalConfig() {
}
const metaKeywords = document.querySelector('meta[name="keywords"]')
if (metaKeywords && configs.site_keywords) {
metaKeywords.setAttribute('content', configs.site_keywords)
}
if (metaKeywords) metaKeywords.setAttribute('content', configs.site_keywords || '')
const metaDesc = document.querySelector('meta[name="description"]')
if (metaDesc && configs.site_description) {
metaDesc.setAttribute('content', configs.site_description)
}
if (metaDesc) metaDesc.setAttribute('content', configs.site_description || '')
// 2. 注入联系信息 (全局替换)
if (configs.contact_phone) {
// 2. 注入联系信息(页脚等全局区域;联系我们页列表除外)
if (contactPhone) {
const phoneLinks = document.querySelectorAll('a[href^="tel:"]')
phoneLinks.forEach(link => {
link.href = `tel:${configs.contact_phone}`
link.textContent = link.textContent.replace(/[\d-]+/g, configs.contact_phone)
if (isContactPageListNode(link)) return
link.href = `tel:${contactPhone}`
link.textContent = link.textContent.replace(/[\d-]+/g, contactPhone)
})
const footerPhone = document.querySelector('.saf-online .phone-text, .footer-phone')
if (footerPhone) footerPhone.textContent = configs.contact_phone
if (footerPhone) footerPhone.textContent = contactPhone
} else {
document.querySelectorAll('a[href^="tel:"]').forEach((link) => {
if (isContactPageListNode(link)) return
const text = (link.textContent || '').trim()
if (/^[\d-+()\s]+$/.test(text) || text.includes('服务热线') || text.includes('电话')) {
link.closest('p, li, .it_o, .cbox-21.p_loopitem')?.remove()
}
})
}
if (contactAddress) {
@@ -62,26 +436,96 @@ export async function injectSiteGlobalConfig() {
patchFooterCompanyRichAddress(contactAddress)
}
if (configs.contact_email) {
if (contactEmail) {
const emailLinks = document.querySelectorAll('a[href^="mailto:"]')
emailLinks.forEach(link => {
link.href = `mailto:${configs.contact_email}`
link.textContent = link.textContent.replace(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, configs.contact_email)
if (isContactPageListNode(link)) return
link.href = `mailto:${contactEmail}`
link.textContent = link.textContent.replace(/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, contactEmail)
})
} else {
document.querySelectorAll('a[href^="mailto:"]').forEach((link) => {
if (isContactPageListNode(link)) return
link.closest('p, li, .cbox-21.p_loopitem')?.remove()
})
}
// 3. 注入页脚版权与备案信息
if (configs.site_copyright) {
const copyrightEls = document.querySelectorAll('.e_richText-89 p, .footer-copyright, .s_tmpl_footer p')
if (mergedConfigs.site_copyright) {
const copyrightEls = document.querySelectorAll('.e_richText-89 p, .footer-copyright')
copyrightEls.forEach(el => {
el.textContent = configs.site_copyright
el.textContent = mergedConfigs.site_copyright
})
} else {
document.querySelectorAll('.e_richText-89 p, .footer-copyright').forEach((el) => {
el.textContent = ''
})
}
if (configs.site_icp) {
if (mergedConfigs.site_icp) {
const icpLinks = document.querySelectorAll('.e_provider-88 a, .footer-icp, a[href*="beian.miit.gov.cn"]')
icpLinks.forEach(link => {
link.textContent = configs.site_icp
link.textContent = mergedConfigs.site_icp
})
} else {
document.querySelectorAll('.e_provider-88 a, .footer-icp, a[href*="beian.miit.gov.cn"]').forEach((link) => {
link.textContent = ''
})
}
rebuildFooterCompanyBlockFromFields(mergedConfigs)
// 3.1 页脚政策 / SEO / 网址建设文案与链接
if (mergedConfigs.footer_policy_text) {
document.querySelectorAll('.saf-auto-licenseo a.license').forEach((a) => {
a.textContent = mergedConfigs.footer_policy_text
})
}
if (configs.footer_policy_link) {
document.querySelectorAll('.saf-auto-licenseo a.license').forEach((a) => {
a.href = configs.footer_policy_link
a.target = '_blank'
a.rel = 'nofollow noopener noreferrer'
})
}
if (mergedConfigs.footer_seo_text) {
document.querySelectorAll('.saf-auto-licenseo a:not(.license)').forEach((a) => {
a.textContent = mergedConfigs.footer_seo_text
})
}
if (configs.footer_seo_link) {
document.querySelectorAll('.saf-auto-licenseo a:not(.license)').forEach((a) => {
a.href = configs.footer_seo_link
a.target = '_blank'
a.rel = 'nofollow noopener noreferrer'
})
}
if (mergedConfigs.footer_builder_text) {
document.querySelectorAll('.e_richText-86 p a:nth-of-type(1)').forEach((a) => {
a.textContent = mergedConfigs.footer_builder_text
})
}
if (configs.footer_builder_link) {
document.querySelectorAll('.e_richText-86 p a:nth-of-type(1)').forEach((a) => {
a.href = configs.footer_builder_link
a.target = '_blank'
a.rel = 'nofollow noopener noreferrer'
})
}
if (configs.footer_builder_city) {
document.querySelectorAll('.e_richText-86 p a:nth-of-type(2)').forEach((a) => {
a.textContent = configs.footer_builder_city
})
} else {
// 未配置地区时,移除模板默认“烟台”等地名
document.querySelectorAll('.e_richText-86 p a:nth-of-type(2)').forEach((a) => {
a.remove()
})
}
if (configs.footer_builder_city_link) {
document.querySelectorAll('.e_richText-86 p a:nth-of-type(2)').forEach((a) => {
a.href = configs.footer_builder_city_link
a.target = '_blank'
a.rel = 'nofollow noopener noreferrer'
})
}
@@ -91,11 +535,6 @@ export async function injectSiteGlobalConfig() {
a.href = configs.link_delivery_portal
})
}
if (configs.link_mall) {
document.querySelectorAll('a[href*="weimob.com"]').forEach(a => {
a.href = configs.link_mall
})
}
if (configs.link_business_license) {
document.querySelectorAll('.license, .footer-license, a[class*="license"]').forEach(a => {
a.href = configs.link_business_license
@@ -114,65 +553,32 @@ export async function injectSiteGlobalConfig() {
// 主导航「展开列表 + 右侧配图」区域背景:只作用在 ul.p_level1Box,避免整根 .header 铺图
// 透过 .leftNav 半透明条看到错误大图;左侧条改为透明,右侧配图仍由 .navimgbox .imgitem.actived 切换
const rawMenuBg = configs.nav_menu_left_bg
const menuBgTrim = rawMenuBg != null ? String(rawMenuBg).trim() : ''
if (menuBgTrim) {
const lower = menuBgTrim.toLowerCase()
const applyUrl = (url) => {
const safe = String(url).replace(/\\/g, '\\\\').replace(/"/g, '\\"')
document.querySelectorAll('.header ul.p_level1Box').forEach((el) => {
el.style.backgroundImage = `url("${safe}")`
el.style.backgroundRepeat = 'no-repeat'
el.style.backgroundPosition = 'center'
el.style.backgroundSize = 'cover'
el.style.backgroundColor = ''
})
}
if (lower === 'transparent' || lower === 'none') {
document.querySelectorAll('.header ul.p_level1Box').forEach((el) => {
el.style.backgroundImage = ''
el.style.backgroundColor = 'transparent'
el.style.backgroundRepeat = ''
el.style.backgroundPosition = ''
el.style.backgroundSize = ''
})
} else {
const bg = resolveImageUrl(menuBgTrim)
if (bg) applyUrl(bg)
}
document.querySelectorAll('.header').forEach((h) => {
h.style.backgroundImage = 'none'
h.style.backgroundColor = 'transparent'
})
document.querySelectorAll('.header .leftNav').forEach((el) => {
el.style.setProperty('background', 'transparent', 'important')
})
}
applySiteConfigLayoutStyles(configs)
// 页脚红条 CTA 与表单占位(与模板 .s_tmpl_footer 中 e_text-92/93、e_form-94 对应,键名在「站点参数」中维护)
const setTextIf = (sel, text) => {
if (!text) return
document.querySelectorAll(sel).forEach((el) => {
el.textContent = text
el.textContent = text || ''
})
}
setTextIf('.s_tmpl_footer .e_text-92', configs.footer_cta_line1)
setTextIf('.s_tmpl_footer .e_text-93', configs.footer_cta_line2)
const setPh = (name, ph) => {
if (!ph) return
document.querySelectorAll(`.s_tmpl_footer .e_form-94 input[name="${name}"]`).forEach((input) => {
input.setAttribute('placeholder', ph)
input.setAttribute('placeholder', ph || '')
})
}
setPh('e_input-99', configs.footer_placeholder_name)
setPh('e_input-98', configs.footer_placeholder_phone)
setPh('e_input-97', configs.footer_placeholder_need)
if (configs.footer_submit_text) {
document.querySelectorAll('.s_tmpl_footer .e_form-94 .e_formBtn-96 span').forEach((el) => {
el.textContent = configs.footer_submit_text
})
}
if (configs.footer_company_html) {
// 按需求禁用页脚表单静态/配置提示,统一留空
setPh('e_input-99', '')
setPh('e_input-98', '')
setPh('e_input-97', '')
document.querySelectorAll('.s_tmpl_footer .e_form-94 .e_formBtn-96 span').forEach((el) => {
el.textContent = configs.footer_submit_text || ''
})
const hasTranslatedFooterBlock = Boolean(
tFooterCompanyName || tFooterPhone || tFooterEmail || tFooterAddress
)
if (configs.footer_company_html && !hasTranslatedFooterBlock) {
document.querySelectorAll('.s_tmpl_footer .e_richText-81').forEach((el) => {
el.innerHTML = configs.footer_company_html
})
Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

+14 -50
View File
@@ -1,10 +1,13 @@
<script setup>
import { computed, ref } from 'vue'
import { useI18n } from 'vue-i18n'
import SiteShell from './SiteShell.vue'
import { fetchContactList, submitMessage } from '../api/customer'
import { fetchSiteConfigPublic } from '../api/siteConfig'
import { resolveImageUrl } from '../utils/asset'
const { t } = useI18n()
const contacts = ref([])
const loading = ref(true)
const siteConfig = ref({})
@@ -31,11 +34,6 @@ const topImageUrl = computed(() => {
if (raw == null) return ''
return resolveImageUrl(String(raw).trim())
})
const mapImageUrl = computed(() => {
const raw = siteConfig.value?.contact_map_image
if (raw == null) return ''
return resolveImageUrl(String(raw).trim())
})
const mapAddress = computed(() => {
const raw = siteConfig.value?.contact_address
if (raw == null) return '中国•烟台•芝罘岛东路51号'
@@ -87,7 +85,7 @@ async function loadSiteConfig() {
async function onSubmit() {
if (!form.value.messageName || !form.value.messagePhone || !form.value.messageContent) {
statusMsg.value = '请填写姓名、电话和留言内容'
statusMsg.value = t('ui.form.contact_required')
return
}
submitting.value = true
@@ -95,7 +93,7 @@ async function onSubmit() {
try {
const res = await submitMessage(form.value)
if (res.code === 200) {
statusMsg.value = '留言提交成功,我们会尽快与您联系'
statusMsg.value = t('ui.status.submit_ok_message_short')
form.value = {
messageName: '',
messagePhone: '',
@@ -103,10 +101,10 @@ async function onSubmit() {
messageContent: ''
}
} else {
statusMsg.value = res.msg || '提交失败,请稍后重试'
statusMsg.value = res.msg || t('ui.status.submit_fail_retry')
}
} catch {
statusMsg.value = '提交失败,请稍后重试'
statusMsg.value = t('ui.status.submit_fail_retry')
} finally {
submitting.value = false
}
@@ -140,7 +138,7 @@ loadSiteConfig()
<section class="content-grid">
<article class="card">
<h2>联系方式</h2>
<p v-if="loading" class="hint">联系方式加载中...</p>
<p v-if="loading" class="hint">{{ t('ui.contact.loading_contacts') }}</p>
<ul v-else-if="displayContactItems.length" class="contact-list">
<li v-for="item in displayContactItems" :key="item.contactId || `${item.contactType}-${item.contactValue}`">
<strong>{{ item.contactLabel || '联系方式' }}:</strong>
@@ -151,7 +149,7 @@ loadSiteConfig()
<span v-else>{{ item.contactValue }}</span>
</li>
</ul>
<p v-else class="hint">暂未获取到联系方式。</p>
<p v-else class="hint">{{ t('ui.contact.no_contacts') }}</p>
</article>
<article class="card">
@@ -159,36 +157,27 @@ loadSiteConfig()
<form class="form" @submit.prevent="onSubmit">
<label>
<span>姓名 *</span>
<input v-model.trim="form.messageName" type="text" placeholder="请输入姓名" />
<input v-model.trim="form.messageName" type="text" :placeholder="t('common.placeholder.name')" />
</label>
<label>
<span>联系电话 *</span>
<input v-model.trim="form.messagePhone" type="text" placeholder="请输入联系电话" />
<input v-model.trim="form.messagePhone" type="text" :placeholder="t('common.placeholder.phone')" />
</label>
<label>
<span>邮箱</span>
<input v-model.trim="form.messageEmail" type="email" placeholder="请输入邮箱" />
<input v-model.trim="form.messageEmail" type="email" :placeholder="t('common.placeholder.email')" />
</label>
<label>
<span>留言内容 *</span>
<textarea v-model.trim="form.messageContent" rows="5" placeholder="请输入留言内容"></textarea>
<textarea v-model.trim="form.messageContent" rows="5" :placeholder="t('common.placeholder.message')"></textarea>
</label>
<button type="submit" :disabled="submitting">
{{ submitting ? '提交中...' : '提交留言' }}
{{ submitting ? t('ui.loading.submitting') : t('ui.contact.submit_message') }}
</button>
<p v-if="statusMsg" class="status">{{ statusMsg }}</p>
</form>
</article>
</section>
<section class="card map-card">
<h2>我们的位置</h2>
<p class="hint">{{ mapAddress }}</p>
<img v-if="mapImageUrl" class="map-image" :src="mapImageUrl" alt="位置示意图" />
<div v-else class="map-placeholder">
地图位置展示区(可按需接入腾讯地图/百度地图 iframe)
</div>
</section>
</SiteShell>
</template>
@@ -304,31 +293,6 @@ loadSiteConfig()
color: #cf261d;
}
.map-card {
margin-top: 16px;
}
.map-placeholder {
margin-top: 10px;
min-height: 180px;
border: 1px dashed #cbd5e1;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: center;
color: #64748b;
background: #f8fafc;
}
.map-image {
width: 100%;
margin-top: 10px;
border: 1px solid #e2e8f0;
border-radius: 10px;
display: block;
object-fit: cover;
}
@media (max-width: 900px) {
.content-grid {
grid-template-columns: 1fr;
+13 -13
View File
@@ -2,6 +2,7 @@
import { computed, onMounted, onUnmounted, ref, watch } from 'vue'
import { fetchNavigationPublic, isNavigationTopLevelItem } from '../api/navigation'
import { spaHref } from '../utils/publicPath'
import { useI18n } from 'vue-i18n'
const props = defineProps({
activeKey: {
@@ -12,6 +13,7 @@ const props = defineProps({
const mainNavRaw = ref([])
const menuOpen = ref(false)
const { t } = useI18n()
function mapPathToSpa(pathname) {
if (!pathname) return spaHref('page=home')
@@ -32,20 +34,20 @@ function mapPathToSpa(pathname) {
if (normalizePath === '/about/honor') {
return withHash('page=about#c_static_001_P_4578-16941414442160')
}
if (normalizePath === '/Quality.html' || normalizePath === '/about/tech') return withHash('page=quality')
if (normalizePath === '/Quality.html' || normalizePath === '/about/tech') return withHash('page=about')
if (normalizePath === '/History.html' || normalizePath === '/about/timeline') return withHash('page=history')
if (normalizePath === '/mendian.html' || normalizePath === '/about/store') return withHash('page=store')
if (normalizePath === '/mendian.html' || normalizePath === '/about/store') return withHash('page=about')
if (normalizePath === '/product' || normalizePath === '/product/2.html' || normalizePath.startsWith('/product/')) {
return withHash('page=product')
}
if (normalizePath === '/culture' || normalizePath === '/news/8' || normalizePath.startsWith('/clture/')) {
return withHash('page=culture')
}
if (normalizePath === '/news/1' || normalizePath === '/news' || normalizePath.startsWith('/news/')) {
return withHash('page=news')
if (normalizePath === '/news' || normalizePath.startsWith('/news/')) {
return withHash('page=home')
}
if (normalizePath === '/join.html' || normalizePath === '/join' || normalizePath.startsWith('/join/')) {
return withHash('page=join')
return withHash('page=home')
}
if (normalizePath === '/contact.html' || normalizePath === '/contact' || normalizePath.startsWith('/contact/')) {
return withHash('page=contact')
@@ -81,13 +83,11 @@ function normalizeTopLevel(items) {
const mainNav = computed(() => {
if (mainNavRaw.value.length) return normalizeTopLevel(mainNavRaw.value)
return [
{ key: 'home', title: '网站首页', url: spaHref('page=home'), children: [] },
{ key: 'about', title: '关于我们', url: spaHref('page=about'), children: [] },
{ key: 'product', title: '产品中心', url: spaHref('page=product'), children: [] },
{ key: 'culture', title: '华阳文化', url: spaHref('page=culture'), children: [] },
{ key: 'news', title: '新闻动态', url: spaHref('page=news'), children: [] },
{ key: 'join', title: '招商加盟', url: spaHref('page=join'), children: [] },
{ key: 'contact', title: '联系我们', url: spaHref('page=contact'), children: [] }
{ key: 'home', title: t('common.title.site_home'), url: spaHref('page=home'), children: [] },
{ key: 'about', title: t('common.title.about'), url: spaHref('page=about'), children: [] },
{ key: 'product', title: t('common.title.product'), url: spaHref('page=product'), children: [] },
{ key: 'culture', title: t('common.title.culture_nav'), url: spaHref('page=culture'), children: [] },
{ key: 'contact', title: t('common.title.contact'), url: spaHref('page=contact'), children: [] }
]
})
@@ -141,7 +141,7 @@ onUnmounted(() => {
<div class="haiho-vue-fab-host haiho-vue-fab-host--portal" aria-live="polite">
<button type="button" class="haiho-menu-fab" @click="toggleMenu">
<span class="haiho-menu-fab-icon" aria-hidden="true"></span>
<span class="haiho-menu-fab-label">Menu</span>
<span class="haiho-menu-fab-label">{{ t('ui.menu') }}</span>
</button>
<div v-if="menuOpen" class="haiho-menu-mask" @click="closeMenu"></div>
-269
View File
@@ -1,269 +0,0 @@
<script setup>
import { ref } from 'vue'
import SiteShell from './SiteShell.vue'
import { submitJoinApply, fetchContactList } from '../api/customer'
const form = ref({
applyName: '',
applyPhone: '',
applyCompany: '',
applyIntent: '',
applyArea: ''
})
const submitting = ref(false)
const contacts = ref([])
const statusMsg = ref('')
async function loadContacts() {
try {
contacts.value = await fetchContactList()
} catch {
contacts.value = []
}
}
async function onSubmit() {
if (!form.value.applyName || !form.value.applyPhone) {
statusMsg.value = '请填写姓名和联系电话'
return
}
submitting.value = true
statusMsg.value = ''
try {
const res = await submitJoinApply(form.value)
if (res.code === 200) {
statusMsg.value = '申请提交成功,我们会尽快联系您'
form.value = {
applyName: '',
applyPhone: '',
applyCompany: '',
applyIntent: '',
applyArea: ''
}
} else {
statusMsg.value = res.msg || '提交失败,请稍后重试'
}
} catch {
statusMsg.value = '提交失败,请稍后重试'
} finally {
submitting.value = false
}
}
loadContacts()
</script>
<template>
<SiteShell active-key="join">
<section class="hero">
<h1>招商加盟</h1>
<p>欢迎渠道伙伴合作,华阳企业集团诚邀您的加入。</p>
</section>
<section class="card prose">
<h2>加盟细则</h2>
<p><strong>加盟优势:</strong>华阳率先建立鲜冻礼品直分销销售模式。</p>
<ul>
<li>有效解决储存及物流运输压力</li>
<li>针对性网罗集团单位采购,锁定高端客户,迅速启动市场</li>
<li>互动式传播与沟通,促进企业长效发展</li>
</ul>
<p>
<strong>互动直分销模式解读——互动:</strong>
借助网站、软文、社媒等渠道进行深度沟通,强化品牌认知并建立稳定消费群体。
</p>
<p>
<strong>互动直分销模式解读——分销:</strong>
拓展区域市场加盟资源,协助加盟店完成销售目标,掌控不同细分市场。
</p>
</section>
<section class="card prose">
<h2>加盟流程</h2>
<ol>
<li>咨询意向交流</li>
<li>填写加盟申请表格</li>
<li>公司派员考察(店址、效益、风险)</li>
<li>审核资质证明(营业执照、身份证等)</li>
<li>签订合同并交纳保证金及预付款</li>
<li>按统一标准进行店面装修设计</li>
<li>装修验收、筹备开业及培训</li>
<li>运营指导、跟踪服务</li>
</ol>
</section>
<section class="card prose">
<h2>加盟资质</h2>
<h3>A、专卖店型区域经销商</h3>
<ul>
<li>具备合法经营资质,认可华阳经营理念与管理规范</li>
<li>具备经营管理能力和区域市场开拓能力</li>
<li>具备必要经营资金与良好资金信用</li>
<li>拥有不小于 100 平方米的营业场所及配套展示条件</li>
</ul>
<h3>B、团购代理经销商</h3>
<ul>
<li>企业、团体、组织或个人均可申请</li>
<li>理解加盟规则并认可华阳经营模式</li>
<li>熟悉当地市场,具备推广和开拓能力</li>
<li>具备必要流动资金与稳定履约能力</li>
</ul>
</section>
<section class="content-grid">
<article class="card">
<h2>加盟申请</h2>
<form class="form" @submit.prevent="onSubmit">
<label>
<span>姓名 *</span>
<input v-model.trim="form.applyName" type="text" placeholder="请输入姓名" />
</label>
<label>
<span>联系电话 *</span>
<input v-model.trim="form.applyPhone" type="text" placeholder="请输入联系电话" />
</label>
<label>
<span>公司名称</span>
<input v-model.trim="form.applyCompany" type="text" placeholder="请输入公司名称" />
</label>
<label>
<span>合作意向</span>
<textarea v-model.trim="form.applyIntent" rows="4" placeholder="请输入合作意向"></textarea>
</label>
<label>
<span>目标区域</span>
<input v-model.trim="form.applyArea" type="text" placeholder="请输入区域信息" />
</label>
<button type="submit" :disabled="submitting">
{{ submitting ? '提交中...' : '提交申请' }}
</button>
<p v-if="statusMsg" class="status">{{ statusMsg }}</p>
</form>
</article>
<article class="card">
<h2>联系方式</h2>
<ul v-if="contacts.length" class="contact-list">
<li v-for="item in contacts" :key="item.contactId || `${item.contactType}-${item.contactValue}`">
<strong>{{ item.contactLabel || '联系方式' }}:</strong>
<span>{{ item.contactValue }}</span>
</li>
</ul>
<p v-else class="empty">暂未获取到联系方式,请稍后重试。</p>
</article>
</section>
</SiteShell>
</template>
<style scoped>
.hero {
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 20px;
margin-bottom: 16px;
}
.hero h1 {
margin: 0 0 8px;
font-size: 28px;
}
.hero p {
margin: 0;
color: #64748b;
}
.content-grid {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 16px;
}
.card {
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 18px;
}
.prose h2 {
margin-top: 0;
}
.prose h3 {
margin: 12px 0 8px;
font-size: 16px;
}
.prose p,
.prose li {
color: #334155;
line-height: 1.75;
}
.prose ul,
.prose ol {
margin: 8px 0 0;
padding-left: 20px;
}
.card h2 {
margin: 0 0 12px;
}
.form {
display: grid;
gap: 12px;
}
.form label {
display: grid;
gap: 6px;
}
.form input,
.form textarea {
border: 1px solid #cbd5e1;
border-radius: 8px;
padding: 10px;
font: inherit;
}
.form button {
border: 0;
border-radius: 8px;
background: #cf261d;
color: #fff;
padding: 10px 14px;
cursor: pointer;
}
.form button:disabled {
opacity: 0.7;
cursor: not-allowed;
}
.status {
margin: 0;
color: #cf261d;
}
.contact-list {
margin: 0;
padding: 0;
list-style: none;
display: grid;
gap: 10px;
}
.empty {
color: #64748b;
}
@media (max-width: 900px) {
.content-grid {
grid-template-columns: 1fr;
}
}
</style>
-508
View File
@@ -1,508 +0,0 @@
<script setup>
import { computed, ref, watch } from 'vue'
import SiteShell from './SiteShell.vue'
import {
ensureNewsTabs,
fetchNewsDetailPublic,
fetchNewsPublic,
getNewsListPageNumbers,
getNewsTabs,
isNewsTabType,
} from '../api/news'
import { resolveImageUrl } from '../utils/asset'
const query = new URLSearchParams(window.location.search)
const initialNewsId = Number(query.get('newsId') || 0)
const tabs = ref(getNewsTabs())
const activeTab = ref(tabs.value[0]?.value || 'news')
const pageNum = ref(1)
const pageSize = ref(10)
const total = ref(0)
const list = ref([])
const detail = ref(null)
const loading = ref(false)
const errorText = ref('')
const initialized = ref(false)
const pageCount = computed(() => Math.max(1, Math.ceil(total.value / pageSize.value)))
const visiblePages = computed(() => getNewsListPageNumbers(pageNum.value, pageCount.value, 5))
const isDetailMode = computed(() => !!detail.value)
function formatDate(input) {
if (!input) return ''
const d = new Date(input)
if (Number.isNaN(d.getTime())) return ''
const y = d.getFullYear()
const m = `${d.getMonth() + 1}`.padStart(2, '0')
const day = `${d.getDate()}`.padStart(2, '0')
return `${y}-${m}-${day}`
}
/** 列表右侧:年 / 月 */
function formatListYm(input) {
if (!input) return ''
const d = new Date(input)
if (Number.isNaN(d.getTime())) return ''
const y = d.getFullYear()
const m = String(d.getMonth() + 1).padStart(2, '0')
return `${y} / ${m}`
}
async function loadList() {
loading.value = true
errorText.value = ''
detail.value = null
try {
const fallbackType = tabs.value[0]?.value || 'news'
const newsType = isNewsTabType(activeTab.value) ? activeTab.value : fallbackType
const data = await fetchNewsPublic(null, newsType, pageNum.value, pageSize.value)
list.value = data.rows || []
total.value = typeof data.total === 'number' ? data.total : list.value.length
const maxPage = Math.max(1, Math.ceil(total.value / pageSize.value))
if (total.value > 0 && pageNum.value > maxPage) {
pageNum.value = maxPage
syncNewsListPageQuery()
return loadList()
}
if (!list.value.length && total.value > 0 && pageNum.value > 1) {
pageNum.value = 1
syncNewsListPageQuery()
return loadList()
}
} catch {
list.value = []
total.value = 0
errorText.value = '新闻加载失败,请稍后重试'
} finally {
loading.value = false
}
}
async function loadDetail(newsId) {
loading.value = true
errorText.value = ''
try {
const data = await fetchNewsDetailPublic(null, newsId)
if (!data) {
errorText.value = '未找到新闻详情'
detail.value = null
return
}
detail.value = data
const nextQuery = new URLSearchParams(window.location.search)
nextQuery.set('page', 'news')
nextQuery.set('newsId', String(newsId))
window.history.replaceState(null, '', `${window.location.pathname}?${nextQuery.toString()}`)
} catch {
detail.value = null
errorText.value = '新闻详情加载失败,请稍后重试'
} finally {
loading.value = false
}
}
function coverSrc(url) {
return resolveImageUrl(url)
}
function openDetail(item) {
if (!item?.newsId) return
loadDetail(Number(item.newsId))
}
function backToList() {
detail.value = null
const nextQuery = new URLSearchParams(window.location.search)
nextQuery.set('page', 'news')
nextQuery.delete('newsId')
window.history.replaceState(null, '', `${window.location.pathname}?${nextQuery.toString()}`)
}
function syncNewsListPageQuery() {
const nextQuery = new URLSearchParams(window.location.search)
nextQuery.set('page', 'news')
nextQuery.delete('newsId')
if (pageNum.value <= 1) {
nextQuery.delete('newsPage')
} else {
nextQuery.set('newsPage', String(pageNum.value))
}
window.history.replaceState(null, '', `${window.location.pathname}?${nextQuery.toString()}`)
}
function switchTab(value) {
if (activeTab.value === value) return
activeTab.value = value
pageNum.value = 1
const nextQuery = new URLSearchParams(window.location.search)
nextQuery.set('page', 'news')
nextQuery.delete('newsId')
nextQuery.delete('newsPage')
nextQuery.set('newsType', value)
window.history.replaceState(null, '', `${window.location.pathname}?${nextQuery.toString()}`)
}
function goToPage(p) {
const max = pageCount.value
if (p < 1 || p > max) return
pageNum.value = p
syncNewsListPageQuery()
}
function prevPage() {
if (pageNum.value <= 1) return
pageNum.value -= 1
syncNewsListPageQuery()
}
function nextPage() {
if (pageNum.value >= pageCount.value) return
pageNum.value += 1
syncNewsListPageQuery()
}
watch([activeTab, pageNum], () => {
if (!initialized.value) return
if (isDetailMode.value) return
loadList()
})
async function bootstrap() {
await ensureNewsTabs()
tabs.value = getNewsTabs()
const firstType = tabs.value[0]?.value || 'news'
const qsType = query.get('newsType') || firstType
activeTab.value = isNewsTabType(qsType) ? qsType : firstType
const rawPg = parseInt(query.get('newsPage') || '1', 10)
pageNum.value = Number.isFinite(rawPg) && rawPg > 0 ? rawPg : 1
if (initialNewsId > 0) {
initialized.value = true
await loadDetail(initialNewsId)
} else {
initialized.value = true
await loadList()
}
}
bootstrap()
</script>
<template>
<SiteShell active-key="news">
<section class="hero">
<h1>新闻中心</h1>
<p>News</p>
</section>
<section class="card tabs" v-if="!isDetailMode">
<button
v-for="tab in tabs"
:key="tab.value"
type="button"
:class="{ active: activeTab === tab.value }"
@click="switchTab(tab.value)"
>
{{ tab.label }}
</button>
</section>
<section class="card" v-if="isDetailMode && detail">
<button class="back" type="button" @click="backToList">返回列表</button>
<h2 class="detail-title">{{ detail.newsTitle }}</h2>
<p class="meta">{{ formatDate(detail.publishTime) }} · {{ detail.newsAuthor || '华阳食品' }}</p>
<div v-if="detail.newsCover" class="cover">
<img :src="coverSrc(detail.newsCover)" :alt="detail.newsTitle" />
</div>
<div class="content news-rich-text" v-html="detail.newsContent || ''"></div>
</section>
<section class="card" v-else>
<p v-if="loading" class="hint">新闻加载中...</p>
<p v-else-if="errorText" class="error">{{ errorText }}</p>
<div v-else-if="list.length" class="list">
<article
v-for="item in list"
:key="item.newsId || item.newsTitle"
class="list-item huayang-news-list-item"
@click="openDetail(item)"
>
<div class="huayang-news-list-item__inner">
<div class="huayang-news-list-item__thumb">
<img
v-if="item.newsCover"
:src="coverSrc(item.newsCover)"
:alt="item.newsTitle"
/>
<img v-else src="/images/no-news.png" alt="" />
</div>
<div class="huayang-news-list-item__main">
<h3 class="huayang-news-list-item__title">{{ item.newsTitle }}</h3>
<p v-if="item.newsSummary || item.newsDesc" class="huayang-news-list-item__summary">
{{ item.newsSummary || item.newsDesc }}
</p>
</div>
<div class="huayang-news-list-item__date">
<span class="huayang-news-list-item__ym">{{ formatListYm(item.publishTime) }}</span>
</div>
</div>
</article>
</div>
<p v-else class="hint">暂无新闻内容</p>
<div class="huayang-news-pager" v-if="!loading && !errorText && list.length && pageCount > 1">
<button type="button" class="huayang-news-pager__btn" :disabled="pageNum <= 1" aria-label="上一页" @click="prevPage">
&lt;
</button>
<button
v-for="p in visiblePages"
:key="p"
type="button"
class="huayang-news-pager__btn"
:class="{ 'is-active': p === pageNum }"
@click="goToPage(p)"
>
{{ p }}
</button>
<button type="button" class="huayang-news-pager__btn" :disabled="pageNum >= pageCount" aria-label="下一页" @click="nextPage">
&gt;
</button>
</div>
</section>
</SiteShell>
</template>
<style scoped>
.hero {
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 20px;
margin-bottom: 16px;
}
.hero h1 {
margin: 0;
font-size: 28px;
}
.hero p {
margin: 6px 0 0;
color: #64748b;
}
.card {
background: #fff;
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 16px;
}
.tabs {
display: flex;
gap: 8px;
margin-bottom: 12px;
}
.tabs button {
border: 1px solid #cbd5e1;
background: #fff;
color: #334155;
border-radius: 8px;
padding: 8px 12px;
cursor: pointer;
}
.tabs button.active {
color: #fff;
background: #cf261d;
border-color: #cf261d;
}
.list {
display: flex;
flex-direction: column;
gap: 12px;
}
.list-item {
padding: 0;
margin: 0;
border: none;
background: transparent;
cursor: pointer;
text-align: left;
}
.list-item .huayang-news-list-item__inner {
box-sizing: border-box;
display: flex;
flex-direction: row;
align-items: center;
gap: 16px;
width: 100%;
padding: 12px 16px;
background: #fff;
border: 1px solid #e8eef4;
border-radius: 10px;
}
.list-item .huayang-news-list-item__thumb {
flex: 0 0 220px;
width: 220px;
max-width: 26%;
aspect-ratio: 16 / 9;
border-radius: 8px;
overflow: hidden;
flex-shrink: 0;
}
.list-item .huayang-news-list-item__thumb img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
.list-item .huayang-news-list-item__main {
flex: 1;
min-width: 0;
}
.list-item .huayang-news-list-item__title {
margin: 0 0 6px;
font-size: 17px;
font-weight: 600;
color: #1f2937;
line-height: 1.45;
}
.list-item .huayang-news-list-item__summary {
margin: 0;
font-size: 14px;
color: #64748b;
line-height: 1.55;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.list-item .huayang-news-list-item__date {
flex: 0 0 auto;
display: flex;
flex-direction: column;
align-items: flex-end;
justify-content: center;
padding-left: 8px;
}
.list-item .huayang-news-list-item__ym {
font-size: 14px;
color: #64748b;
margin-top: 0;
}
.meta {
color: #64748b;
margin: 0 0 8px;
}
.desc {
margin: 0;
color: #334155;
line-height: 1.65;
}
.hint {
color: #64748b;
margin: 0;
}
.error {
color: #cf261d;
margin: 0;
}
.back {
border: 1px solid #cbd5e1;
border-radius: 8px;
background: #fff;
padding: 6px 12px;
cursor: pointer;
}
.detail-title {
margin: 10px 0 8px;
}
/* 详情封面按列表同款比例展示,避免超大图占满首屏 */
.cover {
margin-bottom: 12px;
}
.cover img {
width: 180px;
height: 110px;
object-fit: cover;
border-radius: 8px;
display: block;
}
.content {
margin-top: 14px;
line-height: 1.8;
color: #1f2937;
overflow-x: hidden;
}
/* 正文内图片(管理端富文本插入):限制最大宽度,覆盖 Quill 内联 width/height */
.content.news-rich-text >>> img,
.content.news-rich-text >>> p > img,
.content.news-rich-text >>> figure img {
max-width: min(100%, 720px) !important;
width: auto !important;
height: auto !important;
object-fit: contain;
display: block;
margin: 12px auto;
border-radius: 8px;
}
.content.news-rich-text >>> video,
.content.news-rich-text >>> iframe.ql-video {
max-width: 100%;
display: block;
margin: 12px auto;
border-radius: 8px;
}
@media (max-width: 768px) {
.list-item .huayang-news-list-item__inner {
flex-wrap: wrap;
align-items: flex-start;
}
.list-item .huayang-news-list-item__thumb {
flex: 0 0 120px;
width: 120px;
max-width: 38%;
}
.list-item .huayang-news-list-item__date {
width: 100%;
flex-direction: row;
align-items: baseline;
justify-content: flex-end;
gap: 8px;
padding-left: 0;
margin-top: 8px;
}
.list-item .huayang-news-list-item__ym {
margin-top: 0;
}
}
</style>
+41 -28
View File
@@ -3,18 +3,12 @@ import { computed, onMounted, onUnmounted, ref, watch } from 'vue'
import { fetchNavigationPublic, isNavigationTopLevelItem } from '../api/navigation'
import { fetchLogoPublic } from '../api/logo'
import { spaHref } from '../utils/publicPath'
import { resolveImageUrl } from '../utils/asset'
import { useI18n } from 'vue-i18n'
function normalizeLogoImage(logoImage) {
if (!logoImage) return ''
if (/^https?:\/\//i.test(logoImage)) return logoImage
if (logoImage.startsWith('/assets/')) return logoImage
// 如果已经是 /profile/ 开头(数据库存的是完整路径),直接返回
if (logoImage.startsWith('/profile/')) return logoImage
// 处理相对路径,拼 /profile/ 前缀
const cleanPath = logoImage.startsWith('/') ? logoImage.slice(1) : logoImage
return `/profile/${cleanPath}`
return resolveImageUrl(logoImage)
}
const props = defineProps({
activeKey: {
type: String,
@@ -23,19 +17,20 @@ const props = defineProps({
})
const headerLogo = ref({
logoImage: '/assets/05e55956-2463-4314-9f28-bdc4c160100d.png',
logoTitle: '烟台华阳食品有限公司',
logoImage: '',
logoTitle: '大连华阳食品有限公司',
logoUrl: '/'
})
const footerLogo = ref({
logoImage: '/assets/05e55956-2463-4314-9f28-bdc4c160100d.png',
logoTitle: '烟台华阳食品有限公司',
logoImage: '',
logoTitle: '大连华阳食品有限公司',
logoUrl: '/'
})
const copyrightText = ref('版权所有 © 烟台华阳食品有限公司')
const copyrightText = ref('版权所有 © 大连华阳食品有限公司')
const mainNavRaw = ref([])
const footerNavRaw = ref([])
const menuOpen = ref(false)
const { t } = useI18n()
function mapPathToSpa(pathname) {
if (!pathname) return spaHref('page=home')
@@ -56,20 +51,20 @@ function mapPathToSpa(pathname) {
if (normalizePath === '/about/honor') {
return withHash('page=about#c_static_001_P_4578-16941414442160')
}
if (normalizePath === '/Quality.html' || normalizePath === '/about/tech') return withHash('page=quality')
if (normalizePath === '/Quality.html' || normalizePath === '/about/tech') return withHash('page=about')
if (normalizePath === '/History.html' || normalizePath === '/about/timeline') return withHash('page=history')
if (normalizePath === '/mendian.html' || normalizePath === '/about/store') return withHash('page=store')
if (normalizePath === '/mendian.html' || normalizePath === '/about/store') return withHash('page=about')
if (normalizePath === '/product' || normalizePath === '/product/2.html' || normalizePath.startsWith('/product/')) {
return withHash('page=product')
}
if (normalizePath === '/culture' || normalizePath === '/news/8' || normalizePath.startsWith('/clture/')) {
return withHash('page=culture')
}
if (normalizePath === '/news/1' || normalizePath === '/news' || normalizePath.startsWith('/news/')) {
return withHash('page=news')
if (normalizePath === '/news' || normalizePath.startsWith('/news/')) {
return withHash('page=home')
}
if (normalizePath === '/join.html' || normalizePath === '/join' || normalizePath.startsWith('/join/')) {
return withHash('page=join')
return withHash('page=home')
}
if (normalizePath === '/contact.html' || normalizePath === '/contact' || normalizePath.startsWith('/contact/')) {
return withHash('page=contact')
@@ -105,12 +100,11 @@ function normalizeTopLevel(items) {
const mainNav = computed(() => {
if (mainNavRaw.value.length) return normalizeTopLevel(mainNavRaw.value)
return [
{ key: 'home', title: '首页', url: spaHref('page=home'), children: [] },
{ key: 'about', title: '关于我们', url: spaHref('page=about'), children: [] },
{ key: 'product', title: '产品中心', url: spaHref('page=product'), children: [] },
{ key: 'news', title: '新闻中心', url: spaHref('page=news'), children: [] },
{ key: 'join', title: '招商加盟', url: spaHref('page=join'), children: [] },
{ key: 'contact', title: '联系我们', url: spaHref('page=contact'), children: [] }
{ key: 'home', title: t('common.title.site_home'), url: spaHref('page=home'), children: [] },
{ key: 'about', title: t('common.title.about'), url: spaHref('page=about'), children: [] },
{ key: 'product', title: t('common.title.product'), url: spaHref('page=product'), children: [] },
{ key: 'culture', title: t('common.title.culture_nav'), url: spaHref('page=culture'), children: [] },
{ key: 'contact', title: t('common.title.contact'), url: spaHref('page=contact'), children: [] }
]
})
@@ -184,7 +178,8 @@ onUnmounted(() => {
<div class="site-shell">
<header class="site-header">
<a class="site-logo" :href="headerLogo.logoUrl || spaHref('page=home')">
<img :src="headerLogo.logoImage" :alt="headerLogo.logoTitle" />
<img v-if="headerLogo.logoImage" :src="headerLogo.logoImage" :alt="headerLogo.logoTitle" />
<span v-else class="site-logo-text">{{ headerLogo.logoTitle }}</span>
</a>
<nav class="site-nav">
<a
@@ -199,7 +194,7 @@ onUnmounted(() => {
</nav>
<button type="button" class="menu-fab" @click="toggleMenu">
<span class="menu-fab-icon"></span>
<span>Menu</span>
<span>{{ t('ui.menu') }}</span>
</button>
</header>
@@ -225,7 +220,8 @@ onUnmounted(() => {
<footer class="site-footer">
<a class="site-logo" :href="footerLogo.logoUrl || spaHref('page=home')">
<img :src="footerLogo.logoImage" :alt="footerLogo.logoTitle" />
<img v-if="footerLogo.logoImage" :src="footerLogo.logoImage" :alt="footerLogo.logoTitle" />
<span v-else class="site-logo-text">{{ footerLogo.logoTitle }}</span>
</a>
<div class="site-footer-nav">
<a v-for="item in footerNav" :key="`f-${item.key}`" :href="item.url">{{ item.title }}</a>
@@ -260,6 +256,15 @@ onUnmounted(() => {
display: block;
}
.site-logo-text {
display: inline-block;
color: #111827;
font-size: 18px;
font-weight: 700;
line-height: 44px;
white-space: nowrap;
}
.menu-fab {
display: none;
border: 0;
@@ -422,6 +427,14 @@ onUnmounted(() => {
height: 34px;
}
.site-logo-text {
max-width: 62vw;
overflow: hidden;
text-overflow: ellipsis;
font-size: 15px;
line-height: 34px;
}
.site-main {
padding: 16px 10px;
}
+1 -3
View File
@@ -37,8 +37,6 @@ export const templateModules = [
name: '客户服务与互动模块',
items: [
{ reqCode: 'REQ-016', title: '在线留言表单', desc: '提供姓名、电话、邮箱、留言内容等字段的表单', type: 'form' },
{ reqCode: 'REQ-017', title: '招商加盟介绍', desc: '展示企业代理合作政策、加盟支持政策等内容', type: 'richtext' },
{ reqCode: 'REQ-018', title: '招商表单提交', desc: '提供加盟意向表单,收集潜在合作伙伴的基本信息和合作需求', type: 'form' },
{ reqCode: 'REQ-019', title: '服务热线展示', desc: '在页面显著位置展示服务热线,支持一键拨打', type: 'text' },
{ reqCode: 'REQ-020', title: '电子邮箱展示', desc: '展示企业官方邮箱地址,提供邮件沟通渠道', type: 'text' },
{ reqCode: 'REQ-021', title: '公司地址展示', desc: '展示企业详细地址', type: 'text' }
@@ -48,7 +46,7 @@ export const templateModules = [
code: 'M04-RES',
name: '资源管理模块',
items: [
{ reqCode: 'REQ-022', title: '保存提交的信息', desc: '对用户、招商提交的表单信息、留言内容等进行存储和归档管理', type: 'storage' },
{ reqCode: 'REQ-022', title: '保存提交的信息', desc: '对用户提交的表单信息、留言内容等进行存储和归档管理', type: 'storage' },
{ reqCode: 'REQ-023', title: '对多媒体资源进行管理', desc: '对网站使用的产品图片、字段媒体资源进行上传、分类、检索与统一管理', type: 'media' }
]
},
@@ -0,0 +1,44 @@
/**
* 翻译占位 / 测试文案判定(与后端 SiteCompanyController 占位逻辑保持一致)。
* 需要调整规则时:改下方常量或 comma 分隔串,勿依赖外部配置文件。
*/
const DEFAULT_EXACT_CSV = 'qq,qw,qwe,qwer,qweqwe,qweqeqe,qweqweqweqwe,qqq,qqqq,ww,www,wwww,vv,vvv,vvvv,test,xxx,asd,asdf'
const DEFAULT_PLAIN_MAX_LEN = 200
const DEFAULT_REPEAT_MAX_LEN = 16
const PLACEHOLDER_EXACT_SET = new Set(
DEFAULT_EXACT_CSV.split(',').map((s) => s.trim().toLowerCase()).filter(Boolean)
)
function stripHtmlToPlain(s) {
return String(s || '')
.replace(/<[^>]+>/g, ' ')
.replace(/&nbsp;/gi, ' ')
.replace(/\s+/g, ' ')
.trim()
}
/**
* 是否为占位测试串(不应覆盖真实中文译文)。
*/
export function translationLooksLikePlaceholder(raw) {
if (raw == null) return true
const trimmed = String(raw).trim()
if (!trimmed) return true
const plain = stripHtmlToPlain(trimmed)
if (!plain) return true
if (plain.length > DEFAULT_PLAIN_MAX_LEN) return false
const lower = plain.toLowerCase()
if (PLACEHOLDER_EXACT_SET.has(lower)) return true
if (/^(qwe|wer|asd|zxc|www|vvv|xxx)+$/i.test(lower)) return true
const chars = [...plain]
if (
chars.length <= DEFAULT_REPEAT_MAX_LEN &&
chars.length > 0 &&
chars.every((c) => c === chars[0])
) {
return true
}
return false
}
+181 -250
View File
@@ -1,22 +1,22 @@
<div class="main">
<div class="main">
<div id="c_grid-116273709439191"> <div class="p_gridbox signal s_tmpl">
<div id="content_box-116273709439191-0" class="d_gridCell_0 p_gridCell ND_empty"><div id="c_navigation_006_P_1060-17155922968550">
<div class="e_navigationA-12 header response-transition" needjs="false">
<div class="e_navigationA-12 header response-transition" needjs="false">
<link type="text/css" rel="stylesheet" href="./关于我们_files/18609477787948809dba96f603809665.css">
<link type="text/css" rel="stylesheet" href="./关于我们_files/08f89a44fe3740fb928b292eecbf4152.css">
<div class="leftNav">
<div class="logorim"><a href="http://www.haihofoods.com/">
<img src="./关于我们_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
<img src="./关于我们_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
</a>
<!--底-->
@@ -24,32 +24,32 @@
<div class="box">
<a href="javascript:;" class="active">
<svg t="1715309350939" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8064" width="200" height="200"><path d="M664.250054 368.541681c10.015098 0 19.892049 0.732687 29.67281 1.795902-26.647917-122.810047-159.358451-214.077703-310.826188-214.077703-169.353083 0-308.085774 114.232694-308.085774 259.274068 0 83.708494 46.165436 152.460344 123.281791 205.78483l-30.80868 91.730191 107.688651-53.455469c38.558178 7.53665 69.459978 15.308661 107.924012 15.308661 9.66308 0 19.230993-0.470721 28.752858-1.225921-6.025227-20.36584-9.521864-41.723264-9.521864-63.862493C402.328693 476.632491 517.908058 368.541681 664.250054 368.541681zM498.62897 285.87389c23.200398 0 38.557154 15.120372 38.557154 38.061874 0 22.846334-15.356756 38.156018-38.557154 38.156018-23.107277 0-46.260603-15.309684-46.260603-38.156018C452.368366 300.994262 475.522716 285.87389 498.62897 285.87389zM283.016307 362.090758c-23.107277 0-46.402843-15.309684-46.402843-38.156018 0-22.941502 23.295566-38.061874 46.402843-38.061874 23.081695 0 38.46301 15.120372 38.46301 38.061874C321.479317 346.782098 306.098002 362.090758 283.016307 362.090758zM945.448458 606.151333c0-121.888048-123.258255-221.236753-261.683954-221.236753-146.57838 0-262.015505 99.348706-262.015505 221.236753 0 122.06508 115.437126 221.200938 262.015505 221.200938 30.66644 0 61.617359-7.609305 92.423993-15.262612l84.513836 45.786813-23.178909-76.17082C899.379213 735.776599 945.448458 674.90216 945.448458 606.151333zM598.803483 567.994292c-15.332197 0-30.807656-15.096836-30.807656-30.501688 0-15.190981 15.47546-30.477129 30.807656-30.477129 23.295566 0 38.558178 15.286148 38.558178 30.477129C637.361661 552.897456 622.099049 567.994292 598.803483 567.994292zM768.25071 567.994292c-15.213493 0-30.594809-15.096836-30.594809-30.501688 0-15.190981 15.381315-30.477129 30.594809-30.477129 23.107277 0 38.558178 15.286148 38.558178 30.477129C806.808888 552.897456 791.357987 567.994292 768.25071 567.994292z" p-id="8065"></path></svg><p>微信公众号</p>
<!--底部弹出二维码-->
<div class="lang-ewm">
<img src="./关于我们_files/990a73b8-b155-4497-bd14-bb4471955bb2.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
<div class="box">
<a href="https://288720708.cms.n.weimob.com/bos/cms/288720708/6000845660708/4485801708/design/index?productInstanceId=4485801708" class="active">
<svg t="1715309293797" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6171" width="200" height="200"><path d="M774.30784 305.664h-74.9568c0-103.5264-83.92704-187.55584-187.35104-187.55584s-187.35104 84.02944-187.35104 187.55584h-74.9568c-41.20576 0-74.5472 33.77152-74.5472 75.03872L174.73536 830.8736a75.20256 75.20256 0 0 0 74.9568 75.03872h524.5952a75.20256 75.20256 0 0 0 74.9568-75.03872V380.7232a75.20256 75.20256 0 0 0-74.9568-75.03872zM512 193.1264a112.3328 112.3328 0 0 1 112.4352 112.5376H399.5648a112.3328 112.3328 0 0 1 112.4352-112.5376H512z m0 375.15264c-103.424 0-187.35104-84.02944-187.35104-187.5968h74.93632a112.3328 112.3328 0 0 0 112.4352 112.55808 112.3328 112.3328 0 0 0 112.39424-112.5376h74.9568c0 103.54688-83.94752 187.57632-187.37152 187.57632z" p-id="6172"></path></svg>
<p>华阳商城</p>
<div class="lang-ewm">
<img src="./关于我们_files/b5d1469c-e180-4082-bd49-f1908c4fcd70.png" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
</div>
</div>
@@ -68,24 +68,14 @@
<div class="tm"><a href="#"><img src="/assets/13b83caddbcf011e0b50eee03b26c7ba.png" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<!--
<div class="jd"><a href="#"><img src="/assets/19ee30c37395ee21d738be878d3f8c60.png" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<div class="it_o">
<a href="tel:4006-535-700" rel="nofollow">服务热线:4006-535-700</a>
</div>
<div class="user01">
<a href="http://www.haihofoods.com/" target="_blank">
中
</a>
<a href="http://en.haihofoods.com/" target="_blank">
| 英
</a>
<a href="http://jp.haihofoods.com/" target="_blank">
| 日
</a>
<a href="http://kr.haihofoods.com/" target="_blank">
| 韩
</a>
<span class="haiho-lang" data-lang="zh_cn" role="button" tabindex="0">中</span>
<span class="haiho-lang" data-lang="en_us" role="button" tabindex="0">| 英</span>
<span class="haiho-lang" data-lang="ja_jp" role="button" tabindex="0">| 日</span>
</div>
</div>
<ul class="p_level1Box">
@@ -95,128 +85,116 @@
</div>
-->
<div class="navitem">
<li class="p_level1Item s_templatesum actived">
<p class="p_menuItem cntitle">
<a href="http://www.haihofoods.com/" target="">
<span>网站首页</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="http://www.haihofoods.com/About.html" target="">
<span>关于我们</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="http://www.haihofoods.com/product/2.html" target="">
<span>产品中心</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="http://www.haihofoods.com/news/8/" target="">
<span>华阳文化</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="http://www.haihofoods.com/news/1/" target="">
<span>华阳动态</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="http://www.haihofoods.com/join.html" target="">
<span>招商加盟</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
</li><li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="https://288720708.cms.n.weimob.com/bos/cms/288720708/6000845660708/4485801708/design/index?productInstanceId=4485801708" target="_blank">
<span>华阳商城</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="http://www.haihofoods.com/contact.html" target="">
<span>联系方式</span>
</a>
</p>
</li>
</div>
<div class="navimgbox">
<div class="imgitem actived" style="background:url(/assets/23a1a45c0021df8cdea0ec0b37fb4291.png) center no-repeat;background-size:cover;"><img src="/assets/23a1a45c0021df8cdea0ec0b37fb4291.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/26d888e02a0142786f3be6daaee419f9.png) center no-repeat;background-size:cover;"><img src="/assets/26d888e02a0142786f3be6daaee419f9.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/340d539b80432887304ff4d98f79b53c.png) center no-repeat;background-size:cover;"><img src="/assets/340d539b80432887304ff4d98f79b53c.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/55d5d2916224e4d023272d75283bc171.png) center no-repeat;background-size:cover;"><img src="/assets/55d5d2916224e4d023272d75283bc171.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/58bf0c6ffe1bab328b960718fd12496c.png) center no-repeat;background-size:cover;"><img src="/assets/58bf0c6ffe1bab328b960718fd12496c.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/61dd0b1a9e7f89703f46bbe99fc0e6fc.png) center no-repeat;background-size:cover;"><img src="/assets/61dd0b1a9e7f89703f46bbe99fc0e6fc.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/74a88fc7512d1fc4042472a8998d658a.png) center no-repeat;background-size:cover;"><img src="/assets/74a88fc7512d1fc4042472a8998d658a.png" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url(/assets/74a88fc7512d1fc4042472a8998d658a.png) center no-repeat;background-size:cover;"><img src="/assets/74a88fc7512d1fc4042472a8998d658a.png" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url(/assets/a4761f27bd3a1aa32740e1da2445de46.png) center no-repeat;background-size:cover;"><img src="/assets/a4761f27bd3a1aa32740e1da2445de46.png" alt="华阳食品" title="华阳食品" la="la"></div>
</div>
</ul>
</div>
@@ -241,7 +219,7 @@
<div class="e_html-16 s_list">
</div>
<link type="text/css" rel="stylesheet" href="./关于我们_files/9469677399bd48a4a97b4b10685b47fe.css">
@@ -262,8 +240,8 @@
<div class="logoBox">
<div class="logocai">
<!-- nLazyImage 'portal-saas/pg2024022811514093430/cms/image/cc37821e-0aa0-4c76-bb25-316efafe8b1b.png' '' true}}}
</div>
<div class="name cntitle">
<span>华</span><span>味</span><span>坊</span><span>食</span><span>品</span>
@@ -292,7 +270,7 @@
<div class="swiper-wrapper p_swiperContainer" id="swiper-wrapper-8cefa96c10411026f8" aria-live="polite" style="transform: translate3d(-1768px, 0px, 0px); transition: all;"><div class="swiper-slide p_slide swiper-slide-duplicate swiper-slide-duplicate-active swiper-slide-prev" data-swiper-slide-index="0" role="group" aria-label="1 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./关于我们_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -308,7 +286,7 @@
<div class="swiper-slide p_slide swiper-slide-active swiper-slide-duplicate-next swiper-slide-duplicate-prev" data-swiper-slide-index="0" role="group" aria-label="2 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./关于我们_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info anim">
@@ -324,7 +302,7 @@
<div class="swiper-slide p_slide swiper-slide-duplicate swiper-slide-duplicate-active swiper-slide-next" data-swiper-slide-index="0" role="group" aria-label="3 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./关于我们_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -370,9 +348,9 @@
</p></div>
</div>
<div class="p_page">
</div>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;企业概况-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:6,&quot;query&quot;:[{&quot;valueName&quot;:&quot;关于我们&quot;,&quot;dataType&quot;:&quot;array[category]&quot;,&quot;operator&quot;:&quot;in&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;DETAIL_ES.es_multi_category_01Sy2jv4&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;category_01Sy2jv4&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;2661&quot;,&quot;fieldType&quot;:&quot;array&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;text_r4O05cao,categoryName&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;60007&quot;,&quot;sourceUuid&quot;:&quot;1441959640303796224&quot;,&quot;pageParams&quot;:[],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list?cate=0&quot;,&quot;id&quot;:&quot;datasource10&quot;,&quot;apiId&quot;:&quot;18515&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list?cate=0|{\&quot;size\&quot;:6,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;关于我们\&quot;,\&quot;dataType\&quot;:\&quot;array[category]\&quot;,\&quot;operator\&quot;:\&quot;in\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;DETAIL_ES.es_multi_category_01Sy2jv4\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;category_01Sy2jv4\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;2661\&quot;,\&quot;fieldType\&quot;:\&quot;array\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_r4O05cao,categoryName\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_r4O05cao,categoryName\&quot;}&quot;}">
@@ -415,23 +393,23 @@
</div><div class="e_container-16 s_layout">
<div class="cbox-16-0 p_item"><div class="e_image-17 s_img">
<img src="./关于我们_files/b21f562e-38af-4769-b7ef-b229911687db.jpg_1920xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div><div class="e_container-18 s_layout">
<div class="cbox-18-0 p_item"><div class="e_container-19 s_layout">
<div class="cbox-19-0 p_item"><div class="e_image-20 s_img">
<img src="./关于我们_files/6343b360-38e8-4ea8-aed5-e90b25833654.jpg_1180xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div>
<div class="cbox-18-1 p_item"><div class="e_container-21 s_layout">
<div class="cbox-21-0 p_item"><div class="e_image-22 s_img">
<img src="./关于我们_files/534b8742-1e7e-434e-8372-291b6c9416a8.jpg_1180xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div>
</div></div>
@@ -443,137 +421,137 @@
</h1><div class="e_loop-11 s_list" needjs="true" ds-id="" elem-id="e_loop-11" saf-loop-swiper="" saf-sw-auto="true,3000" saf-sw-loop="true" saf-sw-between="30" saf-sw-num="4,3,2,2" saf-sw-type="fraction" saf-sw-speed="800">
<div class="">
<div class="p_list saf-swiper0">
<div class="swiper-container swiper-initialized swiper-horizontal swiper-pointer-events"><div class="swiper-wrapper" id="swiper-wrapper-89b5107f9cb37d9b1" aria-live="off" style="transform: translate3d(-1787.5px, 0px, 0px); transition-duration: 0ms;"><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-next" data-swiper-slide-index="2" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="3 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/d64cd0704e75cee173b95e11548d9253.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
出口食品备案证明
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate" data-swiper-slide-index="3" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="4 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/e12c2b47599d6d39200d29fcc7aa4ca1.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
MSC认证
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate" data-swiper-slide-index="4" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="5 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/f18b44809c1c5a935832895c58d6f2e1.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
FSSC22000食品安全管理体系认证
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate" data-swiper-slide-index="5" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="6 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/23a1a45c0021df8cdea0ec0b37fb4291.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
BRCGS认证
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-prev" data-swiper-slide-index="0" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="1 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/26d888e02a0142786f3be6daaee419f9.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
ISO9001质量管理体系认证
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-active" data-swiper-slide-index="1" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="2 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/340d539b80432887304ff4d98f79b53c.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
HACCP体系认证
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-next" data-swiper-slide-index="2" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="3 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/d64cd0704e75cee173b95e11548d9253.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
出口食品备案证明
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide" data-swiper-slide-index="3" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="4 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/e12c2b47599d6d39200d29fcc7aa4ca1.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
MSC认证
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide" data-swiper-slide-index="4" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="5 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/f18b44809c1c5a935832895c58d6f2e1.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
FSSC22000食品安全管理体系认证
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide" data-swiper-slide-index="5" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="6 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/23a1a45c0021df8cdea0ec0b37fb4291.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
BRCGS认证
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-prev" data-swiper-slide-index="0" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="1 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/26d888e02a0142786f3be6daaee419f9.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
ISO9001质量管理体系认证
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-active" data-swiper-slide-index="1" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="2 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/340d539b80432887304ff4d98f79b53c.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
HACCP体系认证
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-next" data-swiper-slide-index="2" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="3 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/d64cd0704e75cee173b95e11548d9253.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
出口食品备案证明
</p></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate" data-swiper-slide-index="3" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="4 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./关于我们_files/s.png" lazy="/assets/e12c2b47599d6d39200d29fcc7aa4ca1.png" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div><p class="e_text-14 s_title">
MSC认证
</p></div>
</div></div></div><span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span></div>
<div class="saf-sBar"><div class="saf-s-Btn s_prev" tabindex="0" role="button" aria-label="Previous slide" aria-controls="swiper-wrapper-89b5107f9cb37d9b1"><svg xmlns="http://www.w3.org/2000/svg" width="47.062" height="100" viewBox="0 0 47.062 100">
<path id="prev" d="M249.333,341.48l-44.3,44.538a7.842,7.842,0,0,1-11.247,0l-44.45-44.685c14.044,11.585,31.359,18.424,50.088,18.424a78.331,78.331,0,0,0,49.912-18.274Z" transform="translate(388.395 -149.333) rotate(90)"></path>
</svg></div><div class="saf-cn-pagination fraction swiper-pagination-fraction swiper-pagination-horizontal"><span class="swiper-pagination-current">2</span> / <span class="swiper-pagination-total">6</span></div><div class="saf-s-Btn s_next" tabindex="0" role="button" aria-label="Next slide" aria-controls="swiper-wrapper-89b5107f9cb37d9b1"><svg xmlns="http://www.w3.org/2000/svg" width="47.062" height="100" viewBox="0 0 47.062 100">
<path id="next" d="M100,46.914,55.7,2.376a7.842,7.842,0,0,0-11.247,0L0,47.062C14.044,35.476,31.359,28.638,50.088,28.638A78.331,78.331,0,0,1,100,46.912Z" transform="translate(47.062) rotate(90)"></path>
</svg></div></div></div>
<div class="p_page">
</div>
</div>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;产品-产品列表&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:20,&quot;query&quot;:[{&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;category.id&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;categoryId&quot;,&quot;valueName&quot;:&quot;Qualification&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;dataType&quot;:&quot;string&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;1149732735974268928&quot;,&quot;operator&quot;:&quot;eq&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/product/datasource/143150160001/product/list/param/value&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;appId&quot;:&quot;143150160001&quot;,&quot;sourceUuid&quot;:&quot;d2f12f858d9f46eeb5b049baa1dffc37&quot;,&quot;pageParams&quot;:[],&quot;metaUrl&quot;:&quot;/fwebapi/product/datasource/143150160001/product/list/meta&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/product/product/es/findPage?appId=143150160001&amp;templateId=product&quot;,&quot;id&quot;:&quot;datasource4&quot;,&quot;apiId&quot;:&quot;product&quot;,&quot;reqKey&quot;:&quot;/fwebapi/product/product/es/findPage?appId=143150160001&amp;templateId=product|{\&quot;size\&quot;:20,\&quot;query\&quot;:[{\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;category.id\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;categoryId\&quot;,\&quot;valueName\&quot;:\&quot;Qualification\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;dataType\&quot;:\&quot;string\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;1149732735974268928\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;\&quot;}&quot;}">
<input type="hidden" name="view" value="About">
@@ -600,7 +578,7 @@
<div class="cbox-95-0 p_item"><div class="e_input-99 s_form1 form-group" needjs="true">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="姓名">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -608,7 +586,7 @@
<div class="cbox-95-1 p_item"><div class="e_input-98 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="电话">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -616,17 +594,15 @@
<div class="cbox-95-2 p_item"><div class="e_input-97 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="需求信息">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
</div></div>
<div class="cbox-95-3 p_item"><a class="e_formBtn-96 s_button1 btn btn-primary" href="javascript:;" needjs="true">
<span>提交</span>
</a></div>
</div></div>
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
</form></div>
</div><div class="e_container-60 s_layout">
<div class="cbox-60-0 p_item"><div class="e_richText-81 s_title clearfix">
@@ -634,17 +610,17 @@
<p style="font-size:14px;line-height:24px">&nbsp;</p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:16px;"><strong><span style="font-size:14px;">服务热线:</span></strong></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="tel:4006-535-700" rel="nofollow"><span style="color:#FF0000;">4006-535-700</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">E-mail:</span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="mailto:haiho@haihofoods.com" rel="nofollow"><span style="color:#FF0000;">haiho@haihofoods.com</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">地址 : </span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">中国•烟台•芝罘岛东路51号</span></span></p>
</div></div>
<div class="cbox-60-1 p_item"></div>
@@ -657,7 +633,7 @@
<a href="http://www.haihofoods.com/" target="">
<span>网站首页</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -677,7 +653,7 @@
<a href="http://www.haihofoods.com/About.html#c_static_001_P_8883-17121276215300" target="">
<span>公司简介</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -687,7 +663,7 @@
<a href="http://www.haihofoods.com/About.html#c_static_001_P_4578-16941414442160" target="">
<span>资质荣誉</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -697,7 +673,7 @@
<a href="http://www.haihofoods.com/Quality.html" target="">
<span>品质技术</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -707,7 +683,7 @@
<a href="http://www.haihofoods.com/History.html#c_static_001_P_8883-17121276215300" target="">
<span>发展历程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -717,7 +693,7 @@
<a href="http://www.haihofoods.com/History.html#c_static_001_P_4578-16941414442160" target="">
<span>店面展示</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -739,7 +715,7 @@
<a href="http://www.haihofoods.com/product/17/" target="">
<span>礼盒系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -749,7 +725,7 @@
<a href="http://www.haihofoods.com/product/1.html" target="">
<span>华阳金标海参</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -759,7 +735,7 @@
<a href="http://www.haihofoods.com/product/21/" target="">
<span>生鲜系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -769,7 +745,7 @@
<a href="http://www.haihofoods.com/product/15/" target="">
<span>无骨系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -779,7 +755,7 @@
<a href="http://www.haihofoods.com/product/16/" target="">
<span>调味系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -789,7 +765,7 @@
<a href="http://www.haihofoods.com/product/18/" target="">
<span>裹粉系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -799,7 +775,7 @@
<a href="http://www.haihofoods.com/product/19/" target="">
<span>休闲即食系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -821,7 +797,7 @@
<a href="http://www.haihofoods.com/news/9/" target="">
<span>七道鲜文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -831,7 +807,7 @@
<a href="http://www.haihofoods.com/news/10/" target="">
<span>节庆文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -841,7 +817,7 @@
<a href="http://www.haihofoods.com/news/11/" target="">
<span>礼品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -851,7 +827,7 @@
<a href="http://www.haihofoods.com/news/12/" target="">
<span>企业文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -861,7 +837,7 @@
<a href="http://www.haihofoods.com/news/13/" target="">
<span>历史文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -871,7 +847,7 @@
<a href="http://www.haihofoods.com/news/14/" target="">
<span>产品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -881,7 +857,7 @@
<a href="http://www.haihofoods.com/news/15/" target="">
<span>...</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -903,7 +879,7 @@
<a href="http://www.haihofoods.com/news/4/" target="">
<span>华阳新闻</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -913,7 +889,7 @@
<a href="http://www.haihofoods.com/news/5/" target="">
<span>行业动态</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -923,61 +899,18 @@
<a href="http://www.haihofoods.com/news/6/" target="">
<span>媒体报道</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-5 open">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="http://www.haihofoods.com/join.html" target="">
<span>招商加盟</span>
</a>
<svg t="1625735163067" class="icon p_jtIcon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1486" width="200" height="200"><path d="M661.16183428 486.94732961L415.99871022 219.24359155c-13.37500289-14.59708438-35.98351032-15.54759219-50.51270128-2.24048272-14.59708438 13.37500289-15.54759219 35.98351032-2.24048272 50.51270127l223.09776396 243.60157549-222.89408371 244.28050967c-13.30710947 14.59708438-12.28870823 37.20559179 2.30837613 50.51270125 14.59708438 13.30710947 37.20559179 12.28870823 50.51270128-2.30837613l244.75576356-268.11109855c0.47525392-0.54314733 1.01840124-1.15418807 1.42576173-1.6973354 11.13452018-13.51078973 10.93083994-33.53934734-1.2899749-46.84645682z" p-id="1487"></path></svg>
</p>
<!-- 子集 -->
<ul class="mt-2 p_level2Box s_templatesum">
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟细则</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟流程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟资质</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-7">
</li><li class="pt-1 pb-1 p_level1Item saf-d-7">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="https://288720708.cms.n.weimob.com/bos/cms/288720708/6000845660708/4485801708/design/index?productInstanceId=4485801708" target="_blank">
<span>华阳商城</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -987,14 +920,14 @@
<a href="http://www.haihofoods.com/contact.html" target="">
<span>联系方式</span>
</a>
</p>
<!-- 子集 -->
</li>
</ul>
<!-- 导航内容 结束 -->
</div>
</div>
@@ -1036,9 +969,9 @@
<path id="slider" d="M246.848,168.96h-86a6.986,6.986,0,0,0-6.991,6.991v66.232a5.446,5.446,0,0,0,5.445,5.445h89.11a5.446,5.446,0,0,0,5.445-5.445V175.951A7,7,0,0,0,246.848,168.96Zm-18.275,6.785h8.485v8.485h-8.485Zm-14.96,0H222.1v8.485h-8.485Zm-14.96,0h8.485v8.485h-8.485Zm45.517,66.4H162.444v-50.4h81.724Zm-8.348,18.035H171.874a3.246,3.246,0,1,1,0-6.493h63.947a3.246,3.246,0,1,1,0,6.493Z" transform="translate(-153.856 -168.96)"></path>
</svg>
<a href="http://www.haihofoods.com/taglist.html" target="_self">
营业执照及SEO链接: 营业执照
</a>
</div><div class="e_container-41 s_layout">
<div class="cbox-41-0 p_item"><div class="e_richText-40 s_title clearfix saf-setItem">
@@ -1053,8 +986,8 @@
<p style="text-align: center;"><span style="line-height:2;">您可以查看其他栏目或返回&nbsp;<a href="http://www.haihofoods.com/"><span style="color:#FF0000;">首页</span></a></span></p>
</div>
</div></div>
</div></div>
</div>
@@ -1095,7 +1028,7 @@
</div><div class="e_html-31 s_list">
<h3>SVG图标库<span>请自行添加图标,用div包起来,并命名使用</span></h3>
<div class="saf-svgs">
<div class="search">
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="96.983" viewBox="0 0 100 96.983">
<path id="search" d="M93.962,95.944,77.127,79.11a45.789,45.789,0,1,1,4.77-5.235L98.965,90.942a3.537,3.537,0,1,1-5,5ZM7.079,45.825a38.7,38.7,0,1,0,38.7-38.7A38.7,38.7,0,0,0,7.079,45.825Z"></path>
@@ -1151,11 +1084,11 @@
<svg t="1683854973181" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20559" width="200" height="200"><path d="M713.5 599.9c-10.9-5.6-65.2-32.2-75.3-35.8-10.1-3.8-17.5-5.6-24.8 5.6-7.4 11.1-28.4 35.8-35 43.3-6.4 7.4-12.9 8.3-23.8 2.8-64.8-32.4-107.3-57.8-150-131.1-11.3-19.5 11.3-18.1 32.4-60.2 3.6-7.4 1.8-13.7-1-19.3-2.8-5.6-24.8-59.8-34-81.9-8.9-21.5-18.1-18.5-24.8-18.9-6.4-0.4-13.7-0.4-21.1-0.4-7.4 0-19.3 2.8-29.4 13.7-10.1 11.1-38.6 37.8-38.6 92s39.5 106.7 44.9 114.1c5.6 7.4 77.7 118.6 188.4 166.5 70 30.2 97.4 32.8 132.4 27.6 21.3-3.2 65.2-26.6 74.3-52.5 9.1-25.8 9.1-47.9 6.4-52.5-2.7-4.9-10.1-7.7-21-13z m211.7-261.5c-22.6-53.7-55-101.9-96.3-143.3-41.3-41.3-89.5-73.8-143.3-96.3C630.6 75.7 572.2 64 512 64h-2c-60.6 0.3-119.3 12.3-174.5 35.9-53.3 22.8-101.1 55.2-142 96.5-40.9 41.3-73 89.3-95.2 142.8-23 55.4-34.6 114.3-34.3 174.9 0.3 69.4 16.9 138.3 48 199.9v152c0 25.4 20.6 46 46 46h152.1c61.6 31.1 130.5 47.7 199.9 48h2.1c59.9 0 118-11.6 172.7-34.3 53.5-22.3 101.6-54.3 142.8-95.2 41.3-40.9 73.8-88.7 96.5-142 23.6-55.2 35.6-113.9 35.9-174.5 0.3-60.9-11.5-120-34.8-175.6z m-151.1 438C704 845.8 611 884 512 884h-1.7c-60.3-0.3-120.2-15.3-173.1-43.5l-8.4-4.5H188V695.2l-4.5-8.4C155.3 633.9 140.3 574 140 513.7c-0.4-99.7 37.7-193.3 107.6-263.8 69.8-70.5 163.1-109.5 262.8-109.9h1.7c50 0 98.5 9.7 144.2 28.9 44.6 18.7 84.6 45.6 119 80 34.3 34.3 61.3 74.4 80 119 19.4 46.2 29.1 95.2 28.9 145.8-0.6 99.6-39.7 192.9-110.1 262.7z" p-id="20560"></path></svg>
</div>
</div>
</div>
</div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<link type="text/css" rel="stylesheet" href="./关于我们_files/a542852518db4913ba26b2cb5f622c2a.css">
<link type="text/css" rel="stylesheet" href="./关于我们_files/abe57529cab54a19b6da0041db3fb122.css">
<link type="text/css" rel="stylesheet" href="./关于我们_files/6f7215910b184bd6873d42388538e76c.css">
@@ -1170,32 +1103,32 @@
<saf-online class="saf-online">
<div class="p_list">
<saf-loopitem class="cbox-1 saf-lineitem">
<a href="https://shop334620362.taobao.com/?spm=pc_detail.29232929/evo365560b447259.shop_block.dentershop.30317dd6gumxmK">
<saf-icon><span><svg t="1734400707687" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2770" width="32" height="32"><path d="M336.64 848a58.666667 58.666667 0 0 1 3.562667 117.226667l-3.562667 0.106666a58.666667 58.666667 0 0 1-3.584-117.226666l3.584-0.106667zM165.290667 90.090667c13.973333 0 26.005333 10.453333 28.736 24.938666l24.64 130.090667h726.08c16.213333-0.021333 29.354667 13.845333 29.376 30.976 0 2.261333-0.234667 4.522667-0.704 6.741333L886.912 688.853333l0.021333-72.746666-0.192-4.842667a61.44 61.44 0 0 0-85.696-51.52l-3.498666 1.664-188.074667 96.149333-3.541333 1.962667a61.44 61.44 0 0 0-29.802667 48.661333l-0.128 4.053334v81.856H295.914667c-27.584 0-51.456-20.330667-57.322667-48.832L120.405333 182.890667a52.266667 52.266667 0 0 1-4.394666 0.213333H86.677333C62.357333 183.104 42.666667 162.282667 42.666667 136.597333c0-25.685333 19.690667-46.506667 44.010666-46.506666h78.613334z" fill="#666666" p-id="2771"></path><path d="M825.813333 597.333333l2.218667 0.170667a18.752 18.752 0 0 1 16.106667 16.384l0.128 2.218667V972.8H637.44l-2.346667-0.149333a18.773333 18.773333 0 0 1-15.786666-13.781334l-0.490667-2.496-0.149333-2.346666V712.256l0.192-2.602667a18.773333 18.773333 0 0 1 7.808-12.757333l2.24-1.344 188.053333-96.149333 2.154667-0.96a18.688 18.688 0 0 1 4.458666-1.002667L825.813333 597.333333zM704 853.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667z m-85.333333-85.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667zM937.813333 972.778667l2.346667-0.149334a18.773333 18.773333 0 0 0 16.277333-16.277333l0.149334-2.346667v-145.706666a18.773333 18.773333 0 0 0-6.954667-14.592l-1.984-1.408-56.32-34.602667a18.773333 18.773333 0 0 0-4.394667-1.984l-0.32-0.085333a18.773333 18.773333 0 0 0-23.744 15.701333l-0.149333 2.346667V972.8h75.093333z" fill="#666666" p-id="2772"></path></svg></span></saf-icon>
</a>
<!-- <p class="codeimg"><img src="/assets/7970c4a5-f3a4-46fa-a544-fba3f1ba3761-1.png" alt="二维码" title="二维码" la="la"/></p> -->
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="http://www.haihofoods.com/About.html"><span><svg height="78.564" viewBox="0 0 100 78.564" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M73.1,171.8h80a9.952,9.952,0,0,1,10,9.7l-49.983,27.437-49.971-27.4A9.9,9.9,0,0,1,73.1,171.8Zm-9.955,20.234L63.1,240.548a9.937,9.937,0,0,0,10,9.816h80a9.937,9.937,0,0,0,10-9.816V192.01l-48.8,26.153a2.511,2.511,0,0,1-2.393,0l-48.757-26.13Z" id="e-mail" transform="translate(-63.1 -171.8)"></path> </svg></span></a></saf-icon>
<p><a href="http://www.haihofoods.com/About.html">邮箱:haiho@haihofoods.com</a></p>
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="http://www.haihofoods.com/About.html"><span><svg height="100.001" viewBox="0 0 100 100.001" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M179.688,165.873a6.273,6.273,0,0,1,0,8.861l-4.431,4.431a21.371,21.371,0,0,1-12.8,5.929,31.058,31.058,0,0,1-3.9.24,43.582,43.582,0,0,1-12.237-1.918c-11.777-3.461-24.163-11.268-34.867-21.974s-18.513-23.089-21.975-34.867A39.857,39.857,0,0,1,87.8,110.439a21.371,21.371,0,0,1,5.929-12.8l4.431-4.431a6.273,6.273,0,0,1,8.861,0l19.5,19.5a6.274,6.274,0,0,1,0,8.862l-4.431,4.428c-2.507,2.507-.012,10.623,7.09,17.724s15.214,9.6,17.724,7.09l4.431-4.431a6.274,6.274,0,0,1,8.862,0Zm-32.233-45.448a5.019,5.019,0,0,1,5.013,5.013,2.507,2.507,0,0,0,5.013,0,10.037,10.037,0,0,0-10.026-10.026,2.507,2.507,0,0,0,0,5.013Zm36.952-10.6a40.074,40.074,0,0,0-36.952-24.494,2.507,2.507,0,0,0,0,5.013,35.134,35.134,0,0,1,35.092,35.092,2.507,2.507,0,1,0,5.013,0,39.848,39.848,0,0,0-3.153-15.611Zm-36.952-4.441a20.075,20.075,0,0,1,20.052,20.052,2.507,2.507,0,1,0,5.013,0,25.065,25.065,0,0,0-25.065-25.065,2.507,2.507,0,0,0,0,5.013Z" id="tel-1" transform="translate(-87.56 -85.333)"></path> </svg></span></a></saf-icon>
<p><a href="http://www.haihofoods.com/About.html">电话:4006-535-700</a></p>
</saf-loopitem>
<saf-loopitem class="saf-lineitem backTop"><saf-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="14.438" viewBox="0 0 20 14.438">
<path id="路径_804" data-name="路径 804" d="M216.687,81.683V98.356a1.66,1.66,0,0,1-2.774,1.24l-11-8.245a1.666,1.666,0,0,1-.329-2.327,1.459,1.459,0,0,1,.329-.329l11.119-8.34a1.66,1.66,0,0,1,2.321.335,1.62,1.62,0,0,1,.335.993h0Zm0,0" transform="translate(100.025 -202.249) rotate(90)"></path>
</svg></saf-icon></saf-loopitem>
</div>
<div class="p_page">
</div>
</saf-online>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;在线客服-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:20,&quot;query&quot;:[{&quot;valueName&quot;:&quot;&quot;,&quot;dataType&quot;:&quot;number&quot;,&quot;operator&quot;:&quot;eq&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;CID&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;CID&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;&quot;,&quot;fieldType&quot;:&quot;number&quot;,&quot;configurable&quot;:{&quot;sourceType&quot;:&quot;page&quot;,&quot;type&quot;:&quot;normal&quot;,&quot;value&quot;:&quot;_detailId&quot;}}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;TEXT_DETAIL_ES.es_text_rudao&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;rudao&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;125326&quot;,&quot;sourceUuid&quot;:&quot;1473112731287683072&quot;,&quot;pageParams&quot;:[{&quot;code&quot;:&quot;_detailId&quot;,&quot;name&quot;:&quot;默认参数&quot;}],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0&quot;,&quot;id&quot;:&quot;datasource1&quot;,&quot;apiId&quot;:&quot;407257&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\&quot;size\&quot;:20,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;\&quot;,\&quot;dataType\&quot;:\&quot;number\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;CID\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;CID\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;\&quot;,\&quot;fieldType\&quot;:\&quot;number\&quot;,\&quot;configurable\&quot;:{\&quot;sourceType\&quot;:\&quot;page\&quot;,\&quot;type\&quot;:\&quot;normal\&quot;,\&quot;value\&quot;:\&quot;_detailId\&quot;}}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;}&quot;}">
<input type="hidden" name="view" value="About">
@@ -1226,5 +1159,3 @@
<div class="licenseBox"><a href="javascript:;">×</a><div class="licenseRim"><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAI4AyADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAAAAECBAUGAwcI/8QAVhAAAQMDAwIEAwMIAwwIBQIHAQIDEQAEIQUSMUFRBhMiYRRxgTKRoQcVI0KxwdHwFlLhJDM0NWJyc5KTsrPxCDZDU1RVdIIlRIOUohdjZBgmRYSj0v/EABoBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQb/xAAyEQEBAQABBAICAQIEBQQDAAAAARECAxIhMQRBE1FhBXEiMoGRFVKx0fAUI6HhQsHx/9oADAMBAAIRAxEAPwD6og96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPekW4ltKluKCEJElSjAAqvttatLy4S1YebdpJgvMoJaT/AO/7J+QJPtQWMHvRB71nbvV71u8ugLeLNvale9JLiJn1AI3SDHXbHPFQvCd3eG4sLe9unSsWy0O2q0pSWlo2RPJMpVMk59qDXwe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvQTAkwBSgyJoEg96IPelooEg96IPeuN7eW1iyXr24at2hje6sJH41GttURdIeXbW12ttCZSotbA4eyd0E/Pj3oJ8HvRB71itS1XVX9MSEsbnFOJcYU0hSlKCXASFbfQCEgyAo7ulXnhm6Xci+33irxKXUlt0hIBQpCVCAkDuaC5g96IPelpCJFAQe9EHvSiigSD3og96WigSD3og96WigSD3og96WigSD3og96WigSD3og96CY5paBIPeiD3paKBIPeiD3paKAooooCiiigKKQmOhNLQFFFFAUUUUBRRRQFFFFAUUUUBRRRQFFFFAUUUUBRRSdaBaKKKAooooCiimLcS2lanCEISJKlGABQPorMOeJ1PXrrWmtIum2SFKWggoU2R9vzCQlMEKB54p+t6Nc32mXTi9QuXnSguMsIUENYyEkJgqB49RP0oLZerWKX3GE3CHbhtO5bLX6RYHulMms1c+Kn3mVrZYeaFu6pD6WYcWE5EztKEQCFSpQ4IipuiruLjT7ZkaPp40q6RM2zg2pSRPqbUkD2wTWeRbv2GrlgoTetLdcSRtK0g8gRCW0K2AghAUccZoNAEv3zCE3Wms6jdW7hQnz3UQgwFS4AnaFQR9gK+lQNERcuXBsLu8dYtlv3AbbsyEJJSqVJ3/b/WVEbfsmpOg2Ot2jDbbYabZc8x7e8sqWmUwhC0xkphOQelXTOiWY0xiyumkXSGzvKnUyVLMkqPuST99BntQZRfq+F0h15m5XdeW6lw+a2tLW0lS5zEBIwQZPzqwXo15e6urUHnRYXTTCWW3bbareTlRO4ZTwACJwa0LDLVuylq3bQ00kQlCEhKQPYCn0DWwpLaQtW5QABVESe8U6iigKKKKAooooCiiigKJzRXF95DDZcdUlDaRJUowBQdpFIFCsxdeJULUlGmMKuCoEhxXpRj3559qpNQ8S6my+ygutbVnaoNJkpV3z096xepxj1dP4fV6l9Y9C3CiRWKTfX50T45V05u83YQAIInmI5qJb+I9TD7iN7ZCcAOpjefaKfki8fhdTluWeHoMiaJrLWHihC0k3rJaSMl1B3JGeD1H3VomX232wtlSVoVwoGQa1LL6cOp0ufSuco70UgparmKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiuF7eW9iwXbt9phvgKdWEgntJoOygCIIkUilJQgqUQlIGSTAFZrTtdu9UKfJZDDLwLYdWkDynRykbiC5weEioviPSl2psrx15WpEPBpxN+qWfXhKtiRtEKjITOaC5vvEFq3pr91YKF95Uj9CZRIEkFf2R9TVKvX7y9uWfgxcIauEgsloJKAoSSFLWkAgp5CdxG3FT7+2vdR0y6t72xtbN1lsqt30OodQFQeNyJT7nbwcGsvasXT7NzYssLW5CBb3CQsqbBwlXmL9SkpIV+qExOTMUF3rLBvdNurxvS7Le9aFa75x3cEpKZ/R+ncY9wgV101bjzFxc6pd3bj9mhLpYSsMNwUBQICTJHI9RIkGu7OmandWarG+LFvZDymyhpRXvbSDuAMAjd6RmcT86uLnSrC6uEP3NnbuvIACVLQFEAcc9qDOWFu87q9q9ozk2Nqwn9DciUp8wJO1CgJCgkAmdwz0mpuiaJcWjq7sXCrRy5eU8/aISlTRB4HEgxEkHJmtFRQFFFFAUUUUBRRRQFFFFAUUUUBRRRQEZoiiigaDNOo6UUBRRRQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffSffSzSEZFAffS/fRNE0B99H30TRNAffR99E0x51DLanHlobbSJUpRgAe5oH/AH0ffUWw1C11BpbljcNvtpVsKmzImAefqKlTQRru/tLMxdXLLJjd+kWE4mOvvUD8+NvvOsWLLjj6WlOJDkNzHHpVC4JjITHvVH4vtX7TUPzspxa7fZ5aghEFlIEg7gpJgndPqAMpEGoenBy21XTXG21IHmKMBOxOwj1KP2BGQZ2GTHqM5CQ7qLd3pzT51V+5Wpbbt23bktpabOCj0ZRG6cqkwaXUtNbtF3tpbsbkthN7bJCEuKCZAdCAoEbsSCQcqqfZWN5cG6sm1so0NbqnEOoUFqeQvJQOQEhRUJ56COam6XoiGmAu+U67elryFOh9ZhPHoz6JgExGaDL6k5cBi4YQp1V+SWWmHHEuuqadACkK2mEqBBUBMQO0xsNEvV3ibj9A80w0tKGvNZU0ojaJkK7GRIxUm1sLS1baRb2zLaWiSiEj0k8me56nrUqaCDpFidOYdYDm9ourW2IjYlRnb9CTU2lmiaA++j76JomgPvo++iaJoD76PvomiaA++j76JomgPvo++iaJoD76T76Wa4XDvksuOEYSkn7hQR9T1FjTbRT9ysATCROVHoBWKvb4am6l15x0uoV6GEDciCDwJEkckntVdqN8rVXPiL4FbC0p8pp1IATJI/aOvaarb6/t9Mtm27Y+asGRwSFJMRu6iO3evPz6nu30+58X4GZJ553/AGT7i7DVok3D7bSXUEISlZGO6gRIECMHrVVceILVAcSw2tSXAJVHqSZGEkmIEYPNZ68uXLtYU6omAQAeg7V20ZFk7dJb1R51hpWA62AoJ9yO3yrx/n5crnF+h4f0zp9Lh39Xb/Ear+mb35uOzSmTbB2Cok/aiR/7veoVt4itlKbTcsnagHlIJUcwCegzyM1tmvCGnHwuvTk3SyytfxHxIieMH5RXlust6YxdlrSrh+6bThTrgACv82unVvV6cl5V4/gT4Xy+XLh0+Nl3+fX8tczceagfCOsupQkAoG4yDyUJGcCZknIqwsb9WnOeZbun4hSpcaUQE7QByOJIzI715xbXbtssKYWpCh0BwR7itPp99b6lbPC8UQpMqIERuJA7SBH7KdPr91/lPl/029GbfPF6xpOpMajbB1kkKGFIPKT2qwFeS2t07plyH9N3hIlS0p4eA4GefaK9UtHxcW7bqYIWkKx717eHPunl+a+X8X8F2eq7/fR99E0TW3kH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TUa+v7Wwa8y9uGWEHALiwmT2Hc0En76PvrnbvN3DDbzKgtpxIUlQ4IPBp8mghXGrWNuoocuUF0EjyketwkcgJTJJ+QqqvtfLmnLfsiGGkvpYcuHdqg0Dgq2hWIkYVETJFZzULN7Tb96Line truncated
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1011 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 984 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 509 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 629 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 613 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 456 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 738 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 427 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 823 KiB

+137 -212
View File
@@ -2,21 +2,21 @@
<div id="c_grid-116273709439191"> <div class="p_gridbox signal s_tmpl">
<div id="content_box-116273709439191-0" class="d_gridCell_0 p_gridCell ND_empty"><div id="c_navigation_006_P_1060-17155922968550">
<div class="e_navigationA-12 header response-transition" needjs="false">
<div class="e_navigationA-12 header response-transition" needjs="false">
<link type="text/css" rel="stylesheet" href="./联系我们_files/18609477787948809dba96f603809665.css">
<link type="text/css" rel="stylesheet" href="./联系我们_files/08f89a44fe3740fb928b292eecbf4152.css">
<div class="leftNav">
<div class="logorim"><a href="javascript:;">
<img src="./联系我们_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
<img src="./联系我们_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
</a>
<!--底-->
@@ -24,32 +24,32 @@
<div class="box">
<a href="javascript:;" class="active">
<svg t="1715309350939" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8064" width="200" height="200"><path d="M664.250054 368.541681c10.015098 0 19.892049 0.732687 29.67281 1.795902-26.647917-122.810047-159.358451-214.077703-310.826188-214.077703-169.353083 0-308.085774 114.232694-308.085774 259.274068 0 83.708494 46.165436 152.460344 123.281791 205.78483l-30.80868 91.730191 107.688651-53.455469c38.558178 7.53665 69.459978 15.308661 107.924012 15.308661 9.66308 0 19.230993-0.470721 28.752858-1.225921-6.025227-20.36584-9.521864-41.723264-9.521864-63.862493C402.328693 476.632491 517.908058 368.541681 664.250054 368.541681zM498.62897 285.87389c23.200398 0 38.557154 15.120372 38.557154 38.061874 0 22.846334-15.356756 38.156018-38.557154 38.156018-23.107277 0-46.260603-15.309684-46.260603-38.156018C452.368366 300.994262 475.522716 285.87389 498.62897 285.87389zM283.016307 362.090758c-23.107277 0-46.402843-15.309684-46.402843-38.156018 0-22.941502 23.295566-38.061874 46.402843-38.061874 23.081695 0 38.46301 15.120372 38.46301 38.061874C321.479317 346.782098 306.098002 362.090758 283.016307 362.090758zM945.448458 606.151333c0-121.888048-123.258255-221.236753-261.683954-221.236753-146.57838 0-262.015505 99.348706-262.015505 221.236753 0 122.06508 115.437126 221.200938 262.015505 221.200938 30.66644 0 61.617359-7.609305 92.423993-15.262612l84.513836 45.786813-23.178909-76.17082C899.379213 735.776599 945.448458 674.90216 945.448458 606.151333zM598.803483 567.994292c-15.332197 0-30.807656-15.096836-30.807656-30.501688 0-15.190981 15.47546-30.477129 30.807656-30.477129 23.295566 0 38.558178 15.286148 38.558178 30.477129C637.361661 552.897456 622.099049 567.994292 598.803483 567.994292zM768.25071 567.994292c-15.213493 0-30.594809-15.096836-30.594809-30.501688 0-15.190981 15.381315-30.477129 30.594809-30.477129 23.107277 0 38.558178 15.286148 38.558178 30.477129C806.808888 552.897456 791.357987 567.994292 768.25071 567.994292z" p-id="8065"></path></svg><p>微信公众号</p>
<!--底部弹出二维码-->
<div class="lang-ewm">
<img src="./联系我们_files/990a73b8-b155-4497-bd14-bb4471955bb2.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
<div class="box">
<a href="javascript:;" class="active">
<svg t="1715309293797" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6171" width="200" height="200"><path d="M774.30784 305.664h-74.9568c0-103.5264-83.92704-187.55584-187.35104-187.55584s-187.35104 84.02944-187.35104 187.55584h-74.9568c-41.20576 0-74.5472 33.77152-74.5472 75.03872L174.73536 830.8736a75.20256 75.20256 0 0 0 74.9568 75.03872h524.5952a75.20256 75.20256 0 0 0 74.9568-75.03872V380.7232a75.20256 75.20256 0 0 0-74.9568-75.03872zM512 193.1264a112.3328 112.3328 0 0 1 112.4352 112.5376H399.5648a112.3328 112.3328 0 0 1 112.4352-112.5376H512z m0 375.15264c-103.424 0-187.35104-84.02944-187.35104-187.5968h74.93632a112.3328 112.3328 0 0 0 112.4352 112.55808 112.3328 112.3328 0 0 0 112.39424-112.5376h74.9568c0 103.54688-83.94752 187.57632-187.37152 187.57632z" p-id="6172"></path></svg>
<p>华阳商城</p>
<div class="lang-ewm">
<img src="./联系我们_files/b5d1469c-e180-4082-bd49-f1908c4fcd70.png" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
</div>
</div>
@@ -68,21 +68,14 @@
<div class="tm"><a href="#"><img src="/assets/13b83caddbcf011e0b50eee03b26c7ba.png" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<!--
<div class="jd"><a href="#"><img src="/assets/19ee30c37395ee21d738be878d3f8c60.png" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<div class="it_o">
<a href="tel:4006-535-700" rel="nofollow">服务热线:4006-535-700</a>
</div>
<div class="user01">
<a href="javascript:;" target="_blank">
中
</a>
<a href="javascript:;" target="_blank">
| 英
</a>
<a href="javascript:;" target="_blank">
| 日
</a>
<span class="haiho-lang" data-lang="zh_cn" role="button" tabindex="0">中</span>
<span class="haiho-lang" data-lang="en_us" role="button" tabindex="0">| 英</span>
<span class="haiho-lang" data-lang="ja_jp" role="button" tabindex="0">| 日</span>
</div>
</div>
<ul class="p_level1Box">
@@ -92,128 +85,116 @@
</div>
-->
<div class="navitem">
<li class="p_level1Item s_templatesum actived">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>网站首页</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>关于我们</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>产品中心</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>华阳文化</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>华阳动态</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>招商加盟</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
</li><li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="_blank">
<span>华阳商城</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>联系方式</span>
</a>
</p>
</li>
</div>
<div class="navimgbox">
<div class="imgitem actived" style="background:url(/assets/23a1a45c0021df8cdea0ec0b37fb4291.png) center no-repeat;background-size:cover;"><img src="/assets/23a1a45c0021df8cdea0ec0b37fb4291.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/26d888e02a0142786f3be6daaee419f9.png) center no-repeat;background-size:cover;"><img src="/assets/26d888e02a0142786f3be6daaee419f9.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/340d539b80432887304ff4d98f79b53c.png) center no-repeat;background-size:cover;"><img src="/assets/340d539b80432887304ff4d98f79b53c.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/55d5d2916224e4d023272d75283bc171.png) center no-repeat;background-size:cover;"><img src="/assets/55d5d2916224e4d023272d75283bc171.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/58bf0c6ffe1bab328b960718fd12496c.png) center no-repeat;background-size:cover;"><img src="/assets/58bf0c6ffe1bab328b960718fd12496c.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/61dd0b1a9e7f89703f46bbe99fc0e6fc.png) center no-repeat;background-size:cover;"><img src="/assets/61dd0b1a9e7f89703f46bbe99fc0e6fc.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/74a88fc7512d1fc4042472a8998d658a.png) center no-repeat;background-size:cover;"><img src="/assets/74a88fc7512d1fc4042472a8998d658a.png" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url(/assets/74a88fc7512d1fc4042472a8998d658a.png) center no-repeat;background-size:cover;"><img src="/assets/74a88fc7512d1fc4042472a8998d658a.png" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url(/assets/a4761f27bd3a1aa32740e1da2445de46.png) center no-repeat;background-size:cover;"><img src="/assets/a4761f27bd3a1aa32740e1da2445de46.png" alt="华阳食品" title="华阳食品" la="la"></div>
</div>
</ul>
</div>
@@ -238,7 +219,7 @@
<div class="e_html-16 s_list">
</div>
<link type="text/css" rel="stylesheet" href="./联系我们_files/9469677399bd48a4a97b4b10685b47fe.css">
@@ -259,8 +240,8 @@
<div class="logoBox">
<div class="logocai">
<!-- nLazyImage 'portal-saas/pg2024022811514093430/cms/image/cc37821e-0aa0-4c76-bb25-316efafe8b1b.png' '' true}}}
</div>
<div class="name cntitle">
<span>华</span><span>味</span><span>坊</span><span>食</span><span>品</span>
@@ -368,7 +349,7 @@
</div><div class="e_loop-21 s_list response-transition" needjs="true" ds-id="" elem-id="e_loop-21">
<div class="">
<div class="p_list">
<div class="cbox-21 p_loopitem"><div class="e_container-22 s_layout response-transition">
<div class="cbox-22-0 p_item"><div class="e_icon-23 s_title response-transition">
@@ -389,9 +370,7 @@
<div class="cbox-22-1 p_item"><p class="e_text-25 s_body response-transition">
邮箱:
</p><p class="e_text-26 s_body response-transition">
<a href="mailto:haiho@haihofoods.com" target="_self" rel="nofollow">
haiho@haihofoods.com
</a>
</p></div>
</div></div>
<div class="cbox-21 p_loopitem"><div class="e_container-22 s_layout response-transition">
@@ -401,16 +380,16 @@
<div class="cbox-22-1 p_item"><p class="e_text-25 s_body response-transition">
地址:
</p><p class="e_text-26 s_body response-transition">
中国•烟台•芝罘岛东路51号
</p></div>
</div></div>
</div>
<div class="p_page">
<div class="page_con"></div>
</div>
</div>
<input type="hidden" name="_config" value="">
<input type="hidden" name="view" value="contact">
@@ -453,20 +432,12 @@
<div class="invalid-feedback"></div>
</div>
</div>
</div><a class="e_formBtn-16 s_button1 btn btn-primary response-transition" href="javascript:;" needjs="true">
<span>提交</span>
</a></div>
</div></div>
<input name="i18nJson" type="hidden" value="{&quot;required_15&quot;:&quot;请输入内容&quot;,&quot;minLength_14&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;pageItem_21&quot;:&quot;条&quot;,&quot;minLength_15&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noMore_21&quot;:&quot;没有更多了&quot;,&quot;minLength_12&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;required_12&quot;:&quot;请输入内容&quot;,&quot;required_14&quot;:&quot;请输入内容&quot;,&quot;pageJump_21&quot;:&quot;前往&quot;,&quot;pageUnit_21&quot;:&quot;页&quot;,&quot;pageWhole_21&quot;:&quot;共&quot;,&quot;maxLength_12&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;loadMore_21&quot;:&quot;点击加载更多&quot;,&quot;loadNow_21&quot;:&quot;加载中&quot;,&quot;maxLength_15&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;clearConditions_21&quot;:&quot;清空条件&quot;,&quot;maxLength_14&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;noData_21&quot;:&quot;暂无数据&quot;,&quot;conditions_21&quot;:&quot;条件:&quot;}">
</form></div>
</div></div>
</div><div class="e_container-35 s_layout response-transition">
<div class="cbox-35-0 p_item"><p class="e_text-36 s_summary response-transition">
我们的位置
</p><div class="e_mapbaidu-46 s_img response-transition" needjs="true">
<div id="mapCotainer" class=" bmap-container" style="overflow: hidden; position: relative; background-image: url(&quot;http://webmap0.bdimg.com/image/api/bg.png&quot;); text-align: left; touch-action: none;"><div id="platform" style="overflow: visible; position: absolute; z-index: 5; left: 0px; top: 0px; cursor: url(&quot;http://webmap0.bdimg.com/image/api/openhand.cur&quot;) 8 8, default;"><div id="mask" class=" BMap_mask" style="position: absolute; left: 0px; top: 0px; z-index: 9; overflow: hidden; user-select: none; width: 1298px; height: 398px; opacity: 0; background: rgb(0, 0, 0); transition: opacity 0.4s;"></div><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 200;"><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 800;"></div><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 700;"><div class="BMap_Marker BMap_noprint" unselectable="on" style="position: absolute; padding: 0px; margin: 0px; border: 0px; cursor: pointer; width: 23px; height: 25px; left: 578px; top: 71px; transform-origin: 10px 25px;"></div></div><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 600;"></div><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 500;"></div><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 400;"></div></div></div><div class="click-ripple-container"><div class="click-ripple"></div></div><div class=" anchorBL" style="position: absolute; z-index: 10; inset: auto auto 15px 5px;"><img src="./联系我们_files/logo_hd.png" style="height:21px;width:62px;"></div><div class=" BMap_noprint" style="top: 50%; left: 50%; display: none; padding: 24px; overflow: visible; position: absolute; width: 50%; max-width: 360px; transform: translate(-50%, -50%); z-index: 9999; background: rgb(255, 255, 255); user-select: none;"><div style="position: relative; width: 100%; height: 100%; color: rgb(0, 0, 0); font-size: 14px; word-break: break-all;"></div><span style="margin-top: 12px; margin-bottom: -12px; margin-left: calc(100% - 48px); width: 56px; height: 32px; font-size: 14px; text-align: center; line-height: 32px; display: block; cursor: pointer; background: rgb(56, 148, 255); border: 1px solid rgba(63, 81, 181, 0.23); color: rgb(255, 255, 255); border-radius: 3px;">确定</span></div><div class=" BMap_noprint anchorTR" style="display: none; padding: 10px 15px; overflow: visible; max-width: 360px; background: rgb(255, 248, 238); border-width: 3px; border-style: solid; border-color: rgb(226, 158, 50); position: absolute; z-index: 9999; inset: 40px 200px auto auto;"><div style="position: relative; width: 100%; height: 100%; color: rgb(226, 158, 50); font-size: 14px; font-weight: 500; word-break: break-all; line-height: 1.5;"></div></div><canvas width="1298" height="398" style="position: absolute; left: 0px; top: 0px; width: 1298px; height: 398px; z-index: 0;"></canvas><div unselectable="on" class=" BMap_cpyCtrl anchorBL" style="cursor: default; white-space: nowrap; text-size-adjust: none; inset: auto auto 2px 2px; position: absolute; z-index: 10;"><span _cid="1" style="display: block;"><span style="background: rgba(255, 255, 255, 0.701961);padding: 0px 1px;line-height: 16px;display: inline;height: 16px;">©&nbsp;2026 Baidu - GS(2025)4125号 - 甲测资字11111342 - 京ICP证030173号 - Data © 百度智图</span></span></div></div>
</div></div>
</div>
<input type="hidden" name="propJson" value="{&quot;state_15&quot;:&quot;normal&quot;,&quot;state_13&quot;:&quot;normal&quot;,&quot;state_14&quot;:&quot;normal&quot;,&quot;business_16&quot;:[],&quot;rule_10&quot;:[],&quot;href_26&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;href_25&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;showLabel_12&quot;:false,&quot;showLabel_13&quot;:false,&quot;showLabel_14&quot;:false,&quot;customParam_14&quot;:&quot;&quot;,&quot;showLabel_15&quot;:false,&quot;state_12&quot;:&quot;normal&quot;,&quot;action_16&quot;:1,&quot;zoom_46&quot;:14,&quot;ddItem_12&quot;:{},&quot;ddItem_14&quot;:{},&quot;href_36&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;styleIdNumber_46&quot;:&quot;76b42fb3e69d26ea9edd7e25f73f83fb&quot;,&quot;ddItem_15&quot;:{},&quot;value_15&quot;:&quot;&quot;,&quot;value_13&quot;:&quot;&quot;,&quot;value_14&quot;:&quot;&quot;,&quot;infoWidth_46&quot;:256,&quot;lng_46&quot;:121.416239,&quot;value_12&quot;:&quot;&quot;,&quot;type_12&quot;:&quot;text&quot;,&quot;dense_25&quot;:&quot;&quot;,&quot;type_13&quot;:&quot;tel&quot;,&quot;dense_26&quot;:&quot;&quot;,&quot;placeholder_14&quot;:&quot;您的邮箱&quot;,&quot;type_16&quot;:1,&quot;placeholder_13&quot;:&quot;您的电话&quot;,&quot;submit_10&quot;:{&quot;obj2&quot;:{&quot;type&quot;:&quot;customPage&quot;,&quot;value&quot;:{&quot;type&quot;:&quot;link&quot;,&quot;params&quot;:[],&quot;value&quot;:&quot;/successfully.html&quot;},&quot;target&quot;:&quot;_self&quot;},&quot;obj1&quot;:{&quot;result&quot;:1,&quot;request&quot;:[],&quot;promptTime&quot;:0,&quot;prompt&quot;:&quot;提交成功!&quot;},&quot;logic&quot;:[],&quot;type&quot;:1,&quot;obj3&quot;:{}},&quot;placeholder_12&quot;:&quot;您的姓名&quot;,&quot;type_14&quot;:&quot;email&quot;,&quot;basic_10&quot;:{&quot;submitLimit&quot;:{&quot;unit&quot;:1,&quot;count&quot;:1,&quot;interval&quot;:1,&quot;peopleLimit&quot;:1,&quot;limitRule&quot;:1},&quot;submitTime&quot;:{&quot;limit&quot;:2,&quot;startTime&quot;:&quot;&quot;,&quot;endTime&quot;:&quot;&quot;,&quot;prompt&quot;:&quot;&quot;},&quot;formInfo&quot;:{&quot;app&quot;:&quot;120113&quot;,&quot;name&quot;:&quot;lxly&quot;,&quot;title&quot;:&quot;联系留言&quot;},&quot;advanced&quot;:{&quot;customState&quot;:[],&quot;message&quot;:1}},&quot;placeholder_15&quot;:&quot;您的留言内容&quot;,&quot;label_12&quot;:&quot;姓名&quot;,&quot;label_13&quot;:&quot;电话号码&quot;,&quot;href_17&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;label_14&quot;:&quot;邮箱&quot;,&quot;label_15&quot;:&quot;消息内容&quot;,&quot;prompt_16&quot;:&quot;&quot;,&quot;showpop_46&quot;:false,&quot;validate_15&quot;:{&quot;minLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:5},&quot;custom&quot;:{&quot;msg&quot;:&quot;&quot;,&quot;reg&quot;:&quot;&quot;,&quot;state&quot;:false},&quot;required&quot;:{&quot;msg&quot;:&quot;内容不能为空&quot;,&quot;state&quot;:true,&quot;value&quot;:false},&quot;maxLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:128}},&quot;pageConfig_21&quot;:{&quot;rolling&quot;:{&quot;navigation&quot;:true,&quot;scrollType&quot;:&quot;horizontal&quot;,&quot;pagenation&quot;:true,&quot;scrollTime&quot;:4,&quot;autoScroll&quot;:true},&quot;showJump&quot;:true,&quot;pageType&quot;:&quot;hidden&quot;,&quot;pcColumn&quot;:1,&quot;marquee&quot;:{&quot;navigation&quot;:true,&quot;marqueeTime&quot;:4,&quot;scrollType&quot;:&quot;horizontal&quot;,&quot;opp&quot;:false},&quot;loopItem&quot;:&quot;.p_loopitem&quot;,&quot;status&quot;:true,&quot;filterPosition&quot;:&quot;&quot;,&quot;pcRow&quot;:2,&quot;moColumn&quot;:1,&quot;datasourceid&quot;:&quot;prop&quot;,&quot;elementid&quot;:21},&quot;validate_14&quot;:{&quot;minLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:5},&quot;custom&quot;:{&quot;msg&quot;:&quot;&quot;,&quot;reg&quot;:&quot;&quot;,&quot;state&quot;:false},&quot;required&quot;:{&quot;msg&quot;:&quot;内容不能为空&quot;,&quot;value&quot;:false},&quot;maxLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:128}},&quot;validate_13&quot;:{&quot;minLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:5},&quot;custom&quot;:{&quot;msg&quot;:&quot;&quot;,&quot;reg&quot;:&quot;&quot;,&quot;state&quot;:false},&quot;required&quot;:{&quot;msg&quot;:&quot;内容不能为空&quot;,&quot;value&quot;:false},&quot;maxLength&quot;:{&quot;msg&quot;:&quot;您输入的Line truncated
<input type="hidden" name="propJson" value="{&quot;state_15&quot;:&quot;normal&quot;,&quot;state_13&quot;:&quot;normal&quot;,&quot;state_14&quot;:&quot;normal&quot;,&quot;business_16&quot;:[],&quot;rule_10&quot;:[],&quot;href_26&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;href_25&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;showLabel_12&quot;:false,&quot;showLabel_13&quot;:false,&quot;showLabel_14&quot;:false,&quot;customParam_14&quot;:&quot;&quot;,&quot;showLabel_15&quot;:false,&quot;state_12&quot;:&quot;normal&quot;,&quot;action_16&quot;:1,&quot;ddItem_12&quot;:{},&quot;ddItem_14&quot;:{},&quot;ddItem_15&quot;:{},&quot;value_15&quot;:&quot;&quot;,&quot;value_13&quot;:&quot;&quot;,&quot;value_14&quot;:&quot;&quot;,&quot;value_12&quot;:&quot;&quot;,&quot;type_12&quot;:&quot;text&quot;,&quot;dense_25&quot;:&quot;&quot;,&quot;type_13&quot;:&quot;tel&quot;,&quot;dense_26&quot;:&quot;&quot;,&quot;placeholder_14&quot;:&quot;您的邮箱&quot;,&quot;type_16&quot;:1,&quot;placeholder_13&quot;:&quot;您的电话&quot;,&quot;submit_10&quot;:{&quot;obj2&quot;:{&quot;type&quot;:&quot;customPage&quot;,&quot;value&quot;:{&quot;type&quot;:&quot;link&quot;,&quot;params&quot;:[],&quot;value&quot;:&quot;/successfully.html&quot;},&quot;target&quot;:&quot;_self&quot;},&quot;obj1&quot;:{&quot;result&quot;:1,&quot;request&quot;:[],&quot;promptTime&quot;:0,&quot;prompt&quot;:&quot;提交成功!&quot;},&quot;logic&quot;:[],&quot;type&quot;:1,&quot;obj3&quot;:{}},&quot;placeholder_12&quot;:&quot;您的姓名&quot;,&quot;type_14&quot;:&quot;email&quot;,&quot;basic_10&quot;:{&quot;submitLimit&quot;:{&quot;unit&quot;:1,&quot;count&quot;:1,&quot;interval&quot;:1,&quot;peopleLimit&quot;:1,&quot;limitRule&quot;:1},&quot;submitTime&quot;:{&quot;limit&quot;:2,&quot;startTime&quot;:&quot;&quot;,&quot;endTime&quot;:&quot;&quot;,&quot;prompt&quot;:&quot;&quot;},&quot;formInfo&quot;:{&quot;app&quot;:&quot;120113&quot;,&quot;name&quot;:&quot;lxly&quot;,&quot;title&quot;:&quot;联系留言&quot;},&quot;advanced&quot;:{&quot;customState&quot;:[],&quot;message&quot;:1}},&quot;placeholder_15&quot;:&quot;您的留言内容&quot;,&quot;label_12&quot;:&quot;姓名&quot;,&quot;label_13&quot;:&quot;电话号码&quot;,&quot;href_17&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;label_14&quot;:&quot;邮箱&quot;,&quot;label_15&quot;:&quot;消息内容&quot;,&quot;prompt_16&quot;:&quot;&quot;,&quot;validate_15&quot;:{&quot;minLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:5},&quot;custom&quot;:{&quot;msg&quot;:&quot;&quot;,&quot;reg&quot;:&quot;&quot;,&quot;state&quot;:false},&quot;required&quot;:{&quot;msg&quot;:&quot;内容不能为空&quot;,&quot;state&quot;:true,&quot;value&quot;:false},&quot;maxLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:128}},&quot;pageConfig_21&quot;:{&quot;rolling&quot;:{&quot;navigation&quot;:true,&quot;scrollType&quot;:&quot;horizontal&quot;,&quot;pagenation&quot;:true,&quot;scrollTime&quot;:4,&quot;autoScroll&quot;:true},&quot;showJump&quot;:true,&quot;pageType&quot;:&quot;hidden&quot;,&quot;pcColumn&quot;:1,&quot;marquee&quot;:{&quot;navigation&quot;:true,&quot;marqueeTime&quot;:4,&quot;scrollType&quot;:&quot;horizontal&quot;,&quot;opp&quot;:false},&quot;loopItem&quot;:&quot;.p_loopitem&quot;,&quot;status&quot;:true,&quot;filterPosition&quot;:&quot;&quot;,&quot;pcRow&quot;:2,&quot;moColumn&quot;:1,&quot;datasourceid&quot;:&quot;prop&quot;,&quot;elementid&quot;:21},&quot;validate_14&quot;:{&quot;minLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:5},&quot;custom&quot;:{&quot;msg&quot;:&quot;&quot;,&quot;reg&quot;:&quot;&quot;,&quot;state&quot;:false},&quot;required&quot;:{&quot;msg&quot;:&quot;内容不能为空&quot;,&quot;value&quot;:false},&quot;maxLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:128}},&quot;validate_13&quot;:{&quot;minLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:5},&quot;custom&quot;:{&quot;msg&quot;:&quot;&quot;,&quot;reg&quot;:&quot;&quot;,&quot;state&quot;:false},&quot;required&quot;:{&quot;msg&quot;:&quot;内容不能为空&quot;,&quot;value&quot;:false},&quot;maxLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:128}},&quot;prompt_25&quot;:&quot;&quot;,&quot;validate_12&quot;:{&quot;minLength&quot;:{&quot;msg&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;state&quot;:false,&quot;value&quot;:5},&quot;custom&quot;:Line truncated
</div>
</div>
@@ -484,7 +455,7 @@
<div class="cbox-95-0 p_item"><div class="e_input-99 s_form1 form-group" needjs="true">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="姓名">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -492,7 +463,7 @@
<div class="cbox-95-1 p_item"><div class="e_input-98 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="电话">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -500,17 +471,15 @@
<div class="cbox-95-2 p_item"><div class="e_input-97 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="需求信息">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
</div></div>
<div class="cbox-95-3 p_item"><a class="e_formBtn-96 s_button1 btn btn-primary" href="javascript:;" needjs="true">
<span>提交</span>
</a></div>
</div></div>
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
</form></div>
</div><div class="e_container-60 s_layout">
<div class="cbox-60-0 p_item"><div class="e_richText-81 s_title clearfix">
@@ -518,17 +487,17 @@
<p style="font-size:14px;line-height:24px">&nbsp;</p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:16px;"><strong><span style="font-size:14px;">服务热线:</span></strong></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="tel:4006-535-700" rel="nofollow"><span style="color:#FF0000;">4006-535-700</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">E-mail:</span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="mailto:haiho@haihofoods.com" rel="nofollow"><span style="color:#FF0000;">haiho@haihofoods.com</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">地址 : </span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">中国•烟台•芝罘岛东路51号</span></span></p>
</div></div>
<div class="cbox-60-1 p_item"></div>
@@ -541,7 +510,7 @@
<a href="javascript:;" target="">
<span>网站首页</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -561,7 +530,7 @@
<a href="javascript:;" target="">
<span>公司简介</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -571,7 +540,7 @@
<a href="javascript:;" target="">
<span>资质荣誉</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -581,7 +550,7 @@
<a href="javascript:;" target="">
<span>品质技术</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -591,7 +560,7 @@
<a href="javascript:;" target="">
<span>发展历程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -601,7 +570,7 @@
<a href="javascript:;" target="">
<span>店面展示</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -623,7 +592,7 @@
<a href="javascript:;" target="">
<span>礼盒系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -633,7 +602,7 @@
<a href="javascript:;" target="">
<span>华阳金标海参</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -643,7 +612,7 @@
<a href="javascript:;" target="">
<span>生鲜系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -653,7 +622,7 @@
<a href="javascript:;" target="">
<span>无骨系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -663,7 +632,7 @@
<a href="javascript:;" target="">
<span>调味系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -673,7 +642,7 @@
<a href="javascript:;" target="">
<span>裹粉系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -683,7 +652,7 @@
<a href="javascript:;" target="">
<span>休闲即食系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -705,7 +674,7 @@
<a href="javascript:;" target="">
<span>七道鲜文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -715,7 +684,7 @@
<a href="javascript:;" target="">
<span>节庆文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -725,7 +694,7 @@
<a href="javascript:;" target="">
<span>礼品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -735,7 +704,7 @@
<a href="javascript:;" target="">
<span>企业文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -745,7 +714,7 @@
<a href="javascript:;" target="">
<span>历史文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -755,7 +724,7 @@
<a href="javascript:;" target="">
<span>产品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -765,7 +734,7 @@
<a href="javascript:;" target="">
<span>...</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -787,7 +756,7 @@
<a href="javascript:;" target="">
<span>华阳新闻</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -797,7 +766,7 @@
<a href="javascript:;" target="">
<span>行业动态</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -807,61 +776,18 @@
<a href="javascript:;" target="">
<span>媒体报道</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-5 open">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="javascript:;" target="">
<span>招商加盟</span>
</a>
<svg t="1625735163067" class="icon p_jtIcon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1486" width="200" height="200"><path d="M661.16183428 486.94732961L415.99871022 219.24359155c-13.37500289-14.59708438-35.98351032-15.54759219-50.51270128-2.24048272-14.59708438 13.37500289-15.54759219 35.98351032-2.24048272 50.51270127l223.09776396 243.60157549-222.89408371 244.28050967c-13.30710947 14.59708438-12.28870823 37.20559179 2.30837613 50.51270125 14.59708438 13.30710947 37.20559179 12.28870823 50.51270128-2.30837613l244.75576356-268.11109855c0.47525392-0.54314733 1.01840124-1.15418807 1.42576173-1.6973354 11.13452018-13.51078973 10.93083994-33.53934734-1.2899749-46.84645682z" p-id="1487"></path></svg>
</p>
<!-- 子集 -->
<ul class="mt-2 p_level2Box s_templatesum">
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟细则</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟流程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟资质</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-7">
</li><li class="pt-1 pb-1 p_level1Item saf-d-7">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="javascript:;" target="_blank">
<span>华阳商城</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -871,14 +797,14 @@
<a href="javascript:;" target="">
<span>联系方式</span>
</a>
</p>
<!-- 子集 -->
</li>
</ul>
<!-- 导航内容 结束 -->
</div>
</div>
@@ -920,9 +846,9 @@
<path id="slider" d="M246.848,168.96h-86a6.986,6.986,0,0,0-6.991,6.991v66.232a5.446,5.446,0,0,0,5.445,5.445h89.11a5.446,5.446,0,0,0,5.445-5.445V175.951A7,7,0,0,0,246.848,168.96Zm-18.275,6.785h8.485v8.485h-8.485Zm-14.96,0H222.1v8.485h-8.485Zm-14.96,0h8.485v8.485h-8.485Zm45.517,66.4H162.444v-50.4h81.724Zm-8.348,18.035H171.874a3.246,3.246,0,1,1,0-6.493h63.947a3.246,3.246,0,1,1,0,6.493Z" transform="translate(-153.856 -168.96)"></path>
</svg>
<a href="javascript:;" target="_self">
营业执照及SEO链接: 营业执照
</a>
</div><div class="e_container-41 s_layout">
<div class="cbox-41-0 p_item"><div class="e_richText-40 s_title clearfix saf-setItem">
@@ -937,8 +863,8 @@
<p style="text-align: center;"><span style="line-height:2;">您可以查看其他栏目或返回&nbsp;<a href="javascript:;"><span style="color:#FF0000;">首页</span></a></span></p>
</div>
</div></div>
</div></div>
</div>
@@ -979,7 +905,7 @@
</div><div class="e_html-31 s_list">
<h3>SVG图标库<span>请自行添加图标,用div包起来,并命名使用</span></h3>
<div class="saf-svgs">
<div class="search">
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="96.983" viewBox="0 0 100 96.983">
<path id="search" d="M93.962,95.944,77.127,79.11a45.789,45.789,0,1,1,4.77-5.235L98.965,90.942a3.537,3.537,0,1,1-5,5ZM7.079,45.825a38.7,38.7,0,1,0,38.7-38.7A38.7,38.7,0,0,0,7.079,45.825Z"></path>
@@ -1035,11 +961,11 @@
<svg t="1683854973181" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20559" width="200" height="200"><path d="M713.5 599.9c-10.9-5.6-65.2-32.2-75.3-35.8-10.1-3.8-17.5-5.6-24.8 5.6-7.4 11.1-28.4 35.8-35 43.3-6.4 7.4-12.9 8.3-23.8 2.8-64.8-32.4-107.3-57.8-150-131.1-11.3-19.5 11.3-18.1 32.4-60.2 3.6-7.4 1.8-13.7-1-19.3-2.8-5.6-24.8-59.8-34-81.9-8.9-21.5-18.1-18.5-24.8-18.9-6.4-0.4-13.7-0.4-21.1-0.4-7.4 0-19.3 2.8-29.4 13.7-10.1 11.1-38.6 37.8-38.6 92s39.5 106.7 44.9 114.1c5.6 7.4 77.7 118.6 188.4 166.5 70 30.2 97.4 32.8 132.4 27.6 21.3-3.2 65.2-26.6 74.3-52.5 9.1-25.8 9.1-47.9 6.4-52.5-2.7-4.9-10.1-7.7-21-13z m211.7-261.5c-22.6-53.7-55-101.9-96.3-143.3-41.3-41.3-89.5-73.8-143.3-96.3C630.6 75.7 572.2 64 512 64h-2c-60.6 0.3-119.3 12.3-174.5 35.9-53.3 22.8-101.1 55.2-142 96.5-40.9 41.3-73 89.3-95.2 142.8-23 55.4-34.6 114.3-34.3 174.9 0.3 69.4 16.9 138.3 48 199.9v152c0 25.4 20.6 46 46 46h152.1c61.6 31.1 130.5 47.7 199.9 48h2.1c59.9 0 118-11.6 172.7-34.3 53.5-22.3 101.6-54.3 142.8-95.2 41.3-40.9 73.8-88.7 96.5-142 23.6-55.2 35.6-113.9 35.9-174.5 0.3-60.9-11.5-120-34.8-175.6z m-151.1 438C704 845.8 611 884 512 884h-1.7c-60.3-0.3-120.2-15.3-173.1-43.5l-8.4-4.5H188V695.2l-4.5-8.4C155.3 633.9 140.3 574 140 513.7c-0.4-99.7 37.7-193.3 107.6-263.8 69.8-70.5 163.1-109.5 262.8-109.9h1.7c50 0 98.5 9.7 144.2 28.9 44.6 18.7 84.6 45.6 119 80 34.3 34.3 61.3 74.4 80 119 19.4 46.2 29.1 95.2 28.9 145.8-0.6 99.6-39.7 192.9-110.1 262.7z" p-id="20560"></path></svg>
</div>
</div>
</div>
</div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<link type="text/css" rel="stylesheet" href="./联系我们_files/a542852518db4913ba26b2cb5f622c2a.css">
<link type="text/css" rel="stylesheet" href="./联系我们_files/abe57529cab54a19b6da0041db3fb122.css">
<link type="text/css" rel="stylesheet" href="./联系我们_files/6f7215910b184bd6873d42388538e76c.css">
@@ -1054,32 +980,32 @@
<saf-online class="saf-online">
<div class="p_list">
<saf-loopitem class="cbox-1 saf-lineitem">
<a href="javascript:;">
<saf-icon><span><svg t="1734400707687" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2770" width="32" height="32"><path d="M336.64 848a58.666667 58.666667 0 0 1 3.562667 117.226667l-3.562667 0.106666a58.666667 58.666667 0 0 1-3.584-117.226666l3.584-0.106667zM165.290667 90.090667c13.973333 0 26.005333 10.453333 28.736 24.938666l24.64 130.090667h726.08c16.213333-0.021333 29.354667 13.845333 29.376 30.976 0 2.261333-0.234667 4.522667-0.704 6.741333L886.912 688.853333l0.021333-72.746666-0.192-4.842667a61.44 61.44 0 0 0-85.696-51.52l-3.498666 1.664-188.074667 96.149333-3.541333 1.962667a61.44 61.44 0 0 0-29.802667 48.661333l-0.128 4.053334v81.856H295.914667c-27.584 0-51.456-20.330667-57.322667-48.832L120.405333 182.890667a52.266667 52.266667 0 0 1-4.394666 0.213333H86.677333C62.357333 183.104 42.666667 162.282667 42.666667 136.597333c0-25.685333 19.690667-46.506667 44.010666-46.506666h78.613334z" fill="#666666" p-id="2771"></path><path d="M825.813333 597.333333l2.218667 0.170667a18.752 18.752 0 0 1 16.106667 16.384l0.128 2.218667V972.8H637.44l-2.346667-0.149333a18.773333 18.773333 0 0 1-15.786666-13.781334l-0.490667-2.496-0.149333-2.346666V712.256l0.192-2.602667a18.773333 18.773333 0 0 1 7.808-12.757333l2.24-1.344 188.053333-96.149333 2.154667-0.96a18.688 18.688 0 0 1 4.458666-1.002667L825.813333 597.333333zM704 853.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667z m-85.333333-85.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667zM937.813333 972.778667l2.346667-0.149334a18.773333 18.773333 0 0 0 16.277333-16.277333l0.149334-2.346667v-145.706666a18.773333 18.773333 0 0 0-6.954667-14.592l-1.984-1.408-56.32-34.602667a18.773333 18.773333 0 0 0-4.394667-1.984l-0.32-0.085333a18.773333 18.773333 0 0 0-23.744 15.701333l-0.149333 2.346667V972.8h75.093333z" fill="#666666" p-id="2772"></path></svg></span></saf-icon>
</a>
<!-- <p class="codeimg"><img src="/assets/7970c4a5-f3a4-46fa-a544-fba3f1ba3761-1.png" alt="二维码" title="二维码" la="la"/></p> -->
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="javascript:;"><span><svg height="78.564" viewBox="0 0 100 78.564" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M73.1,171.8h80a9.952,9.952,0,0,1,10,9.7l-49.983,27.437-49.971-27.4A9.9,9.9,0,0,1,73.1,171.8Zm-9.955,20.234L63.1,240.548a9.937,9.937,0,0,0,10,9.816h80a9.937,9.937,0,0,0,10-9.816V192.01l-48.8,26.153a2.511,2.511,0,0,1-2.393,0l-48.757-26.13Z" id="e-mail" transform="translate(-63.1 -171.8)"></path> </svg></span></a></saf-icon>
<p><a href="javascript:;">邮箱:haiho@haihofoods.com</a></p>
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="javascript:;"><span><svg height="100.001" viewBox="0 0 100 100.001" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M179.688,165.873a6.273,6.273,0,0,1,0,8.861l-4.431,4.431a21.371,21.371,0,0,1-12.8,5.929,31.058,31.058,0,0,1-3.9.24,43.582,43.582,0,0,1-12.237-1.918c-11.777-3.461-24.163-11.268-34.867-21.974s-18.513-23.089-21.975-34.867A39.857,39.857,0,0,1,87.8,110.439a21.371,21.371,0,0,1,5.929-12.8l4.431-4.431a6.273,6.273,0,0,1,8.861,0l19.5,19.5a6.274,6.274,0,0,1,0,8.862l-4.431,4.428c-2.507,2.507-.012,10.623,7.09,17.724s15.214,9.6,17.724,7.09l4.431-4.431a6.274,6.274,0,0,1,8.862,0Zm-32.233-45.448a5.019,5.019,0,0,1,5.013,5.013,2.507,2.507,0,0,0,5.013,0,10.037,10.037,0,0,0-10.026-10.026,2.507,2.507,0,0,0,0,5.013Zm36.952-10.6a40.074,40.074,0,0,0-36.952-24.494,2.507,2.507,0,0,0,0,5.013,35.134,35.134,0,0,1,35.092,35.092,2.507,2.507,0,1,0,5.013,0,39.848,39.848,0,0,0-3.153-15.611Zm-36.952-4.441a20.075,20.075,0,0,1,20.052,20.052,2.507,2.507,0,1,0,5.013,0,25.065,25.065,0,0,0-25.065-25.065,2.507,2.507,0,0,0,0,5.013Z" id="tel-1" transform="translate(-87.56 -85.333)"></path> </svg></span></a></saf-icon>
<p><a href="javascript:;">电话:4006-535-700</a></p>
</saf-loopitem>
<saf-loopitem class="saf-lineitem backTop"><saf-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="14.438" viewBox="0 0 20 14.438">
<path id="路径_804" data-name="路径 804" d="M216.687,81.683V98.356a1.66,1.66,0,0,1-2.774,1.24l-11-8.245a1.666,1.666,0,0,1-.329-2.327,1.459,1.459,0,0,1,.329-.329l11.119-8.34a1.66,1.66,0,0,1,2.321.335,1.62,1.62,0,0,1,.335.993h0Zm0,0" transform="translate(100.025 -202.249) rotate(90)"></path>
</svg></saf-icon></saf-loopitem>
</div>
<div class="p_page">
</div>
</saf-online>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;在线客服-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:20,&quot;query&quot;:[{&quot;valueName&quot;:&quot;&quot;,&quot;dataType&quot;:&quot;number&quot;,&quot;operator&quot;:&quot;eq&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;CID&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;CID&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;&quot;,&quot;fieldType&quot;:&quot;number&quot;,&quot;configurable&quot;:{&quot;sourceType&quot;:&quot;page&quot;,&quot;type&quot;:&quot;normal&quot;,&quot;value&quot;:&quot;_detailId&quot;}}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;TEXT_DETAIL_ES.es_text_rudao&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;rudao&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;125326&quot;,&quot;sourceUuid&quot;:&quot;1473112731287683072&quot;,&quot;pageParams&quot;:[{&quot;code&quot;:&quot;_detailId&quot;,&quot;name&quot;:&quot;默认参数&quot;}],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0&quot;,&quot;id&quot;:&quot;datasource1&quot;,&quot;apiId&quot;:&quot;407257&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\&quot;size\&quot;:20,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;\&quot;,\&quot;dataType\&quot;:\&quot;number\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;CID\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;CID\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;\&quot;,\&quot;fieldType\&quot;:\&quot;number\&quot;,\&quot;configurable\&quot;:{\&quot;sourceType\&quot;:\&quot;page\&quot;,\&quot;type\&quot;:\&quot;normal\&quot;,\&quot;value\&quot;:\&quot;_detailId\&quot;}}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;}&quot;}">
<input type="hidden" name="view" value="contact">
@@ -1110,4 +1036,3 @@
<div class="licenseBox"><a href="javascript:;">×</a><div class="licenseRim"><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAI4AyADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAAAAECBAUGAwcI/8QAVhAAAQMDAwIEAwMIAwwIBQIHAQIDEQAEIQUSMUFRBhMiYRRxgTKRoQcVI0KxwdHwFlLhJDM0NWJyc5KTsrPxCDZDU1RVdIIlRIOUohdjZBgmRYSj0v/EABoBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQb/xAAyEQEBAQABBAICAQIEBQQDAAAAARECAxIhMQRBE1FhBXEiMoGRFVKx0fAUI6HhQsHx/9oADAMBAAIRAxEAPwD6og96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPekW4ltKluKCEJElSjAAqvttatLy4S1YebdpJgvMoJaT/AO/7J+QJPtQWMHvRB71nbvV71u8ugLeLNvale9JLiJn1AI3SDHXbHPFQvCd3eG4sLe9unSsWy0O2q0pSWlo2RPJMpVMk59qDXwe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvQTAkwBSgyJoEg96IPelooEg96IPeuN7eW1iyXr24at2hje6sJH41GttURdIeXbW12ttCZSotbA4eyd0E/Pj3oJ8HvRB71itS1XVX9MSEsbnFOJcYU0hSlKCXASFbfQCEgyAo7ulXnhm6Xci+33irxKXUlt0hIBQpCVCAkDuaC5g96IPelpCJFAQe9EHvSiigSD3og96WigSD3og96WigSD3og96WigSD3og96WigSD3og96CY5paBIPeiD3paKBIPeiD3paKAooooCiiigKKQmOhNLQFFFFAUUUUBRRRQFFFFAUUUUBRRRQFFFFAUUUUBRRSdaBaKKKAooooCiimLcS2lanCEISJKlGABQPorMOeJ1PXrrWmtIum2SFKWggoU2R9vzCQlMEKB54p+t6Nc32mXTi9QuXnSguMsIUENYyEkJgqB49RP0oLZerWKX3GE3CHbhtO5bLX6RYHulMms1c+Kn3mVrZYeaFu6pD6WYcWE5EztKEQCFSpQ4IipuiruLjT7ZkaPp40q6RM2zg2pSRPqbUkD2wTWeRbv2GrlgoTetLdcSRtK0g8gRCW0K2AghAUccZoNAEv3zCE3Wms6jdW7hQnz3UQgwFS4AnaFQR9gK+lQNERcuXBsLu8dYtlv3AbbsyEJJSqVJ3/b/WVEbfsmpOg2Ot2jDbbYabZc8x7e8sqWmUwhC0xkphOQelXTOiWY0xiyumkXSGzvKnUyVLMkqPuST99BntQZRfq+F0h15m5XdeW6lw+a2tLW0lS5zEBIwQZPzqwXo15e6urUHnRYXTTCWW3bbareTlRO4ZTwACJwa0LDLVuylq3bQ00kQlCEhKQPYCn0DWwpLaQtW5QABVESe8U6iigKKKKAooooCiiigKJzRXF95DDZcdUlDaRJUowBQdpFIFCsxdeJULUlGmMKuCoEhxXpRj3559qpNQ8S6my+ygutbVnaoNJkpV3z096xepxj1dP4fV6l9Y9C3CiRWKTfX50T45V05u83YQAIInmI5qJb+I9TD7iN7ZCcAOpjefaKfki8fhdTluWeHoMiaJrLWHihC0k3rJaSMl1B3JGeD1H3VomX232wtlSVoVwoGQa1LL6cOp0ufSuco70UgparmKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiuF7eW9iwXbt9phvgKdWEgntJoOygCIIkUilJQgqUQlIGSTAFZrTtdu9UKfJZDDLwLYdWkDynRykbiC5weEioviPSl2psrx15WpEPBpxN+qWfXhKtiRtEKjITOaC5vvEFq3pr91YKF95Uj9CZRIEkFf2R9TVKvX7y9uWfgxcIauEgsloJKAoSSFLWkAgp5CdxG3FT7+2vdR0y6t72xtbN1lsqt30OodQFQeNyJT7nbwcGsvasXT7NzYssLW5CBb3CQsqbBwlXmL9SkpIV+qExOTMUF3rLBvdNurxvS7Le9aFa75x3cEpKZ/R+ncY9wgV101bjzFxc6pd3bj9mhLpYSsMNwUBQICTJHI9RIkGu7OmandWarG+LFvZDymyhpRXvbSDuAMAjd6RmcT86uLnSrC6uEP3NnbuvIACVLQFEAcc9qDOWFu87q9q9ozk2Nqwn9DciUp8wJO1CgJCgkAmdwz0mpuiaJcWjq7sXCrRy5eU8/aISlTRB4HEgxEkHJmtFRQFFFFAUUUUBRRRQFFFFAUUUUBRRRQEZoiiigaDNOo6UUBRRRQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffSffSzSEZFAffS/fRNE0B99H30TRNAffR99E0x51DLanHlobbSJUpRgAe5oH/AH0ffUWw1C11BpbljcNvtpVsKmzImAefqKlTQRru/tLMxdXLLJjd+kWE4mOvvUD8+NvvOsWLLjj6WlOJDkNzHHpVC4JjITHvVH4vtX7TUPzspxa7fZ5aghEFlIEg7gpJgndPqAMpEGoenBy21XTXG21IHmKMBOxOwj1KP2BGQZ2GTHqM5CQ7qLd3pzT51V+5Wpbbt23bktpabOCj0ZRG6cqkwaXUtNbtF3tpbsbkthN7bJCEuKCZAdCAoEbsSCQcqqfZWN5cG6sm1so0NbqnEOoUFqeQvJQOQEhRUJ56COam6XoiGmAu+U67elryFOh9ZhPHoz6JgExGaDL6k5cBi4YQp1V+SWWmHHEuuqadACkK2mEqBBUBMQO0xsNEvV3ibj9A80w0tKGvNZU0ojaJkK7GRIxUm1sLS1baRb2zLaWiSiEj0k8me56nrUqaCDpFidOYdYDm9ourW2IjYlRnb9CTU2lmiaA++j76JomgPvo++iaJoD76PvomiaA++j76JomgPvo++iaJoD76T76Wa4XDvksuOEYSkn7hQR9T1FjTbRT9ysATCROVHoBWKvb4am6l15x0uoV6GEDciCDwJEkckntVdqN8rVXPiL4FbC0p8pp1IATJI/aOvaarb6/t9Mtm27Y+asGRwSFJMRu6iO3evPz6nu30+58X4GZJ553/AGT7i7DVok3D7bSXUEISlZGO6gRIECMHrVVceILVAcSw2tSXAJVHqSZGEkmIEYPNZ68uXLtYU6omAQAeg7V20ZFk7dJb1R51hpWA62AoJ9yO3yrx/n5crnF+h4f0zp9Lh39Xb/Ear+mb35uOzSmTbB2Cok/aiR/7veoVt4itlKbTcsnagHlIJUcwCegzyM1tmvCGnHwuvTk3SyytfxHxIieMH5RXlust6YxdlrSrh+6bThTrgACv82unVvV6cl5V4/gT4Xy+XLh0+Nl3+fX8tczceagfCOsupQkAoG4yDyUJGcCZknIqwsb9WnOeZbun4hSpcaUQE7QByOJIzI715xbXbtssKYWpCh0BwR7itPp99b6lbPC8UQpMqIERuJA7SBH7KdPr91/lPl/029GbfPF6xpOpMajbB1kkKGFIPKT2qwFeS2t07plyH9N3hIlS0p4eA4GefaK9UtHxcW7bqYIWkKx717eHPunl+a+X8X8F2eq7/fR99E0TW3kH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TUa+v7Wwa8y9uGWEHALiwmT2Hc0En76PvrnbvN3DDbzKgtpxIUlQ4IPBp8mghXGrWNuoocuUF0EjyketwkcgJTJJ+QqqvtfLmnLfsiGGkvpYcuHdqg0Dgq2hWIkYVETJFZzULN7Tb96Line truncated
+155 -281
View File
@@ -2,21 +2,21 @@
<div id="c_grid-116273709439191"> <div class="p_gridbox signal s_tmpl">
<div id="content_box-116273709439191-0" class="d_gridCell_0 p_gridCell ND_empty"><div id="c_navigation_006_P_1060-17155922968550">
<div class="e_navigationA-12 header response-transition" needjs="false">
<div class="e_navigationA-12 header response-transition" needjs="false">
<link type="text/css" rel="stylesheet" href="./华阳文化_files/18609477787948809dba96f603809665.css">
<link type="text/css" rel="stylesheet" href="./华阳文化_files/08f89a44fe3740fb928b292eecbf4152.css">
<div class="leftNav">
<div class="logorim"><a href="javascript:;">
<img src="./华阳文化_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
<img src="./华阳文化_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
</a>
<!--底-->
@@ -24,32 +24,32 @@
<div class="box">
<a href="javascript:;" class="active">
<svg t="1715309350939" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8064" width="200" height="200"><path d="M664.250054 368.541681c10.015098 0 19.892049 0.732687 29.67281 1.795902-26.647917-122.810047-159.358451-214.077703-310.826188-214.077703-169.353083 0-308.085774 114.232694-308.085774 259.274068 0 83.708494 46.165436 152.460344 123.281791 205.78483l-30.80868 91.730191 107.688651-53.455469c38.558178 7.53665 69.459978 15.308661 107.924012 15.308661 9.66308 0 19.230993-0.470721 28.752858-1.225921-6.025227-20.36584-9.521864-41.723264-9.521864-63.862493C402.328693 476.632491 517.908058 368.541681 664.250054 368.541681zM498.62897 285.87389c23.200398 0 38.557154 15.120372 38.557154 38.061874 0 22.846334-15.356756 38.156018-38.557154 38.156018-23.107277 0-46.260603-15.309684-46.260603-38.156018C452.368366 300.994262 475.522716 285.87389 498.62897 285.87389zM283.016307 362.090758c-23.107277 0-46.402843-15.309684-46.402843-38.156018 0-22.941502 23.295566-38.061874 46.402843-38.061874 23.081695 0 38.46301 15.120372 38.46301 38.061874C321.479317 346.782098 306.098002 362.090758 283.016307 362.090758zM945.448458 606.151333c0-121.888048-123.258255-221.236753-261.683954-221.236753-146.57838 0-262.015505 99.348706-262.015505 221.236753 0 122.06508 115.437126 221.200938 262.015505 221.200938 30.66644 0 61.617359-7.609305 92.423993-15.262612l84.513836 45.786813-23.178909-76.17082C899.379213 735.776599 945.448458 674.90216 945.448458 606.151333zM598.803483 567.994292c-15.332197 0-30.807656-15.096836-30.807656-30.501688 0-15.190981 15.47546-30.477129 30.807656-30.477129 23.295566 0 38.558178 15.286148 38.558178 30.477129C637.361661 552.897456 622.099049 567.994292 598.803483 567.994292zM768.25071 567.994292c-15.213493 0-30.594809-15.096836-30.594809-30.501688 0-15.190981 15.381315-30.477129 30.594809-30.477129 23.107277 0 38.558178 15.286148 38.558178 30.477129C806.808888 552.897456 791.357987 567.994292 768.25071 567.994292z" p-id="8065"></path></svg><p>微信公众号</p>
<!--底部弹出二维码-->
<div class="lang-ewm">
<img src="./华阳文化_files/990a73b8-b155-4497-bd14-bb4471955bb2.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
<div class="box">
<a href="javascript:;" class="active">
<svg t="1715309293797" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6171" width="200" height="200"><path d="M774.30784 305.664h-74.9568c0-103.5264-83.92704-187.55584-187.35104-187.55584s-187.35104 84.02944-187.35104 187.55584h-74.9568c-41.20576 0-74.5472 33.77152-74.5472 75.03872L174.73536 830.8736a75.20256 75.20256 0 0 0 74.9568 75.03872h524.5952a75.20256 75.20256 0 0 0 74.9568-75.03872V380.7232a75.20256 75.20256 0 0 0-74.9568-75.03872zM512 193.1264a112.3328 112.3328 0 0 1 112.4352 112.5376H399.5648a112.3328 112.3328 0 0 1 112.4352-112.5376H512z m0 375.15264c-103.424 0-187.35104-84.02944-187.35104-187.5968h74.93632a112.3328 112.3328 0 0 0 112.4352 112.55808 112.3328 112.3328 0 0 0 112.39424-112.5376h74.9568c0 103.54688-83.94752 187.57632-187.37152 187.57632z" p-id="6172"></path></svg>
<p>华阳商城</p>
<div class="lang-ewm">
<img src="./华阳文化_files/b5d1469c-e180-4082-bd49-f1908c4fcd70.png" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
</div>
</div>
@@ -68,21 +68,14 @@
<div class="tm"><a href="#"><img src="/assets/13b83caddbcf011e0b50eee03b26c7ba.png" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<!--
<div class="jd"><a href="#"><img src="/assets/19ee30c37395ee21d738be878d3f8c60.png" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<div class="it_o">
<a href="tel:4006-535-700" rel="nofollow">服务热线:4006-535-700</a>
</div>
<div class="user01">
<a href="javascript:;" target="_blank">
中
</a>
<a href="javascript:;" target="_blank">
| 英
</a>
<a href="javascript:;" target="_blank">
| 日
</a>
<span class="haiho-lang" data-lang="zh_cn" role="button" tabindex="0">中</span>
<span class="haiho-lang" data-lang="en_us" role="button" tabindex="0">| 英</span>
<span class="haiho-lang" data-lang="ja_jp" role="button" tabindex="0">| 日</span>
</div>
</div>
<ul class="p_level1Box">
@@ -92,128 +85,116 @@
</div>
-->
<div class="navitem">
<li class="p_level1Item s_templatesum">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>网站首页</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>关于我们</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>产品中心</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum actived">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>华阳文化</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>华阳动态</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>招商加盟</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
</li><li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="_blank">
<span>华阳商城</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>联系方式</span>
</a>
</p>
</li>
</div>
<div class="navimgbox">
<div class="imgitem" style="background:url(/assets/23a1a45c0021df8cdea0ec0b37fb4291.png) center no-repeat;background-size:cover;"><img src="/assets/23a1a45c0021df8cdea0ec0b37fb4291.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/26d888e02a0142786f3be6daaee419f9.png) center no-repeat;background-size:cover;"><img src="/assets/26d888e02a0142786f3be6daaee419f9.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem" style="background:url(/assets/340d539b80432887304ff4d98f79b53c.png) center no-repeat;background-size:cover;"><img src="/assets/340d539b80432887304ff4d98f79b53c.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem actived" style="background:url(/assets/55d5d2916224e4d023272d75283bc171.png) center no-repeat;background-size:cover;"><img src="/assets/55d5d2916224e4d023272d75283bc171.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/58bf0c6ffe1bab328b960718fd12496c.png) center no-repeat;background-size:cover;"><img src="/assets/58bf0c6ffe1bab328b960718fd12496c.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/61dd0b1a9e7f89703f46bbe99fc0e6fc.png) center no-repeat;background-size:cover;"><img src="/assets/61dd0b1a9e7f89703f46bbe99fc0e6fc.png" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url(/assets/74a88fc7512d1fc4042472a8998d658a.png) center no-repeat;background-size:cover;"><img src="/assets/74a88fc7512d1fc4042472a8998d658a.png" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url(/assets/74a88fc7512d1fc4042472a8998d658a.png) center no-repeat;background-size:cover;"><img src="/assets/74a88fc7512d1fc4042472a8998d658a.png" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url(/assets/a4761f27bd3a1aa32740e1da2445de46.png) center no-repeat;background-size:cover;"><img src="/assets/a4761f27bd3a1aa32740e1da2445de46.png" alt="华阳食品" title="华阳食品" la="la"></div>
</div>
</ul>
</div>
@@ -238,7 +219,7 @@
<div class="e_html-16 s_list">
</div>
<link type="text/css" rel="stylesheet" href="./华阳文化_files/9469677399bd48a4a97b4b10685b47fe.css">
@@ -259,8 +240,8 @@
<div class="logoBox">
<div class="logocai">
<!-- nLazyImage 'portal-saas/pg2024022811514093430/cms/image/cc37821e-0aa0-4c76-bb25-316efafe8b1b.png' '' true}}}
</div>
<div class="name cntitle">
<span>华</span><span>味</span><span>坊</span><span>食</span><span>品</span>
@@ -339,72 +320,11 @@
<input type="hidden" name="propJson" value="{&quot;settings_1&quot;:{&quot;videoLoop&quot;:false,&quot;videoControlor&quot;:false,&quot;navigation&quot;:false,&quot;pagination&quot;:false,&quot;effect&quot;:&quot;slide&quot;,&quot;showText&quot;:true,&quot;videoAutoplay&quot;:false,&quot;videoMouted&quot;:true,&quot;deplay&quot;:4,&quot;autoplay&quot;:false,&quot;direction&quot;:&quot;horizontal&quot;}}"></div><div id="c_static_001_P_8883-1694309141230" class="response-animated">
<div class="e_container-1 s_layout response-transition">
<div class="cbox-1-0 p_item"><div class="e_loop-3 s_list response-transition" needjs="true">
<div class="p_list">
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
七道鲜文化
</a>
</p></div>
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
节庆文化
</a>
</p></div>
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
礼品文化
</a>
</p></div>
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
企业文化
</a>
</p></div>
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
历史文化
</a>
</p></div>
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
产品文化
</a>
</p></div>
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
品质文化
</a>
</p></div>
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
渠道文化
</a>
</p></div>
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
终端文化
</a>
</p></div>
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
菜品文化
</a>
</p></div>
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
品鉴文化
</a>
</p></div>
<div class="cbox-3 p_loopitem"><p class="e_text-4 s_title response-transition">
<a href="javascript:;" target="_self">
鉴别文化
</a>
</p></div>
</div>
<div class="p_list"></div>
<div class="p_page">
</div>
<input type="hidden" name="_config" value="{&quot;cname&quot;:&quot;所属分类-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:100,&quot;query&quot;:[{&quot;valueName&quot;:&quot;华阳文化&quot;,&quot;dataType&quot;:&quot;number&quot;,&quot;operator&quot;:&quot;eq&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;CID&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;CID&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;1775059413390913536&quot;,&quot;fieldType&quot;:&quot;number&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;text_r4O05cao,categoryName&quot;},&quot;from&quot;:0,&quot;sort&quot;:[],&quot;_detailId&quot;:&quot;1775059413390913536&quot;},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/60003/972205/list/value?cate=1&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;cate&quot;,&quot;appId&quot;:&quot;60003&quot;,&quot;sourceUuid&quot;:&quot;1441934179108519936&quot;,&quot;pageParams&quot;:[],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/60003/972205/list/meta?cate=1&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/60003/972205/list?cate=1&quot;,&quot;id&quot;:&quot;datasource10&quot;,&quot;apiId&quot;:&quot;972205&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/60003/972205/list?cate=1|{\&quot;size\&quot;:100,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;华阳文化\&quot;,\&quot;dataType\&quot;:\&quot;number\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;CID\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;CID\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;1775059413390913536\&quot;,\&quot;fieldType\&quot;:\&quot;number\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_r4O05cao,categoryName\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[],\&quot;_detailId\&quot;:\&quot;1775059413390913536\&quot;}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_r4O05cao,categoryName\&quot;}&quot;}">
@@ -418,7 +338,7 @@
<div class="e_loop-29 s_list response-transition" needjs="true" ds-id="" elem-id="e_loop-29">
<div class="">
<div class="p_list">
<div class="cbox-29 p_loopitem"><div class="e_container-30 s_layout response-transition">
<div class="cbox-30-0 p_item"><div class="e_container-31 s_layout response-transition">
@@ -428,7 +348,7 @@
</a>
</p><p class="e_text-33 s_title response-transition">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -441,7 +361,7 @@
</a>
</p><p class="e_text-33 s_title response-transition">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -454,7 +374,7 @@
</a>
</p><p class="e_text-33 s_title response-transition">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -467,7 +387,7 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -480,7 +400,7 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -493,7 +413,7 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -506,7 +426,7 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -519,7 +439,7 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -532,7 +452,7 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -545,7 +465,7 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -558,7 +478,7 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -571,7 +491,7 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -584,7 +504,7 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -597,7 +517,7 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
@@ -610,26 +530,26 @@
</a>
</p><p class="e_text-33 s_title">
<a href="javascript:;" target="_self">
</a>
</p></div>
</div></div>
</div></div>
</div>
<div class="p_page">
<div class="page_con">
<a href="javascript:;" class="page_a page_prev disabled">&lt;</a>
<a class="page_a page_num current" href="javascript:;">1</a><a class="page_a page_num" href="javascript:;">2</a><a class="page_a page_num" href="javascript:;">3</a><a class="page_a page_num" href="javascript:;">4</a><a class="page_a page_num" href="javascript:;">5</a>
<a href="javascript:;" class="page_a page_next ">&gt;</a>
<span class="page_jump">前往 <input type="text" class="page_input">
<span class="page_jump">前往 <input type="text" class="page_input">
页</span>
</div>
</div>
</div>
<input type="hidden" name="_config" value="{&quot;cname&quot;:&quot;新闻资讯-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:15,&quot;query&quot;:[{&quot;valueName&quot;:&quot;&quot;,&quot;dataType&quot;:&quot;array[category]&quot;,&quot;operator&quot;:&quot;in&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;DETAIL_ES.es_multi_category_6d5k7017&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;category_6d5k7017&quot;,&quot;sourceType&quot;:&quot;page&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;1775059413390913536&quot;,&quot;fieldType&quot;:&quot;array&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4,DETAIL_ES.es_date_prePublishTime&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;text_2PVENH84,textarea_8B30N7U4,prePublishTime&quot;},&quot;from&quot;:0,&quot;sort&quot;:[],&quot;_detailId&quot;:&quot;1775059413390913536&quot;},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/60003/972204/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;60003&quot;,&quot;sourceUuid&quot;:&quot;1441932740135092224&quot;,&quot;pageParams&quot;:[{&quot;code&quot;:&quot;_detailId&quot;,&quot;name&quot;:&quot;默认参数&quot;}],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/60003/972204/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/60003/972204/list?cate=0&quot;,&quot;id&quot;:&quot;datasource10&quot;,&quot;apiId&quot;:&quot;972204&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/60003/972204/list?cate=0|{\&quot;size\&quot;:15,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;\&quot;,\&quot;dataType\&quot;:\&quot;array[category]\&quot;,\&quot;operator\&quot;:\&quot;in\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;DETAIL_ES.es_multi_category_6d5k7017\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;category_6d5k7017\&quot;,\&quot;sourceType\&quot;:\&quot;page\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;1775059413390913536\&quot;,\&quot;fieldType\&quot;:\&quot;array\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4,DETAIL_ES.es_date_prePublishTime\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_2PVENH84,textarea_8B30N7U4,prePublishTime\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[],\&quot;_detailId\&quot;:\&quot;1775059413390913536\&quot;}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4,DETAIL_ES.es_date_prePublishTime\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_2PVENH84,textarea_8B30N7U4,prePublishTime\&quot;}&quot;}">
<input type="hidden" name="view" value="clture">
@@ -655,7 +575,7 @@
<div class="cbox-95-0 p_item"><div class="e_input-99 s_form1 form-group" needjs="true">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="姓名">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -663,7 +583,7 @@
<div class="cbox-95-1 p_item"><div class="e_input-98 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="电话">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -671,17 +591,15 @@
<div class="cbox-95-2 p_item"><div class="e_input-97 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="需求信息">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
</div></div>
<div class="cbox-95-3 p_item"><a class="e_formBtn-96 s_button1 btn btn-primary" href="javascript:;" needjs="true">
<span>提交</span>
</a></div>
</div></div>
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
</form></div>
</div><div class="e_container-60 s_layout">
<div class="cbox-60-0 p_item"><div class="e_richText-81 s_title clearfix">
@@ -689,17 +607,17 @@
<p style="font-size:14px;line-height:24px">&nbsp;</p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:16px;"><strong><span style="font-size:14px;">服务热线:</span></strong></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="tel:4006-535-700" rel="nofollow"><span style="color:#FF0000;">4006-535-700</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">E-mail:</span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="mailto:haiho@haihofoods.com" rel="nofollow"><span style="color:#FF0000;">haiho@haihofoods.com</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">地址 : </span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">中国•烟台•芝罘岛东路51号</span></span></p>
</div></div>
<div class="cbox-60-1 p_item"></div>
@@ -712,7 +630,7 @@
<a href="javascript:;" target="">
<span>网站首页</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -732,7 +650,7 @@
<a href="javascript:;" target="">
<span>公司简介</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -742,7 +660,7 @@
<a href="javascript:;" target="">
<span>资质荣誉</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -752,7 +670,7 @@
<a href="javascript:;" target="">
<span>品质技术</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -762,7 +680,7 @@
<a href="javascript:;" target="">
<span>发展历程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -772,7 +690,7 @@
<a href="javascript:;" target="">
<span>店面展示</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -794,7 +712,7 @@
<a href="javascript:;" target="">
<span>礼盒系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -804,7 +722,7 @@
<a href="javascript:;" target="">
<span>华阳金标海参</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -814,7 +732,7 @@
<a href="javascript:;" target="">
<span>生鲜系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -824,7 +742,7 @@
<a href="javascript:;" target="">
<span>无骨系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -834,7 +752,7 @@
<a href="javascript:;" target="">
<span>调味系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -844,7 +762,7 @@
<a href="javascript:;" target="">
<span>裹粉系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -854,7 +772,7 @@
<a href="javascript:;" target="">
<span>休闲即食系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -876,7 +794,7 @@
<a href="javascript:;" target="">
<span>七道鲜文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -886,7 +804,7 @@
<a href="javascript:;" target="">
<span>节庆文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -896,7 +814,7 @@
<a href="javascript:;" target="">
<span>礼品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -906,7 +824,7 @@
<a href="javascript:;" target="">
<span>企业文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -916,7 +834,7 @@
<a href="javascript:;" target="">
<span>历史文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -926,7 +844,7 @@
<a href="javascript:;" target="">
<span>产品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -936,7 +854,7 @@
<a href="javascript:;" target="">
<span>...</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -958,7 +876,7 @@
<a href="javascript:;" target="">
<span>华阳新闻</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -968,7 +886,7 @@
<a href="javascript:;" target="">
<span>行业动态</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -978,61 +896,18 @@
<a href="javascript:;" target="">
<span>媒体报道</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-5 open">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="javascript:;" target="">
<span>招商加盟</span>
</a>
<svg t="1625735163067" class="icon p_jtIcon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1486" width="200" height="200"><path d="M661.16183428 486.94732961L415.99871022 219.24359155c-13.37500289-14.59708438-35.98351032-15.54759219-50.51270128-2.24048272-14.59708438 13.37500289-15.54759219 35.98351032-2.24048272 50.51270127l223.09776396 243.60157549-222.89408371 244.28050967c-13.30710947 14.59708438-12.28870823 37.20559179 2.30837613 50.51270125 14.59708438 13.30710947 37.20559179 12.28870823 50.51270128-2.30837613l244.75576356-268.11109855c0.47525392-0.54314733 1.01840124-1.15418807 1.42576173-1.6973354 11.13452018-13.51078973 10.93083994-33.53934734-1.2899749-46.84645682z" p-id="1487"></path></svg>
</p>
<!-- 子集 -->
<ul class="mt-2 p_level2Box s_templatesum">
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟细则</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟流程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟资质</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-7">
</li><li class="pt-1 pb-1 p_level1Item saf-d-7">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="javascript:;" target="_blank">
<span>华阳商城</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -1042,14 +917,14 @@
<a href="javascript:;" target="">
<span>联系方式</span>
</a>
</p>
<!-- 子集 -->
</li>
</ul>
<!-- 导航内容 结束 -->
</div>
</div>
@@ -1091,9 +966,9 @@
<path id="slider" d="M246.848,168.96h-86a6.986,6.986,0,0,0-6.991,6.991v66.232a5.446,5.446,0,0,0,5.445,5.445h89.11a5.446,5.446,0,0,0,5.445-5.445V175.951A7,7,0,0,0,246.848,168.96Zm-18.275,6.785h8.485v8.485h-8.485Zm-14.96,0H222.1v8.485h-8.485Zm-14.96,0h8.485v8.485h-8.485Zm45.517,66.4H162.444v-50.4h81.724Zm-8.348,18.035H171.874a3.246,3.246,0,1,1,0-6.493h63.947a3.246,3.246,0,1,1,0,6.493Z" transform="translate(-153.856 -168.96)"></path>
</svg>
<a href="javascript:;" target="_self">
营业执照及SEO链接: 营业执照
</a>
</div><div class="e_container-41 s_layout">
<div class="cbox-41-0 p_item"><div class="e_richText-40 s_title clearfix saf-setItem">
@@ -1108,8 +983,8 @@
<p style="text-align: center;"><span style="line-height:2;">您可以查看其他栏目或返回&nbsp;<a href="javascript:;"><span style="color:#FF0000;">首页</span></a></span></p>
</div>
</div></div>
</div></div>
</div>
@@ -1150,7 +1025,7 @@
</div><div class="e_html-31 s_list">
<h3>SVG图标库<span>请自行添加图标,用div包起来,并命名使用</span></h3>
<div class="saf-svgs">
<div class="search">
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="96.983" viewBox="0 0 100 96.983">
<path id="search" d="M93.962,95.944,77.127,79.11a45.789,45.789,0,1,1,4.77-5.235L98.965,90.942a3.537,3.537,0,1,1-5,5ZM7.079,45.825a38.7,38.7,0,1,0,38.7-38.7A38.7,38.7,0,0,0,7.079,45.825Z"></path>
@@ -1206,11 +1081,11 @@
<svg t="1683854973181" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20559" width="200" height="200"><path d="M713.5 599.9c-10.9-5.6-65.2-32.2-75.3-35.8-10.1-3.8-17.5-5.6-24.8 5.6-7.4 11.1-28.4 35.8-35 43.3-6.4 7.4-12.9 8.3-23.8 2.8-64.8-32.4-107.3-57.8-150-131.1-11.3-19.5 11.3-18.1 32.4-60.2 3.6-7.4 1.8-13.7-1-19.3-2.8-5.6-24.8-59.8-34-81.9-8.9-21.5-18.1-18.5-24.8-18.9-6.4-0.4-13.7-0.4-21.1-0.4-7.4 0-19.3 2.8-29.4 13.7-10.1 11.1-38.6 37.8-38.6 92s39.5 106.7 44.9 114.1c5.6 7.4 77.7 118.6 188.4 166.5 70 30.2 97.4 32.8 132.4 27.6 21.3-3.2 65.2-26.6 74.3-52.5 9.1-25.8 9.1-47.9 6.4-52.5-2.7-4.9-10.1-7.7-21-13z m211.7-261.5c-22.6-53.7-55-101.9-96.3-143.3-41.3-41.3-89.5-73.8-143.3-96.3C630.6 75.7 572.2 64 512 64h-2c-60.6 0.3-119.3 12.3-174.5 35.9-53.3 22.8-101.1 55.2-142 96.5-40.9 41.3-73 89.3-95.2 142.8-23 55.4-34.6 114.3-34.3 174.9 0.3 69.4 16.9 138.3 48 199.9v152c0 25.4 20.6 46 46 46h152.1c61.6 31.1 130.5 47.7 199.9 48h2.1c59.9 0 118-11.6 172.7-34.3 53.5-22.3 101.6-54.3 142.8-95.2 41.3-40.9 73.8-88.7 96.5-142 23.6-55.2 35.6-113.9 35.9-174.5 0.3-60.9-11.5-120-34.8-175.6z m-151.1 438C704 845.8 611 884 512 884h-1.7c-60.3-0.3-120.2-15.3-173.1-43.5l-8.4-4.5H188V695.2l-4.5-8.4C155.3 633.9 140.3 574 140 513.7c-0.4-99.7 37.7-193.3 107.6-263.8 69.8-70.5 163.1-109.5 262.8-109.9h1.7c50 0 98.5 9.7 144.2 28.9 44.6 18.7 84.6 45.6 119 80 34.3 34.3 61.3 74.4 80 119 19.4 46.2 29.1 95.2 28.9 145.8-0.6 99.6-39.7 192.9-110.1 262.7z" p-id="20560"></path></svg>
</div>
</div>
</div>
</div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<link type="text/css" rel="stylesheet" href="./华阳文化_files/a542852518db4913ba26b2cb5f622c2a.css">
<link type="text/css" rel="stylesheet" href="./华阳文化_files/abe57529cab54a19b6da0041db3fb122.css">
<link type="text/css" rel="stylesheet" href="./华阳文化_files/6f7215910b184bd6873d42388538e76c.css">
@@ -1225,32 +1100,32 @@
<saf-online class="saf-online">
<div class="p_list">
<saf-loopitem class="cbox-1 saf-lineitem">
<a href="javascript:;">
<saf-icon><span><svg t="1734400707687" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2770" width="32" height="32"><path d="M336.64 848a58.666667 58.666667 0 0 1 3.562667 117.226667l-3.562667 0.106666a58.666667 58.666667 0 0 1-3.584-117.226666l3.584-0.106667zM165.290667 90.090667c13.973333 0 26.005333 10.453333 28.736 24.938666l24.64 130.090667h726.08c16.213333-0.021333 29.354667 13.845333 29.376 30.976 0 2.261333-0.234667 4.522667-0.704 6.741333L886.912 688.853333l0.021333-72.746666-0.192-4.842667a61.44 61.44 0 0 0-85.696-51.52l-3.498666 1.664-188.074667 96.149333-3.541333 1.962667a61.44 61.44 0 0 0-29.802667 48.661333l-0.128 4.053334v81.856H295.914667c-27.584 0-51.456-20.330667-57.322667-48.832L120.405333 182.890667a52.266667 52.266667 0 0 1-4.394666 0.213333H86.677333C62.357333 183.104 42.666667 162.282667 42.666667 136.597333c0-25.685333 19.690667-46.506667 44.010666-46.506666h78.613334z" fill="#666666" p-id="2771"></path><path d="M825.813333 597.333333l2.218667 0.170667a18.752 18.752 0 0 1 16.106667 16.384l0.128 2.218667V972.8H637.44l-2.346667-0.149333a18.773333 18.773333 0 0 1-15.786666-13.781334l-0.490667-2.496-0.149333-2.346666V712.256l0.192-2.602667a18.773333 18.773333 0 0 1 7.808-12.757333l2.24-1.344 188.053333-96.149333 2.154667-0.96a18.688 18.688 0 0 1 4.458666-1.002667L825.813333 597.333333zM704 853.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667z m-85.333333-85.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667zM937.813333 972.778667l2.346667-0.149334a18.773333 18.773333 0 0 0 16.277333-16.277333l0.149334-2.346667v-145.706666a18.773333 18.773333 0 0 0-6.954667-14.592l-1.984-1.408-56.32-34.602667a18.773333 18.773333 0 0 0-4.394667-1.984l-0.32-0.085333a18.773333 18.773333 0 0 0-23.744 15.701333l-0.149333 2.346667V972.8h75.093333z" fill="#666666" p-id="2772"></path></svg></span></saf-icon>
</a>
<!-- <p class="codeimg"><img src="/assets/7970c4a5-f3a4-46fa-a544-fba3f1ba3761-1.png" alt="二维码" title="二维码" la="la"/></p> -->
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="javascript:;"><span><svg height="78.564" viewBox="0 0 100 78.564" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M73.1,171.8h80a9.952,9.952,0,0,1,10,9.7l-49.983,27.437-49.971-27.4A9.9,9.9,0,0,1,73.1,171.8Zm-9.955,20.234L63.1,240.548a9.937,9.937,0,0,0,10,9.816h80a9.937,9.937,0,0,0,10-9.816V192.01l-48.8,26.153a2.511,2.511,0,0,1-2.393,0l-48.757-26.13Z" id="e-mail" transform="translate(-63.1 -171.8)"></path> </svg></span></a></saf-icon>
<p><a href="javascript:;">邮箱:haiho@haihofoods.com</a></p>
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="javascript:;"><span><svg height="100.001" viewBox="0 0 100 100.001" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M179.688,165.873a6.273,6.273,0,0,1,0,8.861l-4.431,4.431a21.371,21.371,0,0,1-12.8,5.929,31.058,31.058,0,0,1-3.9.24,43.582,43.582,0,0,1-12.237-1.918c-11.777-3.461-24.163-11.268-34.867-21.974s-18.513-23.089-21.975-34.867A39.857,39.857,0,0,1,87.8,110.439a21.371,21.371,0,0,1,5.929-12.8l4.431-4.431a6.273,6.273,0,0,1,8.861,0l19.5,19.5a6.274,6.274,0,0,1,0,8.862l-4.431,4.428c-2.507,2.507-.012,10.623,7.09,17.724s15.214,9.6,17.724,7.09l4.431-4.431a6.274,6.274,0,0,1,8.862,0Zm-32.233-45.448a5.019,5.019,0,0,1,5.013,5.013,2.507,2.507,0,0,0,5.013,0,10.037,10.037,0,0,0-10.026-10.026,2.507,2.507,0,0,0,0,5.013Zm36.952-10.6a40.074,40.074,0,0,0-36.952-24.494,2.507,2.507,0,0,0,0,5.013,35.134,35.134,0,0,1,35.092,35.092,2.507,2.507,0,1,0,5.013,0,39.848,39.848,0,0,0-3.153-15.611Zm-36.952-4.441a20.075,20.075,0,0,1,20.052,20.052,2.507,2.507,0,1,0,5.013,0,25.065,25.065,0,0,0-25.065-25.065,2.507,2.507,0,0,0,0,5.013Z" id="tel-1" transform="translate(-87.56 -85.333)"></path> </svg></span></a></saf-icon>
<p><a href="javascript:;">电话:4006-535-700</a></p>
</saf-loopitem>
<saf-loopitem class="saf-lineitem backTop"><saf-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="14.438" viewBox="0 0 20 14.438">
<path id="路径_804" data-name="路径 804" d="M216.687,81.683V98.356a1.66,1.66,0,0,1-2.774,1.24l-11-8.245a1.666,1.666,0,0,1-.329-2.327,1.459,1.459,0,0,1,.329-.329l11.119-8.34a1.66,1.66,0,0,1,2.321.335,1.62,1.62,0,0,1,.335.993h0Zm0,0" transform="translate(100.025 -202.249) rotate(90)"></path>
</svg></saf-icon></saf-loopitem>
</div>
<div class="p_page">
</div>
</saf-online>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;在线客服-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:20,&quot;query&quot;:[{&quot;valueName&quot;:&quot;&quot;,&quot;dataType&quot;:&quot;number&quot;,&quot;operator&quot;:&quot;eq&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;CID&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;CID&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;&quot;,&quot;fieldType&quot;:&quot;number&quot;,&quot;configurable&quot;:{&quot;sourceType&quot;:&quot;page&quot;,&quot;type&quot;:&quot;normal&quot;,&quot;value&quot;:&quot;_detailId&quot;}}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;TEXT_DETAIL_ES.es_text_rudao&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;rudao&quot;},&quot;from&quot;:0,&quot;sort&quot;:[],&quot;_detailId&quot;:&quot;1775059413390913536&quot;},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;125326&quot;,&quot;sourceUuid&quot;:&quot;1473112731287683072&quot;,&quot;pageParams&quot;:[{&quot;code&quot;:&quot;_detailId&quot;,&quot;name&quot;:&quot;默认参数&quot;}],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0&quot;,&quot;id&quot;:&quot;datasource1&quot;,&quot;apiId&quot;:&quot;407257&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\&quot;size\&quot;:20,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;\&quot;,\&quot;dataType\&quot;:\&quot;number\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;CID\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;CID\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;\&quot;,\&quot;fieldType\&quot;:\&quot;number\&quot;,\&quot;configurable\&quot;:{\&quot;sourceType\&quot;:\&quot;page\&quot;,\&quot;type\&quot;:\&quot;normal\&quot;,\&quot;value\&quot;:\&quot;_detailId\&quot;}}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[],\&quot;_detailId\&quot;:\&quot;1775059413390913536\&quot;}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;}&quot;}">
<input type="hidden" name="view" value="clture">
@@ -1281,4 +1156,3 @@
<div class="licenseBox"><a href="javascript:;">×</a><div class="licenseRim"><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAI4AyADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAAAAECBAUGAwcI/8QAVhAAAQMDAwIEAwMIAwwIBQIHAQIDEQAEIQUSMUFRBhMiYRRxgTKRoQcVI0KxwdHwFlLhJDM0NWJyc5KTsrPxCDZDU1RVdIIlRIOUohdjZBgmRYSj0v/EABoBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQb/xAAyEQEBAQABBAICAQIEBQQDAAAAARECAxIhMQRBE1FhBXEiMoGRFVKx0fAUI6HhQsHx/9oADAMBAAIRAxEAPwD6og96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPekW4ltKluKCEJElSjAAqvttatLy4S1YebdpJgvMoJaT/AO/7J+QJPtQWMHvRB71nbvV71u8ugLeLNvale9JLiJn1AI3SDHXbHPFQvCd3eG4sLe9unSsWy0O2q0pSWlo2RPJMpVMk59qDXwe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvQTAkwBSgyJoEg96IPelooEg96IPeuN7eW1iyXr24at2hje6sJH41GttURdIeXbW12ttCZSotbA4eyd0E/Pj3oJ8HvRB71itS1XVX9MSEsbnFOJcYU0hSlKCXASFbfQCEgyAo7ulXnhm6Xci+33irxKXUlt0hIBQpCVCAkDuaC5g96IPelpCJFAQe9EHvSiigSD3og96WigSD3og96WigSD3og96WigSD3og96WigSD3og96CY5paBIPeiD3paKBIPeiD3paKAooooCiiigKKQmOhNLQFFFFAUUUUBRRRQFFFFAUUUUBRRRQFFFFAUUUUBRRSdaBaKKKAooooCiimLcS2lanCEISJKlGABQPorMOeJ1PXrrWmtIum2SFKWggoU2R9vzCQlMEKB54p+t6Nc32mXTi9QuXnSguMsIUENYyEkJgqB49RP0oLZerWKX3GE3CHbhtO5bLX6RYHulMms1c+Kn3mVrZYeaFu6pD6WYcWE5EztKEQCFSpQ4IipuiruLjT7ZkaPp40q6RM2zg2pSRPqbUkD2wTWeRbv2GrlgoTetLdcSRtK0g8gRCW0K2AghAUccZoNAEv3zCE3Wms6jdW7hQnz3UQgwFS4AnaFQR9gK+lQNERcuXBsLu8dYtlv3AbbsyEJJSqVJ3/b/WVEbfsmpOg2Ot2jDbbYabZc8x7e8sqWmUwhC0xkphOQelXTOiWY0xiyumkXSGzvKnUyVLMkqPuST99BntQZRfq+F0h15m5XdeW6lw+a2tLW0lS5zEBIwQZPzqwXo15e6urUHnRYXTTCWW3bbareTlRO4ZTwACJwa0LDLVuylq3bQ00kQlCEhKQPYCn0DWwpLaQtW5QABVESe8U6iigKKKKAooooCiiigKJzRXF95DDZcdUlDaRJUowBQdpFIFCsxdeJULUlGmMKuCoEhxXpRj3559qpNQ8S6my+ygutbVnaoNJkpV3z096xepxj1dP4fV6l9Y9C3CiRWKTfX50T45V05u83YQAIInmI5qJb+I9TD7iN7ZCcAOpjefaKfki8fhdTluWeHoMiaJrLWHihC0k3rJaSMl1B3JGeD1H3VomX232wtlSVoVwoGQa1LL6cOp0ufSuco70UgparmKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiuF7eW9iwXbt9phvgKdWEgntJoOygCIIkUilJQgqUQlIGSTAFZrTtdu9UKfJZDDLwLYdWkDynRykbiC5weEioviPSl2psrx15WpEPBpxN+qWfXhKtiRtEKjITOaC5vvEFq3pr91YKF95Uj9CZRIEkFf2R9TVKvX7y9uWfgxcIauEgsloJKAoSSFLWkAgp5CdxG3FT7+2vdR0y6t72xtbN1lsqt30OodQFQeNyJT7nbwcGsvasXT7NzYssLW5CBb3CQsqbBwlXmL9SkpIV+qExOTMUF3rLBvdNurxvS7Le9aFa75x3cEpKZ/R+ncY9wgV101bjzFxc6pd3bj9mhLpYSsMNwUBQICTJHI9RIkGu7OmandWarG+LFvZDymyhpRXvbSDuAMAjd6RmcT86uLnSrC6uEP3NnbuvIACVLQFEAcc9qDOWFu87q9q9ozk2Nqwn9DciUp8wJO1CgJCgkAmdwz0mpuiaJcWjq7sXCrRy5eU8/aISlTRB4HEgxEkHJmtFRQFFFFAUUUUBRRRQFFFFAUUUUBRRRQEZoiiigaDNOo6UUBRRRQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffSffSzSEZFAffS/fRNE0B99H30TRNAffR99E0x51DLanHlobbSJUpRgAe5oH/AH0ffUWw1C11BpbljcNvtpVsKmzImAefqKlTQRru/tLMxdXLLJjd+kWE4mOvvUD8+NvvOsWLLjj6WlOJDkNzHHpVC4JjITHvVH4vtX7TUPzspxa7fZ5aghEFlIEg7gpJgndPqAMpEGoenBy21XTXG21IHmKMBOxOwj1KP2BGQZ2GTHqM5CQ7qLd3pzT51V+5Wpbbt23bktpabOCj0ZRG6cqkwaXUtNbtF3tpbsbkthN7bJCEuKCZAdCAoEbsSCQcqqfZWN5cG6sm1so0NbqnEOoUFqeQvJQOQEhRUJ56COam6XoiGmAu+U67elryFOh9ZhPHoz6JgExGaDL6k5cBi4YQp1V+SWWmHHEuuqadACkK2mEqBBUBMQO0xsNEvV3ibj9A80w0tKGvNZU0ojaJkK7GRIxUm1sLS1baRb2zLaWiSiEj0k8me56nrUqaCDpFidOYdYDm9ourW2IjYlRnb9CTU2lmiaA++j76JomgPvo++iaJoD76PvomiaA++j76JomgPvo++iaJoD76T76Wa4XDvksuOEYSkn7hQR9T1FjTbRT9ysATCROVHoBWKvb4am6l15x0uoV6GEDciCDwJEkckntVdqN8rVXPiL4FbC0p8pp1IATJI/aOvaarb6/t9Mtm27Y+asGRwSFJMRu6iO3evPz6nu30+58X4GZJ553/AGT7i7DVok3D7bSXUEISlZGO6gRIECMHrVVceILVAcSw2tSXAJVHqSZGEkmIEYPNZ68uXLtYU6omAQAeg7V20ZFk7dJb1R51hpWA62AoJ9yO3yrx/n5crnF+h4f0zp9Lh39Xb/Ear+mb35uOzSmTbB2Cok/aiR/7veoVt4itlKbTcsnagHlIJUcwCegzyM1tmvCGnHwuvTk3SyytfxHxIieMH5RXlust6YxdlrSrh+6bThTrgACv82unVvV6cl5V4/gT4Xy+XLh0+Nl3+fX8tczceagfCOsupQkAoG4yDyUJGcCZknIqwsb9WnOeZbun4hSpcaUQE7QByOJIzI715xbXbtssKYWpCh0BwR7itPp99b6lbPC8UQpMqIERuJA7SBH7KdPr91/lPl/029GbfPF6xpOpMajbB1kkKGFIPKT2qwFeS2t07plyH9N3hIlS0p4eA4GefaK9UtHxcW7bqYIWkKx717eHPunl+a+X8X8F2eq7/fR99E0TW3kH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TUa+v7Wwa8y9uGWEHALiwmT2Hc0En76PvrnbvN3DDbzKgtpxIUlQ4IPBp8mghXGrWNuoocuUF0EjyketwkcgJTJJ+QqqvtfLmnLfsiGGkvpYcuHdqg0Dgq2hWIkYVETJFZzULN7Tb96Line truncated
+143 -327
View File
@@ -2,21 +2,21 @@
<div id="c_grid-116273709439191"> <div class="p_gridbox signal s_tmpl">
<div id="content_box-116273709439191-0" class="d_gridCell_0 p_gridCell ND_empty"><div id="c_navigation_006_P_1060-17155922968550">
<div class="e_navigationA-12 header response-transition" needjs="false">
<div class="e_navigationA-12 header response-transition" needjs="false">
<link type="text/css" rel="stylesheet" href="./发展历程-烟台华阳食品有限公司_files/18609477787948809dba96f603809665.css">
<link type="text/css" rel="stylesheet" href="./发展历程-烟台华阳食品有限公司_files/08f89a44fe3740fb928b292eecbf4152.css">
<div class="leftNav">
<div class="logorim"><a href="javascript:;">
<img src="./发展历程-烟台华阳食品有限公司_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
<img src="./发展历程-烟台华阳食品有限公司_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
</a>
<!--底-->
@@ -24,32 +24,32 @@
<div class="box">
<a href="javascript:;" class="active">
<svg t="1715309350939" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8064" width="200" height="200"><path d="M664.250054 368.541681c10.015098 0 19.892049 0.732687 29.67281 1.795902-26.647917-122.810047-159.358451-214.077703-310.826188-214.077703-169.353083 0-308.085774 114.232694-308.085774 259.274068 0 83.708494 46.165436 152.460344 123.281791 205.78483l-30.80868 91.730191 107.688651-53.455469c38.558178 7.53665 69.459978 15.308661 107.924012 15.308661 9.66308 0 19.230993-0.470721 28.752858-1.225921-6.025227-20.36584-9.521864-41.723264-9.521864-63.862493C402.328693 476.632491 517.908058 368.541681 664.250054 368.541681zM498.62897 285.87389c23.200398 0 38.557154 15.120372 38.557154 38.061874 0 22.846334-15.356756 38.156018-38.557154 38.156018-23.107277 0-46.260603-15.309684-46.260603-38.156018C452.368366 300.994262 475.522716 285.87389 498.62897 285.87389zM283.016307 362.090758c-23.107277 0-46.402843-15.309684-46.402843-38.156018 0-22.941502 23.295566-38.061874 46.402843-38.061874 23.081695 0 38.46301 15.120372 38.46301 38.061874C321.479317 346.782098 306.098002 362.090758 283.016307 362.090758zM945.448458 606.151333c0-121.888048-123.258255-221.236753-261.683954-221.236753-146.57838 0-262.015505 99.348706-262.015505 221.236753 0 122.06508 115.437126 221.200938 262.015505 221.200938 30.66644 0 61.617359-7.609305 92.423993-15.262612l84.513836 45.786813-23.178909-76.17082C899.379213 735.776599 945.448458 674.90216 945.448458 606.151333zM598.803483 567.994292c-15.332197 0-30.807656-15.096836-30.807656-30.501688 0-15.190981 15.47546-30.477129 30.807656-30.477129 23.295566 0 38.558178 15.286148 38.558178 30.477129C637.361661 552.897456 622.099049 567.994292 598.803483 567.994292zM768.25071 567.994292c-15.213493 0-30.594809-15.096836-30.594809-30.501688 0-15.190981 15.381315-30.477129 30.594809-30.477129 23.107277 0 38.558178 15.286148 38.558178 30.477129C806.808888 552.897456 791.357987 567.994292 768.25071 567.994292z" p-id="8065"></path></svg><p>微信公众号</p>
<!--底部弹出二维码-->
<div class="lang-ewm">
<img src="./发展历程-烟台华阳食品有限公司_files/990a73b8-b155-4497-bd14-bb4471955bb2.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
<div class="box">
<a href="javascript:;" class="active">
<svg t="1715309293797" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6171" width="200" height="200"><path d="M774.30784 305.664h-74.9568c0-103.5264-83.92704-187.55584-187.35104-187.55584s-187.35104 84.02944-187.35104 187.55584h-74.9568c-41.20576 0-74.5472 33.77152-74.5472 75.03872L174.73536 830.8736a75.20256 75.20256 0 0 0 74.9568 75.03872h524.5952a75.20256 75.20256 0 0 0 74.9568-75.03872V380.7232a75.20256 75.20256 0 0 0-74.9568-75.03872zM512 193.1264a112.3328 112.3328 0 0 1 112.4352 112.5376H399.5648a112.3328 112.3328 0 0 1 112.4352-112.5376H512z m0 375.15264c-103.424 0-187.35104-84.02944-187.35104-187.5968h74.93632a112.3328 112.3328 0 0 0 112.4352 112.55808 112.3328 112.3328 0 0 0 112.39424-112.5376h74.9568c0 103.54688-83.94752 187.57632-187.37152 187.57632z" p-id="6172"></path></svg>
<p>华阳商城</p>
<div class="lang-ewm">
<img src="./发展历程-烟台华阳食品有限公司_files/b5d1469c-e180-4082-bd49-f1908c4fcd70.png" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
</div>
</div>
@@ -68,21 +68,14 @@
<div class="tm"><a href="#"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<!--
<div class="jd"><a href="#"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<div class="it_o">
<a href="tel:4006-535-700" rel="nofollow">服务热线:4006-535-700</a>
</div>
<div class="user01">
<a href="javascript:;" target="_blank">
中
</a>
<a href="javascript:;" target="_blank">
| 英
</a>
<a href="javascript:;" target="_blank">
| 日
</a>
<span class="haiho-lang" data-lang="zh_cn" role="button" tabindex="0">中</span>
<span class="haiho-lang" data-lang="en_us" role="button" tabindex="0">| 英</span>
<span class="haiho-lang" data-lang="ja_jp" role="button" tabindex="0">| 日</span>
</div>
</div>
<ul class="p_level1Box">
@@ -92,128 +85,116 @@
</div>
-->
<div class="navitem">
<li class="p_level1Item s_templatesum actived">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>网站首页</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>关于我们</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>产品中心</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>华阳文化</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>华阳动态</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>招商加盟</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
</li><li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="_blank">
<span>华阳商城</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>联系方式</span>
</a>
</p>
</li>
</div>
<div class="navimgbox">
<div class="imgitem actived" style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./发展历程-烟台华阳食品有限公司_files/06cd51aa-048e-43f0-a8fd-a553842b34aa.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./发展历程-烟台华阳食品有限公司_files/86b45b9a-c1ec-4b9d-8d16-50b71df3f87d.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./发展历程-烟台华阳食品有限公司_files/13c80529-c446-4850-affb-408badf8209c.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./发展历程-烟台华阳食品有限公司_files/c8fdaa92-cc60-43bd-ae81-dde0780d8b55.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./发展历程-烟台华阳食品有限公司_files/7a062633-43d7-4cf7-9d97-d491afb96f50.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./发展历程-烟台华阳食品有限公司_files/76bd053f-e42a-4557-b9fa-a5706a1d6725.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./发展历程-烟台华阳食品有限公司_files/no-img.svg" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./发展历程-烟台华阳食品有限公司_files/no-img.svg" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./发展历程-烟台华阳食品有限公司_files/eab93efc-3954-4d4e-b469-4d8e59016a71.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
</div>
</ul>
</div>
@@ -238,7 +219,7 @@
<div class="e_html-16 s_list">
</div>
<link type="text/css" rel="stylesheet" href="./发展历程-烟台华阳食品有限公司_files/9469677399bd48a4a97b4b10685b47fe.css">
@@ -259,8 +240,8 @@
<div class="logoBox">
<div class="logocai">
<!-- nLazyImage 'portal-saas/pg2024022811514093430/cms/image/cc37821e-0aa0-4c76-bb25-316efafe8b1b.png' '' true}}}
</div>
<div class="name cntitle">
<span>华</span><span>味</span><span>坊</span><span>食</span><span>品</span>
@@ -289,7 +270,7 @@
<div class="swiper-wrapper p_swiperContainer" id="swiper-wrapper-976567732a779d89" aria-live="polite" style="transform: translate3d(-1768px, 0px, 0px); transition: all;"><div class="swiper-slide p_slide swiper-slide-duplicate swiper-slide-duplicate-active swiper-slide-prev" data-swiper-slide-index="0" role="group" aria-label="1 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./发展历程-烟台华阳食品有限公司_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -305,7 +286,7 @@
<div class="swiper-slide p_slide swiper-slide-active swiper-slide-duplicate-next swiper-slide-duplicate-prev" data-swiper-slide-index="0" role="group" aria-label="2 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./发展历程-烟台华阳食品有限公司_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info anim">
@@ -321,7 +302,7 @@
<div class="swiper-slide p_slide swiper-slide-duplicate swiper-slide-duplicate-active swiper-slide-next" data-swiper-slide-index="0" role="group" aria-label="3 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./发展历程-烟台华阳食品有限公司_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -367,9 +348,9 @@
</p></div>
</div>
<div class="p_page">
</div>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;企业概况-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:6,&quot;query&quot;:[{&quot;valueName&quot;:&quot;关于我们&quot;,&quot;dataType&quot;:&quot;array[category]&quot;,&quot;operator&quot;:&quot;in&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;DETAIL_ES.es_multi_category_01Sy2jv4&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;category_01Sy2jv4&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;2661&quot;,&quot;fieldType&quot;:&quot;array&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;text_r4O05cao,categoryName&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;60007&quot;,&quot;sourceUuid&quot;:&quot;1441959640303796224&quot;,&quot;pageParams&quot;:[],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list?cate=0&quot;,&quot;id&quot;:&quot;datasource10&quot;,&quot;apiId&quot;:&quot;18515&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list?cate=0|{\&quot;size\&quot;:6,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;关于我们\&quot;,\&quot;dataType\&quot;:\&quot;array[category]\&quot;,\&quot;operator\&quot;:\&quot;in\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;DETAIL_ES.es_multi_category_01Sy2jv4\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;category_01Sy2jv4\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;2661\&quot;,\&quot;fieldType\&quot;:\&quot;array\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_r4O05cao,categoryName\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_r4O05cao,categoryName\&quot;}&quot;}">
@@ -408,7 +389,7 @@
<div class="cbox-25-0 p_item"><div class="e_loop-26 s_list response-transition" needjs="true" ds-id="" elem-id="e_loop-26">
<div class="">
<div class="p_list">
<div class="cbox-26 p_loopitem"><div class="e_container-27 s_layout response-transition">
<div class="cbox-27-0 p_item"><div class="e_image-31 s_img response-transition">
@@ -594,11 +575,11 @@
</div></div>
</div>
<div class="p_page">
</div>
</div>
<input type="hidden" name="_config" value="{&quot;cname&quot;:&quot;新闻资讯-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:30,&quot;query&quot;:[{&quot;valueName&quot;:&quot;发展历程&quot;,&quot;dataType&quot;:&quot;array[category]&quot;,&quot;operator&quot;:&quot;in&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;DETAIL_ES.es_multi_category_6d5k7017&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;category_6d5k7017&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;1776439345933672448&quot;,&quot;fieldType&quot;:&quot;array&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;text_2PVENH84,textarea_8B30N7U4&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/60003/972204/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;60003&quot;,&quot;sourceUuid&quot;:&quot;1441932740135092224&quot;,&quot;pageParams&quot;:[],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/60003/972204/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/60003/972204/list?cate=0&quot;,&quot;id&quot;:&quot;datasource5&quot;,&quot;apiId&quot;:&quot;972204&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/60003/972204/list?cate=0|{\&quot;size\&quot;:30,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;发展历程\&quot;,\&quot;dataType\&quot;:\&quot;array[category]\&quot;,\&quot;operator\&quot;:\&quot;in\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;DETAIL_ES.es_multi_category_6d5k7017\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;category_6d5k7017\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;1776439345933672448\&quot;,\&quot;fieldType\&quot;:\&quot;array\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_2PVENH84,textarea_8B30N7U4\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_2PVENH84,textarea_8B30N7U4\&quot;}&quot;}">
<input type="hidden" name="view" value="History">
@@ -608,129 +589,9 @@
</div></div>
</div></div>
</div></div>
<div id="huayang-history-store-wrap" class="huayang-history-store-section pt_30 response-transition"><h2 class="e_h1-6 s_summary huayang-history-store-heading">店面展示</h2><div class="e_loop-11 s_list huayang-history-store-swiper"><div class=""><div class="p_list"></div></div></div></div>
</div>
<input type="hidden" name="propJson" value="{&quot;pageConfig_26&quot;:{&quot;showJump&quot;:true,&quot;marquee&quot;:{&quot;navigation&quot;:true,&quot;marqueeTime&quot;:4,&quot;scrollType&quot;:&quot;horizontal&quot;,&quot;opp&quot;:false},&quot;filterPosition&quot;:&quot;&quot;,&quot;moColumn&quot;:1,&quot;rolling&quot;:{&quot;navigation&quot;:true,&quot;pageStyle&quot;:1,&quot;scrollType&quot;:&quot;horizontal&quot;,&quot;pagenation&quot;:true,&quot;scrollTime&quot;:4,&quot;autoScroll&quot;:true,&quot;speed&quot;:600},&quot;pageType&quot;:&quot;hidden&quot;,&quot;singleTotal&quot;:0,&quot;showButtom&quot;:false,&quot;showTotal&quot;:false,&quot;pcColumn&quot;:1,&quot;loopItem&quot;:&quot;.p_loopitem&quot;,&quot;status&quot;:true,&quot;pcRow&quot;:30,&quot;datasourceid&quot;:&quot;datasource5&quot;,&quot;elementid&quot;:26},&quot;href_6&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;href_29&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;dense_29&quot;:&quot;&quot;,&quot;prompt_29&quot;:&quot;&quot;,&quot;page_26&quot;:{&quot;size&quot;:6,&quot;from&quot;:0,&quot;totalCount&quot;:100},&quot;setting_31&quot;:{},&quot;prompt_30&quot;:&quot;&quot;,&quot;href_31&quot;:{&quot;type&quot;:&quot;&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;href_30&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;dense_30&quot;:&quot;&quot;,&quot;space_31&quot;:0}"></div><div id="c_static_001_P_4578-16941414442160" class="huayang-archive-static-store-swiper" data-huayang-legacy-cms-store-hidden="1" hidden style="display:none !important" aria-hidden="true">
<div class="e_container-5 s_layout saf-fadeInUp saf-scroll-animation">
<div class="cbox-5-0 p_item"><h1 class="e_h1-6 s_summary">
店面展示
</h1><div class="e_loop-11 s_list" needjs="true" ds-id="" elem-id="e_loop-11" saf-loop-swiper="" saf-sw-auto="true,3000" saf-sw-loop="true" saf-sw-between="30" saf-sw-num="4,3,2,2" saf-sw-type="fraction" saf-sw-speed="800">
<div class="">
<div class="p_list saf-swiper0">
<div class="swiper-container swiper-initialized swiper-horizontal swiper-pointer-events"><div class="swiper-wrapper" id="swiper-wrapper-b611b0bf99707e1010" aria-live="off" style="transform: translate3d(-2502.5px, 0px, 0px); transition-duration: 800ms;"><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-prev" data-swiper-slide-index="2" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="3 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-active" data-swiper-slide-index="3" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="4 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-next" data-swiper-slide-index="4" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="5 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate" data-swiper-slide-index="5" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="6 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide" data-swiper-slide-index="0" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="1 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide" data-swiper-slide-index="1" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="2 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-prev" data-swiper-slide-index="2" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="3 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-active" data-swiper-slide-index="3" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="4 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-next" data-swiper-slide-index="4" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="5 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide" data-swiper-slide-index="5" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="6 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate" data-swiper-slide-index="0" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="1 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate" data-swiper-slide-index="1" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="2 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-prev" data-swiper-slide-index="2" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="3 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-active" data-swiper-slide-index="3" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="4 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./发展历程-烟台华阳食品有限公司_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div></div><span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span></div>
<div class="saf-sBar"><div class="saf-s-Btn s_prev" tabindex="0" role="button" aria-label="Previous slide" aria-controls="swiper-wrapper-b611b0bf99707e1010"><svg xmlns="http://www.w3.org/2000/svg" width="47.062" height="100" viewBox="0 0 47.062 100">
<path id="prev" d="M249.333,341.48l-44.3,44.538a7.842,7.842,0,0,1-11.247,0l-44.45-44.685c14.044,11.585,31.359,18.424,50.088,18.424a78.331,78.331,0,0,0,49.912-18.274Z" transform="translate(388.395 -149.333) rotate(90)"></path>
</svg></div><div class="saf-cn-pagination fraction swiper-pagination-fraction swiper-pagination-horizontal"><span class="swiper-pagination-current">4</span> / <span class="swiper-pagination-total">6</span></div><div class="saf-s-Btn s_next" tabindex="0" role="button" aria-label="Next slide" aria-controls="swiper-wrapper-b611b0bf99707e1010"><svg xmlns="http://www.w3.org/2000/svg" width="47.062" height="100" viewBox="0 0 47.062 100">
<path id="next" d="M100,46.914,55.7,2.376a7.842,7.842,0,0,0-11.247,0L0,47.062C14.044,35.476,31.359,28.638,50.088,28.638A78.331,78.331,0,0,1,100,46.912Z" transform="translate(47.062) rotate(90)"></path>
</svg></div></div></div>
<div class="p_page">
</div>
</div>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;产品-产品列表&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:20,&quot;query&quot;:[{&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;category.id&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;categoryId&quot;,&quot;valueName&quot;:&quot;店面展示&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;dataType&quot;:&quot;string&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;1224738912811503616&quot;,&quot;operator&quot;:&quot;eq&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/product/datasource/143150160001/product/list/param/value&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;appId&quot;:&quot;143150160001&quot;,&quot;sourceUuid&quot;:&quot;d2f12f858d9f46eeb5b049baa1dffc37&quot;,&quot;pageParams&quot;:[],&quot;metaUrl&quot;:&quot;/fwebapi/product/datasource/143150160001/product/list/meta&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/product/product/es/findPage?appId=143150160001&amp;templateId=product&quot;,&quot;id&quot;:&quot;datasource4&quot;,&quot;apiId&quot;:&quot;product&quot;,&quot;reqKey&quot;:&quot;/fwebapi/product/product/es/findPage?appId=143150160001&amp;templateId=product|{\&quot;size\&quot;:20,\&quot;query\&quot;:[{\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;category.id\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;categoryId\&quot;,\&quot;valueName\&quot;:\&quot;店面展示\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;dataType\&quot;:\&quot;string\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;1224738912811503616\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;\&quot;}&quot;}">
<input type="hidden" name="view" value="History">
<input type="hidden" name="pageParamsJson" value="{&quot;size&quot;:20,&quot;from&quot;:0,&quot;totalCount&quot;:6}">
<input type="hidden" name="i18nJson" value="{&quot;noMore_11&quot;:&quot;没有更多了&quot;,&quot;pageItem_11&quot;:&quot;条&quot;,&quot;pageWhole_11&quot;:&quot;共&quot;,&quot;loadMore_11&quot;:&quot;点击加载更多&quot;,&quot;totalAcount_11&quot;:&quot;共 X 个&quot;,&quot;loadNow_11&quot;:&quot;加载中&quot;,&quot;confirm_11&quot;:&quot;确定&quot;,&quot;pageUnit_11&quot;:&quot;页&quot;,&quot;clearConditions_11&quot;:&quot;清空条件&quot;,&quot;conditions_11&quot;:&quot;条件:&quot;,&quot;pageJump_11&quot;:&quot;前往&quot;,&quot;noData_11&quot;:&quot;暂无数据&quot;}">
</div></div>
</div>
<input type="hidden" name="propJson" value="{&quot;page_11&quot;:{&quot;size&quot;:6,&quot;from&quot;:0,&quot;totalCount&quot;:100},&quot;imgList2_13&quot;:[],&quot;imgList1_13&quot;:[],&quot;href_6&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;pageConfig_11&quot;:{&quot;showJump&quot;:false,&quot;marquee&quot;:{&quot;navigation&quot;:true,&quot;marqueeTime&quot;:4,&quot;scrollType&quot;:&quot;horizontal&quot;,&quot;opp&quot;:false},&quot;filterPosition&quot;:&quot;&quot;,&quot;moColumn&quot;:2,&quot;rolling&quot;:{&quot;navigation&quot;:true,&quot;pageStyle&quot;:1,&quot;scrollType&quot;:&quot;horizontal&quot;,&quot;pagenation&quot;:true,&quot;scrollTime&quot;:4,&quot;autoScroll&quot;:true,&quot;speed&quot;:600},&quot;pageType&quot;:&quot;hidden&quot;,&quot;singleTotal&quot;:0,&quot;showButtom&quot;:false,&quot;showTotal&quot;:false,&quot;pcColumn&quot;:10,&quot;loopItem&quot;:&quot;.p_loopitem&quot;,&quot;status&quot;:true,&quot;pcRow&quot;:2,&quot;datasourceid&quot;:&quot;datasource4&quot;,&quot;elementid&quot;:11},&quot;space_13&quot;:0,&quot;setting_13&quot;:{&quot;fit&quot;:&quot;contain&quot;,&quot;errorUrl&quot;:&quot;&quot;,&quot;needThumb&quot;:&quot;true&quot;,&quot;isLazy&quot;:&quot;true&quot;},&quot;href_13&quot;:{&quot;transport&quot;:[],&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;_self&quot;}}"></div></div>
</div>
</div></div></div>
</div>
<input type="hidden" name="propJson" value="{&quot;pageConfig_26&quot;:{&quot;showJump&quot;:true,&quot;marquee&quot;:{&quot;navigation&quot;:true,&quot;marqueeTime&quot;:4,&quot;scrollType&quot;:&quot;horizontal&quot;,&quot;opp&quot;:false},&quot;filterPosition&quot;:&quot;&quot;,&quot;moColumn&quot;:1,&quot;rolling&quot;:{&quot;navigation&quot;:true,&quot;pageStyle&quot;:1,&quot;scrollType&quot;:&quot;horizontal&quot;,&quot;pagenation&quot;:true,&quot;scrollTime&quot;:4,&quot;autoScroll&quot;:true,&quot;speed&quot;:600},&quot;pageType&quot;:&quot;hidden&quot;,&quot;singleTotal&quot;:0,&quot;showButtom&quot;:false,&quot;showTotal&quot;:false,&quot;pcColumn&quot;:1,&quot;loopItem&quot;:&quot;.p_loopitem&quot;,&quot;status&quot;:true,&quot;pcRow&quot;:30,&quot;datasourceid&quot;:&quot;datasource5&quot;,&quot;elementid&quot;:26},&quot;href_6&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;href_29&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;dense_29&quot;:&quot;&quot;,&quot;prompt_29&quot;:&quot;&quot;,&quot;page_26&quot;:{&quot;size&quot;:6,&quot;from&quot;:0,&quot;totalCount&quot;:100},&quot;setting_31&quot;:{},&quot;prompt_30&quot;:&quot;&quot;,&quot;href_31&quot;:{&quot;type&quot;:&quot;&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;href_30&quot;:{&quot;type&quot;:&quot;none&quot;,&quot;value&quot;:&quot;&quot;,&quot;target&quot;:&quot;&quot;},&quot;dense_30&quot;:&quot;&quot;,&quot;space_31&quot;:0}"></div></div>
<div id="c_grid-116273709439190"> <div class="p_gridbox signal s_tmpl_footer">
<div id="content_box-116273709439190-0" class="d_gridCell_0 p_gridCell ND_empty"><div id="c_static_001_P_5631-17155927392080">
@@ -746,7 +607,7 @@
<div class="cbox-95-0 p_item"><div class="e_input-99 s_form1 form-group" needjs="true">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="姓名">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -754,7 +615,7 @@
<div class="cbox-95-1 p_item"><div class="e_input-98 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="电话">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -762,17 +623,15 @@
<div class="cbox-95-2 p_item"><div class="e_input-97 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="需求信息">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
</div></div>
<div class="cbox-95-3 p_item"><a class="e_formBtn-96 s_button1 btn btn-primary" href="javascript:;" needjs="true">
<span>提交</span>
</a></div>
</div></div>
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
</form></div>
</div><div class="e_container-60 s_layout">
<div class="cbox-60-0 p_item"><div class="e_richText-81 s_title clearfix">
@@ -780,17 +639,17 @@
<p style="font-size:14px;line-height:24px">&nbsp;</p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:16px;"><strong><span style="font-size:14px;">服务热线:</span></strong></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="tel:4006-535-700" rel="nofollow"><span style="color:#FF0000;">4006-535-700</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">E-mail:</span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="mailto:haiho@haihofoods.com" rel="nofollow"><span style="color:#FF0000;">haiho@haihofoods.com</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">地址 : </span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">中国•烟台•芝罘岛东路51号</span></span></p>
</div></div>
<div class="cbox-60-1 p_item"></div>
@@ -803,7 +662,7 @@
<a href="javascript:;" target="">
<span>网站首页</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -823,7 +682,7 @@
<a href="javascript:;" target="">
<span>公司简介</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -833,7 +692,7 @@
<a href="javascript:;" target="">
<span>资质荣誉</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -843,7 +702,7 @@
<a href="javascript:;" target="">
<span>品质技术</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -853,7 +712,7 @@
<a href="javascript:;" target="">
<span>发展历程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -863,7 +722,7 @@
<a href="javascript:;" target="">
<span>店面展示</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -885,7 +744,7 @@
<a href="javascript:;" target="">
<span>礼盒系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -895,7 +754,7 @@
<a href="javascript:;" target="">
<span>华阳金标海参</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -905,7 +764,7 @@
<a href="javascript:;" target="">
<span>生鲜系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -915,7 +774,7 @@
<a href="javascript:;" target="">
<span>无骨系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -925,7 +784,7 @@
<a href="javascript:;" target="">
<span>调味系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -935,7 +794,7 @@
<a href="javascript:;" target="">
<span>裹粉系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -945,7 +804,7 @@
<a href="javascript:;" target="">
<span>休闲即食系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -967,7 +826,7 @@
<a href="javascript:;" target="">
<span>七道鲜文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -977,7 +836,7 @@
<a href="javascript:;" target="">
<span>节庆文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -987,7 +846,7 @@
<a href="javascript:;" target="">
<span>礼品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -997,7 +856,7 @@
<a href="javascript:;" target="">
<span>企业文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1007,7 +866,7 @@
<a href="javascript:;" target="">
<span>历史文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1017,7 +876,7 @@
<a href="javascript:;" target="">
<span>产品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1027,7 +886,7 @@
<a href="javascript:;" target="">
<span>...</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1049,7 +908,7 @@
<a href="javascript:;" target="">
<span>华阳新闻</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1059,7 +918,7 @@
<a href="javascript:;" target="">
<span>行业动态</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1069,61 +928,18 @@
<a href="javascript:;" target="">
<span>媒体报道</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-5 open">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="javascript:;" target="">
<span>招商加盟</span>
</a>
<svg t="1625735163067" class="icon p_jtIcon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1486" width="200" height="200"><path d="M661.16183428 486.94732961L415.99871022 219.24359155c-13.37500289-14.59708438-35.98351032-15.54759219-50.51270128-2.24048272-14.59708438 13.37500289-15.54759219 35.98351032-2.24048272 50.51270127l223.09776396 243.60157549-222.89408371 244.28050967c-13.30710947 14.59708438-12.28870823 37.20559179 2.30837613 50.51270125 14.59708438 13.30710947 37.20559179 12.28870823 50.51270128-2.30837613l244.75576356-268.11109855c0.47525392-0.54314733 1.01840124-1.15418807 1.42576173-1.6973354 11.13452018-13.51078973 10.93083994-33.53934734-1.2899749-46.84645682z" p-id="1487"></path></svg>
</p>
<!-- 子集 -->
<ul class="mt-2 p_level2Box s_templatesum">
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟细则</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟流程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟资质</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-7">
</li><li class="pt-1 pb-1 p_level1Item saf-d-7">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="javascript:;" target="_blank">
<span>华阳商城</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -1133,14 +949,14 @@
<a href="javascript:;" target="">
<span>联系方式</span>
</a>
</p>
<!-- 子集 -->
</li>
</ul>
<!-- 导航内容 结束 -->
</div>
</div>
@@ -1182,9 +998,9 @@
<path id="slider" d="M246.848,168.96h-86a6.986,6.986,0,0,0-6.991,6.991v66.232a5.446,5.446,0,0,0,5.445,5.445h89.11a5.446,5.446,0,0,0,5.445-5.445V175.951A7,7,0,0,0,246.848,168.96Zm-18.275,6.785h8.485v8.485h-8.485Zm-14.96,0H222.1v8.485h-8.485Zm-14.96,0h8.485v8.485h-8.485Zm45.517,66.4H162.444v-50.4h81.724Zm-8.348,18.035H171.874a3.246,3.246,0,1,1,0-6.493h63.947a3.246,3.246,0,1,1,0,6.493Z" transform="translate(-153.856 -168.96)"></path>
</svg>
<a href="javascript:;" target="_self">
营业执照及SEO链接: 营业执照
</a>
</div><div class="e_container-41 s_layout">
<div class="cbox-41-0 p_item"><div class="e_richText-40 s_title clearfix saf-setItem">
@@ -1199,8 +1015,8 @@
<p style="text-align: center;"><span style="line-height:2;">您可以查看其他栏目或返回&nbsp;<a href="javascript:;"><span style="color:#FF0000;">首页</span></a></span></p>
</div>
</div></div>
</div></div>
</div>
@@ -1241,7 +1057,7 @@
</div><div class="e_html-31 s_list">
<h3>SVG图标库<span>请自行添加图标,用div包起来,并命名使用</span></h3>
<div class="saf-svgs">
<div class="search">
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="96.983" viewBox="0 0 100 96.983">
<path id="search" d="M93.962,95.944,77.127,79.11a45.789,45.789,0,1,1,4.77-5.235L98.965,90.942a3.537,3.537,0,1,1-5,5ZM7.079,45.825a38.7,38.7,0,1,0,38.7-38.7A38.7,38.7,0,0,0,7.079,45.825Z"></path>
@@ -1297,11 +1113,11 @@
<svg t="1683854973181" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20559" width="200" height="200"><path d="M713.5 599.9c-10.9-5.6-65.2-32.2-75.3-35.8-10.1-3.8-17.5-5.6-24.8 5.6-7.4 11.1-28.4 35.8-35 43.3-6.4 7.4-12.9 8.3-23.8 2.8-64.8-32.4-107.3-57.8-150-131.1-11.3-19.5 11.3-18.1 32.4-60.2 3.6-7.4 1.8-13.7-1-19.3-2.8-5.6-24.8-59.8-34-81.9-8.9-21.5-18.1-18.5-24.8-18.9-6.4-0.4-13.7-0.4-21.1-0.4-7.4 0-19.3 2.8-29.4 13.7-10.1 11.1-38.6 37.8-38.6 92s39.5 106.7 44.9 114.1c5.6 7.4 77.7 118.6 188.4 166.5 70 30.2 97.4 32.8 132.4 27.6 21.3-3.2 65.2-26.6 74.3-52.5 9.1-25.8 9.1-47.9 6.4-52.5-2.7-4.9-10.1-7.7-21-13z m211.7-261.5c-22.6-53.7-55-101.9-96.3-143.3-41.3-41.3-89.5-73.8-143.3-96.3C630.6 75.7 572.2 64 512 64h-2c-60.6 0.3-119.3 12.3-174.5 35.9-53.3 22.8-101.1 55.2-142 96.5-40.9 41.3-73 89.3-95.2 142.8-23 55.4-34.6 114.3-34.3 174.9 0.3 69.4 16.9 138.3 48 199.9v152c0 25.4 20.6 46 46 46h152.1c61.6 31.1 130.5 47.7 199.9 48h2.1c59.9 0 118-11.6 172.7-34.3 53.5-22.3 101.6-54.3 142.8-95.2 41.3-40.9 73.8-88.7 96.5-142 23.6-55.2 35.6-113.9 35.9-174.5 0.3-60.9-11.5-120-34.8-175.6z m-151.1 438C704 845.8 611 884 512 884h-1.7c-60.3-0.3-120.2-15.3-173.1-43.5l-8.4-4.5H188V695.2l-4.5-8.4C155.3 633.9 140.3 574 140 513.7c-0.4-99.7 37.7-193.3 107.6-263.8 69.8-70.5 163.1-109.5 262.8-109.9h1.7c50 0 98.5 9.7 144.2 28.9 44.6 18.7 84.6 45.6 119 80 34.3 34.3 61.3 74.4 80 119 19.4 46.2 29.1 95.2 28.9 145.8-0.6 99.6-39.7 192.9-110.1 262.7z" p-id="20560"></path></svg>
</div>
</div>
</div>
</div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<link type="text/css" rel="stylesheet" href="./发展历程-烟台华阳食品有限公司_files/a542852518db4913ba26b2cb5f622c2a.css">
<link type="text/css" rel="stylesheet" href="./发展历程-烟台华阳食品有限公司_files/abe57529cab54a19b6da0041db3fb122.css">
<link type="text/css" rel="stylesheet" href="./发展历程-烟台华阳食品有限公司_files/6f7215910b184bd6873d42388538e76c.css">
@@ -1316,32 +1132,32 @@
<saf-online class="saf-online">
<div class="p_list">
<saf-loopitem class="cbox-1 saf-lineitem">
<a href="javascript:;">
<saf-icon><span><svg t="1734400707687" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2770" width="32" height="32"><path d="M336.64 848a58.666667 58.666667 0 0 1 3.562667 117.226667l-3.562667 0.106666a58.666667 58.666667 0 0 1-3.584-117.226666l3.584-0.106667zM165.290667 90.090667c13.973333 0 26.005333 10.453333 28.736 24.938666l24.64 130.090667h726.08c16.213333-0.021333 29.354667 13.845333 29.376 30.976 0 2.261333-0.234667 4.522667-0.704 6.741333L886.912 688.853333l0.021333-72.746666-0.192-4.842667a61.44 61.44 0 0 0-85.696-51.52l-3.498666 1.664-188.074667 96.149333-3.541333 1.962667a61.44 61.44 0 0 0-29.802667 48.661333l-0.128 4.053334v81.856H295.914667c-27.584 0-51.456-20.330667-57.322667-48.832L120.405333 182.890667a52.266667 52.266667 0 0 1-4.394666 0.213333H86.677333C62.357333 183.104 42.666667 162.282667 42.666667 136.597333c0-25.685333 19.690667-46.506667 44.010666-46.506666h78.613334z" fill="#666666" p-id="2771"></path><path d="M825.813333 597.333333l2.218667 0.170667a18.752 18.752 0 0 1 16.106667 16.384l0.128 2.218667V972.8H637.44l-2.346667-0.149333a18.773333 18.773333 0 0 1-15.786666-13.781334l-0.490667-2.496-0.149333-2.346666V712.256l0.192-2.602667a18.773333 18.773333 0 0 1 7.808-12.757333l2.24-1.344 188.053333-96.149333 2.154667-0.96a18.688 18.688 0 0 1 4.458666-1.002667L825.813333 597.333333zM704 853.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667z m-85.333333-85.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667zM937.813333 972.778667l2.346667-0.149334a18.773333 18.773333 0 0 0 16.277333-16.277333l0.149334-2.346667v-145.706666a18.773333 18.773333 0 0 0-6.954667-14.592l-1.984-1.408-56.32-34.602667a18.773333 18.773333 0 0 0-4.394667-1.984l-0.32-0.085333a18.773333 18.773333 0 0 0-23.744 15.701333l-0.149333 2.346667V972.8h75.093333z" fill="#666666" p-id="2772"></path></svg></span></saf-icon>
</a>
<!-- <p class="codeimg"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="二维码" title="二维码" la="la"/></p> -->
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="javascript:;"><span><svg height="78.564" viewBox="0 0 100 78.564" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M73.1,171.8h80a9.952,9.952,0,0,1,10,9.7l-49.983,27.437-49.971-27.4A9.9,9.9,0,0,1,73.1,171.8Zm-9.955,20.234L63.1,240.548a9.937,9.937,0,0,0,10,9.816h80a9.937,9.937,0,0,0,10-9.816V192.01l-48.8,26.153a2.511,2.511,0,0,1-2.393,0l-48.757-26.13Z" id="e-mail" transform="translate(-63.1 -171.8)"></path> </svg></span></a></saf-icon>
<p><a href="javascript:;">邮箱:haiho@haihofoods.com</a></p>
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="javascript:;"><span><svg height="100.001" viewBox="0 0 100 100.001" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M179.688,165.873a6.273,6.273,0,0,1,0,8.861l-4.431,4.431a21.371,21.371,0,0,1-12.8,5.929,31.058,31.058,0,0,1-3.9.24,43.582,43.582,0,0,1-12.237-1.918c-11.777-3.461-24.163-11.268-34.867-21.974s-18.513-23.089-21.975-34.867A39.857,39.857,0,0,1,87.8,110.439a21.371,21.371,0,0,1,5.929-12.8l4.431-4.431a6.273,6.273,0,0,1,8.861,0l19.5,19.5a6.274,6.274,0,0,1,0,8.862l-4.431,4.428c-2.507,2.507-.012,10.623,7.09,17.724s15.214,9.6,17.724,7.09l4.431-4.431a6.274,6.274,0,0,1,8.862,0Zm-32.233-45.448a5.019,5.019,0,0,1,5.013,5.013,2.507,2.507,0,0,0,5.013,0,10.037,10.037,0,0,0-10.026-10.026,2.507,2.507,0,0,0,0,5.013Zm36.952-10.6a40.074,40.074,0,0,0-36.952-24.494,2.507,2.507,0,0,0,0,5.013,35.134,35.134,0,0,1,35.092,35.092,2.507,2.507,0,1,0,5.013,0,39.848,39.848,0,0,0-3.153-15.611Zm-36.952-4.441a20.075,20.075,0,0,1,20.052,20.052,2.507,2.507,0,1,0,5.013,0,25.065,25.065,0,0,0-25.065-25.065,2.507,2.507,0,0,0,0,5.013Z" id="tel-1" transform="translate(-87.56 -85.333)"></path> </svg></span></a></saf-icon>
<p><a href="javascript:;">电话:4006-535-700</a></p>
</saf-loopitem>
<saf-loopitem class="saf-lineitem backTop"><saf-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="14.438" viewBox="0 0 20 14.438">
<path id="路径_804" data-name="路径 804" d="M216.687,81.683V98.356a1.66,1.66,0,0,1-2.774,1.24l-11-8.245a1.666,1.666,0,0,1-.329-2.327,1.459,1.459,0,0,1,.329-.329l11.119-8.34a1.66,1.66,0,0,1,2.321.335,1.62,1.62,0,0,1,.335.993h0Zm0,0" transform="translate(100.025 -202.249) rotate(90)"></path>
</svg></saf-icon></saf-loopitem>
</div>
<div class="p_page">
</div>
</saf-online>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;在线客服-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:20,&quot;query&quot;:[{&quot;valueName&quot;:&quot;&quot;,&quot;dataType&quot;:&quot;number&quot;,&quot;operator&quot;:&quot;eq&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;CID&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;CID&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;&quot;,&quot;fieldType&quot;:&quot;number&quot;,&quot;configurable&quot;:{&quot;sourceType&quot;:&quot;page&quot;,&quot;type&quot;:&quot;normal&quot;,&quot;value&quot;:&quot;_detailId&quot;}}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;TEXT_DETAIL_ES.es_text_rudao&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;rudao&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;125326&quot;,&quot;sourceUuid&quot;:&quot;1473112731287683072&quot;,&quot;pageParams&quot;:[{&quot;code&quot;:&quot;_detailId&quot;,&quot;name&quot;:&quot;默认参数&quot;}],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0&quot;,&quot;id&quot;:&quot;datasource1&quot;,&quot;apiId&quot;:&quot;407257&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\&quot;size\&quot;:20,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;\&quot;,\&quot;dataType\&quot;:\&quot;number\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;CID\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;CID\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;\&quot;,\&quot;fieldType\&quot;:\&quot;number\&quot;,\&quot;configurable\&quot;:{\&quot;sourceType\&quot;:\&quot;page\&quot;,\&quot;type\&quot;:\&quot;normal\&quot;,\&quot;value\&quot;:\&quot;_detailId\&quot;}}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;}&quot;}">
<input type="hidden" name="view" value="History">
@@ -1371,4 +1187,4 @@
</div>
<div class="licenseBox"><a href="javascript:;">×</a><div class="licenseRim"><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAI4AyADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAAAAECBAUGAwcI/8QAVhAAAQMDAwIEAwMIAwwIBQIHAQIDEQAEIQUSMUFRBhMiYRRxgTKRoQcVI0KxwdHwFlLhJDM0NWJyc5KTsrPxCDZDU1RVdIIlRIOUohdjZBgmRYSj0v/EABoBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQb/xAAyEQEBAQABBAICAQIEBQQDAAAAARECAxIhMQRBE1FhBXEiMoGRFVKx0fAUI6HhQsHx/9oADAMBAAIRAxEAPwD6og96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPekW4ltKluKCEJElSjAAqvttatLy4S1YebdpJgvMoJaT/AO/7J+QJPtQWMHvRB71nbvV71u8ugLeLNvale9JLiJn1AI3SDHXbHPFQvCd3eG4sLe9unSsWy0O2q0pSWlo2RPJMpVMk59qDXwe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvQTAkwBSgyJoEg96IPelooEg96IPeuN7eW1iyXr24at2hje6sJH41GttURdIeXbW12ttCZSotbA4eyd0E/Pj3oJ8HvRB71itS1XVX9MSEsbnFOJcYU0hSlKCXASFbfQCEgyAo7ulXnhm6Xci+33irxKXUlt0hIBQpCVCAkDuaC5g96IPelpCJFAQe9EHvSiigSD3og96WigSD3og96WigSD3og96WigSD3og96WigSD3og96CY5paBIPeiD3paKBIPeiD3paKAooooCiiigKKQmOhNLQFFFFAUUUUBRRRQFFFFAUUUUBRRRQFFFFAUUUUBRRSdaBaKKKAooooCiimLcS2lanCEISJKlGABQPorMOeJ1PXrrWmtIum2SFKWggoU2R9vzCQlMEKB54p+t6Nc32mXTi9QuXnSguMsIUENYyEkJgqB49RP0oLZerWKX3GE3CHbhtO5bLX6RYHulMms1c+Kn3mVrZYeaFu6pD6WYcWE5EztKEQCFSpQ4IipuiruLjT7ZkaPp40q6RM2zg2pSRPqbUkD2wTWeRbv2GrlgoTetLdcSRtK0g8gRCW0K2AghAUccZoNAEv3zCE3Wms6jdW7hQnz3UQgwFS4AnaFQR9gK+lQNERcuXBsLu8dYtlv3AbbsyEJJSqVJ3/b/WVEbfsmpOg2Ot2jDbbYabZc8x7e8sqWmUwhC0xkphOQelXTOiWY0xiyumkXSGzvKnUyVLMkqPuST99BntQZRfq+F0h15m5XdeW6lw+a2tLW0lS5zEBIwQZPzqwXo15e6urUHnRYXTTCWW3bbareTlRO4ZTwACJwa0LDLVuylq3bQ00kQlCEhKQPYCn0DWwpLaQtW5QABVESe8U6iigKKKKAooooCiiigKJzRXF95DDZcdUlDaRJUowBQdpFIFCsxdeJULUlGmMKuCoEhxXpRj3559qpNQ8S6my+ygutbVnaoNJkpV3z096xepxj1dP4fV6l9Y9C3CiRWKTfX50T45V05u83YQAIInmI5qJb+I9TD7iN7ZCcAOpjefaKfki8fhdTluWeHoMiaJrLWHihC0k3rJaSMl1B3JGeD1H3VomX232wtlSVoVwoGQa1LL6cOp0ufSuco70UgparmKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiuF7eW9iwXbt9phvgKdWEgntJoOygCIIkUilJQgqUQlIGSTAFZrTtdu9UKfJZDDLwLYdWkDynRykbiC5weEioviPSl2psrx15WpEPBpxN+qWfXhKtiRtEKjITOaC5vvEFq3pr91YKF95Uj9CZRIEkFf2R9TVKvX7y9uWfgxcIauEgsloJKAoSSFLWkAgp5CdxG3FT7+2vdR0y6t72xtbN1lsqt30OodQFQeNyJT7nbwcGsvasXT7NzYssLW5CBb3CQsqbBwlXmL9SkpIV+qExOTMUF3rLBvdNurxvS7Le9aFa75x3cEpKZ/R+ncY9wgV101bjzFxc6pd3bj9mhLpYSsMNwUBQICTJHI9RIkGu7OmandWarG+LFvZDymyhpRXvbSDuAMAjd6RmcT86uLnSrC6uEP3NnbuvIACVLQFEAcc9qDOWFu87q9q9ozk2Nqwn9DciUp8wJO1CgJCgkAmdwz0mpuiaJcWjq7sXCrRy5eU8/aISlTRB4HEgxEkHJmtFRQFFFFAUUUUBRRRQFFFFAUUUUBRRRQEZoiiigaDNOo6UUBRRRQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffSffSzSEZFAffS/fRNE0B99H30TRNAffR99E0x51DLanHlobbSJUpRgAe5oH/AH0ffUWw1C11BpbljcNvtpVsKmzImAefqKlTQRru/tLMxdXLLJjd+kWE4mOvvUD8+NvvOsWLLjj6WlOJDkNzHHpVC4JjITHvVH4vtX7TUPzspxa7fZ5aghEFlIEg7gpJgndPqAMpEGoenBy21XTXG21IHmKMBOxOwj1KP2BGQZ2GTHqM5CQ7qLd3pzT51V+5Wpbbt23bktpabOCj0ZRG6cqkwaXUtNbtF3tpbsbkthN7bJCEuKCZAdCAoEbsSCQcqqfZWN5cG6sm1so0NbqnEOoUFqeQvJQOQEhRUJ56COam6XoiGmAu+U67elryFOh9ZhPHoz6JgExGaDL6k5cBi4YQp1V+SWWmHHEuuqadACkK2mEqBBUBMQO0xsNEvV3ibj9A80w0tKGvNZU0ojaJkK7GRIxUm1sLS1baRb2zLaWiSiEj0k8me56nrUqaCDpFidOYdYDm9ourW2IjYlRnb9CTU2lmiaA++j76JomgPvo++iaJoD76PvomiaA++j76JomgPvo++iaJoD76T76Wa4XDvksuOEYSkn7hQR9T1FjTbRT9ysATCROVHoBWKvb4am6l15x0uoV6GEDciCDwJEkckntVdqN8rVXPiL4FbC0p8pp1IATJI/aOvaarb6/t9Mtm27Y+asGRwSFJMRu6iO3evPz6nu30+58X4GZJ553/AGT7i7DVok3D7bSXUEISlZGO6gRIECMHrVVceILVAcSw2tSXAJVHqSZGEkmIEYPNZ68uXLtYU6omAQAeg7V20ZFk7dJb1R51hpWA62AoJ9yO3yrx/n5crnF+h4f0zp9Lh39Xb/Ear+mb35uOzSmTbB2Cok/aiR/7veoVt4itlKbTcsnagHlIJUcwCegzyM1tmvCGnHwuvTk3SyytfxHxIieMH5RXlust6YxdlrSrh+6bThTrgACv82unVvV6cl5V4/gT4Xy+XLh0+Nl3+fX8tczceagfCOsupQkAoG4yDyUJGcCZknIqwsb9WnOeZbun4hSpcaUQE7QByOJIzI715xbXbtssKYWpCh0BwR7itPp99b6lbPC8UQpMqIERuJA7SBH7KdPr91/lPl/029GbfPF6xpOpMajbB1kkKGFIPKT2qwFeS2t07plyH9N3hIlS0p4eA4GefaK9UtHxcW7bqYIWkKx717eHPunl+a+X8X8F2eq7/fR99E0TW3kH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TUa+v7Wwa8y9uGWEHALiwmT2Hc0En76PvrnbvN3DDbzKgtpxIUlQ4IPBp8mghXGrWNuoocuUF0EjyketwkcgJTJJ+QqqvtfLmnLfsiGGkvpYcuHdqg0Dgq2hWIkYVETJFZzULN7Tb96Line truncated
<div class="licenseBox"><a href="javascript:;">×</a><div class="licenseRim"><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAI4AyADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAAAAECBAUGAwcI/8QAVhAAAQMDAwIEAwMIAwwIBQIHAQIDEQAEIQUSMUFRBhMiYRRxgTKRoQcVI0KxwdHwFlLhJDM0NWJyc5KTsrPxCDZDU1RVdIIlRIOUohdjZBgmRYSj0v/EABoBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQb/xAAyEQEBAQABBAICAQIEBQQDAAAAARECAxIhMQRBE1FhBXEiMoGRFVKx0fAUI6HhQsHx/9oADAMBAAIRAxEAPwD6og96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPekW4ltKluKCEJElSjAAqvttatLy4S1YebdpJgvMoJaT/AO/7J+QJPtQWMHvRB71nbvV71u8ugLeLNvale9JLiJn1AI3SDHXbHPFQvCd3eG4sLe9unSsWy0O2q0pSWlo2RPJMpVMk59qDXwe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvQTAkwBSgyJoEg96IPelooEg96IPeuN7eW1iyXr24at2hje6sJH41GttURdIeXbW12ttCZSotbA4eyd0E/Pj3oJ8HvRB71itS1XVX9MSEsbnFOJcYU0hSlKCXASFbfQCEgyAo7ulXnhm6Xci+33irxKXUlt0hIBQpCVCAkDuaC5g96IPelpCJFAQe9EHvSiigSD3og96WigSD3og96WigSD3og96WigSD3og96WigSD3og96CY5paBIPeiD3paKBIPeiD3paKAooooCiiigKKQmOhNLQFFFFAUUUUBRRRQFFFFAUUUUBRRRQFFFFAUUUUBRRSdaBaKKKAooooCiimLcS2lanCEISJKlGABQPorMOeJ1PXrrWmtIum2SFKWggoU2R9vzCQlMEKB54p+t6Nc32mXTi9QuXnSguMsIUENYyEkJgqB49RP0oLZerWKX3GE3CHbhtO5bLX6RYHulMms1c+Kn3mVrZYeaFu6pD6WYcWE5EztKEQCFSpQ4IipuiruLjT7ZkaPp40q6RM2zg2pSRPqbUkD2wTWeRbv2GrlgoTetLdcSRtK0g8gRCW0K2AghAUccZoNAEv3zCE3Wms6jdW7hQnz3UQgwFS4AnaFQR9gK+lQNERcuXBsLu8dYtlv3AbbsyEJJSqVJ3/b/WVEbfsmpOg2Ot2jDbbYabZc8x7e8sqWmUwhC0xkphOQelXTOiWY0xiyumkXSGzvKnUyVLMkqPuST99BntQZRfq+F0h15m5XdeW6lw+a2tLW0lS5zEBIwQZPzqwXo15e6urUHnRYXTTCWW3bbareTlRO4ZTwACJwa0LDLVuylq3bQ00kQlCEhKQPYCn0DWwpLaQtW5QABVESe8U6iigKKKKAooooCiiigKJzRXF95DDZcdUlDaRJUowBQdpFIFCsxdeJULUlGmMKuCoEhxXpRj3559qpNQ8S6my+ygutbVnaoNJkpV3z096xepxj1dP4fV6l9Y9C3CiRWKTfX50T45V05u83YQAIInmI5qJb+I9TD7iN7ZCcAOpjefaKfki8fhdTluWeHoMiaJrLWHihC0k3rJaSMl1B3JGeD1H3VomX232wtlSVoVwoGQa1LL6cOp0ufSuco70UgparmKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiuF7eW9iwXbt9phvgKdWEgntJoOygCIIkUilJQgqUQlIGSTAFZrTtdu9UKfJZDDLwLYdWkDynRykbiC5weEioviPSl2psrx15WpEPBpxN+qWfXhKtiRtEKjITOaC5vvEFq3pr91YKF95Uj9CZRIEkFf2R9TVKvX7y9uWfgxcIauEgsloJKAoSSFLWkAgp5CdxG3FT7+2vdR0y6t72xtbN1lsqt30OodQFQeNyJT7nbwcGsvasXT7NzYssLW5CBb3CQsqbBwlXmL9SkpIV+qExOTMUF3rLBvdNurxvS7Le9aFa75x3cEpKZ/R+ncY9wgV101bjzFxc6pd3bj9mhLpYSsMNwUBQICTJHI9RIkGu7OmandWarG+LFvZDymyhpRXvbSDuAMAjd6RmcT86uLnSrC6uEP3NnbuvIACVLQFEAcc9qDOWFu87q9q9ozk2Nqwn9DciUp8wJO1CgJCgkAmdwz0mpuiaJcWjq7sXCrRy5eU8/aISlTRB4HEgxEkHJmtFRQFFFFAUUUUBRRRQFFFFAUUUUBRRRQEZoiiigaDNOo6UUBRRRQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffSffSzSEZFAffS/fRNE0B99H30TRNAffR99E0x51DLanHlobbSJUpRgAe5oH/AH0ffUWw1C11BpbljcNvtpVsKmzImAefqKlTQRru/tLMxdXLLJjd+kWE4mOvvUD8+NvvOsWLLjj6WlOJDkNzHHpVC4JjITHvVH4vtX7TUPzspxa7fZ5aghEFlIEg7gpJgndPqAMpEGoenBy21XTXG21IHmKMBOxOwj1KP2BGQZ2GTHqM5CQ7qLd3pzT51V+5Wpbbt23bktpabOCj0ZRG6cqkwaXUtNbtF3tpbsbkthN7bJCEuKCZAdCAoEbsSCQcqqfZWN5cG6sm1so0NbqnEOoUFqeQvJQOQEhRUJ56COam6XoiGmAu+U67elryFOh9ZhPHoz6JgExGaDL6k5cBi4YQp1V+SWWmHHEuuqadACkK2mEqBBUBMQO0xsNEvV3ibj9A80w0tKGvNZU0ojaJkK7GRIxUm1sLS1baRb2zLaWiSiEj0k8me56nrUqaCDpFidOYdYDm9ourW2IjYlRnb9CTU2lmiaA++j76JomgPvo++iaJoD76PvomiaA++j76JomgPvo++iaJoD76T76Wa4XDvksuOEYSkn7hQR9T1FjTbRT9ysATCROVHoBWKvb4am6l15x0uoV6GEDciCDwJEkckntVdqN8rVXPiL4FbC0p8pp1IATJI/aOvaarb6/t9Mtm27Y+asGRwSFJMRu6iO3evPz6nu30+58X4GZJ553/AGT7i7DVok3D7bSXUEISlZGO6gRIECMHrVVceILVAcSw2tSXAJVHqSZGEkmIEYPNZ68uXLtYU6omAQAeg7V20ZFk7dJb1R51hpWA62AoJ9yO3yrx/n5crnF+h4f0zp9Lh39Xb/Ear+mb35uOzSmTbB2Cok/aiR/7veoVt4itlKbTcsnagHlIJUcwCegzyM1tmvCGnHwuvTk3SyytfxHxIieMH5RXlust6YxdlrSrh+6bThTrgACv82unVvV6cl5V4/gT4Xy+XLh0+Nl3+fX8tczceagfCOsupQkAoG4yDyUJGcCZknIqwsb9WnOeZbun4hSpcaUQE7QByOJIzI715xbXbtssKYWpCh0BwR7itPp99b6lbPC8UQpMqIERuJA7SBH7KdPr91/lPl/029GbfPF6xpOpMajbB1kkKGFIPKT2qwFeS2t07plyH9N3hIlS0p4eA4GefaK9UtHxcW7bqYIWkKx717eHPunl+a+X8X8F2eq7/fR99E0TW3kH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TUa+v7Wwa8y9uGWEHALiwmT2Hc0En76PvrnbvN3DDbzKgtpxIUlQ4IPBp8mghXGrWNuoocuUF0EjyketwkcgJTJJ+QqqvtfLmnLfsiGGkvpYcuHdqg0Dgq2hWIkYVETJFZzULN7Tb96Line truncated
-15
View File
@@ -1,15 +0,0 @@
{
"scripts": [],
"links": [
"./招商加盟_files/ceccbootstrap.min.css,global.css",
"./招商加盟_files/site.css",
"./招商加盟_files/join_9f56fcbaf59dae769305331e9a70b495.min.css",
"./招商加盟_files/18609477787948809dba96f603809665.css",
"./招商加盟_files/08f89a44fe3740fb928b292eecbf4152.css",
"./招商加盟_files/9469677399bd48a4a97b4b10685b47fe.css",
"./招商加盟_files/7bb9245c0b2f443882b8248b7faba098.css",
"./招商加盟_files/a542852518db4913ba26b2cb5f622c2a.css",
"./招商加盟_files/abe57529cab54a19b6da0041db3fb122.css",
"./招商加盟_files/6f7215910b184bd6873d42388538e76c.css"
]
}
@@ -1,43 +0,0 @@
window.env = 'product';
window.tenant={"bossProductInstance":"NEW2024022811514060793","cdnFlag":"0","cusId":"1414666","domainStatus":10,"flag":1,"foreign":true,"language":"zh_CN","domain":"www.haihofoods.com","makeDomain":"2402285024.p.make.dcloud.portal1.portal.thefastmake.com","mobileMakeDomain":"2402285024.m.make.dcloud.portal1.portal.thefastmake.com","mobileProductDomain":"2402285024.m.oper.dcloud.portal1.portal.fastoper.com","mobilePublishTime":1765874462000,"mobileStatus":8,"ningkerDomain":"FOREIGN_TRADE","pcPublishTime":1765874462000,"productDomain":"2402285024.p.oper.dcloud.portal1.portal.fastoper.com","siteType":"oper","status":6,"tenantId":355435,"unittype":"portal-saas","viewType":"p","code":"2402285024","productGroupId":"PG2024022811514093430","productVersion":"20240101"};
window.pageObj={"instanceId":"new2024022811514060793","pageId":"b6a6f1ae-75ae-4766-b0c1-cc4d407fa592","name":"招商加盟","filename":"join","pageAddress":null,"appId":"60007","pageMotherSetIdList":["footer","head"],"pageMotherSetList":[{"instanceId":"new2024022811514060793","motherSetId":"footer","motherSetName":"默认底部","motherViewType":null,"motherOperStatus":null,"motherSetImageUrl":"/productimg/mother/p/footer.png","motherSetDel":1,"motherSetLocation":1,"pageIds":null,"createTime":1655459795000,"updateTime":1655459795000,"version":0},{"instanceId":"new2024022811514060793","motherSetId":"head","motherSetName":"默认头部","motherViewType":null,"motherOperStatus":null,"motherSetImageUrl":"/productimg/mother/p/head.png","motherSetDel":1,"motherSetLocation":0,"pageIds":null,"createTime":1655459795000,"updateTime":1655459795000,"version":0}],"children":null,"batchCacheTPageList":null,"pageType":"1","contentType":"18515","viewType":null,"imageUrl":null,"previewImg":null,"showOrder":8,"parentId":"0","bindId":null,"operStatus":"BUSINESS","del":0,"pageTypeName":null,"isHomePage":0,"isLoginPage":0,"isRegisterPage":null,"isDeafault":0,"isLoginCheck":null,"isSpecialPage":0,"isErrorPage":0,"isPermissionPage":null,"isShopPage":0,"isNavigation":null,"isFlowpage":0,"createTime":1734487384000,"updateTime":1734487384000,"renderInfo":{"host":"2402285024.p.oper.dcloud.portal1.portal.fastoper.com","realhost":"2402285024.p.oper.dcloud.portal1.portal.fastoper.com"}};
/*__INLINE_SPLIT__*/
setTimeout(function(){$(".loadingBox").addClass("loadingOut");},3000);
/*__INLINE_SPLIT__*/
$(function () {
var urlName = window.location.pathname;
$('.e_container-1 .p_list .p_loopitem .s_title a').each(function () {
var urlHref = $(this).attr('href');
if (urlName.indexOf(urlHref) >= 0) {
$(this).addClass('on');
$(this).parent().parent("div").addClass('active');
}
});
if ($(window).width() < 769) {
if ($('.e_container-1 .p_list .p_loopitem.active').length > 0) {
var left = $('.e_container-1 .p_list .p_loopitem.active').offset().left;
console.log(left)
console.log($(window).width() / 2)
if (left > ($(window).width() / 2)) {
$(".e_container-1 .p_list").scrollLeft(left / 2);
}
}
}
});
$(function () {
$('.e_bottomNav-47 .p_level1Box .p_level1Item').find('.p_level2Box').parents('.p_level1Item').addClass('open');
});
$(() => {
$("saf-loopitem.backTop").click(function() {
$("body, html").stop().animate({
"scrollTop": 0
});
});
});
$("img").attr("alt","闽鑫食品");
$("img").attr("title","闽鑫食品");
File diff suppressed because it is too large. Load diff
-15
View File
@@ -1,15 +0,0 @@
{
"scripts": [],
"links": [
"./华阳动态_files/ceccbootstrap.min.css,global.css",
"./华阳动态_files/site.css",
"./华阳动态_files/news_11fadb52bdf2a5b053815537090f69f3.min.css",
"./华阳动态_files/18609477787948809dba96f603809665.css",
"./华阳动态_files/08f89a44fe3740fb928b292eecbf4152.css",
"./华阳动态_files/9469677399bd48a4a97b4b10685b47fe.css",
"./华阳动态_files/7bb9245c0b2f443882b8248b7faba098.css",
"./华阳动态_files/a542852518db4913ba26b2cb5f622c2a.css",
"./华阳动态_files/abe57529cab54a19b6da0041db3fb122.css",
"./华阳动态_files/6f7215910b184bd6873d42388538e76c.css"
]
}
@@ -1,43 +0,0 @@
window.env = 'product';
window.tenant={"bossProductInstance":"NEW2024022811514060793","cdnFlag":"0","cusId":"1414666","domainStatus":10,"flag":1,"foreign":true,"language":"zh_CN","domain":"www.haihofoods.com","makeDomain":"2402285024.p.make.dcloud.portal1.portal.thefastmake.com","mobileMakeDomain":"2402285024.m.make.dcloud.portal1.portal.thefastmake.com","mobileProductDomain":"2402285024.m.oper.dcloud.portal1.portal.fastoper.com","mobilePublishTime":1765874462000,"mobileStatus":8,"ningkerDomain":"FOREIGN_TRADE","pcPublishTime":1765874462000,"productDomain":"2402285024.p.oper.dcloud.portal1.portal.fastoper.com","siteType":"oper","status":6,"tenantId":355435,"unittype":"portal-saas","viewType":"p","code":"2402285024","productGroupId":"PG2024022811514093430","productVersion":"20240101"};
window.pageObj={"instanceId":"new2024022811514060793","pageId":"34ece8a7-edcf-4657-b195-6ba54e976249","name":"新闻动态","filename":"news","pageAddress":null,"appId":"60003","pageMotherSetIdList":["footer","head"],"pageMotherSetList":[{"instanceId":"new2024022811514060793","motherSetId":"footer","motherSetName":"默认底部","motherViewType":null,"motherOperStatus":null,"motherSetImageUrl":"/productimg/mother/p/footer.png","motherSetDel":1,"motherSetLocation":1,"pageIds":null,"createTime":1655459795000,"updateTime":1655459795000,"version":0},{"instanceId":"new2024022811514060793","motherSetId":"head","motherSetName":"默认头部","motherViewType":null,"motherOperStatus":null,"motherSetImageUrl":"/productimg/mother/p/head.png","motherSetDel":1,"motherSetLocation":0,"pageIds":null,"createTime":1655459795000,"updateTime":1655459795000,"version":0}],"children":null,"batchCacheTPageList":null,"pageType":"2","contentType":"972205","viewType":null,"imageUrl":null,"previewImg":null,"showOrder":2,"parentId":"0","bindId":null,"operStatus":"BUSINESS","del":0,"pageTypeName":null,"isHomePage":0,"isLoginPage":0,"isRegisterPage":null,"isDeafault":0,"isLoginCheck":null,"isSpecialPage":0,"isErrorPage":0,"isPermissionPage":null,"isShopPage":0,"isNavigation":null,"isFlowpage":0,"createTime":1734487384000,"updateTime":1734487384000,"_detailId":"1775059412908568576","renderInfo":{"host":"2402285024.p.oper.dcloud.portal1.portal.fastoper.com","realhost":"2402285024.p.oper.dcloud.portal1.portal.fastoper.com"}};
/*__INLINE_SPLIT__*/
setTimeout(function(){$(".loadingBox").addClass("loadingOut");},3000);
/*__INLINE_SPLIT__*/
$(function () {
var urlName = window.location.pathname;
$('.e_container-1 .p_list .p_loopitem .s_title a').each(function () {
var urlHref = $(this).attr('href');
if (urlName.indexOf(urlHref) >= 0) {
$(this).addClass('on');
$(this).parent().parent("div").addClass('active');
}
});
if ($(window).width() < 769) {
if ($('.e_container-1 .p_list .p_loopitem.active').length > 0) {
var left = $('.e_container-1 .p_list .p_loopitem.active').offset().left;
console.log(left)
console.log($(window).width() / 2)
if (left > ($(window).width() / 2)) {
$(".e_container-1 .p_list").scrollLeft(left / 2);
}
}
}
});
$(function () {
$('.e_bottomNav-47 .p_level1Box .p_level1Item').find('.p_level2Box').parents('.p_level1Item').addClass('open');
});
$(() => {
$("saf-loopitem.backTop").click(function() {
$("body, html").stop().animate({
"scrollTop": 0
});
});
});
$("img").attr("alt","闽鑫食品");
$("img").attr("title","闽鑫食品");
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+163 -227
View File
@@ -2,21 +2,21 @@
<div id="c_grid-116273709439191"> <div class="p_gridbox signal s_tmpl">
<div id="content_box-116273709439191-0" class="d_gridCell_0 p_gridCell ND_empty"><div id="c_navigation_006_P_1060-17155922968550">
<div class="e_navigationA-12 header response-transition" needjs="false">
<div class="e_navigationA-12 header response-transition" needjs="false">
<script src="./品质技术_files/62206feb6282416cbdd5112d7d8f5fc7.js.下载"></script>
<link type="text/css" rel="stylesheet" href="./品质技术_files/18609477787948809dba96f603809665.css">
<script src="./品质技术_files/dee1fcbb4aab4f18b13948faf1d67e20.js.下载"></script>
<link type="text/css" rel="stylesheet" href="./品质技术_files/08f89a44fe3740fb928b292eecbf4152.css">
<div class="leftNav">
<div class="logorim"><a href="javascript:;">
<img src="./品质技术_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
<img src="./品质技术_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
</a>
<!--底-->
@@ -24,32 +24,32 @@
<div class="box">
<a href="javascript:;" class="active">
<svg t="1715309350939" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8064" width="200" height="200"><path d="M664.250054 368.541681c10.015098 0 19.892049 0.732687 29.67281 1.795902-26.647917-122.810047-159.358451-214.077703-310.826188-214.077703-169.353083 0-308.085774 114.232694-308.085774 259.274068 0 83.708494 46.165436 152.460344 123.281791 205.78483l-30.80868 91.730191 107.688651-53.455469c38.558178 7.53665 69.459978 15.308661 107.924012 15.308661 9.66308 0 19.230993-0.470721 28.752858-1.225921-6.025227-20.36584-9.521864-41.723264-9.521864-63.862493C402.328693 476.632491 517.908058 368.541681 664.250054 368.541681zM498.62897 285.87389c23.200398 0 38.557154 15.120372 38.557154 38.061874 0 22.846334-15.356756 38.156018-38.557154 38.156018-23.107277 0-46.260603-15.309684-46.260603-38.156018C452.368366 300.994262 475.522716 285.87389 498.62897 285.87389zM283.016307 362.090758c-23.107277 0-46.402843-15.309684-46.402843-38.156018 0-22.941502 23.295566-38.061874 46.402843-38.061874 23.081695 0 38.46301 15.120372 38.46301 38.061874C321.479317 346.782098 306.098002 362.090758 283.016307 362.090758zM945.448458 606.151333c0-121.888048-123.258255-221.236753-261.683954-221.236753-146.57838 0-262.015505 99.348706-262.015505 221.236753 0 122.06508 115.437126 221.200938 262.015505 221.200938 30.66644 0 61.617359-7.609305 92.423993-15.262612l84.513836 45.786813-23.178909-76.17082C899.379213 735.776599 945.448458 674.90216 945.448458 606.151333zM598.803483 567.994292c-15.332197 0-30.807656-15.096836-30.807656-30.501688 0-15.190981 15.47546-30.477129 30.807656-30.477129 23.295566 0 38.558178 15.286148 38.558178 30.477129C637.361661 552.897456 622.099049 567.994292 598.803483 567.994292zM768.25071 567.994292c-15.213493 0-30.594809-15.096836-30.594809-30.501688 0-15.190981 15.381315-30.477129 30.594809-30.477129 23.107277 0 38.558178 15.286148 38.558178 30.477129C806.808888 552.897456 791.357987 567.994292 768.25071 567.994292z" p-id="8065"></path></svg><p>微信公众号</p>
<!--底部弹出二维码-->
<div class="lang-ewm">
<img src="./品质技术_files/990a73b8-b155-4497-bd14-bb4471955bb2.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
<div class="box">
<a href="javascript:;" class="active">
<svg t="1715309293797" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6171" width="200" height="200"><path d="M774.30784 305.664h-74.9568c0-103.5264-83.92704-187.55584-187.35104-187.55584s-187.35104 84.02944-187.35104 187.55584h-74.9568c-41.20576 0-74.5472 33.77152-74.5472 75.03872L174.73536 830.8736a75.20256 75.20256 0 0 0 74.9568 75.03872h524.5952a75.20256 75.20256 0 0 0 74.9568-75.03872V380.7232a75.20256 75.20256 0 0 0-74.9568-75.03872zM512 193.1264a112.3328 112.3328 0 0 1 112.4352 112.5376H399.5648a112.3328 112.3328 0 0 1 112.4352-112.5376H512z m0 375.15264c-103.424 0-187.35104-84.02944-187.35104-187.5968h74.93632a112.3328 112.3328 0 0 0 112.4352 112.55808 112.3328 112.3328 0 0 0 112.39424-112.5376h74.9568c0 103.54688-83.94752 187.57632-187.37152 187.57632z" p-id="6172"></path></svg>
<p>华阳商城</p>
<div class="lang-ewm">
<img src="./品质技术_files/b5d1469c-e180-4082-bd49-f1908c4fcd70.png" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
</div>
</div>
@@ -68,21 +68,14 @@
<div class="tm"><a href="#"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<!--
<div class="jd"><a href="#"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<div class="it_o">
<a href="tel:4006-535-700" rel="nofollow">服务热线:4006-535-700</a>
</div>
<div class="user01">
<a href="javascript:;" target="_blank">
中
</a>
<a href="javascript:;" target="_blank">
| 英
</a>
<a href="javascript:;" target="_blank">
| 日
</a>
<span class="haiho-lang" data-lang="zh_cn" role="button" tabindex="0">中</span>
<span class="haiho-lang" data-lang="en_us" role="button" tabindex="0">| 英</span>
<span class="haiho-lang" data-lang="ja_jp" role="button" tabindex="0">| 日</span>
</div>
</div>
<ul class="p_level1Box">
@@ -92,128 +85,116 @@
</div>
-->
<div class="navitem">
<li class="p_level1Item s_templatesum actived">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>网站首页</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>关于我们</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>产品中心</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>华阳文化</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>华阳动态</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>招商加盟</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
</li><li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="_blank">
<span>华阳商城</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>联系方式</span>
</a>
</p>
</li>
</div>
<div class="navimgbox">
<div class="imgitem actived" style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./品质技术_files/06cd51aa-048e-43f0-a8fd-a553842b34aa.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./品质技术_files/86b45b9a-c1ec-4b9d-8d16-50b71df3f87d.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./品质技术_files/13c80529-c446-4850-affb-408badf8209c.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./品质技术_files/c8fdaa92-cc60-43bd-ae81-dde0780d8b55.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./品质技术_files/7a062633-43d7-4cf7-9d97-d491afb96f50.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./品质技术_files/76bd053f-e42a-4557-b9fa-a5706a1d6725.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./品质技术_files/no-img.svg" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./品质技术_files/no-img.svg" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./品质技术_files/eab93efc-3954-4d4e-b469-4d8e59016a71.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
</div>
</ul>
</div>
@@ -238,7 +219,7 @@
<script src="./品质技术_files/e295f1b358804f888db5f876ee956a23.js.下载"></script>
<div class="e_html-16 s_list">
</div>
<link type="text/css" rel="stylesheet" href="./品质技术_files/9469677399bd48a4a97b4b10685b47fe.css">
@@ -259,8 +240,8 @@
<div class="logoBox">
<div class="logocai">
<!-- nLazyImage 'portal-saas/pg2024022811514093430/cms/image/cc37821e-0aa0-4c76-bb25-316efafe8b1b.png' '' true}}}
</div>
<div class="name cntitle">
<span>华</span><span>味</span><span>坊</span><span>食</span><span>品</span>
@@ -289,7 +270,7 @@
<div class="swiper-wrapper p_swiperContainer" id="swiper-wrapper-be397ce36ffbf0de" aria-live="polite" style="transform: translate3d(-1768px, 0px, 0px); transition: all;"><div class="swiper-slide p_slide swiper-slide-duplicate swiper-slide-duplicate-active swiper-slide-prev" data-swiper-slide-index="0" role="group" aria-label="1 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./品质技术_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -305,7 +286,7 @@
<div class="swiper-slide p_slide swiper-slide-active swiper-slide-duplicate-next swiper-slide-duplicate-prev" data-swiper-slide-index="0" role="group" aria-label="2 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./品质技术_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info anim">
@@ -321,7 +302,7 @@
<div class="swiper-slide p_slide swiper-slide-duplicate swiper-slide-duplicate-active swiper-slide-next" data-swiper-slide-index="0" role="group" aria-label="3 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./品质技术_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -367,9 +348,9 @@
</p></div>
</div>
<div class="p_page">
</div>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;企业概况-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:6,&quot;query&quot;:[{&quot;valueName&quot;:&quot;关于我们&quot;,&quot;dataType&quot;:&quot;array[category]&quot;,&quot;operator&quot;:&quot;in&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;DETAIL_ES.es_multi_category_01Sy2jv4&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;category_01Sy2jv4&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;2661&quot;,&quot;fieldType&quot;:&quot;array&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;text_r4O05cao,categoryName&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;60007&quot;,&quot;sourceUuid&quot;:&quot;1441959640303796224&quot;,&quot;pageParams&quot;:[],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list?cate=0&quot;,&quot;id&quot;:&quot;datasource10&quot;,&quot;apiId&quot;:&quot;18515&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list?cate=0|{\&quot;size\&quot;:6,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;关于我们\&quot;,\&quot;dataType\&quot;:\&quot;array[category]\&quot;,\&quot;operator\&quot;:\&quot;in\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;DETAIL_ES.es_multi_category_01Sy2jv4\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;category_01Sy2jv4\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;2661\&quot;,\&quot;fieldType\&quot;:\&quot;array\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_r4O05cao,categoryName\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_r4O05cao,categoryName\&quot;}&quot;}">
@@ -435,16 +416,16 @@
</div><div class="e_container-18 s_layout">
<div class="cbox-18-0 p_item"><div class="e_container-19 s_layout">
<div class="cbox-19-0 p_item"><div class="e_image-20 s_img">
<img src="./品质技术_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div>
<div class="cbox-18-1 p_item"><div class="e_container-21 s_layout">
<div class="cbox-21-0 p_item"><div class="e_image-22 s_img">
<img src="./品质技术_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div>
</div></div>
@@ -470,9 +451,9 @@
<div class="swiper-wrapper p_swiperContainer" id="swiper-wrapper-bffba8202f2e8ede" aria-live="off" style="transform: translate3d(-2600px, 0px, 0px); transition: 600ms;"><div class="swiper-slide p_slide swiper-slide-duplicate swiper-slide-duplicate-next" data-swiper-slide-index="4" role="group" aria-label="1 / 7" style="width: 650px;">
<div class="p_img">
<a href="javascript:;">
<img src="./品质技术_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -504,9 +485,9 @@
<div class="swiper-slide p_slide" data-swiper-slide-index="1" role="group" aria-label="3 / 7" style="width: 650px;">
<div class="p_img">
<a href="javascript:;">
<img src="./品质技术_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -522,9 +503,9 @@
<div class="swiper-slide p_slide swiper-slide-prev" data-swiper-slide-index="2" role="group" aria-label="4 / 7" style="width: 650px;">
<div class="p_img">
<a href="javascript:;">
<img src="./品质技术_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info anim">
@@ -540,9 +521,9 @@
<div class="swiper-slide p_slide swiper-slide-active" data-swiper-slide-index="3" role="group" aria-label="5 / 7" style="width: 650px;">
<div class="p_img">
<a href="javascript:;">
<img src="./品质技术_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -558,9 +539,9 @@
<div class="swiper-slide p_slide swiper-slide-next" data-swiper-slide-index="4" role="group" aria-label="6 / 7" style="width: 650px;">
<div class="p_img">
<a href="javascript:;">
<img src="./品质技术_files/s.png" lazy="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -602,7 +583,7 @@
<div class="e_loop-16 s_list" needjs="true">
<div class="">
<div class="p_list">
<div class="cbox-16 p_loopitem fancyboxHz fancyboxHzA"><div class="e_container-17 s_layout">
<div class="cbox-17-0 p_item"><div class="e_image-18 s_img fancyImg">
@@ -642,11 +623,11 @@
</div></div>
</div>
<div class="p_page">
</div>
</div>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;产品-产品列表&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:4,&quot;query&quot;:[{&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;category.id&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;categoryId&quot;,&quot;valueName&quot;:&quot;Employee Training&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;dataType&quot;:&quot;string&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;1039850210188673024&quot;,&quot;operator&quot;:&quot;eq&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/product/datasource/143150160001/product/list/param/value&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;143150160001&quot;,&quot;sourceUuid&quot;:&quot;d2f12f858d9f46eeb5b049baa1dffc37&quot;,&quot;pageParams&quot;:[],&quot;metaUrl&quot;:&quot;/fwebapi/product/datasource/143150160001/product/list/meta&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/product/product/es/findPage?appId=143150160001&amp;templateId=product&quot;,&quot;id&quot;:&quot;datasource5&quot;,&quot;apiId&quot;:&quot;product&quot;,&quot;reqKey&quot;:&quot;/fwebapi/product/product/es/findPage?appId=143150160001&amp;templateId=product|{\&quot;size\&quot;:4,\&quot;query\&quot;:[{\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;category.id\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;categoryId\&quot;,\&quot;valueName\&quot;:\&quot;Employee Training\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;dataType\&quot;:\&quot;string\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;1039850210188673024\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;\&quot;}&quot;}">
<input type="hidden" name="view" value="Quality">
@@ -725,7 +706,7 @@
<div class="e_loop-55 s_list" needjs="true" saf-loop-swiper="" saf-sw-auto="true,5000" saf-sw-loop="true" saf-sw-between="40" saf-sw-num="2,2,2,1" saf-sw-type="fraction" saf-sw-speed="800">
<div class="">
<div class="p_list saf-swiper0">
<div class="swiper-container swiper-initialized swiper-horizontal swiper-pointer-events swiper-backface-hidden"><div class="swiper-wrapper" id="swiper-wrapper-ac81027b92e1054fdc" aria-live="off" style="transform: translate3d(-2880px, 0px, 0px); transition-duration: 0ms;"><div class="cbox-55 p_loopitem fancyboxHz fancyboxHzA swiper-slide swiper-slide-duplicate swiper-slide-duplicate-next" data-swiper-slide-index="3" style="flex: 0 0 auto; width: 680px; margin-right: 40px;" role="group" aria-label="4 / 5"><div class="e_container-56 s_layout">
<div class="cbox-56-0 p_item"><div class="e_image-57 s_img fancyImg">
@@ -800,21 +781,21 @@
</p></div>
</div></div>
</div></div></div><span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span></div>
<div class="saf-sBar"><div class="saf-s-Btn s_prev" tabindex="0" role="button" aria-label="Previous slide" aria-controls="swiper-wrapper-ac81027b92e1054fdc"><svg xmlns="http://www.w3.org/2000/svg" width="47.062" height="100" viewBox="0 0 47.062 100">
<path id="prev" d="M249.333,341.48l-44.3,44.538a7.842,7.842,0,0,1-11.247,0l-44.45-44.685c14.044,11.585,31.359,18.424,50.088,18.424a78.331,78.331,0,0,0,49.912-18.274Z" transform="translate(388.395 -149.333) rotate(90)"></path>
</svg></div><div class="saf-cn-pagination fraction swiper-pagination-fraction swiper-pagination-horizontal"><span class="swiper-pagination-current">3</span> / <span class="swiper-pagination-total">5</span></div><div class="saf-s-Btn s_next" tabindex="0" role="button" aria-label="Next slide" aria-controls="swiper-wrapper-ac81027b92e1054fdc"><svg xmlns="http://www.w3.org/2000/svg" width="47.062" height="100" viewBox="0 0 47.062 100">
<path id="next" d="M100,46.914,55.7,2.376a7.842,7.842,0,0,0-11.247,0L0,47.062C14.044,35.476,31.359,28.638,50.088,28.638A78.331,78.331,0,0,1,100,46.912Z" transform="translate(47.062) rotate(90)"></path>
</svg></div></div></div>
<div class="p_page">
</div>
</div>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;产品-产品列表&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:6,&quot;query&quot;:[{&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;category.id&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;categoryId&quot;,&quot;valueName&quot;:&quot;Equipment&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;dataType&quot;:&quot;string&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;1149732630500106240&quot;,&quot;operator&quot;:&quot;eq&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/product/datasource/143150160001/product/list/param/value&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;143150160001&quot;,&quot;sourceUuid&quot;:&quot;d2f12f858d9f46eeb5b049baa1dffc37&quot;,&quot;pageParams&quot;:[],&quot;metaUrl&quot;:&quot;/fwebapi/product/datasource/143150160001/product/list/meta&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/product/product/es/findPage?appId=143150160001&amp;templateId=product&quot;,&quot;id&quot;:&quot;datasource2&quot;,&quot;apiId&quot;:&quot;product&quot;,&quot;reqKey&quot;:&quot;/fwebapi/product/product/es/findPage?appId=143150160001&amp;templateId=product|{\&quot;size\&quot;:6,\&quot;query\&quot;:[{\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;category.id\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;categoryId\&quot;,\&quot;valueName\&quot;:\&quot;Equipment\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;dataType\&quot;:\&quot;string\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;1149732630500106240\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;\&quot;}&quot;}">
<input type="hidden" name="view" value="Quality">
@@ -845,7 +826,7 @@
<div class="cbox-95-0 p_item"><div class="e_input-99 s_form1 form-group" needjs="true">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="姓名">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -853,7 +834,7 @@
<div class="cbox-95-1 p_item"><div class="e_input-98 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="电话">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -861,17 +842,15 @@
<div class="cbox-95-2 p_item"><div class="e_input-97 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="需求信息">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
</div></div>
<div class="cbox-95-3 p_item"><a class="e_formBtn-96 s_button1 btn btn-primary" href="javascript:;" needjs="true">
<span>提交</span>
</a></div>
</div></div>
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
</form></div>
</div><div class="e_container-60 s_layout">
<div class="cbox-60-0 p_item"><div class="e_richText-81 s_title clearfix">
@@ -879,17 +858,17 @@
<p style="font-size:14px;line-height:24px">&nbsp;</p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:16px;"><strong><span style="font-size:14px;">服务热线:</span></strong></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="tel:4006-535-700" rel="nofollow"><span style="color:#FF0000;">4006-535-700</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">E-mail:</span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="mailto:haiho@haihofoods.com" rel="nofollow"><span style="color:#FF0000;">haiho@haihofoods.com</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">地址 : </span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">中国•烟台•芝罘岛东路51号</span></span></p>
</div></div>
<div class="cbox-60-1 p_item"></div>
@@ -902,7 +881,7 @@
<a href="javascript:;" target="">
<span>网站首页</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -922,7 +901,7 @@
<a href="javascript:;" target="">
<span>公司简介</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -932,7 +911,7 @@
<a href="javascript:;" target="">
<span>资质荣誉</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -942,7 +921,7 @@
<a href="javascript:;" target="">
<span>品质技术</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -952,7 +931,7 @@
<a href="javascript:;" target="">
<span>发展历程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -962,7 +941,7 @@
<a href="javascript:;" target="">
<span>店面展示</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -984,7 +963,7 @@
<a href="javascript:;" target="">
<span>礼盒系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -994,7 +973,7 @@
<a href="javascript:;" target="">
<span>华阳金标海参</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1004,7 +983,7 @@
<a href="javascript:;" target="">
<span>生鲜系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1014,7 +993,7 @@
<a href="javascript:;" target="">
<span>无骨系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1024,7 +1003,7 @@
<a href="javascript:;" target="">
<span>调味系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1034,7 +1013,7 @@
<a href="javascript:;" target="">
<span>裹粉系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1044,7 +1023,7 @@
<a href="javascript:;" target="">
<span>休闲即食系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1066,7 +1045,7 @@
<a href="javascript:;" target="">
<span>七道鲜文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1076,7 +1055,7 @@
<a href="javascript:;" target="">
<span>节庆文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1086,7 +1065,7 @@
<a href="javascript:;" target="">
<span>礼品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1096,7 +1075,7 @@
<a href="javascript:;" target="">
<span>企业文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1106,7 +1085,7 @@
<a href="javascript:;" target="">
<span>历史文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1116,7 +1095,7 @@
<a href="javascript:;" target="">
<span>产品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1126,7 +1105,7 @@
<a href="javascript:;" target="">
<span>...</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1148,7 +1127,7 @@
<a href="javascript:;" target="">
<span>华阳新闻</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1158,7 +1137,7 @@
<a href="javascript:;" target="">
<span>行业动态</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1168,61 +1147,18 @@
<a href="javascript:;" target="">
<span>媒体报道</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-5 open">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="javascript:;" target="">
<span>招商加盟</span>
</a>
<svg t="1625735163067" class="icon p_jtIcon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1486" width="200" height="200"><path d="M661.16183428 486.94732961L415.99871022 219.24359155c-13.37500289-14.59708438-35.98351032-15.54759219-50.51270128-2.24048272-14.59708438 13.37500289-15.54759219 35.98351032-2.24048272 50.51270127l223.09776396 243.60157549-222.89408371 244.28050967c-13.30710947 14.59708438-12.28870823 37.20559179 2.30837613 50.51270125 14.59708438 13.30710947 37.20559179 12.28870823 50.51270128-2.30837613l244.75576356-268.11109855c0.47525392-0.54314733 1.01840124-1.15418807 1.42576173-1.6973354 11.13452018-13.51078973 10.93083994-33.53934734-1.2899749-46.84645682z" p-id="1487"></path></svg>
</p>
<!-- 子集 -->
<ul class="mt-2 p_level2Box s_templatesum">
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟细则</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟流程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟资质</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-7">
</li><li class="pt-1 pb-1 p_level1Item saf-d-7">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="javascript:;" target="_blank">
<span>华阳商城</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -1232,14 +1168,14 @@
<a href="javascript:;" target="">
<span>联系方式</span>
</a>
</p>
<!-- 子集 -->
</li>
</ul>
<!-- 导航内容 结束 -->
</div>
</div>
@@ -1281,9 +1217,9 @@
<path id="slider" d="M246.848,168.96h-86a6.986,6.986,0,0,0-6.991,6.991v66.232a5.446,5.446,0,0,0,5.445,5.445h89.11a5.446,5.446,0,0,0,5.445-5.445V175.951A7,7,0,0,0,246.848,168.96Zm-18.275,6.785h8.485v8.485h-8.485Zm-14.96,0H222.1v8.485h-8.485Zm-14.96,0h8.485v8.485h-8.485Zm45.517,66.4H162.444v-50.4h81.724Zm-8.348,18.035H171.874a3.246,3.246,0,1,1,0-6.493h63.947a3.246,3.246,0,1,1,0,6.493Z" transform="translate(-153.856 -168.96)"></path>
</svg>
<a href="javascript:;" target="_self">
营业执照及SEO链接: 营业执照
</a>
</div><div class="e_container-41 s_layout">
<div class="cbox-41-0 p_item"><div class="e_richText-40 s_title clearfix saf-setItem">
@@ -1298,8 +1234,8 @@
<p style="text-align: center;"><span style="line-height:2;">您可以查看其他栏目或返回&nbsp;<a href="javascript:;"><span style="color:#FF0000;">首页</span></a></span></p>
</div>
</div></div>
</div></div>
</div>
@@ -1340,7 +1276,7 @@
</div><div class="e_html-31 s_list">
<h3>SVG图标库<span>请自行添加图标,用div包起来,并命名使用</span></h3>
<div class="saf-svgs">
<div class="search">
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="96.983" viewBox="0 0 100 96.983">
<path id="search" d="M93.962,95.944,77.127,79.11a45.789,45.789,0,1,1,4.77-5.235L98.965,90.942a3.537,3.537,0,1,1-5,5ZM7.079,45.825a38.7,38.7,0,1,0,38.7-38.7A38.7,38.7,0,0,0,7.079,45.825Z"></path>
@@ -1396,11 +1332,11 @@
<svg t="1683854973181" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20559" width="200" height="200"><path d="M713.5 599.9c-10.9-5.6-65.2-32.2-75.3-35.8-10.1-3.8-17.5-5.6-24.8 5.6-7.4 11.1-28.4 35.8-35 43.3-6.4 7.4-12.9 8.3-23.8 2.8-64.8-32.4-107.3-57.8-150-131.1-11.3-19.5 11.3-18.1 32.4-60.2 3.6-7.4 1.8-13.7-1-19.3-2.8-5.6-24.8-59.8-34-81.9-8.9-21.5-18.1-18.5-24.8-18.9-6.4-0.4-13.7-0.4-21.1-0.4-7.4 0-19.3 2.8-29.4 13.7-10.1 11.1-38.6 37.8-38.6 92s39.5 106.7 44.9 114.1c5.6 7.4 77.7 118.6 188.4 166.5 70 30.2 97.4 32.8 132.4 27.6 21.3-3.2 65.2-26.6 74.3-52.5 9.1-25.8 9.1-47.9 6.4-52.5-2.7-4.9-10.1-7.7-21-13z m211.7-261.5c-22.6-53.7-55-101.9-96.3-143.3-41.3-41.3-89.5-73.8-143.3-96.3C630.6 75.7 572.2 64 512 64h-2c-60.6 0.3-119.3 12.3-174.5 35.9-53.3 22.8-101.1 55.2-142 96.5-40.9 41.3-73 89.3-95.2 142.8-23 55.4-34.6 114.3-34.3 174.9 0.3 69.4 16.9 138.3 48 199.9v152c0 25.4 20.6 46 46 46h152.1c61.6 31.1 130.5 47.7 199.9 48h2.1c59.9 0 118-11.6 172.7-34.3 53.5-22.3 101.6-54.3 142.8-95.2 41.3-40.9 73.8-88.7 96.5-142 23.6-55.2 35.6-113.9 35.9-174.5 0.3-60.9-11.5-120-34.8-175.6z m-151.1 438C704 845.8 611 884 512 884h-1.7c-60.3-0.3-120.2-15.3-173.1-43.5l-8.4-4.5H188V695.2l-4.5-8.4C155.3 633.9 140.3 574 140 513.7c-0.4-99.7 37.7-193.3 107.6-263.8 69.8-70.5 163.1-109.5 262.8-109.9h1.7c50 0 98.5 9.7 144.2 28.9 44.6 18.7 84.6 45.6 119 80 34.3 34.3 61.3 74.4 80 119 19.4 46.2 29.1 95.2 28.9 145.8-0.6 99.6-39.7 192.9-110.1 262.7z" p-id="20560"></path></svg>
</div>
</div>
</div>
</div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<link type="text/css" rel="stylesheet" href="./品质技术_files/a542852518db4913ba26b2cb5f622c2a.css">
<link type="text/css" rel="stylesheet" href="./品质技术_files/abe57529cab54a19b6da0041db3fb122.css">
<link type="text/css" rel="stylesheet" href="./品质技术_files/6f7215910b184bd6873d42388538e76c.css">
@@ -1415,32 +1351,32 @@
<saf-online class="saf-online">
<div class="p_list">
<saf-loopitem class="cbox-1 saf-lineitem">
<a href="javascript:;">
<saf-icon><span><svg t="1734400707687" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2770" width="32" height="32"><path d="M336.64 848a58.666667 58.666667 0 0 1 3.562667 117.226667l-3.562667 0.106666a58.666667 58.666667 0 0 1-3.584-117.226666l3.584-0.106667zM165.290667 90.090667c13.973333 0 26.005333 10.453333 28.736 24.938666l24.64 130.090667h726.08c16.213333-0.021333 29.354667 13.845333 29.376 30.976 0 2.261333-0.234667 4.522667-0.704 6.741333L886.912 688.853333l0.021333-72.746666-0.192-4.842667a61.44 61.44 0 0 0-85.696-51.52l-3.498666 1.664-188.074667 96.149333-3.541333 1.962667a61.44 61.44 0 0 0-29.802667 48.661333l-0.128 4.053334v81.856H295.914667c-27.584 0-51.456-20.330667-57.322667-48.832L120.405333 182.890667a52.266667 52.266667 0 0 1-4.394666 0.213333H86.677333C62.357333 183.104 42.666667 162.282667 42.666667 136.597333c0-25.685333 19.690667-46.506667 44.010666-46.506666h78.613334z" fill="#666666" p-id="2771"></path><path d="M825.813333 597.333333l2.218667 0.170667a18.752 18.752 0 0 1 16.106667 16.384l0.128 2.218667V972.8H637.44l-2.346667-0.149333a18.773333 18.773333 0 0 1-15.786666-13.781334l-0.490667-2.496-0.149333-2.346666V712.256l0.192-2.602667a18.773333 18.773333 0 0 1 7.808-12.757333l2.24-1.344 188.053333-96.149333 2.154667-0.96a18.688 18.688 0 0 1 4.458666-1.002667L825.813333 597.333333zM704 853.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667z m-85.333333-85.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667zM937.813333 972.778667l2.346667-0.149334a18.773333 18.773333 0 0 0 16.277333-16.277333l0.149334-2.346667v-145.706666a18.773333 18.773333 0 0 0-6.954667-14.592l-1.984-1.408-56.32-34.602667a18.773333 18.773333 0 0 0-4.394667-1.984l-0.32-0.085333a18.773333 18.773333 0 0 0-23.744 15.701333l-0.149333 2.346667V972.8h75.093333z" fill="#666666" p-id="2772"></path></svg></span></saf-icon>
</a>
<!-- <p class="codeimg"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="二维码" title="二维码" la="la"/></p> -->
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="javascript:;"><span><svg height="78.564" viewBox="0 0 100 78.564" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M73.1,171.8h80a9.952,9.952,0,0,1,10,9.7l-49.983,27.437-49.971-27.4A9.9,9.9,0,0,1,73.1,171.8Zm-9.955,20.234L63.1,240.548a9.937,9.937,0,0,0,10,9.816h80a9.937,9.937,0,0,0,10-9.816V192.01l-48.8,26.153a2.511,2.511,0,0,1-2.393,0l-48.757-26.13Z" id="e-mail" transform="translate(-63.1 -171.8)"></path> </svg></span></a></saf-icon>
<p><a href="javascript:;">邮箱:haiho@haihofoods.com</a></p>
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="javascript:;"><span><svg height="100.001" viewBox="0 0 100 100.001" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M179.688,165.873a6.273,6.273,0,0,1,0,8.861l-4.431,4.431a21.371,21.371,0,0,1-12.8,5.929,31.058,31.058,0,0,1-3.9.24,43.582,43.582,0,0,1-12.237-1.918c-11.777-3.461-24.163-11.268-34.867-21.974s-18.513-23.089-21.975-34.867A39.857,39.857,0,0,1,87.8,110.439a21.371,21.371,0,0,1,5.929-12.8l4.431-4.431a6.273,6.273,0,0,1,8.861,0l19.5,19.5a6.274,6.274,0,0,1,0,8.862l-4.431,4.428c-2.507,2.507-.012,10.623,7.09,17.724s15.214,9.6,17.724,7.09l4.431-4.431a6.274,6.274,0,0,1,8.862,0Zm-32.233-45.448a5.019,5.019,0,0,1,5.013,5.013,2.507,2.507,0,0,0,5.013,0,10.037,10.037,0,0,0-10.026-10.026,2.507,2.507,0,0,0,0,5.013Zm36.952-10.6a40.074,40.074,0,0,0-36.952-24.494,2.507,2.507,0,0,0,0,5.013,35.134,35.134,0,0,1,35.092,35.092,2.507,2.507,0,1,0,5.013,0,39.848,39.848,0,0,0-3.153-15.611Zm-36.952-4.441a20.075,20.075,0,0,1,20.052,20.052,2.507,2.507,0,1,0,5.013,0,25.065,25.065,0,0,0-25.065-25.065,2.507,2.507,0,0,0,0,5.013Z" id="tel-1" transform="translate(-87.56 -85.333)"></path> </svg></span></a></saf-icon>
<p><a href="javascript:;">电话:4006-535-700</a></p>
</saf-loopitem>
<saf-loopitem class="saf-lineitem backTop"><saf-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="14.438" viewBox="0 0 20 14.438">
<path id="路径_804" data-name="路径 804" d="M216.687,81.683V98.356a1.66,1.66,0,0,1-2.774,1.24l-11-8.245a1.666,1.666,0,0,1-.329-2.327,1.459,1.459,0,0,1,.329-.329l11.119-8.34a1.66,1.66,0,0,1,2.321.335,1.62,1.62,0,0,1,.335.993h0Zm0,0" transform="translate(100.025 -202.249) rotate(90)"></path>
</svg></saf-icon></saf-loopitem>
</div>
<div class="p_page">
</div>
</saf-online>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;在线客服-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:20,&quot;query&quot;:[{&quot;valueName&quot;:&quot;&quot;,&quot;dataType&quot;:&quot;number&quot;,&quot;operator&quot;:&quot;eq&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;CID&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;CID&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;&quot;,&quot;fieldType&quot;:&quot;number&quot;,&quot;configurable&quot;:{&quot;sourceType&quot;:&quot;page&quot;,&quot;type&quot;:&quot;normal&quot;,&quot;value&quot;:&quot;_detailId&quot;}}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;TEXT_DETAIL_ES.es_text_rudao&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;rudao&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;125326&quot;,&quot;sourceUuid&quot;:&quot;1473112731287683072&quot;,&quot;pageParams&quot;:[{&quot;code&quot;:&quot;_detailId&quot;,&quot;name&quot;:&quot;默认参数&quot;}],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0&quot;,&quot;id&quot;:&quot;datasource1&quot;,&quot;apiId&quot;:&quot;407257&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\&quot;size\&quot;:20,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;\&quot;,\&quot;dataType\&quot;:\&quot;number\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;CID\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;CID\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;\&quot;,\&quot;fieldType\&quot;:\&quot;number\&quot;,\&quot;configurable\&quot;:{\&quot;sourceType\&quot;:\&quot;page\&quot;,\&quot;type\&quot;:\&quot;normal\&quot;,\&quot;value\&quot;:\&quot;_detailId\&quot;}}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;}&quot;}">
<input type="hidden" name="view" value="Quality">
+182 -246
View File
@@ -2,21 +2,21 @@
<div id="c_grid-116273709439191"> <div class="p_gridbox signal s_tmpl">
<div id="content_box-116273709439191-0" class="d_gridCell_0 p_gridCell ND_empty"><div id="c_navigation_006_P_1060-17155922968550">
<div class="e_navigationA-12 header response-transition" needjs="false">
<div class="e_navigationA-12 header response-transition" needjs="false">
<link type="text/css" rel="stylesheet" href="./全国门店-烟台华阳食品有限公司_files/18609477787948809dba96f603809665.css">
<link type="text/css" rel="stylesheet" href="./全国门店-烟台华阳食品有限公司_files/08f89a44fe3740fb928b292eecbf4152.css">
<div class="leftNav">
<div class="logorim"><a href="javascript:;">
<img src="./全国门店-烟台华阳食品有限公司_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
<img src="./全国门店-烟台华阳食品有限公司_files/05e55956-2463-4314-9f28-bdc4c160100d.png" alt="华阳食品" title="华阳食品" la="la">
</a>
<!--底-->
@@ -24,32 +24,32 @@
<div class="box">
<a href="javascript:;" class="active">
<svg t="1715309350939" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8064" width="200" height="200"><path d="M664.250054 368.541681c10.015098 0 19.892049 0.732687 29.67281 1.795902-26.647917-122.810047-159.358451-214.077703-310.826188-214.077703-169.353083 0-308.085774 114.232694-308.085774 259.274068 0 83.708494 46.165436 152.460344 123.281791 205.78483l-30.80868 91.730191 107.688651-53.455469c38.558178 7.53665 69.459978 15.308661 107.924012 15.308661 9.66308 0 19.230993-0.470721 28.752858-1.225921-6.025227-20.36584-9.521864-41.723264-9.521864-63.862493C402.328693 476.632491 517.908058 368.541681 664.250054 368.541681zM498.62897 285.87389c23.200398 0 38.557154 15.120372 38.557154 38.061874 0 22.846334-15.356756 38.156018-38.557154 38.156018-23.107277 0-46.260603-15.309684-46.260603-38.156018C452.368366 300.994262 475.522716 285.87389 498.62897 285.87389zM283.016307 362.090758c-23.107277 0-46.402843-15.309684-46.402843-38.156018 0-22.941502 23.295566-38.061874 46.402843-38.061874 23.081695 0 38.46301 15.120372 38.46301 38.061874C321.479317 346.782098 306.098002 362.090758 283.016307 362.090758zM945.448458 606.151333c0-121.888048-123.258255-221.236753-261.683954-221.236753-146.57838 0-262.015505 99.348706-262.015505 221.236753 0 122.06508 115.437126 221.200938 262.015505 221.200938 30.66644 0 61.617359-7.609305 92.423993-15.262612l84.513836 45.786813-23.178909-76.17082C899.379213 735.776599 945.448458 674.90216 945.448458 606.151333zM598.803483 567.994292c-15.332197 0-30.807656-15.096836-30.807656-30.501688 0-15.190981 15.47546-30.477129 30.807656-30.477129 23.295566 0 38.558178 15.286148 38.558178 30.477129C637.361661 552.897456 622.099049 567.994292 598.803483 567.994292zM768.25071 567.994292c-15.213493 0-30.594809-15.096836-30.594809-30.501688 0-15.190981 15.381315-30.477129 30.594809-30.477129 23.107277 0 38.558178 15.286148 38.558178 30.477129C806.808888 552.897456 791.357987 567.994292 768.25071 567.994292z" p-id="8065"></path></svg><p>微信公众号</p>
<!--底部弹出二维码-->
<div class="lang-ewm">
<img src="./全国门店-烟台华阳食品有限公司_files/990a73b8-b155-4497-bd14-bb4471955bb2.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
<div class="box">
<a href="javascript:;" class="active">
<svg t="1715309293797" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6171" width="200" height="200"><path d="M774.30784 305.664h-74.9568c0-103.5264-83.92704-187.55584-187.35104-187.55584s-187.35104 84.02944-187.35104 187.55584h-74.9568c-41.20576 0-74.5472 33.77152-74.5472 75.03872L174.73536 830.8736a75.20256 75.20256 0 0 0 74.9568 75.03872h524.5952a75.20256 75.20256 0 0 0 74.9568-75.03872V380.7232a75.20256 75.20256 0 0 0-74.9568-75.03872zM512 193.1264a112.3328 112.3328 0 0 1 112.4352 112.5376H399.5648a112.3328 112.3328 0 0 1 112.4352-112.5376H512z m0 375.15264c-103.424 0-187.35104-84.02944-187.35104-187.5968h74.93632a112.3328 112.3328 0 0 0 112.4352 112.55808 112.3328 112.3328 0 0 0 112.39424-112.5376h74.9568c0 103.54688-83.94752 187.57632-187.37152 187.57632z" p-id="6172"></path></svg>
<p>华阳商城</p>
<div class="lang-ewm">
<img src="./全国门店-烟台华阳食品有限公司_files/b5d1469c-e180-4082-bd49-f1908c4fcd70.png" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</div>
</a>
</div>
</div>
</div>
@@ -68,21 +68,14 @@
<div class="tm"><a href="#"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<!--
<div class="jd"><a href="#"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="" title="" la="la" class="wd-20220820140856"/></a></div> -->
<div class="it_o">
<a href="tel:4006-535-700" rel="nofollow">服务热线:4006-535-700</a>
</div>
<div class="user01">
<a href="javascript:;" target="_blank">
中
</a>
<a href="javascript:;" target="_blank">
| 英
</a>
<a href="javascript:;" target="_blank">
| 日
</a>
<span class="haiho-lang" data-lang="zh_cn" role="button" tabindex="0">中</span>
<span class="haiho-lang" data-lang="en_us" role="button" tabindex="0">| 英</span>
<span class="haiho-lang" data-lang="ja_jp" role="button" tabindex="0">| 日</span>
</div>
</div>
<ul class="p_level1Box">
@@ -92,128 +85,116 @@
</div>
-->
<div class="navitem">
<li class="p_level1Item s_templatesum actived">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>网站首页</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>关于我们</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>产品中心</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>华阳文化</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>华阳动态</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>招商加盟</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
</li><li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="_blank">
<span>华阳商城</span>
</a>
</p>
</li>
<li class="p_level1Item s_templatesum ">
<p class="p_menuItem cntitle">
<a href="javascript:;" target="">
<span>联系方式</span>
</a>
</p>
</li>
</div>
<div class="navimgbox">
<div class="imgitem actived" style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./全国门店-烟台华阳食品有限公司_files/06cd51aa-048e-43f0-a8fd-a553842b34aa.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./全国门店-烟台华阳食品有限公司_files/86b45b9a-c1ec-4b9d-8d16-50b71df3f87d.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./全国门店-烟台华阳食品有限公司_files/13c80529-c446-4850-affb-408badf8209c.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./全国门店-烟台华阳食品有限公司_files/c8fdaa92-cc60-43bd-ae81-dde0780d8b55.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./全国门店-烟台华阳食品有限公司_files/7a062633-43d7-4cf7-9d97-d491afb96f50.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./全国门店-烟台华阳食品有限公司_files/76bd053f-e42a-4557-b9fa-a5706a1d6725.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./全国门店-烟台华阳食品有限公司_files/no-img.svg" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./全国门店-烟台华阳食品有限公司_files/no-img.svg" alt="华阳食品" title="华阳食品" la="la" errorsrc=""></div>
<div class="imgitem " style="background:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==") center no-repeat;background-size:cover;"><img src="./全国门店-烟台华阳食品有限公司_files/eab93efc-3954-4d4e-b469-4d8e59016a71.jpg" alt="华阳食品" title="华阳食品" la="la"></div>
</div>
</ul>
</div>
@@ -238,7 +219,7 @@
<div class="e_html-16 s_list">
</div>
<link type="text/css" rel="stylesheet" href="./全国门店-烟台华阳食品有限公司_files/9469677399bd48a4a97b4b10685b47fe.css">
@@ -259,8 +240,8 @@
<div class="logoBox">
<div class="logocai">
<!-- nLazyImage 'portal-saas/pg2024022811514093430/cms/image/cc37821e-0aa0-4c76-bb25-316efafe8b1b.png' '' true}}}
</div>
<div class="name cntitle">
<span>华</span><span>味</span><span>坊</span><span>食</span><span>品</span>
@@ -289,7 +270,7 @@
<div class="swiper-wrapper p_swiperContainer" id="swiper-wrapper-16b97d63e8cd23bd" aria-live="polite" style="transform: translate3d(-1768px, 0px, 0px); transition: all;"><div class="swiper-slide p_slide swiper-slide-duplicate swiper-slide-duplicate-active swiper-slide-prev" data-swiper-slide-index="0" role="group" aria-label="1 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./全国门店-烟台华阳食品有限公司_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -305,7 +286,7 @@
<div class="swiper-slide p_slide swiper-slide-active swiper-slide-duplicate-next swiper-slide-duplicate-prev" data-swiper-slide-index="0" role="group" aria-label="2 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./全国门店-烟台华阳食品有限公司_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info anim">
@@ -321,7 +302,7 @@
<div class="swiper-slide p_slide swiper-slide-duplicate swiper-slide-duplicate-active swiper-slide-next" data-swiper-slide-index="0" role="group" aria-label="3 / 3" style="width: 1768px;">
<div class="p_img">
<a href="javascript:;">
<img src="./全国门店-烟台华阳食品有限公司_files/b475b81f-4fc2-4a2f-83c0-f9f53bbbd9ff.jpg" alt="华阳食品" title="华阳食品" la="la">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="华阳食品" title="华阳食品" la="la">
</a>
</div>
<div class="p_info">
@@ -367,9 +348,9 @@
</p></div>
</div>
<div class="p_page">
</div>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;企业概况-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:6,&quot;query&quot;:[{&quot;valueName&quot;:&quot;关于我们&quot;,&quot;dataType&quot;:&quot;array[category]&quot;,&quot;operator&quot;:&quot;in&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;DETAIL_ES.es_multi_category_01Sy2jv4&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;category_01Sy2jv4&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;2661&quot;,&quot;fieldType&quot;:&quot;array&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;text_r4O05cao,categoryName&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;60007&quot;,&quot;sourceUuid&quot;:&quot;1441959640303796224&quot;,&quot;pageParams&quot;:[],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list?cate=0&quot;,&quot;id&quot;:&quot;datasource10&quot;,&quot;apiId&quot;:&quot;18515&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/60007/18515/list?cate=0|{\&quot;size\&quot;:6,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;关于我们\&quot;,\&quot;dataType\&quot;:\&quot;array[category]\&quot;,\&quot;operator\&quot;:\&quot;in\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;DETAIL_ES.es_multi_category_01Sy2jv4\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;category_01Sy2jv4\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;2661\&quot;,\&quot;fieldType\&quot;:\&quot;array\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_r4O05cao,categoryName\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;text_r4O05cao,categoryName\&quot;}&quot;}">
@@ -405,8 +386,8 @@
店面位置
</p></div>
</div><div class="e_loop-1 s_list" needjs="true" ds-id="" elem-id="e_loop-1" style="visibility: visible; opacity: 1; translate: none; rotate: none; scale: none; transform: translate(0px, 0px);">
<div class="areaBox">
<!-- 筛选按钮 -->
@@ -417,12 +398,12 @@
</div>
<div class="input select">
<select name="city" id="city">
<option value="">--请选择城市--</option></select>
</div>
<div class="input select">
<select name="area" id="area">
<option value="0">--请选择地区--</option></select>
</div>
<div class="input">
@@ -602,12 +583,12 @@
</div></div>
</div>
<div class="p_page">
</div>
</div>
<div class="rightBox">
<div id="map_canvas" class=" bmap-container" style="overflow: hidden; position: relative; background-image: url(&quot;http://webmap0.bdimg.com/image/api/bg.png&quot;); text-align: left; touch-action: none;"><div id="platform" style="overflow: visible; position: absolute; z-index: 5; left: 0px; top: 0px; cursor: url(&quot;http://webmap0.bdimg.com/image/api/openhand.cur&quot;) 8 8, default;"><div id="mask" class=" BMap_mask" style="position: absolute; left: 0px; top: 0px; z-index: 9; overflow: hidden; user-select: none; width: 980px; height: 500px; opacity: 0; background: rgb(0, 0, 0); transition: opacity 0.4s;"></div><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 200;"><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 800;"></div><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 700;"><div class="BMap_Marker BMap_noprint" unselectable="on" style="position: absolute; padding: 0px; margin: 0px; border: 0px; cursor: pointer; width: 36px; height: 36px; left: 472px; top: 220px; transform-origin: 18px 30px;"></div></div><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 600;"></div><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 500;"></div><div style="position: absolute; height: 0px; width: 0px; left: 0px; top: 0px; z-index: 400;"></div></div></div><div class="click-ripple-container"><div class="click-ripple"></div></div><div class=" anchorBL" style="position: absolute; z-index: 10; inset: auto auto 15px 5px;"><img src="./全国门店-烟台华阳食品有限公司_files/logo_hd.png" style="height:21px;width:62px;" alt="map" title="华阳食品"></div><div class=" BMap_noprint" style="top: 50%; left: 50%; display: none; padding: 24px; overflow: visible; position: absolute; width: 50%; max-width: 360px; transform: translate(-50%, -50%); z-index: 9999; background: rgb(255, 255, 255); user-select: none;"><div style="position: relative; width: 100%; height: 100%; color: rgb(0, 0, 0); font-size: 14px; word-break: break-all;"></div><span style="margin-top: 12px; margin-bottom: -12px; margin-left: calc(100% - 48px); width: 56px; height: 32px; font-size: 14px; text-align: center; line-height: 32px; display: block; cursor: pointer; background: rgb(56, 148, 255); border: 1px solid rgba(63, 81, 181, 0.23); color: rgb(255, 255, 255); border-radius: 3px;">确定</span></div><div class=" BMap_noprint anchorTR" style="display: none; padding: 10px 15px; overflow: visible; max-width: 360px; background: rgb(255, 248, 238); border-width: 3px; border-style: solid; border-color: rgb(226, 158, 50); position: absolute; z-index: 9999; inset: 40px 200px auto auto;"><div style="position: relative; width: 100%; height: 100%; color: rgb(226, 158, 50); font-size: 14px; font-weight: 500; word-break: break-all; line-height: 1.5;"></div></div><canvas width="980" height="500" style="position: absolute; left: 0px; top: 0px; width: 980px; height: 500px; z-index: 0;"></canvas><div class="BMap_stdMpZoom BMap_noprint anchorBR" style="box-shadow: rgba(107, 120, 137, 0.2) 0px 2px 6px 0px, rgba(91, 98, 107, 0.08) 0px 4px 10px 0px; background: rgb(255, 255, 255); position: absolute; z-index: 10; inset: auto 15px 20px auto;"><div class="BMap_button_new BMap_stdMpZoomIn"><div class="BMap_smcbg in" style="position: absolute"></div></div><div class="BMap_button_new BMap_stdMpZoomOut"><div class="BMap_smcbg out" style="position: absolute; top: 36px;"></div></div></div><div unselectable="on" class=" BMap_cpyCtrl anchorBL" style="cursor: default; white-space: nowrap; text-size-adjust: none; inset: auto auto 2px 2px; position: absolute; z-index: 10;"><span _cid="1" style="display: block;"><span style="background: rgba(255, 255, 255, 0.701961);padding: 0px 1px;line-height: 16px;display: inline;height: 16px;">©&nbsp;2026 Baidu - GS(2025)4125号 - 甲测资字11111342 - 京ICP证030173号 - Data © 百度智图</span></span></div><div style="position: absolute; display: none; pointer-events: none; z-index: 100; border: 1px solid rgb(170, 170, 170); background: rgb(255, 254, 194); white-space: nowrap; font: 12px Arial, sans-serif; padding: 2px 4px; box-shadow: rgb(102, 102, 102) 1px 2px 6px;"></div></div>
</div>
@@ -627,109 +608,109 @@
</p><div class="e_loop-11 s_list" needjs="true" ds-id="" elem-id="e_loop-11" saf-loop-swiper="" saf-sw-auto="true,3000" saf-sw-loop="true" saf-sw-between="30" saf-sw-num="4,3,2,2" saf-sw-type="fraction" saf-sw-speed="800">
<div class="">
<div class="p_list saf-swiper0">
<div class="swiper-container swiper-initialized swiper-horizontal swiper-pointer-events"><div class="swiper-wrapper" id="swiper-wrapper-1e8d5a54ef1a246b" aria-live="off" style="transform: translate3d(-2502.5px, 0px, 0px); transition-duration: 0ms;"><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-prev" data-swiper-slide-index="2" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="3 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/ea8cb4bf-1391-46be-b20d-2fc6f785d1ba.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-active" data-swiper-slide-index="3" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="4 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/66ee1525-0134-4626-b019-3c55ddbd7c9c.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-next" data-swiper-slide-index="4" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="5 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/151dfdaf-d6ab-4fb1-b4dd-eeb74c4ae3da.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate" data-swiper-slide-index="5" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="6 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/a18bd917-c7b1-4311-81e1-a7d6fb9ee88c.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide" data-swiper-slide-index="0" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="1 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/43839dea-7aa4-40db-84ae-7def7861bee3.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide" data-swiper-slide-index="1" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="2 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/38e30d18-5165-412a-b5c0-35c0bd9ce5cf.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-prev" data-swiper-slide-index="2" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="3 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/ea8cb4bf-1391-46be-b20d-2fc6f785d1ba.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-active" data-swiper-slide-index="3" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="4 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/66ee1525-0134-4626-b019-3c55ddbd7c9c.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-next" data-swiper-slide-index="4" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="5 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/151dfdaf-d6ab-4fb1-b4dd-eeb74c4ae3da.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide" data-swiper-slide-index="5" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="6 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/a18bd917-c7b1-4311-81e1-a7d6fb9ee88c.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate" data-swiper-slide-index="0" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="1 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/43839dea-7aa4-40db-84ae-7def7861bee3.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate" data-swiper-slide-index="1" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="2 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/38e30d18-5165-412a-b5c0-35c0bd9ce5cf.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-prev" data-swiper-slide-index="2" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="3 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/ea8cb4bf-1391-46be-b20d-2fc6f785d1ba.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div><div class="cbox-11 p_loopitem swiper-slide swiper-slide-duplicate swiper-slide-duplicate-active" data-swiper-slide-index="3" style="flex: 0 0 auto; width: 327.5px; margin-right: 30px;" role="group" aria-label="4 / 6"><div class="e_container-12 s_layout">
<div class="cbox-12-0 p_item"><div class="e_image-13 s_img">
<img src="./全国门店-烟台华阳食品有限公司_files/66ee1525-0134-4626-b019-3c55ddbd7c9c.jpg_366xaf.jpg" alt="华阳食品" title="华阳食品" la="la" needthumb="true">
</div></div>
</div></div></div><span class="swiper-notification" aria-live="assertive" aria-atomic="true"></span></div>
<div class="saf-sBar"><div class="saf-s-Btn s_prev" tabindex="0" role="button" aria-label="Previous slide" aria-controls="swiper-wrapper-1e8d5a54ef1a246b"><svg xmlns="http://www.w3.org/2000/svg" width="47.062" height="100" viewBox="0 0 47.062 100">
<path id="prev" d="M249.333,341.48l-44.3,44.538a7.842,7.842,0,0,1-11.247,0l-44.45-44.685c14.044,11.585,31.359,18.424,50.088,18.424a78.331,78.331,0,0,0,49.912-18.274Z" transform="translate(388.395 -149.333) rotate(90)"></path>
</svg></div><div class="saf-cn-pagination fraction swiper-pagination-fraction swiper-pagination-horizontal"><span class="swiper-pagination-current">4</span> / <span class="swiper-pagination-total">6</span></div><div class="saf-s-Btn s_next" tabindex="0" role="button" aria-label="Next slide" aria-controls="swiper-wrapper-1e8d5a54ef1a246b"><svg xmlns="http://www.w3.org/2000/svg" width="47.062" height="100" viewBox="0 0 47.062 100">
<path id="next" d="M100,46.914,55.7,2.376a7.842,7.842,0,0,0-11.247,0L0,47.062C14.044,35.476,31.359,28.638,50.088,28.638A78.331,78.331,0,0,1,100,46.912Z" transform="translate(47.062) rotate(90)"></path>
</svg></div></div></div>
<div class="p_page">
</div>
</div>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;产品-产品列表&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:20,&quot;query&quot;:[{&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;category.id&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;categoryId&quot;,&quot;valueName&quot;:&quot;店面展示&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;dataType&quot;:&quot;string&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;1224738912811503616&quot;,&quot;operator&quot;:&quot;eq&quot;}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/product/datasource/143150160001/product/list/param/value&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;appId&quot;:&quot;143150160001&quot;,&quot;sourceUuid&quot;:&quot;d2f12f858d9f46eeb5b049baa1dffc37&quot;,&quot;pageParams&quot;:[],&quot;metaUrl&quot;:&quot;/fwebapi/product/datasource/143150160001/product/list/meta&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/product/product/es/findPage?appId=143150160001&amp;templateId=product&quot;,&quot;id&quot;:&quot;datasource4&quot;,&quot;apiId&quot;:&quot;product&quot;,&quot;reqKey&quot;:&quot;/fwebapi/product/product/es/findPage?appId=143150160001&amp;templateId=product|{\&quot;size\&quot;:20,\&quot;query\&quot;:[{\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;category.id\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;categoryId\&quot;,\&quot;valueName\&quot;:\&quot;店面展示\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;dataType\&quot;:\&quot;string\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;1224738912811503616\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;\&quot;}&quot;}">
<input type="hidden" name="view" value="mendian">
@@ -756,7 +737,7 @@
<div class="cbox-95-0 p_item"><div class="e_input-99 s_form1 form-group" needjs="true">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="姓名">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-99" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -764,7 +745,7 @@
<div class="cbox-95-1 p_item"><div class="e_input-98 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="电话">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-98" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
@@ -772,17 +753,15 @@
<div class="cbox-95-2 p_item"><div class="e_input-97 s_form1 form-group" needjs="true" required="">
<div class="">
<div class="input-group">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="需求信息">
<input type="text" class="form-control s_form-control s_input p_input" name="e_input-97" placeholder="">
<div class="invalid-feedback"></div>
</div>
</div>
</div></div>
<div class="cbox-95-3 p_item"><a class="e_formBtn-96 s_button1 btn btn-primary" href="javascript:;" needjs="true">
<span>提交</span>
</a></div>
</div></div>
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
<input name="i18nJson" type="hidden" value="{&quot;maxLength_97&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;recordName_88&quot;:&quot;京ICP备10002622号-38&quot;,&quot;required_99&quot;:&quot;请输入内容&quot;,&quot;maxLength_99&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;maxLength_98&quot;:&quot;您输入的内容不能多于%len个字符&quot;,&quot;required_97&quot;:&quot;请输入内容&quot;,&quot;required_98&quot;:&quot;请输入内容&quot;,&quot;minLength_98&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;minLength_99&quot;:&quot;您输入的内容不能少于%len个字符&quot;,&quot;noData_47&quot;:&quot;暂无数据&quot;,&quot;minLength_97&quot;:&quot;您输入的内容不能少于%len个字符&quot;}">
</form></div>
</div><div class="e_container-60 s_layout">
<div class="cbox-60-0 p_item"><div class="e_richText-81 s_title clearfix">
@@ -790,17 +769,17 @@
<p style="font-size:14px;line-height:24px">&nbsp;</p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:16px;"><strong><span style="font-size:14px;">服务热线:</span></strong></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="tel:4006-535-700" rel="nofollow"><span style="color:#FF0000;">4006-535-700</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">E-mail:</span></span></p>
<p style="font-size:14px;line-height:24px"><span style="font-size:20px;"><span style="line-height:1.7;"><a href="mailto:haiho@haihofoods.com" rel="nofollow"><span style="color:#FF0000;">haiho@haihofoods.com</span></a></span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">地址 : </span></span></p>
<p style="font-size:14px;line-height:24px"><span style="line-height:1.7;"><span style="font-size:14px;">中国•烟台•芝罘岛东路51号</span></span></p>
</div></div>
<div class="cbox-60-1 p_item"></div>
@@ -813,7 +792,7 @@
<a href="javascript:;" target="">
<span>网站首页</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -833,7 +812,7 @@
<a href="javascript:;" target="">
<span>公司简介</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -843,7 +822,7 @@
<a href="javascript:;" target="">
<span>资质荣誉</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -853,7 +832,7 @@
<a href="javascript:;" target="">
<span>品质技术</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -863,7 +842,7 @@
<a href="javascript:;" target="">
<span>发展历程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -873,7 +852,7 @@
<a href="javascript:;" target="">
<span>店面展示</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -895,7 +874,7 @@
<a href="javascript:;" target="">
<span>礼盒系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -905,7 +884,7 @@
<a href="javascript:;" target="">
<span>华阳金标海参</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -915,7 +894,7 @@
<a href="javascript:;" target="">
<span>生鲜系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -925,7 +904,7 @@
<a href="javascript:;" target="">
<span>无骨系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -935,7 +914,7 @@
<a href="javascript:;" target="">
<span>调味系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -945,7 +924,7 @@
<a href="javascript:;" target="">
<span>裹粉系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -955,7 +934,7 @@
<a href="javascript:;" target="">
<span>休闲即食系列</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -977,7 +956,7 @@
<a href="javascript:;" target="">
<span>七道鲜文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -987,7 +966,7 @@
<a href="javascript:;" target="">
<span>节庆文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -997,7 +976,7 @@
<a href="javascript:;" target="">
<span>礼品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1007,7 +986,7 @@
<a href="javascript:;" target="">
<span>企业文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1017,7 +996,7 @@
<a href="javascript:;" target="">
<span>历史文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1027,7 +1006,7 @@
<a href="javascript:;" target="">
<span>产品文化</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1037,7 +1016,7 @@
<a href="javascript:;" target="">
<span>...</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1059,7 +1038,7 @@
<a href="javascript:;" target="">
<span>华阳新闻</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1069,7 +1048,7 @@
<a href="javascript:;" target="">
<span>行业动态</span>
</a>
</p>
<!-- 子集 2 -->
</li>
@@ -1079,61 +1058,18 @@
<a href="javascript:;" target="">
<span>媒体报道</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-5 open">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="javascript:;" target="">
<span>招商加盟</span>
</a>
<svg t="1625735163067" class="icon p_jtIcon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1486" width="200" height="200"><path d="M661.16183428 486.94732961L415.99871022 219.24359155c-13.37500289-14.59708438-35.98351032-15.54759219-50.51270128-2.24048272-14.59708438 13.37500289-15.54759219 35.98351032-2.24048272 50.51270127l223.09776396 243.60157549-222.89408371 244.28050967c-13.30710947 14.59708438-12.28870823 37.20559179 2.30837613 50.51270125 14.59708438 13.30710947 37.20559179 12.28870823 50.51270128-2.30837613l244.75576356-268.11109855c0.47525392-0.54314733 1.01840124-1.15418807 1.42576173-1.6973354 11.13452018-13.51078973 10.93083994-33.53934734-1.2899749-46.84645682z" p-id="1487"></path></svg>
</p>
<!-- 子集 -->
<ul class="mt-2 p_level2Box s_templatesum">
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟细则</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟流程</span>
</a>
</p>
<!-- 子集 2 -->
</li>
<li class="p_level2Item">
<!-- 名称 2 -->
<p class="p_menuItem">
<a href="javascript:;" target="">
<span>加盟资质</span>
</a>
</p>
<!-- 子集 2 -->
</li>
</ul>
</li>
<li class="pt-1 pb-1 p_level1Item saf-d-7">
</li><li class="pt-1 pb-1 p_level1Item saf-d-7">
<!-- 名称 -->
<p class="p_menuItem s_templatetitle">
<a href="javascript:;" target="_blank">
<span>华阳商城</span>
</a>
</p>
<!-- 子集 -->
</li>
@@ -1143,14 +1079,14 @@
<a href="javascript:;" target="">
<span>联系方式</span>
</a>
</p>
<!-- 子集 -->
</li>
</ul>
<!-- 导航内容 结束 -->
</div>
</div>
@@ -1192,9 +1128,9 @@
<path id="slider" d="M246.848,168.96h-86a6.986,6.986,0,0,0-6.991,6.991v66.232a5.446,5.446,0,0,0,5.445,5.445h89.11a5.446,5.446,0,0,0,5.445-5.445V175.951A7,7,0,0,0,246.848,168.96Zm-18.275,6.785h8.485v8.485h-8.485Zm-14.96,0H222.1v8.485h-8.485Zm-14.96,0h8.485v8.485h-8.485Zm45.517,66.4H162.444v-50.4h81.724Zm-8.348,18.035H171.874a3.246,3.246,0,1,1,0-6.493h63.947a3.246,3.246,0,1,1,0,6.493Z" transform="translate(-153.856 -168.96)"></path>
</svg>
<a href="javascript:;" target="_self">
营业执照及SEO链接: 营业执照
</a>
</div><div class="e_container-41 s_layout">
<div class="cbox-41-0 p_item"><div class="e_richText-40 s_title clearfix saf-setItem">
@@ -1209,8 +1145,8 @@
<p style="text-align: center;"><span style="line-height:2;">您可以查看其他栏目或返回&nbsp;<a href="javascript:;"><span style="color:#FF0000;">首页</span></a></span></p>
</div>
</div></div>
</div></div>
</div>
@@ -1251,7 +1187,7 @@
</div><div class="e_html-31 s_list">
<h3>SVG图标库<span>请自行添加图标,用div包起来,并命名使用</span></h3>
<div class="saf-svgs">
<div class="search">
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="96.983" viewBox="0 0 100 96.983">
<path id="search" d="M93.962,95.944,77.127,79.11a45.789,45.789,0,1,1,4.77-5.235L98.965,90.942a3.537,3.537,0,1,1-5,5ZM7.079,45.825a38.7,38.7,0,1,0,38.7-38.7A38.7,38.7,0,0,0,7.079,45.825Z"></path>
@@ -1307,11 +1243,11 @@
<svg t="1683854973181" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20559" width="200" height="200"><path d="M713.5 599.9c-10.9-5.6-65.2-32.2-75.3-35.8-10.1-3.8-17.5-5.6-24.8 5.6-7.4 11.1-28.4 35.8-35 43.3-6.4 7.4-12.9 8.3-23.8 2.8-64.8-32.4-107.3-57.8-150-131.1-11.3-19.5 11.3-18.1 32.4-60.2 3.6-7.4 1.8-13.7-1-19.3-2.8-5.6-24.8-59.8-34-81.9-8.9-21.5-18.1-18.5-24.8-18.9-6.4-0.4-13.7-0.4-21.1-0.4-7.4 0-19.3 2.8-29.4 13.7-10.1 11.1-38.6 37.8-38.6 92s39.5 106.7 44.9 114.1c5.6 7.4 77.7 118.6 188.4 166.5 70 30.2 97.4 32.8 132.4 27.6 21.3-3.2 65.2-26.6 74.3-52.5 9.1-25.8 9.1-47.9 6.4-52.5-2.7-4.9-10.1-7.7-21-13z m211.7-261.5c-22.6-53.7-55-101.9-96.3-143.3-41.3-41.3-89.5-73.8-143.3-96.3C630.6 75.7 572.2 64 512 64h-2c-60.6 0.3-119.3 12.3-174.5 35.9-53.3 22.8-101.1 55.2-142 96.5-40.9 41.3-73 89.3-95.2 142.8-23 55.4-34.6 114.3-34.3 174.9 0.3 69.4 16.9 138.3 48 199.9v152c0 25.4 20.6 46 46 46h152.1c61.6 31.1 130.5 47.7 199.9 48h2.1c59.9 0 118-11.6 172.7-34.3 53.5-22.3 101.6-54.3 142.8-95.2 41.3-40.9 73.8-88.7 96.5-142 23.6-55.2 35.6-113.9 35.9-174.5 0.3-60.9-11.5-120-34.8-175.6z m-151.1 438C704 845.8 611 884 512 884h-1.7c-60.3-0.3-120.2-15.3-173.1-43.5l-8.4-4.5H188V695.2l-4.5-8.4C155.3 633.9 140.3 574 140 513.7c-0.4-99.7 37.7-193.3 107.6-263.8 69.8-70.5 163.1-109.5 262.8-109.9h1.7c50 0 98.5 9.7 144.2 28.9 44.6 18.7 84.6 45.6 119 80 34.3 34.3 61.3 74.4 80 119 19.4 46.2 29.1 95.2 28.9 145.8-0.6 99.6-39.7 192.9-110.1 262.7z" p-id="20560"></path></svg>
</div>
</div>
</div>
</div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<div style="width:100%;text-align:center;padding-top:20px; line-height:1.6;font-size:14px; color:#999;"><p>© SAF-Team 版权所有</p><p>盗用有风险,使用需谨慎,加入SAF获取更多技术支持</p></div></div>
<link type="text/css" rel="stylesheet" href="./全国门店-烟台华阳食品有限公司_files/a542852518db4913ba26b2cb5f622c2a.css">
<link type="text/css" rel="stylesheet" href="./全国门店-烟台华阳食品有限公司_files/abe57529cab54a19b6da0041db3fb122.css">
<link type="text/css" rel="stylesheet" href="./全国门店-烟台华阳食品有限公司_files/6f7215910b184bd6873d42388538e76c.css">
@@ -1326,32 +1262,32 @@
<saf-online class="saf-online">
<div class="p_list">
<saf-loopitem class="cbox-1 saf-lineitem">
<a href="javascript:;">
<saf-icon><span><svg t="1734400707687" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2770" width="32" height="32"><path d="M336.64 848a58.666667 58.666667 0 0 1 3.562667 117.226667l-3.562667 0.106666a58.666667 58.666667 0 0 1-3.584-117.226666l3.584-0.106667zM165.290667 90.090667c13.973333 0 26.005333 10.453333 28.736 24.938666l24.64 130.090667h726.08c16.213333-0.021333 29.354667 13.845333 29.376 30.976 0 2.261333-0.234667 4.522667-0.704 6.741333L886.912 688.853333l0.021333-72.746666-0.192-4.842667a61.44 61.44 0 0 0-85.696-51.52l-3.498666 1.664-188.074667 96.149333-3.541333 1.962667a61.44 61.44 0 0 0-29.802667 48.661333l-0.128 4.053334v81.856H295.914667c-27.584 0-51.456-20.330667-57.322667-48.832L120.405333 182.890667a52.266667 52.266667 0 0 1-4.394666 0.213333H86.677333C62.357333 183.104 42.666667 162.282667 42.666667 136.597333c0-25.685333 19.690667-46.506667 44.010666-46.506666h78.613334z" fill="#666666" p-id="2771"></path><path d="M825.813333 597.333333l2.218667 0.170667a18.752 18.752 0 0 1 16.106667 16.384l0.128 2.218667V972.8H637.44l-2.346667-0.149333a18.773333 18.773333 0 0 1-15.786666-13.781334l-0.490667-2.496-0.149333-2.346666V712.256l0.192-2.602667a18.773333 18.773333 0 0 1 7.808-12.757333l2.24-1.344 188.053333-96.149333 2.154667-0.96a18.688 18.688 0 0 1 4.458666-1.002667L825.813333 597.333333zM704 853.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667z m-85.333333-85.333333h-42.666667v42.666667h42.666667v-42.666667z m85.333333 0h-42.666666v42.666667h42.666666v-42.666667zM937.813333 972.778667l2.346667-0.149334a18.773333 18.773333 0 0 0 16.277333-16.277333l0.149334-2.346667v-145.706666a18.773333 18.773333 0 0 0-6.954667-14.592l-1.984-1.408-56.32-34.602667a18.773333 18.773333 0 0 0-4.394667-1.984l-0.32-0.085333a18.773333 18.773333 0 0 0-23.744 15.701333l-0.149333 2.346667V972.8h75.093333z" fill="#666666" p-id="2772"></path></svg></span></saf-icon>
</a>
<!-- <p class="codeimg"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==" alt="二维码" title="二维码" la="la"/></p> -->
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="javascript:;"><span><svg height="78.564" viewBox="0 0 100 78.564" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M73.1,171.8h80a9.952,9.952,0,0,1,10,9.7l-49.983,27.437-49.971-27.4A9.9,9.9,0,0,1,73.1,171.8Zm-9.955,20.234L63.1,240.548a9.937,9.937,0,0,0,10,9.816h80a9.937,9.937,0,0,0,10-9.816V192.01l-48.8,26.153a2.511,2.511,0,0,1-2.393,0l-48.757-26.13Z" id="e-mail" transform="translate(-63.1 -171.8)"></path> </svg></span></a></saf-icon>
<p><a href="javascript:;">邮箱:haiho@haihofoods.com</a></p>
</saf-loopitem>
<saf-loopitem class="cbox-1 saf-lineitem">
<saf-icon><a href="javascript:;"><span><svg height="100.001" viewBox="0 0 100 100.001" width="100" xmlns="http://www.w3.org/2000/svg"> <path d="M179.688,165.873a6.273,6.273,0,0,1,0,8.861l-4.431,4.431a21.371,21.371,0,0,1-12.8,5.929,31.058,31.058,0,0,1-3.9.24,43.582,43.582,0,0,1-12.237-1.918c-11.777-3.461-24.163-11.268-34.867-21.974s-18.513-23.089-21.975-34.867A39.857,39.857,0,0,1,87.8,110.439a21.371,21.371,0,0,1,5.929-12.8l4.431-4.431a6.273,6.273,0,0,1,8.861,0l19.5,19.5a6.274,6.274,0,0,1,0,8.862l-4.431,4.428c-2.507,2.507-.012,10.623,7.09,17.724s15.214,9.6,17.724,7.09l4.431-4.431a6.274,6.274,0,0,1,8.862,0Zm-32.233-45.448a5.019,5.019,0,0,1,5.013,5.013,2.507,2.507,0,0,0,5.013,0,10.037,10.037,0,0,0-10.026-10.026,2.507,2.507,0,0,0,0,5.013Zm36.952-10.6a40.074,40.074,0,0,0-36.952-24.494,2.507,2.507,0,0,0,0,5.013,35.134,35.134,0,0,1,35.092,35.092,2.507,2.507,0,1,0,5.013,0,39.848,39.848,0,0,0-3.153-15.611Zm-36.952-4.441a20.075,20.075,0,0,1,20.052,20.052,2.507,2.507,0,1,0,5.013,0,25.065,25.065,0,0,0-25.065-25.065,2.507,2.507,0,0,0,0,5.013Z" id="tel-1" transform="translate(-87.56 -85.333)"></path> </svg></span></a></saf-icon>
<p><a href="javascript:;">电话:4006-535-700</a></p>
</saf-loopitem>
<saf-loopitem class="saf-lineitem backTop"><saf-icon><svg xmlns="http://www.w3.org/2000/svg" width="20" height="14.438" viewBox="0 0 20 14.438">
<path id="路径_804" data-name="路径 804" d="M216.687,81.683V98.356a1.66,1.66,0,0,1-2.774,1.24l-11-8.245a1.666,1.666,0,0,1-.329-2.327,1.459,1.459,0,0,1,.329-.329l11.119-8.34a1.66,1.66,0,0,1,2.321.335,1.62,1.62,0,0,1,.335.993h0Zm0,0" transform="translate(100.025 -202.249) rotate(90)"></path>
</svg></saf-icon></saf-loopitem>
</div>
<div class="p_page">
</div>
</saf-online>
<input type="hidden" name="_config" value="{&quot;ignoreEmptyCheck&quot;:true,&quot;cname&quot;:&quot;在线客服-列表接口&quot;,&quot;type&quot;:&quot;list&quot;,&quot;params&quot;:{&quot;size&quot;:20,&quot;query&quot;:[{&quot;valueName&quot;:&quot;&quot;,&quot;dataType&quot;:&quot;number&quot;,&quot;operator&quot;:&quot;eq&quot;,&quot;filter&quot;:&quot;ignore-empty-check&quot;,&quot;esField&quot;:&quot;CID&quot;,&quot;groupName&quot;:&quot;数据展示条件,默认条件组&quot;,&quot;groupEnd&quot;:&quot;2,1&quot;,&quot;field&quot;:&quot;CID&quot;,&quot;sourceType&quot;:&quot;static&quot;,&quot;logic&quot;:&quot;and&quot;,&quot;groupBegin&quot;:&quot;1,2&quot;,&quot;value&quot;:&quot;&quot;,&quot;fieldType&quot;:&quot;number&quot;,&quot;configurable&quot;:{&quot;sourceType&quot;:&quot;page&quot;,&quot;type&quot;:&quot;normal&quot;,&quot;value&quot;:&quot;_detailId&quot;}}],&quot;header&quot;:{&quot;Data-Query-Es-Field&quot;:&quot;TEXT_DETAIL_ES.es_text_rudao&quot;,&quot;Data-Query-Random&quot;:0,&quot;Data-Query-Field&quot;:&quot;rudao&quot;},&quot;from&quot;:0,&quot;sort&quot;:[]},&quot;valueUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/value?cate=0&quot;,&quot;priority&quot;:0,&quot;_dataFilter&quot;:{&quot;filter&quot;:false,&quot;showCondition&quot;:false,&quot;conditionExclude&quot;:false,&quot;showSearch&quot;:false,&quot;currentConditionHide&quot;:false,&quot;selectFirstCondition&quot;:false,&quot;fields&quot;:[],&quot;viscidityEnableShowAll&quot;:false,&quot;cascaderEnable&quot;:false,&quot;showSearchCname&quot;:&quot;&quot;,&quot;viscidityEnable&quot;:false,&quot;viscidityEnableShowFirst&quot;:false},&quot;datasourceType&quot;:&quot;nomarl&quot;,&quot;appId&quot;:&quot;125326&quot;,&quot;sourceUuid&quot;:&quot;1473112731287683072&quot;,&quot;pageParams&quot;:[{&quot;code&quot;:&quot;_detailId&quot;,&quot;name&quot;:&quot;默认参数&quot;}],&quot;metaUrl&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0&quot;,&quot;disabled&quot;:false,&quot;api&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0&quot;,&quot;id&quot;:&quot;datasource1&quot;,&quot;apiId&quot;:&quot;407257&quot;,&quot;reqKey&quot;:&quot;/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\&quot;size\&quot;:20,\&quot;query\&quot;:[{\&quot;valueName\&quot;:\&quot;\&quot;,\&quot;dataType\&quot;:\&quot;number\&quot;,\&quot;operator\&quot;:\&quot;eq\&quot;,\&quot;filter\&quot;:\&quot;ignore-empty-check\&quot;,\&quot;esField\&quot;:\&quot;CID\&quot;,\&quot;groupName\&quot;:\&quot;数据展示条件,默认条件组\&quot;,\&quot;groupEnd\&quot;:\&quot;2,1\&quot;,\&quot;field\&quot;:\&quot;CID\&quot;,\&quot;sourceType\&quot;:\&quot;static\&quot;,\&quot;logic\&quot;:\&quot;and\&quot;,\&quot;groupBegin\&quot;:\&quot;1,2\&quot;,\&quot;value\&quot;:\&quot;\&quot;,\&quot;fieldType\&quot;:\&quot;number\&quot;,\&quot;configurable\&quot;:{\&quot;sourceType\&quot;:\&quot;page\&quot;,\&quot;type\&quot;:\&quot;normal\&quot;,\&quot;value\&quot;:\&quot;_detailId\&quot;}}],\&quot;header\&quot;:{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;},\&quot;from\&quot;:0,\&quot;sort\&quot;:[]}|{\&quot;Data-Query-Es-Field\&quot;:\&quot;TEXT_DETAIL_ES.es_text_rudao\&quot;,\&quot;Data-Query-Random\&quot;:0,\&quot;Data-Query-Field\&quot;:\&quot;rudao\&quot;}&quot;}">
<input type="hidden" name="view" value="mendian">
@@ -1381,4 +1317,4 @@
</div>
<div class="licenseBox"><a href="javascript:;">×</a><div class="licenseRim"><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAI4AyADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAAAAECBAUGAwcI/8QAVhAAAQMDAwIEAwMIAwwIBQIHAQIDEQAEIQUSMUFRBhMiYRRxgTKRoQcVI0KxwdHwFlLhJDM0NWJyc5KTsrPxCDZDU1RVdIIlRIOUohdjZBgmRYSj0v/EABoBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQb/xAAyEQEBAQABBAICAQIEBQQDAAAAARECAxIhMQRBE1FhBXEiMoGRFVKx0fAUI6HhQsHx/9oADAMBAAIRAxEAPwD6og96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPekW4ltKluKCEJElSjAAqvttatLy4S1YebdpJgvMoJaT/AO/7J+QJPtQWMHvRB71nbvV71u8ugLeLNvale9JLiJn1AI3SDHXbHPFQvCd3eG4sLe9unSsWy0O2q0pSWlo2RPJMpVMk59qDXwe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvQTAkwBSgyJoEg96IPelooEg96IPeuN7eW1iyXr24at2hje6sJH41GttURdIeXbW12ttCZSotbA4eyd0E/Pj3oJ8HvRB71itS1XVX9MSEsbnFOJcYU0hSlKCXASFbfQCEgyAo7ulXnhm6Xci+33irxKXUlt0hIBQpCVCAkDuaC5g96IPelpCJFAQe9EHvSiigSD3og96WigSD3og96WigSD3og96WigSD3og96WigSD3og96CY5paBIPeiD3paKBIPeiD3paKAooooCiiigKKQmOhNLQFFFFAUUUUBRRRQFFFFAUUUUBRRRQFFFFAUUUUBRRSdaBaKKKAooooCiimLcS2lanCEISJKlGABQPorMOeJ1PXrrWmtIum2SFKWggoU2R9vzCQlMEKB54p+t6Nc32mXTi9QuXnSguMsIUENYyEkJgqB49RP0oLZerWKX3GE3CHbhtO5bLX6RYHulMms1c+Kn3mVrZYeaFu6pD6WYcWE5EztKEQCFSpQ4IipuiruLjT7ZkaPp40q6RM2zg2pSRPqbUkD2wTWeRbv2GrlgoTetLdcSRtK0g8gRCW0K2AghAUccZoNAEv3zCE3Wms6jdW7hQnz3UQgwFS4AnaFQR9gK+lQNERcuXBsLu8dYtlv3AbbsyEJJSqVJ3/b/WVEbfsmpOg2Ot2jDbbYabZc8x7e8sqWmUwhC0xkphOQelXTOiWY0xiyumkXSGzvKnUyVLMkqPuST99BntQZRfq+F0h15m5XdeW6lw+a2tLW0lS5zEBIwQZPzqwXo15e6urUHnRYXTTCWW3bbareTlRO4ZTwACJwa0LDLVuylq3bQ00kQlCEhKQPYCn0DWwpLaQtW5QABVESe8U6iigKKKKAooooCiiigKJzRXF95DDZcdUlDaRJUowBQdpFIFCsxdeJULUlGmMKuCoEhxXpRj3559qpNQ8S6my+ygutbVnaoNJkpV3z096xepxj1dP4fV6l9Y9C3CiRWKTfX50T45V05u83YQAIInmI5qJb+I9TD7iN7ZCcAOpjefaKfki8fhdTluWeHoMiaJrLWHihC0k3rJaSMl1B3JGeD1H3VomX232wtlSVoVwoGQa1LL6cOp0ufSuco70UgparmKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiuF7eW9iwXbt9phvgKdWEgntJoOygCIIkUilJQgqUQlIGSTAFZrTtdu9UKfJZDDLwLYdWkDynRykbiC5weEioviPSl2psrx15WpEPBpxN+qWfXhKtiRtEKjITOaC5vvEFq3pr91YKF95Uj9CZRIEkFf2R9TVKvX7y9uWfgxcIauEgsloJKAoSSFLWkAgp5CdxG3FT7+2vdR0y6t72xtbN1lsqt30OodQFQeNyJT7nbwcGsvasXT7NzYssLW5CBb3CQsqbBwlXmL9SkpIV+qExOTMUF3rLBvdNurxvS7Le9aFa75x3cEpKZ/R+ncY9wgV101bjzFxc6pd3bj9mhLpYSsMNwUBQICTJHI9RIkGu7OmandWarG+LFvZDymyhpRXvbSDuAMAjd6RmcT86uLnSrC6uEP3NnbuvIACVLQFEAcc9qDOWFu87q9q9ozk2Nqwn9DciUp8wJO1CgJCgkAmdwz0mpuiaJcWjq7sXCrRy5eU8/aISlTRB4HEgxEkHJmtFRQFFFFAUUUUBRRRQFFFFAUUUUBRRRQEZoiiigaDNOo6UUBRRRQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffSffSzSEZFAffS/fRNE0B99H30TRNAffR99E0x51DLanHlobbSJUpRgAe5oH/AH0ffUWw1C11BpbljcNvtpVsKmzImAefqKlTQRru/tLMxdXLLJjd+kWE4mOvvUD8+NvvOsWLLjj6WlOJDkNzHHpVC4JjITHvVH4vtX7TUPzspxa7fZ5aghEFlIEg7gpJgndPqAMpEGoenBy21XTXG21IHmKMBOxOwj1KP2BGQZ2GTHqM5CQ7qLd3pzT51V+5Wpbbt23bktpabOCj0ZRG6cqkwaXUtNbtF3tpbsbkthN7bJCEuKCZAdCAoEbsSCQcqqfZWN5cG6sm1so0NbqnEOoUFqeQvJQOQEhRUJ56COam6XoiGmAu+U67elryFOh9ZhPHoz6JgExGaDL6k5cBi4YQp1V+SWWmHHEuuqadACkK2mEqBBUBMQO0xsNEvV3ibj9A80w0tKGvNZU0ojaJkK7GRIxUm1sLS1baRb2zLaWiSiEj0k8me56nrUqaCDpFidOYdYDm9ourW2IjYlRnb9CTU2lmiaA++j76JomgPvo++iaJoD76PvomiaA++j76JomgPvo++iaJoD76T76Wa4XDvksuOEYSkn7hQR9T1FjTbRT9ysATCROVHoBWKvb4am6l15x0uoV6GEDciCDwJEkckntVdqN8rVXPiL4FbC0p8pp1IATJI/aOvaarb6/t9Mtm27Y+asGRwSFJMRu6iO3evPz6nu30+58X4GZJ553/AGT7i7DVok3D7bSXUEISlZGO6gRIECMHrVVceILVAcSw2tSXAJVHqSZGEkmIEYPNZ68uXLtYU6omAQAeg7V20ZFk7dJb1R51hpWA62AoJ9yO3yrx/n5crnF+h4f0zp9Lh39Xb/Ear+mb35uOzSmTbB2Cok/aiR/7veoVt4itlKbTcsnagHlIJUcwCegzyM1tmvCGnHwuvTk3SyytfxHxIieMH5RXlust6YxdlrSrh+6bThTrgACv82unVvV6cl5V4/gT4Xy+XLh0+Nl3+fX8tczceagfCOsupQkAoG4yDyUJGcCZknIqwsb9WnOeZbun4hSpcaUQE7QByOJIzI715xbXbtssKYWpCh0BwR7itPp99b6lbPC8UQpMqIERuJA7SBH7KdPr91/lPl/029GbfPF6xpOpMajbB1kkKGFIPKT2qwFeS2t07plyH9N3hIlS0p4eA4GefaK9UtHxcW7bqYIWkKx717eHPunl+a+X8X8F2eq7/fR99E0TW3kH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TUa+v7Wwa8y9uGWEHALiwmT2Hc0En76PvrnbvN3DDbzKgtpxIUlQ4IPBp8mghXGrWNuoocuUF0EjyketwkcgJTJJ+QqqvtfLmnLfsiGGkvpYcuHdqg0Dgq2hWIkYVETJFZzULN7Tb96Line truncated
<div class="licenseBox"><a href="javascript:;">×</a><div class="licenseRim"><img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAI4AyADASIAAhEBAxEB/8QAHAAAAQUBAQEAAAAAAAAAAAAAAAECBAUGAwcI/8QAVhAAAQMDAwIEAwMIAwwIBQIHAQIDEQAEIQUSMUFRBhMiYRRxgTKRoQcVI0KxwdHwFlLhJDM0NWJyc5KTsrPxCDZDU1RVdIIlRIOUohdjZBgmRYSj0v/EABoBAQEBAQEBAQAAAAAAAAAAAAABAgMEBQb/xAAyEQEBAQABBAICAQIEBQQDAAAAARECAxIhMQRBE1FhBXEiMoGRFVKx0fAUI6HhQsHx/9oADAMBAAIRAxEAPwD6og96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPelooEg96IPekW4ltKluKCEJElSjAAqvttatLy4S1YebdpJgvMoJaT/AO/7J+QJPtQWMHvRB71nbvV71u8ugLeLNvale9JLiJn1AI3SDHXbHPFQvCd3eG4sLe9unSsWy0O2q0pSWlo2RPJMpVMk59qDXwe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvS0UCQe9EHvQTAkwBSgyJoEg96IPelooEg96IPeuN7eW1iyXr24at2hje6sJH41GttURdIeXbW12ttCZSotbA4eyd0E/Pj3oJ8HvRB71itS1XVX9MSEsbnFOJcYU0hSlKCXASFbfQCEgyAo7ulXnhm6Xci+33irxKXUlt0hIBQpCVCAkDuaC5g96IPelpCJFAQe9EHvSiigSD3og96WigSD3og96WigSD3og96WigSD3og96WigSD3og96CY5paBIPeiD3paKBIPeiD3paKAooooCiiigKKQmOhNLQFFFFAUUUUBRRRQFFFFAUUUUBRRRQFFFFAUUUUBRRSdaBaKKKAooooCiimLcS2lanCEISJKlGABQPorMOeJ1PXrrWmtIum2SFKWggoU2R9vzCQlMEKB54p+t6Nc32mXTi9QuXnSguMsIUENYyEkJgqB49RP0oLZerWKX3GE3CHbhtO5bLX6RYHulMms1c+Kn3mVrZYeaFu6pD6WYcWE5EztKEQCFSpQ4IipuiruLjT7ZkaPp40q6RM2zg2pSRPqbUkD2wTWeRbv2GrlgoTetLdcSRtK0g8gRCW0K2AghAUccZoNAEv3zCE3Wms6jdW7hQnz3UQgwFS4AnaFQR9gK+lQNERcuXBsLu8dYtlv3AbbsyEJJSqVJ3/b/WVEbfsmpOg2Ot2jDbbYabZc8x7e8sqWmUwhC0xkphOQelXTOiWY0xiyumkXSGzvKnUyVLMkqPuST99BntQZRfq+F0h15m5XdeW6lw+a2tLW0lS5zEBIwQZPzqwXo15e6urUHnRYXTTCWW3bbareTlRO4ZTwACJwa0LDLVuylq3bQ00kQlCEhKQPYCn0DWwpLaQtW5QABVESe8U6iigKKKKAooooCiiigKJzRXF95DDZcdUlDaRJUowBQdpFIFCsxdeJULUlGmMKuCoEhxXpRj3559qpNQ8S6my+ygutbVnaoNJkpV3z096xepxj1dP4fV6l9Y9C3CiRWKTfX50T45V05u83YQAIInmI5qJb+I9TD7iN7ZCcAOpjefaKfki8fhdTluWeHoMiaJrLWHihC0k3rJaSMl1B3JGeD1H3VomX232wtlSVoVwoGQa1LL6cOp0ufSuco70UgparmKKKKAooooCiiigKKKKAooooCiiigKKKKAooooCiiuF7eW9iwXbt9phvgKdWEgntJoOygCIIkUilJQgqUQlIGSTAFZrTtdu9UKfJZDDLwLYdWkDynRykbiC5weEioviPSl2psrx15WpEPBpxN+qWfXhKtiRtEKjITOaC5vvEFq3pr91YKF95Uj9CZRIEkFf2R9TVKvX7y9uWfgxcIauEgsloJKAoSSFLWkAgp5CdxG3FT7+2vdR0y6t72xtbN1lsqt30OodQFQeNyJT7nbwcGsvasXT7NzYssLW5CBb3CQsqbBwlXmL9SkpIV+qExOTMUF3rLBvdNurxvS7Le9aFa75x3cEpKZ/R+ncY9wgV101bjzFxc6pd3bj9mhLpYSsMNwUBQICTJHI9RIkGu7OmandWarG+LFvZDymyhpRXvbSDuAMAjd6RmcT86uLnSrC6uEP3NnbuvIACVLQFEAcc9qDOWFu87q9q9ozk2Nqwn9DciUp8wJO1CgJCgkAmdwz0mpuiaJcWjq7sXCrRy5eU8/aISlTRB4HEgxEkHJmtFRQFFFFAUUUUBRRRQFFFFAUUUUBRRRQEZoiiigaDNOo6UUBRRRQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TRNAffSffSzSEZFAffS/fRNE0B99H30TRNAffR99E0x51DLanHlobbSJUpRgAe5oH/AH0ffUWw1C11BpbljcNvtpVsKmzImAefqKlTQRru/tLMxdXLLJjd+kWE4mOvvUD8+NvvOsWLLjj6WlOJDkNzHHpVC4JjITHvVH4vtX7TUPzspxa7fZ5aghEFlIEg7gpJgndPqAMpEGoenBy21XTXG21IHmKMBOxOwj1KP2BGQZ2GTHqM5CQ7qLd3pzT51V+5Wpbbt23bktpabOCj0ZRG6cqkwaXUtNbtF3tpbsbkthN7bJCEuKCZAdCAoEbsSCQcqqfZWN5cG6sm1so0NbqnEOoUFqeQvJQOQEhRUJ56COam6XoiGmAu+U67elryFOh9ZhPHoz6JgExGaDL6k5cBi4YQp1V+SWWmHHEuuqadACkK2mEqBBUBMQO0xsNEvV3ibj9A80w0tKGvNZU0ojaJkK7GRIxUm1sLS1baRb2zLaWiSiEj0k8me56nrUqaCDpFidOYdYDm9ourW2IjYlRnb9CTU2lmiaA++j76JomgPvo++iaJoD76PvomiaA++j76JomgPvo++iaJoD76T76Wa4XDvksuOEYSkn7hQR9T1FjTbRT9ysATCROVHoBWKvb4am6l15x0uoV6GEDciCDwJEkckntVdqN8rVXPiL4FbC0p8pp1IATJI/aOvaarb6/t9Mtm27Y+asGRwSFJMRu6iO3evPz6nu30+58X4GZJ553/AGT7i7DVok3D7bSXUEISlZGO6gRIECMHrVVceILVAcSw2tSXAJVHqSZGEkmIEYPNZ68uXLtYU6omAQAeg7V20ZFk7dJb1R51hpWA62AoJ9yO3yrx/n5crnF+h4f0zp9Lh39Xb/Ear+mb35uOzSmTbB2Cok/aiR/7veoVt4itlKbTcsnagHlIJUcwCegzyM1tmvCGnHwuvTk3SyytfxHxIieMH5RXlust6YxdlrSrh+6bThTrgACv82unVvV6cl5V4/gT4Xy+XLh0+Nl3+fX8tczceagfCOsupQkAoG4yDyUJGcCZknIqwsb9WnOeZbun4hSpcaUQE7QByOJIzI715xbXbtssKYWpCh0BwR7itPp99b6lbPC8UQpMqIERuJA7SBH7KdPr91/lPl/029GbfPF6xpOpMajbB1kkKGFIPKT2qwFeS2t07plyH9N3hIlS0p4eA4GefaK9UtHxcW7bqYIWkKx717eHPunl+a+X8X8F2eq7/fR99E0TW3kH30ffRNE0B99H30TRNAffR99E0TQH30ffRNE0B99H30TUa+v7Wwa8y9uGWEHALiwmT2Hc0En76PvrnbvN3DDbzKgtpxIUlQ4IPBp8mghXGrWNuoocuUF0EjyketwkcgJTJJ+QqqvtfLmnLfsiGGkvpYcuHdqg0Dgq2hWIkYVETJFZzULN7Tb96Line truncated
+24
View File
@@ -0,0 +1,24 @@
import { createI18n } from 'vue-i18n'
import zh from '../locales/zh.json'
import en from '../locales/en.json'
import ja from '../locales/ja.json'
export const DEFAULT_LOCALE = 'zh_cn'
export const FALLBACK_LOCALE = 'en_us'
export const SUPPORTED_LOCALES = ['zh_cn', 'en_us', 'ja_jp']
const i18n = createI18n({
legacy: false,
globalInjection: true,
locale: DEFAULT_LOCALE,
fallbackLocale: FALLBACK_LOCALE,
missingWarn: false,
fallbackWarn: false,
messages: {
zh_cn: zh,
en_us: en,
ja_jp: ja
}
})
export default i18n
+174
View File
@@ -0,0 +1,174 @@
{
"common": {
"title": {
"site_name": "Dalian Huayang Foods Co., Ltd.",
"site_home": "Home",
"about": "About",
"product": "Products",
"product_detail": "Product Details",
"culture_nav": "Culture",
"contact": "Contact",
"company_intro": "Company Profile",
"honor": "Qualifications & Honors",
"tech": "Quality & Tech",
"timeline": "Timeline",
"store": "Store Showcase",
"store_location": "Store Location",
"mall": "Huayang Mall"
},
"button": {
"submit": "Submit"
},
"placeholder": {
"name": "Your name",
"phone": "Phone number",
"email": "Email address",
"message": "Your message"
}
}
,
"home": {
"section3": {
"main": {
"title": "Featured Products"
},
"more": "Learn more >"
},
"section4": {
"main": {
"title": "Culture"
},
"more": "Learn more >",
"cards": {
"select": {
"badge": "Select",
"desc": "Deep-sea sourcing"
},
"freeze": {
"badge": "Freeze",
"desc": "Rapid fresh-freezing"
},
"test": {
"badge": "Test",
"desc": "Quality inspection"
},
"preserve": {
"badge": "Preserve",
"desc": "Freshness technology"
},
"craft": {
"badge": "Craft",
"desc": "Signature processing"
},
"deliver": {
"badge": "Deliver",
"desc": "Cold-chain delivery"
},
"restore": {
"badge": "Serve",
"desc": "Ocean flavor restored"
}
}
}
}
,
"ui": {
"menu": "Menu",
"back_home": "Back to Home",
"loading": {
"submitting": "Submitting...",
"building": "Content is being updated."
},
"form": {
"required_tip": "Please complete the required fields.",
"contact_required": "Please fill in name, phone and message.",
"inquiry_required": "Please fill in name, phone and inquiry message."
},
"status": {
"submit_ok_contact": "Submitted successfully. We will contact you soon.",
"submit_ok_message": "Message submitted successfully. We will contact you soon.",
"submit_ok_message_short": "Message submitted successfully. We will contact you soon.",
"submit_fail_retry": "Submission failed. Please try again later."
},
"network": {
"network_error": "Network error",
"request_failed": "Request failed"
},
"empty": {
"recommend_products": "No recommended products.",
"products": "No products.",
"product_desc": "No description."
},
"culture": {
"category_load_failed": "Failed to load categories. Please try again later.",
"no_categories": "No culture categories. Please add them in admin.",
"tag_load_failed": "Failed to load tags. Please try again later.",
"no_tags": "No content in this category. Please add tags in admin.",
"content_load_failed": "Failed to load content.",
"content_not_found": "Content not found or removed.",
"back_list": "Back to Culture List",
"read_count": "Views"
},
"product": {
"related": "Related Products",
"actions": {
"contact": "Contact Us",
"detail": "Details"
},
"operate": "Product actions",
"contact_card": "Contact",
"phone": "Phone",
"email": "Email",
"address": "Address",
"back_list": "Back to Product List",
"inquiry_hint_prefix": "For",
"inquiry": "product inquiry",
"inquiry_hint_before_link": "please fill out the form below, or",
"inquiry_hint_after_link": ".",
"qualifications": "Certificates",
"price_prefix": "Reference price",
"rich": {
"watermark_brand": "Huayang Culture",
"scientific_name_label": "Scientific name",
"latin_name_subcaption": "Latin name",
"country_origin_label": "Country of origin",
"country_origin_subcaption": "Country of origin",
"salmon_line_zh": "Frozen Pink Salmon Series",
"salmon_line_en_caps": "FROZEN PINK SALMON SERIES",
"salmon_wordmark": "PINK SALMON",
"salmon_line_ja": "Pink salmon (Karafuto masu)",
"salmon_origin_zh": "Russia, United States",
"salmon_origin_en": "RUSSIA, US"
}
},
"offline": {
"title_404": "404 Error!",
"subtitle_not_found": "Page not found!",
"desc_backend_offline": "Sorry, the service is unavailable. Please start the backend service, then refresh or go back to Home.",
"refresh_retry": "Retry"
},
"contact": {
"loading_contacts": "Loading contacts...",
"no_contacts": "No contact information available.",
"submit_message": "Send Message"
},
"company": {
"store_loading_or_empty": "Store data is loading or unavailable.",
"no_quality_content": "No quality & tech content. Please add it in admin."
},
"loading_page": "Loading...",
"search": {
"prompt_keyword": "Enter a keyword:"
}
},
"contact": {
"label_hotline": "Business Hotline:",
"label_email": "E-mail:",
"label_address": "Address:",
"page": {
"online_title": "Online Message",
"online_hint": "Leave your comments or suggestions here—we will reply as soon as possible.",
"location_title": "Our Location"
}
}
}
+174
View File
@@ -0,0 +1,174 @@
{
"common": {
"title": {
"site_name": "大連華陽食品有限公司",
"site_home": "ホーム",
"about": "会社案内",
"product": "製品",
"product_detail": "製品詳細",
"culture_nav": "企業文化",
"contact": "お問い合わせ",
"company_intro": "会社概要",
"honor": "資格・栄誉",
"tech": "品質・技術",
"timeline": "沿革",
"store": "店舗展示",
"store_location": "店舗所在地",
"mall": "華陽モール"
},
"button": {
"submit": "送信"
},
"placeholder": {
"name": "お名前を入力",
"phone": "電話番号を入力",
"email": "メールアドレスを入力",
"message": "メッセージを入力"
}
}
,
"home": {
"section3": {
"main": {
"title": "製品紹介"
},
"more": "詳しく見る >"
},
"section4": {
"main": {
"title": "企業文化"
},
"more": "詳しく見る >",
"cards": {
"select": {
"badge": "選ぶ",
"desc": "深海素材を厳選"
},
"freeze": {
"badge": "凍結",
"desc": "急速冷凍加工"
},
"test": {
"badge": "検査",
"desc": "鮮度と品質を確認"
},
"preserve": {
"badge": "保鮮",
"desc": "鮮度保持技術"
},
"craft": {
"badge": "加工",
"desc": "独自の加工技術"
},
"deliver": {
"badge": "配送",
"desc": "一貫したコールドチェーン"
},
"restore": {
"badge": "再現",
"desc": "海の旨みを届ける"
}
}
}
}
,
"ui": {
"menu": "メニュー",
"back_home": "ホームへ戻る",
"loading": {
"submitting": "送信中...",
"building": "コンテンツ準備中"
},
"form": {
"required_tip": "必須項目をすべて入力してください。",
"contact_required": "お名前・電話番号・メッセージ内容を入力してください。",
"inquiry_required": "お名前・電話番号・ご要望内容を入力してください。"
},
"status": {
"submit_ok_contact": "送信に成功しました。近日中にご連絡いたします。",
"submit_ok_message": "メッセージ送信に成功しました。近日中にご連絡いたします。",
"submit_ok_message_short": "メッセージ送信に成功しました。近日中にご連絡いたします。",
"submit_fail_retry": "送信に失敗しました。しばらくしてから再度お試しください。"
},
"network": {
"network_error": "ネットワークエラー",
"request_failed": "リクエストに失敗しました"
},
"empty": {
"recommend_products": "おすすめ商品はありません。",
"products": "商品はありません。",
"product_desc": "詳細説明はありません。"
},
"culture": {
"category_load_failed": "カテゴリの読み込みに失敗しました。しばらくしてから再度お試しください。",
"no_categories": "カテゴリがありません。管理画面で追加してください。",
"tag_load_failed": "タグの読み込みに失敗しました。しばらくしてから再度お試しください。",
"no_tags": "このカテゴリには内容がありません。管理画面で追加してください。",
"content_load_failed": "内容の読み込みに失敗しました。",
"content_not_found": "該当する内容がないか、非公開になっています。",
"back_list": "一覧へ戻る",
"read_count": "閲覧数"
},
"product": {
"related": "関連商品",
"actions": {
"contact": "お問い合わせ",
"detail": "詳細"
},
"operate": "商品操作",
"contact_card": "連絡先",
"phone": "電話",
"email": "メール",
"address": "住所",
"back_list": "商品一覧へ戻る",
"inquiry_hint_prefix": "",
"inquiry": "商品に関するお問い合わせ",
"inquiry_hint_before_link": "は本ページ下部のフォームに入力するか、",
"inquiry_hint_after_link": "へお問い合わせください。",
"qualifications": "認証・資格",
"price_prefix": "参考価格",
"rich": {
"watermark_brand": "華陽文化",
"scientific_name_label": "学名",
"latin_name_subcaption": "ラテン名",
"country_origin_label": "原産国",
"country_origin_subcaption": "COUNTRY OF ORIGIN",
"salmon_line_zh": "冷凍ピンクサーモンシリーズ",
"salmon_line_en_caps": "FROZEN PINK SALMON SERIES",
"salmon_wordmark": "PINK SALMON",
"salmon_line_ja": "カラフトマス",
"salmon_origin_zh": "ロシア、アメリカ",
"salmon_origin_en": "RUSSIA, US"
}
},
"offline": {
"title_404": "404 エラー",
"subtitle_not_found": "ページが見つかりません。",
"desc_backend_offline": "申し訳ありません。現在サービスをご利用いただけません。バックエンドサービスを起動してから更新するか、ホームへ戻ってください。",
"refresh_retry": "再試行"
},
"contact": {
"loading_contacts": "連絡先を読み込み中...",
"no_contacts": "連絡先情報を取得できませんでした。",
"submit_message": "メッセージ送信"
},
"company": {
"store_loading_or_empty": "店舗データを読み込み中、またはデータがありません。",
"no_quality_content": "品質・技術の内容がありません。管理画面で追加してください。"
},
"loading_page": "読み込み中...",
"search": {
"prompt_keyword": "検索キーワードを入力してください:"
}
},
"contact": {
"label_hotline": "ビジネスホットライン:",
"label_email": "E-mail:",
"label_address": "住所:",
"page": {
"online_title": "オンラインでのお問い合わせ",
"online_hint": "ご意見・ご感想をお寄せください。追ってご返信いたします。",
"location_title": "所在地"
}
}
}
+174
View File
@@ -0,0 +1,174 @@
{
"common": {
"title": {
"site_name": "大连华阳食品有限公司",
"site_home": "首页",
"about": "关于我们",
"product": "产品中心",
"product_detail": "产品详情",
"culture_nav": "华阳文化",
"contact": "联系我们",
"company_intro": "公司简介",
"honor": "资质荣誉",
"tech": "品质技术",
"timeline": "发展历程",
"store": "店面展示",
"store_location": "店面位置",
"mall": "华阳商城"
},
"button": {
"submit": "提交"
},
"placeholder": {
"name": "请输入姓名",
"phone": "请输入电话",
"email": "请输入邮箱",
"message": "请输入留言"
}
}
,
"home": {
"section3": {
"main": {
"title": "产品展示"
},
"more": "了解更多 >"
},
"section4": {
"main": {
"title": "华阳文化"
},
"more": "了解更多 >",
"cards": {
"select": {
"badge": "选",
"desc": "深海鲜冻海珍"
},
"freeze": {
"badge": "留",
"desc": "急速冻鲜加工"
},
"test": {
"badge": "测",
"desc": "保鲜无双检测"
},
"preserve": {
"badge": "藏",
"desc": "超临界鲜冻术"
},
"craft": {
"badge": "制",
"desc": "独家秘制工艺"
},
"deliver": {
"badge": "送",
"desc": "全程冷链配送"
},
"restore": {
"badge": "还",
"desc": "还原深海鲜肴"
}
}
}
}
,
"ui": {
"menu": "菜单",
"back_home": "返回首页",
"loading": {
"submitting": "提交中...",
"building": "内容建设中"
},
"form": {
"required_tip": "请完整填写必填项",
"contact_required": "请填写姓名、电话和留言内容",
"inquiry_required": "请完整填写姓名、电话和需求信息"
},
"status": {
"submit_ok_contact": "提交成功,我们将尽快联系您!",
"submit_ok_message": "留言提交成功,我们会尽快与您联系!",
"submit_ok_message_short": "留言提交成功,我们会尽快与您联系",
"submit_fail_retry": "提交失败,请稍后重试"
},
"network": {
"network_error": "网络错误",
"request_failed": "请求失败"
},
"empty": {
"recommend_products": "暂无推荐产品",
"products": "暂无产品",
"product_desc": "暂无详细描述"
},
"culture": {
"category_load_failed": "分类加载失败,请稍后重试",
"no_categories": "暂无文化分类,请在管理端「华阳文化页」中添加",
"tag_load_failed": "标签加载失败,请稍后重试",
"no_tags": "该分类下暂无内容,请在管理端添加文化标签",
"content_load_failed": "内容加载失败",
"content_not_found": "暂无该内容或已下架",
"back_list": "返回文化列表",
"read_count": "阅读量"
},
"product": {
"related": "相关产品",
"actions": {
"contact": "联系我们",
"detail": "产品详情"
},
"operate": "产品操作",
"contact_card": "联系方式",
"phone": "电话",
"email": "邮箱",
"address": "地址",
"back_list": "返回产品列表",
"inquiry_hint_prefix": "需要",
"inquiry": "产品咨询",
"inquiry_hint_before_link": "请填写本页下方表单,或",
"inquiry_hint_after_link": "。",
"qualifications": "资质与认证",
"price_prefix": "参考价格",
"rich": {
"watermark_brand": "华阳文化",
"scientific_name_label": "学名",
"latin_name_subcaption": "LATIN NAME",
"country_origin_label": "原产国",
"country_origin_subcaption": "COUNTRY OF ORIGIN",
"salmon_line_zh": "冻粉红鲑鱼系列",
"salmon_line_en_caps": "FROZEN PINK SALMON SERIES",
"salmon_wordmark": "PINK SALMON",
"salmon_line_ja": "カラフトマス",
"salmon_origin_zh": "俄罗斯,美国",
"salmon_origin_en": "RUSSIA, US"
}
},
"offline": {
"title_404": "404错误!",
"subtitle_not_found": "找不到网页!",
"desc_backend_offline": "对不起,当前服务暂不可用。请先启动后端服务,再刷新或返回首页。",
"refresh_retry": "刷新重试"
},
"contact": {
"loading_contacts": "联系方式加载中...",
"no_contacts": "暂未获取到联系方式。",
"submit_message": "提交留言"
},
"company": {
"store_loading_or_empty": "店面数据加载中或暂无数据",
"no_quality_content": "暂无品质技术相关内容,请在后台「品质技术」菜单添加。"
},
"loading_page": "页面加载中...",
"search": {
"prompt_keyword": "请输入搜索关键词:"
}
},
"contact": {
"label_hotline": "商务热线:",
"label_email": "E-mail:",
"label_address": "地址:",
"page": {
"online_title": "在线留言",
"online_hint": "您可以在这里留下意见和建议,我们会及时回复。",
"location_title": "我们的位置"
}
}
}
+4 -1
View File
@@ -1,5 +1,8 @@
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import i18n from './i18n'
import { initLanguage } from './api/language'
createApp(App).mount('#app')
initLanguage()
createApp(App).use(i18n).mount('#app')
+138
View File
@@ -0,0 +1,138 @@
const PAGE_META = {
home: {
title: 'Home',
pageId: '7fe175cc-1fde-4aef-8722-6cf9e35aa31d',
sourceKey: 'home'
},
about: {
title: 'About',
pageId: '0f314d44-bcb7-4dea-b818-1abd55ce0152',
sourceKey: 'about'
},
history: {
title: 'History',
pageId: '5fa12ca5-7145-40f4-b43c-346ffb358bd0',
sourceKey: 'history'
},
product: {
title: 'Product',
pageId: 'ca42b3fa-2fc5-4217-a099-272a787889b1',
sourceKey: 'product'
},
culture: {
title: 'Culture',
pageId: '9132410e-4e93-479d-ae6d-5ea1d5b6e50f',
sourceKey: 'culture'
},
contact: {
title: 'Contact',
pageId: 'contact-page',
sourceKey: 'contact'
}
}
const PAGE_SOURCE_LOADERS = {
home: async () => {
const [bodyRaw, assets, inlineScriptsRaw] = await Promise.all([
import('./generated/page-body.html?raw'),
import('./generated/assets.json'),
import('./generated/inline-scripts.txt?raw')
])
return {
bodyRaw: bodyRaw.default,
assets: assets.default,
inlineScriptsRaw: inlineScriptsRaw.default
}
},
about: async () => {
const [bodyRaw, assets, inlineScriptsRaw] = await Promise.all([
import('./generated/about-page-body.html?raw'),
import('./generated/about-assets.json'),
import('./generated/about-inline-scripts.txt?raw')
])
return {
bodyRaw: bodyRaw.default,
assets: assets.default,
inlineScriptsRaw: inlineScriptsRaw.default
}
},
history: async () => {
const [bodyRaw, assets, inlineScriptsRaw] = await Promise.all([
import('./generated/history-page-body.html?raw'),
import('./generated/history-assets.json'),
import('./generated/history-inline-scripts.txt?raw')
])
return {
bodyRaw: bodyRaw.default,
assets: assets.default,
inlineScriptsRaw: inlineScriptsRaw.default
}
},
product: async () => {
const [bodyRaw, assets, inlineScriptsRaw] = await Promise.all([
import('./generated/product-page-body.html?raw'),
import('./generated/product-assets.json'),
import('./generated/product-inline-scripts.txt?raw')
])
return {
bodyRaw: bodyRaw.default,
assets: assets.default,
inlineScriptsRaw: inlineScriptsRaw.default
}
},
culture: async () => {
const [bodyRaw, assets, inlineScriptsRaw] = await Promise.all([
import('./generated/culture-page-body.html?raw'),
import('./generated/culture-assets.json'),
import('./generated/culture-inline-scripts.txt?raw')
])
return {
bodyRaw: bodyRaw.default,
assets: assets.default,
inlineScriptsRaw: inlineScriptsRaw.default
}
},
contact: async () => {
const [bodyRaw, assets, inlineScriptsRaw] = await Promise.all([
import('./generated/contact-page-body.html?raw'),
import('./generated/contact-assets.json'),
import('./generated/contact-inline-scripts.txt?raw')
])
return {
bodyRaw: bodyRaw.default,
assets: assets.default,
inlineScriptsRaw: inlineScriptsRaw.default
}
}
}
const pageSourceCache = new Map()
export function hasPageConfig(pageKey) {
return Object.prototype.hasOwnProperty.call(PAGE_META, pageKey)
}
export async function loadPageConfig(pageKey) {
const safePageKey = hasPageConfig(pageKey) ? pageKey : 'home'
const pageMeta = PAGE_META[safePageKey]
const sourceKey = pageMeta.sourceKey
if (!pageSourceCache.has(sourceKey)) {
const loader = PAGE_SOURCE_LOADERS[sourceKey] || PAGE_SOURCE_LOADERS.home
pageSourceCache.set(sourceKey, loader())
}
const pageSource = await pageSourceCache.get(sourceKey)
return {
...pageMeta,
bodyRaw: pageSource.bodyRaw,
assets: pageSource.assets,
inlineScriptsRaw: pageSource.inlineScriptsRaw
}
}
+62 -361
View File
@@ -6,6 +6,24 @@ body,
min-height: 100%;
}
/*
* 仅 Logo/微信/Menu 所在条 .leftNav:占位层常 width:100% 且盖在 .topbar(中英日)之上,
* 但不改 z-index、不把 Menu 改成 fixed,避免顶栏跑版。
* 容器不接收命中,子元素恢复命中 → 空白处点击穿透到下层中英日。
*/
.haiho-page .header .leftNav {
pointer-events: none;
}
.haiho-page .header .leftNav * {
pointer-events: auto;
}
.haiho-page .header .topbar .user01 span[data-lang] {
pointer-events: auto;
cursor: pointer;
}
/* 移动端顶栏:归档导航 CSS 把 .p_iconBox 置于 top:40% 大侧栏坐标下,在 75px 顶栏内不可见;线条在浅底上也不明显 */
@media (max-width: 768px) {
.haiho-page .header {
@@ -29,6 +47,18 @@ body,
z-index: 1;
}
.haiho-page .header .topbar .user01 {
pointer-events: auto;
position: relative;
z-index: 50;
}
.haiho-page .header .topbar .user01 span[data-lang] {
pointer-events: auto;
position: relative;
z-index: 2;
}
.haiho-page .header .p_iconBox {
position: absolute !important;
right: 10px !important;
@@ -134,6 +164,12 @@ body[data-pageid='ca42b3fa-2fc5-4217-a099-272a787889b1'] .haiho-page #c_navigati
.haiho-page .saf-fullscreen > .swiper > .swiper-wrapper {
height: 100%;
will-change: transform;
}
.haiho-page .saf-fullscreen > .swiper:not(.swiper-horizontal) > .swiper-wrapper {
display: block !important;
transform: translate3d(0, 0, 0);
}
.haiho-page .saf-fullscreen > .swiper > .swiper-wrapper > .swiper-slide {
@@ -142,6 +178,11 @@ body[data-pageid='ca42b3fa-2fc5-4217-a099-272a787889b1'] .haiho-page #c_navigati
overflow: hidden;
}
body.hy-home-fullpage-transitioning .haiho-page .huayang-honor-marquee-track,
body.hy-home-fullpage-transitioning .haiho-page .huayang-store-showcase-marquee__track {
animation-play-state: paused !important;
}
.haiho-page .e_bannerA-6 .swiper-container,
.haiho-page .e_bannerA-6 .swiper-wrapper,
.haiho-page .e_bannerA-6 .swiper-slide {
@@ -316,53 +357,12 @@ body[data-pageid='ca42b3fa-2fc5-4217-a099-272a787889b1'] .haiho-page #c_navigati
}
.haiho-page .haiho-product-detail-layout {
display: flex;
flex-direction: row;
align-items: flex-start;
gap: 24px;
}
.haiho-page .haiho-product-detail-sidebar {
flex: 0 0 240px;
position: sticky;
top: 88px;
}
.haiho-page .haiho-product-detail-sidecard {
background: #fff;
border: 1px solid #e2e8f0;
border-radius: 10px;
padding: 20px 16px;
font-size: 14px;
color: #334155;
line-height: 1.6;
}
.haiho-page .haiho-product-detail-sidecard__title {
margin: 0 0 16px;
font-size: 16px;
font-weight: 600;
color: #0f172a;
padding-bottom: 10px;
border-bottom: 1px solid #ebeef5;
}
.haiho-page .haiho-product-detail-sidecard__block {
margin: 0 0 12px;
}
.haiho-page .haiho-product-detail-sidecard a {
color: #e60012;
text-decoration: none;
}
.haiho-page .haiho-product-detail-sidecard a:hover {
text-decoration: underline;
display: block;
}
.haiho-page .haiho-product-detail-back {
display: inline-block;
margin-top: 16px;
margin-bottom: 18px;
padding: 8px 14px;
border-radius: 8px;
border: 1px solid #cbd5e1;
@@ -432,32 +432,6 @@ body[data-pageid='ca42b3fa-2fc5-4217-a099-272a787889b1'] .haiho-page #c_navigati
font-weight: 700;
}
.haiho-page .haiho-product-detail-meta {
margin: 20px 0 24px;
padding: 16px 0;
border-top: 1px solid #ebeef5;
border-bottom: 1px solid #ebeef5;
text-align: center;
}
.haiho-page .haiho-product-detail-meta__link {
color: #e60012;
font-size: 18px;
font-weight: 600;
text-decoration: none;
}
.haiho-page .haiho-product-detail-meta__link:hover {
text-decoration: underline;
}
.haiho-page .haiho-product-detail-meta__hr {
border: none;
border-top: 1px solid #e2e8f0;
margin: 14px auto;
max-width: 280px;
}
.haiho-page .haiho-product-detail-desc {
line-height: 1.85;
font-size: 15px;
@@ -571,37 +545,6 @@ body[data-pageid='ca42b3fa-2fc5-4217-a099-272a787889b1'] .haiho-page #c_navigati
overflow: hidden;
}
.haiho-page .haiho-product-detail-inquiry-hint {
margin: 28px 0 0;
padding: 14px 16px;
background: #f8fafc;
border-radius: 8px;
font-size: 14px;
color: #64748b;
border: 1px solid #e2e8f0;
}
.haiho-page .haiho-product-detail-inquiry-hint a {
color: #2563eb;
text-decoration: none;
}
.haiho-page .haiho-product-detail-inquiry-hint a:hover {
text-decoration: underline;
}
@media (max-width: 900px) {
.haiho-page .haiho-product-detail-layout {
flex-direction: column;
}
.haiho-page .haiho-product-detail-sidebar {
flex: none;
width: 100%;
position: static;
}
}
/* Product detail image swiper */
.haiho-page .product-detail-swiper .swiper {
width: 100%;
@@ -643,20 +586,21 @@ body[data-pageid='ca42b3fa-2fc5-4217-a099-272a787889b1'] .haiho-page #c_navigati
}
/*
* 首页「华阳七道鲜」.industry-list
* 首页「华阳文化」.industry-list
* 归档 CSS 依赖 legacy JS 为子项切换 .now / .sible 宽度;SPA 关闭 ENABLE_LEGACY_RUNTIME 后失效。
* 以下用 flex + :has(> div:hover) 还原悬停展开,子项数量变化时仍按比例分配。
*/
@media screen and (min-width: 769px) {
.haiho-page #c_static_001_P_33409-1715331797067 .industry-list {
.haiho-page [id^='c_static_001_P_33409-'] .industry-list {
display: flex !important;
flex-direction: row;
flex-wrap: nowrap !important;
align-items: stretch;
box-sizing: border-box;
overflow: hidden;
}
.haiho-page #c_static_001_P_33409-1715331797067 .industry-list > div {
.haiho-page [id^='c_static_001_P_33409-'] .industry-list > div {
float: none !important;
width: auto !important;
flex: 1 1 0 !important;
@@ -668,14 +612,14 @@ body[data-pageid='ca42b3fa-2fc5-4217-a099-272a787889b1'] .haiho-page #c_navigati
transition: flex 0.45s cubic-bezier(0.4, 0, 0.2, 1) !important;
}
.haiho-page #c_static_001_P_33409-1715331797067 .industry-list > div .e_image-6 {
.haiho-page [id^='c_static_001_P_33409-'] .industry-list > div .e_image-6 {
position: relative;
flex: 1 1 auto;
min-height: 0;
overflow: hidden;
}
.haiho-page #c_static_001_P_33409-1715331797067 .industry-list > div .e_image-6 img {
.haiho-page [id^='c_static_001_P_33409-'] .industry-list > div .e_image-6 img {
width: 100% !important;
height: 100% !important;
min-height: 0 !important;
@@ -688,20 +632,20 @@ body[data-pageid='ca42b3fa-2fc5-4217-a099-272a787889b1'] .haiho-page #c_navigati
}
@media screen and (min-width: 769px) and (hover: hover) and (pointer: fine) {
.haiho-page #c_static_001_P_33409-1715331797067 .industry-list:has(> div:hover) > div:not(:hover) {
.haiho-page [id^='c_static_001_P_33409-'] .industry-list:has(> div:hover) > div:not(:hover) {
flex: 0.52 1 0 !important;
}
.haiho-page #c_static_001_P_33409-1715331797067 .industry-list > div:hover {
.haiho-page [id^='c_static_001_P_33409-'] .industry-list > div:hover {
flex: 3.2 1 0 !important;
}
.haiho-page #c_static_001_P_33409-1715331797067 .industry-list > div:hover .e_image-6 img {
.haiho-page [id^='c_static_001_P_33409-'] .industry-list > div:hover .e_image-6 img {
opacity: 1 !important;
transform: scale(1.07) !important;
}
.haiho-page #c_static_001_P_33409-1715331797067 .industry-list > div:hover .e_image-6:after {
.haiho-page [id^='c_static_001_P_33409-'] .industry-list > div:hover .e_image-6:after {
opacity: 0.05 !important;
}
}
@@ -845,12 +789,6 @@ body[data-pageid='about-honor-page'] .haiho-page #c_static_001_P_4578-1694141444
box-sizing: border-box;
}
.haiho-page #c_static_001_P_4578-16941414442160 .huayang-honor-card-link {
display: block;
color: inherit;
text-decoration: none;
}
.haiho-page #c_static_001_P_4578-16941414442160 .huayang-honor-card-inner {
padding: 12px 12px 16px;
}
@@ -880,8 +818,7 @@ body[data-pageid='about-honor-page'] .haiho-page #c_static_001_P_4578-1694141444
text-align: center;
}
.haiho-page #c_static_001_P_4578-16941414442160 .huayang-honor-card-type,
.haiho-page #c_static_001_P_4578-16941414442160 .huayang-honor-card-desc {
.haiho-page #c_static_001_P_4578-16941414442160 .huayang-honor-card-type {
margin: 6px 0 0;
font-size: 12px;
line-height: 1.4;
@@ -1513,248 +1450,12 @@ body[data-pageid='3dab96dd-d8d5-45e3-af9a-ff735532e65c']
min-width: 0;
}
/* 新闻详情封面:与列表图一致的小图规格,避免超大图 */
.haiho-page .news-detail-container .news-cover-thumb {
text-align: left;
margin-bottom: 16px;
}
.haiho-page .news-detail-container .news-cover-thumb img {
width: 180px;
height: 110px;
object-fit: cover;
border-radius: 8px;
display: block;
}
/* 新闻动态正文内图片:限制尺寸(含 Quill 写入的内联宽高) */
.haiho-page .news-rich-text img,
.haiho-page .e_richText-40.news-rich-text img,
.haiho-page .news-detail-container .e_richText-40 img {
max-width: min(100%, 720px) !important;
width: auto !important;
height: auto !important;
object-fit: contain;
display: block;
margin: 12px auto;
border-radius: 8px;
box-sizing: border-box;
}
.haiho-page .news-rich-text p,
.haiho-page .e_richText-40.news-rich-text p {
overflow-wrap: break-word;
}
/* 新闻详情富文本:正文内嵌视频(上传 mp4)与外链 iframe(YouTube 等) */
.haiho-page .news-rich-text video,
.haiho-page .news-rich-text iframe.ql-video {
max-width: 100%;
display: block;
margin: 12px auto;
border-radius: 8px;
}
/* 新闻中心分类 Tab:接口注入后当前分类高亮(bindNewsCategoryTabs) */
.haiho-page .e_loop-3 .p_loopitem.huayang-news-tab--active .e_text-4 a {
color: #cf261d;
font-weight: 600;
}
/* 新闻列表(injectNewsList):左封面 + 中标题 + 右日期,封面约 16:9 */
.haiho-page .p_list .huayang-news-list-item {
margin-bottom: 12px;
}
.haiho-page .p_list .huayang-news-list-item:last-child {
margin-bottom: 0;
}
.haiho-page .huayang-news-list-item__inner {
box-sizing: border-box;
display: flex;
flex-direction: row;
align-items: center;
gap: 16px;
width: 100%;
padding: 12px 16px;
background: #fff;
border: 1px solid #e8eef4;
border-radius: 10px;
}
.haiho-page .huayang-news-list-item__thumb {
flex: 0 0 220px;
width: 220px;
max-width: 26%;
aspect-ratio: 16 / 9;
border-radius: 8px;
overflow: hidden;
display: block;
flex-shrink: 0;
}
.haiho-page .huayang-news-list-item__thumb img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
.haiho-page .huayang-news-list-item__main {
flex: 1;
min-width: 0;
}
.haiho-page .huayang-news-list-item__title {
font-size: 17px;
font-weight: 600;
color: #1f2937;
text-decoration: none;
line-height: 1.5;
display: block;
}
.haiho-page .huayang-news-list-item__title:hover {
color: #cf261d;
}
/* 新闻列表底部分页(归档 HTML .p_page + injectNewsList 注入) */
.haiho-page .e_loop-16 .p_page.huayang-news-pagination .page_con,
.haiho-page .e_loop-20 .p_page.huayang-news-pagination .page_con {
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
margin-top: 16px;
flex-wrap: wrap;
}
.haiho-page .e_loop-16 .p_page.huayang-news-pagination button.page_a,
.haiho-page .e_loop-20 .p_page.huayang-news-pagination button.page_a {
box-sizing: border-box;
min-width: 36px;
height: 36px;
padding: 0 10px;
margin: 0;
border: 1px solid #d1d5db;
border-radius: 6px;
background: #fff;
color: #374151;
font-size: 14px;
line-height: 1;
font-family: inherit;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}
.haiho-page .e_loop-16 .p_page.huayang-news-pagination button.page_a.page_num.current,
.haiho-page .e_loop-20 .p_page.huayang-news-pagination button.page_a.page_num.current {
background: #cf261d;
border-color: #cf261d;
color: #fff;
}
.haiho-page .e_loop-16 .p_page.huayang-news-pagination button.page_a:disabled,
.haiho-page .e_loop-20 .p_page.huayang-news-pagination button.page_a:disabled {
background: #f3f4f6;
border-color: #e5e7eb;
color: #9ca3af;
cursor: not-allowed;
}
/* 独立新闻页 NewsPage.vue 分页(与上同款) */
.haiho-page .huayang-news-pager,
.huayang-news-pager {
display: flex;
justify-content: center;
align-items: center;
gap: 8px;
margin-top: 16px;
flex-wrap: wrap;
}
.haiho-page .huayang-news-pager__btn,
.huayang-news-pager__btn {
box-sizing: border-box;
min-width: 36px;
height: 36px;
padding: 0 10px;
margin: 0;
border: 1px solid #d1d5db;
border-radius: 6px;
background: #fff;
color: #374151;
font-size: 14px;
line-height: 1;
font-family: inherit;
cursor: pointer;
display: inline-flex;
align-items: center;
justify-content: center;
transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}
.haiho-page .huayang-news-pager__btn.is-active,
.huayang-news-pager__btn.is-active {
background: #cf261d;
border-color: #cf261d;
color: #fff;
}
.haiho-page .huayang-news-pager__btn:disabled,
.huayang-news-pager__btn:disabled {
background: #f3f4f6;
border-color: #e5e7eb;
color: #9ca3af;
cursor: not-allowed;
}
.haiho-page .huayang-news-list-item__date {
flex: 0 0 auto;
display: flex;
flex-direction: column;
align-items: flex-end;
justify-content: center;
text-align: right;
padding-left: 8px;
}
.haiho-page .huayang-news-list-item__ym {
font-size: 14px;
color: #64748b;
margin-top: 0;
}
@media (max-width: 768px) {
.haiho-page .huayang-news-list-item__inner {
flex-wrap: wrap;
align-items: flex-start;
}
.haiho-page .huayang-news-list-item__thumb {
flex: 0 0 120px;
width: 120px;
max-width: 38%;
}
.haiho-page .huayang-news-list-item__main {
flex: 1;
min-width: 0;
}
.haiho-page .huayang-news-list-item__date {
width: 100%;
flex-direction: row;
align-items: baseline;
justify-content: flex-end;
gap: 8px;
padding-left: 0;
margin-top: 8px;
}
.haiho-page .huayang-news-list-item__ym {
margin-top: 0;
}
/* 页脚红条:隐藏「留资」表单(白底输入框 + 红色提交按钮)以及上方文案 e_text-92/93 */
.haiho-page .e_container-74 .e_form-94.s_form_layout1,
.haiho-page .s_tmpl_footer .e_form-94.s_form_layout1,
.haiho-page .e_container-74 .e_text-92,
.haiho-page .e_container-74 .e_text-93,
.haiho-page .s_tmpl_footer .e_text-92,
.haiho-page .s_tmpl_footer .e_text-93 {
display: none !important;
}
+104 -25
View File
@@ -1,16 +1,25 @@
/**
* 统一资源路径解析工具
* 逻辑优先级:
* 1. 项目静态资源 (/assets/) -> 直接返回
* 2. 完整 URL 且为 /profile 资源 -> 若指向本机开发地址则改为同源 /profile,避免正式站仍请求 localhost
* 3. 其它完整 URL -> 原样返回
* 4. 相对路径:去掉 /dev-api 等若依前缀后,统一为 /profile/... 供 Nginx/Vite 代理
* 统一资源路径解析(门户各模块共用)
* - 多图逗号分隔时取第一张
* - 去掉若依接口前缀 /dev-api、/prod-api、/stage-api
* - 若库中存的是 http://localhost(或 127.0.0.1 等)/profile|/assets|/images|/resource/...,
* 转为同源路径,避免正式环境仍请求本机开发端口导致 404
* - 相对路径由 Vite 开发代理或 Nginx 反代到后端
*/
const LOCAL_HOST_SET = new Set(['localhost', '127.0.0.1', '0.0.0.0', '[::1]'])
const PROFILE_UPLOAD_CACHE_BUSTER = `cb=${Date.now().toString(36)}`
const RESOURCE_BASE_URL = String(import.meta.env.VITE_RESOURCE_BASE_URL || '').replace(/\/+$/, '')
const FORCE_IMAGE_CACHE_BUSTER =
String(import.meta.env.VITE_FORCE_IMAGE_CACHE_BUSTER ?? 'false').toLowerCase() === 'true'
const PROFILE_UPLOAD_CACHE_BUSTER_VALUE = String(
import.meta.env.VITE_IMAGE_CACHE_BUSTER || Date.now().toString(36)
)
const PROFILE_UPLOAD_CACHE_BUSTER = `cb=${encodeURIComponent(PROFILE_UPLOAD_CACHE_BUSTER_VALUE)}`
export const BLANK_IMAGE_DATA_URI =
'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=='
function shouldBypassCache() {
if (typeof window === 'undefined') return false
if (FORCE_IMAGE_CACHE_BUSTER) return true
return LOCAL_HOST_SET.has(String(window.location.hostname || '').toLowerCase())
}
@@ -21,32 +30,102 @@ function appendProfileUploadCacheBuster(input) {
return input.includes('?') ? `${input}&${PROFILE_UPLOAD_CACHE_BUSTER}` : `${input}?${PROFILE_UPLOAD_CACHE_BUSTER}`
}
function resolveBackendResource(path) {
const value = appendProfileUploadCacheBuster(path)
if (!RESOURCE_BASE_URL || !/^\/(?:profile|images|resource)\//i.test(value)) return value
return `${RESOURCE_BASE_URL}${value}`
}
export function resolveImageUrl(url) {
if (!url) return ''
const first = String(url).split(',')[0].trim().replace(/\\/g, '/')
if (!first) return ''
if (/^(?:data|blob):/i.test(first)) return first
const firstUrl = url.split(',')[0].trim()
if (!firstUrl) return ''
if (firstUrl.startsWith('/assets/')) return firstUrl
if (/^https?:\/\//i.test(firstUrl)) {
if (/^https?:\/\//i.test(first)) {
try {
const u = new URL(firstUrl)
if (u.pathname.startsWith('/profile')) {
const h = u.hostname
if (h === 'localhost' || h === '127.0.0.1' || h === '0.0.0.0') {
return appendProfileUploadCacheBuster(u.pathname + (u.search || ''))
}
const u = new URL(first)
const pathOnly = u.pathname + (u.search || '')
const h = String(u.hostname || '').toLowerCase()
const loopback = LOCAL_HOST_SET.has(h)
if (loopback && u.pathname.startsWith('/assets')) {
return BLANK_IMAGE_DATA_URI
}
if (
loopback &&
(u.pathname.startsWith('/profile') ||
u.pathname.startsWith('/images') ||
u.pathname.startsWith('/resource'))
) {
return resolveBackendResource(pathOnly)
}
} catch {
/* ignore */
}
return appendProfileUploadCacheBuster(firstUrl)
return appendProfileUploadCacheBuster(first)
}
let p = firstUrl.startsWith('/') ? firstUrl : `/${firstUrl}`
p = p.replace(/^\/(?:dev-api|prod-api|stage-api)(?=\/)/, '')
const cleanPath = p.startsWith('/') ? p.slice(1) : p
const resolved = cleanPath.startsWith('profile/') ? `/${cleanPath}` : `/profile/${cleanPath}`
return appendProfileUploadCacheBuster(resolved)
let path = first.startsWith('/') ? first : `/${first}`
path = path.replace(/^\/(?:dev-api|prod-api|stage-api)(?=\/)/i, '')
if (path.startsWith('/assets/')) {
return BLANK_IMAGE_DATA_URI
}
if (
path.startsWith('/profile/') ||
path.startsWith('/images/') ||
path.startsWith('/resource/')
) {
return resolveBackendResource(path)
}
if (path.startsWith('/')) {
return appendProfileUploadCacheBuster(path)
}
return appendProfileUploadCacheBuster(first)
}
function escapeAttr(value) {
return String(value || '')
.replace(/&/g, '&amp;')
.replace(/"/g, '&quot;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
}
function resolveSrcset(value) {
return String(value || '')
.split(',')
.map((part) => {
const pieces = part.trim().split(/\s+/).filter(Boolean)
if (!pieces.length) return ''
const resolved = resolveImageUrl(pieces[0])
if (!resolved) return ''
return [resolved, ...pieces.slice(1)].join(' ')
})
.filter(Boolean)
.join(', ')
}
export function resolveRichImageHtml(html) {
if (html == null || html === '') return ''
return String(html)
.replace(
/\s(src|data-src|data-original|lazy)=("([^"]*)"|'([^']*)'|([^\s>]+))/gi,
(full, attr, _raw, dqValue, sqValue, bareValue) => {
const rawValue = dqValue ?? sqValue ?? bareValue ?? ''
const resolved = resolveImageUrl(rawValue)
return resolved ? ` ${attr}="${escapeAttr(resolved)}"` : full
}
)
.replace(
/\ssrcset=("([^"]*)"|'([^']*)')/gi,
(full, _raw, dqValue, sqValue) => {
const resolved = resolveSrcset(dqValue ?? sqValue ?? '')
return resolved ? ` srcset="${escapeAttr(resolved)}"` : full
}
)
.replace(/url\(\s*(['"]?)([^'")]+)\1\s*\)/gi, (full, _quote, rawUrl) => {
const resolved = resolveImageUrl(rawUrl)
return resolved ? `url("${escapeAttr(resolved)}")` : full
})
}
+63
View File
@@ -0,0 +1,63 @@
const asyncCacheStore = new Map()
export async function remember(key, loader, options = {}) {
const ttlMs = Number(options.ttlMs) > 0 ? Number(options.ttlMs) : 30000
const cacheEmpty = options.cacheEmpty !== false
const now = Date.now()
const hit = asyncCacheStore.get(key)
if (hit) {
if (hit.promise) return hit.promise
if (hit.expiresAt > now) return hit.value
}
const promise = Promise.resolve().then(loader)
asyncCacheStore.set(key, {
value: hit?.value,
expiresAt: hit?.expiresAt || 0,
promise
})
try {
const value = await promise
const shouldCache =
cacheEmpty ||
!(
value == null ||
value === '' ||
(Array.isArray(value) && value.length === 0)
)
if (shouldCache) {
asyncCacheStore.set(key, {
value,
expiresAt: Date.now() + ttlMs,
promise: null
})
} else {
asyncCacheStore.delete(key)
}
return value
} catch (error) {
asyncCacheStore.delete(key)
throw error
}
}
export function forget(key) {
asyncCacheStore.delete(key)
}
export function clearByPrefix(prefix = '') {
if (!prefix) {
asyncCacheStore.clear()
return
}
for (const key of asyncCacheStore.keys()) {
if (String(key).startsWith(prefix)) {
asyncCacheStore.delete(key)
}
}
}
+68
View File
@@ -0,0 +1,68 @@
/** 1×1 透明 GIF,归档占位图注入前使用,避免请求不存在的 /assets/ 文件 */
export const ARCHIVE_IMG_PLACEHOLDER =
'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=='
/**
* 将归档 HTML 中 eager 的 img src 改为 lazy 延迟加载(配合 setupLegacyLazyImageFallback)
*/
export function deferArchiveImages(html) {
if (!html) return html
return html.replace(/<img\b([^>]*)>/gi, (full, inner) => {
if (/\blazy\s*=/i.test(inner)) return full
const srcMatch = inner.match(/\bsrc\s*=\s*(["'])([^"']+)\1/i)
if (!srcMatch) return full
const src = srcMatch[2].trim()
if (!src || src.startsWith('data:')) return full
const quote = srcMatch[1]
const withoutSrc = inner.replace(srcMatch[0], '').trim()
const spacer = withoutSrc ? ` ${withoutSrc}` : ''
return `<img src=${quote}${ARCHIVE_IMG_PLACEHOLDER}${quote} lazy=${quote}${src}${quote}${spacer}>`
})
}
/** 去掉归档 HTML 内联 style 中的 background url,避免首屏请求无效静态图 */
export function neutralizeArchiveInlineBackgrounds(html) {
if (!html) return html
return html.replace(/\bstyle\s*=\s*(["'])([\s\S]*?)\1/gi, (full, quote, style) => {
if (!/url\s*\(/i.test(style)) return full
const cleaned = style
.replace(/background-image\s*:\s*url\([^)]*\)\s*;?/gi, '')
.replace(/background\s*:\s*[^;]*url\([^)]*\)[^;]*;?/gi, '')
.replace(/;\s*;/g, ';')
.trim()
if (cleaned === style.trim()) return full
if (!cleaned) return ''
return `style=${quote}${cleaned}${quote}`
})
}
/** @param {'high'|'lazy'} mode */
export function applyImageLoadPriority(img, mode = 'lazy') {
if (!img) return
img.decoding = 'async'
if (mode === 'high') {
img.loading = 'eager'
img.setAttribute('fetchpriority', 'high')
} else {
img.loading = 'lazy'
img.removeAttribute('fetchpriority')
}
}
/** 区块进入视口后再应用全屏背景,减少首屏外大图请求 */
export function observeDeferredBackground(target, applyFn, rootMargin = '120px 0px') {
if (!target || typeof applyFn !== 'function') return
if (!('IntersectionObserver' in window)) {
applyFn()
return
}
const observer = new IntersectionObserver(
(entries) => {
if (!entries.some((e) => e.isIntersecting)) return
applyFn()
observer.disconnect()
},
{ rootMargin }
)
observer.observe(target)
}
+51
View File
@@ -0,0 +1,51 @@
let swiperClassPromise = null
let swiperStylesPromise = null
export function ensureSwiperStyles() {
if (typeof document !== 'undefined' && document.documentElement.dataset.haihoSwiperStyles === '1') {
return Promise.resolve()
}
if (!swiperStylesPromise) {
swiperStylesPromise = import('swiper/css/bundle')
.then(() => {
if (typeof document !== 'undefined') {
document.documentElement.dataset.haihoSwiperStyles = '1'
}
})
.catch((error) => {
swiperStylesPromise = null
throw error
})
}
return swiperStylesPromise
}
export function ensureSwiperClass() {
if (typeof window !== 'undefined' && window.Swiper) {
return Promise.resolve(window.Swiper)
}
if (!swiperClassPromise) {
swiperClassPromise = import('swiper/bundle')
.then((mod) => {
const SwiperClass = mod?.default || mod?.Swiper || null
if (SwiperClass && typeof window !== 'undefined' && !window.Swiper) {
window.Swiper = SwiperClass
}
return SwiperClass
})
.catch((error) => {
swiperClassPromise = null
throw error
})
}
return swiperClassPromise
}
export async function ensureSwiperRuntime() {
const [SwiperClass] = await Promise.all([ensureSwiperClass(), ensureSwiperStyles()])
return SwiperClass
}
+2 -1
View File
@@ -4,7 +4,7 @@ import vue from '@vitejs/plugin-vue'
// https://vite.dev/config/
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '')
const proxyTarget = env.VITE_DEV_PROXY_TARGET || 'http://localhost:8080'
const proxyTarget = env.VITE_DEV_PROXY_TARGET || 'http://localhost:7003'
const staticOnlyMode = mode === 'development' && env.VITE_STATIC_ONLY !== 'false'
const proxy = staticOnlyMode
? undefined
@@ -35,6 +35,7 @@ export default defineConfig(({ mode }) => {
chunkSizeWarningLimit: 3072
},
server: {
port: Number(env.VITE_PORT || 7002),
proxy,
host: '0.0.0.0'
},