feat(site): integrate multilingual content management / 集成多语言内容管理
完善官网、管理后台与后端的多语言内容编辑和发布流程,调整站点页面及相关接口,并同步数据库脚本。 新增容器部署配置,改用环境变量注入数据库凭据;补充仓库忽略规则,并停止跟踪本地环境文件和 Maven 构建产物。
No files matched your search
@@ -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
|
||||
@@ -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
|
||||
@@ -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>
|
||||
|
||||
@@ -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 +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 |
@@ -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)
|
||||
})
|
||||
@@ -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>`
|
||||
}
|
||||
|
||||
|
||||
@@ -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, '&')
|
||||
@@ -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')
|
||||
|
||||
@@ -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}`)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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, ''')
|
||||
}
|
||||
|
||||
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}`
|
||||
}
|
||||
@@ -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}"]`))
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
@@ -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, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, ''')
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -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, ''')
|
||||
}
|
||||
|
||||
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}`)
|
||||
|
||||
@@ -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, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, ''')
|
||||
}
|
||||
|
||||
/** 列表页右侧日期:年/月 */
|
||||
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' : ''}><</button>
|
||||
${nums}
|
||||
<button type="button" class="page_a page_next" aria-label="下一页" ${nextDisabled ? 'disabled' : ''}>></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>
|
||||
`
|
||||
}
|
||||
@@ -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, ''')
|
||||
}
|
||||
|
||||
/**
|
||||
* 产品富文本中「写死在 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'))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"')
|
||||
.replace(/'/g, ''')
|
||||
}
|
||||
|
||||
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
|
||||
})
|
||||
|
||||
|
Before Width: | Height: | Size: 44 KiB |
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -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">
|
||||
<
|
||||
</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">
|
||||
>
|
||||
</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>
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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(/ /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
|
||||
}
|
||||
@@ -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="{"ignoreEmptyCheck":true,"cname":"企业概况-列表接口","type":"list","params":{"size":6,"query":[{"valueName":"关于我们","dataType":"array[category]","operator":"in","filter":"ignore-empty-check","esField":"DETAIL_ES.es_multi_category_01Sy2jv4","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"category_01Sy2jv4","sourceType":"static","logic":"and","groupBegin":"1,2","value":"2661","fieldType":"array"}],"header":{"Data-Query-Es-Field":"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName","Data-Query-Random":0,"Data-Query-Field":"text_r4O05cao,categoryName"},"from":0,"sort":[]},"valueUrl":"/fwebapi/cms/lowcode/60007/18515/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"60007","sourceUuid":"1441959640303796224","pageParams":[],"metaUrl":"/fwebapi/cms/lowcode/60007/18515/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/60007/18515/list?cate=0","id":"datasource10","apiId":"18515","reqKey":"/fwebapi/cms/lowcode/60007/18515/list?cate=0|{\"size\":6,\"query\":[{\"valueName\":\"关于我们\",\"dataType\":\"array[category]\",\"operator\":\"in\",\"filter\":\"ignore-empty-check\",\"esField\":\"DETAIL_ES.es_multi_category_01Sy2jv4\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"category_01Sy2jv4\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"2661\",\"fieldType\":\"array\"}],\"header\":{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_r4O05cao,categoryName\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_r4O05cao,categoryName\"}"}">
|
||||
@@ -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="{"ignoreEmptyCheck":true,"cname":"产品-产品列表","type":"list","params":{"size":20,"query":[{"filter":"ignore-empty-check","esField":"category.id","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"categoryId","valueName":"Qualification","sourceType":"static","dataType":"string","logic":"and","groupBegin":"1,2","value":"1149732735974268928","operator":"eq"}],"header":{"Data-Query-Es-Field":"","Data-Query-Random":0,"Data-Query-Field":""},"from":0,"sort":[]},"valueUrl":"/fwebapi/product/datasource/143150160001/product/list/param/value","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"appId":"143150160001","sourceUuid":"d2f12f858d9f46eeb5b049baa1dffc37","pageParams":[],"metaUrl":"/fwebapi/product/datasource/143150160001/product/list/meta","disabled":false,"api":"/fwebapi/product/product/es/findPage?appId=143150160001&templateId=product","id":"datasource4","apiId":"product","reqKey":"/fwebapi/product/product/es/findPage?appId=143150160001&templateId=product|{\"size\":20,\"query\":[{\"filter\":\"ignore-empty-check\",\"esField\":\"category.id\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"categoryId\",\"valueName\":\"Qualification\",\"sourceType\":\"static\",\"dataType\":\"string\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"1149732735974268928\",\"operator\":\"eq\"}],\"header\":{\"Data-Query-Es-Field\":\"\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"\"}"}">
|
||||
<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="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
|
||||
<input name="i18nJson" type="hidden" value="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
</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"> </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;">您可以查看其他栏目或返回 <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="{"ignoreEmptyCheck":true,"cname":"在线客服-列表接口","type":"list","params":{"size":20,"query":[{"valueName":"","dataType":"number","operator":"eq","filter":"ignore-empty-check","esField":"CID","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"CID","sourceType":"static","logic":"and","groupBegin":"1,2","value":"","fieldType":"number","configurable":{"sourceType":"page","type":"normal","value":"_detailId"}}],"header":{"Data-Query-Es-Field":"TEXT_DETAIL_ES.es_text_rudao","Data-Query-Random":0,"Data-Query-Field":"rudao"},"from":0,"sort":[]},"valueUrl":"/fwebapi/cms/lowcode/125326/407257/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"125326","sourceUuid":"1473112731287683072","pageParams":[{"code":"_detailId","name":"默认参数"}],"metaUrl":"/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/125326/407257/list?cate=0","id":"datasource1","apiId":"407257","reqKey":"/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\"size\":20,\"query\":[{\"valueName\":\"\",\"dataType\":\"number\",\"operator\":\"eq\",\"filter\":\"ignore-empty-check\",\"esField\":\"CID\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"CID\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"\",\"fieldType\":\"number\",\"configurable\":{\"sourceType\":\"page\",\"type\":\"normal\",\"value\":\"_detailId\"}}],\"header\":{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"}"}">
|
||||
<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
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 1011 KiB |
|
Before Width: | Height: | Size: 984 KiB |
|
Before Width: | Height: | Size: 509 KiB |
|
Before Width: | Height: | Size: 776 KiB |
|
Before Width: | Height: | Size: 629 KiB |
|
Before Width: | Height: | Size: 613 KiB |
|
Before Width: | Height: | Size: 456 KiB |
|
Before Width: | Height: | Size: 376 KiB |
|
Before Width: | Height: | Size: 738 KiB |
|
Before Width: | Height: | Size: 1.3 MiB |
|
Before Width: | Height: | Size: 427 KiB |
|
Before Width: | Height: | Size: 336 KiB |
|
Before Width: | Height: | Size: 823 KiB |
@@ -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="{"required_15":"请输入内容","minLength_14":"您输入的内容不能少于%len个字符","pageItem_21":"条","minLength_15":"您输入的内容不能少于%len个字符","noMore_21":"没有更多了","minLength_12":"您输入的内容不能少于%len个字符","required_12":"请输入内容","required_14":"请输入内容","pageJump_21":"前往","pageUnit_21":"页","pageWhole_21":"共","maxLength_12":"您输入的内容不能多于%len个字符","loadMore_21":"点击加载更多","loadNow_21":"加载中","maxLength_15":"您输入的内容不能多于%len个字符","clearConditions_21":"清空条件","maxLength_14":"您输入的内容不能多于%len个字符","noData_21":"暂无数据","conditions_21":"条件:"}">
|
||||
</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("http://webmap0.bdimg.com/image/api/bg.png"); text-align: left; touch-action: none;"><div id="platform" style="overflow: visible; position: absolute; z-index: 5; left: 0px; top: 0px; cursor: url("http://webmap0.bdimg.com/image/api/openhand.cur") 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;">© 2026 Baidu - GS(2025)4125号 - 甲测资字11111342 - 京ICP证030173号 - Data © 百度智图</span></span></div></div>
|
||||
</div></div>
|
||||
</div>
|
||||
<input type="hidden" name="propJson" value="{"state_15":"normal","state_13":"normal","state_14":"normal","business_16":[],"rule_10":[],"href_26":{"type":"none","value":"","target":""},"href_25":{"type":"none","value":"","target":""},"showLabel_12":false,"showLabel_13":false,"showLabel_14":false,"customParam_14":"","showLabel_15":false,"state_12":"normal","action_16":1,"zoom_46":14,"ddItem_12":{},"ddItem_14":{},"href_36":{"type":"none","value":"","target":""},"styleIdNumber_46":"76b42fb3e69d26ea9edd7e25f73f83fb","ddItem_15":{},"value_15":"","value_13":"","value_14":"","infoWidth_46":256,"lng_46":121.416239,"value_12":"","type_12":"text","dense_25":"","type_13":"tel","dense_26":"","placeholder_14":"您的邮箱","type_16":1,"placeholder_13":"您的电话","submit_10":{"obj2":{"type":"customPage","value":{"type":"link","params":[],"value":"/successfully.html"},"target":"_self"},"obj1":{"result":1,"request":[],"promptTime":0,"prompt":"提交成功!"},"logic":[],"type":1,"obj3":{}},"placeholder_12":"您的姓名","type_14":"email","basic_10":{"submitLimit":{"unit":1,"count":1,"interval":1,"peopleLimit":1,"limitRule":1},"submitTime":{"limit":2,"startTime":"","endTime":"","prompt":""},"formInfo":{"app":"120113","name":"lxly","title":"联系留言"},"advanced":{"customState":[],"message":1}},"placeholder_15":"您的留言内容","label_12":"姓名","label_13":"电话号码","href_17":{"type":"none","value":"","target":""},"label_14":"邮箱","label_15":"消息内容","prompt_16":"","showpop_46":false,"validate_15":{"minLength":{"msg":"您输入的内容不能少于%len个字符","state":false,"value":5},"custom":{"msg":"","reg":"","state":false},"required":{"msg":"内容不能为空","state":true,"value":false},"maxLength":{"msg":"您输入的内容不能多于%len个字符","state":false,"value":128}},"pageConfig_21":{"rolling":{"navigation":true,"scrollType":"horizontal","pagenation":true,"scrollTime":4,"autoScroll":true},"showJump":true,"pageType":"hidden","pcColumn":1,"marquee":{"navigation":true,"marqueeTime":4,"scrollType":"horizontal","opp":false},"loopItem":".p_loopitem","status":true,"filterPosition":"","pcRow":2,"moColumn":1,"datasourceid":"prop","elementid":21},"validate_14":{"minLength":{"msg":"您输入的内容不能少于%len个字符","state":false,"value":5},"custom":{"msg":"","reg":"","state":false},"required":{"msg":"内容不能为空","value":false},"maxLength":{"msg":"您输入的内容不能多于%len个字符","state":false,"value":128}},"validate_13":{"minLength":{"msg":"您输入的内容不能少于%len个字符","state":false,"value":5},"custom":{"msg":"","reg":"","state":false},"required":{"msg":"内容不能为空","value":false},"maxLength":{"msg":"您输入的Line truncated
|
||||
<input type="hidden" name="propJson" value="{"state_15":"normal","state_13":"normal","state_14":"normal","business_16":[],"rule_10":[],"href_26":{"type":"none","value":"","target":""},"href_25":{"type":"none","value":"","target":""},"showLabel_12":false,"showLabel_13":false,"showLabel_14":false,"customParam_14":"","showLabel_15":false,"state_12":"normal","action_16":1,"ddItem_12":{},"ddItem_14":{},"ddItem_15":{},"value_15":"","value_13":"","value_14":"","value_12":"","type_12":"text","dense_25":"","type_13":"tel","dense_26":"","placeholder_14":"您的邮箱","type_16":1,"placeholder_13":"您的电话","submit_10":{"obj2":{"type":"customPage","value":{"type":"link","params":[],"value":"/successfully.html"},"target":"_self"},"obj1":{"result":1,"request":[],"promptTime":0,"prompt":"提交成功!"},"logic":[],"type":1,"obj3":{}},"placeholder_12":"您的姓名","type_14":"email","basic_10":{"submitLimit":{"unit":1,"count":1,"interval":1,"peopleLimit":1,"limitRule":1},"submitTime":{"limit":2,"startTime":"","endTime":"","prompt":""},"formInfo":{"app":"120113","name":"lxly","title":"联系留言"},"advanced":{"customState":[],"message":1}},"placeholder_15":"您的留言内容","label_12":"姓名","label_13":"电话号码","href_17":{"type":"none","value":"","target":""},"label_14":"邮箱","label_15":"消息内容","prompt_16":"","validate_15":{"minLength":{"msg":"您输入的内容不能少于%len个字符","state":false,"value":5},"custom":{"msg":"","reg":"","state":false},"required":{"msg":"内容不能为空","state":true,"value":false},"maxLength":{"msg":"您输入的内容不能多于%len个字符","state":false,"value":128}},"pageConfig_21":{"rolling":{"navigation":true,"scrollType":"horizontal","pagenation":true,"scrollTime":4,"autoScroll":true},"showJump":true,"pageType":"hidden","pcColumn":1,"marquee":{"navigation":true,"marqueeTime":4,"scrollType":"horizontal","opp":false},"loopItem":".p_loopitem","status":true,"filterPosition":"","pcRow":2,"moColumn":1,"datasourceid":"prop","elementid":21},"validate_14":{"minLength":{"msg":"您输入的内容不能少于%len个字符","state":false,"value":5},"custom":{"msg":"","reg":"","state":false},"required":{"msg":"内容不能为空","value":false},"maxLength":{"msg":"您输入的内容不能多于%len个字符","state":false,"value":128}},"validate_13":{"minLength":{"msg":"您输入的内容不能少于%len个字符","state":false,"value":5},"custom":{"msg":"","reg":"","state":false},"required":{"msg":"内容不能为空","value":false},"maxLength":{"msg":"您输入的内容不能多于%len个字符","state":false,"value":128}},"prompt_25":"","validate_12":{"minLength":{"msg":"您输入的内容不能少于%len个字符","state":false,"value":5},"custom":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="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
|
||||
<input name="i18nJson" type="hidden" value="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
</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"> </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;">您可以查看其他栏目或返回 <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="{"ignoreEmptyCheck":true,"cname":"在线客服-列表接口","type":"list","params":{"size":20,"query":[{"valueName":"","dataType":"number","operator":"eq","filter":"ignore-empty-check","esField":"CID","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"CID","sourceType":"static","logic":"and","groupBegin":"1,2","value":"","fieldType":"number","configurable":{"sourceType":"page","type":"normal","value":"_detailId"}}],"header":{"Data-Query-Es-Field":"TEXT_DETAIL_ES.es_text_rudao","Data-Query-Random":0,"Data-Query-Field":"rudao"},"from":0,"sort":[]},"valueUrl":"/fwebapi/cms/lowcode/125326/407257/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"125326","sourceUuid":"1473112731287683072","pageParams":[{"code":"_detailId","name":"默认参数"}],"metaUrl":"/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/125326/407257/list?cate=0","id":"datasource1","apiId":"407257","reqKey":"/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\"size\":20,\"query\":[{\"valueName\":\"\",\"dataType\":\"number\",\"operator\":\"eq\",\"filter\":\"ignore-empty-check\",\"esField\":\"CID\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"CID\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"\",\"fieldType\":\"number\",\"configurable\":{\"sourceType\":\"page\",\"type\":\"normal\",\"value\":\"_detailId\"}}],\"header\":{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"}"}">
|
||||
<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
|
||||
|
||||
@@ -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="{"settings_1":{"videoLoop":false,"videoControlor":false,"navigation":false,"pagination":false,"effect":"slide","showText":true,"videoAutoplay":false,"videoMouted":true,"deplay":4,"autoplay":false,"direction":"horizontal"}}"></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="{"cname":"所属分类-列表接口","type":"list","params":{"size":100,"query":[{"valueName":"华阳文化","dataType":"number","operator":"eq","filter":"ignore-empty-check","esField":"CID","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"CID","sourceType":"static","logic":"and","groupBegin":"1,2","value":"1775059413390913536","fieldType":"number"}],"header":{"Data-Query-Es-Field":"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName","Data-Query-Random":0,"Data-Query-Field":"text_r4O05cao,categoryName"},"from":0,"sort":[],"_detailId":"1775059413390913536"},"valueUrl":"/fwebapi/cms/lowcode/60003/972205/list/value?cate=1","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"cate","appId":"60003","sourceUuid":"1441934179108519936","pageParams":[],"metaUrl":"/fwebapi/cms/lowcode/60003/972205/list/meta?cate=1","disabled":false,"api":"/fwebapi/cms/lowcode/60003/972205/list?cate=1","id":"datasource10","apiId":"972205","reqKey":"/fwebapi/cms/lowcode/60003/972205/list?cate=1|{\"size\":100,\"query\":[{\"valueName\":\"华阳文化\",\"dataType\":\"number\",\"operator\":\"eq\",\"filter\":\"ignore-empty-check\",\"esField\":\"CID\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"CID\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"1775059413390913536\",\"fieldType\":\"number\"}],\"header\":{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_r4O05cao,categoryName\"},\"from\":0,\"sort\":[],\"_detailId\":\"1775059413390913536\"}|{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_r4O05cao,categoryName\"}"}">
|
||||
@@ -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"><</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 ">></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="{"cname":"新闻资讯-列表接口","type":"list","params":{"size":15,"query":[{"valueName":"","dataType":"array[category]","operator":"in","filter":"ignore-empty-check","esField":"DETAIL_ES.es_multi_category_6d5k7017","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"category_6d5k7017","sourceType":"page","logic":"and","groupBegin":"1,2","value":"1775059413390913536","fieldType":"array"}],"header":{"Data-Query-Es-Field":"DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4,DETAIL_ES.es_date_prePublishTime","Data-Query-Random":0,"Data-Query-Field":"text_2PVENH84,textarea_8B30N7U4,prePublishTime"},"from":0,"sort":[],"_detailId":"1775059413390913536"},"valueUrl":"/fwebapi/cms/lowcode/60003/972204/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"60003","sourceUuid":"1441932740135092224","pageParams":[{"code":"_detailId","name":"默认参数"}],"metaUrl":"/fwebapi/cms/lowcode/60003/972204/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/60003/972204/list?cate=0","id":"datasource10","apiId":"972204","reqKey":"/fwebapi/cms/lowcode/60003/972204/list?cate=0|{\"size\":15,\"query\":[{\"valueName\":\"\",\"dataType\":\"array[category]\",\"operator\":\"in\",\"filter\":\"ignore-empty-check\",\"esField\":\"DETAIL_ES.es_multi_category_6d5k7017\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"category_6d5k7017\",\"sourceType\":\"page\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"1775059413390913536\",\"fieldType\":\"array\"}],\"header\":{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4,DETAIL_ES.es_date_prePublishTime\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_2PVENH84,textarea_8B30N7U4,prePublishTime\"},\"from\":0,\"sort\":[],\"_detailId\":\"1775059413390913536\"}|{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4,DETAIL_ES.es_date_prePublishTime\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_2PVENH84,textarea_8B30N7U4,prePublishTime\"}"}">
|
||||
<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="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
|
||||
<input name="i18nJson" type="hidden" value="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
</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"> </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;">您可以查看其他栏目或返回 <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="{"ignoreEmptyCheck":true,"cname":"在线客服-列表接口","type":"list","params":{"size":20,"query":[{"valueName":"","dataType":"number","operator":"eq","filter":"ignore-empty-check","esField":"CID","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"CID","sourceType":"static","logic":"and","groupBegin":"1,2","value":"","fieldType":"number","configurable":{"sourceType":"page","type":"normal","value":"_detailId"}}],"header":{"Data-Query-Es-Field":"TEXT_DETAIL_ES.es_text_rudao","Data-Query-Random":0,"Data-Query-Field":"rudao"},"from":0,"sort":[],"_detailId":"1775059413390913536"},"valueUrl":"/fwebapi/cms/lowcode/125326/407257/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"125326","sourceUuid":"1473112731287683072","pageParams":[{"code":"_detailId","name":"默认参数"}],"metaUrl":"/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/125326/407257/list?cate=0","id":"datasource1","apiId":"407257","reqKey":"/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\"size\":20,\"query\":[{\"valueName\":\"\",\"dataType\":\"number\",\"operator\":\"eq\",\"filter\":\"ignore-empty-check\",\"esField\":\"CID\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"CID\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"\",\"fieldType\":\"number\",\"configurable\":{\"sourceType\":\"page\",\"type\":\"normal\",\"value\":\"_detailId\"}}],\"header\":{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"},\"from\":0,\"sort\":[],\"_detailId\":\"1775059413390913536\"}|{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"}"}">
|
||||
<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
|
||||
|
||||
@@ -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="{"ignoreEmptyCheck":true,"cname":"企业概况-列表接口","type":"list","params":{"size":6,"query":[{"valueName":"关于我们","dataType":"array[category]","operator":"in","filter":"ignore-empty-check","esField":"DETAIL_ES.es_multi_category_01Sy2jv4","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"category_01Sy2jv4","sourceType":"static","logic":"and","groupBegin":"1,2","value":"2661","fieldType":"array"}],"header":{"Data-Query-Es-Field":"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName","Data-Query-Random":0,"Data-Query-Field":"text_r4O05cao,categoryName"},"from":0,"sort":[]},"valueUrl":"/fwebapi/cms/lowcode/60007/18515/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"60007","sourceUuid":"1441959640303796224","pageParams":[],"metaUrl":"/fwebapi/cms/lowcode/60007/18515/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/60007/18515/list?cate=0","id":"datasource10","apiId":"18515","reqKey":"/fwebapi/cms/lowcode/60007/18515/list?cate=0|{\"size\":6,\"query\":[{\"valueName\":\"关于我们\",\"dataType\":\"array[category]\",\"operator\":\"in\",\"filter\":\"ignore-empty-check\",\"esField\":\"DETAIL_ES.es_multi_category_01Sy2jv4\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"category_01Sy2jv4\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"2661\",\"fieldType\":\"array\"}],\"header\":{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_r4O05cao,categoryName\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_r4O05cao,categoryName\"}"}">
|
||||
@@ -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="{"cname":"新闻资讯-列表接口","type":"list","params":{"size":30,"query":[{"valueName":"发展历程","dataType":"array[category]","operator":"in","filter":"ignore-empty-check","esField":"DETAIL_ES.es_multi_category_6d5k7017","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"category_6d5k7017","sourceType":"static","logic":"and","groupBegin":"1,2","value":"1776439345933672448","fieldType":"array"}],"header":{"Data-Query-Es-Field":"DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4","Data-Query-Random":0,"Data-Query-Field":"text_2PVENH84,textarea_8B30N7U4"},"from":0,"sort":[]},"valueUrl":"/fwebapi/cms/lowcode/60003/972204/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"60003","sourceUuid":"1441932740135092224","pageParams":[],"metaUrl":"/fwebapi/cms/lowcode/60003/972204/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/60003/972204/list?cate=0","id":"datasource5","apiId":"972204","reqKey":"/fwebapi/cms/lowcode/60003/972204/list?cate=0|{\"size\":30,\"query\":[{\"valueName\":\"发展历程\",\"dataType\":\"array[category]\",\"operator\":\"in\",\"filter\":\"ignore-empty-check\",\"esField\":\"DETAIL_ES.es_multi_category_6d5k7017\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"category_6d5k7017\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"1776439345933672448\",\"fieldType\":\"array\"}],\"header\":{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_2PVENH84,textarea_8B30N7U4\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_2PVENH84,TEXT_DETAIL_ES.es_text_textarea_8B30N7U4\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_2PVENH84,textarea_8B30N7U4\"}"}">
|
||||
<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="{"pageConfig_26":{"showJump":true,"marquee":{"navigation":true,"marqueeTime":4,"scrollType":"horizontal","opp":false},"filterPosition":"","moColumn":1,"rolling":{"navigation":true,"pageStyle":1,"scrollType":"horizontal","pagenation":true,"scrollTime":4,"autoScroll":true,"speed":600},"pageType":"hidden","singleTotal":0,"showButtom":false,"showTotal":false,"pcColumn":1,"loopItem":".p_loopitem","status":true,"pcRow":30,"datasourceid":"datasource5","elementid":26},"href_6":{"type":"none","value":"","target":""},"href_29":{"type":"none","value":"","target":""},"dense_29":"","prompt_29":"","page_26":{"size":6,"from":0,"totalCount":100},"setting_31":{},"prompt_30":"","href_31":{"type":"","value":"","target":""},"href_30":{"type":"none","value":"","target":""},"dense_30":"","space_31":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="{"ignoreEmptyCheck":true,"cname":"产品-产品列表","type":"list","params":{"size":20,"query":[{"filter":"ignore-empty-check","esField":"category.id","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"categoryId","valueName":"店面展示","sourceType":"static","dataType":"string","logic":"and","groupBegin":"1,2","value":"1224738912811503616","operator":"eq"}],"header":{"Data-Query-Es-Field":"","Data-Query-Random":0,"Data-Query-Field":""},"from":0,"sort":[]},"valueUrl":"/fwebapi/product/datasource/143150160001/product/list/param/value","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"appId":"143150160001","sourceUuid":"d2f12f858d9f46eeb5b049baa1dffc37","pageParams":[],"metaUrl":"/fwebapi/product/datasource/143150160001/product/list/meta","disabled":false,"api":"/fwebapi/product/product/es/findPage?appId=143150160001&templateId=product","id":"datasource4","apiId":"product","reqKey":"/fwebapi/product/product/es/findPage?appId=143150160001&templateId=product|{\"size\":20,\"query\":[{\"filter\":\"ignore-empty-check\",\"esField\":\"category.id\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"categoryId\",\"valueName\":\"店面展示\",\"sourceType\":\"static\",\"dataType\":\"string\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"1224738912811503616\",\"operator\":\"eq\"}],\"header\":{\"Data-Query-Es-Field\":\"\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"\"}"}">
|
||||
<input type="hidden" name="view" value="History">
|
||||
<input type="hidden" name="pageParamsJson" value="{"size":20,"from":0,"totalCount":6}">
|
||||
<input type="hidden" name="i18nJson" value="{"noMore_11":"没有更多了","pageItem_11":"条","pageWhole_11":"共","loadMore_11":"点击加载更多","totalAcount_11":"共 X 个","loadNow_11":"加载中","confirm_11":"确定","pageUnit_11":"页","clearConditions_11":"清空条件","conditions_11":"条件:","pageJump_11":"前往","noData_11":"暂无数据"}">
|
||||
|
||||
</div></div>
|
||||
</div>
|
||||
<input type="hidden" name="propJson" value="{"page_11":{"size":6,"from":0,"totalCount":100},"imgList2_13":[],"imgList1_13":[],"href_6":{"type":"none","value":"","target":""},"pageConfig_11":{"showJump":false,"marquee":{"navigation":true,"marqueeTime":4,"scrollType":"horizontal","opp":false},"filterPosition":"","moColumn":2,"rolling":{"navigation":true,"pageStyle":1,"scrollType":"horizontal","pagenation":true,"scrollTime":4,"autoScroll":true,"speed":600},"pageType":"hidden","singleTotal":0,"showButtom":false,"showTotal":false,"pcColumn":10,"loopItem":".p_loopitem","status":true,"pcRow":2,"datasourceid":"datasource4","elementid":11},"space_13":0,"setting_13":{"fit":"contain","errorUrl":"","needThumb":"true","isLazy":"true"},"href_13":{"transport":[],"type":"none","value":"","target":"_self"}}"></div></div>
|
||||
</div>
|
||||
</div></div></div>
|
||||
</div>
|
||||
<input type="hidden" name="propJson" value="{"pageConfig_26":{"showJump":true,"marquee":{"navigation":true,"marqueeTime":4,"scrollType":"horizontal","opp":false},"filterPosition":"","moColumn":1,"rolling":{"navigation":true,"pageStyle":1,"scrollType":"horizontal","pagenation":true,"scrollTime":4,"autoScroll":true,"speed":600},"pageType":"hidden","singleTotal":0,"showButtom":false,"showTotal":false,"pcColumn":1,"loopItem":".p_loopitem","status":true,"pcRow":30,"datasourceid":"datasource5","elementid":26},"href_6":{"type":"none","value":"","target":""},"href_29":{"type":"none","value":"","target":""},"dense_29":"","prompt_29":"","page_26":{"size":6,"from":0,"totalCount":100},"setting_31":{},"prompt_30":"","href_31":{"type":"","value":"","target":""},"href_30":{"type":"none","value":"","target":""},"dense_30":"","space_31":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="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
|
||||
<input name="i18nJson" type="hidden" value="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
</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"> </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;">您可以查看其他栏目或返回 <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="{"ignoreEmptyCheck":true,"cname":"在线客服-列表接口","type":"list","params":{"size":20,"query":[{"valueName":"","dataType":"number","operator":"eq","filter":"ignore-empty-check","esField":"CID","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"CID","sourceType":"static","logic":"and","groupBegin":"1,2","value":"","fieldType":"number","configurable":{"sourceType":"page","type":"normal","value":"_detailId"}}],"header":{"Data-Query-Es-Field":"TEXT_DETAIL_ES.es_text_rudao","Data-Query-Random":0,"Data-Query-Field":"rudao"},"from":0,"sort":[]},"valueUrl":"/fwebapi/cms/lowcode/125326/407257/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"125326","sourceUuid":"1473112731287683072","pageParams":[{"code":"_detailId","name":"默认参数"}],"metaUrl":"/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/125326/407257/list?cate=0","id":"datasource1","apiId":"407257","reqKey":"/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\"size\":20,\"query\":[{\"valueName\":\"\",\"dataType\":\"number\",\"operator\":\"eq\",\"filter\":\"ignore-empty-check\",\"esField\":\"CID\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"CID\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"\",\"fieldType\":\"number\",\"configurable\":{\"sourceType\":\"page\",\"type\":\"normal\",\"value\":\"_detailId\"}}],\"header\":{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"}"}">
|
||||
<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
|
||||
@@ -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","闽鑫食品");
|
||||
@@ -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","闽鑫食品");
|
||||
@@ -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="{"ignoreEmptyCheck":true,"cname":"企业概况-列表接口","type":"list","params":{"size":6,"query":[{"valueName":"关于我们","dataType":"array[category]","operator":"in","filter":"ignore-empty-check","esField":"DETAIL_ES.es_multi_category_01Sy2jv4","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"category_01Sy2jv4","sourceType":"static","logic":"and","groupBegin":"1,2","value":"2661","fieldType":"array"}],"header":{"Data-Query-Es-Field":"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName","Data-Query-Random":0,"Data-Query-Field":"text_r4O05cao,categoryName"},"from":0,"sort":[]},"valueUrl":"/fwebapi/cms/lowcode/60007/18515/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"60007","sourceUuid":"1441959640303796224","pageParams":[],"metaUrl":"/fwebapi/cms/lowcode/60007/18515/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/60007/18515/list?cate=0","id":"datasource10","apiId":"18515","reqKey":"/fwebapi/cms/lowcode/60007/18515/list?cate=0|{\"size\":6,\"query\":[{\"valueName\":\"关于我们\",\"dataType\":\"array[category]\",\"operator\":\"in\",\"filter\":\"ignore-empty-check\",\"esField\":\"DETAIL_ES.es_multi_category_01Sy2jv4\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"category_01Sy2jv4\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"2661\",\"fieldType\":\"array\"}],\"header\":{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_r4O05cao,categoryName\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_r4O05cao,categoryName\"}"}">
|
||||
@@ -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="{"ignoreEmptyCheck":true,"cname":"产品-产品列表","type":"list","params":{"size":4,"query":[{"filter":"ignore-empty-check","esField":"category.id","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"categoryId","valueName":"Employee Training","sourceType":"static","dataType":"string","logic":"and","groupBegin":"1,2","value":"1039850210188673024","operator":"eq"}],"header":{"Data-Query-Es-Field":"","Data-Query-Random":0,"Data-Query-Field":""},"from":0,"sort":[]},"valueUrl":"/fwebapi/product/datasource/143150160001/product/list/param/value","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"143150160001","sourceUuid":"d2f12f858d9f46eeb5b049baa1dffc37","pageParams":[],"metaUrl":"/fwebapi/product/datasource/143150160001/product/list/meta","disabled":false,"api":"/fwebapi/product/product/es/findPage?appId=143150160001&templateId=product","id":"datasource5","apiId":"product","reqKey":"/fwebapi/product/product/es/findPage?appId=143150160001&templateId=product|{\"size\":4,\"query\":[{\"filter\":\"ignore-empty-check\",\"esField\":\"category.id\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"categoryId\",\"valueName\":\"Employee Training\",\"sourceType\":\"static\",\"dataType\":\"string\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"1039850210188673024\",\"operator\":\"eq\"}],\"header\":{\"Data-Query-Es-Field\":\"\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"\"}"}">
|
||||
<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="{"ignoreEmptyCheck":true,"cname":"产品-产品列表","type":"list","params":{"size":6,"query":[{"filter":"ignore-empty-check","esField":"category.id","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"categoryId","valueName":"Equipment","sourceType":"static","dataType":"string","logic":"and","groupBegin":"1,2","value":"1149732630500106240","operator":"eq"}],"header":{"Data-Query-Es-Field":"","Data-Query-Random":0,"Data-Query-Field":""},"from":0,"sort":[]},"valueUrl":"/fwebapi/product/datasource/143150160001/product/list/param/value","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"143150160001","sourceUuid":"d2f12f858d9f46eeb5b049baa1dffc37","pageParams":[],"metaUrl":"/fwebapi/product/datasource/143150160001/product/list/meta","disabled":false,"api":"/fwebapi/product/product/es/findPage?appId=143150160001&templateId=product","id":"datasource2","apiId":"product","reqKey":"/fwebapi/product/product/es/findPage?appId=143150160001&templateId=product|{\"size\":6,\"query\":[{\"filter\":\"ignore-empty-check\",\"esField\":\"category.id\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"categoryId\",\"valueName\":\"Equipment\",\"sourceType\":\"static\",\"dataType\":\"string\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"1149732630500106240\",\"operator\":\"eq\"}],\"header\":{\"Data-Query-Es-Field\":\"\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"\"}"}">
|
||||
<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="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
|
||||
<input name="i18nJson" type="hidden" value="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
</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"> </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;">您可以查看其他栏目或返回 <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="{"ignoreEmptyCheck":true,"cname":"在线客服-列表接口","type":"list","params":{"size":20,"query":[{"valueName":"","dataType":"number","operator":"eq","filter":"ignore-empty-check","esField":"CID","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"CID","sourceType":"static","logic":"and","groupBegin":"1,2","value":"","fieldType":"number","configurable":{"sourceType":"page","type":"normal","value":"_detailId"}}],"header":{"Data-Query-Es-Field":"TEXT_DETAIL_ES.es_text_rudao","Data-Query-Random":0,"Data-Query-Field":"rudao"},"from":0,"sort":[]},"valueUrl":"/fwebapi/cms/lowcode/125326/407257/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"125326","sourceUuid":"1473112731287683072","pageParams":[{"code":"_detailId","name":"默认参数"}],"metaUrl":"/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/125326/407257/list?cate=0","id":"datasource1","apiId":"407257","reqKey":"/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\"size\":20,\"query\":[{\"valueName\":\"\",\"dataType\":\"number\",\"operator\":\"eq\",\"filter\":\"ignore-empty-check\",\"esField\":\"CID\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"CID\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"\",\"fieldType\":\"number\",\"configurable\":{\"sourceType\":\"page\",\"type\":\"normal\",\"value\":\"_detailId\"}}],\"header\":{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"}"}">
|
||||
<input type="hidden" name="view" value="Quality">
|
||||
|
||||
@@ -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="{"ignoreEmptyCheck":true,"cname":"企业概况-列表接口","type":"list","params":{"size":6,"query":[{"valueName":"关于我们","dataType":"array[category]","operator":"in","filter":"ignore-empty-check","esField":"DETAIL_ES.es_multi_category_01Sy2jv4","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"category_01Sy2jv4","sourceType":"static","logic":"and","groupBegin":"1,2","value":"2661","fieldType":"array"}],"header":{"Data-Query-Es-Field":"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName","Data-Query-Random":0,"Data-Query-Field":"text_r4O05cao,categoryName"},"from":0,"sort":[]},"valueUrl":"/fwebapi/cms/lowcode/60007/18515/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"60007","sourceUuid":"1441959640303796224","pageParams":[],"metaUrl":"/fwebapi/cms/lowcode/60007/18515/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/60007/18515/list?cate=0","id":"datasource10","apiId":"18515","reqKey":"/fwebapi/cms/lowcode/60007/18515/list?cate=0|{\"size\":6,\"query\":[{\"valueName\":\"关于我们\",\"dataType\":\"array[category]\",\"operator\":\"in\",\"filter\":\"ignore-empty-check\",\"esField\":\"DETAIL_ES.es_multi_category_01Sy2jv4\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"category_01Sy2jv4\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"2661\",\"fieldType\":\"array\"}],\"header\":{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_r4O05cao,categoryName\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"DETAIL_ES.es_symbol_text_r4O05cao,DETAIL_ES.es_symbol_categoryName\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"text_r4O05cao,categoryName\"}"}">
|
||||
@@ -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("http://webmap0.bdimg.com/image/api/bg.png"); text-align: left; touch-action: none;"><div id="platform" style="overflow: visible; position: absolute; z-index: 5; left: 0px; top: 0px; cursor: url("http://webmap0.bdimg.com/image/api/openhand.cur") 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;">© 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="{"ignoreEmptyCheck":true,"cname":"产品-产品列表","type":"list","params":{"size":20,"query":[{"filter":"ignore-empty-check","esField":"category.id","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"categoryId","valueName":"店面展示","sourceType":"static","dataType":"string","logic":"and","groupBegin":"1,2","value":"1224738912811503616","operator":"eq"}],"header":{"Data-Query-Es-Field":"","Data-Query-Random":0,"Data-Query-Field":""},"from":0,"sort":[]},"valueUrl":"/fwebapi/product/datasource/143150160001/product/list/param/value","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"appId":"143150160001","sourceUuid":"d2f12f858d9f46eeb5b049baa1dffc37","pageParams":[],"metaUrl":"/fwebapi/product/datasource/143150160001/product/list/meta","disabled":false,"api":"/fwebapi/product/product/es/findPage?appId=143150160001&templateId=product","id":"datasource4","apiId":"product","reqKey":"/fwebapi/product/product/es/findPage?appId=143150160001&templateId=product|{\"size\":20,\"query\":[{\"filter\":\"ignore-empty-check\",\"esField\":\"category.id\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"categoryId\",\"valueName\":\"店面展示\",\"sourceType\":\"static\",\"dataType\":\"string\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"1224738912811503616\",\"operator\":\"eq\"}],\"header\":{\"Data-Query-Es-Field\":\"\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"\"}"}">
|
||||
<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="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
|
||||
<input name="i18nJson" type="hidden" value="{"maxLength_97":"您输入的内容不能多于%len个字符","recordName_88":"京ICP备10002622号-38","required_99":"请输入内容","maxLength_99":"您输入的内容不能多于%len个字符","maxLength_98":"您输入的内容不能多于%len个字符","required_97":"请输入内容","required_98":"请输入内容","minLength_98":"您输入的内容不能少于%len个字符","minLength_99":"您输入的内容不能少于%len个字符","noData_47":"暂无数据","minLength_97":"您输入的内容不能少于%len个字符"}">
|
||||
</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"> </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;">您可以查看其他栏目或返回 <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="{"ignoreEmptyCheck":true,"cname":"在线客服-列表接口","type":"list","params":{"size":20,"query":[{"valueName":"","dataType":"number","operator":"eq","filter":"ignore-empty-check","esField":"CID","groupName":"数据展示条件,默认条件组","groupEnd":"2,1","field":"CID","sourceType":"static","logic":"and","groupBegin":"1,2","value":"","fieldType":"number","configurable":{"sourceType":"page","type":"normal","value":"_detailId"}}],"header":{"Data-Query-Es-Field":"TEXT_DETAIL_ES.es_text_rudao","Data-Query-Random":0,"Data-Query-Field":"rudao"},"from":0,"sort":[]},"valueUrl":"/fwebapi/cms/lowcode/125326/407257/list/value?cate=0","priority":0,"_dataFilter":{"filter":false,"showCondition":false,"conditionExclude":false,"showSearch":false,"currentConditionHide":false,"selectFirstCondition":false,"fields":[],"viscidityEnableShowAll":false,"cascaderEnable":false,"showSearchCname":"","viscidityEnable":false,"viscidityEnableShowFirst":false},"datasourceType":"nomarl","appId":"125326","sourceUuid":"1473112731287683072","pageParams":[{"code":"_detailId","name":"默认参数"}],"metaUrl":"/fwebapi/cms/lowcode/125326/407257/list/meta?cate=0","disabled":false,"api":"/fwebapi/cms/lowcode/125326/407257/list?cate=0","id":"datasource1","apiId":"407257","reqKey":"/fwebapi/cms/lowcode/125326/407257/list?cate=0|{\"size\":20,\"query\":[{\"valueName\":\"\",\"dataType\":\"number\",\"operator\":\"eq\",\"filter\":\"ignore-empty-check\",\"esField\":\"CID\",\"groupName\":\"数据展示条件,默认条件组\",\"groupEnd\":\"2,1\",\"field\":\"CID\",\"sourceType\":\"static\",\"logic\":\"and\",\"groupBegin\":\"1,2\",\"value\":\"\",\"fieldType\":\"number\",\"configurable\":{\"sourceType\":\"page\",\"type\":\"normal\",\"value\":\"_detailId\"}}],\"header\":{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"},\"from\":0,\"sort\":[]}|{\"Data-Query-Es-Field\":\"TEXT_DETAIL_ES.es_text_rudao\",\"Data-Query-Random\":0,\"Data-Query-Field\":\"rudao\"}"}">
|
||||
<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
|
||||
@@ -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
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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": "所在地"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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": "我们的位置"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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')
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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, '&')
|
||||
.replace(/"/g, '"')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
}
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -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'
|
||||
},
|
||||
|
||||