wcj 6 jaren geleden
bovenliggende
commit
fdc7e9c19d
37 gewijzigde bestanden met toevoegingen van 1280 en 90 verwijderingen
  1. 2 1
      src/jfw/front/dataExport.go
  2. 4 3
      src/jfw/front/supsearch.go
  3. 5 5
      src/jfw/front/swordfish.go
  4. 25 0
      src/jfw/modules/app/src/app/active/active.go
  5. 155 0
      src/jfw/modules/app/src/app/active/pullnew/pullnew.go
  6. 2 2
      src/jfw/modules/app/src/app/front/swordfish.go
  7. 4 1
      src/jfw/modules/app/src/main.go
  8. 18 0
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/activity_explain.css
  9. 97 0
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/base.css
  10. 326 0
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/index.css
  11. 57 0
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/invite_page.css
  12. 102 0
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/invite_toast.css
  13. 57 0
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/link_address.css
  14. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/add.png
  15. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/bg.png
  16. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/bg2.png
  17. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/circle_left.png
  18. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/circle_right.png
  19. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/close.png
  20. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/friend.png
  21. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/invite.png
  22. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/left.png
  23. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/logo.png
  24. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/people.png
  25. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/qq.png
  26. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/square.png
  27. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/text1.png
  28. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/toast.png
  29. BIN
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/wx.png
  30. 6 0
      src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/js/clipboard.min.js
  31. 35 0
      src/jfw/modules/app/src/web/templates/active/explain.html
  32. 151 0
      src/jfw/modules/app/src/web/templates/active/pullnew/helpfriends.html
  33. 144 0
      src/jfw/modules/app/src/web/templates/active/pullnew/index.html
  34. 42 0
      src/jfw/modules/app/src/web/templates/active/pullnew/invite_page.html
  35. 44 0
      src/jfw/modules/app/src/web/templates/active/pullnew/link_address.html
  36. 0 75
      src/jfw/public/public.go
  37. 4 3
      src/jfw/public/search.go

+ 2 - 1
src/jfw/front/dataExport.go

@@ -9,6 +9,7 @@ import (
 	"jfw/public"
 	"log"
 	"qfw/util"
+	"qfw/util/jy"
 	"qfw/util/redis"
 	"regexp"
 	"strconv"
@@ -443,7 +444,7 @@ func (d *DataExport) SuperSearchExport() error {
 		if selectType == "all" {
 			isIntercept = true
 		}
-		_, _, keywords = public.InterceptSearchKW(keywords, isIntercept, len(industrySave) == 0)
+		_, _, keywords = jy.InterceptSearchKW(keywords, isIntercept, len(industrySave) == 0)
 		KeyWordSave = append(KeyWordSave, public.KeyWord{Keyword: keywords})
 	}
 	//时间

+ 4 - 3
src/jfw/front/supsearch.go

@@ -10,6 +10,7 @@ import (
 	"net/http"
 	"qfw/util"
 	"qfw/util/elastic"
+	"qfw/util/jy"
 	"qfw/util/redis"
 	"strconv"
 	"strings"
@@ -61,7 +62,7 @@ func (p *Pcsearch) ProposedProject() error {
 		shareid = "10"
 	}
 	p.T["logid"] = config.Seoconfig["jynjxmy"].(string)
-	b_word, _, s_word := public.InterceptSearchKW(p.GetString("keywords"), false, true)
+	b_word, _, s_word := jy.InterceptSearchKW(p.GetString("keywords"), false, true)
 	area := p.GetString("area")               //地区
 	publishtime := p.GetString("publishtime") //发布时间
 	subtype := p.GetString("subtype")         //信息类型
@@ -222,7 +223,7 @@ func (p *Pcsearch) PcSearchIndex() error {
 		timeslot = util.ObjToString(p.GetSession("Echo_timeslot"))
 	}
 
-	b_word, _, s_word := public.InterceptSearchKW(keywords, false, len(industry) == 0)
+	b_word, _, s_word := jy.InterceptSearchKW(keywords, false, len(industry) == 0)
 	var list *[]map[string]interface{}
 	var status = 1
 	var count, totalPage int64
@@ -236,7 +237,7 @@ func (p *Pcsearch) PcSearchIndex() error {
 			listSize = len(*list)
 		}
 		if len([]rune(s_word)) > 3 && int(count) < pc_pageSize {
-			secondKWS = public.HttpEs(s_word, "ik_smart", config.Sysconfig["elasticsearch"].(string))
+			secondKWS = jy.HttpEs(s_word, "ik_smart", config.Sysconfig["elasticsearch"].(string))
 			findfields := `"title"`
 			qstr := getSearchQuery(secondKWS, industry, minprice, maxprice, findfields, getBidSearchQuery(area, publishtime, subtype))
 			//			var secondCount int64 = 0

+ 5 - 5
src/jfw/front/swordfish.go

@@ -289,7 +289,7 @@ func (m *Front) Searchinfolist(p string) error {
 	m.T["shareid"] = se.EncodeString(shareid)
 	keywords := m.GetString("keywords")
 
-	searchvalue := public.FilteKey(m.GetString("searchvalue"))
+	searchvalue := jy.FilteKey(m.GetString("searchvalue"))
 	area := m.GetString("area")
 	publishtime := m.GetString("publishtime")
 	toptype := m.GetString("toptype")
@@ -501,7 +501,7 @@ func (m *Front) PcAjaxReq() {
 	if selectType == "" {
 		selectType = "all"
 	}
-	_, a_word, s_word := public.InterceptSearchKW(m.GetString("searchvalue"), selectType == "all", len(industry) == 0)
+	_, a_word, s_word := jy.InterceptSearchKW(m.GetString("searchvalue"), selectType == "all", len(industry) == 0)
 	var list *[]map[string]interface{}
 	var secondList []map[string]interface{}
 	var count, totalPage int64
@@ -547,7 +547,7 @@ func (m *Front) PcAjaxReq() {
 					listSize = len(*list)
 				}
 				if len([]rune(s_word)) > 3 && int(count) < pc_pageSize && start == 0 {
-					secondKWS = public.HttpEs(s_word, "ik_smart", config.Sysconfig["elasticsearch"].(string))
+					secondKWS = jy.HttpEs(s_word, "ik_smart", config.Sysconfig["elasticsearch"].(string))
 					findfields := `"title"`
 					qstr := getSearchQuery(secondKWS, industry, minprice, maxprice, findfields, getBidSearchQuery(area, publishtime, subtype))
 					secondLimit := 2*pc_pageSize - int(count)
@@ -929,7 +929,7 @@ func (m *Front) WxsearchlistPaging() {
 					listSize = len(*list)
 				}
 				if len([]rune(searchvalue)) > 3 && listSize < pc_pageSize && pageNum == 1 {
-					secondKWS = public.HttpEs(searchvalue, "ik_smart", config.Sysconfig["elasticsearch"].(string))
+					secondKWS = jy.HttpEs(searchvalue, "ik_smart", config.Sysconfig["elasticsearch"].(string))
 					findfields := `"title"`
 					qstr := getSearchQuery(secondKWS, industry, minprice, maxprice, findfields, getBidSearchQuery(scope, publishtime, subtype))
 					//					var secondCount int64 = 0
@@ -1048,7 +1048,7 @@ func getWxsearchlistData(keywords, scope, publishtime, subtype, industry, minpri
 	return getWxsearchlistData_new(keywords, scope, publishtime, subtype, industry, minprice, maxprice, pageNum, wx_pageSize, selectType, field)
 }
 func getWxsearchlistData_new(keywords, scope, publishtime, subtype, industry, minprice, maxprice string, pageNum, pageSize int, selectType, field string) (list *[]map[string]interface{}, b_word, a_word, s_word string) {
-	b_word, a_word, s_word = public.InterceptSearchKW(keywords, selectType == "all", len(industry) == 0)
+	b_word, a_word, s_word = jy.InterceptSearchKW(keywords, selectType == "all", len(industry) == 0)
 	if len(b_word) == 0 {
 		return list, b_word, a_word, s_word
 	}

+ 25 - 0
src/jfw/modules/app/src/app/active/active.go

@@ -0,0 +1,25 @@
+package active
+
+import (
+	"app/active/pullnew"
+
+	"github.com/go-xweb/xweb"
+)
+
+type active struct {
+	*xweb.Action
+
+	explain xweb.Mapper `xweb:"/jyapp/free/active/explain"` //活动说明
+}
+
+func Init() {
+	//拉新活动初始化
+	go pullnew.Init()
+}
+
+func init() {
+	xweb.AddAction(&active{})
+}
+func (a *active) Explain() error {
+	return a.Render("/active/explain.html")
+}

+ 155 - 0
src/jfw/modules/app/src/app/active/pullnew/pullnew.go

@@ -0,0 +1,155 @@
+package pullnew
+
+import (
+	"jfw/public"
+	"log"
+	"qfw/util"
+	"strings"
+	"sync"
+	"time"
+
+	"github.com/go-xweb/xweb"
+)
+
+type pullnew struct {
+	*xweb.Action
+
+	index       xweb.Mapper `xweb:"/jyapp/active/pullnew/index"`                  //首页
+	helpFriends xweb.Mapper `xweb:"/jyapp/active/pullnew/helpfriends"`            //助力好友
+	inviteCode  xweb.Mapper `xweb:"/jyapp/active/pullnew/helpfriends/invitecode"` //好友的邀请码
+	dataPacket  xweb.Mapper `xweb:"/jyapp/active/pullnew/datapacket"`             //领取资料包
+}
+
+var (
+	hasInviteCode  = make(map[string]bool)
+	size           = 50
+	inviteCodePool = make(chan string, size)
+	lock           = &sync.Mutex{}
+	collection     = "jyapp_active_pullnew"
+)
+
+func Init() {
+	//从数据库加载全部邀请码
+	log.Println("开始加载拉新活动全部邀请码。。。")
+	sess := public.MQFW.GetMgoConn()
+	defer public.MQFW.DestoryMongoConn(sess)
+	it := sess.DB("qfw").C(collection).Find(nil).Select(map[string]interface{}{"invitecode": 1}).Iter()
+	for m := make(map[string]interface{}); it.Next(&m); {
+		hasInviteCode[util.ObjToString(m["invitecode"])] = true
+	}
+	log.Println("拉新活动邀请码加载结束。。。", len(hasInviteCode))
+	//预先生成邀请码
+	for i := 0; i < size; i++ {
+		createInviteCode()
+	}
+	log.Println("预生成邀请码结束。。。")
+}
+
+//生成一个邀请码
+func createInviteCode() {
+	lock.Lock()
+	defer lock.Unlock()
+	for {
+		code := util.GetLetterRandom(5, true)
+		if !hasInviteCode[code] {
+			hasInviteCode[code] = true
+			inviteCodePool <- code
+			break
+		}
+	}
+}
+
+func init() {
+	xweb.AddAction(&pullnew{})
+}
+func (a *pullnew) Index() error {
+	userId, _ := a.GetSession("userId").(string)
+	data, ok := public.MQFW.FindOneByField(collection, map[string]interface{}{
+		"uid": userId,
+	}, `{"invitecode":1,"helpcode":1}`)
+	if ok {
+		inviteCode := ""
+		if data != nil && len(*data) > 0 {
+			inviteCode = util.ObjToString((*data)["invitecode"])
+			if util.ObjToString((*data)["helpcode"]) != "" {
+				a.T["hasHelp"] = true
+			}
+		}
+		if inviteCode == "" {
+			inviteCode = <-inviteCodePool
+			if public.MQFW.Update(collection, map[string]interface{}{
+				"uid": userId,
+			}, map[string]interface{}{
+				"$set": map[string]interface{}{
+					"uid":          userId,
+					"invitecode":   inviteCode,
+					"invitetime":   time.Now().Unix(),
+					"nickname":     util.ObjToString(a.GetSession("s_nickname")),
+					"headimageurl": util.ObjToString(a.GetSession("s_headimageurl")),
+				},
+			}, true, false) {
+				a.T["inviteCode"] = inviteCode
+				go createInviteCode()
+			} else {
+				go func() {
+					inviteCodePool <- inviteCode
+				}()
+			}
+		} else {
+			a.T["inviteCode"] = inviteCode
+			//
+			a.T["myInvites"], _ = public.MQFW.Find(collection, map[string]interface{}{
+				"helpcode": inviteCode,
+			}, `{"helptime":1}`, `{"nickname":1,"headimageurl":1}`, false, 0, 3)
+		}
+	} else {
+		a.T["hasHelp"] = true
+	}
+	return a.Render("/active/pullnew/index.html")
+}
+func (a *pullnew) MyInviteCode() {
+
+}
+func (a *pullnew) HelpFriends() error {
+	return a.Render("/active/pullnew/helpfriends.html")
+}
+func (a *pullnew) InviteCode() {
+	status := "n"
+	userId, _ := a.GetSession("userId").(string)
+	code := strings.TrimSpace(a.GetString("code"))
+	if code != "" {
+		data, ok := public.MQFW.FindOneByField(collection, map[string]interface{}{
+			"uid": userId,
+		}, `{"helpcode":1,"invitecode":1}`)
+		if ok {
+			if data != nil && len(*data) > 0 {
+				helpcode, _ := (*data)["helpcode"].(string)
+				if helpcode != "" {
+					status = "o"
+				} else if code == util.ObjToString((*data)["invitecode"]) {
+					status = "m"
+				}
+			}
+			if status != "o" && status != "m" {
+				if public.MQFW.Update(collection, map[string]interface{}{
+					"uid": userId,
+				}, map[string]interface{}{
+					"$set": map[string]interface{}{
+						"uid":          userId,
+						"helpcode":     code,
+						"helptime":     time.Now().Unix(),
+						"nickname":     util.ObjToString(a.GetSession("s_nickname")),
+						"headimageurl": util.ObjToString(a.GetSession("s_headimageurl")),
+					},
+				}, true, false) {
+					status = "y"
+				}
+			}
+		}
+	}
+	a.ServeJson(map[string]interface{}{
+		"status": status,
+	})
+}
+func (a *pullnew) DataPacket() {
+}

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

@@ -525,7 +525,7 @@ func (m *Front) WxsearchlistPaging() {
 					listSize = len(*list)
 				}
 				if len([]rune(searchvalue)) > 3 && listSize < wx_pageSize && pageNum == 1 {
-					secondKWS = public.HttpEs(searchvalue, "ik_smart", config.Sysconfig["elasticsearch"].(string))
+					secondKWS = jy.HttpEs(searchvalue, "ik_smart", config.Sysconfig["elasticsearch"].(string))
 					findfields := `"title"`
 					qstr := getSearchQuery(secondKWS, industry, minprice, maxprice, findfields, getBidSearchQuery(scope, publishtime, subtype))
 					secondLimit := 2*wx_pageSize - listSize
@@ -626,7 +626,7 @@ func getWxsearchlistData(keywords, scope, publishtime, subtype, industry, minpri
 	return getWxsearchlistData_new(keywords, scope, publishtime, subtype, industry, minprice, maxprice, pageNum, wx_pageSize, selectType, field)
 }
 func getWxsearchlistData_new(keywords, scope, publishtime, subtype, industry, minprice, maxprice string, pageNum, pageSize int, selectType, field string) (list *[]map[string]interface{}, b_word, a_word, s_word string) {
-	b_word, a_word, s_word = public.InterceptSearchKW(keywords, selectType == "all", len(industry) == 0)
+	b_word, a_word, s_word = jy.InterceptSearchKW(keywords, selectType == "all", len(industry) == 0)
 	if len(b_word) == 0 {
 		return list, b_word, a_word, s_word
 	}

+ 4 - 1
src/jfw/modules/app/src/main.go

@@ -1,6 +1,8 @@
 package main
 
 import (
+	"app/active"
+	_ "app/active/pullnew"
 	_ "app/filter"
 	_ "app/followent"
 	_ "app/front"
@@ -25,7 +27,8 @@ func init() {
 func main() {
 	//开启web
 	//限制全文检索查询
-	public.InitLimitSearchText(false)
+	go public.InitLimitSearchText(true)
+	active.Init()
 	//
 	mux1 := http.NewServeMux()
 	mux1.HandleFunc("/jyapp/res/", func(w http.ResponseWriter, r *http.Request) {

+ 18 - 0
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/activity_explain.css

@@ -0,0 +1,18 @@
+.explain {
+  background: #f4f4f9;
+}
+.explain .title {
+  font-size: .34rem;
+  text-align: center;
+  padding: .55rem 0 .46rem;
+  color: #000;
+}
+.explain .main {
+  padding: 0 .3rem .88rem;
+}
+.explain .main p {
+  line-height: 1.6;
+  font-size: .3rem;
+  text-align: justify;
+  color: #666666;
+}

+ 97 - 0
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/base.css

@@ -0,0 +1,97 @@
+* {
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    -webkit-overflow-scrolling: touch;
+}
+body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, textarea, p, blockquote, th, td, hr, button, article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, sumary {
+    margin: 0;
+    padding: 0;
+}
+html,body {
+    /* max-width: 750px; */
+    -webkit-text-size-adjust: 100%;
+    margin: 0 auto;
+    height: 100%;
+    overflow-x: hidden;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    font-size: .24rem;
+    background:rgba(245,244,249,1);;
+    color: #3d3d3d;
+    font-family:  "Microsoft YaHei","Helvetica Neue", "Roboto", "Segoe UI", "PingFang SC", "Hiragino Sans GB", sans-serif;
+}
+
+ul,ol {
+    list-style: none;
+}
+/*清除输入框内阴影*/
+input,textarea,select,button{
+    outline: none;
+    border: 0;
+    -webkit-appearance: none;
+    appearance:none;
+}
+
+img {
+    border: 0;
+    vertical-align: middle;
+    max-width: 100%;
+    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+a {
+    text-decoration: none;
+    color: #3d3d3d;
+	-webkit-tap-highlight-color: rgba(255, 255, 255, 0);
+	-webkit-user-select: none;
+	-moz-user-focus: none;
+	-moz-user-select: none;
+}
+/*禁用长按页面时的弹出菜单(iOS下有效) ,img和a标签都要加*/
+img,a{
+    -webkit-touch-callout:none;
+}
+em,i{
+	font-style: normal;
+}
+/*兼容ios调取h5页面的头部*/
+.ios-head {
+    display: none;
+    position: fixed;
+    top: 0;
+    padding-top: 15px;
+    background: #18974b;
+    width: 100%;
+    z-index: 100;
+}
+/*base*/
+.clearfix{
+    zoom: 1;
+}
+.clearfix:after{
+    clear: both;
+    height: 0;
+    overflow: hidden;
+    display: block;
+    visibility: hidden;
+    content: "";
+}
+
+.left {
+    float: left;
+}
+
+.right {
+    float: right;
+}
+.ellipsis {
+    overflow:hidden;
+    text-overflow:ellipsis;
+    white-space:nowrap;
+}
+.show{
+	display: block;
+}
+.hide{
+	display: none;
+}

+ 326 - 0
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/index.css

@@ -0,0 +1,326 @@
+.activity_detail {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  -ms-flex-wrap: nowrap;
+      flex-wrap: nowrap;
+  width: 100%;
+  height: 100%;
+  padding-top: constant(safe-area-inset-top);
+  padding-top: env(safe-area-inset-top);
+  padding-bottom: constant(safe-area-inset-bottom);
+  padding-bottom: env(safe-area-inset-bottom);
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  background: url(../images/bg.png) no-repeat center center;
+  background-size: 100% 100%;
+}
+.activity_detail .header {
+  position: relative;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+      -ms-flex-align: center;
+          align-items: center;
+  text-align: center;
+  padding: 0 .24rem;
+  height: .88rem;
+  line-height: .88rem;
+  color: #fff;
+}
+.activity_detail .header .header_left {
+  position: absolute;
+  left: .24rem;
+  top: 50%;
+  margin-top: -.18rem;
+  width: .2rem;
+  height: .36rem;
+}
+.activity_detail .header .header_title {
+  -webkit-box-flex: 1;
+      -ms-flex: 1;
+          flex: 1;
+  text-align: center;
+  font-size: .36rem;
+}
+.activity_detail .header .header_right {
+  position: absolute;
+  right: .24rem;
+  font-size: .32rem;
+}
+.activity_detail .content {
+  width: 100%;
+  padding: 0 .3rem;
+  overflow-y: scroll;
+}
+.activity_detail .people {
+  width: 6.58rem;
+  height: 9.53rem;
+  margin: .22rem auto 0;
+  background: url(../images/text1.png) no-repeat center center;
+  background-size: cover;
+}
+.activity_detail .dashed_line {
+  width: 6.58rem;
+  height: 1px;
+  margin: .55rem auto .46rem;
+  border-top: 1px dashed #ffe8cc;
+  opacity: 0.42;
+}
+.activity_detail .handle_area {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  -webkit-box-align: center;
+      -ms-flex-align: center;
+          align-items: center;
+}
+.activity_detail .handle_area .invite_title {
+  color: #fff;
+  font-size: .28rem;
+}
+.activity_detail .handle_area .invite_btn {
+  width: 5.4rem;
+  height: .9rem;
+  margin-top: .24rem;
+  line-height: .9rem;
+  background: -webkit-gradient(linear, left top, left bottom, from(#ffeacf), to(#ffd2a6));
+  background: linear-gradient(#ffeacf, #ffd2a6);
+  border-radius: .12rem;
+  text-align: center;
+  font-size: .36rem;
+  font-weight: bold;
+  color: #7F2D03;
+}
+.activity_detail .handle_area .invite_code {
+  width: 5.4rem;
+  height: .9rem;
+  margin-top: .28rem;
+  line-height: .9rem;
+  text-align: center;
+  font-size: .28rem;
+  color: #fff;
+  border-radius: .2rem;
+  border: 0.02rem solid #ffe8cc;
+}
+.activity_detail .handle_area .invite_code .copy {
+  margin-left: .99rem;
+  color: #FFDF76;
+}
+.activity_detail .hasinvite_friends {
+  margin-top: .98rem;
+  padding-bottom: .6rem;
+  width: 100%;
+  background: -webkit-gradient(linear, left top, left bottom, from(#fff1e8), to(#fed9c9));
+  background: linear-gradient(#fff1e8, #fed9c9);
+  border-radius: .12rem;
+}
+.activity_detail .hasinvite_friends .hasinvite_title {
+  width: 3.31rem;
+  height: .64rem;
+  margin: 0 auto;
+  line-height: .64rem;
+  text-align: center;
+  color: #4C2200;
+  font-size: .32rem;
+  font-weight: bold;
+  background: url(../images/square.png) no-repeat center center;
+  background-size: cover;
+}
+.activity_detail .hasinvite_friends .friend_name {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+      -ms-flex-align: center;
+          align-items: center;
+  -webkit-box-pack: justify;
+      -ms-flex-pack: justify;
+          justify-content: space-between;
+  padding: .92rem .86rem 0;
+}
+.activity_detail .hasinvite_friends .friend_name .friend_name_item {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  -webkit-box-align: center;
+      -ms-flex-align: center;
+          align-items: center;
+}
+.activity_detail .hasinvite_friends .friend_name .friend_name_item img {
+  width: 1.2rem;
+  height: 1.2rem;
+}
+.activity_detail .hasinvite_friends .friend_name .friend_name_item span {
+  margin-top: .2rem;
+  color: #888;
+}
+.activity_detail .hasinvite_friends .get_btn {
+  display: block;
+  width: 5.2rem;
+  height: .9rem;
+  line-height: .9rem;
+  text-align: center;
+  margin: .78rem auto 0;
+  color: #fff;
+  font-weight: bold;
+  font-size: .36rem;
+  border-radius: .45rem;
+  cursor: pointer;
+  border: 0;
+  outline: 0;
+  background: #F27904;
+}
+.activity_detail .hasinvite_friends .get_btn[disabled] {
+  opacity: 0.42;
+}
+.activity_detail .activity_play {
+  margin-top: .4rem;
+  width: 100%;
+  background: -webkit-gradient(linear, left top, left bottom, from(#fff1e8), to(#fed9c9));
+  background: linear-gradient(#fff1e8, #fed9c9);
+  border-radius: .12rem;
+}
+.activity_detail .activity_play .play_title {
+  width: 3.31rem;
+  height: .64rem;
+  margin: 0 auto;
+  line-height: .64rem;
+  text-align: center;
+  color: #4C2200;
+  font-size: .32rem;
+  font-weight: bold;
+  background: url(../images/square.png) no-repeat center center;
+  background-size: cover;
+}
+.activity_detail .activity_play .play_info {
+  padding: .52rem .46rem .63rem;
+}
+.activity_detail .activity_play .play_info p {
+  font-size: .28rem;
+  color: #67401E;
+  line-height: 1.6;
+}
+.activity_detail .activity_rule {
+  margin-top: .4rem;
+  width: 100%;
+  background: -webkit-gradient(linear, left top, left bottom, from(#fff1e8), to(#fed9c9));
+  background: linear-gradient(#fff1e8, #fed9c9);
+  border-radius: .12rem;
+}
+.activity_detail .activity_rule .rule_title {
+  width: 3.31rem;
+  height: .64rem;
+  margin: 0 auto;
+  line-height: .64rem;
+  text-align: center;
+  color: #4C2200;
+  font-size: .32rem;
+  font-weight: bold;
+  background: url(../images/square.png) no-repeat center center;
+  background-size: cover;
+}
+.activity_detail .activity_rule .rule_info {
+  padding: .52rem .46rem .63rem;
+}
+.activity_detail .activity_rule .rule_info p {
+  font-size: .28rem;
+  color: #67401E;
+  line-height: 1.6;
+}
+.activity_detail .activity_explain {
+  display: inline-block;
+  width: 100%;
+  padding: .42rem 0 .56rem;
+  color: #fff;
+  text-align: center;
+  font-size: .28rem;
+}
+
+.invite_way {
+  position: fixed;
+  display: none;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  height: 2.54rem;
+  background: #fff;
+  z-index: 99;
+}
+.invite_way .way_title {
+  margin-top: .3rem;
+  margin-bottom: .3rem;
+  font-size: .28rem;
+  color: #666;
+  text-align: center;
+}
+.invite_way .way_list {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+      -ms-flex-align: center;
+          align-items: center;
+  -ms-flex-pack: distribute;
+      justify-content: space-around;
+  padding: 0 1rem;
+}
+.invite_way .way_list .way_list_item {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+      -ms-flex-align: center;
+          align-items: center;
+  -webkit-box-orient: vertical;
+  -webkit-box-direction: normal;
+      -ms-flex-direction: column;
+          flex-direction: column;
+  text-align: center;
+}
+.invite_way .way_list .way_list_item img {
+  width: .9rem;
+  height: .9rem;
+}
+.invite_way .way_list .way_list_item span {
+  margin-top: .16rem;
+  font-size: .26rem;
+  color: #888;
+}
+
+@media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) {
+  .activity_detail {
+    padding-top: .44rem;
+  }
+}
+.app-layout-header{
+	background-color: inherit;
+	border-bottom: none;
+	color: #fff;
+}
+.app-layout-header>.app-back{
+	color: #fff;
+}
+.app-layout-header>.helpfriends{
+	position: absolute;
+    font-size: 17px;
+    padding-top: 2px;
+	padding-right: 11px;
+    right: 0px;
+    top: 18px;
+	color: #fff;
+	font-weight: 200;
+}

+ 57 - 0
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/invite_page.css

@@ -0,0 +1,57 @@
+.invite {
+  width: 100%;
+  height: 100%;
+  background: url(../images/bg2.png) no-repeat center center;
+  background-size: 100% 100%;
+  overflow: hidden;
+}
+.invite .logo {
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-pack: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+}
+.invite .logo img {
+  margin-top: .5rem;
+  width: 2.16rem;
+  height: .56rem;
+}
+.invite .people {
+  width: 6.91rem;
+  height: 6.17rem;
+  margin: .32rem auto 0;
+  background: url(../images/invite.png) no-repeat center center;
+  background-size: 100% 100%;
+}
+.invite .code {
+  margin-top: .72rem;
+  text-align: center;
+  font-size: .28rem;
+  color: #fff;
+}
+.invite .copy {
+  width: 1.08rem;
+  height: .48rem;
+  margin: .3rem auto 0;
+  line-height: .48rem;
+  text-align: center;
+  border: 1px solid #fff3e2;
+  border-radius: 0.08rem;
+  color: #FFDF76;
+  font-size: .28rem;
+}
+.invite .download {
+  width: 5.4rem;
+  height: .9rem;
+  line-height: .9rem;
+  margin: .64rem auto;
+  background: -webkit-gradient(linear, left top, left bottom, from(#ffeacf), to(#ffd2a6));
+  background: linear-gradient(#ffeacf, #ffd2a6);
+  border-radius: .12rem;
+  text-align: center;
+  font-size: .36rem;
+  color: #7F2D03;
+  font-weight: bold;
+}

+ 102 - 0
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/invite_toast.css

@@ -0,0 +1,102 @@
+body {
+  height: 100%;
+  background-color: pink;
+}
+
+.invite_toast {
+  -webkit-box-sizing: border-box;
+          box-sizing: border-box;
+  position: fixed;
+  width: 5.6rem;
+  height: 7.2rem;
+  left: 50%;
+  top: 50%;
+  z-index: 5000;
+  padding: 0 .5rem;
+  -webkit-transform: translate(-50%, -50%);
+          transform: translate(-50%, -50%);
+  border-radius: .12rem;
+  text-align: center;
+}
+.invite_toast .close {
+  position: absolute;
+  right: 0;
+  top: 0;
+  width: .6rem;
+  height: 1.35rem;
+  -webkit-transform: translateY(-100%);
+          transform: translateY(-100%);
+  background: transparent url(../images/close.png) no-repeat;
+  background-size: contain;
+}
+.invite_toast .go_btn {
+  position: absolute;
+  width: 4.6rem;
+  height: .9rem;
+  left: 50%;
+  bottom: .53rem;
+  color: #7f2d03;
+  font-size: .34rem;
+  font-weight: 700;
+  line-height: .9rem;
+  -webkit-transform: translateX(-50%);
+          transform: translateX(-50%);
+  border-radius: .08rem;
+  background: -webkit-gradient(linear, left top, left bottom, from(#ffeacf), to(#ffd2a6));
+  background: linear-gradient(to bottom, #ffeacf, #ffd2a6);
+}
+
+.goto_invite_box {
+  background: transparent url(../images/toast.png) no-repeat;
+  background-size: contain;
+}
+
+.invite_code_box {
+  padding-top: .9rem;
+  background-color: #fff;
+}
+.invite_code_box .top_title p:nth-of-type(1) {
+  color: #e26214;
+  font-size: .36rem;
+}
+.invite_code_box .top_title p:nth-of-type(1)::before, .invite_code_box .top_title p:nth-of-type(1)::after {
+  display: inline-block;
+  content: '';
+  width: 0.75rem;
+  height: 0.3rem;
+}
+.invite_code_box .top_title p:nth-of-type(1)::before {
+  margin-right: 0.08rem;
+  background: transparent url(../images/circle_left.png);
+  background-size: contain;
+}
+.invite_code_box .top_title p:nth-of-type(1)::after {
+  margin-left: 0.08rem;
+  background: transparent url(../images/circle_left.png);
+  background-size: contain;
+  -webkit-transform: rotate(180deg);
+          transform: rotate(180deg);
+}
+.invite_code_box .top_title p:nth-of-type(2) {
+  margin-top: .1rem;
+  color: #666;
+  font-size: .3rem;
+  font-weight: 500;
+}
+.invite_code_box .val_box {
+  margin-top: 1.1rem;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -ms-flex-pack: distribute;
+      justify-content: space-around;
+}
+.invite_code_box .val_box input[type=text] {
+  width: .86rem;
+  height: .86rem;
+  background-color: #f4f4f9;
+  text-align: center;
+  font-size: .36rem;
+  color: #e26214;
+  caret-color: #e26214;
+}

+ 57 - 0
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/css/link_address.css

@@ -0,0 +1,57 @@
+.link {
+  width: 100%;
+  height: 100%;
+  background: url(../images/bg2.png) no-repeat center center;
+  background-size: 100% 100%;
+  overflow: hidden;
+  display: -webkit-box;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-align: center;
+      -ms-flex-align: center;
+          align-items: center;
+  -webkit-box-pack: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+}
+.link .link_box {
+  width: 6.2rem;
+  height: 7.4rem;
+  padding: 1.36rem .5rem 0;
+  background: white;
+  border: 1px solid #ffc388;
+  border-radius: .12rem;
+}
+.link .link_box .address {
+  width: 5.18rem;
+  font-size: .3rem;
+  word-break: break-all;
+  word-wrap: break-word;
+}
+.link .link_box .address a {
+  color: #0987FF;
+  word-wrap: break-word;
+}
+.link .link_box .code {
+  padding-top: .2rem;
+  color: #666;
+  font-size: .3rem;
+}
+.link .link_box .tip {
+  margin-top: 1.86rem;
+  font-size: .26rem;
+  color: #666;
+}
+.link .link_box .copy_link {
+  width: 5.2rem;
+  height: .9rem;
+  margin: .4rem auto 0;
+  background: -webkit-gradient(linear, left top, left bottom, from(#ffeacf), to(#ffd2a6));
+  background: linear-gradient(#ffeacf, #ffd2a6);
+  border-radius: .12rem;
+  color: #7F2D03;
+  font-size: .32rem;
+  text-align: center;
+  font-weight: bold;
+  font-family: "PingFang-SC-Medium";
+}

BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/add.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/bg.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/bg2.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/circle_left.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/circle_right.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/close.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/friend.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/invite.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/left.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/logo.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/people.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/qq.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/square.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/text1.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/toast.png


BIN
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/images/wx.png


File diff suppressed because it is too large
+ 6 - 0
src/jfw/modules/app/src/web/staticres/jyapp/active/pullnew/js/clipboard.min.js


+ 35 - 0
src/jfw/modules/app/src/web/templates/active/explain.html

@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    {{include "/common/meta.html"}}
+    <title>活动说明</title>
+	<link href="/jyapp/css/layout.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+	<link href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+    <link rel="stylesheet" href="/jyapp/active/pullnew/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="/jyapp/active/pullnew/css/activity_explain.css?v={{Msg "seo" "version"}}">
+	<script src="/jyapp/js/jquery.js"></script>
+	{{include "/common/js.html"}}
+</head>
+<body>
+	<div class="app-layout-header">
+		<span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
+		活动说明
+	</div>
+	<div class="app-layout-content-b">
+	    <div class="explain">
+	        <div class="title">剑鱼标讯活动说明</div>
+	        <div class="main">
+	            <p>参与本次活动前,请用户详细阅读活动说明及相关条款。凡参与本次活动,则视为用户已阅读、理解并同意活动规则、说明等全部内容。</p>
+	            <p>1、用户不得以任何不正当手段或舞弊方式参与本活动。一经发现,本平台有权采取限制登录、封禁账号、撤消活动资格、账号金额清零、限制再次注册使用等措施,亦有权收回用户已领取的红包、追讨已抵现的金额或与奖品同等价值的金额,并保留追究该用户责任的权利。如因此给用户造成损失,本平台不进行任何赔偿或补偿。不正当手段及舞弊行为包括但不限于:下载非官方客户端;使用模拟器、插件、外挂等非法工具扫码、下载、安装、注册、登录、赠与、领取红包;注册多个账号;篡改设备数据;恶意牟利等扰乱平台秩序;使用插件、外挂、系统或第三方工具对本平台及本活动进行干扰、破坏、修改或施加其他影响及本平台认为的其他不正当手段。</p>
+	            <p>2、本平台依法运营此次活动,如因不可抗力、相关政策、活动调整等原因导致本次活动调整、暂停举办或无法进行的,本平台有权随时决定修改、暂停、取消或终止本活动,并无需为此承担任何法律责任。</p>
+	            <p>3、如因第三方通过各种不当手段攻击、篡改,对本平台及本次活动进行干扰、破坏、修改或施加其他影响或系统故障致使领取的红包发放、抵现等发生错误、用户无法参与或参与失败的,本平台无需为此承担任何法律责任。</p>
+	            <p>4、活动期间,因用户操作不当或用户所在地区网络故障、支付平台网络故障、电信运营商故障、第三方其他平台限制等非本平台所能控制的原因导致的用户无法参与活动、或参与失败,本平台无需为此承担任何法律责任。</p>
+	            <p>5、请用户务必通过剑鱼标讯手机官方客户端参与本次活动。任何人或第三方以本平台的名义宣称或从事类似活动或恶意发放、转让或销售红包、恶意通知用户中奖、领取红包、欺诈等造成用户损失的,本平台无需为此承担任何法律责任。</p>
+	            <p>6、在法律允许的范围内,本平台有权对本活动规则进行变动或调整。相关变动或调整将公布在活动规则页面上,并于公布时即时生效,用户继续参与该活动则视为对前述变动或者调整后的活动规则予以同意。如果用户拒绝上述活动规则的变更或者调整,应停止参与变更后的该活动。</p>
+	            <p>7、任何人不应利用本次活动进行博彩或其他违法行为。对于本平台用户,一经发现,本平台有权取消此用户参与本次活动的资格、收回所获红包或相关奖品。如其行为构成犯罪,本平台有权移交相应司法机关处理。如因其行为给本平台造成损失,同时应当承担赔偿责任。</p>
+	            <p>8、本平台的《用户协议》、《隐私政策》同样适用于本次活动,本次活动规则及相关条款与《用户协议》、《隐私政策》相冲突的,以本次活动规则及相关条款为准。本次活动规则及相关条款未约定的内容,仍以剑鱼标讯《用户协议》、《隐私政策》为准。</p>
+	        </div>
+	    </div>
+	</div>
+</body>
+</html>

+ 151 - 0
src/jfw/modules/app/src/web/templates/active/pullnew/helpfriends.html

@@ -0,0 +1,151 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+    {{include "/common/meta.html"}}
+    <title>拉新活动</title>
+	<link href="/jyapp/css/layout.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+	<link href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+    <link rel="stylesheet" href="/jyapp/active/pullnew/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="/jyapp/active/pullnew/css/invite_toast.css?v={{Msg "seo" "version"}}">
+	<script src="/jyapp/js/jquery.js"></script>
+	<script src="/jyapp/js/fastclick.js?v={{Msg "seo" "version"}}"></script>
+	{{include "/common/js.html"}}
+</head>
+<body>
+    <div class="app-layout-header">
+		<span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
+		助力好友
+	</div>
+	<div class="app-layout-content-b">
+	    <!-- 邀请好友弹框 -->
+	    <div class="goto_invite_box invite_toast" style="display: none;">
+	        <div class="close"></div>
+	        <a class="go_btn" href="javascript:;">去邀请</a>
+	    </div>
+	    <!-- 输入验证码弹框 -->
+	    <div class="invite_code_box invite_toast">
+	        <div class="close"></div>
+	        <div class="top_title">
+	            <p>输入好友的邀请码</p>
+	            <p>给好友助力</p>
+	        </div>
+	        <div class="val_box" id="val_box">
+	            <input type="text" maxlength="1" index="0" ></input>
+	            <input type="text" maxlength="1" index="1"></input>
+	            <input type="text" maxlength="1" index="2"></input>
+	            <input type="text" maxlength="1" index="3"></input>
+	            <input type="text" maxlength="1" index="4" empty="0"></input>
+	        </div>
+	        <a class="go_btn" id="submit_code" href="javascript:;">马上提交</a>
+	    </div>
+	</div>
+
+    <script>
+        $(function(){
+            var val_box = $('#val_box');
+            var codeReg = /[a-z]{5}/ig;
+            // 重置正则对象lastIndex属性
+            codeReg.lastIndex = 0;
+
+            // 进入页面(打开弹框的)时候先获取焦点
+            $('#val_box input:first').trigger('focus');
+
+            // 是否全为空,是则返回true,否则返回false
+            function isAllEmpty() {
+                var flag = true
+                val_box.children().each(function(i, dom){
+                    if ($(dom).val().length !== 0) {
+                        flag = false
+                    }
+                })
+                return flag
+            }
+            
+            // $('#val_box').on('focus', 'input', function(){
+            //     $(this).addClass('active').siblings().removeClass('active')
+            // })
+
+            // 光标的移动
+            val_box.on('keyup', 'input', function(e) {
+                // 删除,光标前移。最后一个删除时候光标不移动,最后一个为空时候光标前移
+                if (e.keyCode === 8) {
+                    if ($(this).attr('index') == '4' && $(this).attr('empty') == '1') {
+                        $(this).val('').attr('empty', 0);
+                    } else {
+                        $(this).prev('input').trigger('focus').val('');
+                    }
+                }
+            })
+            val_box.on('input', 'input', function(e){
+				this.value = this.value.toUpperCase();
+                // 输入,光标后移
+                if ($(this).val().length === 1) {
+                    // 判断当前length为0则跳到下一个input中
+                    $(this).next('input').trigger('focus');
+                }
+                if ($(this).attr('index') == '3' || $(this).attr('index') == '4') {
+                    if ($('#val_box input:last').val().length === 1) {
+                        $('#val_box input:last').attr('empty', 1)
+                    }
+                }
+            })
+
+            // 复制操作
+            $('#val_box input').on('paste', function (e) {
+                e.preventDefault();
+                e.stopPropagation();
+                $inputs = $(this).parent().children();
+                var code = null;
+                var text = e.originalEvent.clipboardData.getData("Text");
+                // 去空格,去换行,去回车
+                text = text.replace(/\s+/g, '');
+                text = text.replace(/[\r\n]/g, '');
+                
+                // 截取5位邀请码,从【的下一位开始截取
+                var startIndex = text.indexOf('【');
+                if (startIndex === -1) {
+                    try {
+                        code = codeReg.exec(text)[0]
+                    } catch (error) {
+                        return
+                    }
+                } else {
+                    code = text.substr(startIndex+1, 5)
+                }
+                // console.log(code);
+
+                if (!code) {
+                    return
+                }
+
+                // 给input赋值,最后一个input获取焦点
+                $inputs.each(function(i,dom){
+                    $(dom).val(code[i])
+                    if (i === $inputs.length-1) {
+                        $(this).trigger('focus')
+                    }
+                })
+                
+            })
+
+            $('#submit_code').on('click', function () {
+                var codeArr = []
+                $('#val_box input').each(function(i,dom){
+                    codeArr.push($(dom).val())
+                })
+                var code = codeArr.join('')
+                if(/^[A-Z]{5}$/.test(code)) {
+					$.post("/jyapp/active/pullnew/helpfriends/invitecode",{code:code},function(r){
+						if(r.status=="y"){
+							sessionStorage.hasHelp = "1";
+							window.history.back();
+						}
+					});
+                }else{
+                    console.log('非法字符');
+				}
+            })
+        })
+    </script>
+</body>
+</html>

+ 144 - 0
src/jfw/modules/app/src/web/templates/active/pullnew/index.html

@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	{{include "/common/meta.html"}}
+    <title>活动详情</title>
+	<link href="/jyapp/css/layout.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+	<link href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+    <link rel="stylesheet" href="/jyapp/active/pullnew/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="/jyapp/active/pullnew/css/index.css?v={{Msg "seo" "version"}}">
+	<script src="/jyapp/js/jquery.js"></script>
+	{{include "/common/js.html"}}
+</head>
+<body>
+	<div class="activity_detail">
+		<div class="app-layout-header">
+			<span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
+			资料包限时免费领
+			{{if not .T.hasHelp}}<a class="helpfriends hide" href="/jyapp/active/pullnew/helpfriends">助力好友</a>{{end}}
+		</div>
+		<div class="app-layout-content-b">
+	        <div class="content">
+	            <div class="people"></div>
+	            <div class="dashed_line"></div>
+	            <!-- 邀请操作 -->
+	            <div class="handle_area">
+	                <p class="invite_title">现在邀请好友使用剑鱼标讯App,立即免费拿</p>
+	                <div class="invite_btn">开始邀请</div>
+	                <div class="invite_code">
+	                    <span>我的邀请码:</span> 
+	                    <span id="code_text">{{.T.inviteCode}}</span>
+	                    <input name="copyInput" type="hidden" value="用剑鱼标讯全国招标信息免费看,不遮挡去应用市场下载剑鱼标讯APP,填我的邀请码【{{.T.inviteCode}}】立即免费使用!">
+	                    <span class="copy" id="copy_btn">复制</span>
+	                </div>    
+	            </div>
+	            <!-- 已邀请的好友 -->
+	            <div class="hasinvite_friends">
+	                <div class="hasinvite_title">已邀请的好友</div>
+	                <div class="friend_name"></div>
+	                <button disabled class="get_btn">免费领取资料包</button>
+	            </div>
+	            <!-- 活动玩法 -->
+	            <div class="activity_play">
+	                <div class="play_title">活动玩法</div>
+	                <div class="play_info">
+	                    <p>邀请好友下载、注册成为剑鱼标讯App新用户,</p>
+	                    <p>并绑定你的邀请码;</p> 
+	                    <p>邀请满3人,可免费领取资料包。</p> 
+	                </div>
+	            </div>
+	            <!-- 活动规则 -->
+	            <div class="activity_rule">
+	                <div class="rule_title">活动规则</div>
+	                <div class="rule_info">
+	                    <p>①用户成功邀请满3人,可领取信息技术行业招标文件资料包 </p>
+	                    <p>②好友必须完成注册登录,并绑定五位英文字母邀请码,才能算作邀请成功;</p> 
+	                    <p>③邀请的好友必须是未注册剑鱼标讯的新用户;</p> 
+	                    <p>④剑鱼标讯保留对该活动的最终解释权,如有相关疑问,可通过剑鱼标讯微信公众号或拨打电话:400-108-6670联系剑鱼标讯客服人员。</p>
+	                </div>
+	            </div>
+	            <a href="/jyapp/active/explain" class="activity_explain">活动说明</a>
+	        </div>
+	    </div>
+	    <div class="invite_way" id="invite_container">
+	        <p class="way_title">立即邀请</p>
+	        <div class="way_list">
+	            <div class="way_list_item">
+	                <img src="/jyapp/active/pullnew/images/wx.png" alt="">
+	                <span>微信好友</span>
+	            </div>
+	            <div class="way_list_item">
+	                <img src="/jyapp/active/pullnew/images/qq.png" alt="">
+	                <span>QQ好友</span>
+	            </div>
+	            <div class="way_list_item">
+	                <img src="/jyapp/active/pullnew/images/friend.png" alt="">
+	                <span>朋友圈</span>
+	            </div>
+	        </div>
+	    </div>
+	</div>
+    <script src="/jyapp/active/pullnew/js/clipboard.min.js"></script>
+    <script>
+        $(function () {
+			var html = "";
+			var myInvites= {{.T.myInvites}};
+			if(!myInvites){
+				myInvites = [];
+			}
+			if(myInvites.length == 3){
+				$(".get_btn").prop("disabled",false);
+			}
+			for(var i in myInvites){
+				if(myInvites[i].headimageurl == ""){
+					myInvites[i].headimageurl = "/jyapp/me/images/core_1.png";
+				}
+				html += '<div class="friend_name_item">'
+	                        +'<img src="'+myInvites[i].headimageurl+'" alt="">'
+	                        +'<span style="color: #333;">'+myInvites[i].nickname+'</span>'
+	                    +'</div>';
+			}
+			for(var i=0;i<3-myInvites.length;i++){
+				html += '<div class="friend_name_item">'
+	                        +'<img src="/jyapp/active/pullnew/images/add.png" alt="">'
+	                        +'<span>待邀请</span>'
+	                    +'</div>';
+			}
+			$(".friend_name").html(html);
+			if(sessionStorage.hasHelp!="1"){
+				$(".helpfriends").removeClass("hide");
+			}
+			$('.get_btn').on('click',function () {
+				window.location.href = '';
+			});
+            $('.invite_btn').on('click',function () { 
+                $('#invite_container').show();
+                let flag = $('#invite_container').show();
+                if(flag){
+                    $('.content').css("padding-bottom",'2.54rem')
+                }else{
+                    $('.content').css("padding-bottom",'0')
+                }
+            })
+            var clipboard = new ClipboardJS('#copy_btn', {
+                text: function() {
+                    console.log("!!!!" + $("input:hidden[name='copyInput']").val());
+                    return $("input:hidden[name='copyInput']").val();
+                }
+            });
+            clipboard.on('success', function(e) {
+                 console.log(e.text); 
+            });
+            clipboard.on('error', function(e) {
+                console.log(e); 
+            });
+			$(".app-layout-content-b").on("click",function(e){
+				if($(e.target).hasClass("invite_btn")){
+					return;
+				}
+				$('#invite_container').hide();
+			}); 
+        })
+    </script>
+</body>
+</html>

+ 42 - 0
src/jfw/modules/app/src/web/templates/active/pullnew/invite_page.html

@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    {{include "/common/meta.html"}}
+    <title>邀请页面</title>
+	<link href="/jyapp/css/layout.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+	<link href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+    <link rel="stylesheet" href="/jyapp/active/pullnew/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="/jyapp/active/pullnew/css/invite_page.css?v={{Msg "seo" "version"}}">
+	{{include "/common/js.html"}}
+</head>
+<body>
+    <div class="invite">
+        <div class="logo">
+            <img src="/jyapp/active/pullnew/images/logo.png" alt="logo">
+        </div>
+        <div class="people"></div>
+        <div class="code">
+            <span>131****5200</span>
+            <span>的邀请码</span>
+            <span class="code_number">PX98J</span>
+        </div>
+        <div class="copy">复制</div>
+        <input name="copyInput" type="hidden" value="用剑鱼标讯全国招标信息免费看,不遮挡去应用市场下载剑鱼标讯APP,填我的邀请码【PX98J】立即免费使用!">
+        <div onclick="window.location.href= '#';return false" class="download">立即下载剑鱼标讯App</div>
+    </div>
+    <script src="/jyapp/active/pullnew/js/clipboard.min.js"></script>
+    <script>
+        var clipboard = new ClipboardJS('.copy', {
+            text: function() {
+                return $("input:hidden[name='copyInput']").val();
+            }
+        });
+        clipboard.on('success', function(e) {
+                console.log(e.text); 
+        });
+        clipboard.on('error', function(e) {
+            console.log(e); 
+        });  
+    </script>
+</body>
+</html>

+ 44 - 0
src/jfw/modules/app/src/web/templates/active/pullnew/link_address.html

@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	{{include "/common/meta.html"}}
+    <title>资料包领取</title>
+	<link href="/jyapp/css/layout.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+	<link href="/jyapp/css/font.css?v={{Msg "seo" "version"}}" rel="stylesheet">
+    <link rel="stylesheet" href="/jyapp/active/pullnew/css/base.css?v={{Msg "seo" "version"}}">
+    <link rel="stylesheet" href="/jyapp/active/pullnew/css/link_address.css?v={{Msg "seo" "version"}}">
+	{{include "/common/js.html"}}
+</head>
+<body>
+    <div class="link">
+        <div class="link_box">
+            <p class="address">
+                <span>链接:</span>
+                <a class="network_disk" href="#"> https://pan.baidu.com/s/1N7SIorQpdHpCustcPpebRg</a>
+                <input type="hidden" name="network_disk" value="https://pan.baidu.com/s/1N7SIorQpdHpCustcPpebRg">
+            </p>
+            <p class="code">提取码:<span>iq1x</span></p>
+            <p class="tip">可复制链接打开百度网盘下载资料包,操作更方便哦!</p>
+            <button class="copy_link">复制链接</button>
+        </div>
+    </div>
+   	<script src="/jyapp/js/jquery.js"></script>
+    <script src="/jyapp/active/pullnew/js/clipboard.min.js"></script>
+    <script>
+        $(function () { 
+            var clipboard = new ClipboardJS('.copy_link', {
+                text: function() {
+                    console.log("复制的链接地址为" + $("input:hidden[name='network_disk']").val());
+                    return $("input:hidden[name='network_disk']").val();
+                }
+            });
+            clipboard.on('success', function(e) {
+                 console.log(e.text); 
+            });
+            clipboard.on('error', function(e) {
+                console.log(e); 
+            });  
+         })
+    </script>
+</body>
+</html>

+ 0 - 75
src/jfw/public/public.go

@@ -3,10 +3,6 @@ package public
 import (
 	"encoding/json"
 	"fmt"
-	"io/ioutil"
-	"log"
-	"net/http"
-	"net/url"
 	"qfw/util"
 	"qfw/util/elastic"
 	"qfw/util/jy"
@@ -18,79 +14,8 @@ import (
 	"gopkg.in/mgo.v2/bson"
 )
 
-var MatchSpace = regexp.MustCompile("\\s+")
 var ClearHtml = regexp.MustCompile("<[^>]*>")
 var ClearOther = regexp.MustCompile("[\n\r\\s\u3000\u2003\u00a0]")
-var filterReg_3 = regexp.MustCompile("(项目|公告|公示)$")
-var filterReg_2 = regexp.MustCompile("^[)\\)>》】\\]}}〕,,;;::'\"“”。.\\??、/+=\\_—*&……\\^%$¥@!!`~·(\\(<《【\\[{{〔]+$")
-var filterReg_1 = regexp.MustCompile("^([0-9]{1,3}|[零一二三四五六七八九十]{1,2}|联系人?|电话|地址|编号|采购|政府采购|成交|更正|招标|中标|变更|结果)$")
-var filterReg = regexp.MustCompile("^[的人号时元万公告项目地址电话邮编日期联系招标中结果成交项目项目采购采购项目政府采购公告更正公告]+$")
-
-func FilteKey(k string) string {
-	k = strings.TrimSpace(k)
-	k = filterReg_3.ReplaceAllString(k, "")
-	k = filterReg_2.ReplaceAllString(k, "")
-	k = filterReg_1.ReplaceAllString(k, "")
-	k = filterReg.ReplaceAllString(k, "")
-	return k
-}
-
-//超过20个字,截断
-//返回截取后的字符串和截取掉中的前3个字
-func InterceptSearchKW(word string, isIntercept, isFilter bool) (b_word, a_word, s_word string) {
-	if isFilter {
-		word = FilteKey(word)
-	}
-	word = MatchSpace.ReplaceAllString(strings.TrimSpace(word), " ")
-	words := []rune(word)
-	if len(words) > 20 && isIntercept {
-		b_word = string(words[:20])
-		b_word = strings.TrimSpace(b_word)
-		if len(words) > 23 {
-			a_word = string(words[20:23])
-		} else {
-			a_word = string(words[20:])
-		}
-	} else {
-		b_word = word
-	}
-	a_word = strings.TrimSpace(a_word)
-	s_word = MatchSpace.ReplaceAllString(b_word, "+")
-	return
-}
-
-//
-func HttpEs(ques, analyzer, esAddress string) (res string) {
-	surl := esAddress + "/bidding/_analyze"
-	URL, _ := url.Parse(surl)
-	Q := URL.Query()
-	Q.Add("text", ques)
-	Q.Add("analyzer", analyzer)
-	URL.RawQuery = Q.Encode()
-	resp, err := http.Get(URL.String())
-	if err != nil {
-		log.Println("err1:")
-	} else {
-		result, err := ioutil.ReadAll(resp.Body)
-		if err == nil {
-			defer resp.Body.Close()
-			var resmap map[string]interface{}
-			json.Unmarshal(result, &resmap)
-			if resmap != nil {
-				tokens := util.ObjArrToMapArr(resmap["tokens"].([]interface{}))
-				for k, v := range tokens {
-					if FilteKey(util.ObjToString(v["token"])) != "" {
-						if k > 0 {
-							res += "+"
-						}
-						res += util.ObjToString(v["token"])
-					}
-				}
-			}
-		}
-	}
-	return
-}
 
 /*
  * 结果列表转换,目前只换行行业字段

+ 4 - 3
src/jfw/public/search.go

@@ -7,6 +7,7 @@ import (
 	"log"
 	"qfw/util"
 	"qfw/util/elastic"
+	"qfw/util/jy"
 	"qfw/util/redis"
 	"sort"
 	"strconv"
@@ -282,7 +283,7 @@ func GetDataExportSearchCountUseId(_id string) (count int) {
 				if count > 0 {
 					res = doSearch(qstr, 0, count, "")
 				}
-				secondKWS := HttpEs(scd.Keyword[0].Keyword, "ik_smart", config.Sysconfig["elasticsearch"].(string))
+				secondKWS := jy.HttpEs(scd.Keyword[0].Keyword, "ik_smart", config.Sysconfig["elasticsearch"].(string))
 				scd.Keyword[0].Keyword = secondKWS
 
 				qstr = getDataExportSql(scd)
@@ -364,7 +365,7 @@ func GetDataExportSearchResultUseId(_id, dataType string, count int) *[]map[stri
 				if count > 0 {
 					res = doSearch(qstr, 0, count, "")
 				}
-				secondKWS := HttpEs(scd.Keyword[0].Keyword, "ik_smart", config.Sysconfig["elasticsearch"].(string))
+				secondKWS := jy.HttpEs(scd.Keyword[0].Keyword, "ik_smart", config.Sysconfig["elasticsearch"].(string))
 				scd.Keyword[0].Keyword = secondKWS
 				qstr = getDataExportSql(scd)
 				res2 := doSearch(qstr, 0, 100-count, "")
@@ -412,7 +413,7 @@ func GetDataExportSearchResultUseId(_id, dataType string, count int) *[]map[stri
 				searchTextSize = len([]rune(scd.Keyword[0].Keyword))
 			}
 			if searchTextSize > 3 && num < 50 {
-				secondKWS := HttpEs(scd.Keyword[0].Keyword, "ik_smart", config.Sysconfig["elasticsearch"].(string))
+				secondKWS := jy.HttpEs(scd.Keyword[0].Keyword, "ik_smart", config.Sysconfig["elasticsearch"].(string))
 				scd.Keyword[0].Keyword = secondKWS
 				qstr = getDataExportSql(scd)
 				res2 := doSearch(qstr, 0, 100-num, "")

Some files were not shown because too many files changed in this diff