Kaynağa Gözat

Merge branch 'master' into feature/v4.10.18

yuelujie 3 hafta önce
ebeveyn
işleme
4fd13f19f1
100 değiştirilmiş dosya ile 3955 ekleme ve 1435 silme
  1. 136 0
      src/index.yaml
  2. 8 0
      src/jfw/front/big-member.go
  3. 1433 1425
      src/jfw/front/front.go
  4. 10 2
      src/jfw/front/index.go
  5. 184 0
      src/jfw/front/material.go
  6. 6 1
      src/jfw/modules/app/src/app/front/shorturl.go
  7. 1 1
      src/jfw/modules/app/src/app/front/swordfish.go
  8. 191 0
      src/jfw/modules/app/src/web/templates/frontRouter/property/free/index.html
  9. 11 3
      src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html
  10. 1 0
      src/jfw/modules/publicapply/src/main.go
  11. 78 0
      src/jfw/modules/publicapply/src/material/material.go
  12. 2 0
      src/jfw/tag/a_init.go
  13. 58 0
      src/jfw/tag/menu_new.go
  14. 51 0
      src/tdk.yaml
  15. 360 0
      src/web/staticres/bid-fileinter/css/product-introduce.css
  16. BIN
      src/web/staticres/bid-fileinter/image/common/01-active.png
  17. BIN
      src/web/staticres/bid-fileinter/image/common/01.png
  18. BIN
      src/web/staticres/bid-fileinter/image/common/02-active.png
  19. BIN
      src/web/staticres/bid-fileinter/image/common/02.png
  20. BIN
      src/web/staticres/bid-fileinter/image/common/03-active.png
  21. BIN
      src/web/staticres/bid-fileinter/image/common/03.png
  22. BIN
      src/web/staticres/bid-fileinter/image/common/04-active.png
  23. BIN
      src/web/staticres/bid-fileinter/image/common/04.png
  24. BIN
      src/web/staticres/bid-fileinter/image/common/bottom-banner-bg.png
  25. BIN
      src/web/staticres/bid-fileinter/image/common/power-bg.png
  26. BIN
      src/web/staticres/bid-fileinter/image/common/power-desc-1.png
  27. BIN
      src/web/staticres/bid-fileinter/image/common/power-desc-2.png
  28. BIN
      src/web/staticres/bid-fileinter/image/common/power-desc-3.png
  29. BIN
      src/web/staticres/bid-fileinter/image/common/power-desc-4.png
  30. BIN
      src/web/staticres/bid-fileinter/image/cpfx/banner-bg1@2x.png
  31. BIN
      src/web/staticres/bid-fileinter/image/cpfx/banner-bg2@2x.png
  32. BIN
      src/web/staticres/bid-fileinter/image/cpfx/content-step-1@2x.png
  33. BIN
      src/web/staticres/bid-fileinter/image/cpfx/content-step-2@2x.png
  34. BIN
      src/web/staticres/bid-fileinter/image/cpfx/content-step-3@2x.png
  35. BIN
      src/web/staticres/bid-fileinter/image/hydc/banner-bg1@2x.png
  36. BIN
      src/web/staticres/bid-fileinter/image/hydc/banner-bg2@2x.png
  37. BIN
      src/web/staticres/bid-fileinter/image/hydc/banner-bg3@2x.png
  38. BIN
      src/web/staticres/bid-fileinter/image/hydc/content-step-1@2x.png
  39. BIN
      src/web/staticres/bid-fileinter/image/hydc/content-step-2@2x.png
  40. BIN
      src/web/staticres/bid-fileinter/image/hydc/content-step-3@2x.png
  41. BIN
      src/web/staticres/bid-fileinter/image/khtz/banner-bg1@2x.png
  42. BIN
      src/web/staticres/bid-fileinter/image/khtz/banner-bg2@2x.png
  43. BIN
      src/web/staticres/bid-fileinter/image/khtz/banner-bg3@2x.png
  44. BIN
      src/web/staticres/bid-fileinter/image/khtz/content-step-1@2x.png
  45. BIN
      src/web/staticres/bid-fileinter/image/khtz/content-step-2@2x.png
  46. BIN
      src/web/staticres/bid-fileinter/image/khtz/content-step-3@2x.png
  47. BIN
      src/web/staticres/bid-fileinter/image/khtz/content-step-4@2x.png
  48. BIN
      src/web/staticres/bid-fileinter/image/project/jjdqmx-banner-bg1.png
  49. BIN
      src/web/staticres/bid-fileinter/image/project/jjdqmx-step-bg1.png
  50. BIN
      src/web/staticres/bid-fileinter/image/project/nzjxm-banner-bg1@2x.png
  51. BIN
      src/web/staticres/bid-fileinter/image/project/nzjxm-step-bg-1@2x.png
  52. BIN
      src/web/staticres/bid-fileinter/image/qbgl/banner-bg1.png
  53. BIN
      src/web/staticres/bid-fileinter/image/qbgl/banner-bg2.png
  54. BIN
      src/web/staticres/bid-fileinter/image/qbgl/content-step-1.png
  55. BIN
      src/web/staticres/bid-fileinter/image/qbgl/content-step-2.png
  56. BIN
      src/web/staticres/bid-fileinter/image/qbgl/content-step-3.png
  57. BIN
      src/web/staticres/bid-fileinter/image/qbgl/content-step-4.png
  58. BIN
      src/web/staticres/bid-fileinter/image/qqxm/banner-bg1@2x.png
  59. BIN
      src/web/staticres/bid-fileinter/image/qqxm/banner-bg2@2x.png
  60. BIN
      src/web/staticres/bid-fileinter/image/qqxm/content-step-1@2x.png
  61. BIN
      src/web/staticres/bid-fileinter/image/qqxm/content-step-2@2x.png
  62. BIN
      src/web/staticres/bid-fileinter/image/sjgl/banner-bg1.png
  63. BIN
      src/web/staticres/bid-fileinter/image/sjgl/banner-bg2.png
  64. BIN
      src/web/staticres/bid-fileinter/image/sjgl/banner-bg3.png
  65. BIN
      src/web/staticres/bid-fileinter/image/sjgl/content-step-1.png
  66. BIN
      src/web/staticres/bid-fileinter/image/sjgl/content-step-2.png
  67. BIN
      src/web/staticres/bid-fileinter/image/sjgl/content-step-4.png
  68. BIN
      src/web/staticres/bid-fileinter/image/yxgl/banner-1.png
  69. BIN
      src/web/staticres/bid-fileinter/image/yxgl/banner-2.png
  70. BIN
      src/web/staticres/bid-fileinter/image/yxgl/content-step-1.png
  71. BIN
      src/web/staticres/bid-fileinter/image/yxgl/content-step-2.png
  72. BIN
      src/web/staticres/bid-fileinter/image/yxgl/content-step-3.png
  73. BIN
      src/web/staticres/bid-fileinter/image/yxgl/content-step-4.png
  74. BIN
      src/web/staticres/bid-fileinter/image/yyszb/banner-bg1@2x.png
  75. BIN
      src/web/staticres/bid-fileinter/image/yyszb/banner-bg2@2x.png
  76. BIN
      src/web/staticres/bid-fileinter/image/yyszb/content-step-1@2x.png
  77. BIN
      src/web/staticres/bid-fileinter/image/yyszb/content-step-2@2x.png
  78. BIN
      src/web/staticres/bid-fileinter/image/yyszb/content-step-3@2x.png
  79. BIN
      src/web/staticres/bid-fileinter/image/yyszb/content-step-4@2x.png
  80. 633 0
      src/web/staticres/bid-fileinter/js/product-introduce-config.js
  81. 323 0
      src/web/staticres/bid-fileinter/js/product-introduce.js
  82. 6 3
      src/web/staticres/big-member/css/page_index.css
  83. 244 0
      src/web/staticres/brand/css/property.css
  84. BIN
      src/web/staticres/brand/img/property/1.png
  85. BIN
      src/web/staticres/brand/img/property/2.png
  86. BIN
      src/web/staticres/brand/img/property/3.png
  87. BIN
      src/web/staticres/brand/img/property/4.png
  88. BIN
      src/web/staticres/brand/img/property/5.png
  89. BIN
      src/web/staticres/brand/img/property/6.png
  90. BIN
      src/web/staticres/brand/img/property/7.png
  91. BIN
      src/web/staticres/brand/img/property/bg.png
  92. BIN
      src/web/staticres/brand/img/property/f_bg.png
  93. BIN
      src/web/staticres/brand/img/property/q_bg.png
  94. BIN
      src/web/staticres/brand/img/property/s1_bg.png
  95. BIN
      src/web/staticres/brand/img/property/s2_bg.png
  96. BIN
      src/web/staticres/brand/img/property/s_bg.png
  97. BIN
      src/web/staticres/brand/img/property/title.png
  98. 39 0
      src/web/staticres/common-module/pc-dialog/css/simple-leave-info.css
  99. 34 0
      src/web/staticres/common-module/pc-dialog/js/simple-leave-info-template.js
  100. 146 0
      src/web/staticres/common-module/pc-dialog/js/simple-leave-info.js

+ 136 - 0
src/index.yaml

@@ -1,4 +1,106 @@
 topMenu:
+  - title: 商机数据
+    child:
+      - name: 早期商机
+        child: 
+          - name: 项目立项审批
+            href: /list/spxm/
+          - name: 采购意向
+            href: /list/stype/CGYX.html
+            class: red
+          - name: 政府预算商机
+            href:
+          - name: 前期项目
+            href: /front/product/introduce/qqxm.html
+            class: red
+          - name: 专项债商机
+            href:
+          - name: 政策法规
+            href: /jySchool/zcfg/index.html
+          - name: 合约到期项目
+            href: /list/wydqxm/
+      - name: 实时商机
+        child:
+          - name: 招标预告
+            href: /list/stype/ZBYG.html
+          - name: 招标公告
+            href: /list/stype/ZBGG.html
+            class: red
+          - name: 招标结果
+            href: /list/stype/ZBJG.html
+          - name: 招标信用
+            href: /list/stype/ZBXYXX.html
+          - name: 企业直采
+            href: /list/stype/QYZC.html
+            class: red
+          - name: 业主委托项目
+            href: /list/yzxm/
+  - title: 应用场景
+    child:
+      - name: 客户拓展
+        child:
+          - name: 商机线索获取
+            href: /front/product/introduce/khtz.html?tab=0
+            class: red
+          - name: 潜在客户营销
+            href: /front/product/introduce/khtz.html?tab=1
+            class: red
+          - name: 合作渠道拓展
+            href: /front/product/introduce/khtz.html?tab=2
+          - name: 重点客户筛选
+            href: /front/product/introduce/khtz.html?tab=3
+      - name: 市场分析
+        child:
+          - name: 行业市场分析
+            href: /big/page/sc
+            class: red
+          - name: 行业洞察
+            href: front/product/introduce/hydc.html
+          - name: 客户分析
+            href: /jylab/purSearch/index.html
+          - name: 竞争对手分析
+            href: /swordfish/page_big_pc/jylab/entSearch/index.html
+            class: red
+          - name: 渠道分析
+            href: /big/page/yw
+          - name: 产品分析
+            href: /front/product/introduce/cpfx.html
+          - name: 投标决策分析
+            href: /big/page/tb?auto=1
+            class: red
+      - name: 商机管理
+        child:
+          - name: 商机规则定制
+            href: /front/product/introduce/sjgl.html?tab=0
+          - name: 商机分配跟进
+            href: /front/product/introduce/sjgl.html?tab=1
+            class: red
+          - name: 动态情报推送
+            href: /front/product/introduce/sjgl.html?tab=2
+          - name: 商机跟进复盘
+            href: /front/product/introduce/sjgl.html?tab=3
+  - title: 数据产品
+    child:
+      - name: 结构化数据
+        href: /front/structed/pc_index.html
+        class: red
+      - name: 情报管理
+        href: /front/product/introduce/qbgl.html
+      - name: 营销管理
+        href: /front/product/introduce/yxgl.html
+      - name: 数据市场
+        href: /front/dataMarket/index
+        class: red
+      - name: 数据自助导出
+        href: /front/dataExport/toSieve
+      - name: 运营商专版
+        href: /front/product/introduce/yyszb.html
+      - name: 物业专版
+        href: /swordfish/frontPage/brand/free/property
+      - name: 医械通
+        href: /hj/pc/yxtsjgwyxy.html
+
+topMenuOld:
   - title: 招标采购
     child:
       - name: 招标公告
@@ -109,6 +211,40 @@ topMenu:
       - name: 投标项目管理
         href: /front/routerRelay/tbxmgl
 
+serviceMenu:
+  - title: 服务
+    child:
+      - name: 数据定制
+        href: /front/dataMarket/customExport
+      - name: 数据对接
+        href: /front/dataMarket/dataInterface
+      - name: 咨询服务
+        href: /swordfish/frontPage/serviceSystem/free/consult
+      - name: 标书代写
+        href: /swordfish/frontPage/bidedoc/free/index
+      - name: 中标必听课
+        href: /jyxspc
+      - name: 企业认证
+        href: /swordfish/frontPage/enterpriseCertificatio/free/index
+      - name: 供需发布
+        href: /swordfish/frontPage/InformationDistribution/free/index
+        class: red
+      - name: 供应商寻源
+        href:
+  - title: 商务合作
+    child:
+      - name: 广告合作
+        href: /front/advservices.html
+      - name: 渠道代理
+        href: /swordfish/frontPage/cooperation/free/index
+      - name: 商务合作
+        href: /swordfish/frontPage/cooperation/free/index
+        class: red
+      - name: 展会报名
+        href: /exhibition/list/pc/index.html
+      - name: 营销合作
+        href: /swordfish/frontPage/cooperation/free/index
+
 # 区位配置
 areaLocation:
   - name: 华北

+ 8 - 0
src/jfw/front/big-member.go

@@ -29,6 +29,14 @@ func (s *BigMemberAction) VIPViewPage(htmlName string) {
 		}
 		s.T["power"] = power
 	}
+	if s.GetString("auto") == "1" {
+		//投标决策分析有权限自动跳转至功能页面
+		if bigBaseMsg.PowerMap[5] && htmlName == "tb" {
+			s.Redirect("/page_workDesktop/work-bench/app/big/analysis_result")
+			return
+		}
+	}
+	//投标决策分析
 	s.T["member_status"] = bigBaseMsg.Status
 	s.T["member_trial"] = bigBaseMsg.HasTrial
 	s.Render("/big-member/pc/page_"+htmlName+".html", &s.T)

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1433 - 1425
src/jfw/front/front.go


+ 10 - 2
src/jfw/front/index.go

