hezhijie 3 tygodni temu
rodzic
commit
df15328bf5
40 zmienionych plików z 481 dodań i 109 usunięć
  1. 1 1
      company/.umirc.ts
  2. 49 0
      company/docs/baidu-webmaster-checklist.md
  3. 2 2
      company/src/app.tsx
  4. BIN
      company/src/assets/image/banner/01.jpg
  5. BIN
      company/src/assets/image/banner/02.jpg
  6. BIN
      company/src/assets/image/banner/03.jpg
  7. BIN
      company/src/assets/image/banner/04.jpg
  8. BIN
      company/src/assets/image/banner/05.jpg
  9. BIN
      company/src/assets/image/banner/06.jpg
  10. BIN
      company/src/assets/image/banner/07.jpg
  11. BIN
      company/src/assets/image/banner/08.jpg
  12. BIN
      company/src/assets/image/banner/09.jpg
  13. BIN
      company/src/assets/image/banner/10.jpg
  14. BIN
      company/src/assets/image/banner/11.jpg
  15. BIN
      company/src/assets/image/banner/12.jpg
  16. BIN
      company/src/assets/image/banner/13.jpg
  17. BIN
      company/src/assets/image/banner/14.jpg
  18. BIN
      company/src/assets/image/banner/15.jpg
  19. BIN
      company/src/assets/image/banner/16.jpg
  20. BIN
      company/src/assets/image/banner/17.jpg
  21. BIN
      company/src/assets/image/banner/18.jpg
  22. BIN
      company/src/assets/image/banner/19.jpg
  23. BIN
      company/src/assets/image/banner/20.jpg
  24. BIN
      company/src/assets/image/banner/21.jpg
  25. BIN
      company/src/assets/image/banner/22.jpg
  26. BIN
      company/src/assets/image/home/hero_bg.avif
  27. BIN
      company/src/assets/image/home/hero_bg.webp
  28. BIN
      company/src/assets/image/home/hero_bg_mobile.avif
  29. BIN
      company/src/assets/image/home/hero_bg_mobile.webp
  30. BIN
      company/src/assets/image/klzs/logo.png
  31. BIN
      company/src/assets/image/zjy/logo.webp
  32. BIN
      company/src/assets/image/zjy/logo_transparent.png
  33. 180 0
      company/src/pages/Home/index.less
  34. 105 48
      company/src/pages/Home/index.tsx
  35. 1 0
      retrieval/index.html
  36. 3 3
      retrieval/src/App.tsx
  37. 125 34
      retrieval/src/pages/zjy/HomePage.tsx
  38. 6 6
      retrieval/vite.config.ts
  39. 6 12
      saas/index.html
  40. 3 3
      saas/src/App.tsx

+ 1 - 1
company/.umirc.ts

@@ -4,7 +4,7 @@ export default defineConfig({
   antd: {},
   title: '大方无隅科技有限公司',
   metas: [
-    { name: 'keywords', content: '深圳大方无隅科技有限公司,大方无隅科技有限公司,大方无隅' },
+    { name: 'keywords', content: '深圳大方无隅科技有限公司,大方无隅科技有限公司,互联网信息服务,互联网数据服务,计算机系统服务,系统集成' },
     {
       name: 'description',
       content: '深圳大方无隅科技有限公司成立于2016年,专注于为智慧城市、教育、医疗、快消、消费电子数码等行业提供技术解决方案与营销服务。2021年创立“开邻”品牌,专注渠道价格舆情管控、新媒体内容营销和政企客户软件定制化方向。同时,作为企微生态和抖音生态服务商,通过自研SaaS系统,为客户提供一站式数字化营销服务。团队以效率第一的服务宗旨,以精益求精的服务理念,致力于赋能客户AI数字基建与商业价值增长。',

+ 49 - 0
company/docs/baidu-webmaster-checklist.md

@@ -0,0 +1,49 @@
+# 百度站长平台提交流程清单
+
+## 0. 上线前检查
+- 确认线上域名可公网访问,`https://你的域名/` 返回 `200`。
+- 确认以下文件可访问:
+  - `/robots.txt`
+  - `/sitemap.xml`
+- 检查页面没有 `noindex` 指令(`meta robots` 或响应头)。
+
+## 1. 站点验证(百度搜索资源平台)
+- 进入百度搜索资源平台并登录。
+- 添加站点(推荐使用主域或最终收录域)。
+- 选择验证方式(HTML 文件 / HTML 标签 / CNAME)。
+- 完成验证后,确认站点状态为“验证成功”。
+
+## 2. 提交 sitemap
+- 在平台的 sitemap 提交入口提交:
+  - `https://你的域名/sitemap.xml`
+- 提交后查看处理状态(成功/失败、抓取时间)。
+
+## 3. URL 主动提交(优先)
+- 先手动提交关键页面:
+  - `/`
+  - `/home`
+  - `/solution`
+  - `/privacy`
+  - `/agreement`
+- 再接入“普通收录 API”做自动推送(新页面发布即推送)。
+
+## 4. 抓取与索引自查
+- 用平台“抓取诊断”测试首页与核心页面。
+- 若抓取失败,重点排查:
+  - 服务器超时/5xx
+  - 防火墙拦截搜索引擎 UA/IP
+  - 重定向链过长或循环
+  - robots 误拦截
+
+## 5. 收录周期预期
+- 新站通常 1-4 周出现稳定收录,3-7 天无结果属于常见情况。
+- 提交后建议每 2-3 天复查一次平台数据:
+  - 抓取频次
+  - 索引量
+  - 提交成功率
+
+## 6. 建议持续动作
+- 保持核心页面可访问且内容稳定。
+- 增加高质量外链/品牌提及,提升抓取优先级。
+- 每次上线后自动更新 sitemap 并做 API 推送。
+

+ 2 - 2
company/src/app.tsx

@@ -125,7 +125,7 @@ const AppRoot: React.FC<React.PropsWithChildren> = (props) => {
             </button>
           </Dropdown>
 
-          <button
+          {/* <button
             type="button"
             className={
               pathname === "/solution"
@@ -135,7 +135,7 @@ const AppRoot: React.FC<React.PropsWithChildren> = (props) => {
             onClick={() => history.push("/solution")}
           >
             联系我们
-          </button>
+          </button> */}
 
           <button
             type="button"

BIN
company/src/assets/image/banner/01.jpg


BIN
company/src/assets/image/banner/02.jpg


BIN
company/src/assets/image/banner/03.jpg


BIN
company/src/assets/image/banner/04.jpg


BIN
company/src/assets/image/banner/05.jpg


BIN
company/src/assets/image/banner/06.jpg


BIN
company/src/assets/image/banner/07.jpg


BIN
company/src/assets/image/banner/08.jpg


BIN
company/src/assets/image/banner/09.jpg


BIN
company/src/assets/image/banner/10.jpg


BIN
company/src/assets/image/banner/11.jpg


BIN
company/src/assets/image/banner/12.jpg


BIN
company/src/assets/image/banner/13.jpg


BIN
company/src/assets/image/banner/14.jpg


BIN
company/src/assets/image/banner/15.jpg


BIN
company/src/assets/image/banner/16.jpg


BIN
company/src/assets/image/banner/17.jpg


BIN
company/src/assets/image/banner/18.jpg


BIN
company/src/assets/image/banner/19.jpg


BIN
company/src/assets/image/banner/20.jpg


BIN
company/src/assets/image/banner/21.jpg


BIN
company/src/assets/image/banner/22.jpg


BIN
company/src/assets/image/home/hero_bg.avif


BIN
company/src/assets/image/home/hero_bg.webp


BIN
company/src/assets/image/home/hero_bg_mobile.avif


BIN
company/src/assets/image/home/hero_bg_mobile.webp


BIN
company/src/assets/image/klzs/logo.png


BIN
company/src/assets/image/zjy/logo.webp


BIN
company/src/assets/image/zjy/logo_transparent.png


+ 180 - 0
company/src/pages/Home/index.less

@@ -50,6 +50,17 @@
       rgba(255, 255, 255, 0) 72%
     ),
     url("../../assets/image/home/hero_bg.png");
+  background-image: linear-gradient(
+      90deg,
+      rgba(236, 245, 255, 0.72) 0%,
+      rgba(244, 249, 255, 0.28) 48%,
+      rgba(255, 255, 255, 0) 72%
+    ),
+    image-set(
+      url("../../assets/image/home/hero_bg.avif") type("image/avif"),
+      url("../../assets/image/home/hero_bg.webp") type("image/webp"),
+      url("../../assets/image/home/hero_bg.png") type("image/png")
+    );
   background-repeat: no-repeat, no-repeat;
   background-size: cover, cover;
   /* 窄屏时 cover 优先裁切左侧,建筑保持在右侧 */
@@ -587,6 +598,139 @@
   margin-bottom: 8px;
 }
 
+.homeBizPlatformProducts {
+  margin-top: 10px;
+  display: flex;
+  flex-wrap: wrap;
+  gap: 24px 32px;
+  flex: 1;
+  align-content: flex-start;
+}
+
+.homeBizPlatformProduct {
+  display: flex;
+  flex-direction: column;
+  gap: 12px;
+  min-width: min(100%, 200px);
+  flex: 1 1 200px;
+  text-decoration: none;
+  color: inherit;
+  cursor: pointer;
+  border-radius: 12px;
+  outline: none;
+  transition: opacity 0.2s ease;
+}
+
+.homeBizPlatformProduct:hover {
+  opacity: 0.92;
+}
+
+.homeBizPlatformProduct:focus-visible {
+  box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.85);
+}
+
+.homeBizPlatformLogoWrap {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: clamp(150px, 22vw, 240px);
+  aspect-ratio: 1 / 0.9;
+  margin: 0 auto;
+  border-radius: 10px;
+  background: #ffffff;
+  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.12);
+  overflow: hidden;
+}
+
+.homeBizPlatformLogo {
+  display: block;
+  max-width: 78%;
+  width: auto;
+  height: auto;
+  object-fit: contain;
+}
+
+.homeBizPlatformDesc {
+  margin: 0;
+  font-size: 15px;
+  line-height: 1.65;
+  color: rgba(255, 255, 255, 0.88);
+  text-align: center;
+}
+
+.homeBizComplianceMarquee {
+  position: relative;
+  margin-top: 12px;
+  flex: 1;
+  min-height: 220px;
+  border-radius: 10px;
+  overflow: hidden;
+}
+
+.homeBizComplianceMarquee::before,
+.homeBizComplianceMarquee::after {
+  content: "";
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  width: 48px;
+  z-index: 2;
+  pointer-events: none;
+}
+
+.homeBizComplianceMarquee::before {
+  left: 0;
+  background: linear-gradient(90deg, rgba(3, 12, 30, 0.9), rgba(3, 12, 30, 0));
+}
+
+.homeBizComplianceMarquee::after {
+  right: 0;
+  background: linear-gradient(270deg, rgba(3, 12, 30, 0.9), rgba(3, 12, 30, 0));
+}
+
+.homeBizComplianceTrack {
+  display: flex;
+  gap: 14px;
+  width: max-content;
+  padding: 10px 18px;
+  animation: homeBizComplianceMarquee 50s linear infinite;
+}
+
+.homeBizComplianceCard {
+  flex: 0 0 clamp(120px, 12vw, 170px);
+  height: 200px;
+  padding: 10px 10px 8px;
+  box-sizing: border-box;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-radius: 8px;
+  background: rgba(255, 255, 255);
+  border: 1px solid rgba(30, 64, 175, 0.1);
+  overflow: hidden;
+}
+
+.homeBizComplianceImage {
+  width: 86%;
+  height: auto;
+  max-height: 100%;
+  display: block;
+  margin: 0 auto;
+  object-fit: contain;
+  object-position: center top;
+  background: #ffffff;
+}
+
+.homeBizComplianceEmpty {
+  position: absolute;
+  inset: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 14px;
+  color: rgba(255, 255, 255, 0.82);
+}
+
 .homeBizActions {
   margin-top: auto;
 }
@@ -627,6 +771,15 @@
   }
 }
 
+@keyframes homeBizComplianceMarquee {
+  from {
+    transform: translateX(0);
+  }
+  to {
+    transform: translateX(calc(-50% - 7px));
+  }
+}
+
 /* 选择我们的理由 */
 .homeReasonSection {
   padding: 72px 0 80px;
@@ -966,6 +1119,17 @@
       rgba(2, 6, 23, 0.08) 100%
     ),
     url("../../assets/image/home/hero_bg.png");
+  background-image: linear-gradient(
+      95deg,
+      rgba(2, 6, 23, 0.74) 0%,
+      rgba(2, 6, 23, 0.34) 52%,
+      rgba(2, 6, 23, 0.08) 100%
+    ),
+    image-set(
+      url("../../assets/image/home/hero_bg.avif") type("image/avif"),
+      url("../../assets/image/home/hero_bg.webp") type("image/webp"),
+      url("../../assets/image/home/hero_bg.png") type("image/png")
+    );
 }
 
 .homeHeroListItem {
@@ -1047,3 +1211,19 @@
 .homeCtaBandBtn:hover {
   background: #2563eb;
 }
+
+@media (max-width: 640px) {
+  .homeHero {
+    background-image: linear-gradient(
+        95deg,
+        rgba(2, 6, 23, 0.74) 0%,
+        rgba(2, 6, 23, 0.34) 52%,
+        rgba(2, 6, 23, 0.08) 100%
+      ),
+      image-set(
+        url("../../assets/image/home/hero_bg_mobile.avif") type("image/avif"),
+        url("../../assets/image/home/hero_bg_mobile.webp") type("image/webp"),
+        url("../../assets/image/home/hero_bg.png") type("image/png")
+      );
+  }
+}

+ 105 - 48
company/src/pages/Home/index.tsx

@@ -17,19 +17,40 @@ import bizBgComplianceSmall from "@/assets/image/home/m3_t3_small.png";
 import bizBgResearchSmall from "@/assets/image/home/m3_t4_small.png";
 import bizBgServiceSmall from "@/assets/image/home/m3_t5_small.png";
 import reasonMediaImg from "@/assets/image/home/m4_t1.png";
+import zjyLogoTransparent from "@/assets/image/zjy/logo.webp";
+import klzsLogo from "@/assets/image/klzs/logo.png";
 
 type AdvBullet = { label?: string; value: string };
 
+type BizPlatformProduct = {
+  name: string;
+  logo: string;
+  desc: string;
+  url: string;
+};
+
 type BizTab = {
   key: string;
   tag: string;
-  heading: string;
-  subHeading: string;
-  bullets: AdvBullet[];
   largeBgImage: string | null;
   smallBgImage: string;
+  heading?: string;
+  subHeading?: string;
+  bullets?: AdvBullet[];
+  platformProducts?: BizPlatformProduct[];
 };
 
+const complianceBannerContext = (require as any).context(
+  "@/assets/image/banner",
+  false,
+  /\.(jpe?g)$/i,
+);
+
+const complianceBannerImages: string[] = complianceBannerContext
+  .keys()
+  .sort((a: string, b: string) => a.localeCompare(b, "zh-Hans-CN"))
+  .map((key: string) => complianceBannerContext(key));
+
 const Home: React.FC = () => {
   const companyIntro = useMemo(
     () =>
@@ -59,7 +80,7 @@ const Home: React.FC = () => {
           {
             label: "互联网数据服务",
             value:
-              "提供数据采集、治理、分析与可视化能力,支撑业务决策。",
+              "提供数据监测、治理、分析与可视化能力,支撑业务决策。",
           },
           {
             label: "计算机系统服务",
@@ -74,26 +95,20 @@ const Home: React.FC = () => {
       {
         key: "platform",
         tag: "平台产品",
-        heading: "产品与软件著作权",
-        subHeading: "以自研产品与组件化能力支撑多场景落地",
         largeBgImage: bizBgPlatformMax,
         smallBgImage: bizBgPlatformSmall,
-        bullets: [
+        platformProducts: [
           {
-            label: "开邻服务平台",
-            value: "面向企业场景的服务与运营平台能力沉淀。",
+            name: "智价云",
+            logo: zjyLogoTransparent,
+            desc: "药品价格\u00a0\u00a0尽在掌握",
+            url: "https://price.kailin.com.cn",
           },
           {
-            label: "推广员分销软件",
-            value: "围绕推广与分销场景提供业务系统支持。",
-          },
-          {
-            label: "软件著作权",
-            value: "多项软件著作权积累,持续迭代与能力复用。",
-          },
-          {
-            label: "可扩展交付",
-            value: "支持按需定制与本地化部署,适配不同业务与合规要求。",
+            name: "开邻智数",
+            logo: klzsLogo,
+            desc: "一站式企微生态SCRM私域直播",
+            url: "https://saas.kailin.com.cn",
           },
         ],
       },
@@ -104,20 +119,6 @@ const Home: React.FC = () => {
         subHeading: "重视合规经营,持续完善资质体系",
         largeBgImage: bizBgComplianceMax,
         smallBgImage: bizBgComplianceSmall,
-        bullets: [
-          {
-            label: "互联网药品信息服务",
-            value: "具备互联网药品信息服务资格证书等资质。",
-          },
-          {
-            label: "资质管理",
-            value: "规范资质与流程管理,保障服务交付的可持续与可追溯。",
-          },
-          {
-            label: "信息安全",
-            value: "在产品与交付过程中重视安全与隐私保护要求。",
-          },
-        ],
       },
       {
         key: "research",
@@ -161,6 +162,10 @@ const Home: React.FC = () => {
   );
 
   const [activeBiz, setActiveBiz] = useState(0);
+  const complianceScrollImages = useMemo(
+    () => [...complianceBannerImages, ...complianceBannerImages],
+    [],
+  );
 
   const chooseIntro =
     "团队成员40人左右,其中研发团队占一半;核心成员工作经验均超10年,公司平均年龄30+岁,团队有硕士3人,其中2人是技术岗,本科及以上学历超7成。";
@@ -301,21 +306,73 @@ const Home: React.FC = () => {
                         <AppstoreOutlined className="homeBizTagIcon" />
                         <span>{tab.tag}</span>
                       </div>
-                      <h3 className="homeBizTitle">{tab.heading}</h3>
-                      <p className="homeBizLead">{tab.subHeading}</p>
-                      <ul className="homeBizList">
-                        {tab.bullets.map((b, bulletIdx) => (
-                          <li className="homeBizListItem" key={`${b.label}-${bulletIdx}`}>
-                            {b.label ? (
-                              <span className="homeBizListLabel">
-                                {b.label}
-                                {b.value ? ":" : ""}
-                              </span>
-                            ) : null}
-                            {b.value}
-                          </li>
-                        ))}
-                      </ul>
+                      {tab.platformProducts?.length ? (
+                        <div className="homeBizPlatformProducts">
+                          {tab.platformProducts.map((p) => (
+                            <a
+                              key={p.name}
+                              className="homeBizPlatformProduct"
+                              href={p.url}
+                              target="_blank"
+                              rel="noreferrer"
+                              onClick={(e) => e.stopPropagation()}
+                            >
+                              <div className="homeBizPlatformLogoWrap">
+                                <img
+                                  className="homeBizPlatformLogo"
+                                  src={p.logo}
+                                  alt={p.name}
+                                  loading="lazy"
+                                  decoding="async"
+                                />
+                              </div>
+                              <p className="homeBizPlatformDesc">{p.desc}</p>
+                            </a>
+                          ))}
+                        </div>
+                      ) : tab.key === "compliance" ? (
+                        <>
+                          <h3 className="homeBizTitle">{tab.heading}</h3>
+                          <p className="homeBizLead">{tab.subHeading}</p>
+                          <div className="homeBizComplianceMarquee" aria-hidden="true">
+                            {complianceBannerImages.length ? (
+                              <div className="homeBizComplianceTrack">
+                                {complianceScrollImages.map((imgSrc, imageIdx) => (
+                                  <div className="homeBizComplianceCard" key={`${imgSrc}-${imageIdx}`}>
+                                    <img
+                                      className="homeBizComplianceImage"
+                                      src={imgSrc}
+                                      alt=""
+                                      loading="lazy"
+                                      decoding="async"
+                                    />
+                                  </div>
+                                ))}
+                              </div>
+                            ) : (
+                              <div className="homeBizComplianceEmpty">暂未上传资质展示图片</div>
+                            )}
+                          </div>
+                        </>
+                      ) : (
+                        <>
+                          <h3 className="homeBizTitle">{tab.heading}</h3>
+                          <p className="homeBizLead">{tab.subHeading}</p>
+                          <ul className="homeBizList">
+                            {tab.bullets?.map((b, bulletIdx) => (
+                              <li className="homeBizListItem" key={`${b.label}-${bulletIdx}`}>
+                                {b.label ? (
+                                  <span className="homeBizListLabel">
+                                    {b.label}
+                                    {b.value ? ":" : ""}
+                                  </span>
+                                ) : null}
+                                {b.value}
+                              </li>
+                            ))}
+                          </ul>
+                        </>
+                      )}
                       <div className="homeBizActions">
                         <button
                           type="button"

+ 1 - 0
retrieval/index.html

@@ -7,6 +7,7 @@
       name="description"
       content="线上平台价格数据治理,医药品牌工业全链路解决方案。"
     />
+    <meta name="keywords" content="开邻智价云,智价云,渠道价值链守护者,药品价格监测,线上价格数据治理,医药品牌,全链路解决方案,行业渠道治理,违规商家锁定,全平台价格监控,B端C端O端,高频采集,智能清洗低价链接,多维数据看板,价格违规溯源,单品级颗粒度,店铺主体识别,证据固证,SaaS价格系统,本地化部署,码上放心平台,违规链接下架,多端预警推送,T+1预警,联动下架,行业价格指数,竞品价格分析,价格报告,全域智控,价格舆情监控,数据治理,渠道合规" />
     <meta property="og:title" content="开邻智价云-渠道价值链守护者" />
     <meta
       property="og:description"

+ 3 - 3
retrieval/src/App.tsx

@@ -73,14 +73,14 @@ const Navbar = () => {
           </div>
 
           <NavLink
-            to="https://www.kailin.com.cn"
+            to="https://home.kailin.com.cn"
             target="_blank"
             rel="noreferrer"
             className={`relative inline-flex items-center leading-none font-headline text-sm text-slate-300 hover:text-white font-medium transition-colors`}
           >
             关于我们
           </NavLink>
-          <NavLink
+          {/* <NavLink
             to="/contact"
             className={({ isActive }) =>
               `relative inline-flex items-center leading-none font-headline text-sm ${
@@ -98,7 +98,7 @@ const Navbar = () => {
                 )}
               </>
             )}
-          </NavLink>
+          </NavLink> */}
         </div>
 
         <button

+ 125 - 34
retrieval/src/pages/zjy/HomePage.tsx

@@ -1,5 +1,14 @@
 import { useState } from "react";
-import { BellRing, Check, EyeOff, Globe, Lock, UserSearch, Users, Zap } from "lucide-react";
+import {
+  BellRing,
+  Check,
+  EyeOff,
+  Globe,
+  Lock,
+  UserSearch,
+  Users,
+  Zap,
+} from "lucide-react";
 import { AnimatePresence, motion } from "motion/react";
 import { useNavigate } from "react-router-dom";
 import imageM3T11 from "../../assets/images/zjy/m3_t11.png";
@@ -32,10 +41,19 @@ export default function HomePage() {
       title: "全量自动化,动态不缺席",
       desc: "全平台覆盖,监控无死角",
       features: [
-        { title: "全平台扫描", desc: "覆盖B端、C端及O端全渠道,7x24小时不间断监测。" },
-        { title: "高频采集", desc: "支持海量账号接入,最高实现T+1频率的数据采集。" },
+        {
+          title: "全平台扫描",
+          desc: "覆盖B端、C端及O端全渠道,7x24小时不间断监测。",
+        },
+        {
+          title: "高频监测",
+          desc: "支持海量账号接入,最高实现T+1频率的数据监测。",
+        },
         { title: "智能清洗", desc: "自动识别并清洗低价链接,确保数据纯净度。" },
-        { title: "多维看板", desc: "提供多维度的数据可视化看板,实时掌握市场动态。" },
+        {
+          title: "多维看板",
+          desc: "提供多维度的数据可视化看板,实时掌握市场动态。",
+        },
       ],
       image: imageM3T11,
     },
@@ -43,9 +61,18 @@ export default function HomePage() {
       title: "全程可追溯,溯源有妙招",
       desc: "颗粒度精细,源头可追溯",
       features: [
-        { title: "精细颗粒度", desc: "数据颗粒度最小可至单品级,精准定位违规源头。" },
-        { title: "主体识别", desc: "准确识别违规店铺的经营主体信息,锁定责任人。" },
-        { title: "技术穿透", desc: "支持技术穿透手段,结合人工溯源,核实店铺主体真实性。" },
+        {
+          title: "精细颗粒度",
+          desc: "数据颗粒度最小可至单品级,精准定位违规源头。",
+        },
+        {
+          title: "主体识别",
+          desc: "准确识别违规店铺的经营主体信息,锁定责任人。",
+        },
+        {
+          title: "技术穿透",
+          desc: "支持技术穿透手段,结合人工溯源,核实店铺主体真实性。",
+        },
         { title: "证据固化", desc: "记录违规证据,为后续处理提供坚实依据。" },
       ],
       image: imageM3T22,
@@ -68,9 +95,18 @@ export default function HomePage() {
       desc: "多端响应,违规速下架",
       features: [
         { title: "实时推送", desc: "多端实时消息推送,1V1触达相关责任人。" },
-        { title: "快速响应", desc: "最高支持T+1推送信息,确保第一时间介入处理。" },
-        { title: "联动下架", desc: "联动品牌方推动B端违规链接下架,形成合力遏制。" },
-        { title: "技术下架", desc: "技术手段实现C端违规链接的快速下架,筑牢合规防线。" },
+        {
+          title: "快速响应",
+          desc: "最高支持T+1推送信息,确保第一时间介入处理。",
+        },
+        {
+          title: "联动下架",
+          desc: "联动品牌方推动B端违规链接下架,形成合力遏制。",
+        },
+        {
+          title: "技术下架",
+          desc: "技术手段实现C端违规链接的快速下架,筑牢合规防线。",
+        },
       ],
       image: imageM3T44,
     },
@@ -108,11 +144,14 @@ export default function HomePage() {
             transition={{ delay: 0.15, duration: 0.7, ease: "easeOut" }}
             className="relative z-10 max-w-5xl mx-auto space-y-8 text-center"
           >
-            <div style={{ fontSize: '2em', padding: '20px' }} className="inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-white/5 border border-white/10 text-blue-200 text-xs font-bold uppercase tracking-widest">
+            <div
+              style={{ fontSize: "2em", padding: "20px" }}
+              className="inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-white/5 border border-white/10 text-blue-200 text-xs font-bold uppercase tracking-widest"
+            >
               开邻智价云
             </div>
-            <h1 className="text-5xl md:text-7xl font-extrabold font-headline leading-[1.08] tracking-tight text-white">
-              让每一盒药品的价格都尽在掌握 <br />
+            <h1 className="text-4xl md:text-7xl font-extrabold font-headline leading-[1.08] tracking-tight text-white">
+              药品价格&nbsp;&nbsp;&nbsp;&nbsp;尽在掌握 <br />
             </h1>
             <p className="text-xl text-slate-300 font-medium max-w-3xl leading-relaxed mx-auto">
               线上平台价格数据治理,医药品牌工业全链路解决方案。
@@ -132,7 +171,9 @@ export default function HomePage() {
       <motion.section className="py-24 bg-slate-900 px-6" {...sectionReveal}>
         <div className="max-w-7xl mx-auto">
           <div className="mb-16 text-center">
-            <h2 className="text-3xl font-extrabold font-headline text-white mb-4">行业渠道治理的痛点</h2>
+            <h2 className="text-3xl font-extrabold font-headline text-white mb-4">
+              行业渠道治理的痛点
+            </h2>
             <div className="h-1.5 w-20 bg-blue-600 mx-auto rounded-full"></div>
           </div>
           <div className="grid grid-cols-1 md:grid-cols-4 gap-8">
@@ -145,7 +186,7 @@ export default function HomePage() {
               {
                 icon: Zap,
                 title: "人工效率低",
-                desc: "传统人工采集数据延迟大、覆盖窄,无法满足品牌方对实时价格变动的监控需求。",
+                desc: "传统人工监测数据延迟大、覆盖窄,无法满足品牌方对实时价格变动的监控需求。",
               },
               {
                 icon: BellRing,
@@ -167,8 +208,12 @@ export default function HomePage() {
                 <div className="w-12 h-12 rounded-lg bg-blue-500/15 flex items-center justify-center text-blue-400 mb-6">
                   <item.icon className="w-6 h-6" />
                 </div>
-                <h3 className="text-xl font-bold mb-3 font-headline text-white">{item.title}</h3>
-                <p className="text-slate-300 text-sm leading-relaxed">{item.desc}</p>
+                <h3 className="text-xl font-bold mb-3 font-headline text-white">
+                  {item.title}
+                </h3>
+                <p className="text-slate-300 text-sm leading-relaxed">
+                  {item.desc}
+                </p>
               </motion.div>
             ))}
           </div>
@@ -189,7 +234,9 @@ export default function HomePage() {
                   key={i}
                   onClick={() => setActiveTab(i)}
                   className={`px-6 py-2 font-bold whitespace-nowrap transition-all ${
-                    activeTab === i ? "text-blue-600 border-b-2 border-blue-600" : "text-slate-400 hover:text-white"
+                    activeTab === i
+                      ? "text-blue-600 border-b-2 border-blue-600"
+                      : "text-slate-400 hover:text-white"
                   }`}
                 >
                   {tab}
@@ -210,8 +257,12 @@ export default function HomePage() {
               <div className="grid grid-cols-1 md:grid-cols-2 gap-16 items-center">
                 <div className="space-y-8">
                   <div>
-                    <h3 className="text-3xl font-extrabold text-white mb-4 font-headline">{tabData[activeTab].title}</h3>
-                    <p className="text-slate-300 leading-relaxed text-lg">{tabData[activeTab].desc}</p>
+                    <h3 className="text-3xl font-extrabold text-white mb-4 font-headline">
+                      {tabData[activeTab].title}
+                    </h3>
+                    <p className="text-slate-300 leading-relaxed text-lg">
+                      {tabData[activeTab].desc}
+                    </p>
                   </div>
                   <div className="space-y-4">
                     {tabData[activeTab].features.map((feature, i) => (
@@ -220,8 +271,12 @@ export default function HomePage() {
                           <Check className="w-4 h-4" />
                         </div>
                         <div>
-                          <p className="font-bold text-slate-100">{feature.title}</p>
-                          <p className="text-sm text-slate-400">{feature.desc}</p>
+                          <p className="font-bold text-slate-100">
+                            {feature.title}
+                          </p>
+                          <p className="text-sm text-slate-400">
+                            {feature.desc}
+                          </p>
                         </div>
                       </div>
                     ))}
@@ -241,24 +296,53 @@ export default function HomePage() {
         </div>
       </motion.section>
 
-      <motion.section className="py-24 bg-slate-900 text-white px-6 border-y border-slate-800" {...sectionReveal}>
+      <motion.section
+        className="py-24 bg-slate-900 text-white px-6 border-y border-slate-800"
+        {...sectionReveal}
+      >
         <div className="max-w-7xl mx-auto">
           <div className="text-center mb-20">
-            <h2 className="text-4xl font-extrabold font-headline mb-4">为什么选择开邻智价云?</h2>
-            <p className="text-slate-300 text-lg">更智能的数据治理,更高效的渠道管理</p>
+            <h2 className="text-4xl font-extrabold font-headline mb-4">
+              为什么选择开邻智价云?
+            </h2>
+            <p className="text-slate-300 text-lg">
+              更智能的数据治理,更高效的渠道管理
+            </p>
           </div>
           <div className="grid grid-cols-1 md:grid-cols-4 gap-12">
             {[
-              { icon: Globe, title: "全域智控", desc: "支持全平台全时段配置的价格舆情监控系统" },
-              { icon: BellRing, title: "预警触达", desc: "多端最高T+1预警通知与1V1消息提醒" },
-              { icon: Users, title: "专业服务", desc: "专属服务团队,及时响应,提供数据服务" },
-              { icon: Lock, title: "数据无忧", desc: "专属技术团队支持个性化开发" },
+              {
+                icon: Globe,
+                title: "全域智控",
+                desc: "支持全平台全时段配置的价格舆情监控系统",
+              },
+              {
+                icon: BellRing,
+                title: "预警触达",
+                desc: "多端最高T+1预警通知与1V1消息提醒",
+              },
+              {
+                icon: Users,
+                title: "专业服务",
+                desc: "专属服务团队,及时响应,提供数据服务",
+              },
+              {
+                icon: Lock,
+                title: "数据无忧",
+                desc: "专属技术团队支持个性化开发",
+              },
             ].map((item, i) => (
-              <motion.div key={i} className="text-center space-y-4" {...itemReveal}>
+              <motion.div
+                key={i}
+                className="text-center space-y-4"
+                {...itemReveal}
+              >
                 <div className="inline-flex items-center justify-center w-20 h-20 rounded-2xl bg-blue-500/15 text-blue-400 mb-2">
                   <item.icon className="w-10 h-10" />
                 </div>
-                <h4 className="text-xl font-bold font-headline">{item.title}</h4>
+                <h4 className="text-xl font-bold font-headline">
+                  {item.title}
+                </h4>
                 <p className="text-slate-300 text-sm">{item.desc}</p>
               </motion.div>
             ))}
@@ -266,10 +350,17 @@ export default function HomePage() {
         </div>
       </motion.section>
 
-      <motion.section className="py-24 px-6 text-center bg-slate-950" {...sectionReveal}>
+      <motion.section
+        className="py-24 px-6 text-center bg-slate-950"
+        {...sectionReveal}
+      >
         <div className="max-w-3xl mx-auto space-y-8">
-          <h2 className="text-4xl font-extrabold font-headline text-white">技术沉淀,只为提供更可靠的解决方案!</h2>
-          <p className="text-xl text-slate-300 font-medium">做更具价值和效率的服务商</p>
+          <h2 className="text-4xl font-extrabold font-headline text-white">
+            技术沉淀,只为提供更可靠的解决方案!
+          </h2>
+          <p className="text-xl text-slate-300 font-medium">
+            做更具价值和效率的服务商
+          </p>
           <div className="flex flex-col md:flex-row items-center justify-center gap-4">
             <button
               onClick={() => navigate("/contact")}

+ 6 - 6
retrieval/vite.config.ts

@@ -1,22 +1,22 @@
-import react from '@vitejs/plugin-react';
-import path from 'path';
-import {defineConfig} from 'vite';
+import react from "@vitejs/plugin-react";
+import path from "path";
+import { defineConfig } from "vite";
 
 export default defineConfig(() => {
   return {
     plugins: [react()],
     resolve: {
       alias: {
-        '@': path.resolve(__dirname, '.'),
+        "@": path.resolve(__dirname, "."),
       },
     },
     server: {
       // HMR is disabled in AI Studio via DISABLE_HMR env var.
       // Do not modify—file watching is disabled to prevent flickering during agent edits.
-      hmr: process.env.DISABLE_HMR !== 'true',
+      hmr: process.env.DISABLE_HMR !== "true",
     },
     build: {
-      outDir: 'price',
+      outDir: "price",
     },
   };
 });

+ 6 - 12
saas/index.html

@@ -3,27 +3,21 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <meta name="description" content="一站式企微生态SCRM私域直播。" />
     <meta
-      name="description"
-      content="一站式企微生态SCRM私域直播。"
+      name="keywords"
+      content="开邻智数,企微生态,企业微信SCRM,私域直播,私域营销一体化,自建商城,私域电商,私域流量转化,整合营销,私域直播间,低延迟直播,SCRM精细化运营,渠道码,活码工具,客户标签管理,客户全生命周期,数据报表,互动雷达,营销场景工具,企微社群管理,快捷回复,用户行为数据打通,知识库智能工单,AIGC直播,数字人克隆,无代码页面搭建,多角色权限管理,优惠券拼团会员营销,社区资讯UGC,教培行业方案,医药行业方案,私域SaaS,数字化转型,获取方案"
     />
     <meta property="og:title" content="开邻智数" />
-    <meta
-      property="og:description"
-      content="一站式企微生态SCRM私域直播。"
-    />
+    <meta property="og:description" content="一站式企微生态SCRM私域直播。" />
     <meta name="twitter:card" content="summary" />
     <meta name="twitter:title" content="开邻智数" />
-    <meta
-      name="twitter:description"
-      content="一站式企微生态SCRM私域直播。"
-    />
+    <meta name="twitter:description" content="一站式企微生态SCRM私域直播。" />
     <link rel="icon" type="image/x-icon" href="/src/assets/images/logo.ico" />
-    <title>开邻智数</title>
+    <title>开邻智数-私域营销一体化解决方案</title>
   </head>
   <body>
     <div id="root"></div>
     <script type="module" src="/src/main.tsx"></script>
   </body>
 </html>
-

+ 3 - 3
saas/src/App.tsx

@@ -66,14 +66,14 @@ const Navbar = () => {
             </div>
           </div>
           <NavLink
-            to="https://www.kailin.com.cn"
+            to="https://home.kailin.com.cn"
             target="_blank"
             rel="noreferrer"
             className={`relative inline-flex items-center leading-none font-headline text-sm text-slate-300 hover:text-white font-medium transition-colors`}
           >
             关于我们
           </NavLink>
-          <NavLink
+          {/* <NavLink
             to="/contact"
             className={({ isActive }) =>
               `relative inline-flex items-center leading-none font-headline text-sm ${
@@ -91,7 +91,7 @@ const Navbar = () => {
                 )}
               </>
             )}
-          </NavLink>
+          </NavLink> */}
         </div>
 
         <button