feat(portal): 案例数据 SQL 与成功案例展示优化
- 新增/更新案例相关 SQL(初始化或补丁脚本) - 首页精选案例:多卡轮播、非精选补足列表、工业风卡片 - 案例列表:无封面时深蓝工业风占位(客户水印与缩写铭牌)
This commit is contained in:
@@ -1 +1 @@
|
||||
import{d as N,m as O,c as S,b as x,e as l,w as o,Q as z,s as L,i as d,j as n,R as j,o as C,k as r,t as Q,E as _,S as R}from"./index-DopNG1aC.js";import{a as c,_ as h}from"./index-DGfZijDv.js";const q={class:"admin-crud-page"},F={class:"page-header"},G=N({__name:"AboutPage",setup(H){const V=d(!1),g=d(!1),y=d([]),m=d(!1),p=d(null),a=d({});async function w(){V.value=!0;try{const u=await c.getAboutList();y.value=u.data??[]}catch{y.value=[]}finally{V.value=!1}}function k(u){u?(p.value=u.aboutId,a.value={...u}):(p.value=null,a.value={sortOrder:0,isPublished:0,sectionType:"introduction"}),m.value=!0}async function P(){g.value=!0;try{p.value?await c.updateAbout({...a.value,aboutId:p.value}):await c.addAbout(a.value),_.success("保存成功"),m.value=!1,w()}catch{_.error("保存失败")}g.value=!1}async function E(u){await R.confirm("确认删除?","提示",{type:"warning"});try{await c.deleteAbout(u),_.success("删除成功"),w()}catch{_.error("删除失败")}}return O(w),(u,e)=>{const v=n("el-button"),i=n("el-table-column"),U=n("el-tag"),A=n("el-table"),f=n("el-option"),I=n("el-select"),s=n("el-form-item"),b=n("el-input"),D=n("el-input-number"),B=n("el-switch"),T=n("el-form"),Z=n("el-dialog"),$=j("loading");return C(),S("div",q,[x("div",F,[e[12]||(e[12]=x("h2",null,"关于我们管理",-1)),l(v,{type:"primary",onClick:e[0]||(e[0]=t=>k())},{default:o(()=>[...e[11]||(e[11]=[r("新增内容",-1)])]),_:1})]),z((C(),L(A,{data:y.value,border:"",stripe:""},{default:o(()=>[l(i,{prop:"aboutId",label:"ID",width:"80"}),l(i,{prop:"sectionType",label:"板块类型",width:"120"}),l(i,{prop:"titleZh",label:"标题(中)"}),l(i,{prop:"titleEn",label:"标题(英)"}),l(i,{prop:"isPublished",label:"状态",width:"80"},{default:o(({row:t})=>[l(U,{type:t.isPublished?"success":"info"},{default:o(()=>[r(Q(t.isPublished?"已发布":"草稿"),1)]),_:2},1032,["type"])]),_:1}),l(i,{label:"操作",width:"160",fixed:"right"},{default:o(({row:t})=>[l(v,{size:"small",onClick:M=>k(t)},{default:o(()=>[...e[13]||(e[13]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(v,{size:"small",type:"danger",onClick:M=>E(t.aboutId)},{default:o(()=>[...e[14]||(e[14]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[$,V.value]]),l(Z,{modelValue:m.value,"onUpdate:modelValue":e[10]||(e[10]=t=>m.value=t),title:p.value?"编辑内容":"新增内容",width:"700px"},{footer:o(()=>[l(v,{onClick:e[9]||(e[9]=t=>m.value=!1)},{default:o(()=>[...e[15]||(e[15]=[r("取消",-1)])]),_:1}),l(v,{type:"primary",onClick:P,loading:g.value},{default:o(()=>[...e[16]||(e[16]=[r("保存",-1)])]),_:1},8,["loading"])]),default:o(()=>[l(T,{model:a.value,"label-width":"120px"},{default:o(()=>[l(s,{label:"板块类型"},{default:o(()=>[l(I,{modelValue:a.value.sectionType,"onUpdate:modelValue":e[1]||(e[1]=t=>a.value.sectionType=t)},{default:o(()=>[l(f,{label:"公司简介",value:"introduction"}),l(f,{label:"企业愿景",value:"vision"}),l(f,{label:"企业使命",value:"mission"}),l(f,{label:"核心价值观",value:"values"}),l(f,{label:"企业精神",value:"spirit"})]),_:1},8,["modelValue"])]),_:1}),l(s,{label:"标题(中)"},{default:o(()=>[l(b,{modelValue:a.value.titleZh,"onUpdate:modelValue":e[2]||(e[2]=t=>a.value.titleZh=t)},null,8,["modelValue"])]),_:1}),l(s,{label:"标题(英)"},{default:o(()=>[l(b,{modelValue:a.value.titleEn,"onUpdate:modelValue":e[3]||(e[3]=t=>a.value.titleEn=t)},null,8,["modelValue"])]),_:1}),l(s,{label:"内容(中)"},{default:o(()=>[l(b,{modelValue:a.value.contentZh,"onUpdate:modelValue":e[4]||(e[4]=t=>a.value.contentZh=t),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(s,{label:"内容(英)"},{default:o(()=>[l(b,{modelValue:a.value.contentEn,"onUpdate:modelValue":e[5]||(e[5]=t=>a.value.contentEn=t),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(s,{label:"图片路径"},{default:o(()=>[l(b,{modelValue:a.value.imagePath,"onUpdate:modelValue":e[6]||(e[6]=t=>a.value.imagePath=t)},null,8,["modelValue"])]),_:1}),l(s,{label:"排序"},{default:o(()=>[l(D,{modelValue:a.value.sortOrder,"onUpdate:modelValue":e[7]||(e[7]=t=>a.value.sortOrder=t),min:0},null,8,["modelValue"])]),_:1}),l(s,{label:"发布状态"},{default:o(()=>[l(B,{modelValue:a.value.isPublished,"onUpdate:modelValue":e[8]||(e[8]=t=>a.value.isPublished=t),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}}),W=h(G,[["__scopeId","data-v-5f792441"]]);export{W as default};
|
||||
import{d as N,m as O,c as z,b as x,e as l,w as o,W as L,s as S,i as d,j as n,X as j,o as C,k as r,t as W,I as _,Y as X}from"./index-CzwJBVIC.js";import{a as c,_ as Y}from"./index-8GqMb-ax.js";const h={class:"admin-crud-page"},q={class:"page-header"},F=N({__name:"AboutPage",setup(G){const V=d(!1),g=d(!1),y=d([]),m=d(!1),p=d(null),a=d({});async function w(){V.value=!0;try{const u=await c.getAboutList();y.value=u.data??[]}catch{y.value=[]}finally{V.value=!1}}function k(u){u?(p.value=u.aboutId,a.value={...u}):(p.value=null,a.value={sortOrder:0,isPublished:0,sectionType:"introduction"}),m.value=!0}async function P(){g.value=!0;try{p.value?await c.updateAbout({...a.value,aboutId:p.value}):await c.addAbout(a.value),_.success("保存成功"),m.value=!1,w()}catch{_.error("保存失败")}g.value=!1}async function U(u){await X.confirm("确认删除?","提示",{type:"warning"});try{await c.deleteAbout(u),_.success("删除成功"),w()}catch{_.error("删除失败")}}return O(w),(u,e)=>{const v=n("el-button"),i=n("el-table-column"),E=n("el-tag"),I=n("el-table"),f=n("el-option"),A=n("el-select"),s=n("el-form-item"),b=n("el-input"),D=n("el-input-number"),B=n("el-switch"),T=n("el-form"),Z=n("el-dialog"),$=j("loading");return C(),z("div",h,[x("div",q,[e[12]||(e[12]=x("h2",null,"关于我们管理",-1)),l(v,{type:"primary",onClick:e[0]||(e[0]=t=>k())},{default:o(()=>[...e[11]||(e[11]=[r("新增内容",-1)])]),_:1})]),L((C(),S(I,{data:y.value,border:"",stripe:""},{default:o(()=>[l(i,{prop:"aboutId",label:"ID",width:"80"}),l(i,{prop:"sectionType",label:"板块类型",width:"120"}),l(i,{prop:"titleZh",label:"标题(中)"}),l(i,{prop:"titleEn",label:"标题(英)"}),l(i,{prop:"isPublished",label:"状态",width:"80"},{default:o(({row:t})=>[l(E,{type:t.isPublished?"success":"info"},{default:o(()=>[r(W(t.isPublished?"已发布":"草稿"),1)]),_:2},1032,["type"])]),_:1}),l(i,{label:"操作",width:"160",fixed:"right"},{default:o(({row:t})=>[l(v,{size:"small",onClick:M=>k(t)},{default:o(()=>[...e[13]||(e[13]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(v,{size:"small",type:"danger",onClick:M=>U(t.aboutId)},{default:o(()=>[...e[14]||(e[14]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[$,V.value]]),l(Z,{modelValue:m.value,"onUpdate:modelValue":e[10]||(e[10]=t=>m.value=t),title:p.value?"编辑内容":"新增内容",width:"700px"},{footer:o(()=>[l(v,{onClick:e[9]||(e[9]=t=>m.value=!1)},{default:o(()=>[...e[15]||(e[15]=[r("取消",-1)])]),_:1}),l(v,{type:"primary",onClick:P,loading:g.value},{default:o(()=>[...e[16]||(e[16]=[r("保存",-1)])]),_:1},8,["loading"])]),default:o(()=>[l(T,{model:a.value,"label-width":"120px"},{default:o(()=>[l(s,{label:"板块类型"},{default:o(()=>[l(A,{modelValue:a.value.sectionType,"onUpdate:modelValue":e[1]||(e[1]=t=>a.value.sectionType=t)},{default:o(()=>[l(f,{label:"公司简介",value:"introduction"}),l(f,{label:"企业愿景",value:"vision"}),l(f,{label:"企业使命",value:"mission"}),l(f,{label:"核心价值观",value:"values"}),l(f,{label:"企业精神",value:"spirit"})]),_:1},8,["modelValue"])]),_:1}),l(s,{label:"标题(中)"},{default:o(()=>[l(b,{modelValue:a.value.titleZh,"onUpdate:modelValue":e[2]||(e[2]=t=>a.value.titleZh=t)},null,8,["modelValue"])]),_:1}),l(s,{label:"标题(英)"},{default:o(()=>[l(b,{modelValue:a.value.titleEn,"onUpdate:modelValue":e[3]||(e[3]=t=>a.value.titleEn=t)},null,8,["modelValue"])]),_:1}),l(s,{label:"内容(中)"},{default:o(()=>[l(b,{modelValue:a.value.contentZh,"onUpdate:modelValue":e[4]||(e[4]=t=>a.value.contentZh=t),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(s,{label:"内容(英)"},{default:o(()=>[l(b,{modelValue:a.value.contentEn,"onUpdate:modelValue":e[5]||(e[5]=t=>a.value.contentEn=t),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(s,{label:"图片路径"},{default:o(()=>[l(b,{modelValue:a.value.imagePath,"onUpdate:modelValue":e[6]||(e[6]=t=>a.value.imagePath=t)},null,8,["modelValue"])]),_:1}),l(s,{label:"排序"},{default:o(()=>[l(D,{modelValue:a.value.sortOrder,"onUpdate:modelValue":e[7]||(e[7]=t=>a.value.sortOrder=t),min:0},null,8,["modelValue"])]),_:1}),l(s,{label:"发布状态"},{default:o(()=>[l(B,{modelValue:a.value.isPublished,"onUpdate:modelValue":e[8]||(e[8]=t=>a.value.isPublished=t),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}}),K=Y(F,[["__scopeId","data-v-5f792441"]]);export{K as default};
|
||||
1
client/dist/assets/AboutPage-CF9bwpW4.css
vendored
1
client/dist/assets/AboutPage-CF9bwpW4.css
vendored
@@ -1 +0,0 @@
|
||||
.section-title[data-v-68532efb]{text-align:center;margin-bottom:60px}.section-title h2[data-v-68532efb]{font-size:36px;font-weight:700;color:#036;margin-bottom:16px}@media(max-width:768px){.section-title h2[data-v-68532efb]{font-size:28px}}.section-title .en-title[data-v-68532efb]{font-size:14px;color:#9ca3af;text-transform:uppercase;letter-spacing:2px;margin-bottom:8px}.section-title .subtitle[data-v-68532efb]{font-size:18px;color:#6b7280;max-width:600px;margin:0 auto}.culture-card-icon[data-v-6522fec0]{display:block}.page-banner[data-v-1d400eba]{height:300px;background:#036;position:relative;display:flex;align-items:center}@media(max-width:768px){.page-banner[data-v-1d400eba]{height:200px}}.page-banner-overlay[data-v-1d400eba]{position:absolute;inset:0;background:linear-gradient(135deg,#001e3ccc,#0369)}.page-banner-content[data-v-1d400eba]{position:relative;z-index:1;color:#fff}.page-banner-content h1[data-v-1d400eba]{font-size:42px;font-weight:700}.intro-content[data-v-1d400eba]{max-width:900px;margin:0 auto}.intro-content p[data-v-1d400eba]{font-size:18px;line-height:2;color:#4b5563}.culture-grid[data-v-1d400eba]{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}@media(max-width:768px){.culture-grid[data-v-1d400eba]{grid-template-columns:1fr}}.culture-card[data-v-1d400eba]{padding:36px 28px 32px;text-align:center;display:flex;flex-direction:column;align-items:center;transition:box-shadow .25s ease,border-color .25s ease}.culture-card[data-v-1d400eba]:hover{box-shadow:0 10px 25px #00000026}.culture-card:hover .culture-card__icon-ring[data-v-1d400eba]{color:#036;border-color:#00336638}.culture-card__icon-ring[data-v-1d400eba]{width:88px;height:88px;border-radius:50%;border:1px solid #E5E7EB;display:flex;align-items:center;justify-content:center;margin-bottom:20px;color:#6b7280;background:#fff;transition:color .25s ease,border-color .25s ease}.culture-card__title[data-v-1d400eba]{font-size:20px;font-weight:700;color:#111827;margin:0 0 8px;line-height:1.35}.culture-card__en[data-v-1d400eba]{font-size:12px;letter-spacing:.14em;color:#9ca3af;text-transform:uppercase;font-family:Roboto,Montserrat,Helvetica Neue,Arial,sans-serif;margin:0 0 16px}.culture-card__desc[data-v-1d400eba]{margin:0;color:#4b5563;line-height:1.75;font-size:14px;max-width:36em}.workshop-grid[data-v-1d400eba]{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}@media(max-width:768px){.workshop-grid[data-v-1d400eba]{grid-template-columns:1fr}}.workshop-card[data-v-1d400eba]{overflow:hidden}.workshop-img[data-v-1d400eba]{height:200px;background-size:cover;background-position:center;background-color:#e5e7eb}.workshop-info[data-v-1d400eba]{padding:20px}.workshop-info h3[data-v-1d400eba]{font-size:18px;color:#036;margin-bottom:8px}.workshop-info p[data-v-1d400eba]{color:#4b5563;font-size:14px;line-height:1.6}
|
||||
@@ -1 +1 @@
|
||||
import{d as k,c as o,t as c,g as v,b as t,o as s,x as T,u as $,m as z,f as i,e as _,F as b,r as m,i as p,q as E}from"./index-DopNG1aC.js";import{_ as f,p as w}from"./index-DGfZijDv.js";import{u as P}from"./uploadUrl-CyxyoWKj.js";const O={class:"section-title"},N={key:0,class:"en-title"},A={key:1,class:"subtitle"},R=k({__name:"SectionTitle",props:{title:{},enTitle:{},subtitle:{}},setup(r){return(l,n)=>(s(),o("div",O,[r.enTitle?(s(),o("p",N,c(r.enTitle),1)):v("",!0),t("h2",null,c(r.title),1),r.subtitle?(s(),o("p",A,c(r.subtitle),1)):v("",!0)]))}}),I=f(R,[["__scopeId","data-v-68532efb"]]),V={class:"culture-card-icon",viewBox:"0 0 64 64",width:"40",height:"40","aria-hidden":"true",fill:"none",xmlns:"http://www.w3.org/2000/svg"},L={key:0,stroke:"currentColor","stroke-width":"1.75","stroke-linecap":"round","stroke-linejoin":"round"},Z={key:1,stroke:"currentColor","stroke-width":"1.75","stroke-linecap":"round","stroke-linejoin":"round"},j={key:2,stroke:"currentColor","stroke-width":"1.75","stroke-linecap":"round","stroke-linejoin":"round",d:"M32 14 48 32 32 50 16 32 32 14z"},B={key:3,stroke:"currentColor","stroke-width":"1.75","stroke-linecap":"round","stroke-linejoin":"round"},F={key:4,cx:"32",cy:"32",r:"18",stroke:"currentColor","stroke-width":"1.75"},D=k({__name:"CultureCardIcon",props:{type:{}},setup(r){return(l,n)=>(s(),o("svg",V,[r.type==="vision"?(s(),o("g",L,[...n[0]||(n[0]=[t("circle",{cx:"32",cy:"32",r:"20"},null,-1),t("ellipse",{cx:"32",cy:"32",rx:"20",ry:"8"},null,-1),t("path",{d:"M12 32h40M32 12v40"},null,-1)])])):r.type==="mission"?(s(),o("g",Z,[...n[1]||(n[1]=[T('<circle cx="32" cy="32" r="22" data-v-6522fec0></circle><g transform="translate(32,32)" data-v-6522fec0><g transform="translate(0,-12)" data-v-6522fec0><circle cy="-4" r="3.5" data-v-6522fec0></circle><path d="M0 0v9M-5 9h10" data-v-6522fec0></path></g><g transform="rotate(120) translate(0,-12)" data-v-6522fec0><circle cy="-4" r="3.5" data-v-6522fec0></circle><path d="M0 0v9M-5 9h10" data-v-6522fec0></path></g><g transform="rotate(240) translate(0,-12)" data-v-6522fec0><circle cy="-4" r="3.5" data-v-6522fec0></circle><path d="M0 0v9M-5 9h10" data-v-6522fec0></path></g></g>',2)])])):r.type==="values"?(s(),o("path",j)):r.type==="spirit"?(s(),o("g",B,[...n[2]||(n[2]=[t("path",{fill:"none",d:"M32 10c-9 0-14 7-14 15 0 6 3 11 7 13v3h14v-3c4-2 7-7 7-13 0-8-5-15-14-15z"},null,-1),t("path",{fill:"none","stroke-width":"1.5",d:"M32 23c-2-1.8-5-.6-5 2 0 1.8 2 3.5 5 6 3-2.5 5-4.2 5-6 0-2.6-3-3.8-5-2z"},null,-1),t("path",{d:"M26 42h12M28 46h8"},null,-1)])])):(s(),o("circle",F))]))}}),U=f(D,[["__scopeId","data-v-6522fec0"]]),W={class:"about-page"},q={class:"page-banner"},H={class:"container page-banner-content"},K={class:"section"},Y={class:"container"},G={key:0,class:"intro-content"},J={class:"section",style:{background:"@gray-50"}},Q={class:"container"},X={class:"culture-grid"},tt={class:"culture-card__icon-ring","aria-hidden":"true"},et={class:"culture-card__title"},ot={class:"culture-card__en"},st={class:"culture-card__desc"},nt={class:"section"},rt={class:"container"},ct={class:"workshop-grid"},at={class:"workshop-info"},it=k({__name:"AboutPage",setup(r){const{t:l,locale:n}=$(),u=p(null),g=p([]),y=p([]);function M(a){return a?{backgroundImage:`url(${P(a)})`,backgroundSize:"cover",backgroundPosition:"center"}:{backgroundColor:"#e5e7eb"}}const C={vision:"VISION",mission:"MISSION",values:"CORE VALUE",spirit:"SPIRIT"};function S(a){return C[a]??""}return z(async()=>{try{const[a,h]=await Promise.all([w.getAboutList(),w.getWorkshops()]),e=a.data||[];u.value=e.find(d=>d.sectionType==="introduction"),g.value=e.filter(d=>["vision","mission","values","spirit"].includes(d.sectionType)).sort((d,x)=>(d.sortOrder??0)-(x.sortOrder??0)),y.value=h.data||[]}catch{}}),(a,h)=>(s(),o("div",W,[t("section",q,[h[0]||(h[0]=t("div",{class:"page-banner-overlay"},null,-1)),t("div",H,[t("h1",null,c(i(l)("about.title")),1)])]),t("section",K,[t("div",Y,[_(I,{title:i(l)("about.introduction"),enTitle:"COMPANY PROFILE"},null,8,["title"]),u.value?(s(),o("div",G,[t("p",null,c(i(n)==="zh"?u.value.contentZh:u.value.contentEn),1)])):v("",!0)])]),t("section",J,[t("div",Q,[t("div",X,[(s(!0),o(b,null,m(g.value,e=>(s(),o("div",{key:e.aboutId,class:"culture-card card"},[t("div",tt,[_(U,{type:e.sectionType},null,8,["type"])]),t("h3",et,c(i(n)==="zh"?e.titleZh:e.titleEn),1),t("p",ot,c(S(e.sectionType)),1),t("p",st,c(i(n)==="zh"?e.contentZh:e.contentEn),1)]))),128))])])]),t("section",nt,[t("div",rt,[_(I,{title:i(l)("about.workshop"),enTitle:"WORKSHOP"},null,8,["title"]),t("div",ct,[(s(!0),o(b,null,m(y.value,e=>(s(),o("div",{key:e.workshopId,class:"workshop-card card"},[t("div",{class:"workshop-img",style:E(M(e.imagePath))},null,4),t("div",at,[t("h3",null,c(i(n)==="zh"?e.nameZh:e.nameEn),1),t("p",null,c(i(n)==="zh"?e.descriptionZh:e.descriptionEn),1)])]))),128))])])])]))}}),ht=f(it,[["__scopeId","data-v-1d400eba"]]);export{ht as default};
|
||||
import{d as k,c as o,t as c,g as v,b as t,o as s,E as T,u as $,m as E,f as i,e as _,F as m,r as b,i as p,q as z}from"./index-CzwJBVIC.js";import{_ as f,p as w}from"./index-8GqMb-ax.js";import{u as P}from"./uploadUrl-CyxyoWKj.js";const O={class:"section-title"},N={key:0,class:"en-title"},A={key:1,class:"subtitle"},R=k({__name:"SectionTitle",props:{title:{},enTitle:{},subtitle:{}},setup(r){return(l,n)=>(s(),o("div",O,[r.enTitle?(s(),o("p",N,c(r.enTitle),1)):v("",!0),t("h2",null,c(r.title),1),r.subtitle?(s(),o("p",A,c(r.subtitle),1)):v("",!0)]))}}),I=f(R,[["__scopeId","data-v-68532efb"]]),V={class:"culture-card-icon",viewBox:"0 0 64 64",width:"40",height:"40","aria-hidden":"true",fill:"none",xmlns:"http://www.w3.org/2000/svg"},L={key:0,stroke:"currentColor","stroke-width":"1.75","stroke-linecap":"round","stroke-linejoin":"round"},Z={key:1,stroke:"currentColor","stroke-width":"1.75","stroke-linecap":"round","stroke-linejoin":"round"},j={key:2,stroke:"currentColor","stroke-width":"1.75","stroke-linecap":"round","stroke-linejoin":"round",d:"M32 14 48 32 32 50 16 32 32 14z"},B={key:3,stroke:"currentColor","stroke-width":"1.75","stroke-linecap":"round","stroke-linejoin":"round"},F={key:4,cx:"32",cy:"32",r:"18",stroke:"currentColor","stroke-width":"1.75"},D=k({__name:"CultureCardIcon",props:{type:{}},setup(r){return(l,n)=>(s(),o("svg",V,[r.type==="vision"?(s(),o("g",L,[...n[0]||(n[0]=[t("circle",{cx:"32",cy:"32",r:"20"},null,-1),t("ellipse",{cx:"32",cy:"32",rx:"20",ry:"8"},null,-1),t("path",{d:"M12 32h40M32 12v40"},null,-1)])])):r.type==="mission"?(s(),o("g",Z,[...n[1]||(n[1]=[T('<circle cx="32" cy="32" r="22" data-v-6522fec0></circle><g transform="translate(32,32)" data-v-6522fec0><g transform="translate(0,-12)" data-v-6522fec0><circle cy="-4" r="3.5" data-v-6522fec0></circle><path d="M0 0v9M-5 9h10" data-v-6522fec0></path></g><g transform="rotate(120) translate(0,-12)" data-v-6522fec0><circle cy="-4" r="3.5" data-v-6522fec0></circle><path d="M0 0v9M-5 9h10" data-v-6522fec0></path></g><g transform="rotate(240) translate(0,-12)" data-v-6522fec0><circle cy="-4" r="3.5" data-v-6522fec0></circle><path d="M0 0v9M-5 9h10" data-v-6522fec0></path></g></g>',2)])])):r.type==="values"?(s(),o("path",j)):r.type==="spirit"?(s(),o("g",B,[...n[2]||(n[2]=[t("path",{fill:"none",d:"M32 10c-9 0-14 7-14 15 0 6 3 11 7 13v3h14v-3c4-2 7-7 7-13 0-8-5-15-14-15z"},null,-1),t("path",{fill:"none","stroke-width":"1.5",d:"M32 23c-2-1.8-5-.6-5 2 0 1.8 2 3.5 5 6 3-2.5 5-4.2 5-6 0-2.6-3-3.8-5-2z"},null,-1),t("path",{d:"M26 42h12M28 46h8"},null,-1)])])):(s(),o("circle",F))]))}}),U=f(D,[["__scopeId","data-v-6522fec0"]]),W={class:"about-page"},q={class:"page-banner"},H={class:"container page-banner-content"},K={class:"section"},Y={class:"container"},G={key:0,class:"intro-content"},J={class:"section",style:{background:"@gray-50"}},Q={class:"container"},X={class:"culture-grid"},tt={class:"culture-card__icon-ring","aria-hidden":"true"},et={class:"culture-card__title"},ot={class:"culture-card__en"},st={class:"culture-card__desc"},nt={class:"section"},rt={class:"container"},ct={class:"workshop-grid"},at={class:"workshop-info"},it=k({__name:"AboutPage",setup(r){const{t:l,locale:n}=$(),u=p(null),g=p([]),y=p([]);function M(a){return a?{backgroundImage:`url(${P(a)})`,backgroundSize:"cover",backgroundPosition:"center"}:{backgroundColor:"#e5e7eb"}}const C={vision:"VISION",mission:"MISSION",values:"CORE VALUE",spirit:"SPIRIT"};function S(a){return C[a]??""}return E(async()=>{try{const[a,h]=await Promise.all([w.getAboutList(),w.getWorkshops()]),e=a.data||[];u.value=e.find(d=>d.sectionType==="introduction"),g.value=e.filter(d=>["vision","mission","values","spirit"].includes(d.sectionType)).sort((d,x)=>(d.sortOrder??0)-(x.sortOrder??0)),y.value=h.data||[]}catch{}}),(a,h)=>(s(),o("div",W,[t("section",q,[h[0]||(h[0]=t("div",{class:"page-banner-overlay"},null,-1)),t("div",H,[t("h1",null,c(i(l)("about.title")),1)])]),t("section",K,[t("div",Y,[_(I,{title:i(l)("about.introduction"),enTitle:"COMPANY PROFILE"},null,8,["title"]),u.value?(s(),o("div",G,[t("p",null,c(i(n)==="zh"?u.value.contentZh:u.value.contentEn),1)])):v("",!0)])]),t("section",J,[t("div",Q,[t("div",X,[(s(!0),o(m,null,b(g.value,e=>(s(),o("div",{key:e.aboutId,class:"culture-card card"},[t("div",tt,[_(U,{type:e.sectionType},null,8,["type"])]),t("h3",et,c(i(n)==="zh"?e.titleZh:e.titleEn),1),t("p",ot,c(S(e.sectionType)),1),t("p",st,c(i(n)==="zh"?e.contentZh:e.contentEn),1)]))),128))])])]),t("section",nt,[t("div",rt,[_(I,{title:i(l)("about.workshop"),enTitle:"WORKSHOP"},null,8,["title"]),t("div",ct,[(s(!0),o(m,null,b(y.value,e=>(s(),o("div",{key:e.workshopId,class:"workshop-card card"},[t("div",{class:"workshop-img",style:z(M(e.imagePath))},null,4),t("div",at,[t("h3",null,c(i(n)==="zh"?e.nameZh:e.nameEn),1),t("p",null,c(i(n)==="zh"?e.descriptionZh:e.descriptionEn),1)])]))),128))])])])]))}}),ht=f(it,[["__scopeId","data-v-0f102983"]]);export{ht as default};
|
||||
1
client/dist/assets/AboutPage-emMG96gk.css
vendored
Normal file
1
client/dist/assets/AboutPage-emMG96gk.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.section-title[data-v-68532efb]{text-align:center;margin-bottom:60px}.section-title h2[data-v-68532efb]{font-size:36px;font-weight:700;color:#036;margin-bottom:16px}@media(max-width:768px){.section-title h2[data-v-68532efb]{font-size:28px}}.section-title .en-title[data-v-68532efb]{font-size:14px;color:#9ca3af;text-transform:uppercase;letter-spacing:2px;margin-bottom:8px}.section-title .subtitle[data-v-68532efb]{font-size:18px;color:#6b7280;max-width:600px;margin:0 auto}.culture-card-icon[data-v-6522fec0]{display:block}.page-banner[data-v-0f102983]{height:300px;background:#036;position:relative;display:flex;align-items:center}@media(max-width:768px){.page-banner[data-v-0f102983]{height:200px}}.page-banner-overlay[data-v-0f102983]{position:absolute;inset:0;background:linear-gradient(135deg,#001e3ccc,#0369)}.page-banner-content[data-v-0f102983]{position:relative;z-index:1;color:#fff}.page-banner-content h1[data-v-0f102983]{font-size:42px;font-weight:700}.intro-content[data-v-0f102983]{max-width:900px;margin:0 auto}.intro-content p[data-v-0f102983]{font-size:18px;line-height:2;color:#4b5563}.culture-grid[data-v-0f102983]{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}@media(min-width:1200px){.culture-grid[data-v-0f102983]{grid-template-columns:repeat(4,1fr)}}@media(max-width:768px){.culture-grid[data-v-0f102983]{grid-template-columns:1fr}}.culture-card[data-v-0f102983]{padding:36px 28px 32px;text-align:center;display:flex;flex-direction:column;align-items:center;background:#fff;border:1px solid rgba(0,51,102,.06);box-shadow:0 4px 6px #0000001a;transition:box-shadow .25s ease,border-color .25s ease}.culture-card[data-v-0f102983]:hover{box-shadow:0 10px 25px #00000026;border-color:#0033661a}.culture-card:hover .culture-card__icon-ring[data-v-0f102983]{color:#036;border-color:#00336638}.culture-card__icon-ring[data-v-0f102983]{width:88px;height:88px;border-radius:50%;border:1px solid #E5E7EB;display:flex;align-items:center;justify-content:center;margin-bottom:20px;color:#6b7280;background:#fff;transition:color .25s ease,border-color .25s ease}.culture-card__title[data-v-0f102983]{font-size:20px;font-weight:700;color:#111827;margin:0 0 8px;line-height:1.35}.culture-card__en[data-v-0f102983]{font-size:12px;letter-spacing:.14em;color:#9ca3af;text-transform:uppercase;font-family:Roboto,Montserrat,Helvetica Neue,Arial,sans-serif;margin:0 0 16px}.culture-card__desc[data-v-0f102983]{margin:0;color:#4b5563;line-height:1.75;font-size:14px;max-width:36em}.workshop-grid[data-v-0f102983]{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}@media(max-width:768px){.workshop-grid[data-v-0f102983]{grid-template-columns:1fr}}.workshop-card[data-v-0f102983]{overflow:hidden}.workshop-img[data-v-0f102983]{height:200px;background-size:cover;background-position:center;background-color:#e5e7eb}.workshop-info[data-v-0f102983]{padding:20px}.workshop-info h3[data-v-0f102983]{font-size:18px;color:#036;margin-bottom:8px}.workshop-info p[data-v-0f102983]{color:#4b5563;font-size:14px;line-height:1.6}
|
||||
@@ -1 +1 @@
|
||||
import{d as V,o as s,c,b as u,e as r,w as p,f as i,s as w,T as x,j as d}from"./index-DopNG1aC.js";import{a as y,_ as C}from"./index-DGfZijDv.js";import{u as g}from"./uploadUrl-CyxyoWKj.js";const k={class:"admin-cover-upload"},U={class:"row"},b=["src"],A=V({__name:"AdminCoverUpload",props:{modelValue:{},mediaCategory:{default:"product"}},emits:["update:modelValue"],setup(a,{emit:m}){const f=a,n=m;async function _(l){try{const e=new FormData;e.append("file",l.file),e.append("category",f.mediaCategory);const o=await y.uploadFile(e),t=o.data;n("update:modelValue",t),l.onSuccess?.(o)}catch(e){console.error("封面图上传失败",e);const o=e instanceof Error?e:new Error("上传失败");l.onError?.({...o,status:500,method:"POST",url:""})}}return(l,e)=>{const o=d("el-icon"),t=d("el-upload"),v=d("el-input");return s(),c("div",k,[u("div",U,[r(t,{class:"cover-uploader","show-file-list":!1,accept:"image/*","http-request":_},{default:p(()=>[a.modelValue?(s(),c("img",{key:0,class:"preview",src:i(g)(a.modelValue),alt:""},null,8,b)):(s(),w(o,{key:1,class:"placeholder-icon"},{default:p(()=>[r(i(x))]),_:1}))]),_:1}),e[1]||(e[1]=u("div",{class:"hint"},"点击上传封面,或右侧填写已上传路径",-1))]),r(v,{"model-value":a.modelValue??"",placeholder:"/uploads/product/xxx.jpg",clearable:"","onUpdate:modelValue":e[0]||(e[0]=h=>n("update:modelValue",h))},null,8,["model-value"])])}}}),D=C(A,[["__scopeId","data-v-edd94b7a"]]);export{D as A};
|
||||
import{d as V,o as s,c,b as u,e as r,w as p,f as i,s as w,Z as x,j as d}from"./index-CzwJBVIC.js";import{a as y,_ as C}from"./index-8GqMb-ax.js";import{u as g}from"./uploadUrl-CyxyoWKj.js";const k={class:"admin-cover-upload"},U={class:"row"},b=["src"],A=V({__name:"AdminCoverUpload",props:{modelValue:{},mediaCategory:{default:"product"}},emits:["update:modelValue"],setup(a,{emit:m}){const f=a,n=m;async function _(l){try{const e=new FormData;e.append("file",l.file),e.append("category",f.mediaCategory);const o=await y.uploadFile(e),t=o.data;n("update:modelValue",t),l.onSuccess?.(o)}catch(e){console.error("封面图上传失败",e);const o=e instanceof Error?e:new Error("上传失败");l.onError?.({...o,status:500,method:"POST",url:""})}}return(l,e)=>{const o=d("el-icon"),t=d("el-upload"),v=d("el-input");return s(),c("div",k,[u("div",U,[r(t,{class:"cover-uploader","show-file-list":!1,accept:"image/*","http-request":_},{default:p(()=>[a.modelValue?(s(),c("img",{key:0,class:"preview",src:i(g)(a.modelValue),alt:""},null,8,b)):(s(),w(o,{key:1,class:"placeholder-icon"},{default:p(()=>[r(i(x))]),_:1}))]),_:1}),e[1]||(e[1]=u("div",{class:"hint"},"点击上传封面,或右侧填写已上传路径",-1))]),r(v,{"model-value":a.modelValue??"",placeholder:"/uploads/product/xxx.jpg",clearable:"","onUpdate:modelValue":e[0]||(e[0]=h=>n("update:modelValue",h))},null,8,["model-value"])])}}}),D=C(A,[["__scopeId","data-v-edd94b7a"]]);export{D as A};
|
||||
@@ -1 +1 @@
|
||||
import{d as S,c as f,e,w as t,j as u,o as s,b as _,f as n,B as I,k as o,C as r,D as R,G as V,H as G,v as M,I as j,J as q,K as D,L as E,M as H,N as J,s as p,O as K,P as O,i as P,h as T,A as $,l as z}from"./index-DopNG1aC.js";import{a as F,_ as Q}from"./index-DGfZijDv.js";const U={class:"admin-layout"},W={class:"admin-logo"},X={key:0},Y={key:1},Z={class:"admin-header-right"},h=S({__name:"AdminLayout",setup(ee){const c=z(),x=$(),i=P(!1),v=T(()=>c.path);async function w(){try{await F.logout()}catch{}localStorage.removeItem("token"),x.push("/admin/login")}return(k,l)=>{const a=u("el-icon"),d=u("el-menu-item"),y=u("el-menu"),g=u("el-aside"),C=u("el-dropdown-item"),b=u("el-dropdown-menu"),A=u("el-dropdown"),B=u("el-header"),L=u("router-view"),N=u("el-main"),m=u("el-container");return s(),f("div",U,[e(m,null,{default:t(()=>[e(g,{width:i.value?"64px":"220px"},{default:t(()=>[_("div",W,[i.value?(s(),f("h2",Y,"S")):(s(),f("h2",X,"SAGA CMS"))]),e(y,{"default-active":v.value,collapse:i.value,"background-color":"#001529","text-color":"#ffffffa6","active-text-color":"#ffffff",router:""},{default:t(()=>[e(d,{index:"/admin"},{title:t(()=>[...l[1]||(l[1]=[o("仪表盘",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(I))]),_:1})]),_:1}),e(d,{index:"/admin/company"},{title:t(()=>[...l[2]||(l[2]=[o("公司信息",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(r))]),_:1})]),_:1}),e(d,{index:"/admin/banner"},{title:t(()=>[...l[3]||(l[3]=[o("轮播图",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(R))]),_:1})]),_:1}),e(d,{index:"/admin/about"},{title:t(()=>[...l[4]||(l[4]=[o("关于我们",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(V))]),_:1})]),_:1}),e(d,{index:"/admin/workshop"},{title:t(()=>[...l[5]||(l[5]=[o("车间展示",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(r))]),_:1})]),_:1}),e(d,{index:"/admin/product-category"},{title:t(()=>[...l[6]||(l[6]=[o("产品分类",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(G))]),_:1})]),_:1}),e(d,{index:"/admin/product-line"},{title:t(()=>[...l[7]||(l[7]=[o("成套机组",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(M))]),_:1})]),_:1}),e(d,{index:"/admin/equipment"},{title:t(()=>[...l[8]||(l[8]=[o("单体设备",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(j))]),_:1})]),_:1}),e(d,{index:"/admin/spare-part"},{title:t(()=>[...l[9]||(l[9]=[o("备品备件",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(q))]),_:1})]),_:1}),e(d,{index:"/admin/technology"},{title:t(()=>[...l[10]||(l[10]=[o("核心技术",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(D))]),_:1})]),_:1}),e(d,{index:"/admin/case"},{title:t(()=>[...l[11]||(l[11]=[o("成功案例",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(E))]),_:1})]),_:1}),e(d,{index:"/admin/news"},{title:t(()=>[...l[12]||(l[12]=[o("新闻管理",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(H))]),_:1})]),_:1}),e(d,{index:"/admin/media"},{title:t(()=>[...l[13]||(l[13]=[o("媒体库",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(J))]),_:1})]),_:1})]),_:1},8,["default-active","collapse"])]),_:1},8,["width"]),e(m,null,{default:t(()=>[e(B,{class:"admin-header"},{default:t(()=>[e(a,{class:"collapse-btn",onClick:l[0]||(l[0]=te=>i.value=!i.value)},{default:t(()=>[i.value?(s(),p(n(O),{key:1})):(s(),p(n(K),{key:0}))]),_:1}),_("div",Z,[e(A,null,{dropdown:t(()=>[e(b,null,{default:t(()=>[e(C,{onClick:w},{default:t(()=>[...l[14]||(l[14]=[o("退出登录",-1)])]),_:1})]),_:1})]),default:t(()=>[l[15]||(l[15]=_("span",{class:"admin-user"},"管理员",-1))]),_:1})])]),_:1}),e(N,null,{default:t(()=>[e(L)]),_:1})]),_:1})]),_:1})])}}}),ae=Q(h,[["__scopeId","data-v-84fafa60"]]);export{ae as default};
|
||||
import{d as N,c as f,e,w as t,j as u,o as s,b as _,f as n,K as R,k as o,A as r,L as V,M as I,N as M,v as T,O as j,P as q,Q as E,R as G,S as J,T as K,s as p,U as O,V as P,i as Q,h as U,J as $,l as z}from"./index-CzwJBVIC.js";import{a as D,_ as F}from"./index-8GqMb-ax.js";const H={class:"admin-layout"},W={class:"admin-logo"},X={key:0},Y={key:1},Z={class:"admin-header-right"},h=N({__name:"AdminLayout",setup(ee){const c=z(),x=$(),i=Q(!1),v=U(()=>c.path);async function w(){try{await D.logout()}catch{}localStorage.removeItem("token"),x.push("/admin/login")}return(k,l)=>{const a=u("el-icon"),d=u("el-menu-item"),y=u("el-menu"),g=u("el-aside"),b=u("el-dropdown-item"),C=u("el-dropdown-menu"),A=u("el-dropdown"),S=u("el-header"),B=u("router-view"),L=u("el-main"),m=u("el-container");return s(),f("div",H,[e(m,null,{default:t(()=>[e(g,{width:i.value?"64px":"220px"},{default:t(()=>[_("div",W,[i.value?(s(),f("h2",Y,"S")):(s(),f("h2",X,"SAGA CMS"))]),e(y,{"default-active":v.value,collapse:i.value,"background-color":"#001529","text-color":"#ffffffa6","active-text-color":"#ffffff",router:""},{default:t(()=>[e(d,{index:"/admin"},{title:t(()=>[...l[1]||(l[1]=[o("仪表盘",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(R))]),_:1})]),_:1}),e(d,{index:"/admin/company"},{title:t(()=>[...l[2]||(l[2]=[o("公司信息",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(r))]),_:1})]),_:1}),e(d,{index:"/admin/banner"},{title:t(()=>[...l[3]||(l[3]=[o("轮播图",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(V))]),_:1})]),_:1}),e(d,{index:"/admin/about"},{title:t(()=>[...l[4]||(l[4]=[o("关于我们",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(I))]),_:1})]),_:1}),e(d,{index:"/admin/workshop"},{title:t(()=>[...l[5]||(l[5]=[o("车间展示",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(r))]),_:1})]),_:1}),e(d,{index:"/admin/product-category"},{title:t(()=>[...l[6]||(l[6]=[o("产品分类",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(M))]),_:1})]),_:1}),e(d,{index:"/admin/product-line"},{title:t(()=>[...l[7]||(l[7]=[o("成套机组",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(T))]),_:1})]),_:1}),e(d,{index:"/admin/equipment"},{title:t(()=>[...l[8]||(l[8]=[o("单体设备",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(j))]),_:1})]),_:1}),e(d,{index:"/admin/spare-part"},{title:t(()=>[...l[9]||(l[9]=[o("备品备件",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(q))]),_:1})]),_:1}),e(d,{index:"/admin/technology"},{title:t(()=>[...l[10]||(l[10]=[o("核心技术",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(E))]),_:1})]),_:1}),e(d,{index:"/admin/case"},{title:t(()=>[...l[11]||(l[11]=[o("成功案例",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(G))]),_:1})]),_:1}),e(d,{index:"/admin/news"},{title:t(()=>[...l[12]||(l[12]=[o("新闻管理",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(J))]),_:1})]),_:1}),e(d,{index:"/admin/media"},{title:t(()=>[...l[13]||(l[13]=[o("媒体库",-1)])]),default:t(()=>[e(a,null,{default:t(()=>[e(n(K))]),_:1})]),_:1})]),_:1},8,["default-active","collapse"])]),_:1},8,["width"]),e(m,null,{default:t(()=>[e(S,{class:"admin-header"},{default:t(()=>[e(a,{class:"collapse-btn",onClick:l[0]||(l[0]=te=>i.value=!i.value)},{default:t(()=>[i.value?(s(),p(n(P),{key:1})):(s(),p(n(O),{key:0}))]),_:1}),_("div",Z,[e(A,null,{dropdown:t(()=>[e(C,null,{default:t(()=>[e(b,{onClick:w},{default:t(()=>[...l[14]||(l[14]=[o("退出登录",-1)])]),_:1})]),_:1})]),default:t(()=>[l[15]||(l[15]=_("span",{class:"admin-user"},"管理员",-1))]),_:1})])]),_:1}),e(L,null,{default:t(()=>[e(B)]),_:1})]),_:1})]),_:1})])}}}),ae=F(h,[["__scopeId","data-v-84fafa60"]]);export{ae as default};
|
||||
@@ -1 +1 @@
|
||||
import{d as A,m as M,c as S,b as P,e as l,w as n,Q as z,s as U,i as s,j as o,R as j,o as k,k as r,f as L,g as Q,t as R,E as b,S as T}from"./index-DopNG1aC.js";import{a as _,_ as q}from"./index-DGfZijDv.js";import{A as F}from"./AdminCoverUpload-DvubFX2N.js";import{u as G}from"./uploadUrl-CyxyoWKj.js";const H={class:"admin-crud-page"},J={class:"page-header"},K=A({__name:"BannerPage",setup(W){const g=s(!1),V=s(!1),c=s([]),m=s(!1),p=s(null),t=s({});async function y(){g.value=!0;try{const u=await _.getBanners();c.value=u.data??[]}catch{c.value=[]}finally{g.value=!1}}function w(u){u?(p.value=u.bannerId,t.value={...u}):(p.value=null,t.value={sortOrder:0,isPublished:0}),m.value=!0}async function C(){V.value=!0;try{p.value?await _.updateBanner({...t.value,bannerId:p.value}):await _.addBanner(t.value),b.success("保存成功"),m.value=!1,y()}catch{b.error("保存失败")}V.value=!1}async function x(u){await T.confirm("确认删除?","提示",{type:"warning"});try{await _.deleteBanner(u),b.success("删除成功"),y()}catch{b.error("删除失败")}}return M(y),(u,e)=>{const v=o("el-button"),i=o("el-table-column"),B=o("el-image"),E=o("el-tag"),I=o("el-table"),f=o("el-input"),d=o("el-form-item"),h=o("el-input-number"),D=o("el-switch"),Z=o("el-form"),N=o("el-dialog"),O=j("loading");return k(),S("div",H,[P("div",J,[e[12]||(e[12]=P("h2",null,"轮播图管理",-1)),l(v,{type:"primary",onClick:e[0]||(e[0]=a=>w())},{default:n(()=>[...e[11]||(e[11]=[r("新增轮播图",-1)])]),_:1})]),z((k(),U(I,{data:c.value,border:"",stripe:""},{default:n(()=>[l(i,{prop:"bannerId",label:"ID",width:"80"}),l(i,{label:"图片",width:"160"},{default:n(({row:a})=>[a.imagePath?(k(),U(B,{key:0,src:L(G)(a.imagePath),style:{width:"120px",height:"60px"},fit:"cover"},null,8,["src"])):Q("",!0)]),_:1}),l(i,{prop:"titleZh",label:"标题(中)"}),l(i,{prop:"titleEn",label:"标题(英)"}),l(i,{prop:"sortOrder",label:"排序",width:"80"}),l(i,{prop:"isPublished",label:"状态",width:"80"},{default:n(({row:a})=>[l(E,{type:a.isPublished?"success":"info"},{default:n(()=>[r(R(a.isPublished?"已发布":"草稿"),1)]),_:2},1032,["type"])]),_:1}),l(i,{label:"操作",width:"160",fixed:"right"},{default:n(({row:a})=>[l(v,{size:"small",onClick:$=>w(a)},{default:n(()=>[...e[13]||(e[13]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(v,{size:"small",type:"danger",onClick:$=>x(a.bannerId)},{default:n(()=>[...e[14]||(e[14]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[O,g.value]]),l(N,{modelValue:m.value,"onUpdate:modelValue":e[10]||(e[10]=a=>m.value=a),title:p.value?"编辑轮播图":"新增轮播图",width:"700px"},{footer:n(()=>[l(v,{onClick:e[9]||(e[9]=a=>m.value=!1)},{default:n(()=>[...e[15]||(e[15]=[r("取消",-1)])]),_:1}),l(v,{type:"primary",onClick:C,loading:V.value},{default:n(()=>[...e[16]||(e[16]=[r("保存",-1)])]),_:1},8,["loading"])]),default:n(()=>[l(Z,{model:t.value,"label-width":"120px"},{default:n(()=>[l(d,{label:"标题(中)"},{default:n(()=>[l(f,{modelValue:t.value.titleZh,"onUpdate:modelValue":e[1]||(e[1]=a=>t.value.titleZh=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"标题(英)"},{default:n(()=>[l(f,{modelValue:t.value.titleEn,"onUpdate:modelValue":e[2]||(e[2]=a=>t.value.titleEn=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"副标题(中)"},{default:n(()=>[l(f,{modelValue:t.value.subtitleZh,"onUpdate:modelValue":e[3]||(e[3]=a=>t.value.subtitleZh=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"副标题(英)"},{default:n(()=>[l(f,{modelValue:t.value.subtitleEn,"onUpdate:modelValue":e[4]||(e[4]=a=>t.value.subtitleEn=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"图片"},{default:n(()=>[l(F,{modelValue:t.value.imagePath,"onUpdate:modelValue":e[5]||(e[5]=a=>t.value.imagePath=a),"media-category":"banner"},null,8,["modelValue"])]),_:1}),l(d,{label:"链接"},{default:n(()=>[l(f,{modelValue:t.value.linkUrl,"onUpdate:modelValue":e[6]||(e[6]=a=>t.value.linkUrl=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"排序"},{default:n(()=>[l(h,{modelValue:t.value.sortOrder,"onUpdate:modelValue":e[7]||(e[7]=a=>t.value.sortOrder=a),min:0},null,8,["modelValue"])]),_:1}),l(d,{label:"发布状态"},{default:n(()=>[l(D,{modelValue:t.value.isPublished,"onUpdate:modelValue":e[8]||(e[8]=a=>t.value.isPublished=a),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}}),ae=q(K,[["__scopeId","data-v-15305b1b"]]);export{ae as default};
|
||||
import{d as A,m as M,c as z,b as P,e as l,w as n,W as S,s as U,i as s,j as o,X as j,o as k,k as r,f as L,g as T,t as W,I as b,Y as X}from"./index-CzwJBVIC.js";import{a as _,_ as Y}from"./index-8GqMb-ax.js";import{A as q}from"./AdminCoverUpload-BoIYFuAm.js";import{u as F}from"./uploadUrl-CyxyoWKj.js";const G={class:"admin-crud-page"},H={class:"page-header"},J=A({__name:"BannerPage",setup(K){const g=s(!1),V=s(!1),c=s([]),m=s(!1),p=s(null),t=s({});async function y(){g.value=!0;try{const u=await _.getBanners();c.value=u.data??[]}catch{c.value=[]}finally{g.value=!1}}function w(u){u?(p.value=u.bannerId,t.value={...u}):(p.value=null,t.value={sortOrder:0,isPublished:0}),m.value=!0}async function C(){V.value=!0;try{p.value?await _.updateBanner({...t.value,bannerId:p.value}):await _.addBanner(t.value),b.success("保存成功"),m.value=!1,y()}catch{b.error("保存失败")}V.value=!1}async function x(u){await X.confirm("确认删除?","提示",{type:"warning"});try{await _.deleteBanner(u),b.success("删除成功"),y()}catch{b.error("删除失败")}}return M(y),(u,e)=>{const v=o("el-button"),i=o("el-table-column"),B=o("el-image"),E=o("el-tag"),I=o("el-table"),f=o("el-input"),d=o("el-form-item"),h=o("el-input-number"),D=o("el-switch"),Z=o("el-form"),N=o("el-dialog"),O=j("loading");return k(),z("div",G,[P("div",H,[e[12]||(e[12]=P("h2",null,"轮播图管理",-1)),l(v,{type:"primary",onClick:e[0]||(e[0]=a=>w())},{default:n(()=>[...e[11]||(e[11]=[r("新增轮播图",-1)])]),_:1})]),S((k(),U(I,{data:c.value,border:"",stripe:""},{default:n(()=>[l(i,{prop:"bannerId",label:"ID",width:"80"}),l(i,{label:"图片",width:"160"},{default:n(({row:a})=>[a.imagePath?(k(),U(B,{key:0,src:L(F)(a.imagePath),style:{width:"120px",height:"60px"},fit:"cover"},null,8,["src"])):T("",!0)]),_:1}),l(i,{prop:"titleZh",label:"标题(中)"}),l(i,{prop:"titleEn",label:"标题(英)"}),l(i,{prop:"sortOrder",label:"排序",width:"80"}),l(i,{prop:"isPublished",label:"状态",width:"80"},{default:n(({row:a})=>[l(E,{type:a.isPublished?"success":"info"},{default:n(()=>[r(W(a.isPublished?"已发布":"草稿"),1)]),_:2},1032,["type"])]),_:1}),l(i,{label:"操作",width:"160",fixed:"right"},{default:n(({row:a})=>[l(v,{size:"small",onClick:$=>w(a)},{default:n(()=>[...e[13]||(e[13]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(v,{size:"small",type:"danger",onClick:$=>x(a.bannerId)},{default:n(()=>[...e[14]||(e[14]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[O,g.value]]),l(N,{modelValue:m.value,"onUpdate:modelValue":e[10]||(e[10]=a=>m.value=a),title:p.value?"编辑轮播图":"新增轮播图",width:"700px"},{footer:n(()=>[l(v,{onClick:e[9]||(e[9]=a=>m.value=!1)},{default:n(()=>[...e[15]||(e[15]=[r("取消",-1)])]),_:1}),l(v,{type:"primary",onClick:C,loading:V.value},{default:n(()=>[...e[16]||(e[16]=[r("保存",-1)])]),_:1},8,["loading"])]),default:n(()=>[l(Z,{model:t.value,"label-width":"120px"},{default:n(()=>[l(d,{label:"标题(中)"},{default:n(()=>[l(f,{modelValue:t.value.titleZh,"onUpdate:modelValue":e[1]||(e[1]=a=>t.value.titleZh=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"标题(英)"},{default:n(()=>[l(f,{modelValue:t.value.titleEn,"onUpdate:modelValue":e[2]||(e[2]=a=>t.value.titleEn=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"副标题(中)"},{default:n(()=>[l(f,{modelValue:t.value.subtitleZh,"onUpdate:modelValue":e[3]||(e[3]=a=>t.value.subtitleZh=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"副标题(英)"},{default:n(()=>[l(f,{modelValue:t.value.subtitleEn,"onUpdate:modelValue":e[4]||(e[4]=a=>t.value.subtitleEn=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"图片"},{default:n(()=>[l(q,{modelValue:t.value.imagePath,"onUpdate:modelValue":e[5]||(e[5]=a=>t.value.imagePath=a),"media-category":"banner"},null,8,["modelValue"])]),_:1}),l(d,{label:"链接"},{default:n(()=>[l(f,{modelValue:t.value.linkUrl,"onUpdate:modelValue":e[6]||(e[6]=a=>t.value.linkUrl=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"排序"},{default:n(()=>[l(h,{modelValue:t.value.sortOrder,"onUpdate:modelValue":e[7]||(e[7]=a=>t.value.sortOrder=a),min:0},null,8,["modelValue"])]),_:1}),l(d,{label:"发布状态"},{default:n(()=>[l(D,{modelValue:t.value.isPublished,"onUpdate:modelValue":e[8]||(e[8]=a=>t.value.isPublished=a),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}}),ae=Y(J,[["__scopeId","data-v-15305b1b"]]);export{ae as default};
|
||||
1
client/dist/assets/CaseDetailPage-BhqAhLfc.js
vendored
Normal file
1
client/dist/assets/CaseDetailPage-BhqAhLfc.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{d as _,u as v,m as h,c as n,b as a,t as s,f as t,g as i,q as y,s as g,l as b,i as f,h as k,j as N,o}from"./index-CzwJBVIC.js";import{p as C,_ as j}from"./index-8GqMb-ax.js";import{g as I}from"./caseStudyDisplay-BpRnrzFj.js";const z={class:"detail-page"},B={class:"page-banner"},D={class:"container page-banner-content"},E={class:"section"},Z={class:"container"},x={key:0,class:"detail-content"},H={class:"detail-meta"},L={key:0,class:"meta-item"},M={class:"meta-label"},S={key:1,class:"meta-item"},P={class:"meta-label"},T={key:2,class:"meta-item"},V={class:"meta-label"},q=["innerHTML"],w=_({__name:"CaseDetailPage",setup(A){const u=b(),{t:l,locale:c}=v(),e=f(null),p=k(()=>e.value?I(e.value,c.value==="en"?"en":"zh").headline:"");return h(async()=>{try{const r=await C.getCaseById(Number(u.params.id));e.value=r.data}catch{}}),(r,d)=>{const m=N("el-empty");return o(),n("div",z,[a("section",B,[d[0]||(d[0]=a("div",{class:"page-banner-overlay"},null,-1)),a("div",D,[a("h1",null,s(p.value),1)])]),a("section",E,[a("div",Z,[e.value?(o(),n("div",x,[a("div",H,[e.value.projectNameZh||e.value.projectNameEn?(o(),n("div",L,[a("span",M,s(t(l)("cases.projectName")),1),a("span",null,s(t(c)==="zh"?e.value.projectNameZh:e.value.projectNameEn),1)])):i("",!0),e.value.location?(o(),n("div",S,[a("span",P,s(t(l)("cases.location")),1),a("span",null,s(e.value.location),1)])):i("",!0),e.value.scopeZh?(o(),n("div",T,[a("span",V,s(t(l)("cases.scope")),1),a("span",null,s(t(c)==="zh"?e.value.scopeZh:e.value.scopeEn),1)])):i("",!0)]),e.value.coverImage?(o(),n("div",{key:0,class:"detail-img",style:y({backgroundImage:`url(${e.value.coverImage})`})},null,4)):i("",!0),a("div",{class:"detail-body",innerHTML:t(c)==="zh"?e.value.contentZh:e.value.contentEn},null,8,q)])):(o(),g(m,{key:1,description:t(l)("common.noData")},null,8,["description"]))])])])}}}),G=j(w,[["__scopeId","data-v-47dee984"]]);export{G as default};
|
||||
1
client/dist/assets/CaseDetailPage-CxD7p5TS.css
vendored
Normal file
1
client/dist/assets/CaseDetailPage-CxD7p5TS.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.page-banner[data-v-47dee984]{height:300px;background:#036;position:relative;display:flex;align-items:center}@media(max-width:768px){.page-banner[data-v-47dee984]{height:200px}}.page-banner-overlay[data-v-47dee984]{position:absolute;inset:0;background:linear-gradient(135deg,#001e3ccc,#0369)}.page-banner-content[data-v-47dee984]{position:relative;z-index:1;color:#fff}.page-banner-content h1[data-v-47dee984]{font-size:36px;font-weight:700}.detail-content[data-v-47dee984]{max-width:900px;margin:0 auto}.detail-meta[data-v-47dee984]{display:flex;gap:32px;margin-bottom:32px;flex-wrap:wrap;padding:20px;background:#f9fafb;border-radius:8px}.meta-item .meta-label[data-v-47dee984]{font-weight:600;color:#036;margin-right:8px}.detail-img[data-v-47dee984]{height:400px;background-size:cover;background-position:center;border-radius:16px;margin-bottom:32px;background-color:#e5e7eb}.detail-body[data-v-47dee984]{font-size:16px;line-height:2;color:#374151}.detail-body[data-v-47dee984] img{max-width:100%;border-radius:8px;margin:16px 0}
|
||||
@@ -1 +0,0 @@
|
||||
import{d as m,u as p,m as v,c as n,b as a,t,f as s,g as i,q as h,s as y,l as g,i as b,j as k,o}from"./index-DopNG1aC.js";import{p as f,_ as N}from"./index-DGfZijDv.js";const Z={class:"detail-page"},z={class:"page-banner"},C={class:"container page-banner-content"},E={class:"section"},I={class:"container"},j={key:0,class:"detail-content"},B={class:"detail-meta"},D={key:0,class:"meta-item"},x={class:"meta-label"},M={key:1,class:"meta-item"},H={class:"meta-label"},L={key:2,class:"meta-item"},P={class:"meta-label"},S=["innerHTML"],T=m({__name:"CaseDetailPage",setup(V){const u=g(),{t:c,locale:l}=p(),e=b(null);return v(async()=>{try{const r=await f.getCaseById(Number(u.params.id));e.value=r.data}catch{}}),(r,d)=>{const _=k("el-empty");return o(),n("div",Z,[a("section",z,[d[0]||(d[0]=a("div",{class:"page-banner-overlay"},null,-1)),a("div",C,[a("h1",null,t(s(l)==="zh"?e.value?.clientNameZh:e.value?.clientNameEn),1)])]),a("section",E,[a("div",I,[e.value?(o(),n("div",j,[a("div",B,[e.value.projectNameZh?(o(),n("div",D,[a("span",x,t(s(c)("cases.projectName")),1),a("span",null,t(s(l)==="zh"?e.value.projectNameZh:e.value.projectNameEn),1)])):i("",!0),e.value.locationZh?(o(),n("div",M,[a("span",H,t(s(c)("cases.location")),1),a("span",null,t(s(l)==="zh"?e.value.locationZh:e.value.locationEn),1)])):i("",!0),e.value.scopeZh?(o(),n("div",L,[a("span",P,t(s(c)("cases.scope")),1),a("span",null,t(s(l)==="zh"?e.value.scopeZh:e.value.scopeEn),1)])):i("",!0)]),e.value.coverImage?(o(),n("div",{key:0,class:"detail-img",style:h({backgroundImage:`url(${e.value.coverImage})`})},null,4)):i("",!0),a("div",{class:"detail-body",innerHTML:s(l)==="zh"?e.value.contentZh:e.value.contentEn},null,8,S)])):(o(),y(_,{key:1,description:s(c)("common.noData")},null,8,["description"]))])])])}}}),A=N(T,[["__scopeId","data-v-8b528cce"]]);export{A as default};
|
||||
@@ -1 +0,0 @@
|
||||
.page-banner[data-v-8b528cce]{height:300px;background:#036;position:relative;display:flex;align-items:center}@media(max-width:768px){.page-banner[data-v-8b528cce]{height:200px}}.page-banner-overlay[data-v-8b528cce]{position:absolute;inset:0;background:linear-gradient(135deg,#001e3ccc,#0369)}.page-banner-content[data-v-8b528cce]{position:relative;z-index:1;color:#fff}.page-banner-content h1[data-v-8b528cce]{font-size:36px;font-weight:700}.detail-content[data-v-8b528cce]{max-width:900px;margin:0 auto}.detail-meta[data-v-8b528cce]{display:flex;gap:32px;margin-bottom:32px;flex-wrap:wrap;padding:20px;background:#f9fafb;border-radius:8px}.meta-item .meta-label[data-v-8b528cce]{font-weight:600;color:#036;margin-right:8px}.detail-img[data-v-8b528cce]{height:400px;background-size:cover;background-position:center;border-radius:16px;margin-bottom:32px;background-color:#e5e7eb}.detail-body[data-v-8b528cce]{font-size:16px;line-height:2;color:#374151}.detail-body[data-v-8b528cce] img{max-width:100%;border-radius:8px;margin:16px 0}
|
||||
File diff suppressed because one or more lines are too long
1
client/dist/assets/CasesPage-CZxjP4x7.js
vendored
1
client/dist/assets/CasesPage-CZxjP4x7.js
vendored
@@ -1 +0,0 @@
|
||||
import{d as z,u as N,m as w,y as E,c as r,b as s,t as l,f as o,n as v,F as g,r as h,s as y,g as C,i as _,j as f,o as n,w as S,q as j}from"./index-DopNG1aC.js";import{p as k,_ as x}from"./index-DGfZijDv.js";const B={class:"cases-page"},Z={class:"page-banner"},$={class:"container page-banner-content"},D={class:"section"},F={class:"container"},P={class:"cases-filter"},V=["onClick"],q={class:"cases-grid"},A={class:"case-info"},L={class:"case-project"},M={class:"case-desc"},R=z({__name:"CasesPage",setup(G){const{t:d,locale:i}=N(),p=_([]),u=_([]),a=_(null);async function m(){try{const t={};a.value&&(t.categoryId=a.value);const c=await k.getCases(t);u.value=c.data||[]}catch{}}return w(async()=>{try{const t=await k.getCaseCategories();p.value=t.data||[]}catch{}m()}),E(a,m),(t,c)=>{const I=f("router-link"),b=f("el-empty");return n(),r("div",B,[s("section",Z,[c[1]||(c[1]=s("div",{class:"page-banner-overlay"},null,-1)),s("div",$,[s("h1",null,l(o(d)("cases.title")),1)])]),s("section",D,[s("div",F,[s("div",P,[s("button",{class:v({active:!a.value}),onClick:c[0]||(c[0]=e=>a.value=null)},l(o(d)("cases.allCategories")),3),(n(!0),r(g,null,h(p.value,e=>(n(),r("button",{key:e.caseCategoryId,class:v({active:a.value===e.caseCategoryId}),onClick:H=>a.value=e.caseCategoryId},l(o(i)==="zh"?e.nameZh:e.nameEn),11,V))),128))]),s("div",q,[(n(!0),r(g,null,h(u.value,e=>(n(),y(I,{key:e.caseStudyId,to:`/cases/${e.caseStudyId}`,class:"case-card card"},{default:S(()=>[e.coverImage?(n(),r("div",{key:0,class:"case-img",style:j({backgroundImage:`url(${e.coverImage})`})},null,4)):C("",!0),s("div",A,[s("h3",null,l(o(i)==="zh"?e.clientNameZh:e.clientNameEn),1),s("p",L,l(o(i)==="zh"?e.projectNameZh:e.projectNameEn),1),s("p",M,l(o(i)==="zh"?e.descriptionZh:e.descriptionEn),1)])]),_:2},1032,["to"]))),128))]),u.value.length?C("",!0):(n(),y(b,{key:0,description:o(d)("common.noData")},null,8,["description"]))])])])}}}),O=x(R,[["__scopeId","data-v-babce955"]]);export{O as default};
|
||||
1
client/dist/assets/CasesPage-CvSBwKV2.css
vendored
1
client/dist/assets/CasesPage-CvSBwKV2.css
vendored
@@ -1 +0,0 @@
|
||||
.page-banner[data-v-babce955]{height:300px;background:#036;position:relative;display:flex;align-items:center}@media(max-width:768px){.page-banner[data-v-babce955]{height:200px}}.page-banner-overlay[data-v-babce955]{position:absolute;inset:0;background:linear-gradient(135deg,#001e3ccc,#0369)}.page-banner-content[data-v-babce955]{position:relative;z-index:1;color:#fff}.page-banner-content h1[data-v-babce955]{font-size:42px;font-weight:700}.cases-filter[data-v-babce955]{display:flex;gap:12px;margin-bottom:32px;flex-wrap:wrap}.cases-filter button[data-v-babce955]{padding:8px 20px;border:2px solid #E5E7EB;background:#fff;border-radius:8px;cursor:pointer;font-size:14px;color:#4b5563;transition:all .3s ease}.cases-filter button[data-v-babce955]:hover,.cases-filter button.active[data-v-babce955]{border-color:#036;color:#036}.cases-filter button.active[data-v-babce955]{background:#036;color:#fff}.cases-grid[data-v-babce955]{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}@media(max-width:768px){.cases-grid[data-v-babce955]{grid-template-columns:1fr}}.case-card[data-v-babce955]{text-decoration:none;overflow:hidden}.case-img[data-v-babce955]{height:220px;background-size:cover;background-position:center;background-color:#e5e7eb}.case-info[data-v-babce955]{padding:20px}.case-info h3[data-v-babce955]{font-size:20px;color:#036;margin-bottom:8px}.case-project[data-v-babce955]{font-size:16px;color:#374151;font-weight:500;margin-bottom:8px}.case-desc[data-v-babce955]{color:#4b5563;font-size:14px;line-height:1.6;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
|
||||
1
client/dist/assets/CasesPage-CvZEz6IJ.js
vendored
Normal file
1
client/dist/assets/CasesPage-CvZEz6IJ.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
import{d as B,u as x,m as A,G as D,c as l,b as a,t as r,f as d,n as y,F as C,r as b,s as k,g as m,i as f,j as I,o as n,w as $,q as E}from"./index-CzwJBVIC.js";import{p as S,_ as P}from"./index-8GqMb-ax.js";import{u as U}from"./uploadUrl-CyxyoWKj.js";import{g as j}from"./caseStudyDisplay-BpRnrzFj.js";const F={class:"cases-page"},M={class:"page-banner"},N={class:"container page-banner-content"},V={class:"section"},Z={class:"container"},q={class:"cases-filter"},G=["onClick"],R={class:"cases-grid"},T={key:1,class:"case-img case-img--placeholder","aria-hidden":"true"},W={class:"case-img__industrial"},H={class:"case-img__watermark"},J={class:"case-img__hud"},K={class:"case-img__hud-mark"},O={key:0,class:"case-img__hud-meta"},Q={class:"case-info"},X={key:0,class:"case-project"},Y={class:"case-desc"},ee={key:1,class:"case-cat"},se=B({__name:"CasesPage",setup(ae){const{t:_,locale:p}=x(),h=f([]),g=f([]),i=f(null);function o(t){return j(t,p.value==="en"?"en":"zh")}function w(t){const e=o(t);return e.metaSummary?e.metaSummary:e.summary?e.summary:((p.value==="zh"?t.descriptionZh:t.descriptionEn)||"").trim()}function L(t){const e=o(t);return(e.headline||e.subhead||"Success Case").trim()}function z(t){const e=o(t),c=(e.headline||e.subhead||"").trim();if(!c)return"SC";if(/[\u3000-\u303f\u4e00-\u9fff\uff00-\uffef]/.test(c)){const s=c.replace(/^[\s·.]+/,"");return s.length>=2?s.slice(0,2):s.charAt(0)||"案"}const u=c.split(/[\s/|,-]+/).filter(Boolean);return u.length>=2?(u[0].charAt(0)+u[1].charAt(0)).toUpperCase():c.slice(0,2).toUpperCase()}async function v(){try{const t={};i.value&&(t.categoryId=i.value);const e=await S.getCases(t);g.value=e.data||[]}catch(t){console.error("案例列表加载失败",t)}}return A(async()=>{try{const t=await S.getCaseCategories();h.value=t.data||[]}catch(t){console.error("案例分类加载失败",t)}v()}),D(i,v),(t,e)=>{const c=I("router-link"),u=I("el-empty");return n(),l("div",F,[a("section",M,[e[1]||(e[1]=a("div",{class:"page-banner-overlay"},null,-1)),a("div",N,[a("h1",null,r(d(_)("cases.title")),1)])]),a("section",V,[a("div",Z,[a("div",q,[a("button",{class:y({active:!i.value}),onClick:e[0]||(e[0]=s=>i.value=null)},r(d(_)("cases.allCategories")),3),(n(!0),l(C,null,b(h.value,s=>(n(),l("button",{key:s.caseCategoryId,class:y({active:i.value===s.caseCategoryId}),onClick:te=>i.value=s.caseCategoryId},r(d(p)==="zh"?s.nameZh:s.nameEn),11,G))),128))]),a("div",R,[(n(!0),l(C,null,b(g.value,s=>(n(),k(c,{key:s.caseStudyId,to:`/cases/${s.caseStudyId}`,class:"case-card card"},{default:$(()=>[s.coverImage?(n(),l("div",{key:0,class:"case-img",style:E({backgroundImage:`url(${d(U)(s.coverImage)})`})},null,4)):(n(),l("div",T,[a("div",W,[e[2]||(e[2]=a("div",{class:"case-img__mesh"},null,-1)),e[3]||(e[3]=a("div",{class:"case-img__scan"},null,-1)),e[4]||(e[4]=a("div",{class:"case-img__rim"},null,-1)),a("p",H,r(L(s)),1),a("div",J,[a("span",K,r(z(s)),1),o(s).categoryLabel?(n(),l("span",O,r(o(s).categoryLabel),1)):m("",!0)]),e[5]||(e[5]=a("div",{class:"case-img__baseline"},null,-1))])])),a("div",Q,[a("h3",null,r(o(s).headline),1),o(s).subhead?(n(),l("p",X,r(o(s).subhead),1)):m("",!0),a("p",Y,r(w(s)),1),o(s).categoryLabel?(n(),l("span",ee,r(o(s).categoryLabel),1)):m("",!0)])]),_:2},1032,["to"]))),128))]),g.value.length?m("",!0):(n(),k(u,{key:0,description:d(_)("common.noData")},null,8,["description"]))])])])}}}),ce=P(se,[["__scopeId","data-v-66f996b9"]]);export{ce as default};
|
||||
1
client/dist/assets/CasesPage-XgxyRXDt.css
vendored
Normal file
1
client/dist/assets/CasesPage-XgxyRXDt.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.page-banner[data-v-66f996b9]{height:300px;background:#036;position:relative;display:flex;align-items:center}@media(max-width:768px){.page-banner[data-v-66f996b9]{height:200px}}.page-banner-overlay[data-v-66f996b9]{position:absolute;inset:0;background:linear-gradient(135deg,#001e3ccc,#0369)}.page-banner-content[data-v-66f996b9]{position:relative;z-index:1;color:#fff}.page-banner-content h1[data-v-66f996b9]{font-size:42px;font-weight:700}.cases-filter[data-v-66f996b9]{display:flex;gap:12px;margin-bottom:32px;flex-wrap:wrap}.cases-filter button[data-v-66f996b9]{padding:8px 20px;border:2px solid #E5E7EB;background:#fff;border-radius:8px;cursor:pointer;font-size:14px;color:#4b5563;transition:all .3s ease}.cases-filter button[data-v-66f996b9]:hover,.cases-filter button.active[data-v-66f996b9]{border-color:#036;color:#036}.cases-filter button.active[data-v-66f996b9]{background:#036;color:#fff}.cases-grid[data-v-66f996b9]{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}@media(max-width:768px){.cases-grid[data-v-66f996b9]{grid-template-columns:1fr}}.case-card[data-v-66f996b9]{text-decoration:none;overflow:hidden}.case-img[data-v-66f996b9]{height:200px;background-size:cover;background-position:center;background-color:#e5e7eb}.case-img--placeholder[data-v-66f996b9]{position:relative;border-bottom:1px solid rgba(0,51,102,.12);background:#024}.case-img__industrial[data-v-66f996b9]{position:relative;height:100%;min-height:200px;overflow:hidden;background:linear-gradient(155deg,#024,#036 42%,#048 78%,#003569);box-sizing:border-box}.case-img__mesh[data-v-66f996b9]{position:absolute;inset:0;opacity:.22;background-image:repeating-linear-gradient(0deg,transparent,transparent 11px,rgba(255,255,255,.07) 11px,rgba(255,255,255,.07) 12px),repeating-linear-gradient(90deg,transparent,transparent 11px,rgba(255,255,255,.05) 11px,rgba(255,255,255,.05) 12px);pointer-events:none}.case-img__scan[data-v-66f996b9]{position:absolute;inset:-40% -20%;opacity:.14;transform:rotate(-18deg);background:repeating-linear-gradient(0deg,transparent,transparent 18px,rgba(255,255,255,.09) 18px,rgba(255,255,255,.09) 19px);pointer-events:none}.case-img__rim[data-v-66f996b9]{position:absolute;top:-30%;right:-18%;width:68%;height:95%;border-radius:50%;border:1px solid rgba(255,255,255,.12);box-shadow:inset 0 0 0 1px #0000001f,0 0 40px #00000040;pointer-events:none}.case-img__watermark[data-v-66f996b9]{position:absolute;inset:14px 52px 52px 16px;margin:0;padding:0;font-size:17px;font-weight:700;line-height:1.28;letter-spacing:.03em;text-align:left;color:#ffffff42;text-shadow:0 1px 0 rgba(0,0,0,.25);display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden;word-break:break-word;font-family:Source Han Sans CN,Microsoft YaHei,PingFang SC,sans-serif,Roboto,Montserrat,Helvetica Neue,Arial,sans-serif}.case-img__hud[data-v-66f996b9]{position:absolute;left:14px;bottom:14px;display:flex;align-items:center;gap:10px;max-width:calc(100% - 24px)}.case-img__hud-mark[data-v-66f996b9]{flex-shrink:0;width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:800;letter-spacing:.02em;color:#fffffff2;font-family:Roboto,Montserrat,Helvetica Neue,Arial,sans-serif,Source Han Sans CN,Microsoft YaHei,PingFang SC,sans-serif,sans-serif;background:#00000038;border:1px solid rgba(255,255,255,.35);border-radius:4px;box-shadow:0 2px 8px #00000059,inset 0 1px #ffffff1f}.case-img__hud-meta[data-v-66f996b9]{font-size:10px;font-weight:700;line-height:1.35;letter-spacing:.14em;text-transform:uppercase;color:#ffffffc7;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.case-img__baseline[data-v-66f996b9]{position:absolute;left:0;right:0;bottom:0;height:3px;background:linear-gradient(90deg,#f59e0bd9,#ffffff73,#004488e6);opacity:.9}.case-card:hover .case-img__industrial[data-v-66f996b9]{filter:brightness(1.06)}.case-card:hover .case-img__watermark[data-v-66f996b9]{color:#ffffff52}.case-info[data-v-66f996b9]{padding:20px}.case-info h3[data-v-66f996b9]{font-size:19px;color:#111827;margin-bottom:8px;line-height:1.35}.case-project[data-v-66f996b9]{font-size:15px;color:#036;font-weight:600;margin-bottom:8px;line-height:1.45}.case-desc[data-v-66f996b9]{color:#4b5563;font-size:14px;line-height:1.65;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;margin:0}.case-cat[data-v-66f996b9]{display:inline-block;margin-top:12px;font-size:12px;font-weight:700;color:#6b7280;letter-spacing:.04em;text-transform:uppercase}
|
||||
@@ -1 +1 @@
|
||||
import{d as w,m as E,E as f,c as I,b as V,Q as C,s as Z,w as n,i as r,j as s,R as k,o as _,e as l,k as S}from"./index-DopNG1aC.js";import{a as i,_ as B}from"./index-DGfZijDv.js";const H={class:"admin-crud-page"},N={style:{"margin-top":"20px","text-align":"right"}},P=w({__name:"CompanyPage",setup(R){const p=r(!1),v=r(!1),o=r({}),u=r({});E(async()=>{p.value=!0;try{const[m,e]=await Promise.all([i.getCompanyInfo(),i.getContact()]);o.value={...m.data||{}},u.value={...e.data||{}}}catch{f.error("加载公司信息失败")}finally{p.value=!1}});async function y(){v.value=!0;try{o.value.companyInfoId=o.value.companyInfoId??1,await i.updateCompanyInfo(o.value),u.value.companyInfoId=u.value.companyInfoId??1,await i.updateContact(u.value),f.success("保存成功")}catch{f.error("保存失败")}finally{v.value=!1}}return(m,e)=>{const d=s("el-input"),t=s("el-form-item"),g=s("el-input-number"),b=s("el-card"),c=s("el-button"),x=s("el-form"),U=k("loading");return _(),I("div",H,[e[13]||(e[13]=V("div",{class:"page-header"},[V("h2",null,"公司信息管理")],-1)),C((_(),Z(x,{"label-width":"140px"},{default:n(()=>[l(b,{header:"公司基本信息"},{default:n(()=>[l(t,{label:"公司名称(中)"},{default:n(()=>[l(d,{modelValue:o.value.nameZh,"onUpdate:modelValue":e[0]||(e[0]=a=>o.value.nameZh=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"公司名称(英)"},{default:n(()=>[l(d,{modelValue:o.value.nameEn,"onUpdate:modelValue":e[1]||(e[1]=a=>o.value.nameEn=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"成立年份"},{default:n(()=>[l(g,{modelValue:o.value.establishedYear,"onUpdate:modelValue":e[2]||(e[2]=a=>o.value.establishedYear=a),min:1900,max:2100},null,8,["modelValue"])]),_:1}),l(t,{label:"公司简介(中)"},{default:n(()=>[l(d,{modelValue:o.value.businessScopeZh,"onUpdate:modelValue":e[3]||(e[3]=a=>o.value.businessScopeZh=a),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(t,{label:"公司简介(英)"},{default:n(()=>[l(d,{modelValue:o.value.businessScopeEn,"onUpdate:modelValue":e[4]||(e[4]=a=>o.value.businessScopeEn=a),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(t,{label:"官网地址"},{default:n(()=>[l(d,{modelValue:o.value.website,"onUpdate:modelValue":e[5]||(e[5]=a=>o.value.website=a)},null,8,["modelValue"])]),_:1})]),_:1}),l(b,{header:"联系方式",style:{"margin-top":"20px"}},{default:n(()=>[l(t,{label:"电话"},{default:n(()=>[l(d,{modelValue:u.value.phone,"onUpdate:modelValue":e[6]||(e[6]=a=>u.value.phone=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"邮箱"},{default:n(()=>[l(d,{modelValue:u.value.email,"onUpdate:modelValue":e[7]||(e[7]=a=>u.value.email=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"地址(中)"},{default:n(()=>[l(d,{modelValue:u.value.addressZh,"onUpdate:modelValue":e[8]||(e[8]=a=>u.value.addressZh=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"地址(英)"},{default:n(()=>[l(d,{modelValue:u.value.addressEn,"onUpdate:modelValue":e[9]||(e[9]=a=>u.value.addressEn=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"营业时间(中)"},{default:n(()=>[l(d,{modelValue:u.value.businessHoursZh,"onUpdate:modelValue":e[10]||(e[10]=a=>u.value.businessHoursZh=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"营业时间(英)"},{default:n(()=>[l(d,{modelValue:u.value.businessHoursEn,"onUpdate:modelValue":e[11]||(e[11]=a=>u.value.businessHoursEn=a)},null,8,["modelValue"])]),_:1})]),_:1}),V("div",N,[l(c,{type:"primary",loading:v.value,onClick:y},{default:n(()=>[...e[12]||(e[12]=[S("保存",-1)])]),_:1},8,["loading"])])]),_:1})),[[U,p.value]])])}}}),Y=B(P,[["__scopeId","data-v-506ae1c2"]]);export{Y as default};
|
||||
import{d as U,m as w,I as f,c as C,b as V,W as E,s as Z,w as n,i as r,j as s,X as k,o as _,e as l,k as S}from"./index-CzwJBVIC.js";import{a as i,_ as B}from"./index-8GqMb-ax.js";const H={class:"admin-crud-page"},N={style:{"margin-top":"20px","text-align":"right"}},P=U({__name:"CompanyPage",setup(D){const p=r(!1),v=r(!1),o=r({}),u=r({});w(async()=>{p.value=!0;try{const[m,e]=await Promise.all([i.getCompanyInfo(),i.getContact()]);o.value={...m.data||{}},u.value={...e.data||{}}}catch{f.error("加载公司信息失败")}finally{p.value=!1}});async function y(){v.value=!0;try{o.value.companyInfoId=o.value.companyInfoId??1,await i.updateCompanyInfo(o.value),u.value.companyInfoId=u.value.companyInfoId??1,await i.updateContact(u.value),f.success("保存成功")}catch{f.error("保存失败")}finally{v.value=!1}}return(m,e)=>{const d=s("el-input"),t=s("el-form-item"),g=s("el-input-number"),b=s("el-card"),c=s("el-button"),x=s("el-form"),I=k("loading");return _(),C("div",H,[e[13]||(e[13]=V("div",{class:"page-header"},[V("h2",null,"公司信息管理")],-1)),E((_(),Z(x,{"label-width":"140px"},{default:n(()=>[l(b,{header:"公司基本信息"},{default:n(()=>[l(t,{label:"公司名称(中)"},{default:n(()=>[l(d,{modelValue:o.value.nameZh,"onUpdate:modelValue":e[0]||(e[0]=a=>o.value.nameZh=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"公司名称(英)"},{default:n(()=>[l(d,{modelValue:o.value.nameEn,"onUpdate:modelValue":e[1]||(e[1]=a=>o.value.nameEn=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"成立年份"},{default:n(()=>[l(g,{modelValue:o.value.establishedYear,"onUpdate:modelValue":e[2]||(e[2]=a=>o.value.establishedYear=a),min:1900,max:2100},null,8,["modelValue"])]),_:1}),l(t,{label:"公司简介(中)"},{default:n(()=>[l(d,{modelValue:o.value.businessScopeZh,"onUpdate:modelValue":e[3]||(e[3]=a=>o.value.businessScopeZh=a),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(t,{label:"公司简介(英)"},{default:n(()=>[l(d,{modelValue:o.value.businessScopeEn,"onUpdate:modelValue":e[4]||(e[4]=a=>o.value.businessScopeEn=a),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(t,{label:"官网地址"},{default:n(()=>[l(d,{modelValue:o.value.website,"onUpdate:modelValue":e[5]||(e[5]=a=>o.value.website=a)},null,8,["modelValue"])]),_:1})]),_:1}),l(b,{header:"联系方式",style:{"margin-top":"20px"}},{default:n(()=>[l(t,{label:"电话"},{default:n(()=>[l(d,{modelValue:u.value.phone,"onUpdate:modelValue":e[6]||(e[6]=a=>u.value.phone=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"邮箱"},{default:n(()=>[l(d,{modelValue:u.value.email,"onUpdate:modelValue":e[7]||(e[7]=a=>u.value.email=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"地址(中)"},{default:n(()=>[l(d,{modelValue:u.value.addressZh,"onUpdate:modelValue":e[8]||(e[8]=a=>u.value.addressZh=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"地址(英)"},{default:n(()=>[l(d,{modelValue:u.value.addressEn,"onUpdate:modelValue":e[9]||(e[9]=a=>u.value.addressEn=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"营业时间(中)"},{default:n(()=>[l(d,{modelValue:u.value.businessHoursZh,"onUpdate:modelValue":e[10]||(e[10]=a=>u.value.businessHoursZh=a)},null,8,["modelValue"])]),_:1}),l(t,{label:"营业时间(英)"},{default:n(()=>[l(d,{modelValue:u.value.businessHoursEn,"onUpdate:modelValue":e[11]||(e[11]=a=>u.value.businessHoursEn=a)},null,8,["modelValue"])]),_:1})]),_:1}),V("div",N,[l(c,{type:"primary",loading:v.value,onClick:y},{default:n(()=>[...e[12]||(e[12]=[S("保存",-1)])]),_:1},8,["loading"])])]),_:1})),[[I,p.value]])])}}}),Y=B(P,[["__scopeId","data-v-506ae1c2"]]);export{Y as default};
|
||||
@@ -1 +1 @@
|
||||
import{d as j,u as E,m as P,c as g,b as e,t as n,f as t,g as k,e as o,w as u,z,i as v,j as i,o as V,k as N,E as y}from"./index-DopNG1aC.js";import{p as U,_ as Z}from"./index-DGfZijDv.js";const B={class:"contact-page"},H={class:"page-banner"},M={class:"container page-banner-content"},S={class:"section"},I={class:"container"},A={class:"contact-grid"},D={class:"contact-info"},F={key:0,class:"info-card"},T={class:"info-item"},q={class:"info-item"},G={class:"info-item"},J={class:"info-item"},K={class:"contact-form"},L=j({__name:"ContactPage",setup(O){const{t:l,locale:h}=E(),s=v(null),p=v(!1),a=v({name:"",email:"",subject:"",content:""});P(async()=>{try{const r=await U.getContact();s.value=r.data}catch{}});async function f(){if(!a.value.name||!a.value.email||!a.value.content){y.warning("请填写必要信息");return}p.value=!0;try{y.success("留言提交成功,我们会尽快与您联系!"),a.value={name:"",email:"",subject:"",content:""}}catch{}p.value=!1}return(r,c)=>{const m=i("el-input"),_=i("el-form-item"),b=i("el-col"),w=i("el-row"),x=i("el-button"),C=i("el-form");return V(),g("div",B,[e("section",H,[c[4]||(c[4]=e("div",{class:"page-banner-overlay"},null,-1)),e("div",M,[e("h1",null,n(t(l)("contact.title")),1)])]),e("section",S,[e("div",I,[e("div",A,[e("div",D,[s.value?(V(),g("div",F,[e("div",T,[e("h3",null,n(t(l)("contact.phone")),1),e("p",null,n(s.value.phoneZh||s.value.phoneEn||"-"),1)]),e("div",q,[e("h3",null,n(t(l)("contact.email")),1),e("p",null,n(s.value.emailZh||s.value.emailEn||"-"),1)]),e("div",G,[e("h3",null,n(t(l)("contact.address")),1),e("p",null,n(t(h)==="zh"?s.value.addressZh:s.value.addressEn||"-"),1)]),e("div",J,[e("h3",null,n(t(l)("contact.businessHours")),1),e("p",null,n(t(h)==="zh"?s.value.businessHoursZh:s.value.businessHoursEn||"-"),1)])])):k("",!0)]),e("div",K,[e("h2",null,n(t(l)("contact.message")),1),o(C,{model:a.value,"label-position":"top",onSubmit:z(f,["prevent"])},{default:u(()=>[o(w,{gutter:20},{default:u(()=>[o(b,{span:12,xs:24},{default:u(()=>[o(_,{label:t(l)("contact.name")},{default:u(()=>[o(m,{modelValue:a.value.name,"onUpdate:modelValue":c[0]||(c[0]=d=>a.value.name=d),placeholder:t(l)("contact.namePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1}),o(b,{span:12,xs:24},{default:u(()=>[o(_,{label:t(l)("contact.emailField")},{default:u(()=>[o(m,{modelValue:a.value.email,"onUpdate:modelValue":c[1]||(c[1]=d=>a.value.email=d),placeholder:t(l)("contact.emailPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1}),o(_,{label:t(l)("contact.subject")},{default:u(()=>[o(m,{modelValue:a.value.subject,"onUpdate:modelValue":c[2]||(c[2]=d=>a.value.subject=d),placeholder:t(l)("contact.subjectPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),o(_,{label:t(l)("contact.content")},{default:u(()=>[o(m,{modelValue:a.value.content,"onUpdate:modelValue":c[3]||(c[3]=d=>a.value.content=d),type:"textarea",rows:5,placeholder:t(l)("contact.contentPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),o(x,{type:"primary",size:"large",onClick:f,loading:p.value},{default:u(()=>[N(n(t(l)("contact.submit")),1)]),_:1},8,["loading"])]),_:1},8,["model"])])])])])])}}}),W=Z(L,[["__scopeId","data-v-97ae2465"]]);export{W as default};
|
||||
import{d as j,u as E,m as P,c as g,b as e,t as n,f as t,g as k,e as o,w as u,H,i as v,j as i,o as V,k as N,I as y}from"./index-CzwJBVIC.js";import{p as U,_ as Z}from"./index-8GqMb-ax.js";const z={class:"contact-page"},B={class:"page-banner"},I={class:"container page-banner-content"},M={class:"section"},S={class:"container"},A={class:"contact-grid"},D={class:"contact-info"},F={key:0,class:"info-card"},T={class:"info-item"},q={class:"info-item"},G={class:"info-item"},J={class:"info-item"},K={class:"contact-form"},L=j({__name:"ContactPage",setup(O){const{t:l,locale:h}=E(),s=v(null),p=v(!1),a=v({name:"",email:"",subject:"",content:""});P(async()=>{try{const r=await U.getContact();s.value=r.data}catch{}});async function f(){if(!a.value.name||!a.value.email||!a.value.content){y.warning("请填写必要信息");return}p.value=!0;try{y.success("留言提交成功,我们会尽快与您联系!"),a.value={name:"",email:"",subject:"",content:""}}catch{}p.value=!1}return(r,c)=>{const m=i("el-input"),_=i("el-form-item"),b=i("el-col"),w=i("el-row"),x=i("el-button"),C=i("el-form");return V(),g("div",z,[e("section",B,[c[4]||(c[4]=e("div",{class:"page-banner-overlay"},null,-1)),e("div",I,[e("h1",null,n(t(l)("contact.title")),1)])]),e("section",M,[e("div",S,[e("div",A,[e("div",D,[s.value?(V(),g("div",F,[e("div",T,[e("h3",null,n(t(l)("contact.phone")),1),e("p",null,n(s.value.phoneZh||s.value.phoneEn||"-"),1)]),e("div",q,[e("h3",null,n(t(l)("contact.email")),1),e("p",null,n(s.value.emailZh||s.value.emailEn||"-"),1)]),e("div",G,[e("h3",null,n(t(l)("contact.address")),1),e("p",null,n(t(h)==="zh"?s.value.addressZh:s.value.addressEn||"-"),1)]),e("div",J,[e("h3",null,n(t(l)("contact.businessHours")),1),e("p",null,n(t(h)==="zh"?s.value.businessHoursZh:s.value.businessHoursEn||"-"),1)])])):k("",!0)]),e("div",K,[e("h2",null,n(t(l)("contact.message")),1),o(C,{model:a.value,"label-position":"top",onSubmit:H(f,["prevent"])},{default:u(()=>[o(w,{gutter:20},{default:u(()=>[o(b,{span:12,xs:24},{default:u(()=>[o(_,{label:t(l)("contact.name")},{default:u(()=>[o(m,{modelValue:a.value.name,"onUpdate:modelValue":c[0]||(c[0]=d=>a.value.name=d),placeholder:t(l)("contact.namePlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1}),o(b,{span:12,xs:24},{default:u(()=>[o(_,{label:t(l)("contact.emailField")},{default:u(()=>[o(m,{modelValue:a.value.email,"onUpdate:modelValue":c[1]||(c[1]=d=>a.value.email=d),placeholder:t(l)("contact.emailPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1}),o(_,{label:t(l)("contact.subject")},{default:u(()=>[o(m,{modelValue:a.value.subject,"onUpdate:modelValue":c[2]||(c[2]=d=>a.value.subject=d),placeholder:t(l)("contact.subjectPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),o(_,{label:t(l)("contact.content")},{default:u(()=>[o(m,{modelValue:a.value.content,"onUpdate:modelValue":c[3]||(c[3]=d=>a.value.content=d),type:"textarea",rows:5,placeholder:t(l)("contact.contentPlaceholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),o(x,{type:"primary",size:"large",onClick:f,loading:p.value},{default:u(()=>[N(n(t(l)("contact.submit")),1)]),_:1},8,["loading"])]),_:1},8,["model"])])])])])])}}}),W=Z(L,[["__scopeId","data-v-97ae2465"]]);export{W as default};
|
||||
@@ -1 +1 @@
|
||||
import{a as u,_}from"./index-DGfZijDv.js";import{d as v,m as i,c as p,b as f,e,w as a,i as m,j as r,o as C}from"./index-DopNG1aC.js";const h={class:"dashboard-page"},g=v({__name:"DashboardPage",setup(w){const t=m({bannerCount:0,categoryCount:0,caseCount:0,newsCount:0});return i(async()=>{const s=(await Promise.allSettled([u.getBanners(),u.getProductCategories(),u.getCases(),u.getNewsList()])).map(o=>o.status==="fulfilled"&&Array.isArray(o.value.data)?o.value.data.length:0);t.value.bannerCount=s[0],t.value.categoryCount=s[1],t.value.caseCount=s[2],t.value.newsCount=s[3]}),(c,s)=>{const o=r("el-statistic"),l=r("el-card"),n=r("el-col"),d=r("el-row");return C(),p("div",h,[s[0]||(s[0]=f("h2",null,"仪表盘",-1)),e(d,{gutter:20},{default:a(()=>[e(n,{span:6,xs:12},{default:a(()=>[e(l,{shadow:"hover"},{default:a(()=>[e(o,{title:"轮播图",value:t.value.bannerCount},null,8,["value"])]),_:1})]),_:1}),e(n,{span:6,xs:12},{default:a(()=>[e(l,{shadow:"hover"},{default:a(()=>[e(o,{title:"产品分类",value:t.value.categoryCount},null,8,["value"])]),_:1})]),_:1}),e(n,{span:6,xs:12},{default:a(()=>[e(l,{shadow:"hover"},{default:a(()=>[e(o,{title:"成功案例",value:t.value.caseCount},null,8,["value"])]),_:1})]),_:1}),e(n,{span:6,xs:12},{default:a(()=>[e(l,{shadow:"hover"},{default:a(()=>[e(o,{title:"新闻",value:t.value.newsCount},null,8,["value"])]),_:1})]),_:1})]),_:1})])}}}),y=_(g,[["__scopeId","data-v-b2827354"]]);export{y as default};
|
||||
import{a as u,_}from"./index-8GqMb-ax.js";import{d as v,m as i,c as p,b as f,e,w as a,i as m,j as r,o as C}from"./index-CzwJBVIC.js";const h={class:"dashboard-page"},g=v({__name:"DashboardPage",setup(w){const t=m({bannerCount:0,categoryCount:0,caseCount:0,newsCount:0});return i(async()=>{const s=(await Promise.allSettled([u.getBanners(),u.getProductCategories(),u.getCases(),u.getNewsList()])).map(o=>o.status==="fulfilled"&&Array.isArray(o.value.data)?o.value.data.length:0);t.value.bannerCount=s[0],t.value.categoryCount=s[1],t.value.caseCount=s[2],t.value.newsCount=s[3]}),(c,s)=>{const o=r("el-statistic"),l=r("el-card"),n=r("el-col"),d=r("el-row");return C(),p("div",h,[s[0]||(s[0]=f("h2",null,"仪表盘",-1)),e(d,{gutter:20},{default:a(()=>[e(n,{span:6,xs:12},{default:a(()=>[e(l,{shadow:"hover"},{default:a(()=>[e(o,{title:"轮播图",value:t.value.bannerCount},null,8,["value"])]),_:1})]),_:1}),e(n,{span:6,xs:12},{default:a(()=>[e(l,{shadow:"hover"},{default:a(()=>[e(o,{title:"产品分类",value:t.value.categoryCount},null,8,["value"])]),_:1})]),_:1}),e(n,{span:6,xs:12},{default:a(()=>[e(l,{shadow:"hover"},{default:a(()=>[e(o,{title:"成功案例",value:t.value.caseCount},null,8,["value"])]),_:1})]),_:1}),e(n,{span:6,xs:12},{default:a(()=>[e(l,{shadow:"hover"},{default:a(()=>[e(o,{title:"新闻",value:t.value.newsCount},null,8,["value"])]),_:1})]),_:1})]),_:1})])}}}),y=_(g,[["__scopeId","data-v-b2827354"]]);export{y as default};
|
||||
@@ -1 +1 @@
|
||||
import{d as M,u as T,m as E,c as n,b as t,e as z,w as Z,t as i,f as o,q as C,g as u,l as D,i as I,h as r,j as b,o as a,k as N}from"./index-DopNG1aC.js";import{p as x,_ as q}from"./index-DGfZijDv.js";import{u as A}from"./uploadUrl-CyxyoWKj.js";const B={class:"detail-page"},V={class:"page-banner"},w={class:"container page-banner-content"},P={class:"breadcrumb"},S={key:0,class:"section"},U={class:"container"},j={class:"detail-layout"},R={class:"detail-main"},$={key:1,class:"detail-section"},F={class:"section-title"},G=["innerHTML"],J={key:2,class:"detail-section"},K={class:"section-title"},O=["innerHTML"],Q={key:3,class:"detail-section"},W={class:"section-title"},X=["innerHTML"],Y={key:4,class:"detail-section"},ee={class:"section-title"},te=["innerHTML"],se={key:5,class:"detail-section"},ne={class:"section-title"},oe=["innerHTML"],ae={key:6,class:"detail-section"},ie={class:"section-title"},ce=["innerHTML"],le={key:7,class:"detail-section"},ue={class:"section-title"},re=["innerHTML"],de={key:1,class:"section"},he={class:"container"},ve=M({__name:"EquipmentDetailPage",setup(_e){const L=D(),{t:c,locale:l}=T(),e=I(null),v=r(()=>e.value?.coverImage?A(e.value.coverImage):""),_=r(()=>e.value?l.value==="zh"?e.value.functionDescriptionZh:e.value.functionDescriptionEn:""),p=r(()=>{if(!e.value)return"";const s=l.value==="zh",d=s?e.value.contentZh:e.value.contentEn,h=s?e.value.descriptionZh:e.value.descriptionEn;return d||h||""}),m=r(()=>e.value?l.value==="zh"?e.value.specificationsZh:e.value.specificationsEn:""),g=r(()=>e.value?l.value==="zh"?e.value.technicalHighlightsZh:e.value.technicalHighlightsEn:""),y=r(()=>e.value?l.value==="zh"?e.value.productAdvantagesZh:e.value.productAdvantagesEn:""),f=r(()=>e.value?l.value==="zh"?e.value.applicableLinesZh:e.value.applicableLinesEn:""),H=r(()=>e.value?l.value==="zh"?e.value.applicationCasesZh:e.value.applicationCasesEn:"");return E(async()=>{try{const s=await x.getEquipmentById(Number(L.params.id));e.value=s.data}catch(s){console.error("单体设备详情加载失败",s)}}),(s,d)=>{const h=b("router-link"),k=b("el-empty");return a(),n("div",B,[t("section",V,[d[1]||(d[1]=t("div",{class:"page-banner-overlay"},null,-1)),t("div",w,[t("p",P,[z(h,{to:"/products"},{default:Z(()=>[N(i(o(c)("products.title")),1)]),_:1}),d[0]||(d[0]=t("span",{class:"sep"},"/",-1)),t("span",null,i(o(l)==="zh"?e.value?.categoryNameZh:e.value?.categoryNameEn),1)]),t("h1",null,i(o(l)==="zh"?e.value?.nameZh:e.value?.nameEn),1)])]),e.value?(a(),n("section",S,[t("div",U,[t("div",j,[t("div",R,[v.value?(a(),n("div",{key:0,class:"detail-cover",style:C({backgroundImage:`url(${v.value})`})},null,4)):u("",!0),_.value?(a(),n("div",$,[t("h2",F,i(o(c)("products.functionDescription")),1),t("div",{class:"section-body",innerHTML:_.value},null,8,G)])):u("",!0),p.value?(a(),n("div",J,[t("h2",K,i(o(c)("products.productIntro")),1),t("div",{class:"section-body",innerHTML:p.value},null,8,O)])):u("",!0),m.value?(a(),n("div",Q,[t("h2",W,i(o(c)("products.specifications")),1),t("div",{class:"section-body",innerHTML:m.value},null,8,X)])):u("",!0),g.value?(a(),n("div",Y,[t("h2",ee,i(o(c)("products.technicalHighlights")),1),t("div",{class:"section-body highlights-box",innerHTML:g.value},null,8,te)])):u("",!0),y.value?(a(),n("div",se,[t("h2",ne,i(o(c)("products.productAdvantages")),1),t("div",{class:"section-body",innerHTML:y.value},null,8,oe)])):u("",!0),f.value?(a(),n("div",ae,[t("h2",ie,i(o(c)("products.applicableLines")),1),t("div",{class:"section-body",innerHTML:f.value},null,8,ce)])):u("",!0),H.value?(a(),n("div",le,[t("h2",ue,i(o(c)("products.applicationCases")),1),t("div",{class:"section-body",innerHTML:H.value},null,8,re)])):u("",!0)])])])])):(a(),n("section",de,[t("div",he,[z(k,{description:o(c)("common.noData")},null,8,["description"])])]))])}}}),ye=q(ve,[["__scopeId","data-v-405a5109"]]);export{ye as default};
|
||||
import{d as M,u as T,m as E,c as n,b as t,e as z,w as Z,t as i,f as o,q as C,g as u,l as D,i as I,h as r,j as b,o as a,k as N}from"./index-CzwJBVIC.js";import{p as x,_ as q}from"./index-8GqMb-ax.js";import{u as A}from"./uploadUrl-CyxyoWKj.js";const B={class:"detail-page"},V={class:"page-banner"},w={class:"container page-banner-content"},P={class:"breadcrumb"},S={key:0,class:"section"},U={class:"container"},j={class:"detail-layout"},R={class:"detail-main"},$={key:1,class:"detail-section"},F={class:"section-title"},G=["innerHTML"],J={key:2,class:"detail-section"},K={class:"section-title"},O=["innerHTML"],Q={key:3,class:"detail-section"},W={class:"section-title"},X=["innerHTML"],Y={key:4,class:"detail-section"},ee={class:"section-title"},te=["innerHTML"],se={key:5,class:"detail-section"},ne={class:"section-title"},oe=["innerHTML"],ae={key:6,class:"detail-section"},ie={class:"section-title"},ce=["innerHTML"],le={key:7,class:"detail-section"},ue={class:"section-title"},re=["innerHTML"],de={key:1,class:"section"},he={class:"container"},ve=M({__name:"EquipmentDetailPage",setup(_e){const L=D(),{t:c,locale:l}=T(),e=I(null),v=r(()=>e.value?.coverImage?A(e.value.coverImage):""),_=r(()=>e.value?l.value==="zh"?e.value.functionDescriptionZh:e.value.functionDescriptionEn:""),p=r(()=>{if(!e.value)return"";const s=l.value==="zh",d=s?e.value.contentZh:e.value.contentEn,h=s?e.value.descriptionZh:e.value.descriptionEn;return d||h||""}),m=r(()=>e.value?l.value==="zh"?e.value.specificationsZh:e.value.specificationsEn:""),g=r(()=>e.value?l.value==="zh"?e.value.technicalHighlightsZh:e.value.technicalHighlightsEn:""),y=r(()=>e.value?l.value==="zh"?e.value.productAdvantagesZh:e.value.productAdvantagesEn:""),f=r(()=>e.value?l.value==="zh"?e.value.applicableLinesZh:e.value.applicableLinesEn:""),H=r(()=>e.value?l.value==="zh"?e.value.applicationCasesZh:e.value.applicationCasesEn:"");return E(async()=>{try{const s=await x.getEquipmentById(Number(L.params.id));e.value=s.data}catch(s){console.error("单体设备详情加载失败",s)}}),(s,d)=>{const h=b("router-link"),k=b("el-empty");return a(),n("div",B,[t("section",V,[d[1]||(d[1]=t("div",{class:"page-banner-overlay"},null,-1)),t("div",w,[t("p",P,[z(h,{to:"/products"},{default:Z(()=>[N(i(o(c)("products.title")),1)]),_:1}),d[0]||(d[0]=t("span",{class:"sep"},"/",-1)),t("span",null,i(o(l)==="zh"?e.value?.categoryNameZh:e.value?.categoryNameEn),1)]),t("h1",null,i(o(l)==="zh"?e.value?.nameZh:e.value?.nameEn),1)])]),e.value?(a(),n("section",S,[t("div",U,[t("div",j,[t("div",R,[v.value?(a(),n("div",{key:0,class:"detail-cover",style:C({backgroundImage:`url(${v.value})`})},null,4)):u("",!0),_.value?(a(),n("div",$,[t("h2",F,i(o(c)("products.functionDescription")),1),t("div",{class:"section-body",innerHTML:_.value},null,8,G)])):u("",!0),p.value?(a(),n("div",J,[t("h2",K,i(o(c)("products.productIntro")),1),t("div",{class:"section-body",innerHTML:p.value},null,8,O)])):u("",!0),m.value?(a(),n("div",Q,[t("h2",W,i(o(c)("products.specifications")),1),t("div",{class:"section-body",innerHTML:m.value},null,8,X)])):u("",!0),g.value?(a(),n("div",Y,[t("h2",ee,i(o(c)("products.technicalHighlights")),1),t("div",{class:"section-body highlights-box",innerHTML:g.value},null,8,te)])):u("",!0),y.value?(a(),n("div",se,[t("h2",ne,i(o(c)("products.productAdvantages")),1),t("div",{class:"section-body",innerHTML:y.value},null,8,oe)])):u("",!0),f.value?(a(),n("div",ae,[t("h2",ie,i(o(c)("products.applicableLines")),1),t("div",{class:"section-body",innerHTML:f.value},null,8,ce)])):u("",!0),H.value?(a(),n("div",le,[t("h2",ue,i(o(c)("products.applicationCases")),1),t("div",{class:"section-body",innerHTML:H.value},null,8,re)])):u("",!0)])])])])):(a(),n("section",de,[t("div",he,[z(k,{description:o(c)("common.noData")},null,8,["description"])])]))])}}}),ye=q(ve,[["__scopeId","data-v-405a5109"]]);export{ye as default};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{d as k,u as I,a as z,c as p,n as w,b as t,e as a,w as r,F as C,r as L,t as e,f as s,g as E,h as H,i as x,j as g,o as _,k as d,l as M,m as N}from"./index-DopNG1aC.js";import{u as G}from"./uploadUrl-CyxyoWKj.js";import{_ as b,p as O}from"./index-DGfZijDv.js";const V={class:"container header-inner"},B=["src","alt"],j={class:"nav-links hide-mobile"},D={class:"header-actions"},P={key:0,class:"mobile-menu hide-desktop"},R="/uploads/other/630999551c9b42189e6a7b1db4699d57.jpeg",U=k({__name:"AppHeader",setup(y){const{t:o,locale:n}=I(),c=M(),v=z(),u=G(R),A=H(()=>n.value==="zh"?"武汉萨格工程技术有限公司":"Wuhan SAGA Engineering Technology Co., Ltd"),h=x(!1),$=[{path:"/",key:"home"},{path:"/about",key:"about"},{path:"/products",key:"products"},{path:"/technology",key:"technology"},{path:"/cases",key:"cases"},{path:"/news",key:"news"},{path:"/contact",key:"contact"}];function S(i){return i==="/"?c.path==="/":c.path.startsWith(i)}function F(){const i=n.value==="zh"?"en":"zh";n.value=i,v.setLocale(i)}function T(){h.value=!h.value}return(i,f)=>{const m=g("router-link");return _(),p("header",{class:w(["app-header",{"menu-open":h.value}])},[t("div",V,[a(m,{to:"/",class:"logo",title:A.value},{default:r(()=>[t("img",{class:"logo-img",src:s(u),alt:A.value},null,8,B)]),_:1},8,["title"]),t("nav",j,[(_(),p(C,null,L($,l=>a(m,{key:l.path,to:l.path,class:w(["nav-link",{active:S(l.path)}])},{default:r(()=>[d(e(s(o)(`nav.${l.key}`)),1)]),_:2},1032,["to","class"])),64))]),t("div",D,[t("button",{class:"lang-switch",onClick:F},e(s(n)==="zh"?"EN":"中"),1),t("button",{class:"mobile-menu-btn hide-desktop",onClick:T},[...f[1]||(f[1]=[t("span",null,null,-1),t("span",null,null,-1),t("span",null,null,-1)])])])]),h.value?(_(),p("div",P,[(_(),p(C,null,L($,l=>a(m,{key:l.path,to:l.path,class:"mobile-nav-link",onClick:f[0]||(f[0]=ct=>h.value=!1)},{default:r(()=>[d(e(s(o)(`nav.${l.key}`)),1)]),_:2},1032,["to"])),64))])):E("",!0)],2)}}}),W=b(U,[["__scopeId","data-v-7896b142"]]),q={class:"app-footer"},Z={class:"container"},J={class:"footer-grid"},K={class:"footer-brand"},Q={class:"footer-desc"},X={class:"footer-links"},Y={class:"footer-contact"},tt={class:"footer-bottom"},ot=k({__name:"AppFooter",setup(y){const{t:o}=I(),n=x(null);return N(async()=>{try{const c=await O.getContact();n.value=c.data}catch{}}),(c,v)=>{const u=g("router-link");return _(),p("footer",q,[t("div",Z,[t("div",J,[t("div",K,[v[0]||(v[0]=t("h3",{class:"footer-logo"},"SAGA",-1)),t("p",Q,e(s(o)("footer.companyDesc")),1)]),t("div",X,[t("h4",null,e(s(o)("footer.quickLinks")),1),a(u,{to:"/about"},{default:r(()=>[d(e(s(o)("nav.about")),1)]),_:1}),a(u,{to:"/products"},{default:r(()=>[d(e(s(o)("nav.products")),1)]),_:1}),a(u,{to:"/technology"},{default:r(()=>[d(e(s(o)("nav.technology")),1)]),_:1}),a(u,{to:"/cases"},{default:r(()=>[d(e(s(o)("nav.cases")),1)]),_:1})]),t("div",Y,[t("h4",null,e(s(o)("footer.contactInfo")),1),t("p",null,e(n.value?.email||"info@wuhansaga.com"),1),t("p",null,e(n.value?.businessHoursZh||s(o)("contact.businessHours")),1)])]),t("div",tt,[t("p",null,e(s(o)("footer.copyright")),1)])])])}}}),et=b(ot,[["__scopeId","data-v-b770b12e"]]),st={class:"front-layout"},at={class:"main-content"},nt=k({__name:"FrontLayout",setup(y){return(o,n)=>{const c=g("router-view");return _(),p("div",st,[a(W),t("main",at,[a(c)]),a(et)])}}}),it=b(nt,[["__scopeId","data-v-704ca5ad"]]);export{it as default};
|
||||
import{d as k,u as I,a as z,c as p,n as w,b as t,e as a,w as r,F as C,r as L,t as e,f as s,g as E,h as H,i as x,j as g,o as _,k as d,l as M,m as N}from"./index-CzwJBVIC.js";import{u as G}from"./uploadUrl-CyxyoWKj.js";import{_ as b,p as O}from"./index-8GqMb-ax.js";const V={class:"container header-inner"},B=["src","alt"],j={class:"nav-links hide-mobile"},D={class:"header-actions"},P={key:0,class:"mobile-menu hide-desktop"},R="/uploads/other/630999551c9b42189e6a7b1db4699d57.jpeg",U=k({__name:"AppHeader",setup(y){const{t:o,locale:n}=I(),c=M(),v=z(),u=G(R),A=H(()=>n.value==="zh"?"武汉萨格工程技术有限公司":"Wuhan SAGA Engineering Technology Co., Ltd"),h=x(!1),$=[{path:"/",key:"home"},{path:"/about",key:"about"},{path:"/products",key:"products"},{path:"/technology",key:"technology"},{path:"/cases",key:"cases"},{path:"/news",key:"news"},{path:"/contact",key:"contact"}];function S(i){return i==="/"?c.path==="/":c.path.startsWith(i)}function F(){const i=n.value==="zh"?"en":"zh";n.value=i,v.setLocale(i)}function T(){h.value=!h.value}return(i,f)=>{const m=g("router-link");return _(),p("header",{class:w(["app-header",{"menu-open":h.value}])},[t("div",V,[a(m,{to:"/",class:"logo",title:A.value},{default:r(()=>[t("img",{class:"logo-img",src:s(u),alt:A.value},null,8,B)]),_:1},8,["title"]),t("nav",j,[(_(),p(C,null,L($,l=>a(m,{key:l.path,to:l.path,class:w(["nav-link",{active:S(l.path)}])},{default:r(()=>[d(e(s(o)(`nav.${l.key}`)),1)]),_:2},1032,["to","class"])),64))]),t("div",D,[t("button",{class:"lang-switch",onClick:F},e(s(n)==="zh"?"EN":"中"),1),t("button",{class:"mobile-menu-btn hide-desktop",onClick:T},[...f[1]||(f[1]=[t("span",null,null,-1),t("span",null,null,-1),t("span",null,null,-1)])])])]),h.value?(_(),p("div",P,[(_(),p(C,null,L($,l=>a(m,{key:l.path,to:l.path,class:"mobile-nav-link",onClick:f[0]||(f[0]=ct=>h.value=!1)},{default:r(()=>[d(e(s(o)(`nav.${l.key}`)),1)]),_:2},1032,["to"])),64))])):E("",!0)],2)}}}),W=b(U,[["__scopeId","data-v-7896b142"]]),q={class:"app-footer"},Z={class:"container"},J={class:"footer-grid"},K={class:"footer-brand"},Q={class:"footer-desc"},X={class:"footer-links"},Y={class:"footer-contact"},tt={class:"footer-bottom"},ot=k({__name:"AppFooter",setup(y){const{t:o}=I(),n=x(null);return N(async()=>{try{const c=await O.getContact();n.value=c.data}catch{}}),(c,v)=>{const u=g("router-link");return _(),p("footer",q,[t("div",Z,[t("div",J,[t("div",K,[v[0]||(v[0]=t("h3",{class:"footer-logo"},"SAGA",-1)),t("p",Q,e(s(o)("footer.companyDesc")),1)]),t("div",X,[t("h4",null,e(s(o)("footer.quickLinks")),1),a(u,{to:"/about"},{default:r(()=>[d(e(s(o)("nav.about")),1)]),_:1}),a(u,{to:"/products"},{default:r(()=>[d(e(s(o)("nav.products")),1)]),_:1}),a(u,{to:"/technology"},{default:r(()=>[d(e(s(o)("nav.technology")),1)]),_:1}),a(u,{to:"/cases"},{default:r(()=>[d(e(s(o)("nav.cases")),1)]),_:1})]),t("div",Y,[t("h4",null,e(s(o)("footer.contactInfo")),1),t("p",null,e(n.value?.email||"info@wuhansaga.com"),1),t("p",null,e(n.value?.businessHoursZh||s(o)("contact.businessHours")),1)])]),t("div",tt,[t("p",null,e(s(o)("footer.copyright")),1)])])])}}}),et=b(ot,[["__scopeId","data-v-b770b12e"]]),st={class:"front-layout"},at={class:"main-content"},nt=k({__name:"FrontLayout",setup(y){return(o,n)=>{const c=g("router-view");return _(),p("div",st,[a(W),t("main",at,[a(c)]),a(et)])}}}),it=b(nt,[["__scopeId","data-v-704ca5ad"]]);export{it as default};
|
||||
1
client/dist/assets/HomePage-BuEuxOnV.css
vendored
1
client/dist/assets/HomePage-BuEuxOnV.css
vendored
File diff suppressed because one or more lines are too long
1
client/dist/assets/HomePage-CNDoOfdc.js
vendored
1
client/dist/assets/HomePage-CNDoOfdc.js
vendored
File diff suppressed because one or more lines are too long
1
client/dist/assets/HomePage-CwKtJpZk.css
vendored
Normal file
1
client/dist/assets/HomePage-CwKtJpZk.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
client/dist/assets/HomePage-DS3oaYRX.js
vendored
Normal file
1
client/dist/assets/HomePage-DS3oaYRX.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{d as v,c as w,b as l,e as a,w as s,z as V,i as c,j as n,o as k,k as x,E as d,A as h}from"./index-DopNG1aC.js";import{a as y,_ as C}from"./index-DGfZijDv.js";const b={class:"login-page"},z={class:"login-card"},A=v({__name:"LoginPage",setup(L){const _=h(),t=c(!1),e=c({username:"",password:""});async function i(){if(!e.value.username||!e.value.password){d.warning("请输入用户名和密码");return}t.value=!0;try{const r=await y.login(e.value);localStorage.setItem("token",r.data?.token||""),d.success("登录成功"),_.push("/admin")}catch{d.error("登录失败,请检查用户名和密码")}t.value=!1}return(r,o)=>{const m=n("el-input"),p=n("el-form-item"),f=n("el-button"),g=n("el-form");return k(),w("div",b,[l("div",z,[o[3]||(o[3]=l("div",{class:"login-header"},[l("h1",null,"SAGA CMS"),l("p",null,"武汉萨格内容管理系统")],-1)),a(g,{model:e.value,onSubmit:V(i,["prevent"])},{default:s(()=>[a(p,null,{default:s(()=>[a(m,{modelValue:e.value.username,"onUpdate:modelValue":o[0]||(o[0]=u=>e.value.username=u),placeholder:"用户名","prefix-icon":"User",size:"large"},null,8,["modelValue"])]),_:1}),a(p,null,{default:s(()=>[a(m,{modelValue:e.value.password,"onUpdate:modelValue":o[1]||(o[1]=u=>e.value.password=u),type:"password",placeholder:"密码","prefix-icon":"Lock",size:"large","show-password":""},null,8,["modelValue"])]),_:1}),a(f,{type:"primary",size:"large",style:{width:"100%"},onClick:i,loading:t.value},{default:s(()=>[...o[2]||(o[2]=[x(" 登 录 ",-1)])]),_:1},8,["loading"])]),_:1},8,["model"])])])}}}),E=C(A,[["__scopeId","data-v-78153638"]]);export{E as default};
|
||||
import{d as v,c as w,b as l,e as a,w as s,H as V,i as c,j as n,o as k,k as x,I as d,J as h}from"./index-CzwJBVIC.js";import{a as y,_ as C}from"./index-8GqMb-ax.js";const b={class:"login-page"},L={class:"login-card"},S=v({__name:"LoginPage",setup(z){const _=h(),t=c(!1),e=c({username:"",password:""});async function i(){if(!e.value.username||!e.value.password){d.warning("请输入用户名和密码");return}t.value=!0;try{const r=await y.login(e.value);localStorage.setItem("token",r.data?.token||""),d.success("登录成功"),_.push("/admin")}catch{d.error("登录失败,请检查用户名和密码")}t.value=!1}return(r,o)=>{const m=n("el-input"),p=n("el-form-item"),f=n("el-button"),g=n("el-form");return k(),w("div",b,[l("div",L,[o[3]||(o[3]=l("div",{class:"login-header"},[l("h1",null,"SAGA CMS"),l("p",null,"武汉萨格内容管理系统")],-1)),a(g,{model:e.value,onSubmit:V(i,["prevent"])},{default:s(()=>[a(p,null,{default:s(()=>[a(m,{modelValue:e.value.username,"onUpdate:modelValue":o[0]||(o[0]=u=>e.value.username=u),placeholder:"用户名","prefix-icon":"User",size:"large"},null,8,["modelValue"])]),_:1}),a(p,null,{default:s(()=>[a(m,{modelValue:e.value.password,"onUpdate:modelValue":o[1]||(o[1]=u=>e.value.password=u),type:"password",placeholder:"密码","prefix-icon":"Lock",size:"large","show-password":""},null,8,["modelValue"])]),_:1}),a(f,{type:"primary",size:"large",style:{width:"100%"},onClick:i,loading:t.value},{default:s(()=>[...o[2]||(o[2]=[x(" 登 录 ",-1)])]),_:1},8,["loading"])]),_:1},8,["model"])])])}}}),I=C(S,[["__scopeId","data-v-78153638"]]);export{I as default};
|
||||
@@ -1 +1 @@
|
||||
import{d as D,m as I,c as n,b as i,e as c,w as d,Q as S,F as z,r as A,s as f,g as U,i as v,h as F,j as u,R as T,o as s,k as _,f as h,t as g,E as o,S as $}from"./index-DopNG1aC.js";import{a as y,_ as j}from"./index-DGfZijDv.js";import{u as k}from"./uploadUrl-CyxyoWKj.js";const H={class:"admin-crud-page"},Q={class:"page-header"},R={class:"media-grid"},W=["src"],q={class:"media-info"},G={class:"media-name"},J={class:"media-category"},K={class:"media-actions"},O="/api/admin/media/upload",X=D({__name:"MediaPage",setup(Y){const l=v(!1),r=v([]),b=F(()=>{const e=localStorage.getItem("token");return e?{Authorization:e}:{}});function w(e){return e?e.startsWith("video/"):!1}async function m(){l.value=!0;try{const e=await y.getMediaList();r.value=e.data??[]}catch{r.value=[]}finally{l.value=!1}}function C(e){e&&e.code===200?(o.success("上传成功"),m()):o.error(e?.msg||"上传失败")}function M(e){o.error("上传失败,请检查文件大小或格式")}function x(e){navigator.clipboard.writeText(e).then(()=>o.success("路径已复制")).catch(()=>o.error("复制失败"))}async function P(e){await $.confirm("确认删除?","提示",{type:"warning"});try{await y.deleteMedia(e),o.success("删除成功"),m()}catch{o.error("删除失败")}}return I(m),(e,a)=>{const p=u("el-button"),B=u("el-upload"),E=u("el-image"),L=u("el-empty"),N=T("loading");return s(),n("div",H,[i("div",Q,[a[1]||(a[1]=i("h2",null,"媒体库管理",-1)),c(B,{action:O,headers:b.value,"on-success":C,"on-error":M,"show-file-list":!1,multiple:"",style:{display:"inline-block"}},{default:d(()=>[c(p,{type:"primary"},{default:d(()=>[...a[0]||(a[0]=[_("上传文件",-1)])]),_:1})]),_:1},8,["headers"])]),S((s(),n("div",R,[(s(!0),n(z,null,A(r.value,t=>(s(),n("div",{key:t.mediaLibraryId,class:"media-item card"},[w(t.fileType)?(s(),n("video",{key:0,src:h(k)(t.filePath),class:"media-thumb media-thumb-video",muted:"",playsinline:"",preload:"metadata"},null,8,W)):(s(),f(E,{key:1,src:h(k)(t.filePath),fit:"cover",class:"media-thumb"},null,8,["src"])),i("div",q,[i("p",G,g(t.fileName),1),i("p",J,g(t.category),1)]),i("div",K,[c(p,{size:"small",onClick:V=>x(t.filePath)},{default:d(()=>[...a[2]||(a[2]=[_("复制路径",-1)])]),_:1},8,["onClick"]),c(p,{size:"small",type:"danger",onClick:V=>P(t.mediaLibraryId)},{default:d(()=>[...a[3]||(a[3]=[_("删除",-1)])]),_:1},8,["onClick"])])]))),128))])),[[N,l.value]]),!l.value&&!r.value.length?(s(),f(L,{key:0,description:"暂无媒体文件"})):U("",!0)])}}}),te=j(X,[["__scopeId","data-v-e83b5cfe"]]);export{te as default};
|
||||
import{d as D,m as E,c as n,b as i,e as c,w as d,W as z,F as A,r as S,s as f,g as U,i as v,h as F,j as u,X as T,o as s,k as _,f as h,t as g,I as o,Y as W}from"./index-CzwJBVIC.js";import{a as y,_ as $}from"./index-8GqMb-ax.js";import{u as k}from"./uploadUrl-CyxyoWKj.js";const j={class:"admin-crud-page"},H={class:"page-header"},X={class:"media-grid"},Y=["src"],q={class:"media-info"},G={class:"media-name"},J={class:"media-category"},K={class:"media-actions"},O="/api/admin/media/upload",Q=D({__name:"MediaPage",setup(R){const l=v(!1),r=v([]),b=F(()=>{const e=localStorage.getItem("token");return e?{Authorization:e}:{}});function w(e){return e?e.startsWith("video/"):!1}async function m(){l.value=!0;try{const e=await y.getMediaList();r.value=e.data??[]}catch{r.value=[]}finally{l.value=!1}}function C(e){e&&e.code===200?(o.success("上传成功"),m()):o.error(e?.msg||"上传失败")}function M(e){o.error("上传失败,请检查文件大小或格式")}function x(e){navigator.clipboard.writeText(e).then(()=>o.success("路径已复制")).catch(()=>o.error("复制失败"))}async function P(e){await W.confirm("确认删除?","提示",{type:"warning"});try{await y.deleteMedia(e),o.success("删除成功"),m()}catch{o.error("删除失败")}}return E(m),(e,a)=>{const p=u("el-button"),B=u("el-upload"),I=u("el-image"),L=u("el-empty"),N=T("loading");return s(),n("div",j,[i("div",H,[a[1]||(a[1]=i("h2",null,"媒体库管理",-1)),c(B,{action:O,headers:b.value,"on-success":C,"on-error":M,"show-file-list":!1,multiple:"",style:{display:"inline-block"}},{default:d(()=>[c(p,{type:"primary"},{default:d(()=>[...a[0]||(a[0]=[_("上传文件",-1)])]),_:1})]),_:1},8,["headers"])]),z((s(),n("div",X,[(s(!0),n(A,null,S(r.value,t=>(s(),n("div",{key:t.mediaLibraryId,class:"media-item card"},[w(t.fileType)?(s(),n("video",{key:0,src:h(k)(t.filePath),class:"media-thumb media-thumb-video",muted:"",playsinline:"",preload:"metadata"},null,8,Y)):(s(),f(I,{key:1,src:h(k)(t.filePath),fit:"cover",class:"media-thumb"},null,8,["src"])),i("div",q,[i("p",G,g(t.fileName),1),i("p",J,g(t.category),1)]),i("div",K,[c(p,{size:"small",onClick:V=>x(t.filePath)},{default:d(()=>[...a[2]||(a[2]=[_("复制路径",-1)])]),_:1},8,["onClick"]),c(p,{size:"small",type:"danger",onClick:V=>P(t.mediaLibraryId)},{default:d(()=>[...a[3]||(a[3]=[_("删除",-1)])]),_:1},8,["onClick"])])]))),128))])),[[N,l.value]]),!l.value&&!r.value.length?(s(),f(L,{key:0,description:"暂无媒体文件"})):U("",!0)])}}}),te=$(Q,[["__scopeId","data-v-e83b5cfe"]]);export{te as default};
|
||||
@@ -1 +1 @@
|
||||
import{d as _,u as p,m,c as o,b as e,t as l,f as a,q as v,g as h,s as g,l as y,i as f,j as b,o as s}from"./index-DopNG1aC.js";import{p as k,_ as I}from"./index-DGfZijDv.js";const N={class:"detail-page"},w={class:"page-banner"},B={class:"container page-banner-content"},D={class:"section"},x={class:"container"},z={key:0,class:"detail-content"},C={class:"detail-header"},E={class:"detail-date"},M=["innerHTML"],T=_({__name:"NewsDetailPage",setup(H){const d=y(),{t:c,locale:i}=p(),t=f(null);return m(async()=>{try{const n=await k.getNewsById(Number(d.params.id));t.value=n.data}catch{}}),(n,r)=>{const u=b("el-empty");return s(),o("div",N,[e("section",w,[r[0]||(r[0]=e("div",{class:"page-banner-overlay"},null,-1)),e("div",B,[e("h1",null,l(a(c)("news.title")),1)])]),e("section",D,[e("div",x,[t.value?(s(),o("div",z,[e("div",C,[e("span",E,l(t.value.createTime?.substring(0,10)),1),e("h1",null,l(a(i)==="zh"?t.value.titleZh:t.value.titleEn),1)]),t.value.coverImage?(s(),o("div",{key:0,class:"detail-img",style:v({backgroundImage:`url(${t.value.coverImage})`})},null,4)):h("",!0),e("div",{class:"detail-body",innerHTML:a(i)==="zh"?t.value.contentZh:t.value.contentEn},null,8,M)])):(s(),g(u,{key:1,description:a(c)("common.noData")},null,8,["description"]))])])])}}}),S=I(T,[["__scopeId","data-v-f9eda990"]]);export{S as default};
|
||||
import{d as _,u as p,m,c as o,b as e,t as l,f as a,q as v,g as h,s as g,l as y,i as f,j as b,o as s}from"./index-CzwJBVIC.js";import{p as k,_ as I}from"./index-8GqMb-ax.js";const N={class:"detail-page"},w={class:"page-banner"},B={class:"container page-banner-content"},D={class:"section"},x={class:"container"},z={key:0,class:"detail-content"},C={class:"detail-header"},E={class:"detail-date"},M=["innerHTML"],T=_({__name:"NewsDetailPage",setup(H){const d=y(),{t:c,locale:i}=p(),t=f(null);return m(async()=>{try{const n=await k.getNewsById(Number(d.params.id));t.value=n.data}catch{}}),(n,r)=>{const u=b("el-empty");return s(),o("div",N,[e("section",w,[r[0]||(r[0]=e("div",{class:"page-banner-overlay"},null,-1)),e("div",B,[e("h1",null,l(a(c)("news.title")),1)])]),e("section",D,[e("div",x,[t.value?(s(),o("div",z,[e("div",C,[e("span",E,l(t.value.createTime?.substring(0,10)),1),e("h1",null,l(a(i)==="zh"?t.value.titleZh:t.value.titleEn),1)]),t.value.coverImage?(s(),o("div",{key:0,class:"detail-img",style:v({backgroundImage:`url(${t.value.coverImage})`})},null,4)):h("",!0),e("div",{class:"detail-body",innerHTML:a(i)==="zh"?t.value.contentZh:t.value.contentEn},null,8,M)])):(s(),g(u,{key:1,description:a(c)("common.noData")},null,8,["description"]))])])])}}}),S=I(T,[["__scopeId","data-v-f9eda990"]]);export{S as default};
|
||||
1
client/dist/assets/NewsPage-5zmMdy-j.js
vendored
Normal file
1
client/dist/assets/NewsPage-5zmMdy-j.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
client/dist/assets/NewsPage-CFcjT6k-.js
vendored
1
client/dist/assets/NewsPage-CFcjT6k-.js
vendored
File diff suppressed because one or more lines are too long
1
client/dist/assets/NewsPage-CkT6QuLg.css
vendored
1
client/dist/assets/NewsPage-CkT6QuLg.css
vendored
@@ -1 +0,0 @@
|
||||
.admin-crud-page .page-header[data-v-301f7842]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.admin-crud-page .page-header h2[data-v-301f7842]{font-size:20px;color:#1f2937}
|
||||
1
client/dist/assets/NewsPage-DvLx_yo3.css
vendored
Normal file
1
client/dist/assets/NewsPage-DvLx_yo3.css
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.admin-crud-page .page-header[data-v-e4a64c9a]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;flex-wrap:wrap;gap:12px}.admin-crud-page .page-header h2[data-v-e4a64c9a]{font-size:20px;color:#1f2937}.admin-crud-page .page-header .page-header-filters[data-v-e4a64c9a]{display:flex;align-items:center;flex-wrap:wrap}
|
||||
@@ -1 +1 @@
|
||||
import{d as b,u as N,m as x,y as z,c as r,b as s,t as a,f as o,n as w,F as g,r as m,s as h,g as y,i as _,j as f,o as l,w as B,q as E}from"./index-DopNG1aC.js";import{p as C,_ as $}from"./index-DGfZijDv.js";const L={class:"news-page"},Z={class:"page-banner"},D={class:"container page-banner-content"},F={class:"section"},M={class:"container"},P={class:"news-filter"},S=["onClick"],V={class:"news-list"},j={class:"news-info"},q={class:"news-date"},A={class:"news-read"},R=b({__name:"NewsPage",setup(T){const{t:i,locale:d}=N(),p=_([]),u=_([]),t=_(null);async function v(){try{const n={};t.value&&(n.categoryId=t.value);const c=await C.getNewsList(n);u.value=c.data||[]}catch{}}return x(async()=>{try{const n=await C.getNewsCategories();p.value=n.data||[]}catch{}v()}),z(t,v),(n,c)=>{const k=f("router-link"),I=f("el-empty");return l(),r("div",L,[s("section",Z,[c[1]||(c[1]=s("div",{class:"page-banner-overlay"},null,-1)),s("div",D,[s("h1",null,a(o(i)("news.title")),1)])]),s("section",F,[s("div",M,[s("div",P,[s("button",{class:w({active:!t.value}),onClick:c[0]||(c[0]=e=>t.value=null)},a(o(i)("cases.allCategories")),3),(l(!0),r(g,null,m(p.value,e=>(l(),r("button",{key:e.newsCategoryId,class:w({active:t.value===e.newsCategoryId}),onClick:G=>t.value=e.newsCategoryId},a(o(d)==="zh"?e.nameZh:e.nameEn),11,S))),128))]),s("div",V,[(l(!0),r(g,null,m(u.value,e=>(l(),h(k,{key:e.newsId,to:`/news/${e.newsId}`,class:"news-item card"},{default:B(()=>[e.coverImage?(l(),r("div",{key:0,class:"news-img",style:E({backgroundImage:`url(${e.coverImage})`})},null,4)):y("",!0),s("div",j,[s("span",q,a(e.createTime?.substring(0,10)),1),s("h3",null,a(o(d)==="zh"?e.titleZh:e.titleEn),1),s("p",null,a(o(d)==="zh"?e.excerptZh:e.excerptEn),1),s("span",A,a(o(i)("news.readMore"))+" →",1)])]),_:2},1032,["to"]))),128))]),u.value.length?y("",!0):(l(),h(I,{key:0,description:o(i)("common.noData")},null,8,["description"]))])])])}}}),K=$(R,[["__scopeId","data-v-f6edf41c"]]);export{K as default};
|
||||
import{d as b,u as N,m as x,G as z,c as r,b as s,t as a,f as o,n as w,F as g,r as m,s as h,g as y,i as _,j as f,o as l,w as B,q as E}from"./index-CzwJBVIC.js";import{p as C,_ as $}from"./index-8GqMb-ax.js";const L={class:"news-page"},Z={class:"page-banner"},D={class:"container page-banner-content"},F={class:"section"},M={class:"container"},P={class:"news-filter"},S=["onClick"],V={class:"news-list"},j={class:"news-info"},q={class:"news-date"},A={class:"news-read"},G=b({__name:"NewsPage",setup(R){const{t:i,locale:d}=N(),p=_([]),u=_([]),t=_(null);async function v(){try{const n={};t.value&&(n.categoryId=t.value);const c=await C.getNewsList(n);u.value=c.data||[]}catch{}}return x(async()=>{try{const n=await C.getNewsCategories();p.value=n.data||[]}catch{}v()}),z(t,v),(n,c)=>{const k=f("router-link"),I=f("el-empty");return l(),r("div",L,[s("section",Z,[c[1]||(c[1]=s("div",{class:"page-banner-overlay"},null,-1)),s("div",D,[s("h1",null,a(o(i)("news.title")),1)])]),s("section",F,[s("div",M,[s("div",P,[s("button",{class:w({active:!t.value}),onClick:c[0]||(c[0]=e=>t.value=null)},a(o(i)("cases.allCategories")),3),(l(!0),r(g,null,m(p.value,e=>(l(),r("button",{key:e.newsCategoryId,class:w({active:t.value===e.newsCategoryId}),onClick:T=>t.value=e.newsCategoryId},a(o(d)==="zh"?e.nameZh:e.nameEn),11,S))),128))]),s("div",V,[(l(!0),r(g,null,m(u.value,e=>(l(),h(k,{key:e.newsId,to:`/news/${e.newsId}`,class:"news-item card"},{default:B(()=>[e.coverImage?(l(),r("div",{key:0,class:"news-img",style:E({backgroundImage:`url(${e.coverImage})`})},null,4)):y("",!0),s("div",j,[s("span",q,a(e.createTime?.substring(0,10)),1),s("h3",null,a(o(d)==="zh"?e.titleZh:e.titleEn),1),s("p",null,a(o(d)==="zh"?e.excerptZh:e.excerptEn),1),s("span",A,a(o(i)("news.readMore"))+" →",1)])]),_:2},1032,["to"]))),128))]),u.value.length?y("",!0):(l(),h(I,{key:0,description:o(i)("common.noData")},null,8,["description"]))])])])}}}),K=$(G,[["__scopeId","data-v-f6edf41c"]]);export{K as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
client/dist/assets/ProductLinePage-DWOX1HXz.js
vendored
Normal file
1
client/dist/assets/ProductLinePage-DWOX1HXz.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{d as D,u as T,m as B,y as F,c,b as t,t as n,f as r,n as m,F as h,r as k,s as _,g as u,i as y,h as M,j as w,o as a,w as Z,q as N}from"./index-DopNG1aC.js";import{p as f,_ as V}from"./index-DGfZijDv.js";import{u as j}from"./uploadUrl-CyxyoWKj.js";const A={class:"products-page"},R={class:"page-banner"},U={class:"container page-banner-content"},G={class:"section"},H={class:"container"},J={class:"products-layout"},K={class:"products-sidebar"},O=["onClick"],Q={class:"products-main"},W={class:"product-tabs"},X={key:0,class:"product-list"},Y={class:"product-info"},ee={key:0,class:"product-category-tag"},te={key:1,class:"product-list"},se={class:"product-info"},oe={key:0,class:"product-category-tag"},ae={key:2,class:"product-list"},ne={class:"product-info"},re={key:0,class:"product-category-tag"},ce={key:1,class:"spare-model"},le=D({__name:"ProductsPage",setup(ue){const{t:d,locale:i}=T(),x={line:"product_line",equipment:"equipment",spare:"spare_part"},$=y([]),b=y([]),C=y([]),I=y([]),p=y(null),l=y("line"),S=M(()=>{const s=x[l.value];return $.value.find(v=>v.moduleType===s)?.children||[]});function E(s){return s?{backgroundImage:`url(${j(s)})`,backgroundSize:"cover",backgroundPosition:"center"}:{backgroundColor:"#e5e7eb"}}function q(s){const o=i.value==="zh",v=o?s.excerptZh:s.excerptEn,g=o?s.descriptionZh:s.descriptionEn;return(typeof v=="string"?v:"")||(typeof g=="string"?g:"")||""}function P(s){l.value=s,p.value=null,z()}async function z(){try{const s={};if(p.value&&(s.categoryId=p.value),l.value==="line"){const o=await f.getProductLines(s);b.value=o.data||[]}else if(l.value==="equipment"){const o=await f.getEquipments(s);C.value=o.data||[]}else{const o=await f.getSpareParts(s);I.value=o.data||[]}}catch(s){console.error("产品列表加载失败",s)}}return B(async()=>{try{const s=await f.getProductCategories();$.value=s.data||[]}catch{}z()}),F(p,z),(s,o)=>{const v=w("router-link"),g=w("el-empty");return a(),c("div",A,[t("section",R,[o[4]||(o[4]=t("div",{class:"page-banner-overlay"},null,-1)),t("div",U,[t("h1",null,n(r(d)("products.title")),1)])]),t("section",G,[t("div",H,[t("div",J,[t("aside",K,[t("h3",null,n(r(d)("products.allCategories")),1),t("ul",null,[t("li",{class:m({active:!p.value}),onClick:o[0]||(o[0]=e=>p.value=null)},n(r(d)("products.allCategories")),3),(a(!0),c(h,null,k(S.value,e=>(a(),c("li",{key:e.productCategoryId,class:m({active:p.value===e.productCategoryId}),onClick:L=>p.value=e.productCategoryId},n(r(i)==="zh"?e.nameZh:e.nameEn),11,O))),128))])]),t("div",Q,[t("div",W,[t("button",{class:m({active:l.value==="line"}),onClick:o[1]||(o[1]=e=>P("line"))},n(r(d)("products.integratedLinesTab")),3),t("button",{class:m({active:l.value==="equipment"}),onClick:o[2]||(o[2]=e=>P("equipment"))},n(r(d)("products.singleEquipment")),3),t("button",{class:m({active:l.value==="spare"}),onClick:o[3]||(o[3]=e=>P("spare"))},n(r(d)("products.spareParts")),3)]),l.value==="line"?(a(),c("div",X,[(a(!0),c(h,null,k(b.value,e=>(a(),_(v,{key:e.productLineId,to:`/products/line/${e.productLineId}`,class:"product-item card"},{default:Z(()=>[t("div",{class:"product-img",style:N(E(e.coverImage))},null,4),t("div",Y,[t("h3",null,n(r(i)==="zh"?e.nameZh:e.nameEn),1),e.categoryNameZh?(a(),c("p",ee,n(r(i)==="zh"?e.categoryNameZh:e.categoryNameEn),1)):u("",!0),t("p",null,n(q(e)),1)])]),_:2},1032,["to"]))),128)),b.value.length?u("",!0):(a(),_(g,{key:0,description:r(d)("common.noData")},null,8,["description"]))])):u("",!0),l.value==="equipment"?(a(),c("div",te,[(a(!0),c(h,null,k(C.value,e=>(a(),_(v,{key:e.singleEquipmentId,to:`/products/equipment/${e.singleEquipmentId}`,class:"product-item card"},{default:Z(()=>[t("div",{class:"product-img",style:N(E(e.coverImage))},null,4),t("div",se,[t("h3",null,n(r(i)==="zh"?e.nameZh:e.nameEn),1),e.categoryNameZh?(a(),c("p",oe,n(r(i)==="zh"?e.categoryNameZh:e.categoryNameEn),1)):u("",!0),t("p",null,n(q(e)),1)])]),_:2},1032,["to"]))),128)),C.value.length?u("",!0):(a(),_(g,{key:0,description:r(d)("common.noData")},null,8,["description"]))])):u("",!0),l.value==="spare"?(a(),c("div",ae,[(a(!0),c(h,null,k(I.value,e=>(a(),_(v,{key:e.sparePartId,to:`/products/spare/${e.sparePartId}`,class:"product-item card"},{default:Z(()=>[t("div",{class:"product-img",style:N(E(e.coverImage))},null,4),t("div",ne,[t("h3",null,n(r(i)==="zh"?e.nameZh:e.nameEn),1),e.categoryNameZh?(a(),c("p",re,n(r(i)==="zh"?e.categoryNameZh:e.categoryNameEn),1)):u("",!0),e.modelSpec?(a(),c("p",ce,n(e.modelSpec),1)):u("",!0),t("p",null,n(q(e)),1)])]),_:2},1032,["to"]))),128)),I.value.length?u("",!0):(a(),_(g,{key:0,description:r(d)("common.noData")},null,8,["description"]))])):u("",!0)])])])])])}}}),ve=V(le,[["__scopeId","data-v-995424cb"]]);export{ve as default};
|
||||
import{d as D,u as T,m as B,G as F,c,b as t,t as n,f as r,n as m,F as h,r as k,s as _,g as u,i as y,h as M,j as w,o as a,w as Z,q as N}from"./index-CzwJBVIC.js";import{p as f,_ as V}from"./index-8GqMb-ax.js";import{u as j}from"./uploadUrl-CyxyoWKj.js";const A={class:"products-page"},G={class:"page-banner"},R={class:"container page-banner-content"},U={class:"section"},H={class:"container"},J={class:"products-layout"},K={class:"products-sidebar"},O=["onClick"],Q={class:"products-main"},W={class:"product-tabs"},X={key:0,class:"product-list"},Y={class:"product-info"},ee={key:0,class:"product-category-tag"},te={key:1,class:"product-list"},se={class:"product-info"},oe={key:0,class:"product-category-tag"},ae={key:2,class:"product-list"},ne={class:"product-info"},re={key:0,class:"product-category-tag"},ce={key:1,class:"spare-model"},le=D({__name:"ProductsPage",setup(ue){const{t:d,locale:i}=T(),x={line:"product_line",equipment:"equipment",spare:"spare_part"},$=y([]),b=y([]),C=y([]),I=y([]),p=y(null),l=y("line"),S=M(()=>{const s=x[l.value];return $.value.find(v=>v.moduleType===s)?.children||[]});function E(s){return s?{backgroundImage:`url(${j(s)})`,backgroundSize:"cover",backgroundPosition:"center"}:{backgroundColor:"#e5e7eb"}}function q(s){const o=i.value==="zh",v=o?s.excerptZh:s.excerptEn,g=o?s.descriptionZh:s.descriptionEn;return(typeof v=="string"?v:"")||(typeof g=="string"?g:"")||""}function P(s){l.value=s,p.value=null,z()}async function z(){try{const s={};if(p.value&&(s.categoryId=p.value),l.value==="line"){const o=await f.getProductLines(s);b.value=o.data||[]}else if(l.value==="equipment"){const o=await f.getEquipments(s);C.value=o.data||[]}else{const o=await f.getSpareParts(s);I.value=o.data||[]}}catch(s){console.error("产品列表加载失败",s)}}return B(async()=>{try{const s=await f.getProductCategories();$.value=s.data||[]}catch{}z()}),F(p,z),(s,o)=>{const v=w("router-link"),g=w("el-empty");return a(),c("div",A,[t("section",G,[o[4]||(o[4]=t("div",{class:"page-banner-overlay"},null,-1)),t("div",R,[t("h1",null,n(r(d)("products.title")),1)])]),t("section",U,[t("div",H,[t("div",J,[t("aside",K,[t("h3",null,n(r(d)("products.allCategories")),1),t("ul",null,[t("li",{class:m({active:!p.value}),onClick:o[0]||(o[0]=e=>p.value=null)},n(r(d)("products.allCategories")),3),(a(!0),c(h,null,k(S.value,e=>(a(),c("li",{key:e.productCategoryId,class:m({active:p.value===e.productCategoryId}),onClick:L=>p.value=e.productCategoryId},n(r(i)==="zh"?e.nameZh:e.nameEn),11,O))),128))])]),t("div",Q,[t("div",W,[t("button",{class:m({active:l.value==="line"}),onClick:o[1]||(o[1]=e=>P("line"))},n(r(d)("products.integratedLinesTab")),3),t("button",{class:m({active:l.value==="equipment"}),onClick:o[2]||(o[2]=e=>P("equipment"))},n(r(d)("products.singleEquipment")),3),t("button",{class:m({active:l.value==="spare"}),onClick:o[3]||(o[3]=e=>P("spare"))},n(r(d)("products.spareParts")),3)]),l.value==="line"?(a(),c("div",X,[(a(!0),c(h,null,k(b.value,e=>(a(),_(v,{key:e.productLineId,to:`/products/line/${e.productLineId}`,class:"product-item card"},{default:Z(()=>[t("div",{class:"product-img",style:N(E(e.coverImage))},null,4),t("div",Y,[t("h3",null,n(r(i)==="zh"?e.nameZh:e.nameEn),1),e.categoryNameZh?(a(),c("p",ee,n(r(i)==="zh"?e.categoryNameZh:e.categoryNameEn),1)):u("",!0),t("p",null,n(q(e)),1)])]),_:2},1032,["to"]))),128)),b.value.length?u("",!0):(a(),_(g,{key:0,description:r(d)("common.noData")},null,8,["description"]))])):u("",!0),l.value==="equipment"?(a(),c("div",te,[(a(!0),c(h,null,k(C.value,e=>(a(),_(v,{key:e.singleEquipmentId,to:`/products/equipment/${e.singleEquipmentId}`,class:"product-item card"},{default:Z(()=>[t("div",{class:"product-img",style:N(E(e.coverImage))},null,4),t("div",se,[t("h3",null,n(r(i)==="zh"?e.nameZh:e.nameEn),1),e.categoryNameZh?(a(),c("p",oe,n(r(i)==="zh"?e.categoryNameZh:e.categoryNameEn),1)):u("",!0),t("p",null,n(q(e)),1)])]),_:2},1032,["to"]))),128)),C.value.length?u("",!0):(a(),_(g,{key:0,description:r(d)("common.noData")},null,8,["description"]))])):u("",!0),l.value==="spare"?(a(),c("div",ae,[(a(!0),c(h,null,k(I.value,e=>(a(),_(v,{key:e.sparePartId,to:`/products/spare/${e.sparePartId}`,class:"product-item card"},{default:Z(()=>[t("div",{class:"product-img",style:N(E(e.coverImage))},null,4),t("div",ne,[t("h3",null,n(r(i)==="zh"?e.nameZh:e.nameEn),1),e.categoryNameZh?(a(),c("p",re,n(r(i)==="zh"?e.categoryNameZh:e.categoryNameEn),1)):u("",!0),e.modelSpec?(a(),c("p",ce,n(e.modelSpec),1)):u("",!0),t("p",null,n(q(e)),1)])]),_:2},1032,["to"]))),128)),I.value.length?u("",!0):(a(),_(g,{key:0,description:r(d)("common.noData")},null,8,["description"]))])):u("",!0)])])])])])}}}),ve=V(le,[["__scopeId","data-v-995424cb"]]);export{ve as default};
|
||||
@@ -1 +1 @@
|
||||
import{d as M,u as H,m as L,c as t,b as s,e as f,w as S,t as a,f as o,q as E,g as i,l as I,i as T,h as u,j as b,o as n,k as Z}from"./index-DopNG1aC.js";import{p as N,_ as P}from"./index-DGfZijDv.js";import{u as x}from"./uploadUrl-CyxyoWKj.js";const A={class:"detail-page"},B={class:"page-banner"},C={class:"container page-banner-content"},D={class:"breadcrumb"},V={key:0,class:"section"},w={class:"container"},U={class:"detail-layout"},j={class:"detail-main"},q={key:1,class:"detail-section"},R={class:"section-title"},$={class:"params-grid"},F={key:0,class:"param-item"},G={class:"param-label"},J={class:"param-value"},K={key:1,class:"param-item"},O={class:"param-label"},Q={class:"param-value"},W={key:2,class:"param-item"},X={class:"param-label"},Y=["innerHTML"],ee={key:3,class:"param-item"},se={class:"param-label"},ae={class:"param-value"},te={key:2,class:"detail-section"},oe={class:"section-title"},ne=["innerHTML"],le={key:3,class:"detail-section"},ce={class:"section-title"},ie=["innerHTML"],re={key:4,class:"detail-section"},de={class:"section-title"},ue=["innerHTML"],pe={key:5,class:"detail-section"},_e={class:"section-title"},ve={class:"section-body"},he={key:1,class:"section"},me={class:"container"},ye=M({__name:"SparePartDetailPage",setup(fe){const g=I(),{t:l,locale:r}=H(),e=T(null),_=u(()=>e.value?.coverImage?x(e.value.coverImage):""),v=u(()=>e.value?r.value==="zh"?e.value.materialZh:e.value.materialEn:""),h=u(()=>{if(!e.value)return"";const c=r.value==="zh",d=c?e.value.contentZh:e.value.contentEn,p=c?e.value.descriptionZh:e.value.descriptionEn;return d||p||""}),m=u(()=>e.value?r.value==="zh"?e.value.specificationsZh:e.value.specificationsEn:""),y=u(()=>e.value?r.value==="zh"?e.value.productAdvantagesZh:e.value.productAdvantagesEn:""),k=u(()=>e.value?e.value.modelSpec||e.value.applicableLineModel||e.value.materialZh||e.value.materialEn||e.value.lifespan:!1);return L(async()=>{try{const c=await N.getSparePartById(Number(g.params.id));e.value=c.data}catch(c){console.error("备品备件详情加载失败",c)}}),(c,d)=>{const p=b("router-link"),z=b("el-empty");return n(),t("div",A,[s("section",B,[d[1]||(d[1]=s("div",{class:"page-banner-overlay"},null,-1)),s("div",C,[s("p",D,[f(p,{to:"/products"},{default:S(()=>[Z(a(o(l)("products.title")),1)]),_:1}),d[0]||(d[0]=s("span",{class:"sep"},"/",-1)),s("span",null,a(o(r)==="zh"?e.value?.categoryNameZh:e.value?.categoryNameEn),1)]),s("h1",null,a(o(r)==="zh"?e.value?.nameZh:e.value?.nameEn),1)])]),e.value?(n(),t("section",V,[s("div",w,[s("div",U,[s("div",j,[_.value?(n(),t("div",{key:0,class:"detail-cover",style:E({backgroundImage:`url(${_.value})`})},null,4)):i("",!0),k.value?(n(),t("div",q,[s("h2",R,a(o(l)("products.specInfo")),1),s("div",$,[e.value.modelSpec?(n(),t("div",F,[s("span",G,a(o(l)("products.modelSpec")),1),s("span",J,a(e.value.modelSpec),1)])):i("",!0),e.value.applicableLineModel?(n(),t("div",K,[s("span",O,a(o(l)("products.applicableLineModel")),1),s("span",Q,a(e.value.applicableLineModel),1)])):i("",!0),v.value?(n(),t("div",W,[s("span",X,a(o(l)("products.material")),1),s("span",{class:"param-value",innerHTML:v.value},null,8,Y)])):i("",!0),e.value.lifespan?(n(),t("div",ee,[s("span",se,a(o(l)("products.lifespan")),1),s("span",ae,a(e.value.lifespan),1)])):i("",!0)])])):i("",!0),h.value?(n(),t("div",te,[s("h2",oe,a(o(l)("products.productIntro")),1),s("div",{class:"section-body",innerHTML:h.value},null,8,ne)])):i("",!0),m.value?(n(),t("div",le,[s("h2",ce,a(o(l)("products.specifications")),1),s("div",{class:"section-body",innerHTML:m.value},null,8,ie)])):i("",!0),y.value?(n(),t("div",re,[s("h2",de,a(o(l)("products.productAdvantages")),1),s("div",{class:"section-body",innerHTML:y.value},null,8,ue)])):i("",!0),e.value.applications?(n(),t("div",pe,[s("h2",_e,a(o(l)("products.applications")),1),s("div",ve,a(e.value.applications),1)])):i("",!0)])])])])):(n(),t("section",he,[s("div",me,[f(z,{description:o(l)("common.noData")},null,8,["description"])])]))])}}}),ze=P(ye,[["__scopeId","data-v-1a066a25"]]);export{ze as default};
|
||||
import{d as M,u as H,m as L,c as t,b as s,e as f,w as S,t as a,f as o,q as E,g as i,l as I,i as T,h as u,j as b,o as n,k as Z}from"./index-CzwJBVIC.js";import{p as N,_ as P}from"./index-8GqMb-ax.js";import{u as x}from"./uploadUrl-CyxyoWKj.js";const A={class:"detail-page"},B={class:"page-banner"},C={class:"container page-banner-content"},D={class:"breadcrumb"},V={key:0,class:"section"},w={class:"container"},U={class:"detail-layout"},j={class:"detail-main"},q={key:1,class:"detail-section"},R={class:"section-title"},$={class:"params-grid"},F={key:0,class:"param-item"},G={class:"param-label"},J={class:"param-value"},K={key:1,class:"param-item"},O={class:"param-label"},Q={class:"param-value"},W={key:2,class:"param-item"},X={class:"param-label"},Y=["innerHTML"],ee={key:3,class:"param-item"},se={class:"param-label"},ae={class:"param-value"},te={key:2,class:"detail-section"},oe={class:"section-title"},ne=["innerHTML"],le={key:3,class:"detail-section"},ce={class:"section-title"},ie=["innerHTML"],re={key:4,class:"detail-section"},de={class:"section-title"},ue=["innerHTML"],pe={key:5,class:"detail-section"},_e={class:"section-title"},ve={class:"section-body"},he={key:1,class:"section"},me={class:"container"},ye=M({__name:"SparePartDetailPage",setup(fe){const g=I(),{t:l,locale:r}=H(),e=T(null),_=u(()=>e.value?.coverImage?x(e.value.coverImage):""),v=u(()=>e.value?r.value==="zh"?e.value.materialZh:e.value.materialEn:""),h=u(()=>{if(!e.value)return"";const c=r.value==="zh",d=c?e.value.contentZh:e.value.contentEn,p=c?e.value.descriptionZh:e.value.descriptionEn;return d||p||""}),m=u(()=>e.value?r.value==="zh"?e.value.specificationsZh:e.value.specificationsEn:""),y=u(()=>e.value?r.value==="zh"?e.value.productAdvantagesZh:e.value.productAdvantagesEn:""),k=u(()=>e.value?e.value.modelSpec||e.value.applicableLineModel||e.value.materialZh||e.value.materialEn||e.value.lifespan:!1);return L(async()=>{try{const c=await N.getSparePartById(Number(g.params.id));e.value=c.data}catch(c){console.error("备品备件详情加载失败",c)}}),(c,d)=>{const p=b("router-link"),z=b("el-empty");return n(),t("div",A,[s("section",B,[d[1]||(d[1]=s("div",{class:"page-banner-overlay"},null,-1)),s("div",C,[s("p",D,[f(p,{to:"/products"},{default:S(()=>[Z(a(o(l)("products.title")),1)]),_:1}),d[0]||(d[0]=s("span",{class:"sep"},"/",-1)),s("span",null,a(o(r)==="zh"?e.value?.categoryNameZh:e.value?.categoryNameEn),1)]),s("h1",null,a(o(r)==="zh"?e.value?.nameZh:e.value?.nameEn),1)])]),e.value?(n(),t("section",V,[s("div",w,[s("div",U,[s("div",j,[_.value?(n(),t("div",{key:0,class:"detail-cover",style:E({backgroundImage:`url(${_.value})`})},null,4)):i("",!0),k.value?(n(),t("div",q,[s("h2",R,a(o(l)("products.specInfo")),1),s("div",$,[e.value.modelSpec?(n(),t("div",F,[s("span",G,a(o(l)("products.modelSpec")),1),s("span",J,a(e.value.modelSpec),1)])):i("",!0),e.value.applicableLineModel?(n(),t("div",K,[s("span",O,a(o(l)("products.applicableLineModel")),1),s("span",Q,a(e.value.applicableLineModel),1)])):i("",!0),v.value?(n(),t("div",W,[s("span",X,a(o(l)("products.material")),1),s("span",{class:"param-value",innerHTML:v.value},null,8,Y)])):i("",!0),e.value.lifespan?(n(),t("div",ee,[s("span",se,a(o(l)("products.lifespan")),1),s("span",ae,a(e.value.lifespan),1)])):i("",!0)])])):i("",!0),h.value?(n(),t("div",te,[s("h2",oe,a(o(l)("products.productIntro")),1),s("div",{class:"section-body",innerHTML:h.value},null,8,ne)])):i("",!0),m.value?(n(),t("div",le,[s("h2",ce,a(o(l)("products.specifications")),1),s("div",{class:"section-body",innerHTML:m.value},null,8,ie)])):i("",!0),y.value?(n(),t("div",re,[s("h2",de,a(o(l)("products.productAdvantages")),1),s("div",{class:"section-body",innerHTML:y.value},null,8,ue)])):i("",!0),e.value.applications?(n(),t("div",pe,[s("h2",_e,a(o(l)("products.applications")),1),s("div",ve,a(e.value.applications),1)])):i("",!0)])])])])):(n(),t("section",he,[s("div",me,[f(z,{description:o(l)("common.noData")},null,8,["description"])])]))])}}}),ze=P(ye,[["__scopeId","data-v-1a066a25"]]);export{ze as default};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{d as $,m as M,c as N,b as w,e as l,w as o,Q as S,s as z,i,j as n,R as j,o as C,k as r,t as k,E as c,S as A}from"./index-DopNG1aC.js";import{a as _,_ as L}from"./index-DGfZijDv.js";const Q={class:"admin-crud-page"},R={class:"page-header"},q=$({__name:"TechnologyPage",setup(F){const g=i(!1),b=i(!1),V=i([]),m=i(!1),p=i(null),t=i({});async function y(){g.value=!0;try{const u=await _.getTechnologies();V.value=u.data??[]}catch{V.value=[]}finally{g.value=!1}}function h(u){u?(p.value=u.coreTechnologyId,t.value={...u}):(p.value=null,t.value={sortOrder:0,isPublished:0}),m.value=!0}async function x(){b.value=!0;try{p.value?await _.updateTechnology({...t.value,coreTechnologyId:p.value}):await _.addTechnology(t.value),c.success("保存成功"),m.value=!1,y()}catch{c.error("保存失败")}b.value=!1}async function T(u){await A.confirm("确认删除?","提示",{type:"warning"});try{await _.deleteTechnology(u),c.success("删除成功"),y()}catch{c.error("删除失败")}}return M(y),(u,e)=>{const v=n("el-button"),s=n("el-table-column"),P=n("el-tag"),E=n("el-table"),f=n("el-input"),d=n("el-form-item"),U=n("el-input-number"),I=n("el-switch"),D=n("el-form"),B=n("el-dialog"),Z=j("loading");return C(),N("div",Q,[w("div",R,[e[11]||(e[11]=w("h2",null,"核心技术管理",-1)),l(v,{type:"primary",onClick:e[0]||(e[0]=a=>h())},{default:o(()=>[...e[10]||(e[10]=[r("新增技术",-1)])]),_:1})]),S((C(),z(E,{data:V.value,border:"",stripe:""},{default:o(()=>[l(s,{prop:"coreTechnologyId",label:"ID",width:"80"}),l(s,{prop:"iconClass",label:"图标类名",width:"160"},{default:o(({row:a})=>[w("span",null,k(a.iconClass||"—"),1)]),_:1}),l(s,{prop:"nameZh",label:"名称(中)"}),l(s,{prop:"nameEn",label:"名称(英)"}),l(s,{prop:"sortOrder",label:"排序",width:"80"}),l(s,{prop:"isPublished",label:"状态",width:"80"},{default:o(({row:a})=>[l(P,{type:a.isPublished?"success":"info"},{default:o(()=>[r(k(a.isPublished?"已发布":"草稿"),1)]),_:2},1032,["type"])]),_:1}),l(s,{label:"操作",width:"160",fixed:"right"},{default:o(({row:a})=>[l(v,{size:"small",onClick:O=>h(a)},{default:o(()=>[...e[12]||(e[12]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(v,{size:"small",type:"danger",onClick:O=>T(a.coreTechnologyId)},{default:o(()=>[...e[13]||(e[13]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[Z,g.value]]),l(B,{modelValue:m.value,"onUpdate:modelValue":e[9]||(e[9]=a=>m.value=a),title:p.value?"编辑技术":"新增技术",width:"700px"},{footer:o(()=>[l(v,{onClick:e[8]||(e[8]=a=>m.value=!1)},{default:o(()=>[...e[14]||(e[14]=[r("取消",-1)])]),_:1}),l(v,{type:"primary",onClick:x,loading:b.value},{default:o(()=>[...e[15]||(e[15]=[r("保存",-1)])]),_:1},8,["loading"])]),default:o(()=>[l(D,{model:t.value,"label-width":"120px"},{default:o(()=>[l(d,{label:"名称(中)"},{default:o(()=>[l(f,{modelValue:t.value.nameZh,"onUpdate:modelValue":e[1]||(e[1]=a=>t.value.nameZh=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"名称(英)"},{default:o(()=>[l(f,{modelValue:t.value.nameEn,"onUpdate:modelValue":e[2]||(e[2]=a=>t.value.nameEn=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"描述(中)"},{default:o(()=>[l(f,{modelValue:t.value.descriptionZh,"onUpdate:modelValue":e[3]||(e[3]=a=>t.value.descriptionZh=a),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(d,{label:"描述(英)"},{default:o(()=>[l(f,{modelValue:t.value.descriptionEn,"onUpdate:modelValue":e[4]||(e[4]=a=>t.value.descriptionEn=a),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(d,{label:"图片路径"},{default:o(()=>[l(f,{modelValue:t.value.imagePath,"onUpdate:modelValue":e[5]||(e[5]=a=>t.value.imagePath=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"排序"},{default:o(()=>[l(U,{modelValue:t.value.sortOrder,"onUpdate:modelValue":e[6]||(e[6]=a=>t.value.sortOrder=a),min:0},null,8,["modelValue"])]),_:1}),l(d,{label:"发布状态"},{default:o(()=>[l(I,{modelValue:t.value.isPublished,"onUpdate:modelValue":e[7]||(e[7]=a=>t.value.isPublished=a),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}}),J=L(q,[["__scopeId","data-v-05b18580"]]);export{J as default};
|
||||
import{d as $,m as M,c as N,b as w,e as l,w as o,W as z,s as S,i,j as n,X as j,o as C,k as r,t as k,I as c,Y as A}from"./index-CzwJBVIC.js";import{a as _,_ as L}from"./index-8GqMb-ax.js";const W={class:"admin-crud-page"},X={class:"page-header"},Y=$({__name:"TechnologyPage",setup(q){const g=i(!1),b=i(!1),V=i([]),m=i(!1),p=i(null),t=i({});async function y(){g.value=!0;try{const u=await _.getTechnologies();V.value=u.data??[]}catch{V.value=[]}finally{g.value=!1}}function h(u){u?(p.value=u.coreTechnologyId,t.value={...u}):(p.value=null,t.value={sortOrder:0,isPublished:0}),m.value=!0}async function x(){b.value=!0;try{p.value?await _.updateTechnology({...t.value,coreTechnologyId:p.value}):await _.addTechnology(t.value),c.success("保存成功"),m.value=!1,y()}catch{c.error("保存失败")}b.value=!1}async function T(u){await A.confirm("确认删除?","提示",{type:"warning"});try{await _.deleteTechnology(u),c.success("删除成功"),y()}catch{c.error("删除失败")}}return M(y),(u,e)=>{const v=n("el-button"),s=n("el-table-column"),P=n("el-tag"),E=n("el-table"),f=n("el-input"),d=n("el-form-item"),I=n("el-input-number"),U=n("el-switch"),D=n("el-form"),B=n("el-dialog"),Z=j("loading");return C(),N("div",W,[w("div",X,[e[11]||(e[11]=w("h2",null,"核心技术管理",-1)),l(v,{type:"primary",onClick:e[0]||(e[0]=a=>h())},{default:o(()=>[...e[10]||(e[10]=[r("新增技术",-1)])]),_:1})]),z((C(),S(E,{data:V.value,border:"",stripe:""},{default:o(()=>[l(s,{prop:"coreTechnologyId",label:"ID",width:"80"}),l(s,{prop:"iconClass",label:"图标类名",width:"160"},{default:o(({row:a})=>[w("span",null,k(a.iconClass||"—"),1)]),_:1}),l(s,{prop:"nameZh",label:"名称(中)"}),l(s,{prop:"nameEn",label:"名称(英)"}),l(s,{prop:"sortOrder",label:"排序",width:"80"}),l(s,{prop:"isPublished",label:"状态",width:"80"},{default:o(({row:a})=>[l(P,{type:a.isPublished?"success":"info"},{default:o(()=>[r(k(a.isPublished?"已发布":"草稿"),1)]),_:2},1032,["type"])]),_:1}),l(s,{label:"操作",width:"160",fixed:"right"},{default:o(({row:a})=>[l(v,{size:"small",onClick:O=>h(a)},{default:o(()=>[...e[12]||(e[12]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(v,{size:"small",type:"danger",onClick:O=>T(a.coreTechnologyId)},{default:o(()=>[...e[13]||(e[13]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[Z,g.value]]),l(B,{modelValue:m.value,"onUpdate:modelValue":e[9]||(e[9]=a=>m.value=a),title:p.value?"编辑技术":"新增技术",width:"700px"},{footer:o(()=>[l(v,{onClick:e[8]||(e[8]=a=>m.value=!1)},{default:o(()=>[...e[14]||(e[14]=[r("取消",-1)])]),_:1}),l(v,{type:"primary",onClick:x,loading:b.value},{default:o(()=>[...e[15]||(e[15]=[r("保存",-1)])]),_:1},8,["loading"])]),default:o(()=>[l(D,{model:t.value,"label-width":"120px"},{default:o(()=>[l(d,{label:"名称(中)"},{default:o(()=>[l(f,{modelValue:t.value.nameZh,"onUpdate:modelValue":e[1]||(e[1]=a=>t.value.nameZh=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"名称(英)"},{default:o(()=>[l(f,{modelValue:t.value.nameEn,"onUpdate:modelValue":e[2]||(e[2]=a=>t.value.nameEn=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"描述(中)"},{default:o(()=>[l(f,{modelValue:t.value.descriptionZh,"onUpdate:modelValue":e[3]||(e[3]=a=>t.value.descriptionZh=a),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(d,{label:"描述(英)"},{default:o(()=>[l(f,{modelValue:t.value.descriptionEn,"onUpdate:modelValue":e[4]||(e[4]=a=>t.value.descriptionEn=a),type:"textarea",rows:4},null,8,["modelValue"])]),_:1}),l(d,{label:"图片路径"},{default:o(()=>[l(f,{modelValue:t.value.imagePath,"onUpdate:modelValue":e[5]||(e[5]=a=>t.value.imagePath=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"排序"},{default:o(()=>[l(I,{modelValue:t.value.sortOrder,"onUpdate:modelValue":e[6]||(e[6]=a=>t.value.sortOrder=a),min:0},null,8,["modelValue"])]),_:1}),l(d,{label:"发布状态"},{default:o(()=>[l(U,{modelValue:t.value.isPublished,"onUpdate:modelValue":e[7]||(e[7]=a=>t.value.isPublished=a),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}}),H=L(Y,[["__scopeId","data-v-05b18580"]]);export{H as default};
|
||||
@@ -1 +1 @@
|
||||
import{d as p,u,m as g,c as t,b as e,t as d,f as o,F as h,r as y,s as v,g as _,i as f,j as b,o as n,q as k}from"./index-DopNG1aC.js";import{p as T,_ as B}from"./index-DGfZijDv.js";const I={class:"technology-page"},P={class:"page-banner"},x={class:"container page-banner-content"},z={class:"section"},C={class:"container"},E={class:"tech-list"},L={class:"tech-info"},M=["innerHTML"],D=p({__name:"TechnologyPage",setup(F){const{t:l,locale:i}=u(),a=f([]);return g(async()=>{try{const c=await T.getTechnologies();a.value=c.data||[]}catch{}}),(c,r)=>{const m=b("el-empty");return n(),t("div",I,[e("section",P,[r[0]||(r[0]=e("div",{class:"page-banner-overlay"},null,-1)),e("div",x,[e("h1",null,d(o(l)("technology.title")),1)])]),e("section",z,[e("div",C,[e("div",E,[(n(!0),t(h,null,y(a.value,s=>(n(),t("div",{key:s.coreTechnologyId,class:"tech-item card"},[s.imagePath?(n(),t("div",{key:0,class:"tech-img",style:k({backgroundImage:`url(${s.imagePath})`})},null,4)):_("",!0),e("div",L,[e("h3",null,d(o(i)==="zh"?s.nameZh:s.nameEn),1),e("div",{class:"tech-desc",innerHTML:o(i)==="zh"?s.descriptionZh:s.descriptionEn},null,8,M)])]))),128))]),a.value.length?_("",!0):(n(),v(m,{key:0,description:o(l)("common.noData")},null,8,["description"]))])])])}}}),S=B(D,[["__scopeId","data-v-2b2f75b3"]]);export{S as default};
|
||||
import{d as p,u,m as g,c as t,b as e,t as d,f as o,F as h,r as y,s as v,g as _,i as f,j as b,o as n,q as k}from"./index-CzwJBVIC.js";import{p as T,_ as B}from"./index-8GqMb-ax.js";const I={class:"technology-page"},P={class:"page-banner"},x={class:"container page-banner-content"},z={class:"section"},C={class:"container"},E={class:"tech-list"},L={class:"tech-info"},M=["innerHTML"],D=p({__name:"TechnologyPage",setup(F){const{t:l,locale:i}=u(),a=f([]);return g(async()=>{try{const c=await T.getTechnologies();a.value=c.data||[]}catch{}}),(c,r)=>{const m=b("el-empty");return n(),t("div",I,[e("section",P,[r[0]||(r[0]=e("div",{class:"page-banner-overlay"},null,-1)),e("div",x,[e("h1",null,d(o(l)("technology.title")),1)])]),e("section",z,[e("div",C,[e("div",E,[(n(!0),t(h,null,y(a.value,s=>(n(),t("div",{key:s.coreTechnologyId,class:"tech-item card"},[s.imagePath?(n(),t("div",{key:0,class:"tech-img",style:k({backgroundImage:`url(${s.imagePath})`})},null,4)):_("",!0),e("div",L,[e("h3",null,d(o(i)==="zh"?s.nameZh:s.nameEn),1),e("div",{class:"tech-desc",innerHTML:o(i)==="zh"?s.descriptionZh:s.descriptionEn},null,8,M)])]))),128))]),a.value.length?_("",!0):(n(),v(m,{key:0,description:o(l)("common.noData")},null,8,["description"]))])])])}}}),S=B(D,[["__scopeId","data-v-2b2f75b3"]]);export{S as default};
|
||||
@@ -1 +1 @@
|
||||
import{d as $,m as A,c as M,b as h,e as l,w as t,Q as S,s as x,i,j as n,R as z,o as w,k as r,f as j,g as L,t as Q,E as _,S as R}from"./index-DopNG1aC.js";import{a as c,_ as T}from"./index-DGfZijDv.js";import{A as q}from"./AdminCoverUpload-DvubFX2N.js";import{u as F}from"./uploadUrl-CyxyoWKj.js";const G={class:"admin-crud-page"},H={class:"page-header"},J=$({__name:"WorkshopPage",setup(K){const b=i(!1),g=i(!1),V=i([]),m=i(!1),p=i(null),o=i({});async function k(){b.value=!0;try{const s=await c.getWorkshops();V.value=s.data??[]}catch{V.value=[]}finally{b.value=!1}}function y(s){s?(p.value=s.workshopId,o.value={...s}):(p.value=null,o.value={sortOrder:0,isPublished:0}),m.value=!0}async function P(){g.value=!0;try{p.value?await c.updateWorkshop({...o.value,workshopId:p.value}):await c.addWorkshop(o.value),_.success("保存成功"),m.value=!1,k()}catch{_.error("保存失败")}g.value=!1}async function C(s){await R.confirm("确认删除?","提示",{type:"warning"});try{await c.deleteWorkshop(s),_.success("删除成功"),k()}catch{_.error("删除失败")}}return A(k),(s,e)=>{const v=n("el-button"),u=n("el-table-column"),U=n("el-image"),E=n("el-tag"),I=n("el-table"),f=n("el-input"),d=n("el-form-item"),D=n("el-input-number"),W=n("el-switch"),B=n("el-form"),Z=n("el-dialog"),N=z("loading");return w(),M("div",G,[h("div",H,[e[11]||(e[11]=h("h2",null,"车间展示管理",-1)),l(v,{type:"primary",onClick:e[0]||(e[0]=a=>y())},{default:t(()=>[...e[10]||(e[10]=[r("新增车间",-1)])]),_:1})]),S((w(),x(I,{data:V.value,border:"",stripe:""},{default:t(()=>[l(u,{prop:"workshopId",label:"ID",width:"80"}),l(u,{label:"图片",width:"160"},{default:t(({row:a})=>[a.imagePath?(w(),x(U,{key:0,src:j(F)(a.imagePath),style:{width:"120px",height:"60px"},fit:"cover"},null,8,["src"])):L("",!0)]),_:1}),l(u,{prop:"nameZh",label:"名称(中)"}),l(u,{prop:"nameEn",label:"名称(英)"}),l(u,{prop:"sortOrder",label:"排序",width:"80"}),l(u,{prop:"isPublished",label:"状态",width:"80"},{default:t(({row:a})=>[l(E,{type:a.isPublished?"success":"info"},{default:t(()=>[r(Q(a.isPublished?"已发布":"草稿"),1)]),_:2},1032,["type"])]),_:1}),l(u,{label:"操作",width:"160",fixed:"right"},{default:t(({row:a})=>[l(v,{size:"small",onClick:O=>y(a)},{default:t(()=>[...e[12]||(e[12]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(v,{size:"small",type:"danger",onClick:O=>C(a.workshopId)},{default:t(()=>[...e[13]||(e[13]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[N,b.value]]),l(Z,{modelValue:m.value,"onUpdate:modelValue":e[9]||(e[9]=a=>m.value=a),title:p.value?"编辑车间":"新增车间",width:"700px"},{footer:t(()=>[l(v,{onClick:e[8]||(e[8]=a=>m.value=!1)},{default:t(()=>[...e[14]||(e[14]=[r("取消",-1)])]),_:1}),l(v,{type:"primary",onClick:P,loading:g.value},{default:t(()=>[...e[15]||(e[15]=[r("保存",-1)])]),_:1},8,["loading"])]),default:t(()=>[l(B,{model:o.value,"label-width":"120px"},{default:t(()=>[l(d,{label:"名称(中)"},{default:t(()=>[l(f,{modelValue:o.value.nameZh,"onUpdate:modelValue":e[1]||(e[1]=a=>o.value.nameZh=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"名称(英)"},{default:t(()=>[l(f,{modelValue:o.value.nameEn,"onUpdate:modelValue":e[2]||(e[2]=a=>o.value.nameEn=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"描述(中)"},{default:t(()=>[l(f,{modelValue:o.value.descriptionZh,"onUpdate:modelValue":e[3]||(e[3]=a=>o.value.descriptionZh=a),type:"textarea",rows:3},null,8,["modelValue"])]),_:1}),l(d,{label:"描述(英)"},{default:t(()=>[l(f,{modelValue:o.value.descriptionEn,"onUpdate:modelValue":e[4]||(e[4]=a=>o.value.descriptionEn=a),type:"textarea",rows:3},null,8,["modelValue"])]),_:1}),l(d,{label:"图片"},{default:t(()=>[l(q,{modelValue:o.value.imagePath,"onUpdate:modelValue":e[5]||(e[5]=a=>o.value.imagePath=a),"media-category":"workshop"},null,8,["modelValue"])]),_:1}),l(d,{label:"排序"},{default:t(()=>[l(D,{modelValue:o.value.sortOrder,"onUpdate:modelValue":e[6]||(e[6]=a=>o.value.sortOrder=a),min:0},null,8,["modelValue"])]),_:1}),l(d,{label:"发布状态"},{default:t(()=>[l(W,{modelValue:o.value.isPublished,"onUpdate:modelValue":e[7]||(e[7]=a=>o.value.isPublished=a),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}}),ae=T(J,[["__scopeId","data-v-9c88ef9a"]]);export{ae as default};
|
||||
import{d as $,m as A,c as M,b as h,e as l,w as t,W as z,s as x,i,j as n,X as S,o as w,k as r,f as j,g as L,t as T,I as _,Y as X}from"./index-CzwJBVIC.js";import{a as c,_ as Y}from"./index-8GqMb-ax.js";import{A as q}from"./AdminCoverUpload-BoIYFuAm.js";import{u as F}from"./uploadUrl-CyxyoWKj.js";const G={class:"admin-crud-page"},H={class:"page-header"},J=$({__name:"WorkshopPage",setup(K){const b=i(!1),g=i(!1),V=i([]),m=i(!1),p=i(null),o=i({});async function k(){b.value=!0;try{const s=await c.getWorkshops();V.value=s.data??[]}catch{V.value=[]}finally{b.value=!1}}function y(s){s?(p.value=s.workshopId,o.value={...s}):(p.value=null,o.value={sortOrder:0,isPublished:0}),m.value=!0}async function P(){g.value=!0;try{p.value?await c.updateWorkshop({...o.value,workshopId:p.value}):await c.addWorkshop(o.value),_.success("保存成功"),m.value=!1,k()}catch{_.error("保存失败")}g.value=!1}async function C(s){await X.confirm("确认删除?","提示",{type:"warning"});try{await c.deleteWorkshop(s),_.success("删除成功"),k()}catch{_.error("删除失败")}}return A(k),(s,e)=>{const v=n("el-button"),u=n("el-table-column"),U=n("el-image"),E=n("el-tag"),I=n("el-table"),f=n("el-input"),d=n("el-form-item"),W=n("el-input-number"),D=n("el-switch"),B=n("el-form"),Z=n("el-dialog"),N=S("loading");return w(),M("div",G,[h("div",H,[e[11]||(e[11]=h("h2",null,"车间展示管理",-1)),l(v,{type:"primary",onClick:e[0]||(e[0]=a=>y())},{default:t(()=>[...e[10]||(e[10]=[r("新增车间",-1)])]),_:1})]),z((w(),x(I,{data:V.value,border:"",stripe:""},{default:t(()=>[l(u,{prop:"workshopId",label:"ID",width:"80"}),l(u,{label:"图片",width:"160"},{default:t(({row:a})=>[a.imagePath?(w(),x(U,{key:0,src:j(F)(a.imagePath),style:{width:"120px",height:"60px"},fit:"cover"},null,8,["src"])):L("",!0)]),_:1}),l(u,{prop:"nameZh",label:"名称(中)"}),l(u,{prop:"nameEn",label:"名称(英)"}),l(u,{prop:"sortOrder",label:"排序",width:"80"}),l(u,{prop:"isPublished",label:"状态",width:"80"},{default:t(({row:a})=>[l(E,{type:a.isPublished?"success":"info"},{default:t(()=>[r(T(a.isPublished?"已发布":"草稿"),1)]),_:2},1032,["type"])]),_:1}),l(u,{label:"操作",width:"160",fixed:"right"},{default:t(({row:a})=>[l(v,{size:"small",onClick:O=>y(a)},{default:t(()=>[...e[12]||(e[12]=[r("编辑",-1)])]),_:1},8,["onClick"]),l(v,{size:"small",type:"danger",onClick:O=>C(a.workshopId)},{default:t(()=>[...e[13]||(e[13]=[r("删除",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[N,b.value]]),l(Z,{modelValue:m.value,"onUpdate:modelValue":e[9]||(e[9]=a=>m.value=a),title:p.value?"编辑车间":"新增车间",width:"700px"},{footer:t(()=>[l(v,{onClick:e[8]||(e[8]=a=>m.value=!1)},{default:t(()=>[...e[14]||(e[14]=[r("取消",-1)])]),_:1}),l(v,{type:"primary",onClick:P,loading:g.value},{default:t(()=>[...e[15]||(e[15]=[r("保存",-1)])]),_:1},8,["loading"])]),default:t(()=>[l(B,{model:o.value,"label-width":"120px"},{default:t(()=>[l(d,{label:"名称(中)"},{default:t(()=>[l(f,{modelValue:o.value.nameZh,"onUpdate:modelValue":e[1]||(e[1]=a=>o.value.nameZh=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"名称(英)"},{default:t(()=>[l(f,{modelValue:o.value.nameEn,"onUpdate:modelValue":e[2]||(e[2]=a=>o.value.nameEn=a)},null,8,["modelValue"])]),_:1}),l(d,{label:"描述(中)"},{default:t(()=>[l(f,{modelValue:o.value.descriptionZh,"onUpdate:modelValue":e[3]||(e[3]=a=>o.value.descriptionZh=a),type:"textarea",rows:3},null,8,["modelValue"])]),_:1}),l(d,{label:"描述(英)"},{default:t(()=>[l(f,{modelValue:o.value.descriptionEn,"onUpdate:modelValue":e[4]||(e[4]=a=>o.value.descriptionEn=a),type:"textarea",rows:3},null,8,["modelValue"])]),_:1}),l(d,{label:"图片"},{default:t(()=>[l(q,{modelValue:o.value.imagePath,"onUpdate:modelValue":e[5]||(e[5]=a=>o.value.imagePath=a),"media-category":"workshop"},null,8,["modelValue"])]),_:1}),l(d,{label:"排序"},{default:t(()=>[l(W,{modelValue:o.value.sortOrder,"onUpdate:modelValue":e[6]||(e[6]=a=>o.value.sortOrder=a),min:0},null,8,["modelValue"])]),_:1}),l(d,{label:"发布状态"},{default:t(()=>[l(D,{modelValue:o.value.isPublished,"onUpdate:modelValue":e[7]||(e[7]=a=>o.value.isPublished=a),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"])])}}}),ae=Y(J,[["__scopeId","data-v-9c88ef9a"]]);export{ae as default};
|
||||
1
client/dist/assets/caseStudyDisplay-BpRnrzFj.js
vendored
Normal file
1
client/dist/assets/caseStudyDisplay-BpRnrzFj.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
const p=["典型案例","典型用户","工业应用"],d=["reference","typical case","industrial application"];function f(i,o){const t=(i||"").trim(),n=(o||"").trim().toLowerCase();return!!(t&&p.includes(t)||n&&d.includes(n))}function y(i,o){const t=i||"",n=o||"",e=(a,r)=>({zh:a,en:r}),s=[{test:()=>/武钢|WISCO|Wuhan Steel|Wuhan Iron/i.test(t)||/WISCO|Wuhan Steel/i.test(n),out:e("中国宝武(武钢)","China Baowu (WISCO)")},{test:()=>/梅钢|梅山/.test(t)||/Meishan/i.test(n),out:e("上海梅山钢铁","Meishan Iron & Steel")},{test:()=>/宝钢|宝武/.test(t)||/Baosteel|Baoshan Iron/i.test(n),out:e("宝山钢铁股份有限公司","Baoshan Iron & Steel Co., Ltd.")},{test:()=>/首钢/.test(t)||/Shougang/i.test(n),out:e("首钢集团","Shougang Group")},{test:()=>/迁安/.test(t)||/Qian'an/i.test(n),out:e("迁安钢铁企业","Qian'an steel producer")},{test:()=>/德盛/.test(t)||/Desheng/i.test(n),out:e("福建德盛镍业","Fujian Desheng")},{test:()=>/金轮/.test(t)||/Jinlun/i.test(n),out:e("金轮针布","Jinlun")},{test:()=>/河北兆建|兆建/.test(t)||/Zhaojian/i.test(n),out:e("河北兆建","Hebei Zhaojian")},{test:()=>/印尼|印度尼西亚/.test(t)||/Indonesia/i.test(n),out:e("印尼钢铁企业","Indonesia steel producer")},{test:()=>/台湾/.test(t)||/Taiwan/i.test(n),out:e("台湾客户","Taiwan customer")},{test:()=>/成都|钛盟/.test(t)||/Chengdu Taimum/i.test(n),out:e("成都钛盟新材料","Chengdu Taimum New Materials")},{test:()=>/航隆/.test(t)||/Hanglong/i.test(n),out:e("航隆材料","Hanglong Materials")},{test:()=>/神州通|管业/.test(t)||/Shenzhou Tong/i.test(n),out:e("神州通管业","Shenzhou Tong Guanye")},{test:()=>/科仁普/.test(t)||/Kerengpu/i.test(n),out:e("科仁普重工","Kerengpu Heavy Industry")},{test:()=>/中新冶业|中新/.test(t)||/Zhongxin Ye/i.test(n),out:e("中新冶业","Zhongxin Ye Industry")},{test:()=>/海鸿/.test(t)||/Haihong/i.test(n),out:e("海鸿金属","Haihong Metal")},{test:()=>/大力神|达利/.test(t)||/Dalishen/i.test(n),out:e("大力神","Dalishen")},{test:()=>/宇联/.test(t)||/Yulian/i.test(n),out:e("宇联实业","Yulian Industrial")},{test:()=>/新疆八一|八钢|Bayi/.test(t)||/Bayi Steel|Xinjiang Bayi/i.test(n),out:e("新疆八一钢铁","Xinjiang Bayi Iron & Steel")},{test:()=>/福建鼎信|鼎信/.test(t)||/Fujian Dingxin|Dingxin/i.test(n),out:e("福建鼎信科技","Fujian Dingxin Technology")},{test:()=>/宁波宝新|宝新/.test(t)||/Ningbo Baoxin/i.test(n),out:e("宁波宝新不锈钢","Ningbo Baoxin Stainless Steel")}];for(const a of s)if(a.test())return a.out;return null}const l="行业典型应用",c="Typical industrial application";function S(i,o){const t=(i.descriptionZh||"").trim(),n=(i.descriptionEn||"").trim();if(o==="zh"){const a=t;let r=a.match(/投运\s*([\d.]+)/);return r?r[1]:(r=a.match(/预计\s*([\d.]+)/),r?`${r[1]}(预计)`:(r=a.match(/(?:投运|预计)([\d.]+)/),r?r[1]:null))}const e=n||t;let s=e.match(/est\.\s*([\d.]+)/i);return s?`${s[1]} (est.)`:(s=e.match(/(?:commissioned|in service)\s*[:\s]*([\d.]+)/i),s||(s=e.match(/投运\s*([\d.]+)/),s)?s[1]:null)}function C(i,o){const t=(o==="zh"?i.scopeZh:i.scopeEn)?.trim()||"";if(t)return t.length>140?`${t.slice(0,140)}…`:t;const e=((o==="zh"?i.descriptionZh:i.descriptionEn||i.descriptionZh)||"").replace(/数量\s*\d+\s*[;;]?\s*/g,"").replace(/投运[^;;]*/g,"").replace(/预计[^;;]*/g,"").replace(/^[;;\s]+|[;;\s]+$/g,"").trim();return e?e.length>120?`${e.slice(0,120)}…`:e:""}function I(i,o){const t=(i.projectNameZh||"").trim(),n=(i.projectNameEn||"").trim();let e=(i.clientNameZh||"").trim(),s=(i.clientNameEn||"").trim(),a=!1;if(f(e,s)){const u=y(t,n);u?(e=u.zh,s=u.en,a=!0):(e=l,s=c,a=!1)}const r=o==="zh"?e||s||l:s||e||c,h=o==="zh"?t||n:n||t,m=(o==="zh"?[i.descriptionZh,i.scopeZh].map(u=>(u||"").trim()).filter(Boolean):[i.descriptionEn,i.scopeEn].map(u=>(u||"").trim()).filter(Boolean)).join(" · "),g=o==="zh"?(i.categoryNameZh||"").trim():(i.categoryNameEn||"").trim();return{headline:r,subhead:h,summary:m,categoryLabel:g,inferred:a,metaSummary:C(i,o)}}export{S as e,I as g};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
client/dist/index.html
vendored
2
client/dist/index.html
vendored
@@ -5,7 +5,7 @@
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>武汉萨格 | Wuhan Saga</title>
|
||||
<script type="module" crossorigin src="/assets/index-DopNG1aC.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-CzwJBVIC.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-60bP0XR6.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -25,6 +25,7 @@ export default {
|
||||
successCases: 'Success Cases',
|
||||
latestNews: 'Latest News',
|
||||
viewAll: 'View All',
|
||||
commissioning: 'Commissioning / delivery',
|
||||
statsHeadEn: 'BY THE NUMBERS',
|
||||
statsHeroTitle:
|
||||
'With strip and sheet processing technology at our core, we provide domestic and international customers with advanced, complete strip and sheet system solutions.',
|
||||
|
||||
@@ -23,6 +23,7 @@ export default {
|
||||
successCases: '成功案例',
|
||||
latestNews: '最新动态',
|
||||
viewAll: '查看全部',
|
||||
commissioning: '投运/交付',
|
||||
statsHeadEn: 'BY THE NUMBERS',
|
||||
statsHeroTitle: '以板材处理技术为核心,向国内外用户提供先进完善的板材系统解决方案。',
|
||||
stats: {
|
||||
|
||||
162
client/src/utils/caseStudyDisplay.ts
Normal file
162
client/src/utils/caseStudyDisplay.ts
Normal file
@@ -0,0 +1,162 @@
|
||||
/**
|
||||
* 成功案例展示用:当客户名为「典型案例」等占位时,从项目名称推断真实客户;
|
||||
* 若无法推断,使用中性文案「行业典型应用」。
|
||||
*/
|
||||
|
||||
export interface CaseStudyLike {
|
||||
caseStudyId?: number
|
||||
categoryId?: number
|
||||
clientNameZh?: string | null
|
||||
clientNameEn?: string | null
|
||||
projectNameZh?: string | null
|
||||
projectNameEn?: string | null
|
||||
descriptionZh?: string | null
|
||||
descriptionEn?: string | null
|
||||
scopeZh?: string | null
|
||||
scopeEn?: string | null
|
||||
categoryNameZh?: string | null
|
||||
categoryNameEn?: string | null
|
||||
}
|
||||
|
||||
const GENERIC_CLIENT_ZH = ['典型案例', '典型用户', '工业应用']
|
||||
|
||||
const GENERIC_CLIENT_EN = ['reference', 'typical case', 'industrial application']
|
||||
|
||||
export function isGenericClientLabel(clientZh?: string | null, clientEn?: string | null): boolean {
|
||||
const zh = (clientZh || '').trim()
|
||||
const en = (clientEn || '').trim().toLowerCase()
|
||||
if (zh && GENERIC_CLIENT_ZH.includes(zh)) return true
|
||||
if (en && GENERIC_CLIENT_EN.includes(en)) return true
|
||||
return false
|
||||
}
|
||||
|
||||
/** 按项目名称匹配企业/基地(先写中文与常见英文缩写,未命中则返回 null) */
|
||||
function inferClientFromProject(projectZh: string, projectEn: string): { zh: string; en: string } | null {
|
||||
const zh = projectZh || ''
|
||||
const en = projectEn || ''
|
||||
const pair = (z: string, e: string) => ({ zh: z, en: e })
|
||||
|
||||
const rules: Array<{ test: () => boolean; out: { zh: string; en: string } }> = [
|
||||
{ test: () => /武钢|WISCO|Wuhan Steel|Wuhan Iron/i.test(zh) || /WISCO|Wuhan Steel/i.test(en), out: pair('中国宝武(武钢)', 'China Baowu (WISCO)') },
|
||||
{ test: () => /梅钢|梅山/.test(zh) || /Meishan/i.test(en), out: pair('上海梅山钢铁', 'Meishan Iron & Steel') },
|
||||
{ test: () => /宝钢|宝武/.test(zh) || /Baosteel|Baoshan Iron/i.test(en), out: pair('宝山钢铁股份有限公司', 'Baoshan Iron & Steel Co., Ltd.') },
|
||||
{ test: () => /首钢/.test(zh) || /Shougang/i.test(en), out: pair('首钢集团', 'Shougang Group') },
|
||||
{ test: () => /迁安/.test(zh) || /Qian'an/i.test(en), out: pair('迁安钢铁企业', "Qian'an steel producer") },
|
||||
{ test: () => /德盛/.test(zh) || /Desheng/i.test(en), out: pair('福建德盛镍业', 'Fujian Desheng') },
|
||||
{ test: () => /金轮/.test(zh) || /Jinlun/i.test(en), out: pair('金轮针布', 'Jinlun') },
|
||||
{ test: () => /河北兆建|兆建/.test(zh) || /Zhaojian/i.test(en), out: pair('河北兆建', 'Hebei Zhaojian') },
|
||||
{ test: () => /印尼|印度尼西亚/.test(zh) || /Indonesia/i.test(en), out: pair('印尼钢铁企业', 'Indonesia steel producer') },
|
||||
{ test: () => /台湾/.test(zh) || /Taiwan/i.test(en), out: pair('台湾客户', 'Taiwan customer') },
|
||||
{ test: () => /成都|钛盟/.test(zh) || /Chengdu Taimum/i.test(en), out: pair('成都钛盟新材料', 'Chengdu Taimum New Materials') },
|
||||
{ test: () => /航隆/.test(zh) || /Hanglong/i.test(en), out: pair('航隆材料', 'Hanglong Materials') },
|
||||
{ test: () => /神州通|管业/.test(zh) || /Shenzhou Tong/i.test(en), out: pair('神州通管业', 'Shenzhou Tong Guanye') },
|
||||
{ test: () => /科仁普/.test(zh) || /Kerengpu/i.test(en), out: pair('科仁普重工', 'Kerengpu Heavy Industry') },
|
||||
{ test: () => /中新冶业|中新/.test(zh) || /Zhongxin Ye/i.test(en), out: pair('中新冶业', 'Zhongxin Ye Industry') },
|
||||
{ test: () => /海鸿/.test(zh) || /Haihong/i.test(en), out: pair('海鸿金属', 'Haihong Metal') },
|
||||
{ test: () => /大力神|达利/.test(zh) || /Dalishen/i.test(en), out: pair('大力神', 'Dalishen') },
|
||||
{ test: () => /宇联/.test(zh) || /Yulian/i.test(en), out: pair('宇联实业', 'Yulian Industrial') },
|
||||
{ test: () => /新疆八一|八钢|Bayi/.test(zh) || /Bayi Steel|Xinjiang Bayi/i.test(en), out: pair('新疆八一钢铁', 'Xinjiang Bayi Iron & Steel') },
|
||||
{ test: () => /福建鼎信|鼎信/.test(zh) || /Fujian Dingxin|Dingxin/i.test(en), out: pair('福建鼎信科技', 'Fujian Dingxin Technology') },
|
||||
{ test: () => /宁波宝新|宝新/.test(zh) || /Ningbo Baoxin/i.test(en), out: pair('宁波宝新不锈钢', 'Ningbo Baoxin Stainless Steel') },
|
||||
]
|
||||
|
||||
for (const r of rules) {
|
||||
if (r.test()) return r.out
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
const FALLBACK_ZH = '行业典型应用'
|
||||
const FALLBACK_EN = 'Typical industrial application'
|
||||
|
||||
export type CaseDisplayLocale = 'zh' | 'en'
|
||||
|
||||
export interface CaseStudyDisplayLabels {
|
||||
/** 主标题:客户或推断客户 */
|
||||
headline: string
|
||||
/** 副标题:项目名称 */
|
||||
subhead: string
|
||||
/** 摘要:简介 + 范围等(列表/旧逻辑用) */
|
||||
summary: string
|
||||
categoryLabel: string
|
||||
/** 是否由项目名推断出客户(占位客户已替换) */
|
||||
inferred: boolean
|
||||
/** 卡片第三行:范围或去元数据后的简述(可为空) */
|
||||
metaSummary: string
|
||||
}
|
||||
|
||||
export function extractCaseCommissioningValue(
|
||||
cs: CaseStudyLike,
|
||||
loc: CaseDisplayLocale,
|
||||
): string | null {
|
||||
const zhD = (cs.descriptionZh || '').trim()
|
||||
const enD = (cs.descriptionEn || '').trim()
|
||||
|
||||
if (loc === 'zh') {
|
||||
const t = zhD
|
||||
let m = t.match(/投运\s*([\d.]+)/)
|
||||
if (m) return m[1]
|
||||
m = t.match(/预计\s*([\d.]+)/)
|
||||
if (m) return `${m[1]}(预计)`
|
||||
m = t.match(/(?:投运|预计)([\d.]+)/)
|
||||
if (m) return m[1]
|
||||
return null
|
||||
}
|
||||
|
||||
const t = enD || zhD
|
||||
let m = t.match(/est\.\s*([\d.]+)/i)
|
||||
if (m) return `${m[1]} (est.)`
|
||||
m = t.match(/(?:commissioned|in service)\s*[:\s]*([\d.]+)/i)
|
||||
if (m) return m[1]
|
||||
m = t.match(/投运\s*([\d.]+)/)
|
||||
if (m) return m[1]
|
||||
return null
|
||||
}
|
||||
|
||||
function buildMetaSummary(cs: CaseStudyLike, loc: CaseDisplayLocale): string {
|
||||
const scope = (loc === 'zh' ? cs.scopeZh : cs.scopeEn)?.trim() || ''
|
||||
if (scope) return scope.length > 140 ? `${scope.slice(0, 140)}…` : scope
|
||||
|
||||
const desc = (loc === 'zh' ? cs.descriptionZh : cs.descriptionEn || cs.descriptionZh) || ''
|
||||
const cleaned = desc
|
||||
.replace(/数量\s*\d+\s*[;;]?\s*/g, '')
|
||||
.replace(/投运[^;;]*/g, '')
|
||||
.replace(/预计[^;;]*/g, '')
|
||||
.replace(/^[;;\s]+|[;;\s]+$/g, '')
|
||||
.trim()
|
||||
if (!cleaned) return ''
|
||||
return cleaned.length > 120 ? `${cleaned.slice(0, 120)}…` : cleaned
|
||||
}
|
||||
|
||||
export function getCaseStudyDisplayLabels(cs: CaseStudyLike, loc: CaseDisplayLocale): CaseStudyDisplayLabels {
|
||||
const projectZh = (cs.projectNameZh || '').trim()
|
||||
const projectEn = (cs.projectNameEn || '').trim()
|
||||
let clientZh = (cs.clientNameZh || '').trim()
|
||||
let clientEn = (cs.clientNameEn || '').trim()
|
||||
let inferred = false
|
||||
|
||||
if (isGenericClientLabel(clientZh, clientEn)) {
|
||||
const hit = inferClientFromProject(projectZh, projectEn)
|
||||
if (hit) {
|
||||
clientZh = hit.zh
|
||||
clientEn = hit.en
|
||||
inferred = true
|
||||
} else {
|
||||
clientZh = FALLBACK_ZH
|
||||
clientEn = FALLBACK_EN
|
||||
inferred = false
|
||||
}
|
||||
}
|
||||
|
||||
const headline = loc === 'zh' ? (clientZh || clientEn || FALLBACK_ZH) : (clientEn || clientZh || FALLBACK_EN)
|
||||
const subhead = loc === 'zh' ? (projectZh || projectEn) : (projectEn || projectZh)
|
||||
const parts =
|
||||
loc === 'zh'
|
||||
? [cs.descriptionZh, cs.scopeZh].map((s) => (s || '').trim()).filter(Boolean)
|
||||
: [cs.descriptionEn, cs.scopeEn].map((s) => (s || '').trim()).filter(Boolean)
|
||||
const summary = parts.join(' · ')
|
||||
const categoryLabel =
|
||||
loc === 'zh' ? (cs.categoryNameZh || '').trim() : (cs.categoryNameEn || '').trim()
|
||||
|
||||
return { headline, subhead, summary, categoryLabel, inferred, metaSummary: buildMetaSummary(cs, loc) }
|
||||
}
|
||||
@@ -3,20 +3,20 @@
|
||||
<section class="page-banner">
|
||||
<div class="page-banner-overlay"></div>
|
||||
<div class="container page-banner-content">
|
||||
<h1>{{ locale === 'zh' ? data?.clientNameZh : data?.clientNameEn }}</h1>
|
||||
<h1>{{ detailHeadline }}</h1>
|
||||
</div>
|
||||
</section>
|
||||
<section class="section">
|
||||
<div class="container">
|
||||
<div class="detail-content" v-if="data">
|
||||
<div class="detail-meta">
|
||||
<div class="meta-item" v-if="data.projectNameZh">
|
||||
<div class="meta-item" v-if="data.projectNameZh || data.projectNameEn">
|
||||
<span class="meta-label">{{ t('cases.projectName') }}</span>
|
||||
<span>{{ locale === 'zh' ? data.projectNameZh : data.projectNameEn }}</span>
|
||||
</div>
|
||||
<div class="meta-item" v-if="data.locationZh">
|
||||
<div class="meta-item" v-if="data.location">
|
||||
<span class="meta-label">{{ t('cases.location') }}</span>
|
||||
<span>{{ locale === 'zh' ? data.locationZh : data.locationEn }}</span>
|
||||
<span>{{ data.location }}</span>
|
||||
</div>
|
||||
<div class="meta-item" v-if="data.scopeZh">
|
||||
<span class="meta-label">{{ t('cases.scope') }}</span>
|
||||
@@ -33,15 +33,21 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { ref, onMounted, computed } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { portalApi } from '@/api'
|
||||
import { getCaseStudyDisplayLabels, type CaseStudyLike } from '@/utils/caseStudyDisplay'
|
||||
|
||||
const route = useRoute()
|
||||
const { t, locale } = useI18n()
|
||||
const data = ref<any>(null)
|
||||
|
||||
const detailHeadline = computed(() => {
|
||||
if (!data.value) return ''
|
||||
return getCaseStudyDisplayLabels(data.value as CaseStudyLike, locale.value === 'en' ? 'en' : 'zh').headline
|
||||
})
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
const res = await portalApi.getCaseById(Number(route.params.id))
|
||||
|
||||
@@ -28,11 +28,31 @@
|
||||
:to="`/cases/${cs.caseStudyId}`"
|
||||
class="case-card card"
|
||||
>
|
||||
<div class="case-img" v-if="cs.coverImage" :style="{ backgroundImage: `url(${cs.coverImage})` }"></div>
|
||||
<div
|
||||
class="case-img"
|
||||
v-if="cs.coverImage"
|
||||
:style="{ backgroundImage: `url(${uploadPublicUrl(cs.coverImage)})` }"
|
||||
></div>
|
||||
<div v-else class="case-img case-img--placeholder" aria-hidden="true">
|
||||
<div class="case-img__industrial">
|
||||
<div class="case-img__mesh" />
|
||||
<div class="case-img__scan" />
|
||||
<div class="case-img__rim" />
|
||||
<p class="case-img__watermark">{{ caseWatermarkTitle(cs) }}</p>
|
||||
<div class="case-img__hud">
|
||||
<span class="case-img__hud-mark">{{ caseClientMonogram(cs) }}</span>
|
||||
<span v-if="caseCardLabel(cs).categoryLabel" class="case-img__hud-meta">{{
|
||||
caseCardLabel(cs).categoryLabel
|
||||
}}</span>
|
||||
</div>
|
||||
<div class="case-img__baseline" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="case-info">
|
||||
<h3>{{ locale === 'zh' ? cs.clientNameZh : cs.clientNameEn }}</h3>
|
||||
<p class="case-project">{{ locale === 'zh' ? cs.projectNameZh : cs.projectNameEn }}</p>
|
||||
<p class="case-desc">{{ locale === 'zh' ? cs.descriptionZh : cs.descriptionEn }}</p>
|
||||
<h3>{{ caseCardLabel(cs).headline }}</h3>
|
||||
<p v-if="caseCardLabel(cs).subhead" class="case-project">{{ caseCardLabel(cs).subhead }}</p>
|
||||
<p class="case-desc">{{ caseCardDesc(cs) }}</p>
|
||||
<span v-if="caseCardLabel(cs).categoryLabel" class="case-cat">{{ caseCardLabel(cs).categoryLabel }}</span>
|
||||
</div>
|
||||
</router-link>
|
||||
</div>
|
||||
@@ -46,26 +66,67 @@
|
||||
import { ref, watch, onMounted } from 'vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { portalApi } from '@/api'
|
||||
import { uploadPublicUrl } from '@/utils/uploadUrl'
|
||||
import { getCaseStudyDisplayLabels, type CaseStudyLike } from '@/utils/caseStudyDisplay'
|
||||
|
||||
const { t, locale } = useI18n()
|
||||
const categories = ref<any[]>([])
|
||||
const caseStudies = ref<any[]>([])
|
||||
const selectedCategory = ref<number | null>(null)
|
||||
|
||||
function caseCardLabel(cs: CaseStudyLike) {
|
||||
return getCaseStudyDisplayLabels(cs, locale.value === 'en' ? 'en' : 'zh')
|
||||
}
|
||||
|
||||
function caseCardDesc(cs: CaseStudyLike) {
|
||||
const label = caseCardLabel(cs)
|
||||
if (label.metaSummary) return label.metaSummary
|
||||
if (label.summary) return label.summary
|
||||
const raw = locale.value === 'zh' ? cs.descriptionZh : cs.descriptionEn
|
||||
return (raw || '').trim()
|
||||
}
|
||||
|
||||
/** 无封面时背景水印主标题(与卡片标题一致) */
|
||||
function caseWatermarkTitle(cs: CaseStudyLike) {
|
||||
const label = caseCardLabel(cs)
|
||||
return (label.headline || label.subhead || 'Success Case').trim()
|
||||
}
|
||||
|
||||
/** 角标区双字/首字母缩写,偏工业铭牌感 */
|
||||
function caseClientMonogram(cs: CaseStudyLike) {
|
||||
const label = caseCardLabel(cs)
|
||||
const name = (label.headline || label.subhead || '').trim()
|
||||
if (!name) return 'SC'
|
||||
if (/[\u3000-\u303f\u4e00-\u9fff\uff00-\uffef]/.test(name)) {
|
||||
const core = name.replace(/^[\s·.]+/, '')
|
||||
if (core.length >= 2) return core.slice(0, 2)
|
||||
return core.charAt(0) || '案'
|
||||
}
|
||||
const parts = name.split(/[\s/|,-]+/).filter(Boolean)
|
||||
if (parts.length >= 2) {
|
||||
return (parts[0].charAt(0) + parts[1].charAt(0)).toUpperCase()
|
||||
}
|
||||
return name.slice(0, 2).toUpperCase()
|
||||
}
|
||||
|
||||
async function loadCases() {
|
||||
try {
|
||||
const params: any = {}
|
||||
if (selectedCategory.value) params.categoryId = selectedCategory.value
|
||||
const res = await portalApi.getCases(params)
|
||||
caseStudies.value = res.data || []
|
||||
} catch (e) { /* ignore */ }
|
||||
} catch (e) {
|
||||
console.error('案例列表加载失败', e)
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
const cRes = await portalApi.getCaseCategories()
|
||||
categories.value = cRes.data || []
|
||||
} catch (e) { /* ignore */ }
|
||||
} catch (e) {
|
||||
console.error('案例分类加载失败', e)
|
||||
}
|
||||
loadCases()
|
||||
})
|
||||
|
||||
@@ -81,8 +142,164 @@ watch(selectedCategory, loadCases)
|
||||
|
||||
.cases-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 24px; @media (max-width: @screen-md) { grid-template-columns: 1fr; } }
|
||||
.case-card { text-decoration: none; overflow: hidden; }
|
||||
.case-img { height: 220px; background-size: cover; background-position: center; background-color: @gray-200; }
|
||||
.case-info { padding: 20px; h3 { font-size: 20px; color: @primary; margin-bottom: 8px; } }
|
||||
.case-project { font-size: 16px; color: @gray-700; font-weight: 500; margin-bottom: 8px; }
|
||||
.case-desc { color: @gray-600; font-size: 14px; line-height: 1.6; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
|
||||
.case-img { height: 200px; background-size: cover; background-position: center; background-color: @gray-200; }
|
||||
.case-img--placeholder {
|
||||
position: relative;
|
||||
border-bottom: 1px solid fade(@primary, 12%);
|
||||
background: @primary-dark;
|
||||
}
|
||||
|
||||
.case-img__industrial {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
min-height: 200px;
|
||||
overflow: hidden;
|
||||
background:
|
||||
linear-gradient(155deg, @primary-dark 0%, @primary 42%, @primary-light 78%, darken(@primary-light, 6%) 100%);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.case-img__mesh {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
opacity: 0.22;
|
||||
background-image:
|
||||
repeating-linear-gradient(
|
||||
0deg,
|
||||
transparent,
|
||||
transparent 11px,
|
||||
rgba(255, 255, 255, 0.07) 11px,
|
||||
rgba(255, 255, 255, 0.07) 12px
|
||||
),
|
||||
repeating-linear-gradient(
|
||||
90deg,
|
||||
transparent,
|
||||
transparent 11px,
|
||||
rgba(255, 255, 255, 0.05) 11px,
|
||||
rgba(255, 255, 255, 0.05) 12px
|
||||
);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.case-img__scan {
|
||||
position: absolute;
|
||||
inset: -40% -20%;
|
||||
opacity: 0.14;
|
||||
transform: rotate(-18deg);
|
||||
background: repeating-linear-gradient(
|
||||
0deg,
|
||||
transparent,
|
||||
transparent 18px,
|
||||
rgba(255, 255, 255, 0.09) 18px,
|
||||
rgba(255, 255, 255, 0.09) 19px
|
||||
);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.case-img__rim {
|
||||
position: absolute;
|
||||
top: -30%;
|
||||
right: -18%;
|
||||
width: 68%;
|
||||
height: 95%;
|
||||
border-radius: 50%;
|
||||
border: 1px solid rgba(255, 255, 255, 0.12);
|
||||
box-shadow:
|
||||
inset 0 0 0 1px rgba(0, 0, 0, 0.12),
|
||||
0 0 40px rgba(0, 0, 0, 0.25);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.case-img__watermark {
|
||||
position: absolute;
|
||||
left: 16px;
|
||||
right: 52px;
|
||||
top: 14px;
|
||||
bottom: 52px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 17px;
|
||||
font-weight: 700;
|
||||
line-height: 1.28;
|
||||
letter-spacing: 0.03em;
|
||||
text-align: left;
|
||||
color: rgba(255, 255, 255, 0.26);
|
||||
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 4;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
word-break: break-word;
|
||||
font-family: @font-family;
|
||||
}
|
||||
|
||||
.case-img__hud {
|
||||
position: absolute;
|
||||
left: 14px;
|
||||
bottom: 14px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
max-width: calc(100% - 24px);
|
||||
}
|
||||
|
||||
.case-img__hud-mark {
|
||||
flex-shrink: 0;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 13px;
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.02em;
|
||||
color: rgba(255, 255, 255, 0.95);
|
||||
font-family: @font-family-en, @font-family-zh, sans-serif;
|
||||
background: rgba(0, 0, 0, 0.22);
|
||||
border: 1px solid rgba(255, 255, 255, 0.35);
|
||||
border-radius: 4px;
|
||||
box-shadow:
|
||||
0 2px 8px rgba(0, 0, 0, 0.35),
|
||||
inset 0 1px 0 rgba(255, 255, 255, 0.12);
|
||||
}
|
||||
|
||||
.case-img__hud-meta {
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
line-height: 1.35;
|
||||
letter-spacing: 0.14em;
|
||||
text-transform: uppercase;
|
||||
color: rgba(255, 255, 255, 0.78);
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.case-img__baseline {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: 3px;
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
fade(@accent, 85%) 0%,
|
||||
rgba(255, 255, 255, 0.45) 50%,
|
||||
fade(@primary-light, 90%) 100%
|
||||
);
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
.case-card:hover .case-img__industrial {
|
||||
filter: brightness(1.06);
|
||||
}
|
||||
|
||||
.case-card:hover .case-img__watermark {
|
||||
color: rgba(255, 255, 255, 0.32);
|
||||
}
|
||||
.case-info { padding: 20px; h3 { font-size: 19px; color: @gray-900; margin-bottom: 8px; line-height: 1.35; } }
|
||||
.case-project { font-size: 15px; color: @primary; font-weight: 600; margin-bottom: 8px; line-height: 1.45; }
|
||||
.case-desc { color: @gray-600; font-size: 14px; line-height: 1.65; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; margin: 0; }
|
||||
.case-cat { display: inline-block; margin-top: 12px; font-size: 12px; font-weight: 700; color: @gray-500; letter-spacing: 0.04em; text-transform: uppercase; }
|
||||
</style>
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="cases-section section" style="background: @gray-50;">
|
||||
<section class="cases-section section section--cases-industrial">
|
||||
<div class="container">
|
||||
<header class="home-section-head">
|
||||
<p class="home-section-head__en">SUCCESS CASES</p>
|
||||
@@ -129,19 +129,45 @@
|
||||
</header>
|
||||
<el-carousel
|
||||
v-if="featuredCases.length"
|
||||
class="home-carousel home-carousel--cases"
|
||||
:interval="7000"
|
||||
height="280px"
|
||||
:key="'home-cs-' + carouselChunkSize"
|
||||
class="home-triple-carousel home-case-carousel"
|
||||
:interval="6500"
|
||||
:height="caseCarouselHeight"
|
||||
indicator-position="outside"
|
||||
arrow="hover"
|
||||
>
|
||||
<el-carousel-item v-for="cs in featuredCases" :key="cs.caseStudyId">
|
||||
<div class="home-slide-card home-slide-card--case card">
|
||||
<div class="home-slide-card__body">
|
||||
<h3>{{ locale === 'zh' ? cs.clientNameZh : cs.clientNameEn }}</h3>
|
||||
<p>{{ locale === 'zh' ? cs.descriptionZh : cs.descriptionEn }}</p>
|
||||
<router-link :to="`/cases/${cs.caseStudyId}`" class="case-link">{{ t('common.detail') }} →</router-link>
|
||||
</div>
|
||||
<el-carousel-item v-for="(group, slideIndex) in caseStudySlides" :key="'cs-' + slideIndex">
|
||||
<div class="home-case-row">
|
||||
<router-link
|
||||
v-for="item in group"
|
||||
:key="item.cs.caseStudyId"
|
||||
:to="`/cases/${item.cs.caseStudyId}`"
|
||||
class="home-case-mini-card"
|
||||
>
|
||||
<div class="home-case-mini-card__watermark" aria-hidden="true">
|
||||
<el-icon class="home-case-mini-card__watermark-icon" :size="caseWatermarkIconSize">
|
||||
<component :is="item.accentIcon" />
|
||||
</el-icon>
|
||||
</div>
|
||||
<div class="home-case-mini-card__shine" aria-hidden="true" />
|
||||
<div class="home-case-mini-card__inner">
|
||||
<span v-if="item.label.categoryLabel" class="home-case-mini-card__cat">{{
|
||||
item.label.categoryLabel
|
||||
}}</span>
|
||||
<h3 class="home-case-mini-card__client">{{ item.label.headline }}</h3>
|
||||
<p class="home-case-mini-card__project">{{ item.label.subhead }}</p>
|
||||
<div v-if="item.commissioningValue" class="home-case-mini-card__commissioning">
|
||||
<el-icon class="home-case-mini-card__clock" :size="15"><Clock /></el-icon>
|
||||
<span class="home-case-mini-card__commissioning-text">
|
||||
<span class="home-case-mini-card__commissioning-label">{{ t('home.commissioning') }}</span>
|
||||
<span class="home-case-mini-card__commissioning-sep">·</span>
|
||||
<span class="home-case-mini-card__commissioning-val">{{ item.commissioningValue }}</span>
|
||||
</span>
|
||||
</div>
|
||||
<p v-if="item.label.metaSummary" class="home-case-mini-card__meta">{{ item.label.metaSummary }}</p>
|
||||
<span class="home-case-mini-card__link">{{ t('common.detail') }} →</span>
|
||||
</div>
|
||||
</router-link>
|
||||
</div>
|
||||
</el-carousel-item>
|
||||
</el-carousel>
|
||||
@@ -210,11 +236,16 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, onMounted, onUnmounted } from 'vue'
|
||||
import { ref, computed, onMounted, onUnmounted, markRaw } from 'vue'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { portalApi } from '@/api'
|
||||
import { Box } from '@element-plus/icons-vue'
|
||||
import { Box, OfficeBuilding, Lightning, WindPower, Drizzling, Clock } from '@element-plus/icons-vue'
|
||||
import { uploadPublicUrl } from '@/utils/uploadUrl'
|
||||
import {
|
||||
getCaseStudyDisplayLabels,
|
||||
extractCaseCommissioningValue,
|
||||
type CaseStudyLike,
|
||||
} from '@/utils/caseStudyDisplay'
|
||||
import statsSectionBgUrl from '@base/media/image6.jpeg'
|
||||
|
||||
const { t, locale } = useI18n()
|
||||
@@ -240,8 +271,39 @@ function chunkItems<T>(items: T[], size: number): T[][] {
|
||||
const productLineSlides = computed(() => chunkItems(featuredProductLines.value, carouselChunkSize.value))
|
||||
const newsSlides = computed(() => chunkItems(carouselNews.value, carouselChunkSize.value))
|
||||
|
||||
function resolveCaseAccentIcon(categoryId?: number) {
|
||||
switch (categoryId) {
|
||||
case 6:
|
||||
return markRaw(Lightning)
|
||||
case 7:
|
||||
return markRaw(WindPower)
|
||||
case 8:
|
||||
return markRaw(Drizzling)
|
||||
case 9:
|
||||
return markRaw(OfficeBuilding)
|
||||
default:
|
||||
return markRaw(OfficeBuilding)
|
||||
}
|
||||
}
|
||||
|
||||
const featuredCaseItems = computed(() => {
|
||||
const loc = locale.value === 'en' ? 'en' : 'zh'
|
||||
return featuredCases.value.map((cs: CaseStudyLike) => ({
|
||||
cs,
|
||||
label: getCaseStudyDisplayLabels(cs, loc),
|
||||
commissioningValue: extractCaseCommissioningValue(cs, loc),
|
||||
accentIcon: resolveCaseAccentIcon(cs.categoryId),
|
||||
}))
|
||||
})
|
||||
|
||||
const caseStudySlides = computed(() => chunkItems(featuredCaseItems.value, carouselChunkSize.value))
|
||||
|
||||
const tripleCarouselHeight = computed(() => (carouselChunkSize.value === 1 ? '440px' : '510px'))
|
||||
|
||||
const caseCarouselHeight = computed(() => (carouselChunkSize.value === 1 ? '340px' : '292px'))
|
||||
|
||||
const caseWatermarkIconSize = computed(() => (carouselChunkSize.value === 1 ? 132 : 108))
|
||||
|
||||
function syncCarouselChunkSize() {
|
||||
carouselChunkSize.value = typeof window !== 'undefined' && window.innerWidth < 768 ? 1 : 3
|
||||
}
|
||||
@@ -300,16 +362,24 @@ onMounted(async () => {
|
||||
}
|
||||
featuredProductLines.value = lines
|
||||
|
||||
let cases = csRes.data || []
|
||||
const homeCasesLimit = 12
|
||||
let cases = (csRes.data || []).slice(0, homeCasesLimit)
|
||||
if (!cases.length) {
|
||||
try {
|
||||
const fallbackCases = await portalApi.getCases({})
|
||||
cases = (fallbackCases.data || []).slice(0, 12)
|
||||
cases = (fallbackCases.data || []).slice(0, homeCasesLimit)
|
||||
} catch (e2) {
|
||||
console.error('首页成功案例备选列表失败', e2)
|
||||
}
|
||||
} else {
|
||||
cases = cases.slice(0, 12)
|
||||
} else if (cases.length < homeCasesLimit) {
|
||||
try {
|
||||
const allRes = await portalApi.getCases({})
|
||||
const seen = new Set(cases.map((c: any) => c.caseStudyId))
|
||||
const more = (allRes.data || []).filter((c: any) => !seen.has(c.caseStudyId))
|
||||
cases = [...cases, ...more].slice(0, homeCasesLimit)
|
||||
} catch (e2) {
|
||||
console.error('首页成功案例补足非精选失败', e2)
|
||||
}
|
||||
}
|
||||
featuredCases.value = cases
|
||||
|
||||
@@ -600,30 +670,226 @@ onUnmounted(() => {
|
||||
padding-top: 4px;
|
||||
}
|
||||
|
||||
.home-carousel {
|
||||
max-width: 920px;
|
||||
margin: 0 auto 8px;
|
||||
:deep(.el-carousel__arrow) {
|
||||
background: rgba(55, 65, 81, 0.45);
|
||||
&:hover {
|
||||
background: rgba(0, 51, 102, 0.65);
|
||||
}
|
||||
}
|
||||
:deep(.el-carousel__indicators--outside) {
|
||||
margin-top: 8px;
|
||||
}
|
||||
:deep(.el-carousel__indicator .el-carousel__button) {
|
||||
width: 24px;
|
||||
height: 3px;
|
||||
border-radius: 2px;
|
||||
background: @gray-300;
|
||||
opacity: 1;
|
||||
}
|
||||
:deep(.el-carousel__indicator.is-active .el-carousel__button) {
|
||||
width: 32px;
|
||||
background: @primary;
|
||||
.home-case-carousel {
|
||||
max-width: min(100%, 1180px);
|
||||
margin: 0 auto 4px;
|
||||
}
|
||||
|
||||
.home-case-row {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: 18px;
|
||||
height: 100%;
|
||||
min-height: 0;
|
||||
align-content: stretch;
|
||||
align-items: stretch;
|
||||
padding: 4px 8px 0;
|
||||
box-sizing: border-box;
|
||||
@media (max-width: @screen-md) {
|
||||
grid-template-columns: minmax(0, 1fr);
|
||||
max-width: 520px;
|
||||
margin: 0 auto;
|
||||
gap: 0;
|
||||
padding: 0 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.home-case-mini-card {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 0;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
background: @white;
|
||||
border-radius: 10px;
|
||||
border: 1px solid fade(@primary, 12%);
|
||||
box-shadow:
|
||||
0 3px 18px fade(@primary, 7%),
|
||||
0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
transition: @transition;
|
||||
box-sizing: border-box;
|
||||
isolation: isolate;
|
||||
&:hover {
|
||||
border-color: fade(@primary, 22%);
|
||||
box-shadow:
|
||||
0 8px 28px fade(@primary, 12%),
|
||||
0 1px 3px rgba(0, 0, 0, 0.06);
|
||||
.home-case-mini-card__client {
|
||||
color: @primary-dark;
|
||||
}
|
||||
.home-case-mini-card__link {
|
||||
color: @primary-dark;
|
||||
}
|
||||
.home-case-mini-card__watermark-icon {
|
||||
color: @primary;
|
||||
opacity: 0.12;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.home-case-mini-card__watermark {
|
||||
position: absolute;
|
||||
right: -8%;
|
||||
bottom: -12%;
|
||||
z-index: 0;
|
||||
pointer-events: none;
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
.home-case-mini-card__watermark-icon {
|
||||
color: @primary;
|
||||
opacity: 0.085;
|
||||
transition:
|
||||
opacity 0.2s ease,
|
||||
color 0.2s ease;
|
||||
}
|
||||
|
||||
.home-case-mini-card__shine {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
z-index: 0;
|
||||
pointer-events: none;
|
||||
background: linear-gradient(
|
||||
125deg,
|
||||
fade(@primary, 4%) 0%,
|
||||
transparent 42%,
|
||||
transparent 58%,
|
||||
fade(@primary, 3%) 100%
|
||||
);
|
||||
}
|
||||
|
||||
.home-case-mini-card__inner {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 0;
|
||||
flex: 1;
|
||||
padding: 16px 16px 14px;
|
||||
box-sizing: border-box;
|
||||
@media (max-width: @screen-md) {
|
||||
padding: 18px 18px 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.home-case-mini-card__cat {
|
||||
display: inline-block;
|
||||
align-self: flex-start;
|
||||
margin-bottom: 8px;
|
||||
padding: 3px 8px;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.08em;
|
||||
text-transform: uppercase;
|
||||
color: @primary;
|
||||
background: fade(@primary, 8%);
|
||||
border-radius: 4px;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.home-case-mini-card__client {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: @gray-900;
|
||||
margin: 0 0 6px;
|
||||
line-height: 1.35;
|
||||
letter-spacing: -0.02em;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
transition: color 0.2s ease;
|
||||
@media (max-width: @screen-md) {
|
||||
font-size: 17px;
|
||||
}
|
||||
}
|
||||
|
||||
.home-case-mini-card__project {
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: @primary;
|
||||
margin: 0 0 8px;
|
||||
line-height: 1.45;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.home-case-mini-card__commissioning {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 6px;
|
||||
margin-bottom: 8px;
|
||||
padding: 6px 8px;
|
||||
background: fade(@primary, 6%);
|
||||
border-radius: 4px;
|
||||
border-left: 2px solid @primary;
|
||||
}
|
||||
|
||||
.home-case-mini-card__clock {
|
||||
flex-shrink: 0;
|
||||
margin-top: 2px;
|
||||
color: @primary;
|
||||
}
|
||||
|
||||
.home-case-mini-card__commissioning-text {
|
||||
font-size: 12px;
|
||||
line-height: 1.45;
|
||||
color: @gray-700;
|
||||
}
|
||||
|
||||
.home-case-mini-card__commissioning-label {
|
||||
font-weight: 600;
|
||||
color: @gray-800;
|
||||
}
|
||||
|
||||
.home-case-mini-card__commissioning-sep {
|
||||
margin: 0 4px;
|
||||
color: @gray-400;
|
||||
}
|
||||
|
||||
.home-case-mini-card__commissioning-val {
|
||||
font-weight: 600;
|
||||
color: @primary-dark;
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
|
||||
.home-case-mini-card__meta {
|
||||
margin: 0 0 10px;
|
||||
font-size: 12px;
|
||||
color: @gray-500;
|
||||
line-height: 1.5;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.home-case-mini-card__link {
|
||||
margin-top: auto;
|
||||
padding-top: 4px;
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: @accent;
|
||||
transition: color 0.2s ease;
|
||||
}
|
||||
|
||||
.section--cases-industrial {
|
||||
background: linear-gradient(180deg, @gray-50 0%, @white 45%, @gray-50 100%);
|
||||
padding-top: 56px;
|
||||
padding-bottom: 64px;
|
||||
@media (max-width: @screen-md) {
|
||||
padding-top: 40px;
|
||||
padding-bottom: 48px;
|
||||
}
|
||||
}
|
||||
|
||||
.home-section-footer { margin-top: 28px; text-align: center; }
|
||||
|
||||
.home-slide-card {
|
||||
@@ -673,6 +939,7 @@ onUnmounted(() => {
|
||||
.home-slide-card--case .home-slide-card__body {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.case-link {
|
||||
margin-top: 14px;
|
||||
color: @accent;
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"root":["./src/main.ts","./src/api/index.ts","./src/locales/en.ts","./src/locales/index.ts","./src/locales/zh.ts","./src/router/index.ts","./src/stores/app.ts","./src/utils/request.ts","./src/utils/uploadurl.ts","./src/app.vue","./src/components/appfooter.vue","./src/components/appheader.vue","./src/components/culturecardicon.vue","./src/components/sectiontitle.vue","./src/components/admin/admincoverupload.vue","./src/layouts/adminlayout.vue","./src/layouts/frontlayout.vue","./src/views/aboutpage.vue","./src/views/casedetailpage.vue","./src/views/casespage.vue","./src/views/contactpage.vue","./src/views/equipmentdetailpage.vue","./src/views/homepage.vue","./src/views/newsdetailpage.vue","./src/views/newspage.vue","./src/views/productdetailpage.vue","./src/views/productspage.vue","./src/views/sparepartdetailpage.vue","./src/views/technologypage.vue","./src/views/admin/aboutpage.vue","./src/views/admin/bannerpage.vue","./src/views/admin/casepage.vue","./src/views/admin/companypage.vue","./src/views/admin/dashboardpage.vue","./src/views/admin/equipmentpage.vue","./src/views/admin/loginpage.vue","./src/views/admin/mediapage.vue","./src/views/admin/newspage.vue","./src/views/admin/productcategorypage.vue","./src/views/admin/productlinepage.vue","./src/views/admin/sparepartpage.vue","./src/views/admin/technologypage.vue","./src/views/admin/workshoppage.vue","./env.d.ts"],"version":"5.9.3"}
|
||||
{"root":["./src/main.ts","./src/api/index.ts","./src/config/portalsite.ts","./src/locales/en.ts","./src/locales/index.ts","./src/locales/zh.ts","./src/router/index.ts","./src/stores/app.ts","./src/utils/casestudydisplay.ts","./src/utils/request.ts","./src/utils/uploadurl.ts","./src/app.vue","./src/components/appfooter.vue","./src/components/appheader.vue","./src/components/culturecardicon.vue","./src/components/sectiontitle.vue","./src/components/admin/admincoverupload.vue","./src/layouts/adminlayout.vue","./src/layouts/frontlayout.vue","./src/views/aboutpage.vue","./src/views/casedetailpage.vue","./src/views/casespage.vue","./src/views/contactpage.vue","./src/views/equipmentdetailpage.vue","./src/views/homepage.vue","./src/views/newsdetailpage.vue","./src/views/newspage.vue","./src/views/productdetailpage.vue","./src/views/productspage.vue","./src/views/sparepartdetailpage.vue","./src/views/technologypage.vue","./src/views/admin/aboutpage.vue","./src/views/admin/bannerpage.vue","./src/views/admin/casepage.vue","./src/views/admin/companypage.vue","./src/views/admin/dashboardpage.vue","./src/views/admin/equipmentpage.vue","./src/views/admin/loginpage.vue","./src/views/admin/mediapage.vue","./src/views/admin/newspage.vue","./src/views/admin/productcategorypage.vue","./src/views/admin/productlinepage.vue","./src/views/admin/sparepartpage.vue","./src/views/admin/technologypage.vue","./src/views/admin/workshoppage.vue","./env.d.ts"],"version":"5.9.3"}
|
||||
248
database/sql/patch_post_treatment_ppt_content.sql
Normal file
248
database/sql/patch_post_treatment_ppt_content.sql
Normal file
@@ -0,0 +1,248 @@
|
||||
-- ======================================================================
|
||||
-- 后处理线 / 单体设备 PPT 素材入库补丁
|
||||
-- 依据业务部门提供的英文版技术幻灯整理,写入 f_single_equipment 与工程案例表。
|
||||
--
|
||||
-- 前置条件:
|
||||
-- 1) 已执行 migration_product_center.sql(f_single_equipment 含扩展字段)
|
||||
-- 2) 数据库名与主站一致(默认 wuhan_saga1,可按需修改 USE)
|
||||
--
|
||||
-- 执行:mysql -u root -p wuhan_saga1 < database/sql/patch_post_treatment_ppt_content.sql
|
||||
-- ======================================================================
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
USE wuhan_saga;
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 1) 单体设备:按 PPT 补全文案(cover_image 仍指向现有上传文件,新图请上传后自行 UPDATE)
|
||||
-- ---------------------------------------------------------------------
|
||||
|
||||
UPDATE `f_single_equipment` SET
|
||||
`description_zh` = '针对不同材料表面对各红外波段的吸收特性,红外干燥炉通过红外辐射对带钢表面漆膜进行快速、非接触加热;能量集中与局部高温带来维护成本挑战。宝信红外干燥炉针对设备变形、氧化及高维护成本等问题提升了稳定性。',
|
||||
`description_en` = 'Infrared drying furnaces rapidly heat coating films by infrared absorption on the strip surface; localized high temperatures raise maintenance cost. Baoxin infrared dryers improve equipment stability for deformation and oxidation issues.',
|
||||
`technical_highlights_zh` = '红外涂层干燥;较感应干燥节电约53%;适用于电镀锌等高端产品',
|
||||
`technical_highlights_en` = 'IR coating drying; ~53% power saving vs induction; suited to EG and premium grades',
|
||||
`excerpt_zh` = '红外辐射涂层干燥,节能与质量兼顾,配套高端涂镀产线。',
|
||||
`excerpt_en` = 'Infrared radiant coating drying balancing energy saving and surface quality.',
|
||||
`function_description_zh` = '业务介绍:基于材料对红外波段的吸收差异,实现漆膜快速挥发水分与固化;需解决炉体稳定性与运维成本问题。',
|
||||
`function_description_en` = 'Uses band-specific IR absorption for rapid non-contact drying; stability and OPEX are key design targets.',
|
||||
`product_advantages_zh` = '五方面优势:①使用性能——电镀锌等高端产品;②节能——较电磁感应干燥节电约53%;③竞争优势——国产化、周期短、以实测数据推广;④业务扩展——冶金高精尖装备方向;⑤打破国外垄断(资料延续)。',
|
||||
`product_advantages_en` = 'Performance for premium EG; ~53% energy saving vs induction; localized supply and data-driven promotion; sector expansion; import substitution.',
|
||||
`specifications_zh` = '技术对比摘要(热风/感应/红外):红外烘干原理为0.8–1.5μm波直达涂层;产品质量与清洁性优良;炉长约10m级(示意,200m/min工况);带钢温度相对较低,设备稳定性好。',
|
||||
`specifications_en` = 'IR drying uses 0.8–1.5 μm waves on the coating; strong quality and cleanliness; ~10 m furnace length class; lower strip temperature; good stability.',
|
||||
`content_zh` = '<section><h3>涂层干燥技术路线</h3><p>热风加热、感应加热、红外干燥炉(推荐用于高端涂镀品质与节能场景)。</p><h3>设备比对(节选)</h3><table border="1" cellpadding="6" cellspacing="0"><tr><th>项目</th><th>热风</th><th>感应加热</th><th>红外加热</th></tr><tr><td>烘干原理</td><td>送热空气挥发水分</td><td>线圈加热基材带热涂层</td><td>0.8–1.5μm 红外直达涂层</td></tr><tr><td>产品质量</td><td>一般</td><td>较好</td><td>很好</td></tr><tr><td>加热速度</td><td>慢</td><td>快</td><td>快</td></tr><tr><td>清洁性</td><td>一般</td><td>高</td><td>高</td></tr><tr><td>占地(约200m/min)</td><td>炉体常>20m</td><td>约9m</td><td>约10m</td></tr></table></section>',
|
||||
`content_en` = '<section><h3>Coating drying routes</h3><p>Hot air, induction, and infrared (IR) — IR highlighted for premium quality and energy saving.</p></section>',
|
||||
`applicable_lines_zh` = '冷轧涂层干燥、电镀锌及高端涂镀机组。',
|
||||
`applicable_lines_en` = 'Cold rolling coating drying, electro-galvanizing and premium coating lines.'
|
||||
WHERE `single_equipment_id` = 1;
|
||||
|
||||
UPDATE `f_single_equipment` SET
|
||||
`description_zh` = '用于硅钢冷轧轧前感应加热;典型配置含大功率柜体、管路仪表等。',
|
||||
`description_en` = 'Induction heating for silicon steel prior to cold rolling; includes high-power cabinets and auxiliary piping.',
|
||||
`technical_highlights_zh` = '5600kW 级(2×2800kW),30kHz;带钢进出口闭式温控;压缩空气气封与柜体防护',
|
||||
`technical_highlights_en` = 'Up to 5600 kW (2×2800 kW), 30 kHz; controlled strip inlet/outlet temps; compressed air sealing',
|
||||
`excerpt_zh` = '硅钢(最大硅约3.6%)轧前感应加热,高速大宽度规格。',
|
||||
`excerpt_en` = 'Preheat of silicon steel (~3.6% Si max) before rolling, high speed and width.',
|
||||
`specifications_zh` = '应用:硅钢冷轧铣削前感应加热。产品:硅钢(Si≤3.6%)。宽度1240mm;厚度2.6mm;加热段速度180m/min;参考规格2.6×1240mm@180m/min。入口温度5℃;出口100℃。感应功率5600kW(两套各2800kW);频率30000Hz;气封与柜体:压缩空气。',
|
||||
`specifications_en` = 'Application: silicon steel cold rolling pre-mill induction heat. Width 1240 mm; thickness 2.6 mm; section speed 180 m/min; inlet 5 °C, outlet 100 °C. Power 5600 kW (2×2800 kW); 30 kHz; compressed-air cabinet protection.',
|
||||
`function_description_zh` = '在轧制前将带钢快速加热至工艺温度,保证轧制组织与表面质量;与保护气与密封系统联锁。',
|
||||
`function_description_en` = 'Raises strip to process temperature before rolling with protective sealing and interlocks.'
|
||||
WHERE `single_equipment_id` = 2;
|
||||
|
||||
UPDATE `f_single_equipment` SET
|
||||
`description_zh` = '用于冷轧热镀锌线镀后冷却段。气雾冷却传热系数可达2000–10000 kcal/m²·h·℃,显著高于喷气冷却;新建线可缩短冷却段时间与长度,改造线可提产、节电、降低综合消耗。可通过水量调节冷却速度,终点温度可控,优于急冷淬火;冷速介于喷气冷却与淬火之间。',
|
||||
`description_en` = 'Post-galvanizing air-mist cooling: heat-transfer coefficient about 2000–10000 kcal/m²·h·°C, higher than jet cooling; shorter cooling section on new lines; higher output and lower energy on revamps; water flow adjusts cooling end point, between jet and quench.',
|
||||
`technical_highlights_zh` = '传热系数高;终点温度可控;立式镀后气雾与水平不锈钢气雾多布置方案',
|
||||
`technical_highlights_en` = 'High HTC; controllable end temperature; vertical post-Zn pot and horizontal stainless layouts',
|
||||
`excerpt_zh` = '镀后气雾冷却,高效换热,适合新建缩短冷却段与改造提产。',
|
||||
`excerpt_en` = 'Air-mist cooling after galvanizing for compact sections and revamp throughput.',
|
||||
`specifications_zh` = '典型工况对比:①立式镀后气雾冷却:安装位置——锌锅出口上游段;温降约500℃→200℃。②水平不锈钢气雾冷却:安装位置——冷却段末端(烘干前);温降约250℃→80℃以下。',
|
||||
`specifications_en` = 'Vertical post-galvanizing mist: 500→200 °C after zinc pot. Horizontal stainless mist: 250→<80 °C before dryer.',
|
||||
`function_description_zh` = '以可控雾化水气混合强化换热,替代或补充纯喷气/淬火方案。',
|
||||
`function_description_en` = 'Uses controlled air-mist mixture for intensified, controllable cooling.',
|
||||
`product_advantages_zh` = '较喷气冷却换热更强;较淬火温和可控;改造与新建均可量化收益。',
|
||||
`product_advantages_en` = 'Stronger than jet cooling; gentler and more controllable than quench; benefits for greenfield and revamp.',
|
||||
`content_zh` = '<section><h3>气雾冷却定位</h3><p>适用于冷轧热镀锌镀后冷却,强调换热系数与终点温控。</p></section>'
|
||||
WHERE `single_equipment_id` = 3;
|
||||
|
||||
UPDATE `f_single_equipment` SET
|
||||
`description_zh` = '涵盖不锈钢带氮氢保护气氛退火工艺参数;以及横向磁感应连续退火(冷轧)机组的磁轭框架与电气配套组成说明。',
|
||||
`description_en` = 'Stainless annealing in N₂+H₂ atmosphere plus transverse magnetic induction annealing components for cold rolling lines.',
|
||||
`technical_highlights_zh` = 'N₂+H₂ 气氛;横向磁极+屏蔽板均温;闭环温度控制',
|
||||
`technical_highlights_en` = 'N₂+H₂ atmosphere; magnetic pole + shield plate uniformity; closed-loop temperature control',
|
||||
`excerpt_zh` = '不锈钢保护气氛退火与横向磁感应加热成套技术说明。',
|
||||
`excerpt_en` = 'Stainless protective-gas annealing and transverse magnetic induction heating.',
|
||||
`specifications_zh` = '不锈钢退火(氮氢):应用——不锈钢退火;产品——不锈钢;宽度800–820mm;厚度0.25–0.3mm;加热段速度30m/min;温升段长度300mm(图示);炉内气氛N₂+H₂;温控——闭环;均温控制——磁极运动+屏蔽板技术。',
|
||||
`specifications_en` = 'Stainless annealing: width 800–820 mm; thickness 0.25–0.3 mm; heating speed 30 m/min; 300 mm heat-up length (per slide); N₂+H₂; closed-loop control; pole motion + shield plates for uniformity.',
|
||||
`function_description_zh` = '横向磁感应部分:加热线圈;磁极(固定/屏蔽/可动);马弗;磁极运动机构。电气与公辅:感应电源柜、槽路电容柜、磁极伺服控制柜、水系统。原理图含扫描测温、PLC、整流滤波、工控机、匹配变压器等。',
|
||||
`function_description_en` = 'Mechanical: heating coil, poles (fixed/shield/movable), muffle, pole drive. Electrical: induction supply, tank capacitor cabinet, pole servo cabinet, water system. Schematic: thermometry, PLC, rectifier/filter, IPC, matching transformer.',
|
||||
`product_advantages_zh` = '保护气氛下光亮退火;横向感应均匀温区设计;成套机电一体化交付能力。',
|
||||
`product_advantages_en` = 'Bright annealing under protective gas; transverse induction profiling; integrated EIC delivery.',
|
||||
`content_zh` = '<section><h3>横向磁感应框架</h3><ul><li>加热线圈 / 磁极(固定、屏蔽、可动)/ 马弗 / 磁极运动机构</li></ul><h3>电气与公辅</h3><ul><li>感应加热电源柜、槽路电容柜、磁极伺服控制柜、水系统</li></ul></section>'
|
||||
WHERE `single_equipment_id` = 4;
|
||||
|
||||
UPDATE `f_single_equipment` SET
|
||||
`description_zh` = '宝钢信品牌保护气回收装置,面向全氢及氮氢型罩式炉、连续退火炉等废气保护气回收与净化。定制化收集方式、成熟过滤净化与稳定控制,实现退火炉与回收装置工艺设备一体化。炉压稳定、回收策略优化,达到节能减排、降本增效。典型回收率>75%;全氢炉氢气回收装置回收期一般2–3年。',
|
||||
`description_en` = 'Protective gas recovery for full-hydrogen and N₂–H₂ hood and continuous annealing furnaces: collection, filtration, purification and control integrated with furnace pressure and recovery strategy; recovery rate typically >75%; payback often 2–3 years on hydrogen furnaces.',
|
||||
`technical_highlights_zh` = '回收率>75%;与退火炉联锁与压力协控;EP/EPC 可交付',
|
||||
`technical_highlights_en` = '>75% recovery; furnace interlock and pressure coordination; EP/EPC delivery',
|
||||
`excerpt_zh` = '罩式炉与连续退火炉保护气回收,节能降本,短回收期。',
|
||||
`excerpt_en` = 'Protective gas recovery for hood and CAL furnaces with short payback.',
|
||||
`function_description_zh` = '结合炉型与工艺气特点,提供收集、净化、压缩与再循环/再利用路径设计及自控。',
|
||||
`function_description_en` = 'Tailored collection, purification and recycle paths with automation for each furnace type.',
|
||||
`product_advantages_zh` = '显著降低保护气运行费用:装机容量×回收率(>75%)×气价;全氢炉案例回收期约2–3年。',
|
||||
`product_advantages_en` = 'OPEX reduction scales with capacity, >75% recovery rate and gas price; 2–3 year payback typical for hydrogen units.',
|
||||
`specifications_zh` = '经济性:保护气用量成本显著下降;适用于全氢、氮氢罩式炉与连续退火炉废气治理与资源化。',
|
||||
`specifications_en` = 'Strong OPEX reduction on make-up gas; suited to H₂ and N₂–H₂ hood and CAL off-gas.',
|
||||
`content_zh` = '<section><h3>方案要点</h3><p>匹配退火炉设备特性与用户工艺,一体化工艺设备 + 控制系统设计;掌握炉—回收系统联锁策略。</p></section>'
|
||||
WHERE `single_equipment_id` = 5;
|
||||
|
||||
UPDATE `f_single_equipment` SET
|
||||
`description_zh` = '冷轧热镀锌线镀后喷射冷却。采用专用 BLADE 喷嘴模块对带钢进行高效射流气冷,尤其适配锌铝镁(ZAM)镀层。应用场景:立式热镀锌镀后冷却、移动/固定气冷、后处理冷却等。',
|
||||
`description_en` = 'Post-galvanizing jet cooling with BLADE nozzle modules; strong for ZAM coatings; vertical CGL, mobile/fixed air cooling.',
|
||||
`technical_highlights_zh` = 'BLADE 喷嘴;兼容 GI/GA/GL/ZAM;600℃→100℃有效温区;带钢振动位移≤5mm;多变量优化控制(西门子平台示意)',
|
||||
`technical_highlights_en` = 'BLADE nozzles; GI/GA/GL/ZAM; effective 600→100 °C; strip vibration ≤5 mm; multivariable optimized cooling',
|
||||
`excerpt_zh` = '镀后喷射冷却,高效换热,适配锌铝镁及多种镀层。',
|
||||
`excerpt_en` = 'Post-galvanizing jet cooling for ZAM and major coating types.',
|
||||
`specifications_zh` = '技术性能:适用产品 GI、GA、GL、ZAM;有效冷却温区约600℃至100℃;可提供固定式与移动式布置;冷却速率较传统喷射设备提高一倍以上;带钢振动位移≤5mm;控制系统具备镀后冷却多变量优化模型(界面可集成西门子自控)。',
|
||||
`specifications_en` = 'Products GI/GA/GL/ZAM; 600–100 °C band; fixed/mobile configs; >2× cooling rate vs conventional jet; vibration ≤5 mm; MV optimization model for post-GI cooling.',
|
||||
`function_description_zh` = '镀后快速均匀冷却,抑制镀层与基板组织劣化,降低带钢瓢曲与抖动。',
|
||||
`function_description_en` = 'Fast, uniform post-coating cooling with low vibration and profile control.',
|
||||
`product_advantages_zh` = '较传统喷射冷却速率倍增级提升;ZAM 适应性突出;低振动指标有利于表面质量。',
|
||||
`product_advantages_en` = 'Much higher cooling rate than legacy jet systems; ZAM-friendly; low vibration for surface quality.',
|
||||
`content_zh` = '<section><h3>Jet cooling 设备组成</h3><p>现场喷射箱、喷嘴模块近距离结构、以及在线 HMI 监控曲线(可据此对接既有 PLC)。</p></section>'
|
||||
WHERE `single_equipment_id` = 6;
|
||||
|
||||
UPDATE `f_single_equipment` SET
|
||||
`description_zh` = '表面涂层处理后带钢表面为湿涂膜;电磁感应加热在基材中感应出涡流,热量集中于表面附近,完成涂膜加热干燥。适用于连续涂镀产线的高温区干燥。',
|
||||
`description_en` = 'After coating, the wet film is dried by induction: eddy currents concentrate heat near the surface for fast drying on continuous lines.',
|
||||
`technical_highlights_zh` = '非接触加热、清洁;工艺速度可达约200m/min;温控精确、自动化',
|
||||
`technical_highlights_en` = 'Non-contact, clean; ~200 m/min class; precise automatic temperature control',
|
||||
`excerpt_zh` = '涂层干燥感应加热,高速连续生产,非接触洁净加热。',
|
||||
`excerpt_en` = 'Induction drying for coating lines — non-contact, high speed.',
|
||||
`function_description_zh` = '核心组成(示意):排烟腔、感应器本体、双侧电源模块等;可按炉型定制风路与线圈布置。',
|
||||
`function_description_en` = 'Typical layout: exhaust chamber, inductor, dual power modules; customizable ducting and coils.',
|
||||
`product_advantages_zh` = '①热源与带钢可非接触,涂层表面洁净。②加热效率高、速度快,适合连续生产,工艺速度可达约200m/min。③温控容易,可按工艺曲线闭环。④辐射热与噪声相对可控。',
|
||||
`product_advantages_en` = 'Non-contact cleanness; high efficiency and speed (~200 m/min); easy closed-loop control; lower radiation and noise footprint.',
|
||||
`specifications_zh` = '工艺速度(特性描述):最高约200 m/min(以机组与涂层体系为准)。',
|
||||
`specifications_en` = 'Line speed class up to ~200 m/min depending on coating system.',
|
||||
`content_zh` = '<section><h3>设备标注</h3><ul><li>排烟腔 / 感应器 / 电源(双侧布置示例)</li></ul></section>'
|
||||
WHERE `single_equipment_id` = 7;
|
||||
|
||||
UPDATE `f_single_equipment` SET
|
||||
`description_zh` = '冷轧镀锡线高频纯净感应软熔处理。典型参数:镀锡板;宽度650–1000mm;厚度0.14–0.5mm;加热段180m/min;温升约240℃;温控闭环;电源功率1600kW/2300kW;频率150–200kHz。',
|
||||
`description_en` = 'Cold-rolled tinplate line, high-frequency pure induction reflow: tin coated strip 650–1000 mm, 0.14–0.5 mm, 180 m/min section speed, ~240 °C rise, closed-loop control, 1600/2300 kW supply, 150–200 kHz.',
|
||||
`technical_highlights_zh` = '150–200kHz;1600/2300kW;650–1000mm 宽度;闭环温控',
|
||||
`technical_highlights_en` = '150–200 kHz, 1600/2300 kW, 650–1000 mm width, closed-loop thermal control',
|
||||
`excerpt_zh` = '镀锡板软熔感应加热,宽带高速,高功率高频组合。',
|
||||
`excerpt_en` = 'Tinplate reflow induction: wide, fast, high-frequency high-power.',
|
||||
`specifications_zh` = '产品:镀锡板。名义宽度650–1000mm;名义厚度0.14–0.5mm;加热段速度180m/min;温升240℃;温控方式:闭环控制;电源功率1600kW或2300kW;电源频率150–200kHz。',
|
||||
`specifications_en` = 'Products: tinplate; width 650–1000 mm; thickness 0.14–0.5 mm; heating section 180 m/min; ΔT ~240 °C; closed loop; 1600 or 2300 kW; 150–200 kHz.',
|
||||
`function_description_zh` = '实现镀层软熔与表面质量控制,满足镀锡线工艺窗口。',
|
||||
`function_description_en` = 'Reflow timing and surface quality within tinning line process window.'
|
||||
WHERE `single_equipment_id` = 9;
|
||||
|
||||
UPDATE `f_single_equipment` SET
|
||||
`description_zh` = '冷轧热镀锌电磁驱渣装置:针对锌锅人工捞渣危险、劳动强度大及液面波动造成锌灰夹杂等缺陷,以行波磁场发生装置通过电磁力搅动推送液面锌渣,降低人工风险并改善镀层表面质量。',
|
||||
`description_en` = 'Electromagnetic dross removal for galvanizing: traveling magnetic field stirs and moves dross on zinc bath surface to cut manual risk and surface inclusions.',
|
||||
`technical_highlights_zh` = '定制化极对数、极距、安匝;有限元磁场与电磁推力分布计算; ROI 量化(人工+提速)',
|
||||
`technical_highlights_en` = 'Custom pole pairs, pitch, MMF; FEA of B-field and thrust; quantified ROI',
|
||||
`excerpt_zh` = '锌锅电磁驱渣,减少人工、稳定液面、提升镀锌表面质量。',
|
||||
`excerpt_en` = 'EM skimming for zinc pot — safety, bath stability, surface quality.',
|
||||
`function_description_zh` = '方案:按用户极对数、极距、激磁安匝定制结构;磁场强度与推力空间分布有限元校核;关注制造工艺保证系统长期稳定。',
|
||||
`function_description_en` = 'Engineered pole layout with FEA validation of field and thrust; manufacturing focus for long-term stability.',
|
||||
`product_advantages_zh` = '投资回报示例(PPT):①人工强度下降收益约30万元/年(0.5×15×4 人年成本示意)。②提速收益约900万元/年(产量与利润系数示意)。③合计年效益约930万元(口径依合同与现场条件核算)。',
|
||||
`product_advantages_en` = 'Illustrative ROI from labour reduction and line speed uplift (~9.3 M RMB/year aggregate per slide model; finalize per site).',
|
||||
`specifications_zh` = '适用:冷轧热镀锌线锌锅液面除渣自动化。',
|
||||
`specifications_en` = 'Application: automated dross control on HDG zinc pots.',
|
||||
`content_zh` = '<section><h3>三栏结构</h3><p>业务背景 / 技术方案(定制+FEA+制造) / ROI 测算思路。</p></section>'
|
||||
WHERE `single_equipment_id` = 10;
|
||||
|
||||
UPDATE `f_single_equipment` SET
|
||||
`description_zh` = '针对现有退火炉燃烧与自控系统改造,满足多燃料可切换,降低综合燃料成本。主要产品:不锈钢带 AISI 300 系与 400 系退火。',
|
||||
`description_en` = 'Revamp of annealing furnace combustion and automation for multi-fuel switching and lower fuel cost; products include AISI 300 and 400 stainless strip.',
|
||||
`technical_highlights_zh` = '单系统双燃料、自动切换;适用 LPG/NG/COG 等;炉温控制精度高、燃料成本可控',
|
||||
`technical_highlights_en` = 'Single-system dual fuel with auto switch; LPG/NG/COG; tight temperature control',
|
||||
`excerpt_zh` = '退火炉燃烧系统改造,多燃料灵活切换,控制与节能并重。',
|
||||
`excerpt_en` = 'Combustion retrofit with multi-fuel flexibility and precise control.',
|
||||
`function_description_zh` = '引言:综合改造退火炉本体与自控,实现多能源切换节省燃料费用;退火涵盖典型不锈钢牌号。',
|
||||
`function_description_en` = 'Integrated furnace and control retrofit for switchable fuels; stainless annealing grades as referenced.',
|
||||
`product_advantages_zh` = '投资者:灵活产品策略、投入产出比高、工期短资金占用低。生产组织者:多钢种退火成熟、产量与能耗可预期。设备管理者:无专利障碍、实时技术服务与备件保障。',
|
||||
`product_advantages_en` = 'Investors: flexible strategy and efficient capex. Production: multi-grade maturity and predictable energy. Maintenance: no patent lock-in, service and spares.',
|
||||
`specifications_zh` = '技术性能:①单系统双燃料 ②双燃料自动切换 ③燃料适应性广 ④炉温控制精度高 ⑤燃料成本可控(HMI 在线监控与联锁可一并交付)。',
|
||||
`specifications_en` = 'Dual fuel single system; automatic switching; wide fuel applicability; high temperature accuracy; controllable fuel cost with HMI supervision.',
|
||||
`content_zh` = '<section><h3>燃烧改造交付范围</h3><p>炉区燃烧、安全联锁、加热曲线与 HMI — 可与现有 DCS/PLC 集成。</p></section>'
|
||||
WHERE `single_equipment_id` = 11;
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 2) 案例分类:后处理线“典型业绩”总表(与感应/氢气/镀后冷却并列)
|
||||
-- ---------------------------------------------------------------------
|
||||
|
||||
INSERT IGNORE INTO `f_case_category` (`case_category_id`, `name_zh`, `name_en`, `sort_order`, `is_published`, `create_by`, `update_by`, `create_time`, `update_time`, `remark`, `del_flag`)
|
||||
VALUES (9, '后处理线典型案例', 'Post-treatment Line Reference Projects', 85, 1, 'ppt-import', 'ppt-import', NOW(), NOW(), '来自PPT典型业绩总表', 0);
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 3) 工程案例明细(INSERT … 忽略已存在 ID 时需手工删重;此处使用 50–91 号段)
|
||||
-- ---------------------------------------------------------------------
|
||||
|
||||
INSERT INTO `f_case_study` (`case_study_id`, `category_id`, `client_name_zh`, `client_name_en`, `project_name_zh`, `project_name_en`, `location`, `description_zh`, `description_en`, `scope_zh`, `scope_en`, `achievement_zh`, `achievement_en`, `is_overseas`, `is_featured`, `is_published`, `sort_order`, `create_by`, `update_by`, `create_time`, `update_time`, `remark`, `del_flag`) VALUES
|
||||
(50, 6, '典型案例', 'Reference', '德盛边部加热器', 'Desheng Edge Heater', '中国', '功率4600kW,频率300Hz', NULL, '热线中间坯边部加热', 'Edge heating of hot-rolled intermediate slabs', NULL, NULL, 0, 0, 1, 50, 'ppt-import', NULL, NOW(), NOW(), '感应加热业绩', 0),
|
||||
(51, 6, '典型案例', 'Reference', '横向磁感应本体设计与制造', 'Transverse Magnetic Inductor System', '中国', '1000kW,1kHz', NULL, '冷轧加热段', 'Cold rolling heating section', NULL, NULL, 0, 0, 1, 51, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(52, 6, '典型案例', 'Reference', '快冷热工业试验研究', 'Rapid Heating & Cooling Pilot', '中国', '1000kW,1kHz', NULL, '冷轧加热段', 'Cold rolling heating section', NULL, NULL, 0, 0, 1, 52, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(53, 6, '典型案例', 'Reference', '耐磨钢管感应改造与集成', 'Wear-resistant Steel Pipe Induction Retrofit', '中国', '1000kW,300Hz', NULL, '钢管内壁淬火', 'Inner wall quenching of steel pipes', NULL, NULL, 0, 0, 1, 53, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(54, 6, '典型案例', 'Reference', '金轮针布机感应淬火', 'Jinlun Needle Loom Induction Quench', '中国', '5kW,27MHz', NULL, '锯齿线淬火', 'Sawtooth line quenching', NULL, NULL, 0, 0, 1, 54, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(55, 6, '典型案例', 'Reference', '温轧卷材感应加热试验台', 'Warm Rolling Coil Induction Test Rig', '中国', '125kW,120kHz', NULL, '镁合金轧前加热', 'Preheat before Mg alloy rolling', NULL, NULL, 0, 0, 1, 55, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(56, 6, '典型案例', 'Reference', '边部加热实验平台', 'Edge Heating Lab Platform', '中国', '1000kW,400kHz', NULL, '热轧板坯边部加热', 'Edge heating of hot-rolled slabs', NULL, NULL, 0, 0, 1, 56, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(57, 6, '典型案例', 'Reference', '梅钢冷轧退火试验装置', 'Meishan Cold Rolling Annealing Lab', '中国', '200kW,1kHz', NULL, '冷轧退火试验', 'Cold rolling annealing experiment', NULL, NULL, 0, 0, 1, 57, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(58, 6, '典型案例', 'Reference', '武钢热镀锌涂层干燥感应装置(120kHz)', 'WISCO HDG Coating Drying Induction', '中国', '2000+2500kW,120kHz', NULL, '镀后涂层干燥', 'Post-galvanizing coating drying', NULL, NULL, 0, 0, 1, 58, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(59, 6, '典型案例', 'Reference', '武钢热镀锌涂层干燥感应装置(5kHz)', 'WISCO HDG Coating Drying Induction', '中国', '5000kW,5kHz', NULL, '热轧热处理线', 'Hot-rolled heat treatment line', NULL, NULL, 0, 0, 1, 59, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(60, 6, '典型案例', 'Reference', '首钢硅钢轧前感应加热', 'Shougang Silicon Pre-rolling Induction', '中国', '6000kW,15kHz', NULL, '硅钢轧前加热', 'Silicon steel pre-rolling heating', NULL, NULL, 0, 0, 1, 60, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(61, 6, '典型案例', 'Reference', '宝钢钢管轧后温度补偿', 'Baosteel Pipe Post-rolling Temperature Compensation', '中国', '5400kW,2kHz', NULL, '钢管温度补偿', 'Steel pipe temperature compensation', NULL, NULL, 0, 0, 1, 61, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(62, 6, '典型案例', 'Reference', '迁安环形炉1#/3#罩式内罩直加热', 'Qian''an Annular Furnace Inner Cover Heating', '中国', '500kW,100kHz', NULL, '内罩加热', 'Inner cover heating', NULL, NULL, 0, 0, 1, 62, 'ppt-import', NULL, NOW(), NOW(), NULL, 0)
|
||||
ON DUPLICATE KEY UPDATE `description_zh` = VALUES(`description_zh`), `scope_zh` = VALUES(`scope_zh`);
|
||||
|
||||
INSERT INTO `f_case_study` (`case_study_id`, `category_id`, `client_name_zh`, `client_name_en`, `project_name_zh`, `project_name_en`, `location`, `description_zh`, `description_en`, `scope_zh`, `scope_en`, `achievement_zh`, `achievement_en`, `is_overseas`, `is_featured`, `is_published`, `sort_order`, `create_by`, `update_by`, `create_time`, `update_time`, `remark`, `del_flag`) VALUES
|
||||
(63, 7, '宝山钢铁股份有限公司', 'Baoshan Iron & Steel Co., Ltd.', '宝钢硅钢 SACL6 退火炉氢气回收(EP)', 'Baosteel Silicon SACL6 H2 Recovery (EP)', '中国', '数量1;投运2023.2', NULL, 'EP', NULL, NULL, NULL, 0, 1, 1, 63, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(64, 7, '宝山钢铁股份有限公司', 'Baoshan Iron & Steel Co., Ltd.', '宝钢硅钢 SACL7 退火炉氢气回收(EP)', 'Baosteel Silicon SACL7 H2 Recovery (EP)', '中国', '数量1;预计2023.6', NULL, 'EP', NULL, NULL, NULL, 0, 0, 1, 64, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(65, 7, '新疆八一钢铁股份有限公司', 'Xinjiang Bayi Iron & Steel Co., Ltd.', '八钢冷轧含氢废气回收 EPC', 'Bayi Steel Cold Rolling H2 Off-gas Recovery EPC', '中国', '数量1;投运2022.12', NULL, 'EPC', NULL, NULL, NULL, 0, 0, 1, 65, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(66, 7, '宁波宝新不锈钢有限公司', 'Ningbo Baoxin Stainless Steel Co., Ltd.', '宁波宝新 1BA 氢气回收(EP)', 'Ningbo Baoxin 1BA H2 Recovery (EP)', '中国', '数量1;投运2014', NULL, 'EP', NULL, NULL, NULL, 0, 0, 1, 66, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(67, 7, '福建鼎信科技有限公司', 'Fujian Dingxin Technology Co., Ltd.', '鼎信罩式炉二期氢回收管线改造及软件(E+C)', 'Dingxin Hood Furnace Phase II H2 Recovery (E+C)', '中国', '数量1;投运2019', NULL, 'E+C', NULL, NULL, NULL, 0, 0, 1, 67, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(68, 7, '福建鼎信科技有限公司', 'Fujian Dingxin Technology Co., Ltd.', '鼎信罩式炉三期氢回收管线改造及软件(E+C)', 'Dingxin Hood Furnace Phase III H2 Recovery (E+C)', '中国', '数量1;投运2021', NULL, 'E+C', NULL, NULL, NULL, 0, 0, 1, 68, 'ppt-import', NULL, NOW(), NOW(), NULL, 0)
|
||||
ON DUPLICATE KEY UPDATE `description_zh` = VALUES(`description_zh`);
|
||||
|
||||
INSERT INTO `f_case_study` (`case_study_id`, `category_id`, `client_name_zh`, `client_name_en`, `project_name_zh`, `project_name_en`, `location`, `description_zh`, `description_en`, `scope_zh`, `scope_en`, `achievement_zh`, `achievement_en`, `is_overseas`, `is_featured`, `is_published`, `sort_order`, `create_by`, `update_by`, `create_time`, `update_time`, `remark`, `del_flag`) VALUES
|
||||
(69, 8, '梅钢冷轧', 'Meishan Cold Rolling', '梅钢冷轧 2CGL', 'Meishan CR 2CGL', '中国', '镀后冷却', NULL, '镀锌线镀后冷却', 'Post-galvanizing cooling on CGL', NULL, NULL, 0, 0, 1, 69, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(70, 8, '宝钢冷轧', 'Baosteel Cold Rolling', '宝钢高强钢专用单元', 'Baosteel High-Strength Dedicated Unit', '中国', '镀后冷却', NULL, '镀锌线镀后冷却', 'Post-galvanizing cooling on CGL', NULL, NULL, 0, 0, 1, 70, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(71, 8, '宝钢冷轧', 'Baosteel Cold Rolling', '宝钢 1550 热镀锌机组', 'Baosteel 1550 CGL', '中国', '镀后冷却', NULL, '镀锌线镀后冷却', 'Post-galvanizing cooling on CGL', NULL, NULL, 0, 0, 1, 71, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(72, 8, '宝钢冷轧', 'Baosteel Cold Rolling', '宝钢高强钢专用线', 'Baosteel High-Strength Dedicated Line', '中国', '镀后冷却', NULL, '镀锌线镀后冷却', 'Post-galvanizing cooling on CGL', NULL, NULL, 0, 0, 1, 72, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(73, 8, '湛江冷轧', 'Zhanjiang Cold Rolling', '湛江 1550 热镀锌机组', 'Zhanjiang 1550 CGL', '中国', '镀后冷却', NULL, '镀锌线镀后冷却', 'Post-galvanizing cooling on CGL', NULL, NULL, 0, 0, 1, 73, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(74, 8, '湛江冷轧', 'Zhanjiang Cold Rolling', '湛江三高炉 1CGL 气雾冷却', 'Zhanjiang BF3 1CGL Air-mist', '中国', '镀后冷却', NULL, '镀锌线镀后冷却', 'Post-galvanizing cooling on CGL', NULL, NULL, 0, 0, 1, 74, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(75, 8, '湛江冷轧', 'Zhanjiang Cold Rolling', '湛江三高炉 2CGL 气雾冷却', 'Zhanjiang BF3 2CGL Air-mist', '中国', '镀后冷却', NULL, '镀锌线镀后冷却', 'Post-galvanizing cooling on CGL', NULL, NULL, 0, 0, 1, 75, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(76, 8, '首钢京唐', 'Shougang Jingtang', '京唐镀层板 2CGL', 'Shougang Jingtang Coated Plate 2CGL', '中国', '镀后冷却', NULL, '镀锌线镀后冷却', 'Post-galvanizing cooling on CGL', NULL, NULL, 0, 0, 1, 76, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(77, 8, '广州 JFE', 'Guangzhou JFE', '广州 JFE-2CGL', 'Guangzhou JFE-2CGL', '中国', '镀后冷却', NULL, '镀锌线镀后冷却', 'Post-galvanizing cooling on CGL', NULL, NULL, 0, 0, 1, 77, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(78, 8, '宁波宝新', 'Ningbo Baoxin', '宁波宝新 1AP', 'Ningbo Baoxin 1AP', '中国', '不锈钢退火冷却', NULL, '不锈钢退火冷却', 'Stainless steel annealing cooling', NULL, NULL, 0, 0, 1, 78, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(79, 8, '宁波宝新', 'Ningbo Baoxin', '宁波宝新 2AP', 'Ningbo Baoxin 2AP', '中国', '不锈钢退火冷却', NULL, '不锈钢退火冷却', 'Stainless steel annealing cooling', NULL, NULL, 0, 0, 1, 79, 'ppt-import', NULL, NOW(), NOW(), NULL, 0)
|
||||
ON DUPLICATE KEY UPDATE `description_zh` = VALUES(`description_zh`);
|
||||
|
||||
INSERT INTO `f_case_study` (`case_study_id`, `category_id`, `client_name_zh`, `client_name_en`, `project_name_zh`, `project_name_en`, `location`, `description_zh`, `description_en`, `scope_zh`, `scope_en`, `achievement_zh`, `achievement_en`, `is_overseas`, `is_featured`, `is_published`, `sort_order`, `create_by`, `update_by`, `create_time`, `update_time`, `remark`, `del_flag`) VALUES
|
||||
(80, 9, '河北兆建', 'Hebei Zhaojian', 'AZ 1450mm', 'AZ 1450mm', '中国', '应用:热线中间坯边部加热', NULL, '规格1450mm', '1450 mm line', NULL, NULL, 0, 0, 1, 80, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(81, 9, '成都钛盟新材料', 'Chengdu Taimum New Materials', 'ZAM 1450mm', 'ZAM 1450 mm', '中国', '应用:冷轧加热段', NULL, '1450mm', '1450 mm', NULL, NULL, 0, 0, 1, 81, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(82, 9, '航隆材料', 'Hanglong Materials', 'AZ 1450mm', 'AZ 1450 mm', '中国', '应用:冷轧加热段', NULL, '1450mm', '1450 mm', NULL, NULL, 0, 0, 1, 82, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(83, 9, '神州通管业', 'Shenzhou Tong Guanye', 'ZAM 850mm', 'ZAM 850 mm', '中国', '应用:钢管内壁淬火', NULL, '850mm', '850 mm', NULL, NULL, 0, 0, 1, 83, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(84, 9, '科仁普重工', 'Kerengpu Heavy Industry', 'ZAM 1450mm', 'ZAM 1450 mm', '中国', '应用:锯齿线淬火', NULL, '1450mm', '1450 mm', NULL, NULL, 0, 0, 1, 84, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(85, 9, '中新冶业', 'Zhongxin Ye Industry', 'ZAM 1150mm', 'ZAM 1150 mm', '中国', '应用:镁合金轧前加热', NULL, '1150mm', '1150 mm', NULL, NULL, 0, 0, 1, 85, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(86, 9, '印尼钢铁公司', 'Indonesian Steel Company', 'AZ 1450mm', 'AZ 1450 mm', '印度尼西亚', '应用:热轧板坯边部加热', NULL, '1450mm', '1450 mm', NULL, NULL, 1, 0, 1, 86, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(87, 9, '台湾元帝', 'Taiwan Yuandi', '酸洗线 1450mm', 'Pickling Line 1450 mm', '中国', '应用:冷轧退火试验', NULL, '1450mm', '1450 mm', NULL, NULL, 0, 0, 1, 87, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(88, 9, '海鸿金属', 'Haihong Metal', '酸洗线 1150mm', 'Pickling Line 1150 mm', '中国', '应用:镀后涂层干燥', NULL, '1150mm', '1150 mm', NULL, NULL, 0, 0, 1, 88, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(89, 9, '科仁普重工', 'Kerengpu Heavy Industry', '酸轧 1380mm', 'Acid Rolling 1380 mm', '中国', '应用:热轧热处理线', NULL, '1380mm', '1380 mm', NULL, NULL, 0, 0, 1, 89, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(90, 9, '大力神', 'Dalishen', '硅钢退火线 1450mm', 'Silicon Annealing Line 1450 mm', '中国', '应用:硅钢轧前预热', NULL, '1450mm', '1450 mm', NULL, NULL, 0, 0, 1, 90, 'ppt-import', NULL, NOW(), NOW(), NULL, 0),
|
||||
(91, 9, '宇联实业', 'Yulian Industrial', '酸洗线 850mm', 'Pickling Line 850 mm', '中国', '应用:钢管温度补偿', NULL, '850mm', '850 mm', NULL, NULL, 0, 0, 1, 91, 'ppt-import', NULL, NOW(), NOW(), NULL, 0)
|
||||
ON DUPLICATE KEY UPDATE `description_zh` = VALUES(`description_zh`);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
-- ======================================================================
|
||||
-- 图片说明:用户提供的 17 张 PNG 落在 Cursor assets;上线请复制到后端 uploads 目录
|
||||
-- 并在 f_single_equipment.cover_image 或 f_media_library 中改为实际 URL。
|
||||
-- ======================================================================
|
||||
@@ -24,7 +24,7 @@ USE wuhan_saga;
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
-- ================================================================
|
||||
-- 系统用户表
|
||||
-- 1系统用户表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS sys_user (
|
||||
user_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -46,7 +46,7 @@ CREATE TABLE IF NOT EXISTS sys_user (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统用户表';
|
||||
|
||||
-- ================================================================
|
||||
-- 公司信息表
|
||||
-- 2公司信息表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_company_info (
|
||||
company_info_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -83,7 +83,7 @@ CREATE TABLE IF NOT EXISTS f_company_info (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='公司信息';
|
||||
|
||||
-- ================================================================
|
||||
-- 联系方式表
|
||||
-- 3联系方式表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_contact (
|
||||
contact_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -108,7 +108,7 @@ CREATE TABLE IF NOT EXISTS f_contact (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='联系方式';
|
||||
|
||||
-- ================================================================
|
||||
-- 关于我们表
|
||||
-- 4关于我们表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_about (
|
||||
about_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -132,7 +132,7 @@ CREATE TABLE IF NOT EXISTS f_about (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='关于我们';
|
||||
|
||||
-- ================================================================
|
||||
-- 轮播图表
|
||||
-- 5轮播图表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_banner (
|
||||
banner_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -155,7 +155,7 @@ CREATE TABLE IF NOT EXISTS f_banner (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='轮播图';
|
||||
|
||||
-- ================================================================
|
||||
-- 车间展示表
|
||||
-- 6车间展示表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_workshop (
|
||||
workshop_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -182,7 +182,7 @@ CREATE TABLE IF NOT EXISTS f_workshop (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='车间展示';
|
||||
|
||||
-- ================================================================
|
||||
-- 核心技术表
|
||||
-- 7核心技术表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_core_technology (
|
||||
core_technology_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -205,7 +205,7 @@ CREATE TABLE IF NOT EXISTS f_core_technology (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='核心技术';
|
||||
|
||||
-- ================================================================
|
||||
-- 产品分类表
|
||||
-- 8产品分类表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_product_category (
|
||||
product_category_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -227,7 +227,7 @@ CREATE TABLE IF NOT EXISTS f_product_category (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品分类';
|
||||
|
||||
-- ================================================================
|
||||
-- 成套机组产品表
|
||||
-- 9成套机组产品表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_product_line (
|
||||
product_line_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -267,7 +267,7 @@ CREATE TABLE IF NOT EXISTS f_product_line (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成套机组产品';
|
||||
|
||||
-- ================================================================
|
||||
-- 单体设备表
|
||||
-- 10单体设备表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_single_equipment (
|
||||
single_equipment_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -298,7 +298,7 @@ CREATE TABLE IF NOT EXISTS f_single_equipment (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='单体设备';
|
||||
|
||||
-- ================================================================
|
||||
-- 成套机组与单体设备关联表(多对多)
|
||||
-- 11成套机组与单体设备关联表(多对多)
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_product_line_equipment (
|
||||
product_line_equipment_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -311,7 +311,7 @@ CREATE TABLE IF NOT EXISTS f_product_line_equipment (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成套机组关联单体设备';
|
||||
|
||||
-- ================================================================
|
||||
-- 备品备件表
|
||||
-- 12备品备件表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_spare_part (
|
||||
spare_part_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -343,7 +343,7 @@ CREATE TABLE IF NOT EXISTS f_spare_part (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='备品备件';
|
||||
|
||||
-- ================================================================
|
||||
-- 案例分类表
|
||||
-- 13案例分类表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_case_category (
|
||||
case_category_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -361,7 +361,7 @@ CREATE TABLE IF NOT EXISTS f_case_category (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='案例分类';
|
||||
|
||||
-- ================================================================
|
||||
-- 成功案例表
|
||||
-- 14成功案例表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_case_study (
|
||||
case_study_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -392,7 +392,7 @@ CREATE TABLE IF NOT EXISTS f_case_study (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='成功案例';
|
||||
|
||||
-- ================================================================
|
||||
-- 新闻分类表
|
||||
-- 15新闻分类表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_news_category (
|
||||
category_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -410,7 +410,7 @@ CREATE TABLE IF NOT EXISTS f_news_category (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='新闻分类';
|
||||
|
||||
-- ================================================================
|
||||
-- 新闻文章表
|
||||
-- 16新闻文章表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_news (
|
||||
news_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -443,7 +443,7 @@ CREATE TABLE IF NOT EXISTS f_news (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='新闻文章';
|
||||
|
||||
-- ================================================================
|
||||
-- 媒体库表
|
||||
-- 17媒体库表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_media_library (
|
||||
media_library_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -471,7 +471,7 @@ CREATE TABLE IF NOT EXISTS f_media_library (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='媒体库';
|
||||
|
||||
-- ================================================================
|
||||
-- 产品与媒体关联表
|
||||
-- 18产品与媒体关联表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_product_media (
|
||||
product_media_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
@@ -490,7 +490,7 @@ CREATE TABLE IF NOT EXISTS f_product_media (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品与媒体关联';
|
||||
|
||||
-- ================================================================
|
||||
-- 案例与媒体关联表
|
||||
-- 19案例与媒体关联表
|
||||
-- ================================================================
|
||||
CREATE TABLE IF NOT EXISTS f_case_media (
|
||||
case_media_id BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
package com.wuhansaga.server.common;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.BindException;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
import org.springframework.web.servlet.resource.NoResourceFoundException;
|
||||
|
||||
@Slf4j
|
||||
@RestControllerAdvice
|
||||
@@ -34,6 +37,12 @@ public class GlobalExceptionHandler {
|
||||
return R.fail(400, message);
|
||||
}
|
||||
|
||||
@ExceptionHandler(NoResourceFoundException.class)
|
||||
public ResponseEntity<Void> handleNoResourceFound(NoResourceFoundException e) {
|
||||
log.debug("静态资源未找到: {}", e.getResourcePath());
|
||||
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
|
||||
}
|
||||
|
||||
@ExceptionHandler(Exception.class)
|
||||
public R<Void> handleException(Exception e) {
|
||||
log.error("系统异常", e);
|
||||
|
||||
@@ -35,6 +35,6 @@ public class WebMvcConfig implements WebMvcConfigurer {
|
||||
absolutePath += File.separator;
|
||||
}
|
||||
registry.addResourceHandler("/uploads/**")
|
||||
.addResourceLocations("file:" + absolutePath);
|
||||
.addResourceLocations("file:" + absolutePath, "classpath:/static/bundled-uploads/");
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 287 B |
Binary file not shown.
|
After Width: | Height: | Size: 287 B |
Binary file not shown.
|
After Width: | Height: | Size: 287 B |
Binary file not shown.
|
After Width: | Height: | Size: 287 B |
Binary file not shown.
|
After Width: | Height: | Size: 287 B |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user