@@ -25,7 +25,7 @@ import (
 
 type NewIndex struct {
 	*xweb.Action
-	newIndex    xweb.Mapper `xweb:"/"`                       //首页改版
+	newIndex    xweb.Mapper `xweb:"/(oldIndex|)"`            //首页改版
 	routerRelay xweb.Mapper `xweb:"/front/routerRelay/(.*)"` //企业服务中转
 	appDownload xweb.Mapper `xweb:"/front/appDownload"`      //新app下载页面
 }
@@ -147,7 +147,7 @@ func (nIndex *NewIndex) RouterRelay(code string) {
 }
 
 // NewIndex 新版首页改版
-func (nIndex *NewIndex) NewIndex() error {
+func (nIndex *NewIndex) NewIndex(flag string) error {
 	sessVal := nIndex.Session().GetMultiple()
 	userId := util.ObjToString(sessVal["userId"])
 
@@ -190,6 +190,8 @@ func (nIndex *NewIndex) NewIndex() error {
 	}
 	//顶部菜单
 	nIndex.T["topMenu"] = g.Cfg("index").MustGet(context.Background(), "topMenu").Maps()
+	nIndex.T["topMenuOld"] = g.Cfg("index").MustGet(context.Background(), "topMenuOld").Maps()
+	nIndex.T["serviceMenu"] = g.Cfg("index").MustGet(context.Background(), "serviceMenu").Maps()
 	//招标公告
 	biddingList, _ := GetRecommendBidZone(5, 16)
 	nIndex.T["newbids"] = map[string]interface{}{
@@ -278,6 +280,12 @@ func (nIndex *NewIndex) NewIndex() error {
 	nIndex.T["simpleTemplateData"] = map[string]interface{}{"XwebVer": nIndex.T["XwebVer"]}
 	//文库
 	nIndex.T["docsClass"], nIndex.T["docsData"] = GetDocsData()
+	nIndex.T["jyIndex"] = true
+	//c, err := nIndex.Request.Cookie("loadOldPage")
+	//if (err == nil && c.Value == "1")
+	if flag == "oldIndex" {
+		return nIndex.Render("/pc/newIndexOld.html", &nIndex.T)
+	}
 	return nIndex.Render("/pc/newIndex.html", &nIndex.T)
 }
 

+ 184 - 0
src/jfw/front/material.go

@@ -0,0 +1,184 @@
+package front
+
+import (
+	util "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jybase/redis"
+	"app.yhyue.com/moapp/jypkg/public"
+	"bytes"
+	"encoding/base64"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"image"
+	"image/jpeg"
+	"image/png"
+	"jy/src/jfw/config"
+	"log"
+	"net/http"
+	"sync"
+	"time"
+)
+
+type Material struct {
+	*xweb.Action
+	//fileDownload xweb.Mapper `xweb:"/material/fileDownload"` //移动端消息三级页
+	linkTransfer xweb.Mapper `xweb:"/material/(\\w+)/(.*)"` //移动端消息三级页 物料id 渠道码
+}
+
+func init() {
+	xweb.AddAction(&Material{})
+	time.AfterFunc(2*time.Minute, SaveLogTask)
+}
+
+func (m *Material) FileDownload() error {
+	ossUrl := m.GetString("ossUrl")
+	if ossUrl == "" {
+		return errors.New("ossUrl参数缺失")
+	}
+	img, imgType, err := downloadImage(ossUrl)
+	if err != nil {
+		log.Println("文件下载失败:", ossUrl)
+		return err
+	}
+	imgBase, err := ImageToBase64(img, imgType)
+	if imgBase != "" && err == nil {
+		m.ServeJson(map[string]interface{}{
+			"imgBase": fmt.Sprintf("data:%s;base64,%s", imgType, imgBase),
+		})
+		return nil
+	}
+	return err
+}
+
+// 物料二维码链接或者图文链接中转接口  //链接格式   /material?mid=
+func (m *Material) LinkTransfer(mid, personChannel string) error {
+	sess := m.Session().GetMultiple()
+	mlid := util.IntAll(mid)
+	types, _ := m.GetInteger("types")
+
+	realUrl, imgWebpage := "", ""
+	res := public.Mysql.SelectBySql("SELECT qrcode_url,img_webpage FROM bi_service.operating_materials WHERE id = ?", mlid)
+	if res != nil && len(*res) > 0 {
+		realUrl = util.InterfaceToStr((*res)[0]["qrcode_url"])
+		imgWebpage = util.InterfaceToStr((*res)[0]["img_webpage"])
+	}
+	log.Println("重定向链接:", types, mlid, realUrl, imgWebpage)
+	if realUrl == "" && imgWebpage == "" {
+		return m.Redirect(util.InterfaceToStr(config.Sysconfig["webdomain"]))
+	}
+	redis.Put("limitation", fmt.Sprintf("firstVisitTagByWX_%s", m.Session().Id()), fmt.Sprintf("materials_%s", personChannel), cacheTimeOut) //登录注册 用户标识
+	addLog(sess, m.Request, mlid, types, personChannel, realUrl)
+
+	if types == 1 && imgWebpage != "" {
+		return m.Redirect(imgWebpage)
+	} else if types == 0 && realUrl != "" {
+		return m.Redirect(realUrl)
+	}
+	return m.Redirect(util.InterfaceToStr(config.Sysconfig["webdomain"]))
+}
+
+func ImageToBase64(img image.Image, format string) (string, error) {
+	var buf bytes.Buffer
+	switch format {
+	case "jpeg", "jpg":
+		if err := jpeg.Encode(&buf, img, &jpeg.Options{Quality: 90}); err != nil {
+			return "", err
+		}
+	case "png":
+		if err := png.Encode(&buf, img); err != nil { // 需导入 image/png
+			return "", err
+		}
+	default:
+		return "", fmt.Errorf("unsupported format: %s", format)
+	}
+	// Base64 编码
+	encoded := base64.StdEncoding.EncodeToString(buf.Bytes())
+	return encoded, nil
+}
+
+// 下载图片
+func downloadImage(url string) (image.Image, string, error) {
+	resp, err := http.Get(url)
+	if err != nil {
+		return nil, "", err
+	}
+	defer resp.Body.Close()
+
+	img, imgType, err := image.Decode(resp.Body)
+	if err != nil {
+		return nil, "", err
+	}
+
+	return img, imgType, nil
+}
+
+// 内存缓存日志数量,超过此数量存库
+var nc = 100
+
+// 内存缓存日志map
+var arr = make([]map[string]interface{}, 0)
+
+// 对map的同步
+var lock sync.Mutex
+
+func addLog(sess map[string]interface{}, req *http.Request, mid, types int, parsonchannel, realUrl string) {
+	//log.Println("存储访问日志")
+	timeNow := time.Now()
+	agent := req.Header.Get("user-agent")
+	md, _ := json.Marshal(req.Form)
+	str := string(md)
+	logs := map[string]interface{}{
+		"types":         types,
+		"materialid":    mid,
+		"personchannel": parsonchannel,
+		"date":          timeNow.Unix(),
+		"ip":            req.Proto,
+		"refer":         req.Referer(),
+		"year":          timeNow.Year(),
+		"month":         timeNow.Month(),
+		"day":           timeNow.Day(),
+		"hour":          timeNow.Hour(),
+		"minutes":       timeNow.Minute(),
+		"mdescribe":     str,
+		"client":        agent,
+		"os":            util.GetOS(agent),
+		"browse":        util.GetBrowse(agent),
+		"method":        req.Method,
+		"url":           req.RequestURI,
+		"realUrl":       realUrl,
+	}
+	if userId := util.InterfaceToStr(sess["mgoUserId"]); userId != "" {
+		logs["userid"] = userId
+		logs["nickname"] = util.InterfaceToStr(sess["s_nickname"])
+		logs["positionid"] = util.IntAll(sess["positionId"])
+	}
+
+	lock.Lock()
+	arr = append(arr, logs)
+	if len(arr) >= nc {
+		tmp := arr
+		arr = make([]map[string]interface{}, 0)
+		go func() {
+			log.Println("save..visit..log", len(tmp))
+			public.Mgo_Log.SaveBulk("material_logs", tmp...)
+		}()
+	}
+	lock.Unlock()
+}
+
+// 定时保存日志
+func SaveLogTask() {
+	lock.Lock()
+	if len(arr) >= 1 {
+		tmp := arr
+		arr = make([]map[string]interface{}, 0)
+		go func() {
+			log.Println("timer..save..visit..log", len(tmp))
+			public.Mgo_Log.SaveBulk("material_logs", tmp...)
+		}()
+	}
+
+	lock.Unlock()
+	time.AfterFunc(5*time.Minute, SaveLogTask)
+}

+ 6 - 1
src/jfw/modules/app/src/app/front/shorturl.go

@@ -202,7 +202,7 @@ func (s *Short) Article(contentType, stype, id string) error {
 	if len(ips) > 0 {
 		ipTrue = config.IpList.Match(ips[0])
 	}
-	log.Printf("三级页userid:%s ips %v", userId, ips)
+	log.Printf("三级页userid:%s, ips %v, ipTrue:%v, refer:%s, url:%s", userId, ips, ipTrue, s.Refer(), s.Url())
 	if sid != "" {
 		obj = wxvisitD(sid, userId, (isVip && isOldVip) || isEntniche || isMember)
 	}
@@ -426,6 +426,11 @@ func (s *Short) Article(contentType, stype, id string) error {
 			}
 			s.T["currentLocation"] = currentLocation
 		}
+		//中标候选人
+		obj["isCandidate"] = false
+		if obj["winnerorder"] != nil {
+			obj["isCandidate"] = true
+		}
 		s.T["obj"] = obj
 		s.T["isIosExam"], s.T["isIosExamPhone"], _, _ = IosExamInfo(s.Action, false, false)
 		content, err := s.Render4Cache("/weixin/wxinfocontent.html", &s.T)

+ 1 - 1
src/jfw/modules/app/src/app/front/swordfish.go

@@ -538,7 +538,7 @@ func wxvisitD(sid, userId string, isPayUser bool) (objdata map[string]interface{
 			if !isPayUser && (util.ObjToString(obj["subtype"]) == "拟建" || util.ObjToString(obj["subtype"]) == "采购意向") {
 				for k := range obj {
 					if k != "title" && k != "area" && k != "subtype" && k != "detail" && k != "procurementlist" && k != "toptype" && k != "publishtime" && k != "budget" && k != "bidamount" && k != "site" && k != "spidercode" && k != "recommended_service" && k != "projectinfo" &&
-						k != "buyerclass" && k != "owner" && k != "total_investment" && k != "projectaddr" && k != "projectperiod" && k != "approvedept" && k != "approvecontent" && k != "approvecode" && k != "approvenumber" && k != "approvetime" && k != "approvestatus" && k != "project_scale" && k != "projectname" {
+						k != "buyerclass" && k != "owner" && k != "total_investment" && k != "projectaddr" && k != "projectperiod" && k != "approvedept" && k != "approvecontent" && k != "approvecode" && k != "approvenumber" && k != "approvetime" && k != "approvestatus" && k != "project_scale" && k != "projectname" && k != "winnerorder" {
 						delete(obj, k)
 					}
 				}

+ 191 - 0
src/jfw/modules/app/src/web/templates/frontRouter/property/free/index.html

@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html lang="zh-CN" style="font-size: 50px;">
+
+<head>
+	{{include "/big-member/meta.html"}}
+	<title>物业版招投标</title>
+  <link rel="stylesheet" href=//cdn-common.jianyu360.com/cdn/lib/reset-css/5.0.1/reset.min.css />
+  <link rel="stylesheet" href="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/property/css/index.css?v={{Msg "seo" "version"}}">
+</head>
+
+<body>
+  <div class="j-container property_container">
+    {{include "/big-member/header.html"}}
+    <div class="j-main" id="property">
+      <div class="head_img">
+        <div class="head_img_content">
+          <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/property/img/banner.png?v={{Msg "seo" "version"}}"/>
+        </div>
+      </div>
+      <div class="property-introduce">
+        <div class="services">
+          <div class="services_content">
+            <h3 class="title">专注物业领域   提供精准服务</h3>
+            <div class="services_content_list">
+              <div class="services_content_item">实时项目</div>
+              <div class="services_content_item">潜在项目</div>
+              <div class="services_content_item">行业分析</div>
+              <div class="services_content_item long">业主分析</div>
+              <div class="services_content_item long">竞争企业分析</div>
+            </div>
+          </div>
+          <div class="services_data">
+            <div class="services_data_item">
+              <p class="top">覆盖全国</p>
+              <p class="center"><span class="large">139</span>万+</p>
+              <p class="bottom">项目数量</p>
+            </div>
+            <div class="services_data_item">
+              <p class="top">每日更新</p>
+              <p class="center"><span class="large">1</span>万+</p>
+              <p class="bottom">物业实时招标</p>
+            </div>
+            <div class="services_data_item">
+              <p class="top">每日监测全国</p>
+              <p class="center"><span class="large">3</span>万+</p>
+              <p class="bottom">即将到期项目</p>
+            </div>
+            <div class="services_data_item">
+              <p class="top">覆盖全国</p>
+              <p class="center"><span class="large">21</span>万+</p>
+              <p class="bottom">物业企业</p>
+            </div>
+          </div>
+        </div>
+        <div class="question">
+          <h3 class="title">解决的问题</h3>
+          <div class="question_content"> 
+            <div class="question_content_item"> 
+              <div class="question_content_item_title"> 
+                <p>市场拓展</p>
+                <p>针对物业公司市场拓展难的痛点,剑鱼物业专版提供物业相关所有业务类型存量项目与新增项目,实时生成物业情报,大大提高市场人员业务拓展的效率。</p>
+              </div>
+            </div>
+            <div class="question_content_item"> 
+              <div class="question_content_item_title"> 
+                <p>市场战略规划</p>
+                <p>物业专版收录历年物业项目信息、物业相关企业信息,生成决策性分析报告、客户画像分析,帮助企业全面了解业主及竞争企业情况,协助企业快速调整对标决策。</p>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="advantage">
+          <h3 class="title">产品优势</h3>
+          <div class="advantage_content">
+            <div class="advantage_content_item">
+              <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/property/img/1.png?v={{Msg "seo" "version"}}"/>
+              <div class="advantage_content_item_title">
+                <p>实时获取<br/>物业新增项目</p>
+              </div>
+            </div>
+            <div class="advantage_content_item">
+              <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/property/img/2.png?v={{Msg "seo" "version"}}"/>
+              <div class="advantage_content_item_title">
+                <p>实时监测<br/>合约到期项目</p>
+              </div>
+            </div>
+            <div class="advantage_content_item">
+              <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/property/img/3.png?v={{Msg "seo" "version"}}"/>
+              <div class="advantage_content_item_title">
+                <p>提前获知<br/>采购意向项目</p>
+              </div>
+            </div>
+            <div class="advantage_content_item">
+              <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/property/img/4.png?v={{Msg "seo" "version"}}"/>
+              <div class="advantage_content_item_title">
+                <p>提供企业<br/>联系人通讯录</p>
+              </div>
+            </div>
+            <div class="advantage_content_item">
+              <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/property/img/5.png?v={{Msg "seo" "version"}}"/>
+              <div class="advantage_content_item_title">
+                <p>提供项目<br/>竞标决策分析</p>
+              </div>
+            </div>
+            <div class="advantage_content_item">
+              <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/property/img/6.png?v={{Msg "seo" "version"}}"/>
+              <div class="advantage_content_item_title">
+                <p>提供业主<br/>需求分析</p>
+              </div>
+            </div>
+            <div class="advantage_content_item long">
+              <img src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/property/img/7.png?v={{Msg "seo" "version"}}"/>
+              <div class="advantage_content_item_title">
+                <p>提供竞争<br/>企业分析</p>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="j-footer">
+      <div class="j-button-group">
+        <button class="j-button-confirm property-btn">立即咨询物业专版</button>
+      </div>
+    </div>
+  </div>
+</body>
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/public/js/utils.js?v={{Msg "seo" "version"}}'></script>
+<script src=//cdn-common.jianyu360.com/cdn/lib/jquery/3.6.0/jquery.min.js></script>
+<script>
+  function toastFn(text, duration) {
+    if(!duration) {
+      duration = 2000
+    }
+    if($('.custom-toast')){
+      $('.custom-toast').remove()
+    }
+    var _html = ""
+    _html+='<div class="custom-toast"><div class="mask" style="background-color: transparent;"></div><div class="toast-container">'
+    _html+='<span>' + text + '</span></div></div>'
+    $('body').append(_html)
+    setTimeout(function(){
+      $(".custom-toast").fadeOut().remove();
+    }, duration)
+  }
+  function checkPower(list) {
+    var power = 'bi_yx_wyzb'
+    return Array.isArray(list) && list.indexOf(power) !== -1
+  }
+  function getPowerList() {
+    var _this = this
+    $.ajax({
+      url: '/jyapi/resourceCenter/haspowers',
+      type: 'POST',
+      success: function(res) {
+        if (res && Array.isArray(res.data)) {
+          if (checkPower(res.data)) {
+            $('.property-btn').text('请去PC端使用').attr('power', 'bi_yx_wyzb')
+          } else {
+            $('.property-btn').text('立即咨询物业专版').removeAttr('power')
+          }
+        }
+      }
+    })
+  }
+  $(function () {
+    getPowerList()
+    $('.property-btn').click(function () {
+      var loginFlag = {{if .T.loginFlag}}{{.T.loginFlag}}{{else}}false{{end}}
+      if(loginFlag){
+        var source = utils.$envs.inH5 ? 'h5_property_consult' : 'app_property_consult'
+        var power = $(this).attr('power')
+        if(power) {
+          // console.log('请去pc端使用');
+          toastFn('请去PC端使用', 2000)
+        } else {
+          window.location.href="/jyapp/frontPage/bigmember/free/perfect_info?source=" + source
+        }
+      }else{
+        window.location.href= "/jyapp/free/login?url=/jyapp/frontPage/bigmember/free/perfect_info?source=" + source
+      }
+    });
+    $('.j-header .header-left').on('click', function () {
+        window.history.back()
+    })
+  });
+</script>
+{{include "/common/js.html"}}
+<!--百度统计end-->
+{{include "/common/baiducc.html"}}
+</html>

+ 11 - 3
src/jfw/modules/app/src/web/templates/weixin/wxinfocontent.html

@@ -900,7 +900,11 @@
                         </ul>
                     </div>
                 </div>
-                <div class="explain" style="display:none;">*以上摘要信息由剑鱼标讯智能提取。如有误差,请联系客服进行处理。</div>
+      {{if .T.obj.isCandidate }}
+			        <div class="explain" style="display:none;">*该信息为<span style="color: #FF3A20">候选人公示</span>,具体<span style="color: #FF3A20">中标信息未确认</span>,请以实际中标通知为准!如有误差,请联系客服处理。</div>
+			{{else}}
+            <div class="explain" style="display:none;">*以上摘要信息由剑鱼标讯智能提取。如有误差,请联系客服进行处理。</div>
+      {{end}}
                 <div class="lead-btn" style="height: 1.2rem;background: #F5F6F7;border-radius: 8px; color:#2cb7ca;margin: 16px 0;display:none; align-items: center;padding: 0 .32rem;" onclick="adv_statistics(this)">
                     <a class="adv_dataexprt" style="width: .48rem; height: .48rem;margin-right: .24rem;display: flex;"></a>
                     <a class="adv_center" style="display: flex;flex-direction: column;flex: 1;">
@@ -1200,6 +1204,10 @@
     var isVIP={{.T.isVip}};
     var hsn = {{.T.obj.hasSession}};
     var id = {{.T.obj._id}}; // 招标信息id
+    var hasWaitWinnerState = {{.T.obj.isCandidate}}
+    var fixWinnerLabel = hasWaitWinnerState ? '中标候选人' : '中标单位'
+    var fixWinnerMoneyLabel = hasWaitWinnerState ? '投标金额(元)' : '中标金额(元)'
+//
     var title = {{.T.obj.title}};
     var s_words = {{.T.keywords}};
     var url = {{.T.obj.href}};
@@ -2985,7 +2993,7 @@
           }
 
           if(count>=5){
-            	var bidInfohtml='<li><p class="name">中标单位</p><div style="flex: 1;">'
+            	var bidInfohtml='<li><p class="name">'+fixWinnerLabel+'</p><div style="flex: 1;">'
               var indexN =0;
               var winnerArr =[];
                 $("#bidInfoTitle").show();
@@ -3001,7 +3009,7 @@
                     }
                 }
               }
-              bidInfohtml +='<li class="bbm0 needLogin"><p class="name">中标金额(元)</p><p class="textcontent">'+rerbidamount+'</p></li>'
+              bidInfohtml +='<li class="bbm0 needLogin"><p class="name">'+fixWinnerMoneyLabel+'</p><p class="textcontent">'+rerbidamount+'</p></li>'
               if(winnertel!=""){
                   bidInfohtml +='<li class="bbm0 winnertel bigwinnertel needLogin" style="position: relative; margin-bottom: 10px;border-bottom: 0px !important"><p class="name">联系方式</p>'
                   if ((isVIP!=null&&isVIP)||(isEntniche!=null&&isEntniche)){

+ 1 - 0
src/jfw/modules/publicapply/src/main.go

@@ -34,6 +34,7 @@ import (
 	_ "jy/src/jfw/modules/publicapply/src/entCreditReport"
 	_ "jy/src/jfw/modules/publicapply/src/feedback"
 	_ "jy/src/jfw/modules/publicapply/src/history"
+	_ "jy/src/jfw/modules/publicapply/src/material"
 	_ "jy/src/jfw/modules/publicapply/src/shareFission"
 	_ "jy/src/jfw/modules/publicapply/src/subscribe"
 	_ "jy/src/jfw/modules/publicapply/src/subscribePush"

+ 78 - 0
src/jfw/modules/publicapply/src/material/material.go

@@ -0,0 +1,78 @@
+package material
+
+import (
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"bytes"
+	"encoding/base64"
+	"errors"
+	"fmt"
+	"image"
+	"image/jpeg"
+	"image/png"
+	"log"
+	"net/http"
+)
+
+type Material struct {
+	*xweb.Action
+	fileDownload xweb.Mapper `xweb:"/material/fileDownload"` //移动端消息三级页
+}
+
+func init() {
+	xweb.AddAction(&Material{})
+}
+
+func (m *Material) FileDownload() error {
+	ossUrl := m.GetString("ossUrl")
+	if ossUrl == "" {
+		return errors.New("ossUrl参数缺失")
+	}
+	img, imgType, err := downloadImage(ossUrl)
+	if err != nil {
+		log.Println("文件下载失败:", ossUrl)
+		return err
+	}
+	imgBase, err := ImageToBase64(img, imgType)
+	if imgBase != "" && err == nil {
+		m.ServeJson(map[string]interface{}{
+			"imgBase": fmt.Sprintf("data:%s;base64,%s", imgType, imgBase),
+		})
+		return nil
+	}
+	return err
+}
+
+func ImageToBase64(img image.Image, format string) (string, error) {
+	var buf bytes.Buffer
+	switch format {
+	case "jpeg", "jpg":
+		if err := jpeg.Encode(&buf, img, &jpeg.Options{Quality: 90}); err != nil {
+			return "", err
+		}
+	case "png":
+		if err := png.Encode(&buf, img); err != nil { // 需导入 image/png
+			return "", err
+		}
+	default:
+		return "", fmt.Errorf("unsupported format: %s", format)
+	}
+	// Base64 编码
+	encoded := base64.StdEncoding.EncodeToString(buf.Bytes())
+	return encoded, nil
+}
+
+// 下载图片
+func downloadImage(url string) (image.Image, string, error) {
+	resp, err := http.Get(url)
+	if err != nil {
+		return nil, "", err
+	}
+	defer resp.Body.Close()
+
+	img, imgType, err := image.Decode(resp.Body)
+	if err != nil {
+		return nil, "", err
+	}
+
+	return img, imgType, nil
+}

+ 2 - 0
src/jfw/tag/a_init.go

@@ -14,6 +14,8 @@ func init() {
 	xweb.RootApp().AddTmplVar("AdDetail", AdDetail)
 	xweb.RootApp().AddTmplVar("JyCms", jyutil.GetFirstJyCms)
 	xweb.RootApp().AddTmplVar("JyTopMenu", TopMenu)
+	xweb.RootApp().AddTmplVar("JyTopNewMenu", TopMenuNew)
+	xweb.RootApp().AddTmplVar("HasLoginFunc", HasLoginFunc)
 	xweb.RootApp().AddTmplVar("JyBottomLink", BottomLink)
 	xweb.RootApp().AddTmplVar("Division", Division)
 	xweb.RootApp().AddTmplVar("ParseHtml", ParseHtml)

+ 58 - 0
src/jfw/tag/menu_new.go

@@ -0,0 +1,58 @@
+package tag
+
+import (
+	"app.yhyue.com/moapp/jybase/redis"
+	"encoding/json"
+	"github.com/gogf/gf/v2/util/gconv"
+	"log"
+	"net/url"
+)
+
+type Menu struct {
+	Name   string `json:"name"`
+	Layout string `json:"layout"`
+	Href   string `json:"href,omitempty"`
+	Childs []struct {
+		Name   string `json:"name"`
+		Desc   string `json:"desc"`
+		Childs []struct {
+			Name   string `json:"name"`
+			Href   string `json:"href,omitempty"`
+			Childs []struct {
+				Name string `json:"name"`
+				Href string `json:"href,omitempty"`
+			} `json:"childs,omitempty"`
+		} `json:"childs"`
+	} `json:"childs"`
+}
+
+func TopMenuNew() []*Menu {
+	var newMenus []*Menu
+	list, _ := mongodb.Find("jy_topMenu_new", `{"i_status":1}`, `{"i_sort":1}`, nil, false, -1, -1)
+	if list == nil || len(*list) == 0 {
+		return newMenus
+	}
+	if err := gconv.Struct(list, &newMenus); err != nil {
+		log.Println("获取菜单异常", err.Error())
+		return nil
+	}
+	return newMenus
+}
+
+func HasLoginFunc(sessionId string) bool {
+	if sessionId == "" {
+		return false
+	}
+	sessionId, _ = url.QueryUnescape(sessionId)
+	jyS := &jySession{}
+	if jyS == nil || jyS.UserId == "" {
+		rVal, err := redis.GetBytes("session", sessionId)
+		if err == nil {
+			_ = json.Unmarshal(*rVal, &jyS)
+		}
+	}
+	if jyS != nil {
+		return jyS.UserId != ""
+	}
+	return false
+}

+ 51 - 0
src/tdk.yaml

@@ -0,0 +1,51 @@
+landingPage:
+  yxgl:
+    title: 营销全过程数字化管理 - 剑鱼标讯
+    keywords: 销售管理,营销管理
+    description: |
+      剑鱼平台个性化的数据服务,能让企业以极低成本推进数字化转型,实现全链路协同增效与收益最大化。并可以通过剑鱼数据智能挖掘潜在商机,精准识别客户需求,助力企业实现从模糊信息到明确目标的销售转化。
+  qbgl:
+    title: 精准商机情报全过程管理 - 剑鱼标讯
+    keywords: 企业情报,商机情报
+    description: |
+      剑鱼大数据,可与企业CRM、OA系统定制集成,自动将中标方信息、竞争动态等关键情报同步至内部流程,减少人工中转。并可以通过剑鱼营销模块进行商机跟踪,为业务部门和销售人员分发商机情报,确保关键信息直达决策节点。
+  sjgl:
+    title: 商机线索管理系统 - 剑鱼标讯
+    keywords: 商机管理,线索管理
+    description: |
+      系统精准匹配企业业务范围,筛选出精准商机线索,并根据分配规则自动进行商机分配;由销售经理进行商机跟进,团队成员协作支撑;同时采集竞对数据,沉淀成为团队知识库,为商机决策提供支撑。
+  qqxm:
+    title: 项目前期潜在商机获取 - 剑鱼标讯
+    keywords: 早期商机,优质线索,商机数据
+    description: |
+      海量信息智能解析,利用剑鱼大数据的可视化工具和预测分析模型,快速处理和分析海量信息,识别细分市场、利基需求等潜在商机。
+  cpfx:
+    title: 企业产品招标采购数据分析 - 剑鱼标讯
+    keywords: 产品分析,招标采购数据分析
+    description: |
+      依据客户业务,制定数据筛选规则,圈定客户业务范围内的市场数据,方便客户了解市场趋势。通过构建动态监测模型,量化市场容量、竞品份额及消费者偏好变化,为企业产品迭代与营销策略提供数据支撑。
+  hydc:
+    title: 行业趋势洞察分析 - 剑鱼标讯
+    keywords: 行业分析,市场洞察
+    description: |
+      分析企业所在行业的风险与机遇,制定差异化竞争策略,实时监测和分析行业热点,以及用户对新品/概念的接受度,识别未被满足的需求或新兴小众市场。通过系统性的数据收集,拓展业务边界,抢占市场先机。
+  khtz:
+    title: 高意向客户拓展 - 剑鱼标讯
+    keywords: 客户拓展,商机线索,合作渠道拓展
+    description: |
+      根据行业标签,及时、全面获取公司业务范围内的全网招标信息。跟进精准客户情报,根据成交转化概率排序,提升客户拓展效率。获取精准合作渠道清单,结合客户调研关键数据,为拓展谈判、决策提供支撑。
+  yyszb:
+    title: 运营商DICT行业市场专版 - 剑鱼标讯
+    keywords: 运营商商机,运营商项目
+    description: |
+      剑鱼的运营商DICT行业市场专版,通过市场规模、采购供应商等重要数据,提前6-18个月精准获取高价值商机,为运营商项目攻关提供有力支持。并基于公开市场招投标数据进行市场分析输出潜在商机线索。
+  jjdqxm:
+    title: 全国即将到期项目信息 - 剑鱼标讯
+    keywords: 临期项目,即将到期项目
+    description: |
+      临期商机,抢先布局!通过数字化工具关注企业/商户合同履约周期,预判资产处置需求。跟踪供应链节点(如生产日期、库存周转率),锁定潜在临期标的,跟进合同临期项目,提前3-6个月运作!
+  nzjxm:
+    title: 全国拟在建项目商机 - 剑鱼标讯
+    keywords: 拟在建项目,预审项目
+    description: |
+      剑鱼大数据实时抓取拟在建项目,重点关注项目预审、环评公示、可研批复‌等核心节点,实现潜在商机自动挖掘,让商务动作快于招标公告,抓住关键的30天黄金窗口期!

+ 360 - 0
src/web/staticres/bid-fileinter/css/product-introduce.css

@@ -0,0 +1,360 @@
+.color-blue {
+  color: #0066eb;
+}
+.color-orange {
+  color: #FF1700;
+}
+.color-purpose {
+  color: #6B11D9;
+}
+
+.u-button {
+  padding: 12px 0;
+  width: 180px;
+  color: #fff;
+  border-radius: 8px;
+}
+.u-button.u-bg-blue {
+  background: linear-gradient(90deg, #4ABDFF 0%, #185FF8 100%);
+}
+.u-button.u-bg-lightblue {
+  background: linear-gradient(90deg, #5AFDFB 0%, #154BFF 100%);
+}
+.u-button.u-bg-purpose-blue {
+  /* background: linear-gradient(90deg, #8186F3 0%, #0055FF 100%); */
+  background: linear-gradient(90deg, #8186F3 0%, #0055FF 95.34%);
+}
+.u-button.u-bg-deep-purpose-blue {
+  background: linear-gradient(90deg, #9A49FE 0%, #2B19FF 95.34%);
+}
+.u-button.u-bg-cyan-blue {
+  background: linear-gradient(90deg, #6CEFCA 0%, #4342FF 100%);
+}
+.u-button.u-bg-orange {
+  background: linear-gradient(90deg, #FF791C 0%, #FF1700 100%);
+}
+.u-button.u-bg-light-orange {
+  background: linear-gradient(90deg, #FF791C 0%, #FFBB00 100%);
+}
+.u-button.u-bg-white-lightblue {
+  color: #070FF5;
+  background: linear-gradient(90deg, #F6F7FF 0%, #D0DFFF 100%);
+}
+.u-button.u-bg-purpose {
+  color: #fff;
+  background: linear-gradient(90deg, #7B1CFF 0%, #DD00FF 100%);
+}
+.u-button.u-bg-pink-purpose {
+  background: linear-gradient(90deg, #D787FB 0%, #742FF9 100%);
+}
+
+
+.mt--40 {
+  margin-top: -40px!important;
+}
+
+/* close icon */
+.dialog-close-icon {
+  position: absolute;
+  right: -16px;
+  top: -16px;
+  width: 40px;
+  height: 40px;
+}
+.circle-icon {
+  border-radius: 50%;
+  background-color: #2ABed1;
+}
+
+.dialog-close-icon::before,
+.dialog-close-icon::after {
+  position: absolute;
+  content: ' ';
+  background-color: #fff;
+  left: 19px;
+  top: 10px;
+  width: 2px;
+  height: 20px;
+  border-radius: 2px;
+}
+
+.dialog-close-icon::before {
+  transform: rotate(45deg);
+}
+
+.dialog-close-icon::after {
+  transform: rotate(-45deg);
+}
+
+.swiper {
+  width: 100%;
+  height: 100%;
+}
+
+.swiper-slide {
+  text-align: center;
+  font-size: 18px;
+  background: #fff;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.swiper-slide img {
+  display: block;
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+}
+
+.banner-swiper-container {
+  width: 100%;
+  height: 420px;
+  overflow: hidden;
+}
+.banner-swiper-container .banner-swiper-slide {
+  position: relative;
+}
+.banner-swiper-container .slide-content-container {
+  position: absolute;
+  top: 50%;
+  /* left: 20%; */
+  width: 1140px;
+  transform: translateY(-50%);
+  z-index: 2;
+  text-align: left;
+}
+.banner-swiper-container .banner-title {
+  color: #1D1D1D;
+  font-size: 48px;
+  line-height: 60px;
+  font-weight: bold;
+  margin-bottom: 12px;
+}
+.banner-swiper-container .banner-subtitle {
+  color: #686868;
+  font-size: 20px;
+  line-height: 32px;
+}
+.banner-swiper-container .action-container {
+  margin-top: 48px;
+}
+.swiper-container-horizontal>.swiper-pagination-bullets {
+  bottom: 28px;
+}
+.banner-swiper-container .banner-custom-dot .swiper-pagination-bullet {
+  width: 40px;
+  height: 4px;
+  border-radius: 2px;
+  background-color: #00000033;
+}
+.banner-swiper-container .banner-custom-dot .swiper-pagination-bullet-active {
+  background-color: #fff;
+}
+.img--bg {
+  background-color: rgb(247, 249, 252);
+}
+.banner-swiper-slide[data-theme=dark] .slide-content-container .banner-title {
+  color: #fff;
+}
+.banner-swiper-slide[data-theme=dark] .slide-content-container .banner-subtitle {
+  color: #fff;
+}
+
+
+.page-module .module-title {
+  margin: 0 auto;
+  font-size: 36px;
+  color: #1d1d1d;
+  text-align: center;
+}
+.page-module .module-subtitle {
+  margin: 0 auto;
+  margin-top: 12px;
+  font-size: 24px;
+  color: #686868;
+  text-align: center;
+}
+
+
+.desc-module {
+  padding-top: 20px;
+}
+.desc-module .module-header {
+  padding: 40px 0;
+}
+.desc-img {
+  display: block;
+  width: 100%;
+}
+.desc-module .desc-module-nav-tabs {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin: 0 auto;
+  padding: 0 30px;
+}
+.desc-module .desc-module-nav-tab {
+  display: flex;
+  align-items: center;
+  padding: 20px 0;
+  font-size: 22px;
+  border-bottom: 2px solid transparent;
+}
+.desc-module-nav-tab .desc-module-nav-tab-icon {
+  display: inline-block;
+  width: 43px;
+  height: 32px;
+  margin-right: 10px;
+  transform: skew(-6deg);
+  background-repeat: no-repeat;
+  background-size: contain;
+  background-position: center center;
+}
+.desc-module .desc-module-nav-tab.active {
+  border-bottom-color: #2ABed1;
+}
+.desc-module .desc-module-nav-tab.active .desc-module-nav-tab-text {
+  color: #2ABed1;
+}
+.desc-module .desc-module-nav-tab:not(:last-of-type) {
+  margin-right: 80px;
+}
+.desc-module .desc-module-nav-content-item {
+  padding-top: 40px;
+}
+.desc-module .desc-module-nav-content-hd {
+  text-align: center;
+}
+.desc-module .desc-module-img-bd {
+  width: 100%;
+  margin: 0 auto;
+}
+.desc-module .desc-module-nav-content-title {
+  font-size: 32px;
+  color: #1d1d1d;
+}
+.desc-module .desc-module-nav-content-subtitle {
+  margin-top: 12px;
+  font-size: 20px;
+  line-height: 32px;
+  color: #686868;
+}
+
+.preview-img-container {
+  width: 100%;
+  border-radius: 16px;
+  overflow: hidden;
+  background-color: #fff;
+}
+.preview-modal-container {
+  position: relative;
+  margin-top: 80px;
+  width: 72%;
+}
+
+.partners-module {
+  padding-top: 60px;
+}
+.partners-module .module-content {
+  margin-top: 30px;
+  margin-bottom: 60px;
+}
+
+.power-module {
+  padding: 60px 0;
+  background-image: url(/bid-fileinter/image/common/power-bg.png);
+  background-size: cover;
+  background-repeat: no-repeat;
+}
+.power-module .module-content {
+  margin-top: 48px;
+}
+.power-module .power-desc-list {
+  display: flex;
+  align-items: center;
+}
+.power-module .power-desc-item {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-direction: column;
+  flex: 1;
+}
+.power-module .power-desc-item-icon {
+  margin-bottom: 8px;
+  width: 120px;
+  height: 110px;
+}
+.power-module .power-desc-item-text {
+  text-align: center;
+}
+.power-module .power-desc-item-text-title {
+  font-size: 24px;
+  line-height: 36px;
+  color: #1D1D1D;
+}
+.power-module .power-desc-item-text-subtitle {
+  margin-top: 12px;
+  font-size: 16px;
+  line-height: 24px;
+  color: #686868;
+}
+
+.bottom-banner-container {
+  background-color: #0C56E5;
+}
+.bottom-banner-content {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  height: 88px;
+  background-image: url(/bid-fileinter/image/common/bottom-banner-bg.png);
+  background-repeat: repeat;
+  background-size: contain;
+}
+.bottom-banner-title {
+  margin-right: 90px;
+  font-size: 30px;
+  color: #fff;
+}
+
+.phone-input-container {
+  display: flex;
+  width: 580px;
+  padding: 2px;
+  background-color: #fff;
+  border-radius: 8px;
+}
+.phone-input-container .phone-submit-input {
+  flex: 1;
+  padding: 0 24px;
+  height: 38px;
+  border: none;
+  outline: none;
+}
+.phone-input-container .phone-submit-button {
+  padding: 8px 32px;
+  color: #fff;
+  background-color: #2ABed1;
+  border-radius: 6px;
+  border: none;
+  outline: none;
+}
+
+
+.style-jjdqxm .desc-module,
+.style-nzjxm .desc-module {
+  padding-top: 50px;
+}
+.bottom-banner-container.fixed{
+  position: fixed;
+  width: 100%;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 99;
+}
+.pc-header-nav-second{
+  display: none!important;
+}

BIN
src/web/staticres/bid-fileinter/image/common/01-active.png


BIN
src/web/staticres/bid-fileinter/image/common/01.png


BIN
src/web/staticres/bid-fileinter/image/common/02-active.png


BIN
src/web/staticres/bid-fileinter/image/common/02.png


BIN
src/web/staticres/bid-fileinter/image/common/03-active.png


BIN
src/web/staticres/bid-fileinter/image/common/03.png


BIN
src/web/staticres/bid-fileinter/image/common/04-active.png


BIN
src/web/staticres/bid-fileinter/image/common/04.png


BIN
src/web/staticres/bid-fileinter/image/common/bottom-banner-bg.png


BIN
src/web/staticres/bid-fileinter/image/common/power-bg.png


BIN
src/web/staticres/bid-fileinter/image/common/power-desc-1.png


BIN
src/web/staticres/bid-fileinter/image/common/power-desc-2.png


BIN
src/web/staticres/bid-fileinter/image/common/power-desc-3.png


BIN
src/web/staticres/bid-fileinter/image/common/power-desc-4.png


BIN
src/web/staticres/bid-fileinter/image/cpfx/banner-bg1@2x.png


BIN
src/web/staticres/bid-fileinter/image/cpfx/banner-bg2@2x.png


BIN
src/web/staticres/bid-fileinter/image/cpfx/content-step-1@2x.png


BIN
src/web/staticres/bid-fileinter/image/cpfx/content-step-2@2x.png


BIN
src/web/staticres/bid-fileinter/image/cpfx/content-step-3@2x.png


BIN
src/web/staticres/bid-fileinter/image/hydc/banner-bg1@2x.png


BIN
src/web/staticres/bid-fileinter/image/hydc/banner-bg2@2x.png


BIN
src/web/staticres/bid-fileinter/image/hydc/banner-bg3@2x.png


BIN
src/web/staticres/bid-fileinter/image/hydc/content-step-1@2x.png


BIN
src/web/staticres/bid-fileinter/image/hydc/content-step-2@2x.png


BIN
src/web/staticres/bid-fileinter/image/hydc/content-step-3@2x.png


BIN
src/web/staticres/bid-fileinter/image/khtz/banner-bg1@2x.png


BIN
src/web/staticres/bid-fileinter/image/khtz/banner-bg2@2x.png


BIN
src/web/staticres/bid-fileinter/image/khtz/banner-bg3@2x.png


BIN
src/web/staticres/bid-fileinter/image/khtz/content-step-1@2x.png


BIN
src/web/staticres/bid-fileinter/image/khtz/content-step-2@2x.png


BIN
src/web/staticres/bid-fileinter/image/khtz/content-step-3@2x.png


BIN
src/web/staticres/bid-fileinter/image/khtz/content-step-4@2x.png


BIN
src/web/staticres/bid-fileinter/image/project/jjdqmx-banner-bg1.png


BIN
src/web/staticres/bid-fileinter/image/project/jjdqmx-step-bg1.png


BIN
src/web/staticres/bid-fileinter/image/project/nzjxm-banner-bg1@2x.png


BIN
src/web/staticres/bid-fileinter/image/project/nzjxm-step-bg-1@2x.png


BIN
src/web/staticres/bid-fileinter/image/qbgl/banner-bg1.png


BIN
src/web/staticres/bid-fileinter/image/qbgl/banner-bg2.png


BIN
src/web/staticres/bid-fileinter/image/qbgl/content-step-1.png


BIN
src/web/staticres/bid-fileinter/image/qbgl/content-step-2.png


BIN
src/web/staticres/bid-fileinter/image/qbgl/content-step-3.png


BIN
src/web/staticres/bid-fileinter/image/qbgl/content-step-4.png


BIN
src/web/staticres/bid-fileinter/image/qqxm/banner-bg1@2x.png


BIN
src/web/staticres/bid-fileinter/image/qqxm/banner-bg2@2x.png


BIN
src/web/staticres/bid-fileinter/image/qqxm/content-step-1@2x.png


BIN
src/web/staticres/bid-fileinter/image/qqxm/content-step-2@2x.png


BIN
src/web/staticres/bid-fileinter/image/sjgl/banner-bg1.png


BIN
src/web/staticres/bid-fileinter/image/sjgl/banner-bg2.png


BIN
src/web/staticres/bid-fileinter/image/sjgl/banner-bg3.png


BIN
src/web/staticres/bid-fileinter/image/sjgl/content-step-1.png


BIN
src/web/staticres/bid-fileinter/image/sjgl/content-step-2.png


BIN
src/web/staticres/bid-fileinter/image/sjgl/content-step-4.png


BIN
src/web/staticres/bid-fileinter/image/yxgl/banner-1.png


BIN
src/web/staticres/bid-fileinter/image/yxgl/banner-2.png


BIN
src/web/staticres/bid-fileinter/image/yxgl/content-step-1.png


BIN
src/web/staticres/bid-fileinter/image/yxgl/content-step-2.png


BIN
src/web/staticres/bid-fileinter/image/yxgl/content-step-3.png


BIN
src/web/staticres/bid-fileinter/image/yxgl/content-step-4.png


BIN
src/web/staticres/bid-fileinter/image/yyszb/banner-bg1@2x.png


BIN
src/web/staticres/bid-fileinter/image/yyszb/banner-bg2@2x.png


BIN
src/web/staticres/bid-fileinter/image/yyszb/content-step-1@2x.png


BIN
src/web/staticres/bid-fileinter/image/yyszb/content-step-2@2x.png


BIN
src/web/staticres/bid-fileinter/image/yyszb/content-step-3@2x.png


BIN
src/web/staticres/bid-fileinter/image/yyszb/content-step-4@2x.png


+ 633 - 0
src/web/staticres/bid-fileinter/js/product-introduce-config.js

@@ -0,0 +1,633 @@
+var __page_config = {
+  // 高效销售-营销管理
+  yxgl: {
+    name: '营销管理',
+    showCooperationModule: true,
+    showPowerDescModule: true,
+    tdk: {
+      title: '营销全过程数字化管理 - 剑鱼标讯',
+      keywords: '销售管理,营销管理',
+      description: '剑鱼平台个性化的数据服务,能让企业以极低成本推进数字化转型,实现全链路协同增效与收益最大化。并可以通过剑鱼数据智能挖掘潜在商机,精准识别客户需求,助力企业实现从模糊信息到明确目标的销售转化。',
+    },
+    bannerModule: [
+      {
+        title: '商机利器 强大到位',
+        source: 'sale_experience',
+        subtitle: '剑鱼用数据帮您精准决策,轻松实现企业数字化转型。<br />打造<span class="color-blue">线索挖掘-客户经营-渠道协同</span>的闭环增长引擎。',
+        buttonText: '立即体验',
+        bannerImageSrc: '/bid-fileinter/image/yxgl/banner-1.png'
+      },
+      {
+        title: '数据实力 营销得力',
+        subtitle: '依托海量商业情报库,让各营销环节的决策基于准确的<br />数据洞察。让<span class="color-blue">获客更精准,转化更高效,管理更透明</span>。',
+        buttonText: '立即体验',
+        source: 'sale_experience',
+        bannerImageSrc: '/bid-fileinter/image/yxgl/banner-2.png'
+      },
+    ],
+    descModule: {
+      title: '降低投标门槛  突破客户壁垒',
+      stepList: [
+        {
+          tabName: '销售机会挖掘',
+          tabIcon: '/bid-fileinter/image/common/01.png',
+          activeTabIcon: '/bid-fileinter/image/common/01-active.png',
+          contentTitle: '从模糊表述 <span class="highlight-text">到</span> 真实需求',
+          contentSubtitle: '通过剑鱼数据智能挖掘潜在商机,精准识别客户需求,助力企业实现从模糊信息到明确目标的销售转化。',
+          contentImageSrc: '/bid-fileinter/image/yxgl/content-step-1.png',
+        },
+        {
+          tabName: '销售全过程管理',
+          tabIcon: '/bid-fileinter/image/common/02.png',
+          activeTabIcon: '/bid-fileinter/image/common/02-active.png',
+          contentTitle: '从降低门槛 <span class="highlight-text">到</span> 总揽全局',
+          contentSubtitle: '剑鱼平台个性化的数据服务,能让企业以极低成本推进数字化转型,实现全链路协同增效与收益最大化。',
+          contentImageSrc: '/bid-fileinter/image/yxgl/content-step-2.png',
+        },
+        {
+          tabName: '任务实时跟进',
+          tabIcon: '/bid-fileinter/image/common/03.png',
+          activeTabIcon: '/bid-fileinter/image/common/03-active.png',
+          contentTitle: '从动态部署 <span class="highlight-text">到</span> 高效转化',
+          contentSubtitle: '剑鱼数据智能追踪销售全流程,实时优化执行策略,助力企业实现从任务部署到客户成交的高效闭环。',
+          contentImageSrc: '/bid-fileinter/image/yxgl/content-step-3.png',
+        },
+        {
+          tabName: '机会深度复盘',
+          tabIcon: '/bid-fileinter/image/common/04.png',
+          activeTabIcon: '/bid-fileinter/image/common/04-active.png',
+          contentTitle: '从成交复盘 <span class="highlight-text">到</span> 降本增效',
+          contentSubtitle: '支持历史数据回溯,针对性客户分析,抓住市场关键时期进行业绩冲刺,为后续的市场营销决策提供支撑。',
+          contentImageSrc: '/bid-fileinter/image/yxgl/content-step-4.png',
+        },
+      ]
+    },
+    cooperatorModule: {
+      title: '剑鱼标讯高效销售管理系统用户',
+      subtitle: '来自IT、医疗、保险、通信等众多领域领军企业',
+    },
+    bottomBannerModule: {
+      source: 'sale_contact',
+    },
+  },
+  // 情报管理-精准商机情报
+  qbgl: {
+    name: '情报管理',
+    showCooperationModule: true,
+    showPowerDescModule: true,
+    tdk: {
+      title: '精准商机情报全过程管理 - 剑鱼标讯',
+      keywords: '企业情报,商机情报',
+      description: '剑鱼大数据,可与企业CRM、OA系统定制集成,自动将中标方信息、竞争动态等关键情报同步至内部流程,减少人工中转。并可以通过剑鱼营销模块进行商机跟踪,为业务部门和销售人员分发商机情报,确保关键信息直达决策节点。',
+    },
+    bannerModule: [
+      {
+        title: '情报变现 数据当先',
+        source: 'intelligence_experience',
+        subtitle: '为企业提炼数据里的黄金商机。无论是招投标动态、市场趋<br />势还是竞争对手动向,让数据真正成为战略资产。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-lightblue',
+        bannerImageSrc: '/bid-fileinter/image/qbgl/banner-bg1.png'
+      },
+      {
+        title: '市场拓展 有据可依',
+        subtitle: '从海量数据中精准筛选高价值客户线索,自动分发至指定团<br />队,让营销决策有据可依,市场拓展快人一步。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-lightblue',
+        source: 'intelligence_experience',
+        bannerImageSrc: '/bid-fileinter/image/qbgl/banner-bg2.png'
+      },
+    ],
+    descModule: {
+      title: '定制企业情报 告别低效搜索',
+      stepList: [
+        {
+          tabName: '企业情报定制',
+          tabIcon: '/bid-fileinter/image/common/01.png',
+          activeTabIcon: '/bid-fileinter/image/common/01-active.png',
+          contentTitle: '商机线索 精准筛选',
+          contentSubtitle: '通过剑鱼营销模块进行商机跟踪,为业务部门和销售人员分发商机情报,确保关键信息直达决策节点。',
+          contentImageSrc: '/bid-fileinter/image/qbgl/content-step-1.png',
+        },
+        {
+          tabName: '情报自动分发',
+          tabIcon: '/bid-fileinter/image/common/02.png',
+          activeTabIcon: '/bid-fileinter/image/common/02-active.png',
+          contentTitle: '业务协同 自动中转',
+          contentSubtitle: '剑鱼大数据,可与企业CRM、OA系统定制集成,自动将中标方信息、竞争动态等关键情报同步至内部流程,减少人工中转。',
+          contentImageSrc: '/bid-fileinter/image/qbgl/content-step-2.png',
+        },
+        {
+          tabName: '动态情报提醒',
+          tabIcon: '/bid-fileinter/image/common/03.png',
+          activeTabIcon: '/bid-fileinter/image/common/03-active.png',
+          contentTitle: '可靠数据 深入跟进',
+          contentSubtitle: '企业管理人员可查看客户跟进、销售机会跟进情况,进行销售过程管理,精准识别高潜力客户需求,预测市场动向。',
+          contentImageSrc: '/bid-fileinter/image/qbgl/content-step-3.png',
+        },
+        {
+          tabName: '情报全过程管理',
+          tabIcon: '/bid-fileinter/image/common/04.png',
+          activeTabIcon: '/bid-fileinter/image/common/04-active.png',
+          contentTitle: '闭环管理 井然有序',
+          contentSubtitle: '基于剑鱼商业大数据的强大功能,企业可轻松实现“采集→处理→分析→分发→反馈”的情报全过程管理。',
+          contentImageSrc: '/bid-fileinter/image/qbgl/content-step-4.png',
+        },
+      ]
+    },
+    cooperatorModule: {
+      title: '剑鱼标讯高效销售管理系统用户',
+      subtitle: '来自IT、医疗、保险、通信等众多领域领军企业',
+    },
+    bottomBannerModule: {
+      source: 'intelligence_contact',
+    },
+  },
+  // 商机管理
+  sjgl: {
+    name: '商机管理',
+    showCooperationModule: false,
+    showPowerDescModule: false,
+    tdk: {
+      title: '商机线索管理系统 - 剑鱼标讯',
+      keywords: '商机管理,线索管理',
+      description: '系统精准匹配企业业务范围,筛选出精准商机线索,并根据分配规则自动进行商机分配;由销售经理进行商机跟进,团队成员协作支撑;同时采集竞对数据,沉淀成为团队知识库,为商机决策提供支撑。',
+    },
+    bannerModule: [
+      {
+        title: '商机获取筛选',
+        source: 'business_experience',
+        subtitle: '一键获取商机线索,<span class="color-orange">智能匹配企业业务范围,</span>线索二次提<br />纯遴选,让商机更有效。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-orange',
+        bannerImageSrc: '/bid-fileinter/image/sjgl/banner-bg1.png'
+      },
+      {
+        title: '商机自动分配 团队协作跟进',
+        subtitle: '商机线索可自动按区域、业务条线等直达一线销售,支持<br />人工管理干预,让分配更有效;动态情报自动关联已跟进<br />商机,让商机跟进更便捷。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-lightblue',
+        source: 'business_experience',
+        bannerImageSrc: '/bid-fileinter/image/sjgl/banner-bg2.png'
+      },
+      {
+        title: '商机复盘<br />数据沉淀支撑未来决策',
+        subtitle: '日常跟进中采集竞对数据,沉淀成团队经验与案例;沉淀<br />数据驱动未来商机决策。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-white-lightblue',
+        theme: 'dark',
+        source: 'business_experience',
+        bannerImageSrc: '/bid-fileinter/image/sjgl/banner-bg3.png'
+      },
+    ],
+    descModule: {
+      title: '商机全流程管理',
+      stepList: [
+        {
+          tabName: '商机规则定制',
+          tabIcon: '/bid-fileinter/image/common/01.png',
+          activeTabIcon: '/bid-fileinter/image/common/01-active.png',
+          contentTitle: '制定商机获取规则,精准匹配企业业务范围,筛选出精准商机线索。',
+          contentImageSrc: '/bid-fileinter/image/sjgl/content-step-1.png',
+        },
+        {
+          tabName: '商机分配跟进',
+          tabIcon: '/bid-fileinter/image/common/02.png',
+          activeTabIcon: '/bid-fileinter/image/common/02-active.png',
+          contentTitle: '提前制定商机分配规则,系统根据分配规则,自动进行商机分配;<br />一线销售经理进行商机跟进,团队成员协作支撑',
+          contentImgClass: 'mt--40',
+          contentImageSrc: '/bid-fileinter/image/sjgl/content-step-2.png',
+        },
+        {
+          tabName: '动态情报推送',
+          tabIcon: '/bid-fileinter/image/common/03.png',
+          activeTabIcon: '/bid-fileinter/image/common/03-active.png',
+          contentTitle: '大数据自动匹配正在跟进商机,推送动态情报,支撑商机跟进。',
+          contentImageSrc: '/bid-fileinter/image/qbgl/content-step-3.png',
+        },
+        {
+          tabName: '商机跟进复盘',
+          tabIcon: '/bid-fileinter/image/common/04.png',
+          activeTabIcon: '/bid-fileinter/image/common/04-active.png',
+          contentTitle: '跟进过程采集竞对数据,沉淀成为团队知识库,为商机决策提供支撑。',
+          contentImageSrc: '/bid-fileinter/image/sjgl/content-step-4.png',
+        },
+      ]
+    },
+    bottomBannerModule: {
+      source: 'business_contact',
+    },
+  },
+  // 前期项目
+  qqxm: {
+    name: '前期项目',
+    showCooperationModule: true,
+    showPowerDescModule: true,
+    tdk: {
+      title: '项目前期潜在商机获取 - 剑鱼标讯',
+      keywords: '早期商机,优质线索,商机数据',
+      description: '海量信息智能解析,利用剑鱼大数据的可视化工具和预测分析模型,快速处理和分析海量信息,识别细分市场、利基需求等潜在商机。',
+    },
+    bannerModule: [
+      {
+        title: '真实商机 提前获取',
+        source: 'qqProject_experience',
+        subtitle: '早期商机数据,辅助企业提前3-6个月获取优质商机线索,<br />提前开启方案规划。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-light-orange',
+        bannerImageSrc: '/bid-fileinter/image/qqxm/banner-bg1@2x.png'
+      },
+      {
+        title: '精准标签 实时匹配',
+        subtitle: '通过剑鱼大数据的智能化标签分类,实现从海量信息到高<br />价值线索的秒级转化,提升企业前期商机的获取精度。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-purpose',
+        source: 'qqProject_experience',
+        bannerImageSrc: '/bid-fileinter/image/qqxm/banner-bg2@2x.png'
+      },
+    ],
+    descModule: {
+      stepList: [
+        {
+          tabName: '提升市场洞察',
+          tabIcon: '/bid-fileinter/image/common/01.png',
+          activeTabIcon: '/bid-fileinter/image/common/01-active.png',
+          contentTitle: '海量信息 智能解析',
+          contentSubtitle: '利用剑鱼大数据的可视化工具和预测分析模型,快速处理和分析海量信息,识别细分市场、利基需求等潜在商机。',
+          contentImageSrc: '/bid-fileinter/image/qqxm/content-step-1@2x.png',
+        },
+        {
+          tabName: '帮助营销决策',
+          tabIcon: '/bid-fileinter/image/common/02.png',
+          activeTabIcon: '/bid-fileinter/image/common/02-active.png',
+          contentTitle: '加速决策 提高效率',
+          contentSubtitle: '基于剑鱼统一的数据平台和分析结果进行讨论和决策,减少信息差和沟通成本,提升数据服务质量与效率。',
+          contentImageSrc: '/bid-fileinter/image/qqxm/content-step-2@2x.png',
+        },
+      ]
+    },
+    bottomBannerModule: {
+      source: 'qqProject_contact',
+    },
+  },
+  // 产品分析
+  cpfx: {
+    name: '产品分析',
+    showCooperationModule: true,
+    showPowerDescModule: true,
+    tdk: {
+      title: '企业产品招标采购数据分析 - 剑鱼标讯',
+      keywords: '产品分析,招标采购数据分析',
+      description: '依据客户业务,制定数据筛选规则,圈定客户业务范围内的市场数据,方便客户了解市场趋势。通过构建动态监测模型,量化市场容量、竞品份额及消费者偏好变化,为企业产品迭代与营销策略提供数据支撑。',
+    },
+    bannerModule: [
+      {
+        title: '招采分析 智能评估',
+        source: 'ProductAnalysis_experience',
+        subtitle: '基于剑鱼平台完整的数据解决方案,企业可实时监控产品<br />供需波动,动态调整供应链采购清单。',
+        buttonText: '立即体验',
+        bannerImageSrc: '/bid-fileinter/image/cpfx/banner-bg1@2x.png'
+      },
+      {
+        title: '数据驱动 决策有据',
+        subtitle: '精准实时获取产品招采数据,掌握市场变化趋势,为企业<br />经营分析提供基础市场数据',
+        buttonText: '立即体验',
+        source: 'ProductAnalysis_experience',
+        bannerImageSrc: '/bid-fileinter/image/cpfx/banner-bg2@2x.png'
+      },
+    ],
+    descModule: {
+      title: '数据验证价值 精准定位需求',
+      stepList: [
+        {
+          tabName: '精准匹配市场',
+          tabIcon: '/bid-fileinter/image/common/01.png',
+          activeTabIcon: '/bid-fileinter/image/common/01-active.png',
+          contentTitle: '核心线索 处处体现',
+          contentSubtitle: '依据客户业务,制定数据筛选规则,圈定客户业务范围内的市场数据。',
+          contentImageSrc: '/bid-fileinter/image/cpfx/content-step-1@2x.png',
+        },
+        {
+          tabName: '数据加工处理',
+          tabIcon: '/bid-fileinter/image/common/02.png',
+          activeTabIcon: '/bid-fileinter/image/common/02-active.png',
+          contentTitle: '数据淬炼 产品增效',
+          contentSubtitle: '针对市场数据进行清洗、加工,依据客户业务范围进行打分类标签,完成数据加工处理。方便客户了解市场趋势。',
+          contentImageSrc: '/bid-fileinter/image/cpfx/content-step-2@2x.png',
+        },
+        {
+          tabName: '支撑产品迭代',
+          tabIcon: '/bid-fileinter/image/common/03.png',
+          activeTabIcon: '/bid-fileinter/image/common/03-active.png',
+          contentTitle: '市场分析 产品迭代',
+          contentSubtitle: '通过构建动态监测模型,量化市场容量、竞品份额及消费者偏好变化,为企业产品迭代与营销策略提供数据支撑。',
+          contentImageSrc: '/bid-fileinter/image/cpfx/content-step-3@2x.png',
+        },
+      ]
+    },
+    cooperatorModule: {
+      title: '剑鱼标讯高效销售管理系统用户',
+      subtitle: '来自IT、医疗、保险、通信等众多领域领军企业',
+    },
+    bottomBannerModule: {
+      source: 'ProductAnalysis_contact',
+    },
+  },
+  // 行业洞察
+  hydc: {
+    name: '行业洞察',
+    showCooperationModule: true,
+    showPowerDescModule: true,
+    tdk: {
+      title: '行业趋势洞察分析 - 剑鱼标讯',
+      keywords: '行业分析,市场洞察',
+      description: '分析企业所在行业的风险与机遇,制定差异化竞争策略,实时监测和分析行业热点,以及用户对新品/概念的接受度,识别未被满足的需求或新兴小众市场。通过系统性的数据收集,拓展业务边界,抢占市场先机。',
+    },
+    bannerModule: [
+      {
+        title: '看清格局 把握趋势',
+        source: 'industry_experience',
+        subtitle: '分析行业历史规模、增长率、细分领域占比,预测未<br />来趋势。看清市场格局与竞争态势,指导资源投入方<br />向。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-purpose-blue',
+        bannerImageSrc: '/bid-fileinter/image/hydc/banner-bg1@2x.png'
+      },
+      {
+        title: '竞争动态 深度分析',
+        subtitle: '动态监测竞品价格变动、新品发布、营销活动、技术<br />布局、人才战略,找出自身与头部标杆企业的关键差<br />距。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-cyan-blue',
+        source: 'industry_experience',
+        bannerImageSrc: '/bid-fileinter/image/hydc/banner-bg2@2x.png'
+      },
+      {
+        title: '客户细分 高效转化',
+        subtitle: '通过多维度客户画像,进行高价值客户细分。实现精<br />准营销、个性化产品/服务推荐,提升转化率和客户<br />忠诚度。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-deep-purpose-blue',
+        source: 'industry_experience',
+        bannerImageSrc: '/bid-fileinter/image/hydc/banner-bg3@2x.png'
+      },
+    ],
+    descModule: {
+      title: '看清行业格局 洞察未来商机',
+      stepList: [
+        {
+          tabName: '看清行业态势',
+          tabIcon: '/bid-fileinter/image/common/01.png',
+          activeTabIcon: '/bid-fileinter/image/common/01-active.png',
+          contentTitle: '市场变动 实时把握',
+          contentSubtitle: '根据商业数据,分析企业所在行业的风险与机遇,制定差异化竞争策略,预警竞争威胁。',
+          contentImageSrc: '/bid-fileinter/image/hydc/content-step-1@2x.png',
+        },
+        {
+          tabName: '布局行业未来',
+          tabIcon: '/bid-fileinter/image/common/02.png',
+          activeTabIcon: '/bid-fileinter/image/common/02-active.png',
+          contentTitle: '迭代需求 战略布局',
+          contentSubtitle: '实时监测和分析行业热点、痛点,以及用户对新品/概念的接受度,识别未被满足的需求或新兴小众市场。',
+          contentImageSrc: '/bid-fileinter/image/hydc/content-step-2@2x.png',
+        },
+        {
+          tabName: '优化运营决策',
+          tabIcon: '/bid-fileinter/image/common/03.png',
+          activeTabIcon: '/bid-fileinter/image/common/03-active.png',
+          contentTitle: '数据融合 精准决策',
+          contentSubtitle: '通过系统性的数据收集,形成可落地的分析结论,拓展业务边界,抢占市场先机。',
+          contentImageSrc: '/bid-fileinter/image/hydc/content-step-3@2x.png',
+        },
+      ]
+    },
+    cooperatorModule: {
+      title: '剑鱼标讯高效销售管理系统用户',
+      subtitle: '来自IT、医疗、保险、通信等众多领域领军企业',
+    },
+    bottomBannerModule: {
+      source: 'industry_contact',
+    },
+  },
+  // 客户拓展
+  khtz: {
+    name: '客户拓展',
+    showCooperationModule: true,
+    showPowerDescModule: true,
+    tdk: {
+      title: '高意向客户拓展 - 剑鱼标讯',
+      keywords: '客户拓展,商机线索,合作渠道拓展',
+      description: '根据行业标签,及时、全面获取公司业务范围内的全网招标信息。跟进精准客户情报,根据成交转化概率排序,提升客户拓展效率。获取精准合作渠道清单,结合客户调研关键数据,为拓展谈判、决策提供支撑。',
+    },
+    bannerModule: [
+      {
+        title: '重要商机 直抵成交',
+        source: 'customer_experience',
+        subtitle: '将筛选过滤后的精准商机,作为跟踪任务直接分发,<br />缩短成交路径。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-lightblue',
+        bannerImageSrc: '/bid-fileinter/image/khtz/banner-bg1@2x.png'
+      },
+      {
+        title: '拓展客户 节省时间',
+        subtitle: '通过智能匹配系统<span class="color-blue">快速锁定高意向客户,</span><br />节省每次搜索时间。',
+        buttonText: '立即体验',
+        source: 'customer_experience',
+        buttonClass: 'u-bg-lightblue',
+        bannerImageSrc: '/bid-fileinter/image/khtz/banner-bg2@2x.png'
+      },
+      {
+        title: '优势渠道 优先对接',
+        subtitle: '精准识别<span class="color-purpose">匹配度达90%</span>以上的优质合作伙伴,<br />缩短洽谈周期。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-pink-purpose',
+        source: 'customer_experience',
+        bannerImageSrc: '/bid-fileinter/image/khtz/banner-bg3@2x.png'
+      },
+    ],
+    descModule: {
+      title: '精准捕获商机 告别低效搜索',
+      stepList: [
+        {
+          tabName: '商机线索获取',
+          tabIcon: '/bid-fileinter/image/common/01.png',
+          activeTabIcon: '/bid-fileinter/image/common/01-active.png',
+          contentTitle: '核心线索 全面抓取',
+          contentSubtitle: '根据行业标签,及时、全面获取公司业务范围内的全网招标信息。降低商机获取成本,提升效率。',
+          contentImageSrc: '/bid-fileinter/image/khtz/content-step-1@2x.png',
+        },
+        {
+          tabName: '潜在客户营销',
+          tabIcon: '/bid-fileinter/image/common/02.png',
+          activeTabIcon: '/bid-fileinter/image/common/02-active.png',
+          contentTitle: '精准获客 超前对接',
+          contentSubtitle: '跟进精准客户情报,根据成交转化概率排序,提升客户拓展效率。',
+          contentImageSrc: '/bid-fileinter/image/khtz/content-step-2@2x.png',
+        },
+        {
+          tabName: '合作渠道拓展',
+          tabIcon: '/bid-fileinter/image/common/03.png',
+          activeTabIcon: '/bid-fileinter/image/common/03-active.png',
+          contentTitle: '潜在渠道 择优选优',
+          contentSubtitle: '获取精准合作渠道清单,结合客户调研关键数据,为拓展谈判、决策提供支撑。',
+          contentImageSrc: '/bid-fileinter/image/khtz/content-step-3@2x.png',
+        },
+        {
+          tabName: '重点客户筛选',
+          tabIcon: '/bid-fileinter/image/common/04.png',
+          activeTabIcon: '/bid-fileinter/image/common/04-active.png',
+          contentTitle: '关键客户 高效跟进',
+          contentSubtitle: '自动处理潜在客户及合作客户变动信息,省去80%筛选时间,减少无效拜访。',
+          contentImageSrc: '/bid-fileinter/image/khtz/content-step-4@2x.png',
+        },
+      ]
+    },
+    cooperatorModule: {
+      title: '剑鱼标讯高效销售管理系统用户',
+      subtitle: '来自IT、医疗、保险、通信等众多领域领军企业',
+    },
+    bottomBannerModule: {
+      source: 'customer_contact',
+    },
+  },
+  // 运营商专版
+  yyszb: {
+    name: '运营商专版',
+    showCooperationModule: true,
+    showPowerDescModule: true,
+    tdk: {
+      title: '运营商DICT行业市场专版 - 剑鱼标讯',
+      keywords: '运营商商机,运营商项目',
+      description: '剑鱼的运营商DICT行业市场专版,通过市场规模、采购供应商等重要数据,提前6-18个月精准获取高价值商机,为运营商项目攻关提供有力支持。并基于公开市场招投标数据进行市场分析输出潜在商机线索。',
+    },
+    bannerModule: [
+      {
+        title: '稳拓市场 份额跃升',
+        source: 'operator_experience',
+        subtitle: '剑鱼数据平台,<span class="color-blue">运营商DICT市场的战略加速器</span>。<br />提供早期商机线索,为一线客户经理项目运作和攻关赢得时间。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-lightblue',
+        bannerImageSrc: '/bid-fileinter/image/yyszb/banner-bg1@2x.png'
+      },
+      {
+        title: '潜在商机 精准布局',
+        subtitle: '实时监控省市区县政企采购需求,从5G专网到智慧园区等,<br />精准识别高潜力市场,缩短商机响应周期。',
+        buttonText: '立即体验',
+        buttonClass: 'u-bg-lightblue',
+        source: 'operator_experience',
+        bannerImageSrc: '/bid-fileinter/image/yyszb/banner-bg2@2x.png'
+      },
+    ],
+    descModule: {
+      title: '',
+      stepList: [
+        {
+          tabName: '商机管理',
+          tabIcon: '/bid-fileinter/image/common/01.png',
+          activeTabIcon: '/bid-fileinter/image/common/01-active.png',
+          contentTitle: '数据支撑 秒级响应',
+          contentSubtitle: '通过市场规模、采购供应商等重要数据,提前6-18个月精准获取高价值商机,为运营商项目攻关提供有力支持。',
+          contentImageSrc: '/bid-fileinter/image/yyszb/content-step-1@2x.png',
+        },
+        {
+          tabName: '客户管理',
+          tabIcon: '/bid-fileinter/image/common/02.png',
+          activeTabIcon: '/bid-fileinter/image/common/02-active.png',
+          contentTitle: '拓客效率 全面提升',
+          contentSubtitle: '基于商机情报大数据,提升客户攻关效率,为客户拜访、客户跟踪场景提供更多数据情报,全面提升工作效率。',
+          contentImageSrc: '/bid-fileinter/image/yyszb/content-step-2@2x.png',
+        },
+        {
+          tabName: '市场分析洞察',
+          tabIcon: '/bid-fileinter/image/common/03.png',
+          activeTabIcon: '/bid-fileinter/image/common/03-active.png',
+          contentTitle: '动态对标 价值倍增',
+          contentSubtitle: '基于公开市场招投标数据及内部数据进行市场分析,提升数据服务质量与效率,预测并输出潜在商机线索并持续跟踪。',
+          contentImageSrc: '/bid-fileinter/image/yyszb/content-step-3@2x.png',
+        },
+        {
+          tabName: '产业分析合作',
+          tabIcon: '/bid-fileinter/image/common/04.png',
+          activeTabIcon: '/bid-fileinter/image/common/04-active.png',
+          contentTitle: '数据引擎 生态共赢',
+          contentSubtitle: '基于商机大数据洞察产业趋势,助力运营商快速分析潜在合作伙伴或竞争对手,为生态合作提供决策依据。',
+          contentImageSrc: '/bid-fileinter/image/yyszb/content-step-4@2x.png',
+        },
+      ]
+    },
+    cooperatorModule: {
+      title: '剑鱼标讯高效销售管理系统用户',
+      subtitle: '来自IT、医疗、保险、通信等众多领域领军企业',
+    },
+    bottomBannerModule: {
+      source: 'operator_contact',
+    },
+  },
+
+  // --------------------------------
+  // 即将到期项目
+  jjdqxm: {
+    name: '即将到期项目',
+    showCooperationModule: false,
+    showPowerDescModule: true,
+    fixBg: true,
+    tdk: {
+      title: '全国即将到期项目信息 - 剑鱼标讯',
+      keywords: '临期项目,即将到期项目',
+      description: '临期商机,抢先布局!通过数字化工具关注企业/商户合同履约周期,预判资产处置需求。跟踪供应链节点(如生产日期、库存周转率),锁定潜在临期标的,跟进合同临期项目,提前3-6个月运作!',
+    },
+    bannerModule: [
+      {
+        title: '临期商机 抢先布局',
+        source: 'jjdqProject_experience',
+        subtitle: '通过数字化工具关注企业/商户合同履约周期,<span class="color-blue">预判资产处<br/>置需求。</span>跟踪供应链节点(如生产日期、库存周转率),<br/>锁定潜在临期标的。',
+        buttonText: '联系专家',
+        bannerImageSrc: '/bid-fileinter/image/project/jjdqmx-banner-bg1.png'
+      },
+    ],
+    descModule: {
+      stepList: [
+        {
+          contentTitle: '锁定合同临期项目 提前3-6个月运作',
+          tabIcon: '/bid-fileinter/image/common/01.png',
+          activeTabIcon: '/bid-fileinter/image/common/01-active.png',
+          contentImageSrc: '/bid-fileinter/image/project/jjdqmx-step-bg1.png',
+        },
+      ]
+    },
+    bottomBannerModule: {
+      source: 'jjdqProject_contact',
+    },
+  },
+  // 拟在建项目
+  nzjxm: {
+    name: '拟在建项目',
+    showCooperationModule: false,
+    showPowerDescModule: true,
+    fixBg: true,
+    tdk: {
+      title: '全国拟在建项目商机 - 剑鱼标讯',
+      keywords: '拟在建项目,预审项目',
+      description: '剑鱼大数据实时抓取拟在建项目,重点关注项目预审、环评公示、可研批复‌等核心节点,实现潜在商机自动挖掘,让商务动作快于招标公告,抓住关键的30天黄金窗口期!',
+    },
+    bannerModule: [
+      {
+        title: '锁定先机 游刃有余',
+        source: 'nzjProject_experience',
+        subtitle: '实时抓取拟在建项目,<br />预审、环评公示、可研批复‌等核心节点,<br />让商务动作快于招标公告。',
+        buttonText: '联系专家',
+        bannerImageSrc: '/bid-fileinter/image/project/nzjxm-banner-bg1@2x.png'
+      },
+    ],
+    descModule: {
+      stepList: [
+        {
+          contentTitle: '30天黄金窗口期 高手决胜立项前',
+          tabIcon: '/bid-fileinter/image/common/01.png',
+          activeTabIcon: '/bid-fileinter/image/common/01-active.png',
+          contentImageSrc: '/bid-fileinter/image/project/nzjxm-step-bg-1@2x.png',
+        },
+      ]
+    },
+    bottomBannerModule: {
+      source: 'nzjProject_contact',
+    },
+  },
+}

+ 323 - 0
src/web/staticres/bid-fileinter/js/product-introduce.js

@@ -0,0 +1,323 @@
+$(function() {
+  var __page = {
+    powerList: [],
+    powerMap: {
+      yyszb: {
+        powerKey: 'bi_sj_yyszs',
+        redirectFnName: 'goToYYSZBPage',
+      },
+      qbgl: {
+        powerKey: 'bi_yx',
+        redirectFnName: 'goToYingXiao',
+      },
+      yxgl: {
+        powerKey: 'bi_yx',
+        redirectFnName: 'goToYingXiao',
+      },
+    },
+    data: {},
+    imageViewer: null,
+    lastScrollCall: null,
+    init: function() {
+      var pageCodeList = Object.keys(__page_config)
+      var success = this.initPageData()
+      if (success) {
+        console.log('页面数据初始化成功', pageCodeList)
+        this.initModule()
+      }
+      this.initMaoDian()
+      $(window).on('scroll', function() {
+        this.windowScrollFn()
+      }.bind(this))
+      $(window).on('resize', function() {
+        this.windowScrollFn()
+      }.bind(this))
+    },
+    initPageData: function() { 
+      var code = __pageInfo.code
+      if (code) {
+        this.code = code
+        this.data = __page_config[code] || __page_config.yxgl
+        $('.page--product--introduce').addClass('style-' + code)
+        if (Object.keys(this.powerMap).indexOf(code) !== -1) {
+          this.getPowerList()
+        }
+        return true
+      }
+    },
+    initModule: function() {
+      // this.seoTdkUpdate()
+      this.initSwiper()
+      this.initDescModule()
+      this.initEvents()
+      if (this.data.showCooperationModule) {
+        $('.partners-module').show()
+      }
+      if (this.data.showPowerDescModule) {
+        $('.power-module').show()
+      }
+      $('.loaded-show').show()
+      // show之后才能init轮播
+      this.initPartners()
+    },
+    initMaoDian: function() {
+      var tab = getParam('tab') // 0/1/2/3
+      if (tab) {
+        $('.desc-module-nav-tabs .desc-module-nav-tab:eq(' + tab + ')').trigger('click')
+        setTimeout(function() {
+          window.scrollTo({ top: 424, behavior: 'smooth' })
+        }, 100)
+      }
+    },
+    checkHasPower: function() {
+      var code = this.code
+      var conf = this.powerMap[code] || {}
+      var powerKey = conf.powerKey || ''
+      var needPower = Object.keys(this.powerMap)
+      if (needPower.indexOf(code) !== -1) {
+        return this.powerList.indexOf(powerKey) > -1
+      }
+    },
+    getPowerList: function() {
+      var _this = this
+      $.ajax({
+        url: '/jyapi/resourceCenter/haspowers',
+        type: 'POST',
+        success: function(res) {
+          if (res && Array.isArray(res.data)) {
+            _this.powerList = res.data
+            if (_this.checkHasPower()) {
+              $('.experience-button').text('立即使用')
+            }
+          }
+        }
+      })
+    },
+    initSwiper: function() {
+      // 1. 准备dom
+      var swiperId = '#banner-swiper-container'
+      var container = $(swiperId).find('.swiper-wrapper')
+      var sliderTemplate = $(swiperId).find('.swiper-slide').remove()
+      var list = this.data.bannerModule || []
+      list.forEach(function (item, index) {
+        var slider = sliderTemplate.clone().show()
+        slider.find('.banner-img').attr('src', item.bannerImageSrc)
+        slider.find('.banner-title').html(item.title)
+        slider.find('.banner-subtitle').html(item.subtitle)
+        slider.find('.action-button').text(item.buttonText).attr('data-source', item.source)
+        if (item.theme) {
+          slider.attr('data-theme', item.theme)
+        }
+        if (item.buttonClass) {
+          slider.find('.action-button').addClass(item.buttonClass)
+        }
+        container.append(slider)
+      })
+
+      if (list.length > 1) {
+        var swiper = new Swiper(swiperId, {
+          pagination: {
+            el: $(swiperId).find('.swiper-pagination'),
+            clickable :true,
+          },
+          autoplay: {
+            delay: 5000,
+          },
+          speed: 800,
+          loop: true,
+          observer: true,
+          paginationClickable: true,
+          spaceBetween: 30,
+          centeredSlides: true,
+          autoplayDisableOnInteraction: false
+        })
+      }
+    },
+    initDescModule: function () {
+      var descModule = this.data.descModule
+      var descList = descModule.stepList
+      var container = $('.desc-module')
+      var tabsContainer = container.find('.desc-module-nav-tabs')
+      var tabContentContainer = container.find('.desc-module-nav-content-list')
+      // 标题
+      if (descModule.title) {
+        $('.desc-module').find('.module-title').text(descModule.title)
+      } else {
+        $('.desc-module').find('.module-header').hide()
+      }
+
+      if (this.data.fixBg) {
+        $('.desc-module').addClass('img--bg')
+      }
+
+      if (Array.isArray(descList)) {
+        var tabTemplate = tabsContainer.find('.desc-module-nav-tab').remove()
+        var tabContentTemplate = tabContentContainer.find('.desc-module-nav-content-item').remove()
+        descList.forEach(function (item, index) {
+          var tab = tabTemplate.clone().show()
+          var tabContent = tabContentTemplate.clone().show()
+
+          tab.attr('data-index', index)
+          tabContent.attr('data-index', index)
+
+          // tab
+          tab.find('.desc-module-nav-tab-icon').attr('default-icon', item.tabIcon).attr('active-icon', item.activeTabIcon)
+          tab.find('.desc-module-nav-tab-icon').css({ 'background-image': 'url(' + item.tabIcon + ')' })
+          tab.find('.desc-module-nav-tab-text').text(item.tabName)
+          // tabContent
+          tabContent.find('.desc-module-nav-content-title').html(item.contentTitle)
+          if (item.contentSubtitle) {
+            tabContent.find('.desc-module-nav-content-subtitle').text(item.contentSubtitle).show()
+          }
+          if (item.contentImgClass) {
+            tabContent.find('.desc-img-container').addClass(item.contentImgClass)
+          }
+          tabContent.find('.desc-img').attr('src', item.contentImageSrc)
+
+
+          if (descList.length > 1) {
+            tabsContainer.append(tab)
+          } else {
+            tabsContainer.hide()
+          }
+          tabContentContainer.show().append(tabContent)
+          if (descList.length > 1) {
+            // do something
+          } else {
+            tabContent.css({ 'padding-top': 0 }).show()
+          }
+        })
+
+        if (descList.length > 1) {
+          // tabsContainer.clone().addClass('sticky-float').hide().insertAfter(tabsContainer)
+          tabsContainer.addClass('sticky-placeholder')
+        }
+
+        this.initDescModuleEvents()
+        const firstTab = $('.desc-module-nav-tabs').find('.desc-module-nav-tab:eq(0)')
+        if (firstTab) {
+          firstTab.trigger('click')
+        }
+      }
+    },
+    initDescModuleEvents() {
+      var container = $('.desc-module')
+      // tab切换
+      container.find('.desc-module-nav-tabs').on('click', '.desc-module-nav-tab', function () {
+        // 切换高亮
+        $(this).addClass('active').siblings().removeClass('active')
+        // tab切换
+        $(this).parents('.module-content').find('.desc-module-nav-content-item').eq($(this).index()).show().siblings().hide()
+        // 切换图片高亮
+        var activeTabIcon = $(this).find('.desc-module-nav-tab-icon').attr('active-icon')
+        $(this).find('.desc-module-nav-tab-icon').css({ 'background-image': 'url(' + activeTabIcon + ')' })
+        $(this).siblings().each(function (_, other) {
+          var defaultIcon = $(other).find('.desc-module-nav-tab-icon').attr('default-icon')
+          $(other).find('.desc-module-nav-tab-icon').css({ 'background-image': 'url(' + defaultIcon + ')' })
+        })
+      })
+
+      // 图片点击事件
+      container.find('.desc-module-nav-content-list').on('click', '.desc-img-container', function () {
+        $('#previewModal').modal('show')
+        var url = $(this).find('.desc-img').attr('src')
+        $('#previewModal').find('.preview-img-container .desc-img').attr('src', url)
+      })
+
+      $('.dialog-close-icon').on('click', function() {
+        $('#previewModal').modal('hide')
+      })
+    },
+    initPartners: function() {
+      var partners = new Swiper('.partners-container', {
+        slidesPerView: "auto",
+        centeredSlides: true,
+        speed: 4000,
+        
+        freeMode: true,
+        loop: true,
+        slidesPerGroup: 1,
+        autoplay: {
+          delay: 1, 
+          disableOnInteraction: false,
+          pauseOnMouseEnter: true, 
+        }
+      });
+      partners.init()
+    },
+    doLeaveInfo: function (source, options) {
+      var options = options || {}
+      simpleLeaveSource.doLeaveInfo(source, options)
+    },
+    redirectToPage: function() {
+      var code = this.code
+      var conf = this.powerMap[code] || {}
+      var redirectFnName = conf.redirectFnName || ''
+      if (redirectFnName && typeof this[redirectFnName] === 'function') {
+        this[redirectFnName]()
+      } else {
+        console.warn('未定义的跳转方法: ' + redirectFnName)
+      }
+    },
+    goToYYSZBPage: function() {
+      var iframeUrl = location.origin + '/succbi/yyssjdz/app/sjdz.app/sjqd.spg'
+      var workUrl = '/page_workDesktop/work-bench/page?link=' + encodeURIComponent(iframeUrl)
+      window.open(workUrl)
+    },
+    goToYingXiao: function() {
+      var iframeUrl = location.origin + '/succbi/crm_system/app/crm.app/一级菜单/potential_business_opportunity.spg'
+      var workUrl = '/page_workDesktop/work-bench/page?link=' + encodeURIComponent(iframeUrl)
+      window.open(workUrl)
+    },
+    initEvents: function() {
+      var _this = this
+      $('.experience-button').on('click', function() {
+        var source = $(this).attr('data-source')
+        if (!loginflag) {
+          return openLoginDig(false, 'reload')
+        }
+        if (_this.checkHasPower()) {
+          _this.redirectToPage()
+        } else {
+          _this.doLeaveInfo(source)
+        }
+      })
+      $('.phone-submit-button').on('click', function() {
+        if (!loginflag) {
+          return openLoginDig(false, 'reload')
+        }
+        var source = _this.data.bottomBannerModule.source
+        var phone = $('.phone-submit-input').val()
+        simpleLeaveSource.noLoginLeaveInfo(source, phone + '', {
+          success: function(res) {
+            console.log(res)
+          }
+        })
+      })
+    },
+    seoTdkUpdate: function() {
+      var data = this.data
+      if (data && data.tdk) {
+        var title = data.tdk.title
+        var keywords = data.tdk.keywords
+        var description = data.tdk.description
+        seoTdkUpdate(title, keywords, description)
+      }
+    },
+    windowScrollFn: function() {
+      // 判断留资模块是否处于可视区域
+      var mainFooter = $('.j-bottom')
+      var stickyBanner= $('.bottom-banner-container')
+      if (!mainFooter.length) return
+      
+      var now = Date.now()
+      if (this.lastScrollCall && now - this.lastScrollCall < 100) return
+      this.lastScrollCall = now
+      // 精确计算元素位置
+      var rect = mainFooter[0].getBoundingClientRect()
+      var isInViewport = rect.top <= window.innerHeight && rect.bottom >= 0
+      stickyBanner.toggleClass('fixed', !isInViewport)
+    }
+  }
+  __page.init();
+})

+ 6 - 3
src/web/staticres/big-member/css/page_index.css

@@ -1233,18 +1233,21 @@
   margin: 0;
   margin-top: 42px;
 }
-.big-item-group:first-child {
+/* .big-item-group:first-child {
   padding-top: 120px;
-}
+} */
 .big-item-group.reverse {
   flex-direction: row-reverse;
 }
 .big-item-group {
-  padding-bottom: 120px;
+  padding-top: 120px;
   display: flex;
   flex-direction: row;
   justify-content: space-between;
 }
+.big-item-group:last-child{
+  padding-bottom: 120px;
+}
 .item-img-group img {
   width: 684px;
 }

+ 244 - 0
src/web/staticres/brand/css/property.css

@@ -0,0 +1,244 @@
+.property-container .head_img {
+  display: flex;
+  justify-content: center;
+  width: 100%;
+  height: 320px;
+  background: url('/brand/img/property/bg.png') center center no-repeat;
+  background-size: cover;
+}
+
+.property-container .head_img .head_img_content {
+  width: 1200px;
+  height: 100%;
+}
+
+.property-container .head_img .head_img_content>img {
+  margin-top: 87px;
+}
+
+.property-container .head_img .head_img_content .head_title {
+  margin-top: 20px;
+  font-size: 28px;
+  color: #383838;
+}
+
+.property-introduce .services {
+  padding-top: 52px;
+  width: 100%;
+  height: 342px;
+  background: url('/brand/img/property/s_bg.png') center center no-repeat;
+  background-size: cover;
+}
+
+.property-introduce .services .services_content { 
+  width: 1200px;
+  margin: 0 auto;
+}
+.property-introduce .title {
+  text-align: center;
+  font-size: 36px;
+  color: #1D1D1D;
+  font-weight: 700;
+  line-height: 48px;
+}
+.property-introduce .services .services_content .services_content_list { 
+  display: flex;
+  justify-content: space-between;
+  margin-top: 24px;
+}
+
+.property-introduce .services .services_content .services_content_list .services_content_item { 
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: 224px;
+  height: 84px;
+  border-radius: 16px;
+  background: linear-gradient(to bottom, rgba(192, 206, 221, 0.24), rgba(255, 255, 255, 1));
+  box-shadow: /* 第一个内阴影 */
+              0px 8px 12px rgba(192, 206, 221, 0.24),
+              /* 第二个内阴影 */
+              inset 0 4px 4px rgba(255, 255, 255, 1);
+  font-size: 18px;
+  line-height: 36px;
+  color: #1D1D1D;
+}
+
+.property-introduce .services_data {
+  position: relative;
+  display: flex;
+  justify-content: space-between;
+  margin: 52px auto;
+  width: 1200px;
+  height: 176px;
+  border-radius: 16px;
+  border: 1px solid #ECECEC;
+  box-shadow: 
+        /* Drop shadow */
+        inset 0 4px 2px rgba(255, 255, 255, 1), 
+        /* Inner shadow */
+        0 8px 12px rgba(192, 206, 221, 0.24);
+  background: linear-gradient(to bottom, #E2F1FF, #FFFFFF);
+}
+.property-introduce .services_data .services_data_item {
+  position: relative;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  padding: 32px 0;
+  width: 300px;
+}
+.services_data .services_data_item::after {
+  content: '';
+  position: absolute;
+  top: 15px;
+  right: 0;
+  width: 2px;
+  height: 146px;
+  background-color: #E0E5E8;
+  box-shadow: -1px 0 0 rgba(255, 255, 255, 1);
+}
+.services_data .services_data_item:last-child::after { 
+  display: none;
+}
+
+.services_data .services_data_item .top { 
+  font-size: 24px;
+  color: #1D1D1D;
+  line-height: 20px;
+}
+.services_data .services_data_item .center { 
+  padding: 20px 0 8px;
+  font-size: 20px;
+  color: #0048ED;
+  line-height: 32px;
+  font-weight: 700;
+}
+.services_data .services_data_item .center .large { 
+  font-size: 52px;
+}
+.services_data .services_data_item .bottom { 
+  font-size: 18px;
+  color: #686868;
+  line-height: 20px;
+}
+
+.property-introduce .question {
+  overflow: hidden;
+  width: 100%;
+  height: 457px;
+  background: url('/brand/img/property/q_bg.png') center center no-repeat;
+  background-size: cover;
+}
+
+.property-introduce .question .title { 
+  margin-top: 146px;
+}
+.property-introduce .question .question_content { 
+  display: flex;
+  justify-content: space-between;
+  width: 1200px;
+  margin: 24px auto;
+}
+
+.property-introduce .question .question_content .question_content_item {
+  padding: 42px 0 0 124px;
+  width: 584px;
+  height: 187px;
+  background: url('/brand/img/property/s1_bg.png') center center no-repeat;
+  background-size: cover;
+}
+
+.question .question_content .question_content_item:last-child { 
+  background: url('/brand/img/property/s2_bg.png') center center no-repeat;
+  background-size: cover;
+}
+
+.question .question_content .question_content_item .question_content_item_title { 
+  font-size: 22px;
+  line-height: 22px;
+  color: #FFFFFF;
+}
+
+.question .question_content .question_content_item .question_content_item_title p:last-child { 
+  margin-top: 12px;
+  width: 418px;
+  font-size: 16px;
+}
+
+.property-introduce .advantage {
+  padding-top: 52px;
+  width: 100%;
+  height: 490px;
+  background: #FFFFFF;
+}
+
+.advantage_content {
+  width: 1200px;
+  margin: 30px auto;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  flex-wrap: wrap;
+}
+
+.advantage_content .advantage_content_item {
+  width: 285px;
+  height: 144px;
+  background: linear-gradient(to bottom, #E2F1FF, #FFFFFF);
+  box-shadow: 
+        /* 第一个内阴影 */
+        inset 3px 3px 20.1px rgba(166, 255, 250, 0.3),
+        /* 第二个内阴影 */
+        inset -3px -3px 10.3px rgba(0, 72, 237, 0.25);
+  border-radius: 16px;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+}
+
+.advantage_content .advantage_content_item.long { 
+  margin-top: 20px;
+  width: 387px;
+}
+
+.advantage_content .advantage_content_item img { 
+  width: 52px;
+  height: 52px;
+}
+.advantage_content .advantage_content_item .advantage_content_item_title { 
+  margin-top: 8px;
+  font-size: 18px;
+  color: #1D1D1D;
+}
+
+.property-introduce .contact {
+  width: 100%;
+  height: 182px;
+  background: url('/brand/img/property/f_bg.png') center center no-repeat;
+  background-size: cover;
+}
+
+.contact .contact_content {
+  padding-top: 40px;
+  width: 1200px;
+  margin: 0 auto;
+}
+
+.contact .contact_content .text {
+  font-size: 20px;
+  line-height: 32px;
+  color: #1D1D1D; 
+}
+
+.contact .contact_content button {
+  margin-top: 24px;
+  width: 180px;
+  height: 46px;
+  font-size: 16px;
+  color: #FFFFFF;
+  border-radius: 6px;
+  background: linear-gradient(to right, #0048ED, #17CAE1);
+}

BIN
src/web/staticres/brand/img/property/1.png


BIN
src/web/staticres/brand/img/property/2.png


BIN
src/web/staticres/brand/img/property/3.png


BIN
src/web/staticres/brand/img/property/4.png


BIN
src/web/staticres/brand/img/property/5.png


BIN
src/web/staticres/brand/img/property/6.png


BIN
src/web/staticres/brand/img/property/7.png


BIN
src/web/staticres/brand/img/property/bg.png


BIN
src/web/staticres/brand/img/property/f_bg.png


BIN
src/web/staticres/brand/img/property/q_bg.png


BIN
src/web/staticres/brand/img/property/s1_bg.png


BIN
src/web/staticres/brand/img/property/s2_bg.png


BIN
src/web/staticres/brand/img/property/s_bg.png


BIN
src/web/staticres/brand/img/property/title.png


+ 39 - 0
src/web/staticres/common-module/pc-dialog/css/simple-leave-info.css

@@ -0,0 +1,39 @@
+.el-input__inner:focus {
+  border-color: #2abed1;
+}
+
+.simple-leave-info-dialog .el-dialog {
+  border-radius: 10px;
+  padding: 12px 6px;
+}
+
+.simple-leave-info-dialog .dialog-footer {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+.simple-leave-info-dialog .dialog-button {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 132px;
+  height: 36px;
+  border-radius: 6px;
+  font-size: 16px;
+  line-height: 24px;
+  border: 1px solid transparent;
+}
+.simple-leave-info-dialog .confirm-button {
+  color: #fff;
+  background-color: #2abed1;
+  border-color: #2abed1;
+}
+.simple-leave-info-dialog .cancel-button {
+  background-color: #fff;
+  border-color: #e0e0e0;
+}
+.simple-leave-info-dialog .dialog-text {
+  text-align: center;
+  line-height: 24px;
+}
+

+ 34 - 0
src/web/staticres/common-module/pc-dialog/js/simple-leave-info-template.js

@@ -0,0 +1,34 @@
+var simpleLeaveInfoTemplate = `
+<div>
+  <el-dialog
+    class="simple-leave-info-dialog phone-input-dialog"
+    title="请提交您的体验账户"
+    :visible.sync="phoneDialogVisible"
+    :show-close="false"
+    :close-on-click-modal="false"
+    width="380px"
+    center>
+    <span class="input-container">
+      <el-input placeholder="请输入手机号码" maxlength="11" v-model.number="phone"></el-input>
+    </span>
+    <span slot="footer" class="dialog-footer">
+      <button class="dialog-button confirm-button" @click="confirmTiYan">确定体验</button>
+      <button class="dialog-button cancel-button" @click="phoneDialogVisible = false">暂不体验</button>
+    </span>
+  </el-dialog>
+  <el-dialog
+    class="simple-leave-info-dialog success-tip-dialog"
+    title="亲爱的亿万富翁,您值得更好的回报"
+    :show-close="false"
+    :close-on-click-modal="false"
+    :visible.sync="successDialogVisible"
+    width="380px"
+    center>
+    <div class="dialog-text">我们为您预留了1v1营收倍增顾问名额,现在确认即可锁定</div>
+    <span slot="footer" class="dialog-footer">
+      <button class="dialog-button confirm-button" @click="acceptConfirm">接受这份心意</button>
+      <button class="dialog-button cancel-button" @click="successDialogVisible = false">下次再约</button>
+    </span>
+  </el-dialog>
+</div>
+`

+ 146 - 0
src/web/staticres/common-module/pc-dialog/js/simple-leave-info.js

@@ -0,0 +1,146 @@
+function createBaseDOM(id) {
+  // 创建一个新的 div 元素
+  var dialog = document.createElement('div');
+  // 设置 div 的 ID 为 "dialog"
+  dialog.id = id
+  // 将 div 元素添加到 body 中
+  document.body.appendChild(dialog);
+}
+createBaseDOM('simple-leave-info')
+
+var simpleLeaveSource = new Vue({
+  delimiters: ['${', '}'],
+  el: '#simple-leave-info',
+  template: simpleLeaveInfoTemplate,
+  data: {
+    phoneDialogVisible: false,
+    successDialogVisible: false,
+    phone: '',
+    source: '',
+  },
+  methods: {
+    checkHasLogin: function() {
+      return window.loginflag
+    },
+    checkHasBindPhone: function() {
+      return window.ajaxUserInfo.phone
+    },
+    checkPhonePass: function(phone) {
+      // 示例:简单手机号格式校验(中国大陆手机号)
+      const phoneReg = /^1[3456789]\d{9}$/;
+      return phoneReg.test(phone);
+    },
+    showInputPhoneTip: function(f) {
+      this.phoneDialogVisible = f
+    },
+    showSuccessTip: function(f) {
+      this.successDialogVisible = f
+    },
+    // init...
+    doLeaveInfo: function(source, options) {
+      var options = options || {}
+      if (!source) {
+        return showToast('未获取到source')
+      }
+      this.source = source
+      this.options = options
+      if (options.phone) {
+        this.phone = options.phone
+      }
+
+      if (this.checkHasLogin()) {
+        // 已经登录, 快速留资
+        // 是否绑定手机号
+        if (this.checkHasBindPhone()) {
+          // 某些情况下,是否有权限
+          this.showSuccessTip(true)
+        } else {
+          // 未绑定手机号。弹窗提示输入手机号
+          this.showInputPhoneTip(true)
+        }
+      } else {
+        // 未登录
+        this.showInputPhoneTip(true)
+      }
+    },
+    doQuickLeaveInfoReq: function(source, options) {
+      var options = options || this.options || {}
+      var success = options.success || function(){}
+      var _this = this
+      $.ajax({
+        url: '/salesLeads/portrait/clue',
+        type: 'POST',
+        contentType: 'application/json',
+        data: JSON.stringify({ source: source }),
+        success: function(res) {
+          if (res.error_code === 1) {
+            success(res)
+            showToast('提交成功,您的专属客服会尽快联系您')
+          } else {
+            showToast(res.error_message || '提交失败,请稍后再试')
+          }
+        }
+      })
+    },
+    phoneNumberNoLoginLeaveInfo: function(source, options) {
+      var options = options || this.options || {}
+      var success = options.success || function(){}
+      var phone = options.phone || ''
+      var _this = this
+      if (!source) {
+        return showToast('未获取到source')
+      }
+      if (!this.checkPhonePass(phone)) {
+        return showToast('手机号码格式错误')
+      }
+      $.ajax({
+        url: '/salesLeads/official/notLogin',
+        type: 'POST',
+        contentType: 'application/json',
+        data: JSON.stringify({
+          source: source,
+          phone: phone+'',
+        }),
+        success: function(res) {
+          if (res.error_code === 1) {
+            success(res)
+            showToast('提交成功,您的专属客服会尽快联系您')
+          } else {
+            showToast(res.error_message || '提交失败,请稍后再试')
+          }
+        }
+      })
+    },
+    noLoginLeaveInfo: function(source, phone, options) {
+      var _this = this
+      var options = options || this.options || {}
+      var success = options.success || function() {}
+      this.phoneNumberNoLoginLeaveInfo(source, {
+        phone: phone,
+        success: function(res) {
+          _this.showInputPhoneTip(false)
+          success(res)
+        }
+      })
+    },
+    quickLeaveInfo: function(source, phone) {
+      var _this = this
+      this.doQuickLeaveInfoReq(source, {
+        phone: phone,
+        success: function(res) {
+          _this.showSuccessTip(false)
+        }
+      })
+    },
+    confirmTiYan() {
+      var source = this.source
+      var phone = this.phone
+      this.noLoginLeaveInfo(source, phone)
+    },
+    acceptConfirm() {
+      var source = this.source
+      var phone = this.phone
+      this.quickLeaveInfo(source, phone)
+    },
+  },
+})

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor