Преглед на файлове

Merge branch 'dev4.5' of http://192.168.3.207:8080/qmx/jy into dev4.5

zhangxinlei1996 преди 4 години
родител
ревизия
a206e4ab97
променени са 41 файла, в които са добавени 2830 реда и са изтрити 842 реда
  1. 73 0
      src/jfw/front/jylog.go
  2. 8 0
      src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/j-icons.css
  3. 0 399
      src/jfw/modules/app/src/web/staticres/jyapp/css/index.css
  4. 12 0
      src/jfw/modules/app/src/web/staticres/jyapp/css/subscribe.css
  5. 64 25
      src/jfw/modules/app/src/web/staticres/jyapp/js/historypush.js
  6. 93 16
      src/jfw/modules/app/src/web/staticres/jyapp/js/searchindex.js
  7. 1 0
      src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/price.js
  8. 4 0
      src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_index_new.js
  9. 117 13
      src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_renew.js
  10. 0 15
      src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_upgrade.js
  11. 22 24
      src/jfw/modules/app/src/web/templates/frontRouter/collection/sess/index.html
  12. 0 6
      src/jfw/modules/app/src/web/templates/vipsubscribe/vip_UpgradePage.html
  13. 127 37
      src/jfw/modules/app/src/web/templates/vipsubscribe/vip_purchase.html
  14. 52 2
      src/jfw/modules/app/src/web/templates/vipsubscribe/vip_renew.html
  15. 114 24
      src/jfw/modules/app/src/web/templates/weixin/historypush.html
  16. 70 3
      src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html
  17. 62 0
      src/jfw/modules/app/src/web/templates/weixin/search/tabSearch.html
  18. 15 3
      src/jfw/modules/common/src/qfw/util/jy/subscribepush.go
  19. 2 2
      src/jfw/modules/subscribepay/src/service/vipSubscribePay.go
  20. 32 2
      src/web/staticres/common-module/collection/css/index.css
  21. BIN
      src/web/staticres/common-module/collection/image/icon-right-bg.png
  22. 2 3
      src/web/staticres/common-module/collection/js/cate-mobile.js
  23. 145 40
      src/web/staticres/common-module/collection/js/date-mobile.js
  24. 272 0
      src/web/staticres/common-module/collection/js/index-wx.js
  25. 192 98
      src/web/staticres/common-module/collection/js/index.js
  26. 1 0
      src/web/staticres/common-module/collection/js/notice-mobile.js
  27. 53 0
      src/web/staticres/common-module/collection/js/phone-mobile.js
  28. 40 0
      src/web/staticres/common-module/collection/js/root-mobile.js
  29. 61 0
      src/web/staticres/common-module/collection/js/tags-mobile.js
  30. 255 0
      src/web/staticres/common-module/ent-search/ent-search-template.css
  31. 7 0
      src/web/staticres/common-module/ent-search/ent-search-template.css.map
  32. 104 0
      src/web/staticres/common-module/ent-search/ent-search-template.js
  33. 231 0
      src/web/staticres/common-module/ent-search/ent-search-template.scss
  34. 350 0
      src/web/staticres/common-module/keep-tags/keep-tags-template.js
  35. 56 61
      src/web/staticres/common-module/vipsubscribe/js/vip-coupon-template.js
  36. 66 24
      src/web/staticres/common-module/vipsubscribe/js/vip-size-template.js
  37. 0 39
      src/web/staticres/frontRouter/pc/collection/css/index-pc.css
  38. 2 0
      src/web/staticres/frontRouter/pc/collection/js/index-pc.js
  39. 5 0
      src/web/staticres/js/selector/price-pc.js
  40. 6 6
      src/web/templates/frontRouter/pc/collection/sess/index.html
  41. 114 0
      src/web/templates/frontRouter/wx/collection/sess/index.html

+ 73 - 0
src/jfw/front/jylog.go

@@ -0,0 +1,73 @@
+package front
+
+/**
+日志文件自动切换,默认保留15天内日志
+**/
+
+import (
+	"log"
+	"os"
+	"path/filepath"
+	"regexp"
+	"time"
+
+	"github.com/go-xweb/xweb"
+	"github.com/robfig/cron"
+)
+
+//日志格式
+var fileReg = regexp.MustCompile("^(\\d{4}_[0-9_]{14})\\.log$")
+
+//当前日志文件句柄
+var LogFile *os.File
+
+//时间格式
+var FMT = "2006_01_02_15_04_05"
+
+//日志目录
+var LogPath = "./jylog"
+
+func init() {
+	os.Mkdir(LogPath, os.ModePerm)
+	//默认保留15天内的日志,-1为永久保留
+	initLog(15)
+}
+
+func initLog(saveDay int) {
+	go logfile()
+	task := cron.New()
+	task.Start()
+	task.AddFunc("0 0 0 * * ?", func() {
+		go logfile()
+		time.Sleep(50 * time.Second)
+		if saveDay > 0 {
+			filepath.Walk(LogPath, func(path string, info os.FileInfo, err error) error {
+				str := fileReg.FindStringSubmatch(info.Name())
+				if len(str) == 2 {
+					t, er := time.ParseInLocation(FMT, str[1], time.Local)
+					if er == nil {
+						if (time.Now().Unix()-t.Unix())/86400 > int64(saveDay) {
+							log.Println("delete log file:", path, os.Remove(path))
+						}
+					}
+				}
+				return nil
+			})
+		}
+	})
+}
+
+//创建并切换输出文件
+func logfile() {
+	now := time.Now().Format(FMT)
+	file, _ := os.Create(LogPath + "/" + now + ".log")
+	log.SetOutput(file)
+	xweb.RootApp().Logger.SetOutput(file)
+	go func(file *os.File) {
+		time.Sleep(5 * time.Second)
+		if LogFile != nil {
+			LogFile.Close()
+		}
+		LogFile = file
+	}(file)
+}

+ 8 - 0
src/jfw/modules/app/src/web/staticres/jyapp/big-member/css/j-icons.css

@@ -331,6 +331,14 @@
 .icon-care {
     background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMdSURBVHgB7ZhNbtNAFMffG4e2qpDwDZplqIQan4CECCRWFScATtDcgPQG7QmanqBLJBBKNqydbtJKbMINsuoHpPOYl5Lijxl/jkMX/m3aWOM3/9947BkboKampqamBAg5aX31O0JAR526QyBcBDkHoJ9SwvjytTdOO7955rtbT6GNwtlX57pFauQW4E633cYBkuwTgJvQdAYohlewOJ51vXmZGtPui0PIQKrA7he/DQ1xxhkgO7PfC/nuxxtvUqaGvJXdy7feLKlRogB3jA0xShkxE3OJ0Od/HIKjojXUQHRXA6HDKND67DedTeFrOp4TyVMEZ0J0N0d0XMK7DoB4idlHOE+NuboSnulKNEw9iM34yBPB8bWQg9mr8PxWDFsjv4kSPqj5+wkSyFCjr2ocBI67KgtPP09XT3sFdr/5HOQk3DMcTnt7A0hBnTswSpSpQfLjtOcNo22FrgCGR0AdoGGWjhnVyUB1Fn+CZAy/qkEgT0Ono/Ne1zYmwHNfTZ128JgEyvRICwYISeQIv2Lz7wNgBQJ1nn+f7kTbxQTwSTg8AY4vu8mPMh0PEgXCMxO1jqjQ4+AxvLntRtvFbmLEsIC6686hIEuJEhD3jdh5+K15FIu0IvfL/H8j1DdmEaDISSAwNu/Wh7MX/BXLBjoBCeFVj/5dwrWDFL4fo9lAI7DVWDYKmjZ5BwprZrkWRVblm0YGAb77lfk41MgRJ82RX2QvUwjeucYWMrUWRXe4y2y6AnJBx9Ga2yRG65BYbrufiRFERt+0FmkFli8VJKMS7aolAuHDc1/tn0xrkfExuiFgoP5E51xlEsbwKsNFb69vOs8owPfCBkpe+SqXSAp/fZ/BSOobWVsF/UXx4orJlSquu7HykBY+rX6md+KqJMqGZzJ/lbAtYSM8k+uzii0JW+GZ3N+FykrYDM/kFmCKStgOzxQSYPJKVBGeKSzAZJWoKjxTSoBJk+B9bVXhmdICTJLEqknwoK3wjBUBJkEihM3wjDUBJk3CdnjGqgBjkqgiPGNdYEVLvRIKwH3gD7lA5xc97whqampqah4bfwB4gRKgFSK1ugAAAABJRU5ErkJggg==);
 }
+/* 上拉加载 */
+.icon-up-allow {
+    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFPSURBVHgB7ZddSsNAEMdnN+t7j1BPoEeIR/BZBEXMq96g8Qa+BbOEQIvnKJ5Aj+AR+qxk146aKjVxN50RLJ0fLCEf+8+P7AcTAEEQhBWFrVNswIgGJmx1PzHKzLHZajYBJhQwgHLgXb6WnF9enN4AEbJgp9xXOlmSJPhTzi8+Y0ff3kCS3FiwS8675ug9VCdzLsmNBPvksuz8Cc/Ksj7kkhwsGJJr4ZIcJBgrxykZLRiSK4p6bPbMowK1cE4dZ9kJy3BHbdQxX04bjfdHHvxYJ81Vex2f+Vg87QrH7pDHbuZBwbKang0Z1i76JO/s9DrUNyjonU+BIPebZKLhINQvKKi8u10O2zNFbl2yzXt9aYLz0MSELg/7wMTQPLZq5q8QQSoiSGV3BDWo1f7oGniA/4i1sxQb7BIsf3VIX7lFhW8O9pRb5FxgQhaJIAhbyhuCrfgwlEMNCwAAAABJRU5ErkJggg==");
+}
+/* 上拉加载 */
+.icon-address {
+    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKaSURBVHgB7ZhBkhIxFED/T+OMsxJv0OwAF8AJBKa0ypVHgCPMDYAbOCeQOQHDyoUOjSdocIFUubBvIKsplenE/JapckZ+Ot2dZb8qqqvIT3jwk58EgJKSEiMIBah/DLsovLd6lDaC8vVb/mHQnQRcgYKVkvF8+6qzhJzkEkzEPG+kpbqWXSJQcrI570whI5kE/VlYPXvmzTKIPUThVP6OJ9s3nci2i7Vg/UPoi1MRwCGNBYjkL9mzlbQSdCh3j7WkAAu03AzcyRE+nnrvbQJTBZvBeqQfbUhHLwR1nbxArdKCaR43bsKL9DgDVqlFdb3fq8m3150HUvUg9FHBGEEMgGd3i7IW9To7LqBi6AziBLpGOQWTTb89Pta07SXza9i8CSNAMWJGqJ5JGOrnO+AcwAAiDoxy560xpKBr31jXwEv+Q3ShN8AKtoOwqgC7cNQNolsh2W/9mBMBY/04mkaai77+LMgq+POOXxiIammaN49ZUaySV1z7E8M0sioz/yHVZ8gOu7IrcQ5BIZzWPSOIkD3FSgGbQj0H2QHz9JFS11AGXtDjU5K28o52Ae8l1xZX+B/DWKibi/UPYL653ktrthv+oeB/Z5p3m37rOdfXvEgULtmOf/dnK4yxSFujoa+pUcr40tDcbiy+BPTrcAF0fqQYMOzlKlZzMJB63HqxWAVcwT5AW9l0v7+b3+/HSUqfVgao5IVpcVDB/9pv1aCIIB3vhZccGJwjY30mTLmvpBbqZAB9nwDX6L3c5jJlfeRvfFpPUcAAHKBTe6VTO7SJzXRpciGZRY7IfO0sIplVjsh1L84jmUeOyP3PQhbJvHJEob8+bCSLyBGFBAmTZFE5orAgcUzShRzhRJD4V9KVnHNIsrFYT6GkxJ4/YdQTQvZUTqcAAAAASUVORK5CYII=");
+}
 
 /******** img背景图 **********/
 .j-img {

+ 0 - 399
src/jfw/modules/app/src/web/staticres/jyapp/css/index.css

@@ -1,399 +0,0 @@
-.collection{
-  width: 100%;
-}
-
-/* 时间选择弹窗s */
-.headertitle{
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  padding: .44rem .32rem .24rem;
-  width: 100%;
-  font-size: .4rem;
-  font-weight: 500;
-  color: #171826;
-}
-.headertitle .title_close{
-  display: flex;
-  width: .4rem;
-  height: .4rem;
-  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAgVBMVEUAAAChoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaEAAADUxRFJAAAAKXRSTlMABUuRxuj4EH7q6VXnA5Srk1b+wcP8f2UBm6BgxL+SxfkGgFhX60zH+uqurTcAAAABYktHRACIBR1IAAAACXBIWXMAAAsSAAALEgHS3X78AAAA00lEQVQoz4WT1xaCMAxAwyh7uVAQAVFG/v8HLSAjiO19aU7vOZBmAEwoqqYzw2C6piqwxbRsnHEsk1rXQ4LnrqQf4A+BP9sQdwgnH+Eu0fe/+IfDkPOY1fG03J8vw8H6/OPRXm/JZFP/PvqYV2N8b+bD5FMePobIVkDF5TIhAUeFHKlfW8whQ+KJxQJWpe4VsWhDicQTi6VMSz5eiFMTPiySlUVY1KewJVXfUCZsqGQcZMMkG0XJIHNejEr23ixRVS+yrjZL1K9gk7dO1zlt3iwr+AHFoWJRdvcdHQAAAABJRU5ErkJggg==) no-repeat;
-  background-size: contain;
-}
-.datepopup .van-picker-column__item.van-picker-column__item--selected{
-  font-size: .36rem;
-  color: #2ABED1;
-}
-.datepopup .van-picker-column__item{
-  float: none!important;
-}
-/* end */
-.collection .search-container{
-  position: relative;
-}
-.collection .van-dropdown-menu__bar.van-dropdown-menu__bar--opened{
-  width: auto;
-  overflow: auto;
-  height: .88rem;
-  box-shadow: none;
-  border-bottom: 1.5px solid rgba(0,0,0,0.05);
-  z-index: 10;
-}
-.collection .van-dropdown-menu__item{
-  flex: none;
-  padding: .24rem .38rem;
-}
-.collection .my-search.van-search.van-search--show-action{
-  border-bottom:1.5px solid rgba(0,0,0,0.05);
-}
-.collection .van-search__content{
-  border-radius: .18rem;
-  height: .8rem;
-}
-
-.collection .van-search .van-cell{
-  padding: 10px 12px;
-}
-
-.collection .van-dropdown-menu__title.van-dropdown-menu__title--active.van-dropdown-menu__title--down{
-  color: #2ABED1;
-  font-size: .28rem;
-}
-.collection .van-icon.van-icon-search{
-  width: .4rem;
-  height: .4rem;
-}
-.collection .van-list{
-  padding: 0 .32rem;
-  background: #ffffff;
-}
-.collection .listaction{
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  padding: 0 .32rem;
-  width: 100%;
-  height: .88rem;
-  background: #ffffff;
-  font-size: .28rem;
-  font-weight: 500;
-  color: #2abed1;
-  line-height: .4rem;
-}
-.collection .data_report .collec_datareport{
-  display: flex;
-}
-.collection .data_download{
-  display: flex;
-  margin-right: .08rem;
-  width: .32rem;
-  height: .32rem;
-  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAeCAYAAABNChwpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAJkSURBVFhH7ZbLaxNRFMb9e5RWtCKoCzelO0FEpAg+Fy7adalvBAVd6E78H0QXgtWKYhu1BJtEm7RJ20zS1Ngkk1jzaB6TmWQmX88ZJ8poksmMjW7ywV3ce7nz/eaec8+9u/Cf1QdwDKA2GsgpdfgLFYSKEurUdyLHAMW6ipfpPI7OhXDSI0CsKsaMPTkGSEoKHsXS2D0TwOEPQUyJeWPGnhwDxCsyHkRTfYA+QB+g9wBCqYq337YQLkmQNc0YtQYoU6FyZ0vw5kp6xWwnS4C7QhKnfRFcW/6KefpYE6ITAJs/TWZxyR/DWGAdc9miMfOnLAHGAjEMuRZx4N0SLofiWCiUoRBEO4CKqmI6k8cpr4C9s4sYdi9jKp3T51rJEoAXX/gc/QkxSRB+goiUqyaA52IOkqphmu6HE54wBsn8CI3fCSf0MLZTV0n4OlPAeYLYb0BMBON4QUb3KDwMcOh9EI8T3ylXChhxr2Bg9sfYzZUNPXc6qSsA1hv6OEPsI4gh1xJGvRGMU3wZgKGuU47wzbiH+geN/hrtkpW6BmDxH54jCI4tG7dqHKqrZB6XZGNVZ9kCYLk2t3DmUxQDLcwZ7AaZ23kb2AaoaQ19J0Z9gsl8kOI+Efyin3nNxuvINgCrStk+QztxlnaCzTk5+XTYNWc5AmDxeffly7i1uqEfx3/+JGPJtBMJepqJsjNz1l8B7IRMAFznPVTvn1Ad71V7RUVtvfKrPpgANpUaLi6s4djH1Z41LmAPY6Lh+BtARq7h+HzYdLx2unGJvk33Q1MmAM7sZ6ksrlAx6VW7H0nRO6F5PQPb/EEL2Uq9DN4AAAAASUVORK5CYII=) no-repeat;
-  background-size: contain;
-}
-.collection .collec_active{
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-}
-.collec_active .cancel_collec{
-  margin-right: .22rem;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-.collection .collec_li{
-  padding: .36rem 0 .4rem;
-  width: 100%;
-  background: #ffffff;
-  border-bottom: 0.5px solid rgba(0,0,0,0.05);
-}
-.collection .collec_li .collec_head{
-  display: flex;
-  justify-content: space-between;
-  align-items: flex-start;
-}
-.collection .collec_li .collec_title{
-  flex: 1;
-  font-size: .32rem;
-  color: #171826;
-  font-weight: 500;
-  line-height: .48rem;
-}
-.collec_star{
-  margin-left: .36rem;
-  width: .4rem;
-  height: .4rem;
-}
-.collec_star .shoucang{
-  display: flex;
-  width: .4rem;
-  height: .4rem;
-  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAHRSURBVHgB1VVLTsMwEH1jCB8hpHICwpIVsASERE4CV+AEcARuAjdoJYTY0e4QbBpOQBGC8quH5/RD2jiti7rhSZNY8fjNmxnbAaaAVlFxNs2a+WmcEeECJhslmDX0Cod6Dc2M49B1JtQRgtPBeC43nkWATLHkVCuzCcwiLAODo8K3wCxkkgN3TYwFNL2TFokcoIbQAHpDsi9sU3FMW6fKWFfkEO+oyIf61qdkSPluMNgjS9fgupbs850PwHqecaKQsi5yerWn4UshL+pUh0FwIns47/bA4JLPVsFpKTeOBLpmoMsTq+o2QYtW61K7YN2UkkKQSEZVASsM5LIyY8iFvemVaeCWfTDYAbKaulNbDpZOK8YXJM2T9zUNC3CNtqiyFLFTOxau72/sTVu75Ibkuz2BZQH6QViGOksUdLHJm6Z41wK5g7eSmWMkKUJg1e2wlo/cYdxtuo1J+N26cZmLN4PPhwnkSuJX2vPgXFT0lgczNIDRuRhlcKqfSNweOdlt/z/C3wOrxQxEax1rE5InVJ0W5kvK5O2BMbqlgw2mjY7Vk2hz6FLb4I/nmG93vcQ9qd4SeWEfpGrvpfl9l5GMhQtEa9LqCIXWp/ux/3XN/8APC++o0hFQWAMAAAAASUVORK5CYII=) no-repeat;
-  background-size: contain;
-}
-.collec_star .weishoucang{
-  display: flex;
-  width: .4rem;
-  height: .4rem;
-  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJESURBVHgB1VXRbdswEL2jqH5rg7gT1NnA3iAdIKmNxiqCfhSdQOkETb+M2goUxO13vEHcCapOEGUDfQaQyOsdYQV2ItdU/noATYt6994deUcBdLAsyyIZXXx0F3Bt9M3679DXR/kCp/PFgCc35vNs4OvnLaAREgQqAKgE1Imvn5dAE7218MUSfoMOWXgJhIjvJPo4Prl6peuLLlnsFZhOsx4BjSR6eR6Px2WXLPApmQp1H4h6WqkDwzMDBhx9GQTmUMgFJ6Vam+AOQZUsXijEvLb23oLJLUH5MR7nWwLf54tzxYe4rc3bAFggUm4N/JLt2XybposjC8BbBz3G8sCt/rBEnz9MTi5cHyDVS8Dgk4DY4W1V1fnZ2biAf9jp6fGSp2XzLFlVVXCECjMJDsmsZN2dQcwpkTXDddRf4QX28AARKJUIh3DF6216PGRZqCtzaMFCGIa3ch6+5IIN2Eex7ya5GLaDAwYrqKpquG+rNsmryjzDPytTARgGEthIhzqDPRaG+mYXeatAI4JcQeBnBQGWuzLd2WgE0OfxB/YYn9k9uFJtt1aB2Szrr0VWzZqU4fxykcxm16MtMDcZ/0Zp+vPAW0Ap3ZO5tnXhBC+vR5UJf7PiudR5mv64exQyxlWMdWXuKWDIugy4u6MZkyFh5q5q4g8NDynlRogwGLhskXptXK1ftADVG5KXqG/ZNRfSyeR4tQF5LVkRUcL3kGvMQOGBtwCTRxKx3KBP76DG4vdu/UqE2CHhFPrga10/7C/1+T/sL+2vJ0ALxXBYAAAAAElFTkSuQmCC) no-repeat;
-  background-size: contain;
-}
-.collection .collec_li .collec_action{
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  margin-top: .24rem;
-}
-
-.collec_action .collec_tags{
-  display: flex;
-  align-items: center;
-}
-.collec_action .collec_tags .tag_active{
-  margin-right: .08rem;
-  padding: .02rem .16rem;
-  height: .36rem;
-  font-size: .24rem;
-  font-weight: 500;
-  text-align: CENTER;
-  color: #5f5e64;
-  border-radius: .05rem;
-  opacity: 1;
-  background: #f7f9fa;
-  border: 1px solid rgba(0,0,0,0.05);
-}
-.collec_action .collec_time{
-  font-size: .24rem;
-  font-weight: 500;
-  color: #9b9ca3;
-  line-height: .36rem;
-}
-
-.collection .taglist{
-  flex: none;
-  height: 6rem;
-  display: flex;
-  flex-wrap: wrap;
-  padding: .32rem;
-  flex-direction: row;
-
-}
-.collection .taglist .area-card-item{
-  height: .72rem;
-  background: #F5F6F7;
-  border-radius: .08rem;
-  color: #5F5E64;
-  font-size: .28rem;
-  line-height: .72rem;
-  padding: 0 .4rem;
-  margin:0 .2rem .2rem 0;
-}
-.collection .taglist .area-card-item.active{
-  position: relative;
-  background: #E8FAFD;
-  color: #2ABED1;
-}
-.collection .taglist .area-card-item.active::after{
-  content: "";
-  position: absolute;
-  right: 0;
-  bottom: 0;
-  background: url(/jyapp/big-member/image/icon-check.png);
-  width: .28rem;
-  height: .28rem;
-  background-size: 100% 100%;
-}
-
-.collection .dateTags{
-  padding: 0 .32rem;
-  flex: none;
-  height: 6rem;
-}
-.collection .dateTags .van-field__control{
-  font-size: .28rem;
-  color: #171826;
-  line-height: .4rem;
-}
-.collection .timeTag{
-  display: flex;
-  padding: .32rem 0;
-}
-.collection .timeTag .area-card-item{
-  width: 1.56rem;
-  height: .72rem;
-  background: #F5F6F7;
-  border-radius: .08rem;
-  color: #5F5E64;
-  font-size: .28rem;
-  text-align: center;
-  line-height: .72rem;
-  margin:0 .2rem .2rem 0;
-}
-.collection .timeTag .area-card-item.active{
-  position: relative;
-  background: #E8FAFD;
-  color: #2ABED1;
-}
-.collection .timeTag .area-card-item.active::after{
-  content: "";
-  position: absolute;
-  right: 0;
-  bottom: 0;
-  background: url(/jyapp/big-member/image/icon-check.png);
-  width: .28rem;
-  height: .28rem;
-  background-size: 100% 100%;
-}
-.collection .timePicker{
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  padding: .16rem;
-  width: 100%;
-  height: 1.04rem;
-  opacity: 1;
-  background: #f5f6f7;
-  border-radius: .08rem;
-}
-.collection .timePicker.clickactive{
-  position: relative;
- background: #E8FAFD;
-}
-.collection .timePicker.clickactive::after{
-  content: '';
-  position: absolute;
-  right: 0;
-  bottom: 0;
-  background: url(/jyapp/big-member/image/icon-check.png);
-  width: .28rem;
-  height: .28rem;
-  background-size: 100% 100%;
- }
-.timePicker .line{
-  width: 12px;
-  height: 1px;
-  background: #ACACAD;
-}
-.timePicker .van-cell.van-field {
-  width: 2.96rem;
-  height: .72rem;
-  background: #ffffff;
-  border: 1px solid rgba(0,0,0,0.10);
-  border-radius: .1rem;
-  align-items: center;
-}
-.collection .j-footer{
-  box-shadow: 0px -2px 8px rgb(54 147 179 / 5%);
-  z-index: inherit;
-}
-.collection .j-button-group {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-  width: 100%;
-  padding: 0.16rem 0.32rem 0.24rem;
-  background-color: #fff;
-  box-sizing: border-box;
-}
-.collection .j-button-group .j-button-confirm, .j-button-cancel {
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  flex: 1;
-  width: 100%;
-  height: 0.8rem;
-  font-size: 0.32rem;
-  line-height: inherit;
-  text-align: center;
-  border-radius: 0.16rem;
-}
-.collection .j-button-group .j-button-cancel {
-  margin-right: 0.26rem;
-  color: #5f5e64;
-  background-color: #edeff2;
-}
-.collection .j-button-group .j-button-confirm {
-  color: #fff;
-  background-color: #2cb7ca;
-}
-/* 地区 */
-.collection .area-list.van-index-bar{
-  height: 8.6rem;
-  overflow: auto;
-}
-/* 采购单位类型 */
-.collection .unitTab{
-  overflow: hidden;
-  height: 7.5rem;
-  flex: none;
-}
-.collection .unitTab .van-tabs__content{
-  height: 7.5rem;
-  overflow: auto;
-}
-.collection .unitType {
-  height: 100%;
-  /* overflow: auto; */
-  flex: 1;
-  display: flex;
-}
-.collection .unitType .van-tabs__wrap{
-  height: 100%;
-  overflow: auto;
-}
-.collection .unitType .van-tabs__content{
-  flex: 1;
-}
-.unitType .van-tabs__wrap .van-tabs__nav.van-tabs__nav--card{
-  height: auto;
-  margin: 0;
-  display: flex;
-  flex-direction: column;
-  border: 0;
-  overflow: auto;
-}
-.unitType .van-tabs__wrap .van-tabs__nav.van-tabs__nav--card .van-tab{
-  flex: none;
-  width: 2.5rem;
-  min-height: .8rem;
-  background: #f5f6f7;
-  border: 0;
-  padding: 0;
-}
-.unitType .van-tab__text.van-tab__text--ellipsis{
-  padding: 0 0.08rem 0 .32rem;
-  display: flex;
-  align-items: center;
-  width: 100%;
-  height: 100%;
-  font-size: .3rem;
-  font-weight: 500;
-  text-align: LEFT;
-  color: #171826;
-  line-height: .44rem;
-}
-.unitType .van-tab__text.van-tab__text--ellipsis .tabtitle{
-  flex: 1;
-}
-.unitType .van-tab__text.van-tab__text--ellipsis .optionnum{
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  margin-left: .1rem;
-  width: .8rem;
-  height: .4rem;
-  background: #2abed1;
-  border: 1px solid #ffffff;
-  border-radius: .82rem;
-  font-size: .22rem;
-  font-weight: 500;
-  text-align: CENTER;
-  color: #ffffff;
-}
-.unitType .van-tabs__wrap .van-tabs__nav.van-tabs__nav--card .van-tab.van-tab--active {
-  background: #ffffff;
-}
-.unitType .van-tabs__wrap .van-tabs__nav.van-tabs__nav--card .van-tab.van-tab--active .van-tab__text.van-tab__text--ellipsis{
-  color: #2ABED1;
-}

+ 12 - 0
src/jfw/modules/app/src/web/staticres/jyapp/css/subscribe.css

@@ -862,6 +862,18 @@ font-weight: bold;
 .filter_tab .van-dropdown-menu__title{
   padding: 0 8px 0 0;
 }
+.filter_tab .van-dropdown-menu__title .rootstyletitle{
+  font-size: .28rem;
+  font-weight: 500;
+  color: #c0c4cc;
+}
+.filter_tab .van-dropdown-menu__title .rootstyletitle .root_open{
+  padding: .04rem .12rem;
+  border: 1px solid #fb483d;
+  border-radius: 9px;
+  font-size: .2rem;
+  color: #fb483d;
+}
 
 /*.filter_tab:after {
   position: absolute;

+ 64 - 25
src/jfw/modules/app/src/web/staticres/jyapp/js/historypush.js

@@ -7,7 +7,8 @@ var vm = new Vue({
     industryComponent: industryComponent,
     cateComponent: cateComponent,
     keywordComponent: keywordComponent,
-    noticeComponent: noticeComponent
+    noticeComponent: noticeComponent,
+    rootComponent: rootComponent
   },
   data () {
     return {
@@ -16,55 +17,93 @@ var vm = new Vue({
       // 地区参数
       area: '',
       // 行业参数
-      industry: ''
+      subscopeclass: '',
+      // 采购单位
+      buyerclass: '',
+      // 关键词
+      key: '',
+      // 公告类型
+      subtype: '',
+      screenShow: false
     }
   },
+  created () {
+    this.getUserRoot()
+  },
   methods: {
+    // 判断是否是有筛选条件
+    getUserRoot: function() {
+      let _this = this
+      $.ajax({
+        url: '/publicapply/bidcoll/power',
+        type: 'POST',
+        success: function(res) {
+          console.log(res)
+          if(res.data) {
+            _this.screenShow = true
+          } else {
+            _this.screenShow = false
+          }
+        }
+      })
+    },
     confirm: function(data){
-      console.log(data)
+      this.setToggle()
       if(data.name === 'dateItem'){
-        this.$refs.dateItem.toggle()
-        this.time = data.data
-        initpage()
+        if ((data.data.start / 1000).toFixed(0) == 0 && (data.data.end / 1000).toFixed(0) == 0) {
+          this.time = ''
+        } else if((data.data.start / 1000).toFixed(0) == 0 && (data.data.end / 1000).toFixed(0) != 0) {
+          this.time = '_' + (data.data.end / 1000).toFixed(0)
+        } else if((data.data.start / 1000).toFixed(0) != 0 && (data.data.end / 1000).toFixed(0) == 0) {
+          this.time = (data.data.start / 1000).toFixed(0) + '_'
+        } else {
+          this.time = (data.data.start / 1000).toFixed(0) + '_' + (data.data.end / 1000).toFixed(0)
+        }
+        FTAGData(this.time)
+        return
       } else if(data.name === 'areaItem'){
-        this.$refs.areaItem.toggle()
         this.area = data.data.join('、')
       } else if(data.name === 'industryItem'){
-        this.$refs.industryItem.toggle()
-        this.industry = data.data.join(',')
+        this.subscopeclass = data.data.join(',')
       } else if(data.name === 'cateItem'){
-        this.$refs.cateItem.toggle()
-        this.industry = data.data.join(',')
+        this.buyerclass = data.data.join(',')
       } else if(data.name === 'keywordItem'){
         this.$refs.keywordItem.toggle()
-        this.industry = data.data.join(',')
       } else if(data.name === 'noticeItem'){
-        this.$refs.noticeItem.toggle()
-        this.industry = data.data.join(',')
+        this.subtype = data.data.join(',')
+      } else if(data.name === 'rootItem'){
+        location.href = '/jyapp/vipsubscribe/introducePage'
       }
+      this.getAjaXParams()
     },
     cancel: function(data){
       console.log(data)
       if(data.name === 'dateItem'){
-        this.$refs.dateItem.toggle()
-        // this.time = data.data
+        firstTime = (data.data.start / 1000).toFixed(0) + '_' + (data.data.end / 1000).toFixed(0)
         initpage()
       } else if(data.name === 'areaItem'){
-        this.$refs.areaItem.toggle()
         // this.area = data.data.join('、')
       } else if(data.name === 'industryItem'){
-        this.$refs.industryItem.toggle()
-        // this.industry = data.data.join(',')
+        // this.subscopeclass = data.data.join(',')
       } else if(data.name === 'cateItem'){
-        this.$refs.cateItem.toggle()
-        // this.industry = data.data.join(',')
+        // this.subscopeclass = data.data.join(',')
       } else if(data.name === 'keywordItem'){
-        this.$refs.keywordItem.toggle()
-        // this.industry = data.data.join(',')
+        // this.subscopeclass = data.data.join(',')
       } else if(data.name === 'noticeItem'){
-        this.$refs.noticeItem.toggle()
-        // this.industry = data.data.join(',')
+        // this.subscopeclass = data.data.join(',')
       }
+      this.setToggle()
+    },
+    getAjaXParams: function() {
+      ajaxFun(this.time, this.area, this.subscopeclass, this.buyerclass, this.key, this.subtype)
+    },
+    setToggle: function() {
+      this.$refs.dateItem.toggle(false)
+      this.$refs.areaItem.toggle(false)
+      this.$refs.industryItem.toggle(false)
+      this.$refs.cateItem.toggle(false)
+      this.$refs.keywordItem.toggle(false)
+      this.$refs.noticeItem.toggle(false)
     }
   }
 })

+ 93 - 16
src/jfw/modules/app/src/web/staticres/jyapp/js/searchindex.js

@@ -1319,6 +1319,10 @@ var SuperSearch = {
             });
 	},
 	getHtml: function (list,pageNum){//生成list表单 或 table表单
+    // 获取收藏状态
+    SuperSearch.checkStartKeepStatus(list.map(function(v) {
+      return v._id
+    }))
 		var html ={};
 		var ListHtml='';
 		var TableHtml='';
@@ -1482,10 +1486,13 @@ var SuperSearch = {
 						+'<div class="one">'
 						+'<span class="xh">'+index+'.</span>'
 						+'</div>'
+            + '<div class="two-group">'
 						+'<div class="two bt-parent"'+thisStyle+'>'
 						+'<a class="bt" sid="'+list[i]._id+'" s="'+href+'" href="javascript:void(0);">'+title+'</a>'
 						+'</div>'
-						+'</div>'
+            + '<div class="flow-start-box"><i class="icon-flow-start"></i></div>'
+            +'</div>'
+            +'</div>'
 						+'<div style="clear:both;"></div>'
 						+'<div class="restime time-diff">'
 						+area+industry+datatype+moneyTag+tdf
@@ -1569,14 +1576,69 @@ var SuperSearch = {
 			SuperSearch.showToOrder(true);
 		}
 	},
+  changeKeepStatus (id, type) {
+    var aDom = $("p[sid='"+id+"'], a[sid='"+id+"']")
+    if (aDom.length) {
+      aDom.each(function () {
+        var gDom = $(this).parents('.two-group').find('.flow-start-box')
+        if (type) {
+          gDom.addClass('fill')
+        } else {
+          gDom.removeClass('fill')
+        }
+      })
+    }
+  },
+  checkStartKeepStatus: function (list) {
+      $.ajax({
+        url: '/publicapply/bidcoll/isColl',
+        type: 'POST',
+        data: {
+          bids: list.join(',')
+        }
+      }).done(function (r) {
+        if (r && r.error_msg == '' && r.data) {
+          console.log('start', r.data)
+          r.data.forEach(function(v) {
+            SuperSearch.changeKeepStatus(v, true)
+          })
+        }
+      })
+  },
+  checkIsStartFn: function (event, attrData) {
+    var isStart = $(event.target).hasClass('.flow-start-box') || $(event.target).parents('.flow-start-box').length
+    console.log(isStart, 'isStart')
+    if (isStart) {
+      event.preventDefault();
+      event.stopPropagation();
+      console.log('收藏')
+
+      // 登陆判断
+      if(userId == ""||userId == null){
+        window.location.href = "/jyapp/free/login?to=back";
+        return;
+      }
+
+      var isStartStatus = $(event.target).hasClass('.flow-start-box.fill') || $(event.target).parents('.flow-start-box.fill').length
+
+      if (vKeepComponent) {
+        vKeepComponent.changeBid(attrData.sid, !isStartStatus)
+      }
+
+      return false
+    }
+    return true
+  },
 	appendListHtml: function (html){  //下拉时展示信息
 	    // 插入数据到页面,放到最后面
 	    var ListHtmlObj = $(html.ListHtml);
 	    ListHtmlObj.on("tap", function(event){
 	        var h = $(this).find("a.bt").attr("s");
 	        var sid = $(this).find("a.bt").attr("sid");
-			var industry = $(this).find(".industry").text();
-	        SuperSearch.myredirect(h,sid,industry);
+			    var industry = $(this).find(".industry").text();
+			    if (SuperSearch.checkIsStartFn(event, { sid: sid })) {
+            SuperSearch.myredirect(h,sid,industry);
+          }
 	    });
 	    $('#supersearchPage #list').append(ListHtmlObj);
 		$(".loading_").hide();
@@ -1623,8 +1685,11 @@ var SuperSearch = {
 	   	ListHtmlObj.on("tap", function(event){
 	       var h = $(this).find("a.bt").attr("s");
 	       var sid = $(this).find("a.bt").attr("sid");
-		   var industry = $(this).find(".industry").text();
-	       SuperSearch.myredirect(h,sid,industry);
+         var industry = $(this).find(".industry").text();
+
+        if (SuperSearch.checkIsStartFn(event, { sid: sid })) {
+          SuperSearch.myredirect(h,sid,industry);
+        }
 	   	});
 	   	$('#supersearchPage #list').html(ListHtmlObj);
 
@@ -1960,7 +2025,9 @@ var SuperSearch = {
 				    var h = $(this).find("a.bt").attr("s");
 				    var sid = $(this).find("a.bt").attr("sid");
 					var industry = $(this).find(".industry").text();
-				    SuperSearch.myredirect(h,sid,industry);
+          if (SuperSearch.checkIsStartFn(event, { sid: sid })) {
+            SuperSearch.myredirect(h,sid,industry);
+          }
 				});
 				$("#supersearchPage #list").html(ListContent);
 				//
@@ -2457,6 +2524,11 @@ var SuperSearch = {
 		SuperSearch.listLength =  r["listLength"]
 		SuperSearch.myHistory = r["history"]
 		var list = r["list"]
+    if (list && list.length) {
+      SuperSearch.checkStartKeepStatus(list.map(function(v) {
+        return v._id
+      }))
+    }
 		var homeListHtml = '';
 		if(list!=null&&list.length>0){
 			for(var i=0;i<list.length;i++){
@@ -2477,7 +2549,10 @@ var SuperSearch = {
 				homeListHtml +='<div class="list_item" data-need-bind-phone data-onclick="'+_list["_id"]+'">'
 									+'<div class="list_title">'
 									+'<span class="serial_number">'+(i+1)+'. &nbsp;</span>'
-									+'<p>'+title+'</p>'
+                  + '<div class="two-group">'
+									+'<p sid="'+_list["_id"]+'">'+title+'</p>'
+                  + '<div class="flow-start-box"><i class="icon-flow-start"></i></div>'
+                  + '</div>'
 									+'</div>'
 									+'<div class="list_info">'
 									+'<div class="tags">'
@@ -2540,17 +2615,19 @@ var SuperSearch = {
 			}
 		}
 		SuperSearch.showHomeList(homeListHtml);
-		$("*[data-onclick]").on('click', function () {
-      SuperSearch.HomeToDetails($(this).attr('data-onclick'))
+		$("*[data-onclick]").on('click', function (e) {
+      SuperSearch.HomeToDetails($(this).attr('data-onclick'), e)
     })
 	},
-	HomeToDetails:function(id){
-		if(id!=""){
-			sessionStorage.setItem('main-list-data-set-time', JSON.stringify(new Date().getTime()))
-			sessionStorage.setItem('main-scroll-top', nowTop())
-			sessionStorage.setItem('main-save-dom', JSON.stringify($("#home_main .data_list").html()))
-			window.location.href="/jyapp/article/content/"+id+".html"
-		}
+	HomeToDetails:function(id, e){
+      if (SuperSearch.checkIsStartFn(e, { sid: id })) {
+        if(id!=""){
+          sessionStorage.setItem('main-list-data-set-time', JSON.stringify(new Date().getTime()))
+          sessionStorage.setItem('main-scroll-top', nowTop())
+          sessionStorage.setItem('main-save-dom', JSON.stringify($("#home_main .data_list").html()))
+          window.location.href="/jyapp/article/content/"+id+".html"
+        }
+      }
 	},
 	showHomeList:function(hh){
 		SuperSearch.initHomeTip();

+ 1 - 0
src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/price.js

@@ -40,6 +40,7 @@ var Calculation = {
                 "oneProvince_allBuyerClass": 3800,
                 "allProvince_allBuyerClass": 59900
             },
+            "quarter": {oneProvince_allBuyerClass: 9900, allProvince_allBuyerClass: 149900},
             "year": {
                 "oneProvince_allBuyerClass": 38000,
                 "allProvince_allBuyerClass": 599900

+ 4 - 0
src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_index_new.js

@@ -55,6 +55,10 @@ function getNewYearMarketing () {
 //     }
 // });
 $(function () {
+  // 清除商品规格当前选择
+  sessionStorage.removeItem("vip-cur-select-size")
+  // 清除商品优惠券当前选择
+  sessionStorage.removeItem("vip-cur-select-coupon")
   var $dialog;
   /* vue 代码 start 提交订单 */
   /* 

+ 117 - 13
src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_renew.js

@@ -37,16 +37,23 @@ var renew = {
             result.area = '全国'
         } else {
             var strArr = []
-            if (buySet.areacount) {
+            if (buySet.upgrade == 1) {
+              if (buySet.areacount) {
+                strArr.push(buySet.areacount + '')
+              }
+            } else {
+              if (buySet.areacount) {
                 strArr.push(buySet.areacount + '个省')
+              }
+              if (buySet.newcitys && buySet.newcitys.length !== 0) {
+                  var count = 0
+                  buySet.newcitys.forEach(function (item) {
+                      count += item
+                  })
+                  strArr.push(count + '个市(分布在' + buySet.newcitys.length + '个省内')
+              }
             }
-            if (buySet.newcitys && buySet.newcitys.length !== 0) {
-                var count = 0
-                buySet.newcitys.forEach(function (item) {
-                    count += item
-                })
-                strArr.push(count + '个市(分布在' + buySet.newcitys.length + '个省内')
-            }
+            
             result.area = strArr.join('、')
         }
 
@@ -88,6 +95,17 @@ var renew = {
                             _this.buyInfo.buyset.upgrade || 0
                         )
                     )
+                    // 新超级订阅续费
+                    if (r.data.buyset.upgrade == 1) {
+                      $("[data-new-vip]").show()
+                      $("[data-old-vip]").hide()
+                      if (_this.buyInfo.buyset.areacount == -1) {
+                        goodsSize.props.areaCount = 16
+                      } else {
+                        goodsSize.props.areaCount = _this.buyInfo.buyset.areacount
+                      }
+                      
+                    }
                     // 初始化默认金额
                     _this.setPrice(_this.calcPrice())
                 }
@@ -101,7 +119,9 @@ var renew = {
             type: 'POST',
             success: function (r) {
                 if (r) {
-                    _this.requestRules = r
+                  _this.requestRules = r
+                  // 将价格列表传至商品规格组件
+                  goodsSize.props.priceInfo = r.new
                 }
             }
         })
@@ -113,7 +133,23 @@ var renew = {
     // 设置价格
     setPrice: function (price) {
         this.price = parseInt(price)
-        coupon.updatePrice(this.price / 100)
+        var size = JSON.parse(sessionStorage.getItem('vip-cur-select-size')) 
+        console.log(renew.buyInfo.buyset)
+        var count = renew.buyInfo.buyset.areacount == -1 ? 16 : renew.buyInfo.buyset.areacount
+        if (this.buyInfo.buyset.upgrade == 1) {
+          // 新规则初始化价格
+          if (size) {
+            // 初始化上次选择的商品规格
+            coupon.updatePrice(size.price / 100)
+          } else {
+            // 初始化默认一个月*省份数量
+            coupon.updatePrice(3800*count / 100)
+          }
+        } else {
+          // 旧规则初始化价格
+          coupon.updatePrice(this.price / 100)
+        }
+        // coupon.updatePrice(this.price / 100)
     },
     // 根据选中结果得到续费了多长时间的字符串
     getDuration: function (timeSelect) {
@@ -281,18 +317,30 @@ var renew = {
             _this.setPrice(_this.calcPrice())
             _this.saveState()
         })
-
         $('.vip-footer.renew .confirm').on('click', function () {
+          var upgrade = renew.buyInfo.buyset.upgrade
+          var size = goodsSize.defaultSize
+          var sizeTime = ''
+          if (size && size.period) {
+            if(size.period.indexOf('月') > -1) {
+              size.period = size.period.replace('月', '个月')
+            }
+            sizeTime = size.period
+          } else {
+            sizeTime = '1个月'
+          }
+          console.log(upgrade,sizeTime, '新or老')
             $('.vip-footer.renew .confirm').prop('disabled', true)
             //支付请求
             var data = {
                 userLotteryId :coupon.$refs.couponRef.coupon.userLotteryId,
                 lotteryId : coupon.$refs.couponRef.coupon.lotteryId,
-                time : _this.getDuration(_this.timeSelect).trim(),
+                time : upgrade == 0 ? _this.getDuration(_this.timeSelect).trim() : sizeTime,
                 orderType: 5,
                 disWord :GetQueryString('disWord'),
-                price: _this.price
+                price: coupon.initPrice*10000/100
             }
+            console.log(data, '提交参数')
             $.ajax({
                 // url: '/subscribepay/vipsubscribe/createOrder',
                 url: '/subscribepay/vipsubscribe/renew',
@@ -485,6 +533,8 @@ function clearSessionStorage() {
     sessionStorage.removeItem("pay_read_cache")
     sessionStorage.removeItem("liveActiveCode_renew");
     sessionStorage.removeItem("liveActiveCode_new");
+    // 清除商品规格当前选择
+    sessionStorage.removeItem("vip-cur-select-size")
 }
 function showToast(text) {
     weui.toast(text, {
@@ -506,6 +556,60 @@ function pickerShow(selector, f) {
     }
 }
 /* vue 代码 start */
+// vip商品规格
+var goodsSize = new Vue({
+  el:'#goods-size-vue',
+  data: function() {
+    return {
+      props: {
+        defaultSize: {},
+        areaCount: 1,
+        priceInfo: {}
+      }
+    }
+  },
+  created () {
+    
+  },
+  mounted () {
+    this.getSizeStorage()
+  },
+  methods: {
+    // 父组件传省份数量至子组件
+    getAreaCount: function() {
+      var areaStorage = JSON.parse(sessionStorage.getItem('vipSubSelectArea'))
+      console.log(renew.buyInfo.buyset.areacount)
+      if (areaStorage) {
+        var count = 0
+        for (var key in areaStorage) {
+          if (key.indexOf('全国') > -1) {
+            count = 16
+          } else {
+            count++
+          }
+        }
+        this.props.areaCount = count
+      }
+    },
+    getSizeStorage: function() {
+      // 恢复商品规格选择
+      var size = JSON.parse(sessionStorage.getItem('vip-cur-select-size')) 
+      console.log(size, '恢复的商品规格')
+      if (size) {
+        this.$refs.goodsSize.goodsActive = size.index
+        this.defaultSize = size
+        this.$nextTick(function(){
+          coupon.updatePrice(size.price/100)
+        })
+      }
+    },
+    getGoodSize: function(data) {
+      console.log(data, '父组件接收子组件传来的商品规格')
+      this.defaultSize = data
+      coupon.updatePrice(data.price/100)
+    }
+  }
+})
 var coupon = new Vue({ 
   el: '#coupon-vue',
   data: function () {

+ 0 - 15
src/jfw/modules/app/src/web/staticres/jyapp/vipsubscribe/js/vip_upgrade.js

@@ -649,21 +649,6 @@ function pickerShow (selector, f) {
   }
 }
 /* vue 代码 start */
-var goodsSize = new Vue({
-  el:'#goods-size-vue',
-  data: function() {
-    return {}
-  },
-  mounted () {},
-  methods: {
-    getGoodSize: function(data) {
-      console.log(data, '父组件接收子组件传来的商品规格')
-    },
-    getAutoRenew: function(data) {
-      console.log(data, '父组件接收子组件传来的是否开启自动续费')
-    }
-  }
-})
 var coupon = new Vue({
   el: '#coupon-vue',
   data: function () {

+ 22 - 24
src/jfw/modules/app/src/web/templates/frontRouter/collection/sess/index.html

@@ -30,37 +30,33 @@
         <div class="j-main">
           <div class="search-container van-fade-an" ref="searchContainer">
             <div class="listaction">
-              <div class="action_editor" @click="screenBtn">筛选</div>
+              <div class="action_editor">
+                <span v-show="screenShow" @click="screenBtn">筛选</span>
+              </div>
               <div class="data_report">
-                <div class="collec_datareport">
+                <div class="collec_datareport" @click="dataReport">
                   <span class="data_download"></span>
                   <span class="data text">数据导出</span>
                 </div>
               </div>
             </div>
           </div>
-          <van-dropdown-menu v-if="limitshow" :get-container="getContainer">
-            <van-dropdown-item v-model="params.value1" title="个人标签" :options="params.option1">
-              <div class="j-container">
-                <div class="taglist j-main">
-                  <div class="area-card-item" :class="{active:index==personTagactive}" v-for="(item, index) in 100" :key="index" @click="selectTags(index)">标签1</div>
-                </div>
-                <div class="j-footer">
-                  <div class="j-button-group">
-                    <button class="j-button-cancel" @click="resetAll">重置</button>
-                    <button class="j-button-confirm" @click="onConfirm">确认</button>
-                  </div>
-                </div>
-              </div>
+          <van-dropdown-menu v-show="limitshow" :get-container="getContainer" :close-on-click-outside="false">
+            <van-dropdown-item  title="个人标签"  ref="tagItem">
+              <tags-component @confirm="confirm" @cancel="cancel" :taglist="tagList"></tags-component>
+            </van-dropdown-item>
+            <van-dropdown-item title="收藏日期" ref="dateItem">
+              <date-component @confirm="confirm" @cancel="cancel"></date-component>
+            </van-dropdown-item>
+            <van-dropdown-item title="采购单位类型" ref="cateItem">
+              <cate-component @confirm="confirm" @cancel="cancel"></cate-component>
             </van-dropdown-item>
-            <van-dropdown-item v-model="params.value2" title="收藏日期" :options="params.option2">
-              <date-component />
+            <van-dropdown-item ref="buyerItem" v-model="limitlist.buyerPhone" title="采购单位联系方式">
+              <phone-component :data="params.buyerData" @confirm="confirm"></phone-component>
             </van-dropdown-item>
-            <van-dropdown-item v-model="params.value2" title="采购单位类型" :options="params.option2">
-              <cate-component></cate-component>
+            <van-dropdown-item ref="winnerItem" v-model="limitlist.winnerPhone"  title="中标企业联系方式">
+              <phone-component :data="params.winnerData" @confirm="confirm"></phone-component>
             </van-dropdown-item>
-            <van-dropdown-item v-model="params.value2" title="采购单位联系方式" :options="params.option4"></van-dropdown-item>
-            <van-dropdown-item v-model="params.value2" title="中标企业联系方式" :options="params.option5"></van-dropdown-item>
           </van-dropdown-menu>
           <div class="list-mian">
             <van-list
@@ -69,7 +65,7 @@
               finished-text="没有更多了"
               @load="getList"
             >
-              <div class="collec_li" v-for="(item, index) in listState.list" :key="index">
+              <div class="collec_li" v-for="(item, index) in listState.list" :key="index" @click="linkRouter(item._id)">
                 <div class="collec_head">
                   <div class="collec_title ellipsis-2">
                     ${item.title}
@@ -82,11 +78,11 @@
                 <div class="collec_action">
                   <ul class="collec_tags">
                     <li class="tag_active" v-if="item.area&&item.area!==''">${item.area}</li>
-                    <li class="tag_active" v-if="item.s_subscopeclass&&item.s_subscopeclass!==''">${item.s_subscopeclass}</li>
+                    <li class="tag_active" v-if="item.buyerclass&&item.buyerclass!==''">${item.buyerclass}</li>
                     <li class="tag_active" v-if="item.type&&item.type!==''">${item.type}</li>
                     <li class="tag_active" v-if="item.bidamount&&item.bidamount!==''">${item.bidamount}</li>
                   </ul>
-                  <div class="collec_time">${item.time}</div>
+                  <div class="collec_time">${item.publishtime}</div>
                 </div>
               </div>
             </van-list>
@@ -101,8 +97,10 @@
   <script src=//cdn.jsdelivr.net/npm/zepto@1.2.0/dist/zepto.min.js></script>
   <!--E-当前页面的资源-->
   {{include "/big-member/commonjs.html"}}
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/tags-mobile.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/date-mobile.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/cate-mobile.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/phone-mobile.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/index.js?v={{Msg "seo" "version"}}'></script>
   {{include "/common/baiducc.html"}}
 </body>

+ 0 - 6
src/jfw/modules/app/src/web/templates/vipsubscribe/vip_UpgradePage.html

@@ -17,7 +17,6 @@
   <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/css/vip_upgrade.css?v={{Msg "seo" "version"}}'>
   <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/layout.css' />
   <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/font.css?v={{Msg "seo" "version"}}' />
-  <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/css/vip-size-template.css?v={{Msg "seo" "version"}}' />
   <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/coupon/css/pay-order-template.css?v={{Msg "seo" "version"}}' />
   <style>
     .vip-header {
@@ -92,10 +91,6 @@
             </a>
           </li>
         </ul>
-        <!-- 商品规格 -->
-        <div id="goods-size-vue">
-          <vip-size-template @select-vip-size="getGoodSize" @select-auto-renew="getAutoRenew"></vip-size-template>
-        </div>
         <!-- 超级订阅专属权益 封装为公共页面-->
         {{include "/vipsubscribe/commonRules.html"}}
       </div>
@@ -206,7 +201,6 @@
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/js/price.js?v={{Msg "seo" "mod_version"}}'></script>
   {{include "/common/iosJS.html"}}
   <script src=//cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js></script> 
-  <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/js/vip-size-template.js?v={{Msg "seo" "version"}}'></script>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/coupon/js/pay-order-template.js?v={{Msg "seo" "version"}}'>
   </script>
   <script>

+ 127 - 37
src/jfw/modules/app/src/web/templates/vipsubscribe/vip_purchase.html

@@ -4,7 +4,7 @@
 <head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
-  <title>超级订阅</title>
+  <title>开通超级订阅</title>
   <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/rem.js'></script>
   <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/css/base.css?v={{Msg "seo" "version"}}'/>
   <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/weui.min.css'>
@@ -66,13 +66,26 @@
     text-align: left;
     margin-top: 2px;
   }
+  .area-result{
+    /* width:1.2rem; */
+    height: .38rem;
+    padding: 0 .16rem;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    background: #2abed1;
+    border: 1px solid #2abed1;
+    border-radius: 41px;
+    font-size: .22rem;
+    color: #fff;
+  }
   </style>
   <!--E-手机号输入样式-->
 </head>
 <body  data-weui-theme="light">
   <div class="app-layout-header jy-app-header" style="z-index: 8;">
     <span class="app-back jyapp-icon jyapp-icon-zuojiantou"></span>
-    超级订阅{{if not .T.isTrial }}{{else}}(试用){{end}}
+    开通超级订阅{{if not .T.isTrial }}{{else}}(试用){{end}}
     <span></span>
   </div>
   <div class="app-layout-content-b">
@@ -99,14 +112,23 @@
         <div class="choose_condition">
             <ul class="chooseList">
               <li class="choose_item">
-                <a href="/jyapp/vipsubscribe/toChooseArea">
-                  <span class="label">省份数量</span>
-                  {{if not .T.isTrial }}
-                    <input type="text" disabled value="" placeholder="1个省" class="info choose_area">
-                  {{else}}
-                    <input type="text" disabled value="" placeholder="选择全国、省份、地市" class="info choose_area">
-                  {{end}}
-                  <i class="iconfont icon-arrow"></i>
+                <a href="javascript:;" onclick="toChooseArea()">
+                  <div style="display: flex;align-items: center;flex: 1;">
+                    <span class="label">省份数量</span>
+                    <div class="area-result">
+                      {{if not .T.isTrial }}
+                      <input type="hidden" disabled value="" placeholder="1个省" class="info choose_area">
+                      <span class="area-result-text"></span>
+                      {{else}}
+                        <input type="hidden" disabled value="" placeholder="选择全国、省份、地市" class="info choose_area">
+                        <span class="area-result-text"></span>
+                      {{end}}
+                    </div>
+                  </div>
+                  <div style="display: flex;align-items: center;">
+                    <em style="color: #9B9CA3;font-size: .28rem;">选择</em>
+                    <i class="iconfont icon-arrow"></i>
+                  </div>
                 </a>
                 <p class="add_tips area_warn" style="display: none;">请选择区域</p>
                 <!-- 无选择时不显示 -->
@@ -145,11 +167,11 @@
             </ul>
             <!-- 商品规格 -->
             <div id="goods-size-vue">
-              <vip-size-template @select-vip-size="getGoodSize" @select-auto-renew="getAutoRenew"></vip-size-template>
+              <goods-size-template ref="goodsSize" :config="props" @select-vip-size="getGoodSize"></goods-size-template>
             </div>
             <!-- 商品优惠券 -->
             <div id="goods-coupon-vue">
-              <vip-coupon-template></vip-coupon-template>
+              <goods-coupon-template ref="goodsCoupon" @update-coupon="updateCoupon"></goods-coupon-template>
             </div>
             <!-- <div class="pay_mode">
               {{if not .T.isTrial }}
@@ -628,41 +650,89 @@
           //试用用户
         {{end}}
 
+        // 跳转区域选择清除商品规格及优惠券选择
+        function toChooseArea() {
+          sessionStorage.removeItem('vip-cur-select-coupon')
+          sessionStorage.removeItem('vip-cur-select-size')
+          location.href = '/jyapp/vipsubscribe/toChooseArea'         
+        }
         /* vue 代码 start */
         // vip商品规格
         var goodsSize = new Vue({
           el:'#goods-size-vue',
           data: function() {
             return {
-
+              props: {
+                areaCount: 1,
+                priceInfo: {}
+              }
             }
           },
+          created () {
+            this.getAreaCount()
+          },
           mounted () {
-
+            this.getSizeStorage()
           },
           methods: {
+            // 父组件传省份数量至子组件
+            getAreaCount: function() {
+              var areaStorage = JSON.parse(sessionStorage.getItem('vipSubSelectArea'))
+              if (areaStorage) {
+                var count = 0
+                for (var key in areaStorage) {
+                  if (key.indexOf('全国') > -1) {
+                    count = 16
+                  } else {
+                    count++
+                  }
+                }
+                this.props.areaCount = count
+              }
+            },
+            getSizeStorage: function() {
+              // 恢复商品规格选择
+              var size = JSON.parse(sessionStorage.getItem('vip-cur-select-size')) 
+              if (size) {
+                this.$refs.goodsSize.goodsActive = size.index
+                this.$nextTick(function(){
+                  console.log(size.price, 'size.price')
+                  coupon.updatePrice(size.price/100)
+                  goodsCoupon.updatePrice(size.price/100)
+                })
+              }
+            },
             getGoodSize: function(data) {
               console.log(data, '父组件接收子组件传来的商品规格')
-            },
-            getAutoRenew: function(data) {
-              console.log(data, '父组件接收子组件传来的是否开启自动续费')
+              coupon.updatePrice(data.price/100)
+              goodsCoupon.updatePrice(data.price/100)
             }
           }
         })
-        // vip活动
         // vip优惠券
         var goodsCoupon = new Vue({
           el:'#goods-coupon-vue',
           data: function() {
             return {
-
+              curSelectCoupon: {}
             }
           },
-          mounted () {
-
-          },
+          mounted () {},
           methods: {
-            
+            updatePrice: function(data){
+              this.$refs.goodsCoupon.getCoupon(data)
+            },
+            updateCoupon: function(data) {
+              console.log(data, '更新优惠券选择')
+              this.curSelectCoupon = data
+              var curSize = JSON.parse(sessionStorage.getItem('vip-cur-select-size'))
+              // 更新优惠券选择同时更新订单组件的价格及优惠金额
+              if (curSize) {
+                coupon.updatePrice(curSize.price/100)
+              } else {
+                coupon.updatePrice(coupon.initPrice)
+              }
+            }
           }
         })
         // 订单提交
@@ -697,10 +767,17 @@
             // 更新价格相关
             updatePrice: function (before) {
               console.log( '原价:' + before)
+              var curCoupon = JSON.parse(sessionStorage.getItem('vip-cur-select-coupon'))
+              console.log(curCoupon, '当前选择的优惠券')
+              if (curCoupon) {
+                this.$refs.couponRef.coupon.value = curCoupon.reduce
+              } else {
+                this.$refs.couponRef.coupon.value = 0
+              }
               this.initPrice = before;
               // 调用子组件查询最优卡券
               if (!{{.T.isTrial }}) {
-                this.$refs.couponRef.getCoupon();
+                // this.$refs.couponRef.getCoupon();
               }
             },
             // 初始化及回显相关
@@ -843,6 +920,8 @@
                   //     showGiveStatus(false)
                   // }
                   Calculation.Init(false, undefined, [], 0)
+                  // 将价格列表传至商品规格组件
+                  goodsSize.props.priceInfo = r.new
                 }
               }, false)
               sessionStorage.removeItem("pay_read_cache");
@@ -854,23 +933,26 @@
           showArea: function () {
             if (!$.isEmptyObject(this.areaSelect) && !this.areaSelect["一个省"]) { //有选择
               if (this.nowBuyset.areacount === -1) {
-                $(".choose_area").val("全国");
+                $(".choose_area").val("已选: 全国");
+                $(".area-result-text").text("已选: 全国");
               } else {
-                var tipTxt = "已选 ";
-                if (this.nowBuyset.areacount > 0) tipTxt += this.nowBuyset.areacount + " 个省";
+                var tipTxt = "已选: ";
+                if (this.nowBuyset.areacount > 0) tipTxt += this.nowBuyset.areacount + "";
                 var count = 0;
                 this.nowBuyset.citys.forEach(function (item, index) {
                     count += item;
                 });
-                if (count > 0) {
-                    if (this.nowBuyset.areacount > 0) tipTxt += "、";
-                    tipTxt += count + " 个市";
-                    if (this.nowBuyset.citys.length > 1) tipTxt += "(分布在" + this.nowBuyset.citys.length + "个省内)"
-                }
+                // if (count > 0) {
+                //     if (this.nowBuyset.areacount > 0) tipTxt += "、";
+                //     tipTxt += count + " 个市";
+                //     if (this.nowBuyset.citys.length > 1) tipTxt += "(分布在" + this.nowBuyset.citys.length + "个省内)"
+                // }
                 $(".choose_area").val(tipTxt);
+                $(".area-result-text").text(tipTxt);
               }
             } else {
               $(".choose_area").val("");
+              $(".area-result-text").text("");
               //是否勾选已阅读
               if (sessionStorage.getItem("vipSub_read") === "true") {
                 $(".area_warn").css("display", "");
@@ -952,7 +1034,6 @@
                 // var price = getsubVipOrderPriceBybuyset(this.nowBuyset, time);
                 // var givePrice = getsubVipOrderPriceBybuyset(this.nowBuyset, [time[1] === 1 ? 1 :time[0], time[1]]);
                 var obj = this.nowBuyset
-                // console.log(obj, 'obj')
                 obj.areacount = obj.areacount == 0 ? 1 : obj.areacount
                 var price = Calculation.GetTotal(new Buyset(obj.areacount,[],obj.buyerclasscount, 1),time)
                 var givePrice = Calculation.GetTotal(new Buyset(obj.areacount,[],obj.buyerclasscount, 1),[time[1] === 1 ? 1 :time[0], time[1]])
@@ -975,7 +1056,11 @@
                   $('.discount-price .dis-price').text(formatMoney(givePrice))
                 }
                 console.log(price, '计算的价格')
-                coupon.updatePrice(price)
+                var size = JSON.parse(sessionStorage.getItem('vip-cur-select-size')) 
+                if (!size) {
+                  coupon.updatePrice(price)
+                  goodsCoupon.updatePrice(price)
+                }
               }
             }
         };
@@ -986,6 +1071,7 @@
           purchase.showIndustry();
           purchase.showPrice();
           purchase.showTime();
+          console.log(purchase.timeSelect, 'purchase.timeSelect')
           purchase.flushPrice(purchase.timeSelect);
           checkOk();
           var time_limit;//定义一个周期变量
@@ -1180,7 +1266,7 @@
           $("input").bind("input propertychange change", function (event) {
             checkOk();
           });
-          console.log(coupon.$refs.couponRef.coupon, '用户优惠券id')
+          // console.log(coupon.$refs.couponRef.coupon, '用户优惠券id')
           $('#payHandle').click(function () {
             $("#payHandle").attr("disabled", "disabled");
             //支付请求
@@ -1202,8 +1288,8 @@
             }
             //付费用户
             var param = {
-              "userLotteryId":coupon.$refs.couponRef.coupon.userLotteryId,
-              "lotteryId": coupon.$refs.couponRef.coupon.lotteryId,
+              "userLotteryId":goodsCoupon.curSelectCoupon.userLotteryId,
+              "lotteryId": goodsCoupon.curSelectCoupon.lotteryId,
               "area": JSON.stringify(area),
               // "industry": industry.join(","),
               "time": $(".info:eq(2)").val().trim(),
@@ -1304,6 +1390,10 @@
 
           sessionStorage.removeItem("pay_read_cache");
           sessionStorage.removeItem("liveActiveCode_purchase");
+          // 清除商品规格当前选择
+          sessionStorage.removeItem("vip-cur-select-size")
+          // 清除商品优惠券当前选择
+          sessionStorage.removeItem("vip-cur-select-coupon")
         }
 
         /******* 获取url参数(正则)********/

+ 52 - 2
src/jfw/modules/app/src/web/templates/vipsubscribe/vip_renew.html

@@ -17,6 +17,7 @@
     <link rel="stylesheet" type="text/css" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/css/vip_renew.css?v={{Msg "seo" "version"}}'>
     <link rel="stylesheet" type="text/css" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/local/layout.css'/>
     <link rel="stylesheet" type="text/css" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/font.css?v={{Msg "seo" "version"}}'/>
+    <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/css/vip-size-template.css?v={{Msg "seo" "version"}}' />
     <link rel="stylesheet" href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/coupon/css/pay-order-template.css?v={{Msg "seo" "version"}}' />
     <style>
         .vip-header {
@@ -33,6 +34,41 @@
         button[disabled] {
             opacity: .5;
         }
+        .area-result{
+          position: relative;
+          padding: .3rem .32rem;
+          display: flex;
+          align-items: center;
+          background-color: #fff;
+        }
+        .area-result::after{
+          position: absolute;
+          box-sizing: border-box;
+          content: ' ';
+          pointer-events: none;
+          right: 0;
+          bottom: 0;
+          left: .32rem;
+          border-bottom: 1px solid #f5f5f5;
+          -webkit-transform: scaleY(0.7);
+          transform: scaleY(0.7);
+        }
+        .a-r-label{
+          margin-right: 0.08rem;
+          font-size: .32rem;
+          color: #171826;
+        }
+        .a-r-val{
+          height: .38rem;
+          padding: 0 .16rem;
+          display: flex;
+          align-items: center;
+          background: #2abed1;
+          border: 1px solid #2abed1;
+          border-radius: 41px;
+          font-size: .22rem;
+          color: #fff;
+        }
     </style>
 </head>
 <body class="no-touch"  data-weui-theme="light">
@@ -52,8 +88,18 @@
             <span class="header-right">您的超级订阅服务即将到期,为不影响您的使用。请立即续费</span>
         </div>
         <div class="vip-body">
+          <div class="area-result" data-new-vip style="display: none;">
+            <div class="item area" style="display: flex;align-items: center;">
+              <span class="item-l a-r-label">省份数量</span>
+              <span class="a-r-val"><span class="item-r"></span></span>
+            </div>
+          </div>
+          <!-- 商品规格 -->
+          <div id="goods-size-vue" data-new-vip style="display: none;">
+            <goods-size-template ref="goodsSize" :config="props" @select-vip-size="getGoodSize"></goods-size-template>
+          </div>
             <div class="j-notice-bar bar-red vip-bar" style="text-align: center;">限时续费,3个月起,续多久送多久!</div>
-            <ul style="padding: .16rem .24rem;">
+            <ul style="padding: .16rem .24rem;" data-old-vip>
                 <li class="body-item area-industry">
                     <div class="item-container">
                         <div class="item area">
@@ -102,13 +148,16 @@
                     </div>
                 </li>
             </ul>
-            <div class="tips">
+            <div class="tips" data-old-vip>
                 <div class="tip-title l-line">续费说明</div>
                 <div class="tip-content">
                     <div>1、仅支持原套餐延长周期续费,不支持套餐变更(含增加、减少、更改)原订阅的省份、城市、行业。 <br />续费费用=续费周期(按月/年)/原地区/原行业</div>
                     <div>2、套餐周期内,用户也可以选择升级超级订阅2.0版享受更多权益。</div>
                 </div>
             </div>
+            <div data-new-vip style="display: none;">
+              {{include "/vipsubscribe/commonRules.html"}}
+            </div>
         </div>
         <!-- vue组件 -->
         <div class="vip-footer" id="coupon-vue">
@@ -340,6 +389,7 @@
     <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/common.js?v={{Msg "seo" "mod_version"}}"></script>
   {{include "/common/iosJS.html"}}
     <script src=//cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js></script>
+    <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/vipsubscribe/js/vip-size-template.js?v={{Msg "seo" "version"}}'></script>
     <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/coupon/js/pay-order-template.js?v={{Msg "seo" "version"}}'></script>
 	<script>
       $(window).bind("pageshow", function (event) {

+ 114 - 24
src/jfw/modules/app/src/web/templates/weixin/historypush.html

@@ -59,6 +59,12 @@
             height: .88rem;
             /* padding-left: 16px; */
         }
+        .app-layout-content-b .app-content::after{
+            content: '';
+            width: 100%;
+            height: 8px;
+            background: #F5F6F7;
+        }
     </style>
 </head>
 <body class="p13" id="viperSuper">
@@ -76,8 +82,8 @@
     </li>
     <li>
         <div class="tab_right">
-            <span class="report_book"></span>
             <div class="vip_report" style="display: none;">
+                <span class="report_book"></span>
                 <a></a>报告
             </div>
         </div>
@@ -87,13 +93,13 @@
 </div>
 {{include "/big-member/commonjs.html"}}
 <div class="app-layout-content-b">
-    <div class="app-content">
+    <div class="app-content" style="background:#fff">
       {{if and (not .T.isIosExam) (not .T.isIosExamPhone)}}
   		<div class="header_header" style="height: 60px;display:none;transition: all 0.1s;">
-  			<div class="only-personal" style="position: absolute;top: .2rem;left: 4%;background-image: url(/jyapp/vipsubscribe/image/entback.png?v=51430);background-size: 100%;background-repeat: no-repeat;border-radius: 8px;width: 92%;display: flex;align-items: center;justify-content: space-between;height: 44px;">
+  			<div class="only-personal" style="position: absolute;top: .35rem;left: 4%;background-image: url(/jyapp/vipsubscribe/image/entback.png?v=51430);background-size: 100%;background-repeat: no-repeat;border-radius: 8px;width: 92%;display: flex;align-items: center;justify-content: space-between;height: 44px;">
   				<img style="width: 20px;height: 20px; margin-left: .3rem;" src="/jyapp/vipsubscribe/image/vip-icon.png?v=1">
-  				<span  data-name="doubleEleven_title" style="color:#fff;font-weight: bold;font-size: 13px;text-align: left;">全国企业随手查,竞争实力尽展示!</span>
-  				<span  data-name="doubleEleven_button" class="switch_ext" id="app-historypush-vipSub-banner" style="border-radius: 32px;display: flex;flex-direction: row;padding: 3px 12px;font-size: 12px;color: #FAE7CA;margin-right: .2rem;background: linear-gradient(to bottom, #F1D090 0%, #FAE7CA 100%);color: #33323A;font-family: PingFang SC;font-size: 12px;line-height: 18px;letter-spacing: 0px;text-align: center;white-space: nowrap;">立即使用</span>
+  				<span  data-name="doubleEleven_title" style="position: absolute;color:#fff;font-weight: bold;font-size: 15px;text-align: left;left: 43px;">直接对接项目联系人</span>
+  				<span  data-name="doubleEleven_button" class="switch_ext" id="app-historypush-vipSub-banner" style="border-radius: 32px;display: flex;flex-direction: row;padding: 3px 12px;font-size: 12px;color: #FAE7CA;margin-right: .2rem;background: linear-gradient(to bottom, #F1D090 0%, #FAE7CA 100%);color: #33323A;font-family: PingFang SC;font-size: 12px;line-height: 18px;letter-spacing: 0px;text-align: center;white-space: nowrap;">免费试用</span>
   			</div>
   		</div>
       {{end}}
@@ -115,20 +121,60 @@
                         <van-dropdown-item title="时间"  ref="dateItem">
                             <date-component @cancel="cancel" @confirm="confirm" />
                         </van-dropdown-item>
-                        <van-dropdown-item title="地区" ref="areaItem">
-                            <area-component @cancel="cancel" @confirm="confirm"></area-component>
+                        <van-dropdown-item ref="areaItem">
+                            <template #title>
+                                <span v-if="screenShow">地区</span>
+                                <span v-if="!screenShow" class="rootstyletitle">
+                                    <span>地区</span>
+                                    <span class="root_open">开通</span>
+                                </span>
+                            </template>
+                            <area-component v-if="screenShow" @cancel="cancel" @confirm="confirm"></area-component>
+                            <root-component v-if="!screenShow" @cancel="cancel" @confirm="confirm"></root-component>
                         </van-dropdown-item>
-                        <van-dropdown-item title="行业" ref="industryItem">
-                            <industry-component @cancel="cancel" @confirm="confirm"></industry-component>
+                        <van-dropdown-item ref="industryItem">
+                            <template #title>
+                                <span v-if="screenShow">行业</span>
+                                <span v-if="!screenShow" class="rootstyletitle">
+                                    <span>行业</span>
+                                    <span class="root_open">开通</span>
+                                </span>
+                            </template>
+                            <industry-component v-if="screenShow" @cancel="cancel" @confirm="confirm"></industry-component>
+                            <root-component v-if="!screenShow" @cancel="cancel" @confirm="confirm"></root-component>
                         </van-dropdown-item>
-                        <van-dropdown-item title="采购单位" ref="cateItem">
-                            <cate-component @cancel="cancel" @confirm="confirm"></cate-component>
+                        <van-dropdown-item  ref="cateItem">
+                            <template #title>
+                                <span v-if="screenShow">采购单位</span>
+                                <span v-if="!screenShow" class="rootstyletitle">
+                                    <span>采购单位</span>
+                                    <span class="root_open">开通</span>
+                                </span>
+                            </template>
+                            <cate-component @cancel="cancel" v-if="screenShow" @confirm="confirm"></cate-component>
+                            <root-component v-if="!screenShow" @cancel="cancel" @confirm="confirm"></root-component>
                         </van-dropdown-item>
                         <van-dropdown-item title="关键词" ref="keywordItem">
-                            <keyword-component @cancel="cancel" @confirm="confirm"></keyword-component>
+                            <template #title>
+                                <span v-if="screenShow">关键词</span>
+                                <span v-if="!screenShow" class="rootstyletitle">
+                                    <span>关键词</span>
+                                    <span class="root_open">开通</span>
+                                </span>
+                            </template>
+                            <keyword-component @cancel="cancel" v-if="screenShow" @confirm="confirm"></keyword-component>
+                            <root-component v-if="!screenShow" @cancel="cancel" @confirm="confirm"></root-component>
                         </van-dropdown-item>
                         <van-dropdown-item title="公告类型" ref="noticeItem">
-                            <notice-component @cancel="cancel" @confirm="confirm"></notice-component>
+                            <template #title>
+                                <span v-if="screenShow">公告类型</span>
+                                <span v-if="!screenShow" class="rootstyletitle">
+                                    <span>公告类型</span>
+                                    <span class="root_open">开通</span>
+                                </span>
+                            </template>
+                            <notice-component @cancel="cancel" v-if="screenShow" @confirm="confirm"></notice-component>
+                            <root-component v-if="!screenShow" @cancel="cancel" @confirm="confirm"></root-component>
                         </van-dropdown-item>
                     </van-dropdown-menu>
                 </div>
@@ -207,7 +253,6 @@
             </div>
         </div>
     </div>
-</div>
 <div class="vip_report_tip">
     <div class="weui-mask weui-animate-fade-in"></div>
     <div class="weui-dialog weui-animate-fade-in">
@@ -287,6 +332,7 @@
 <script src=//cdn.jsdelivr.net/npm/vant@2.8.2/lib/vant.min.js></script>
 <script src=//cdn.jsdelivr.net/npm/zepto@1.2.0/dist/zepto.min.js></script>
 <script src="{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/big-member/js/utils.js?v={{Msg "seo" "version"}}"></script>
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/root-mobile.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/date-mobile.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/area-mobile.js?v={{Msg "seo" "version"}}'></script>
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/collection/js/industry-mobile.js?v={{Msg "seo" "version"}}'></script>
@@ -467,7 +513,7 @@
       }
   });
 
-  var firstTime = {{.T.selectTime}};
+  var firstTime = {{.T.selectTime}}+'-'+{{.T.selectTime}};
   var userId = "";
   var selectCity = "";
 
@@ -1024,9 +1070,9 @@ function hasNoData() {
               + '</div>'
               + '<div class="two bt-parent" style="display: flex;justify-content: space-between;padding-left:' + paddingLeft + 'px;">'
               + '<a class="bt ' + visited + '" eid="' + obj["_id"] + '"  push_date="' + obj["ca_date"] + '" list_index="' + obj["ca_index"] + '" projectM="' + obj["ca_type"] + '">' + title + '</a>'
-              + '<div class="collec_star">'
-              + '<span class="shoucang"></span>'
-              + '<span class="weishoucang" style="display:none"></span>'
+              + '<div class="collec_star" data-id="' + obj["_id"] + '">'
+              + '<span class="shoucang" style="display:none"></span>'
+              + '<span class="weishoucang"></span>'
               + '</div>'
               + '</div>'
               + '</div>'
@@ -1050,6 +1096,48 @@ function hasNoData() {
       }
   }
 
+  // 收藏或取消收藏
+  $(document).off('click').on('click','.collec_star', function(e){
+      const _this = this
+      e.stopPropagation()
+      const id = $(this).attr('data-id')
+    const paramsObj = {
+        baction: 'C',
+        binfo: [
+            {
+            bid: id
+            }
+        ]
+    }
+    $.ajax({
+        url: '/publicapply/bidcoll/action',
+        type: "POST",
+        contentType: 'application/json;charset=utf-8',
+        data:JSON.stringify(paramsObj),
+        success: function(res){
+            console.log(res)
+            if(res.error_code == 0) {
+                if(res.data) {
+                    $(_this).find('.shoucang').show()
+                    $(_this).find('.weishoucang').hide()
+                    _this.$toast(res.error_msg)
+                } else {
+                    _this.$toast(res.error_msg)
+                }
+            }
+        },
+        error: function(err){
+            _this.$toast(res.error_msg)
+        }
+    })
+    this.listState.list.map((item,index) => {
+    console.log(item)
+    if(id === item._id) {
+        this.getList()
+    }
+    })
+  })
+
   //
   function formatDate(date, sl) {
       var myDate = new Date(date * 1000);
@@ -1157,19 +1245,20 @@ function hasNoData() {
   //
   var ajaxFlag = true;
 
-  function ajaxFun(time, area) {
+  function ajaxFun(time, area, subscopeclass, buyerclass, key, subtype) {
+      console.log(ajaxFlag)
       if (!ajaxFlag) {
           return
       }
       ajaxFlag = false;
       $("#loading").show();
-      if(time==""&&area==""){
+      if(time==""&&area==""&&subscopeclass==""&&buyerclass==""&&key==""&&subtype==""){
         afterJyObjInit();
       }
       $.ajax({
           type: 'post',
           url: '/jyapp/front/hasPushHistory?t=' + new Date().getTime(),
-          data: {"selectTime": time, "area": area},
+          data: {"selectTime": time, "area": area, "subscopeclass": subscopeclass, "buyerclass": buyerclass, "key": key, "subtype": subtype},
           async: false,
           dataType: 'json',
           success: function (data) {
@@ -1445,9 +1534,10 @@ function hasNoData() {
     //
     function FTAGData(time) {
         if (time != undefined && time.toString() != "") {
-            var Time = new Date(time);
-            var timestemp = Time.getTime();
-            firstTime = timestemp.toString();
+            // var Time = new Date(time);
+            // var timestemp = Time.getTime();
+            // firstTime = timestemp.toString();
+            firstTime = time;
             ajaxFun(firstTime, selectCity);
         } else {
             firstTime = "";

+ 70 - 3
src/jfw/modules/app/src/web/templates/weixin/search/mainSearch.html

@@ -45,6 +45,10 @@
     <link href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/iconfont/iconfont.css?v={{Msg "seo" "version"}}' rel="stylesheet"/>
     <link href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/css/weui.min.css?v={{Msg "seo" "version"}}' rel="stylesheet"/>
     <link href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/p13.css?v={{Msg "seo" "version"}}' rel="stylesheet"/>
+    <link href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/ent-search/ent-search-template.css?v={{Msg "seo" "version"}}' rel="stylesheet"/>
+    <link rel="stylesheet" href=//cdn.jsdelivr.net/npm/reset-css@4.0.1/reset.min.css />
+    <link rel="stylesheet" href=//cdn.jsdelivr.net/npm/vant@2.8.2/lib/index.css />
+    <link rel="stylesheet" href=//cdn.jsdelivr.net/npm/vant@2.8.2/lib/icon/local.css />
     <!-- 账号合并弹窗css -->
     <link href='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/css/merge-wx.css?v={{Msg "seo" "version"}}' rel="stylesheet"/>
 
@@ -99,8 +103,42 @@
         width: .88rem;
     }
 
-</style>
+    .p13 .resnumb .two-group,
+    .p13 .two-group {
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+        width: 100%;
+    }
+
+    .flow-start-box {
+        padding-left: 0.36rem;
+        flex-shrink: 0;
+        height: 0.48rem;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        justify-content: center;
+    }
+
+    .flow-start-box.fill .icon-flow-start {
+        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAALxSURBVHgB7VhNbtNAFP7GSRwKAiIugLOCrpqyA4REbgAngJ6g6glQbwAnAE4APUErIWBHs0NiU3MCAqWlJc08vrEcNz+OZ+zxohL9JNujGc+bL9+b9+Y5wP8E+YRN+YjnuIiQD3hMcpJcbKMmBKgLCi+ydmOq7YlaCCaKqSnVhGrWpGI9CgZ4ttBXk4oKnpBdRAhxkDuo0VePsAcP+CsYFihVg4peChaqN4Gnin4Khg4KeapYWUEn9SbwULG6gmEJZTxULFRQPlOlEXr8GRGv2+yKmON6ck1FaHPqiUAdC0pgwBWHyVPjO20NaHeoHvJpI5i4rI3NCYnkmQdqLremhNc0csjbCL4w5GM+Y5zileonbTSz4RZemxPAZkXaapHwzeBcTY2q6KXCmO3T5f1Jaj6FwlsnM+GS/isK0gnqOZsU3kyamTnuA9O5YZlIpQu2bep+ueqVXjfUA7yfXnIGySEf4B2bnYWxkK/fcFx8TJf/LOFyYfAIns6no9zVWNOZvbA7T5LRC6yUUMcE0BFvp7CTU8yVOdGcu2PSF/u8hjMDTZSDcfl1i8sLyKUm8pFLslVxb5GgmK0RlCNXSHCBZAt+COei3IGclWBGMsA61YvhC+NyQ7LBJNzAuo1cOsUOdR+xXlE7qANcUbexY2y6vO687YNA1kQ8C3Bh6vnF6wxrrlOcCZJcDz4YkdhhlhedbTm5WA6SfNhBFRjVjhaSdke+JNVRPQTPTlBNPaPaDxL7k1OS/WbgOcDJxYEKyhE0qh0jn1hmdEk5NwfXPRjBFbN7bTmUW6A4udhEsPUlJXtjrft0aZ/kYtjh5BUnBYsjWAZjLVut1ZkqpJv+y2W+RaIlE5f1z8Ca2P5+Q68pwf7iiMRay3Zz9by4zEMh0RVE6h6/TQpgP+rG8+lFhoyBreCOdG3kkvkshHmZEt4Uw/HMoEMklyjQSUxjm98d3cZd/RIlkRGlDcDtmHPG6Cv/TtuvmKhzYD5n06L4Epe48PgHEbMB7isFmsoAAAAASUVORK5CYII=");
+
+    }
+    .icon-flow-start {
+        background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAPJSURBVHgB7ZhdctowEMd3hcgzPUHICUJvADdon5svJpiZTB+SniDhBE2eMsVkgNA8d3ICcoPSE4ScoPStg22puzYC4zogwHnoNP+ZjCxbkn9e7a42APxParZ6p83m7RFkKISMdO32yhKhH3a0X3Gc6gNkIAEZieDOpx2U55CRMgFk61FTjt0qu267DBkoE8A84uGsp0dhk5EVNwa8vm4XNegjvkbEjtJ4NXmUiRU3Bszn81NLeWOvsSX9yyytuBFg0nonJ9VhtVod0b3uZMjGVtwIMGk9cx146nI6aEMrrg2YZj3zLLzWkIkV1wZ8znpGvu9fTDsbWHHhScJWEnlZAq2LUojtgFqaUkLgdrIAWa92vFdNm++6vQ69IZaCcMABJBAHvlJPCoKB0jD6WK8OYBkgw2xt5U/TIBbJ9/yd+PYmP1Dm5SNYCQfkMsMc4nA89q7MmtI8poXaSutyRKxTFuDUgUNEPQCNvxS3QTB4Do7Fz8iKFS10UStdRBS7tH4Rwo/HQmJ9MgqUiAFyMrdDN97NAdICXRRYnvsiVFdC48jz/IUgi+Q4+w9p99vtdsH3ZUkRmEBxyIDmGblAZ0oRn8SlEkG2Zw/xqFbb68ILqtX6ekhb2zF9MlS1Xj/ozBgScvngR/3NbMFLQs7DkQtpfJ+0eGoUN5vtEopc/yUhk3BaBZV6SjSn5kEeyBPMmcoLuTe9zGo89+bu3AaOtTAPJi1Joy+c4/0GbAhHjnZhAxe9comyhFwVLnqdhTjh5vK5PvliMZokirXahydYQfGkTYfA0POCik3qsjqLo4X0/aQ7WhUutkbo0wrw3javWhcLZLXdyeUA1hTtwDBqYdd2zgrVTJTpqTgYwpoKtPoxuSzZzrEC5GPJBEmgpi9ZQ2isX2i17rZtZkibQb/pzJSTcBJUIqWNCc9WJU85kLg+TPMxrlRMGRKAekvNUl+2AhTh9kaEUs77oAHzAzijboESMBezZUrsHX/sd+OgXHRQJEcdbVfOWW0xlVjFyeWI/ykyYHy6+AGlDg0XDGfGay6n6B6B9r+4t2fmfjySc8IuUOwAExHMPxKlgD1Qv8J/XHgaUCqdPtO5+zj7USnyQ63RKlCsErXbuv0ZBQlXvVBIVNtUwMKnZBXSvCEgDecmuUcvYx8MLchwI6e2/2bZuy2POvn974l6qBQ04rVb6vwU0Nkay0+kpUESoCzMD+K6TTRqzv4lWKh+HH5AJw3UJpKX+qCcA4OGzAU7jrNnBZcErdcOdngN46OZiavsKFlnIy4c2HXgVa/6B/QH9KsAvtIf+2MAAAAASUVORK5CYII=");
+        width: 0.4rem;
+        height: 0.4rem;
+        background-size: 100% 100%;
+        background-repeat: no-repeat;
+        background-position: center;
+        transition: all 0.2s;
+    }
 
+</style>
+<div id="jyKeepComponent">
+    <keep-component ref="vKeepComponent" @on-change-keep="changeKeepStatus" :bid="nowOpenBid" :first="false"></keep-component>
+</div>
 <div class="loading_Top" style="display: none;">
     <p><span></span></p>
 </div>
@@ -438,7 +476,30 @@
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/vipsubscribe/js/weui.min.js?v={{Msg "seo" "version"}}'></script>
 <!-- 账号合并弹窗js -->
 <script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/merge-wx.js?v={{Msg "seo" "version"}}'></script>
-<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/searchindex.js?v={{Msg "seo" "mod_version"}}1'></script>
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/jyapp/js/searchindex.js?v={{Msg "seo" "mod_version"}}'></script>
+<!--S-当前页面的资源-->
+<script src=//cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.js></script>
+<script src=//cdn.jsdelivr.net/npm/vant@2.8.2/lib/vant.min.js></script>
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/keep-tags/keep-tags-template.js'></script>
+<script src='{{Cdns .Host "seo" "cdn"|SafeUrl}}/common-module/ent-search/ent-search-template.js'></script>
+<script>
+    var vKeepComponent = new Vue({
+      delimiters: ['${', '}'],
+      el: '#jyKeepComponent',
+      data: {
+        nowOpenBid: ''
+      },
+      methods: {
+        changeBid (id, type) {
+          this.nowOpenBid = id
+          this.$refs.vKeepComponent.ajaxAddKeep(id, type)
+        },
+        changeKeepStatus (type) {
+            SuperSearch.changeKeepStatus(this.nowOpenBid, type)
+        }
+      }
+    })
+</script>
 
 <script type="text/javascript">
   var adv_url = "/datareport/page/introduce";
@@ -780,7 +841,13 @@
             window.event.returnValue = false;
             //超级搜索
             if(SuperSearch.isMyPage){
-                if (!$(".tabs-box").hasClass('hidden') && $(".tabs-box .tabs-nav .active").index() !== 0) {
+              var isNowIndex = $(".tabs-box .tabs-nav .active").index()
+                if (!$(".tabs-box").hasClass('hidden') && isNowIndex !== 0) {
+                    if (isNowIndex === 1) {
+                      if (vEntSearchComponent) {
+                        vEntSearchComponent.toggleEntShow(true)
+                      }
+                    }
                     return
                 }
                 var max=$("#supersearchPage .maxMrice").val(),min=$("#supersearchPage .minMrice").val();

+ 62 - 0
src/jfw/modules/app/src/web/templates/weixin/search/tabSearch.html

@@ -489,6 +489,68 @@
                 <ul class="history-list-box"></ul>
             </div>
             <div class="tabs-content-page">
+                <!---->
+                <div id="v-ent-ent-search-group" v-cloak>
+                    <div v-show="showEntSearch">
+                        <van-tabs @click="onClickTabs" :ellipsis="false" line-height="0" v-model="activeTabIndex">
+                            <van-tab v-for="tab in entTabs"  :key="tab.title" :disabled="tab.disabled">
+                                <template #title>
+                                    <div class="ent-search-tab-item" v-show="tab.title">
+                                        <span>@@ tab.title @@</span>
+                                        <div class="an-icon-box">
+                                            <i class="j-icon base-icon icon-triangle-down"></i>
+                                            <i class="j-icon base-icon icon-triangle-up"></i>
+                                        </div>
+                                    </div>
+                                </template>
+                            </van-tab>
+                        </van-tabs>
+                        <div class="ent-search-list" :class="{stop: showPop}">
+                            <div v-show="showPop" class="jy-diy-pop">
+                                <div @click="togglePop(false)" class="van-overlay"></div>
+                                <div class="van-popup">
+                                    <div class="pop-bottom">
+                                        <button>1</button>
+                                        <button>2</button>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="ent-search-item" v-for="(item, i) in list" :key="i" @click="selectEnt(item)">
+                                <div class="ent-info-top">
+                                    <div class="ent-info-head">
+                                        <span class="ent-info-status" :class="'status-' + item.status">@@statusEnum[item.status]@@</span>
+                                    </div>
+                                    <div class="ent-info-keep">
+                                        <div class="ent-row">
+                                            <div class="ent-name van-ellipsis">@@item.name@@</div>
+                                            <div class="fill-icon-box">
+                                                <i class="j-icon base-icon icon-no-favorite"></i>
+                                            </div>
+                                        </div>
+                                        <div class="ent-more">
+                                            <div>法定代表人: <span>@@item.legal@@</span></div>
+                                            <div>注册资本: <span>@@item.money@@</span></div>
+                                        </div>
+                                        <div class="ent-line-box"></div>
+                                    </div>
+                                </div>
+                                <div class="ent-info-bottom">
+                                    <div  class="ent-row ent-address">
+                                        <div class="van-multi-ellipsis--l2">@@item.address@@</div>
+                                        <i class="j-icon base-icon icon-address"></i>
+                                    </div>
+
+                                </div>
+                            </div>
+                            <div class="up-button">升级会员,查看更多搜索结果</div>
+                            <div class="ent-more-tip">
+                                <i class="j-icon base-icon icon-up-allow"></i>
+                                <span>上拉查看更多搜索结果</span>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <!---->
                 <ul class="ent-search-list-box"  id="search-ent-list"></ul>
                 <div class="del_ent_history">
                     <div class="history-title-box">

+ 15 - 3
src/jfw/modules/common/src/qfw/util/jy/subscribepush.go

@@ -180,6 +180,7 @@ func (s *subscribePush) Datas(spqp *SubPushQueryParam) (hasNextPage bool, result
 		spqp.PageNum = 1
 	}
 	starttime, endtime := int64(0), int64(0)
+	st, et := "", ""
 	now := time.Now()
 	if spqp.SelectTime == "lately-7" { //最近7天
 		starttime = time.Date(now.Year(), now.Month(), now.Day()-7, 0, 0, 0, 0, time.Local).Unix()
@@ -189,9 +190,9 @@ func (s *subscribePush) Datas(spqp *SubPushQueryParam) (hasNextPage bool, result
 		starttime = time.Date(now.Year()-1, 1, 1, 0, 0, 0, 0, time.Local).Unix()
 		endtime = time.Date(now.Year()-1, 12, 31, 23, 59, 59, 0, time.Local).Unix()
 	} else if len(strings.Split(spqp.SelectTime, "_")) == 2 {
-		st := strings.Split(spqp.SelectTime, "_")[0]
+		st = strings.Split(spqp.SelectTime, "_")[0]
 		starttime, _ = strconv.ParseInt(st, 0, 64)
-		et := strings.Split(spqp.SelectTime, "_")[1]
+		et = strings.Split(spqp.SelectTime, "_")[1]
 		endtime, _ = strconv.ParseInt(et, 0, 64)
 		if endtime > 0 {
 			etTime := time.Unix(endtime, 0)
@@ -202,7 +203,7 @@ func (s *subscribePush) Datas(spqp *SubPushQueryParam) (hasNextPage bool, result
 	start := (spqp.PageNum - 1) * pageSize
 	end := start + pageSize
 	//时间是今天,没有别的过滤条件
-	if starttime > 0 && starttime == endtime && nowFormat == FormatDateByInt64(&starttime, Date_Short_Layout) && spqp.Area == "" && spqp.Buyerclass == "" && spqp.Subscopeclass == "" && spqp.Subtype == "" && spqp.Key == "" {
+	if starttime > 0 && st == et && nowFormat == FormatDateByInt64(&starttime, Date_Short_Layout) && spqp.Area == "" && spqp.Buyerclass == "" && spqp.Subscopeclass == "" && spqp.Subtype == "" && spqp.Key == "" {
 		subPush, err := s.GetTodayCache(spqp.UserId)
 		if err != nil {
 			log.Println(spqp.UserId, "GetTodayCache Error", err)
@@ -514,6 +515,17 @@ func (s *subscribePush) MakeHistoryDatas(MQFW mg.MongodbSim, PushMysql *mysql.My
 				myInsert["buyerclass"] = buyerclass_mapping
 			}
 		}
+		if s_subscopeclass := ObjToString(v["s_subscopeclass"]); s_subscopeclass != "" {
+			subscopeclass := []string{}
+			for _, v := range strings.Split(s_subscopeclass, ",") {
+				if subscopeclass_mapping, ok := PushMapping.Subscopeclass[v]; ok {
+					subscopeclass = append(subscopeclass, fmt.Sprint(subscopeclass_mapping))
+				}
+			}
+			if len(subscopeclass) > 0 {
+				myInsert["subscopeclass"] = strings.Join(subscopeclass, ",")
+			}
+		}
 		id := PushMysql.Insert("pushsubscribe", myInsert)
 		if id > 0 {
 			redis.Put("pushcache_2_a", redisKey, 1, 86400)

+ 2 - 2
src/jfw/modules/subscribepay/src/service/vipSubscribePay.go

@@ -340,7 +340,7 @@ func TimeProcessing(hour interface{}, duration int) time.Time {
 	return t
 }
 
-//cycleunit(1:年 2:月 3:季)
+//cycleunit(1:年 2:月 3:季)
 //cyclecount 数字长度
 func checkReqDate(dateStr string) (cyclecount, cycleunit int, err error) {
 	if strings.HasSuffix(dateStr, "年") {
@@ -353,7 +353,7 @@ func checkReqDate(dateStr string) (cyclecount, cycleunit int, err error) {
 		return
 	} else if strings.HasSuffix(dateStr, "季") {
 		cycleunit = 3
-		dateStr = strings.Replace(dateStr, "", "", -1)
+		dateStr = strings.Replace(dateStr, "季", "", -1)
 		cyclecount, err = strconv.Atoi(strings.Trim(dateStr, " "))
 		if cyclecount > 12 && err == nil {
 			err = errors.New(fmt.Sprintf("日期%s范围超出最大值", dateStr))

+ 32 - 2
src/web/staticres/common-module/collection/css/index.css

@@ -180,7 +180,7 @@
   flex-wrap: wrap;
   padding: .32rem;
   flex-direction: row;
-
+  align-content: flex-start;
 }
 .collection .taglist .area-card-item{
   height: .72rem;
@@ -322,7 +322,7 @@
 }
 /* 地区 */
 .collection .area-list.van-index-bar{
-  height: 8.6rem;
+  height: 7.6rem;
   overflow: auto;
 }
 /* 采购单位类型 */
@@ -402,4 +402,34 @@
 }
 .unitType .van-tabs__wrap .van-tabs__nav.van-tabs__nav--card .van-tab.van-tab--active .van-tab__text.van-tab__text--ellipsis{
   color: #2ABED1;
+}
+
+/* 采购单位联系方式 */
+.icon-duihao{
+  display: flex;
+  width: .48rem;
+  height: .48rem;
+  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAF4AAABQCAMAAACnBjIsAAAAk1BMVEXOzs7Ozs7Pz8/Ozs7Ozs4AAADOzs7Ozs729vvOzs4st8rz9fo5vM7f7/aX2eRJwNHk8fei3Oc0uczv9Pnr8/nZ7fTS6/K95e5mydhfx9ZQwtM+vc8xuMvo8vjK6PDE5u+r3+nk5OeC0t9wzdtXxdVDvtCy4euN1eF3z9xbxtXM6fG14uuN1eKJ1ODV7PN80N1ty9q7gJB9AAAACHRSTlOt8/DDJwAoJUOi5sAAAAF6SURBVFjD7dlrb4IwFAZgdLodW7moqFwVkKuXbf//1y20WU4yJksK54Oz5yMNzxde8rap8bKgmqnxNjcWQDU8nc6QJ5jUIOX5hJSHheY1r3nNa17zT8FvfYeQNwtmm2S8YzPGCpOIjwPWTkPDu7nQwy0Jv/GFvtwBBc89qR9IksNPQl8faXJfCz3aAwmfMTElKPH8D72SegJK/MF+79Utqa9Aid8tWbjreXEldQuU+G3YBu58971E6hWo8U1/oC9Sz0CRN+2+SO8jsVqDIo/+b6E+rsXaiavz4AT3/PNSrHhcva3Qjy7dTLXjbwaWYZxLv+xmirHcHdy1btP9Mc1CPAriEarc9X/+mo784rYzyk5h46GP1YfVOoxH3+qrPnUe+Cf6WH0j8VhJ7NqpvkE8+rX0b1h9Y/DofzCcaD/+HjNDvqTYwt6+9YRmh3zF/FPwYGH6CXjhV5THh1X2Lw8/mte85jWvec0/Ms8nj3upx9PpK+GF6sSYzb8A2b742RBkpdEAAAAASUVORK5CYII=) no-repeat;
+  background-size: contain;
+}
+
+/* 没有权限样式 */
+.useRoot{
+  height: 3.52rem;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  font-size: .36rem;
+  font-weight: 500;
+  text-align: CENTER;
+  color: #171826;
+  line-height: .52rem;
+}
+.useRoot .open_root{
+  font-size: .3rem;
+  font-weight: 500;
+  text-align: CENTER;
+  color: #5f5e64;
+  line-height: .44rem;
 }

BIN
src/web/staticres/common-module/collection/image/icon-right-bg.png


+ 2 - 3
src/web/staticres/common-module/collection/js/cate-mobile.js

@@ -1,3 +1,4 @@
+// 采购单位类型
 var cateComponentTemplate = `<div class="j-container">
 <div class="j-main unitTab">
   <van-tabs type="card" class="unitType">
@@ -176,9 +177,7 @@ var cateComponent = {
       this.tablist.forEach(function(item, index){
         item[Object.keys(item)[0]].forEach(function(data, i) {
           if(data.type){
-            console.log(data)
-            let str = Object.keys(item)[0] +'_'+data.name
-            cateArr.push(str)
+            cateArr.push(data.name)
           }
         })
       })

+ 145 - 40
src/web/staticres/common-module/collection/js/date-mobile.js

@@ -1,12 +1,12 @@
 var dateComponentTemplate = `<div class="j-container">
 <div class="dateTags j-main">
     <div class="timeTag">
-    <div class="area-card-item" :class="{active:index==colDate}" v-for="(item, index) in dateOption" :key="index" @click="selectFixedDate(index, item.value)">{{item.name}}</div>
+    <div class="area-card-item" :class="{active:item.selected==true}" v-for="(item, index) in timeSelectList" :key="index" @click="selectFixedDate(item)">{{item.name}}</div>
     </div>
     <div class="timePicker" @click="dateShowEvent" :class="{clickactive:dateStyle==true}">
-    <van-field v-model="selectDate.startDate" placeholder="开始时间"></van-field>
+    <van-field v-model="dateTimePickerState.startPlaceHolder" placeholder="开始时间"></van-field>
     <div class="line"></div>
-    <van-field @focus="getEndFocus" v-model="selectDate.endDate" placeholder="结束时间"></van-field>
+    <van-field @focus="getEndFocus" v-model="dateTimePickerState.endPlaceHolder" placeholder="结束时间"></van-field>
     </div>
 </div>
 <van-popup v-model="datePicker.startshow" round position="bottom" :style="{ height: '43%' }">
@@ -22,7 +22,6 @@ var dateComponentTemplate = `<div class="j-container">
       </div>
       <div class="j-main">
         <van-datetime-picker
-          @change="changeDate"
           class="datepopup"
           :show-toolbar="false"
           swipe-duration="300"
@@ -57,7 +56,6 @@ var dateComponentTemplate = `<div class="j-container">
       </div>
       <div class="j-main">
         <van-datetime-picker
-          @change="changeDate"
           class="datepopup"
           :show-toolbar="false"
           swipe-duration="300"
@@ -94,22 +92,26 @@ var dateComponent = {
   data:function () {
     return {
       colDate: 0,
-      dateOption:[
+      timeSelectList:[
         {
           name: '不限',
-          value: 'all'
+          value: 'all',
+          selected: true
         },
         {
           name: '最近7天',
-          value: 'lately-7'
+          value: 'lately7',
+          selected: false
         },
         {
           name: '最近30天',
-          value: 'lately-30'
+          value: 'lately30',
+          selected: false
         },
         {
           name: '去年',
-          value: 'lastyear'
+          value: 'lastYear',
+          selected: false
         }
       ],
       // 点击选择时间添加样式
@@ -122,33 +124,142 @@ var dateComponent = {
         maxDate: new Date(2025, 10, 1),
         currentDate: new Date(),
       },
-      selectDate: {
-        tagDate: '',
-        startDate: '',
-        endDate: ''
-      }
+      dateTimePickerState: {
+        start: '',
+        end: '',
+        startPlaceHolder: '', // 开始日期
+        endPlaceHolder: '' // 结束日期
+      },
     }
   },
   methods: {
-    selectFixedDate: function(i, value) {
-      this.colDate = i
+    setState (data) {
+      // {
+      //   start: 1620230400000, // 2021-5-6
+      //   end: 1620489600000, // 2021-5-9
+      //   exact: 'all'
+      // }
+      if (!data || Object.keys(data).length === 0) {
+        this.setTimeSelectListState('all')
+      } else {
+        switch (data.exact) {
+          case 'all': {
+            this.setTimeSelectListState('all')
+            this.clearDateTimePicker()
+            break
+          }
+          case 'lately7': {
+            this.setTimeSelectListState('lately7')
+            this.clearDateTimePicker()
+            break
+          }
+          case 'lately30': {
+            this.setTimeSelectListState('lately30')
+            this.clearDateTimePicker()
+            break
+          }
+          case 'lastYear': {
+            this.setTimeSelectListState('lastYear')
+            this.clearDateTimePicker()
+            break
+          }
+          case 'exact': {
+            // if (!data.start || !data.end) break
+            if (data.start < data.end) {
+              this.dateTimePickerState.start = new Date(data.start)
+              this.dateTimePickerState.end = new Date(data.end)
+            }
+            break
+          }
+          default: {
+            console.warn('exact值为空')
+          }
+        }
+      }
+    },
+    clearDateTimePicker () {
+      this.dateTimePickerState.start = ''
+      this.dateTimePickerState.end = ''
+    },
+    getState () {
+      // timeState.exact: all/lately7/lately30/lastYear/exact5种状态
+      // 为true时候表示精确筛选,从时间选择器中获取值(其他为根据当前时间计算出的值)
+      const timeState = {
+        start: '',
+        end: '',
+        exact: 'exact'
+      }
+      const selectButton = this.timeSelectList.find(item => item.selected)
+      console.log(selectButton)
+      if (selectButton) {
+        timeState.exact = selectButton.value
+        Object.assign(timeState, this.calcNotExactTime(timeState.exact))
+      } else {
+        timeState.exact = 'exact'
+        if(this.dateTimePickerState.start !== '') {
+          timeState.start = this.dateTimePickerState.start.getTime()
+        } else {
+          timeState.start = ''
+        }
+        console.log(this.dateTimePickerState.end == '')
+        if(this.dateTimePickerState.end != '') {
+          timeState.end = this.dateTimePickerState.end.getTime()
+        } else {
+          timeState.end = ''
+        }
+      }
+      return timeState
+    },
+    // 计算lately7/lately30/lastYear的开始和结束时间
+    // endTime传入一个时间戳
+    calcNotExactTime (exact, endTime = Date.now()) {
+      const t = {
+        start: 0,
+        end: +new Date(endTime)
+      }
+      const durations = {
+        hour1: 60 * 60 * 1000,
+        day1: 60 * 60 * 1000 * 24 * 1,
+        day7: 60 * 60 * 1000 * 24 * 7,
+        day30: 60 * 60 * 1000 * 24 * 30
+      }
+      switch (exact) {
+        case 'lately7': {
+          t.start = t.end - durations.day7
+          break
+        }
+        case 'lately30': {
+          t.start = t.end - durations.day30
+          break
+        }
+        case 'lastYear': {
+          const year = new Date(t.end).getFullYear()
+          const lastYear = year - 1
+          t.start = +new Date(`${lastYear}`)
+          t.end = +new Date(`${year}`) - durations.hour1 * 8 - 1
+          break
+        }
+        default: {
+          t.start = 0
+          t.end = 0
+          break
+        }
+      }
+      return t
+    },
+    selectFixedDate: function(item) {
+      if (item.selected) return
+      this.timeSelectList.forEach(v => (v.selected = false))
+      item.selected = true
       this.dateStyle = false
-      this.selectDate.tagDate = value
-      this.selectDate.startDate = ''
-      this.selectDate.endDate = ''
+      this.clearDateTimePicker()
     },
     // 显示选择时间弹窗
     dateShowEvent: function() {
-      this.colDate = -1
+      this.timeSelectList.forEach(v => (v.selected = false))
       this.dateStyle = true
       this.datePicker.startshow = true
     },
-    // 获取选中的时间
-    changeDate: function(e) {
-      console.log(e.getValues())
-      let timer = e.getValues()
-      console.log(timer)
-    },
     formatter: function(type, val) {
       if (type === 'year') {
         return val + '年';
@@ -170,15 +281,15 @@ var dateComponent = {
         name: 'dateItem',
         data: ''
       }
-      this.$emit('confirm', params)
+      this.$emit('cancel', params)
     },
     // 选择开始时间弹窗确认按钮
     onStartConfirm:function() {
-      this.selectDate.tagDate = ''
-      this.selectDate.startDate = this.$refs.getstartValues.value.pattern('yyyy年MM月dd日')
+      this.dateTimePickerState.start = new Date(this.$refs.getstartValues.value)
+      this.dateTimePickerState.startPlaceHolder = this.$refs.getstartValues.value.pattern('yyyy年MM月dd日')
       this.datePicker.startshow = false
       // 如果结束时间不为空 选择过开始时间不弹出结束时间弹窗
-      if(this.selectDate.endDate == '') {
+      if(this.dateTimePickerState.end == '') {
         this.datePicker.endshow = true
       }else{
         this.datePicker.endshow = false
@@ -186,8 +297,8 @@ var dateComponent = {
     },
     // 选择结束时间弹窗确认按钮
     onendConfirm: function(){
-      this.selectDate.tagDate = ''
-      this.selectDate.endDate = this.$refs.getendValues.value.pattern('yyyy年MM月dd日')
+      this.dateTimePickerState.end = new Date(this.$refs.getendValues.value)
+      this.dateTimePickerState.endPlaceHolder = this.$refs.getendValues.value.pattern('yyyy年MM月dd日')
       this.datePicker.endshow = false
     },
     // 选择时间弹窗关闭按钮
@@ -197,15 +308,9 @@ var dateComponent = {
     },
     // 筛选条件确认按钮
     onConfirm: function(){
-      let timerDate = ''
-      if(this.selectDate.tagDate == ''){
-        timerDate = this.selectDate.startDate-this.selectDate.endDate
-      }else{
-        timerDate = this.selectDate.tagDate
-      }
       let params = {
         name: 'dateItem',
-        data: timerDate
+        data: this.getState()
       }
       this.$emit('confirm', params)
     }

+ 272 - 0
src/web/staticres/common-module/collection/js/index-wx.js

@@ -0,0 +1,272 @@
+var vNode = {
+  delimiters: ['${', '}'],
+  el: '#myCollection',
+  components: {
+    tagsComponent: tagsComponent,
+    dateComponent: dateComponent,
+    cateComponent: cateComponent,
+    phoneComponent: phoneComponent
+  },
+  data: {
+    listState: {
+      value: '',
+      loading: false,
+      finished: false,
+      pageSize: 10,
+      offset: 80,
+      scrollTop: 0,
+      total: 0,
+      list: []
+    },
+    // 筛选参数
+    limitlist: {
+      pageNum: 1,
+      label: '',
+      selectTime: '',
+      buyerclass: '',
+      buyerPhone: 0,
+      winnerPhone: 0
+    },
+    // 个人标签列表
+    tagList: [],
+    // 下拉菜单参数
+    params: {
+      value2: '',
+      buyerData: {
+        dataType: '1',
+        option: [
+          { text: '有联系方式', value: 1, type: false },
+          { text: '无联系方式', value: -1, type: false },
+        ],
+      },
+      winnerData: {
+        dataType: '2',
+        option: [
+          { text: '有联系方式', value: 1, type: false },
+          { text: '无联系方式', value: -1, type: false },
+        ]
+      }
+    },
+    // 收藏日期选择时间参数
+    selectDate: {
+      startDate: '',
+      endDate: ''
+    },
+    limitshow: false, // 筛选框显示
+    condition: true, // 列表星星显示
+    personTagactive:0, //个人标签选择按钮下标
+    screenShow: false // 筛选按钮是否显示
+  },
+  computed: {},
+  created () {
+    this.getUserRoot()
+    this.getList()
+    this.getTagsList()
+  },
+  mounted() {
+  },
+  methods: {
+    // 判断是否是有筛选条件
+    getUserRoot: function() {
+      $.ajax({
+        url: '/publicapply/bidcoll/power',
+        type: 'POST',
+        success: function(res) {
+          console.log(res)
+          if(res.data) {
+            this.screenShow = true
+          } else {
+            this.screenShow = false
+          }
+        }
+      })
+    },
+    // 列表跳转
+    linkRouter: function(id) {
+      location.href = '/front/wx_dataExport/submitOrder?id=' + id + '&source=d&dataspec='
+      debugger
+    },
+    // 筛选按钮
+    screenBtn() {
+      this.limitshow = true
+      setTimeout(()=>{
+        this.$refs.tagItem.toggle()
+      })
+    },
+    getContainer: function() {
+      return this.$refs.searchContainer
+    },
+    // 获取列表数据
+    getList: function() {
+      let _this = this
+      _this.listState.loading = true
+      let params = _this.limitlist
+      $.ajax({
+        url: '/publicapply/bidcoll/list',
+        type: "POST",
+        contentType: 'application/json;charset=utf-8',
+        data: JSON.stringify(params),
+        success: function(res){
+          console.log(res)
+          if (res.error_code == 0) {
+            if (res.data && res.data.res && $.isArray(res.data.res)) {
+              // 当数组为空时,且不为第一页,底部显示没有更多数据
+              if(res.data.res.length == 0 && _this.limitlist.pageNum != 1){
+                _this.listState.list = _this.listState.list.concat(res.data.res)
+                _this.listState.loading = false
+                if(!res.data.haveNextPage){
+                    _this.listState.loading = true
+                    _this.listState.finished = true;
+                }else{
+                    _this.listState.loading = false
+                    _this.limitlist.pageNum++
+                }
+              } else if(res.data.res.length == 0 && _this.limitlist.pageNum == 1){
+                // 当数组为空时,且为第一页,页面为暂无数据页面
+                _this.listState.loading = true
+                _this.listState.finished = true;
+              } else {
+                // 数据正常加载更多
+                for (let i = 0; i < res.data.res.length; i++) {
+                  res.data.res[i].bidamount = utils.moneyUnit(res.data.res[i].bidamount)
+                  res.data.res[i].publishtime = utils.dateFromNow(res.data.res[i].publishtime * 1000)
+                }
+                _this.listState.list = _this.listState.list.concat(res.data.res)
+                _this.listState.loading = false
+                if(!res.data.haveNextPage){
+                  _this.listState.loading = true
+                  _this.listState.finished = true;
+                }else{
+                    _this.listState.loading = false
+                    _this.limitlist.pageNum++
+                }
+              }
+            } else {
+              _this.listState.loading = true
+              _this.listState.finished = true;
+            }
+          } else {
+            _this.$toast(res.error_msg)
+          }
+        },
+        error: function(err){
+          _this.listState.loading = true
+          _this.listState.finished = true;
+        }
+      })
+    },
+    // 取消收藏
+    collecClick: function(id) {
+      let _this = this
+      let params = {
+        baction: 'R',
+        binfo: [
+          {
+            bid: id
+          }
+        ]
+      }
+      $.ajax({
+        url: '/publicapply/bidcoll/action',
+        type: "POST",
+        contentType: 'application/json;charset=utf-8',
+        data:JSON.stringify(params),
+        success: function(res){
+          console.log(res)
+          if(res.error_code == 0) {
+            if(res.data) {
+              _this.$toast('取消收藏成功')
+              _this.reLoadList()
+            } else {
+              _this.$toast('取消收藏失败')
+            }
+          }
+        },
+        error: function(err){
+          _this.$toast('取消收藏失败')
+        }
+      })
+    },
+    // 确定按钮事件
+    confirm: function(data) {
+      if(data.name == 'dateItem'){
+        this.limitlist.selectTime = (data.data.start / 1000).toFixed(0) + '_' + (data.data.end / 1000).toFixed(0)
+        this.$refs.dateItem.toggle()
+      } else if (data.name == 'cateItem') {
+        this.limitlist.buyerclass = data.data.join(',')
+        this.$refs.cateItem.toggle()
+      } else if (data.name == 'tagsItem') {
+        this.limitlist.label = data.data
+        this.$refs.tagItem.toggle()
+      } else if (data.name == 'buyerItem') {
+        this.limitlist.buyerPhone = parseInt(data.data)
+        this.$refs.buyerItem.toggle(false)
+      } else if (data.name == 'winnerItem') {
+        this.limitlist.winnerPhone = parseInt(data.data)
+        this.$refs.winnerItem.toggle(false)
+      }
+      this.reLoadList()
+    },
+    // 取消按钮事件
+    cancel: function(data) {
+      console.log(data)
+    },
+    // 刷新列表
+    reLoadList: function() {
+      this.listState.list = []
+      this.getList()
+    },
+
+    // 中标企业联系方式
+    getWinnerPhone: function(value) {
+      this.params.option5.forEach(function(data){
+        data.type = false
+      })
+      value.type = true
+      this.limitlist.winnerPhone = value.value
+      this.$refs.winnerItem.toggle(false)
+      this.reLoadList()
+    },
+    // 获取个人标签列表
+    getTagsList: function() {
+      let _this = this
+      $.ajax({
+        url: '/publicapply/bidcoll/getLabel',
+        type: "POST",
+        success: function(res){
+          console.log(res)
+          if(res.error_code == 0) {
+            res.data.forEach(function(item, index){
+              item.type = false
+            })
+            _this.tagList = res.data
+          }
+        },
+        error: function(err){
+          console.log(err)
+        }
+      })
+    },
+    // 数据导出
+    dataReport: function() {
+      let idArr = []
+      this.listState.list.forEach(function(item) {
+        idArr.push(item._id)
+      })
+      $.ajax({
+        url: '/publicapply/dataexpoet/bycollection',
+        type: 'POST',
+        data: {
+          selectIds: idArr.join(',')
+        },
+        success: function(res) {
+          console.log(res)
+          if(res.error_code == 0 && res.data) {
+            location.href = '/front/dataExport/toCreateOrderPage?id=' + res.data._id
+          }
+        }
+      })
+    }
+  }
+}
+var myCollection = new Vue(vNode)

+ 192 - 98
src/web/staticres/common-module/collection/js/index.js

@@ -2,41 +2,50 @@ var vNode = {
   delimiters: ['${', '}'],
   el: '#myCollection',
   components: {
+    tagsComponent: tagsComponent,
     dateComponent: dateComponent,
-    cateComponent: cateComponent
+    cateComponent: cateComponent,
+    phoneComponent: phoneComponent
   },
   data: {
     listState: {
       value: '',
       loading: false,
-      finished: true,
-      pageNum: 1,
+      finished: false,
       pageSize: 10,
       offset: 80,
       scrollTop: 0,
       total: 0,
       list: []
     },
-    dateOption:[
-      '不限',
-      '最近7天',
-      '最近30天',
-      '去年'
-    ],
-    list: ['a', 'b'],
-    result: [],
+    // 筛选参数
+    limitlist: {
+      pageNum: 1,
+      label: '',
+      selectTime: '',
+      buyerclass: '',
+      buyerPhone: 0,
+      winnerPhone: 0
+    },
+    // 个人标签列表
+    tagList: [],
     // 下拉菜单参数
     params: {
-      value1: '',
       value2: '',
-      option4: [
-        { text: '有联系方式', value: 'a' },
-        { text: '无联系方式', value: 'b' },
-      ],
-      option5: [
-        { text: '有联系方式', value: 'a' },
-        { text: '无联系方式', value: 'b' },
-      ]
+      buyerData: {
+        dataType: '1',
+        option: [
+          { text: '有联系方式', value: 1, type: false },
+          { text: '无联系方式', value: -1, type: false },
+        ],
+      },
+      winnerData: {
+        dataType: '2',
+        option: [
+          { text: '有联系方式', value: 1, type: false },
+          { text: '无联系方式', value: -1, type: false },
+        ]
+      }
     },
     // 收藏日期选择时间参数
     selectDate: {
@@ -46,31 +55,51 @@ var vNode = {
     limitshow: false, // 筛选框显示
     condition: true, // 列表星星显示
     personTagactive:0, //个人标签选择按钮下标
-    colDate:0 // 收藏日期选择按钮下标
+    screenShow: false // 筛选按钮是否显示
   },
   computed: {},
   created () {
+    this.getUserRoot()
     this.getList()
     this.getTagsList()
   },
   mounted() {
   },
   methods: {
-    toggle(index) {
-      this.$refs.checkboxes[index].toggle();
+    // 判断是否是有筛选条件
+    getUserRoot: function() {
+      $.ajax({
+        url: '/publicapply/bidcoll/power',
+        type: 'POST',
+        success: function(res) {
+          console.log(res)
+          if(res.data) {
+            this.screenShow = true
+          } else {
+            this.screenShow = false
+          }
+        }
+      })
     },
-    onClick: function(){},
-    screenBtn(val) {
+    // 列表跳转
+    linkRouter: function(id) {
+      location.href = '/jyapp/article/content/' + id + '.html'
+    },
+    // 筛选按钮
+    screenBtn() {
       this.limitshow = true
+      setTimeout(()=>{
+        this.$refs.tagItem.toggle()
+      })
     },
     getContainer: function() {
       return this.$refs.searchContainer
     },
+    // 获取列表数据
     getList: function() {
       let _this = this
-      let params = {
-        pagenum: _this.listState.pageNum
-      }
+      _this.listState.loading = true
+      let params = _this.limitlist
       $.ajax({
         url: '/publicapply/bidcoll/list',
         type: "POST",
@@ -78,58 +107,50 @@ var vNode = {
         data: JSON.stringify(params),
         success: function(res){
           console.log(res)
+          if (res.error_code == 0) {
+            if (res.data && res.data.res && $.isArray(res.data.res)) {
+              // 当数组为空时,且不为第一页,底部显示没有更多数据
+              if(res.data.res.length == 0 && _this.limitlist.pageNum != 1){
+                _this.listState.list = _this.listState.list.concat(res.data.res)
+                _this.listState.loading = false
+                if(!res.data.haveNextPage){
+                    _this.listState.loading = true
+                    _this.listState.finished = true;
+                }else{
+                    _this.listState.loading = false
+                    _this.limitlist.pageNum++
+                }
+              } else if(res.data.res.length == 0 && _this.limitlist.pageNum == 1){
+                // 当数组为空时,且为第一页,页面为暂无数据页面
+                _this.listState.loading = true
+                _this.listState.finished = true;
+              } else {
+                // 数据正常加载更多
+                for (let i = 0; i < res.data.res.length; i++) {
+                  res.data.res[i].bidamount = utils.moneyUnit(res.data.res[i].bidamount)
+                  res.data.res[i].publishtime = utils.dateFromNow(res.data.res[i].publishtime * 1000)
+                }
+                _this.listState.list = _this.listState.list.concat(res.data.res)
+                _this.listState.loading = false
+                if(!res.data.haveNextPage){
+                  _this.listState.loading = true
+                  _this.listState.finished = true;
+                }else{
+                    _this.listState.loading = false
+                    _this.limitlist.pageNum++
+                }
+              }
+            } else {
+              _this.listState.loading = true
+              _this.listState.finished = true;
+            }
+          } else {
+            _this.$toast(res.error_msg)
+          }
         },
         error: function(err){
-          console.log(err)
-        }
-      })
-      this.listState.list = [
-        {
-          "_id": "ABCY1wIfjwOOyw7I39zcE8sMDI%2FQTBgcUJ1Px4sODogZ31wAFpUCeg%3D",
-          "title": "吉林市鑫业建筑安装有限公司舒兰市人民医院异地新建项目户外门采购项目中标公告",
-          "area": "吉林",
-          "buyerclass": "建筑业",
-          "type": "成交",
-          "s_subscopeclass": "建筑工程",
-          "publishtime": 1619573067,
-          "budget": null,
-          "bidamount": 2270472.4
-        },
-        {
-          "_id": "ABCY2EEcjxYNyAsI2t2c2UoDScoGj10XFJ%2BPy8FJiEgWX1zYy9UCbE%3D",
-          "title": "广东实验中学货物采购合同采购合同",
-          "area": "广东",
-          "buyerclass": "学校",
-          "type": "合同",
-          "s_subscopeclass": "",
-          "publishtime": 1514735849,
-          "budget": 1799691.27,
-          "bidamount": 1728000
-        },
-        {
-          "_id": "ABCY1wIfjwOAj07NFlzcE8sMDI%2FQTBgcUJ1Px4vIDogUXxwBFpUCYM%3D",
-          "title": "大埔县农业农村局2021年食用农产品抽检服务项目成交公告",
-          "area": "广东",
-          "buyerclass": "农业",
-          "type": "成交",
-          "s_subscopeclass": "服务采购",
-          "publishtime": 1619573075,
-          "budget": null,
-          "bidamount": 223500
-        }
-      ]
-    },
-    // 获取个人标签列表
-    getTagsList: function() {
-      let _this = this
-      $.ajax({
-        url: '/publicapply/bidcoll/getLabel',
-        type: "POST",
-        success: function(res){
-          console.log(res)
-        },
-        error: function(err){
-          console.log(err)
+          _this.listState.loading = true
+          _this.listState.finished = true;
         }
       })
     },
@@ -151,35 +172,108 @@ var vNode = {
         data:JSON.stringify(params),
         success: function(res){
           console.log(res)
+          if(res.error_code == 0) {
+            if(res.data) {
+              _this.$toast('取消收藏成功')
+              _this.reLoadList()
+            } else {
+              _this.$toast('取消收藏失败')
+            }
+          }
         },
         error: function(err){
-          console.log(err)
+          _this.$toast('取消收藏失败')
         }
       })
-      this.listState.list.map((item,index) => {
-        console.log(item)
-        if(id === item._id) {
-          this.getList()
+    },
+    // 确定按钮事件
+    confirm: function(data) {
+      if(data.name == 'dateItem'){
+        if ((data.data.start / 1000).toFixed(0) == 0 && (data.data.end / 1000).toFixed(0) == 0) {
+          this.limitlist.selectTime = ''
+        } else if((data.data.start / 1000).toFixed(0) == 0 && (data.data.end / 1000).toFixed(0) != 0) {
+          this.limitlist.selectTime = '_' + (data.data.end / 1000).toFixed(0)
+        } else if((data.data.start / 1000).toFixed(0) != 0 && (data.data.end / 1000).toFixed(0) == 0) {
+          this.limitlist.selectTime = (data.data.start / 1000).toFixed(0) + '_'
+        } else {
+          this.limitlist.selectTime = (data.data.start / 1000).toFixed(0) + '_' + (data.data.end / 1000).toFixed(0)
         }
-      })
+        this.$refs.dateItem.toggle()
+      } else if (data.name == 'cateItem') {
+        this.limitlist.buyerclass = data.data.join(',')
+        this.$refs.cateItem.toggle()
+      } else if (data.name == 'tagsItem') {
+        this.limitlist.label = data.data
+        this.$refs.tagItem.toggle()
+      } else if (data.name == 'buyerItem') {
+        this.limitlist.buyerPhone = parseInt(data.data)
+        this.$refs.buyerItem.toggle(false)
+      } else if (data.name == 'winnerItem') {
+        this.limitlist.winnerPhone = parseInt(data.data)
+        this.$refs.winnerItem.toggle(false)
+      }
+      this.reLoadList()
     },
-    // 个人标签重置
-    resetAll: function() {},
-    // 个人标签确定
-    onConfirm: function(){},
-    // 个人标签点击
-    selectTags: function(i) {
-      console.log(i)
-      this.personTagactive = i
+    // 取消按钮事件
+    cancel: function(data) {
+      console.log(data)
     },
-    // 收藏日期标签选择
-    selectFixedDate: function(i) {
-      this.colDate = i
+    // 刷新列表
+    reLoadList: function() {
+      this.listState.list = []
+      this.getList()
     },
-    // 采购单位类型全选
-    checkAll:function() {
-      this.$refs.checkboxGroup.toggleAll();
+
+    // 中标企业联系方式
+    getWinnerPhone: function(value) {
+      this.params.option5.forEach(function(data){
+        data.type = false
+      })
+      value.type = true
+      this.limitlist.winnerPhone = value.value
+      this.$refs.winnerItem.toggle(false)
+      this.reLoadList()
+    },
+    // 获取个人标签列表
+    getTagsList: function() {
+      let _this = this
+      $.ajax({
+        url: '/publicapply/bidcoll/getLabel',
+        type: "POST",
+        success: function(res){
+          console.log(res)
+          if(res.error_code == 0) {
+            res.data.forEach(function(item, index){
+              item.type = false
+            })
+            _this.tagList = res.data
+          }
+        },
+        error: function(err){
+          console.log(err)
+        }
+      })
     },
+    // 数据导出
+    dataReport: function() {
+      let idArr = []
+      this.listState.list.forEach(function(item) {
+        idArr.push(item._id)
+      })
+      $.ajax({
+        url: '/publicapply/dataexpoet/bycollection',
+        type: 'POST',
+        data: {
+          selectIds: idArr.join(',')
+        },
+        success: function(res) {
+          console.log(res)
+          if(res.error_code == 0 && res.data) {
+            location.href = '/jyapp/front/dataExport/toCreateOrderPage?id=' + res.data._id + '&source=d&payway=&dataspec='
+          }
+        }
+      })
+    }
   }
 }
 var myCollection = new Vue(vNode)

+ 1 - 0
src/web/staticres/common-module/collection/js/notice-mobile.js

@@ -1,3 +1,4 @@
+// 公告类型
 var noticeComponentTemplate = `<div class="j-container">
 <div class="j-main unitTab">
   <van-tabs type="card" class="unitType">

+ 53 - 0
src/web/staticres/common-module/collection/js/phone-mobile.js

@@ -0,0 +1,53 @@
+var phoneComponentTemplate = `
+<div class="j-container">
+  <div class="j-main">
+    <van-cell center :title="item.text" v-for="(item,index) in data.option" @click="getBuyerPhone(item)">
+      <template #right-icon>
+        <span class="icon-duihao" v-if="item.type"></span>
+      </template>
+    </van-cell>
+  </div>
+</div>
+`
+
+var phoneComponent = {
+  name: 'phone-mobile',
+  template: phoneComponentTemplate,
+  props: ['data'],
+  data: function() {
+    return {
+    }
+  },
+  methods: {
+    getStates: function(data) {
+      let dataArr2 = []
+      let data2 = data.filter(function(value){
+        return value.type == true
+      })
+      data2.forEach((item)=>{
+        dataArr2.push(item.value)
+      })
+      return dataArr2.join(',')
+    },
+    getBuyerPhone: function(value) {
+      let params
+      this.data.option.forEach(function(data){
+        data.type = false
+      })
+      value.type = true
+      if (this.data.dataType == '1') {
+        params = {
+          name: 'buyerItem',
+          data: this.getStates(this.data.option)
+        }
+      } else if (this.data.dataType == '2'){
+        params = {
+          name: 'winnerItem',
+          data: this.getStates(this.data.option)
+        }
+      }
+      
+      this.$emit('confirm', params)
+    }
+  }
+}

+ 40 - 0
src/web/staticres/common-module/collection/js/root-mobile.js

@@ -0,0 +1,40 @@
+var rootComponentTemplate = `
+<div class="j-container">
+  <div class="useRoot j-main">
+    <p class="no-root">您暂无使用权限</p>
+    <p class="open_root">开通超级订阅,搜索招标采购项目更<br/>精准,300万+投标人都在用!</p>
+  </div>
+  <div class="j-footer">
+    <div class="j-button-group">
+      <button class="j-button-cancel" @click="resetAll">再想一想</button>
+      <button class="j-button-confirm" @click="onConfirm">去开通</button>
+    </div>
+  </div>
+</div>
+`
+
+var rootComponent = {
+  name: 'root-mobile',
+  template: rootComponentTemplate,
+  data: function() {
+    return {
+
+    }
+  },
+  methods: {
+    resetAll: function(){
+      let params = {
+        name: 'rootItem',
+        data: ''
+      }
+      this.$emit('cancel', params)
+    },
+    onConfirm: function(){
+      let params = {
+        name: 'rootItem',
+        data: ''
+      }
+      this.$emit('confirm', params)
+    },
+  }
+}

+ 61 - 0
src/web/staticres/common-module/collection/js/tags-mobile.js

@@ -0,0 +1,61 @@
+var tagsComponentTemplate = `
+<div class="j-container">
+  <div class="taglist j-main">
+    <div class="area-card-item" :class="{active:item.type==true}" v-for="(item, index) in taglist" :key="index" @click="selectTags(item)">{{item.lanme}}</div>
+  </div>
+  <div class="j-footer">
+    <div class="j-button-group">
+      <button class="j-button-cancel" @click="resetAll">重置</button>
+      <button class="j-button-confirm" @click="onConfirm">确认</button>
+    </div>
+  </div>
+</div>
+`
+
+var tagsComponent = {
+  name: 'tags-mobile',
+  props: ['taglist'],
+  template: tagsComponentTemplate,
+  data:function () {
+    return {
+    }
+  },
+  created () {
+    this.getTagsList() 
+  },
+  methods: {
+    // 个人标签方法
+    setState (data) {
+    },
+    getState (data) {
+      let dataArr2 = []
+      let data2 = data.filter(function(value){
+        return value.type == true
+      })
+      data2.forEach((item)=>{
+        dataArr2.push(item.lid)
+      })
+      return dataArr2.join(',')
+    },
+    // 个人标签重置
+    resetAll: function() {
+      let params = {
+        name: 'tagsItem',
+        data: ''
+      }
+      this.$emit('cancel', params)
+    },
+    // 个人标签确定
+    onConfirm: function(){
+      let params = {
+        name: 'tagsItem',
+        data: this.getState(this.taglist)
+      }
+      this.$emit('confirm', params)
+    },
+    // 个人标签点击
+    selectTags: function(data) {
+      data.type = !data.type
+    } 
+  }
+}

+ 255 - 0
src/web/staticres/common-module/ent-search/ent-search-template.css

@@ -0,0 +1,255 @@
+#v-ent-ent-search-group {
+  display: block !important;
+  background-color: rgba(0, 0, 0, 0.05);
+}
+
+#v-ent-ent-search-group .ent-search-item {
+  margin-top: 8px;
+  display: flex;
+  flex-direction: column;
+  padding: 0.32rem;
+  background-color: #fff;
+}
+
+#v-ent-ent-search-group .ent-search-list {
+  display: flex;
+  flex-direction: column;
+}
+
+.ent-info-head {
+  flex-shrink: 0;
+  position: relative;
+  width: 1.68rem;
+  height: 1.68rem;
+  background: rgba(0, 0, 0, 0.05);
+  border: 0.5px solid rgba(0, 0, 0, 0.05);
+  box-sizing: border-box;
+  border-radius: 0.08rem;
+}
+
+.ent-info-head .ent-info-status.status-1 {
+  background: #FB483D;
+}
+
+.ent-info-head .ent-info-status.status-2 {
+  background: #FF9F40;
+}
+
+.ent-info-head .ent-info-status.status-3 {
+  background: #9B9CA3;
+}
+
+.ent-info-head .ent-info-status {
+  position: absolute;
+  top: 0.08rem;
+  left: 0.08rem;
+  background: #2ABED1;
+  border-radius: 0.08rem;
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: 500;
+  font-size: 0.24rem;
+  line-height: 0.36rem;
+  color: #FFFFFF;
+  padding: 0 0.08rem;
+  display: inline-block;
+}
+
+.ent-info-top {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.ent-row {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.ent-search-list .j-icon {
+  flex-shrink: 0;
+  width: 0.4rem;
+  height: 0.4rem;
+}
+
+.ent-info-keep .ent-name {
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: 500;
+  font-size: 0.32rem;
+  line-height: 0.48rem;
+  color: #171826;
+  max-width: 4.3rem;
+}
+
+.ent-info-keep .fill-icon-box {
+  padding: 0.12rem;
+  padding-right: 0;
+}
+
+.ent-info-keep {
+  margin-left: 0.24rem;
+  flex: 1;
+}
+
+.ent-more span {
+  color: #2ABED1;
+  margin-top: 0.08rem;
+}
+
+.ent-more {
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: 500;
+  font-size: 0.26rem;
+  line-height: 0.36rem;
+  color: #5F5E64;
+  margin-top: 0.2rem;
+}
+
+.ent-info-bottom {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-end;
+  margin-top: 0.24rem;
+}
+
+.ent-line-box {
+  margin-top: 0.24rem;
+  width: 4.22rem;
+  height: 0.02rem;
+  background: rgba(0, 0, 0, 0.05);
+  border-radius: 0.08rem;
+}
+
+.ent-address > div {
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: normal;
+  font-size: 0.22rem;
+  line-height: 0.32rem;
+  color: #5F5E64;
+  max-width: 4.22rem;
+  margin-right: 0.32rem;
+}
+
+.up-button {
+  margin: 0 auto;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  width: 4.98rem;
+  height: 0.64rem;
+  border: 1px solid #2ABED1;
+  box-sizing: border-box;
+  border-radius: 0.08rem;
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: 500;
+  font-size: 0.26rem;
+  line-height: 0.48rem;
+  color: #2ABED1;
+}
+
+.ent-more-tip .j-icon {
+  margin-right: 0.08rem;
+}
+
+.ent-more-tip {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: center;
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: 500;
+  font-size: 0.28rem;
+  line-height: 0.4rem;
+  color: #9B9CA3;
+}
+
+#v-ent-ent-search-group .van-tabs__line {
+  opacity: 0 !important;
+}
+
+#v-ent-ent-search-group .an-icon-box {
+  position: relative;
+  width: 0.32rem;
+  height: 0.32rem;
+}
+
+#v-ent-ent-search-group .an-icon-box .j-icon {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 0.32rem;
+  height: 0.32rem;
+  transition: all 0.2s;
+  margin-left: 0.04rem;
+}
+
+#v-ent-ent-search-group .an-icon-box .icon-triangle-up {
+  opacity: 0;
+}
+
+#v-ent-ent-search-group .an-icon-box .icon-triangle-down {
+  opacity: 1;
+}
+
+#v-ent-ent-search-group .ent-search-tab-item {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: center;
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: 500;
+  font-size: 0.28rem;
+  line-height: 0.4rem;
+  color: #5F5E64;
+  padding: 0.24rem 0.38rem;
+}
+
+#v-ent-ent-search-group .van-tabs--line .van-tabs__wrap::after {
+  border: none;
+}
+
+#v-ent-ent-search-group .van-tab--active .ent-search-tab-item .icon-triangle-up {
+  opacity: 1;
+}
+
+#v-ent-ent-search-group .van-tab--active .ent-search-tab-item .icon-triangle-down {
+  opacity: 0;
+}
+
+#v-ent-ent-search-group .ent-search-list {
+  overflow-y: auto;
+  position: relative;
+}
+
+#v-ent-ent-search-group .ent-search-list.stop {
+  overflow: hidden;
+}
+
+#v-ent-ent-search-group .jy-diy-pop .van-overlay {
+  position: absolute;
+}
+
+#v-ent-ent-search-group .jy-diy-pop .van-popup {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  background-color: #fff;
+  z-index: 2;
+}
+
+.ent-stop-scroll {
+  overflow: hidden;
+}
+
+/*# sourceMappingURL=ent-search-template.css.map */

Файловите разлики са ограничени, защото са твърде много
+ 7 - 0
src/web/staticres/common-module/ent-search/ent-search-template.css.map


+ 104 - 0
src/web/staticres/common-module/ent-search/ent-search-template.js

@@ -0,0 +1,104 @@
+var vEntSearchComponent = new Vue({
+  el: '#v-ent-ent-search-group',
+  delimiters: ['@@', '@@'],
+  data: {
+    showEntSearch: false,
+    showPop: true,
+    activeTabIndex: 0,
+    entTabs: [
+      {
+        title: ''
+      },
+      {
+        title: '搜索范围'
+      },
+      {
+        title: '注册地'
+      },
+      {
+        title: '注册资本'
+      },
+      {
+        title: '企业类型'
+      },
+      {
+        title: '企业状态'
+      },
+      {
+        title: '中标区域'
+      },
+      {
+        title: '单位类型'
+      },
+      {
+        title: '联系方式'
+      }
+    ],
+    statusEnum: ['存续', '吊销', '停业', '撤销'],
+    list: [
+      {
+        name: '北京剑鱼信息技术有限公司北京剑鱼信息技术有限公司北京剑鱼信息技术有限公司北京剑鱼信息技术有限公司',
+        legal: '贾新',
+        money: '1000万元',
+        address: '北京市朝阳区北四环中路华严北里健翔3号地峻峰华亭嘉园C座2011号北京市朝阳区北四环中路华严北里健翔3号地峻峰华亭嘉园C座2011号北京市朝阳区北四环中路华严北里健翔3号地峻峰华亭嘉园C座2011号',
+        status: 0,
+        checked: false
+      },
+      {
+        name: '北京剑鱼信息技术有限公司',
+        legal: '贾新',
+        money: '1000万元',
+        address: '北京市朝阳区北四环中路华严北里健翔3号地峻峰华亭嘉园C座2011号',
+        status: 1,
+        checked: true
+      },
+      {
+        name: '北京剑鱼信息技术有限公司',
+        legal: '贾新',
+        money: '1000万元',
+        address: '北京市朝阳区北四环中路华严北里健翔3号地峻峰华亭嘉园C座2011号',
+        status: 2,
+        checked: false
+      },
+      {
+        name: '北京剑鱼信息技术有限公司',
+        legal: '贾新',
+        money: '1000万元',
+        address: '北京市朝阳区北四环中路华严北里健翔3号地峻峰华亭嘉园C座2011号',
+        status: 3,
+        checked: false
+      }
+    ]
+  },
+  methods: {
+    removeFixedScroll () {
+      $(".app-layout-content-b").scrollTop(0)
+      $(".app-layout-content-b").removeClass('ent-stop-scroll')
+      $(".ent-search-list").css({height: 'unset'})
+    },
+    fixedScroll () {
+      $(".app-layout-content-b").scrollTop(0)
+      $(".app-layout-content-b").addClass('ent-stop-scroll')
+      var isMaxHeight = $(".app-layout-content-b").height() - $(".tabs-nav").height() - $(".van-tabs.van-tabs--line").height()
+      $(".ent-search-list").css({height: isMaxHeight})
+    },
+    selectEnt (ent) {
+      console.log(ent)
+    },
+    onClickTabs (name, title) {
+      console.log(name, title)
+      this.togglePop(true)
+    },
+    togglePop (type) {
+      this.showPop = type
+    },
+    toggleEntShow (type) {
+      this.showEntSearch = type
+      if (type) {
+        this.fixedScroll()
+      } else {
+        this.removeFixedScroll()
+      }
+    }
+  }
+})

+ 231 - 0
src/web/staticres/common-module/ent-search/ent-search-template.scss

@@ -0,0 +1,231 @@
+#v-ent-ent-search-group {
+  display: block !important;
+  background-color: rgba(0, 0, 0, 0.05);
+}
+#v-ent-ent-search-group .ent-search-item {
+  margin-top: 8px;
+  display: flex;
+  flex-direction: column;
+  padding: 0.32rem;
+  background-color: #fff;
+}
+#v-ent-ent-search-group .ent-search-list {
+  display: flex;
+  flex-direction: column;
+}
+.ent-info-head {
+  flex-shrink: 0;
+  position: relative;
+  width: 1.68rem;
+  height: 1.68rem;
+  background: rgba(0, 0, 0, 0.05);
+  border: 0.5px solid rgba(0, 0, 0, 0.05);
+  box-sizing: border-box;
+  border-radius: 0.08rem;
+}
+.ent-info-head .ent-info-status.status-1 {
+  background: #FB483D;
+}
+.ent-info-head .ent-info-status.status-2 {
+  background: #FF9F40;
+}
+.ent-info-head .ent-info-status.status-3 {
+  background: #9B9CA3;
+}
+.ent-info-head .ent-info-status {
+  position: absolute;
+  top: 0.08rem;
+  left: 0.08rem;
+  background: #2ABED1;
+  border-radius: 0.08rem;
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: 500;
+  font-size: 0.24rem;
+  line-height: 0.36rem;
+  color: #FFFFFF;
+  padding: 0 0.08rem;
+  display: inline-block;
+}
+.ent-info-top {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-between;
+}
+.ent-row {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: space-between;
+}
+.ent-search-list .j-icon {
+  flex-shrink: 0;
+  width: 0.4rem;
+  height: 0.4rem;
+}
+.ent-info-keep .ent-name {
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: 500;
+  font-size: 0.32rem;
+  line-height: 0.48rem;
+  color: #171826;
+  max-width: 4.3rem;
+}
+.ent-info-keep .fill-icon-box {
+  padding: 0.12rem;
+  padding-right: 0;
+}
+.ent-info-keep {
+  margin-left: 0.24rem;
+  flex: 1;
+}
+.ent-more span {
+  color: #2ABED1;
+  margin-top: 0.08rem;
+}
+.ent-more {
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: 500;
+  font-size: 0.26rem;
+  line-height: 0.36rem;
+  color: #5F5E64;
+  margin-top: 0.2rem;
+}
+.ent-info-bottom {
+  display: flex;
+  flex-direction: row;
+  justify-content: flex-end;
+  margin-top: 0.24rem;
+}
+.ent-line-box {
+  margin-top: 0.24rem;
+  width: 4.22rem;
+  height: 0.02rem;
+  background: rgba(0, 0, 0, 0.05);
+  border-radius: 0.08rem;
+}
+.ent-address > div{
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: normal;
+  font-size: 0.22rem;
+  line-height: 0.32rem;
+  color: #5F5E64;
+  max-width: 4.22rem;
+  margin-right: 0.32rem;
+}
+.up-button {
+  margin: 0 auto;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  width: 4.98rem;
+  height: 0.64rem;
+  border: 1px solid #2ABED1;
+  box-sizing: border-box;
+  border-radius: 0.08rem;
+
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: 500;
+  font-size: 0.26rem;
+  line-height: 0.48rem;
+  color: #2ABED1;
+
+}
+.ent-more-tip .j-icon {
+  margin-right: 0.08rem;
+}
+.ent-more-tip {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  justify-content: center;
+  font-family: PingFang SC;
+  font-style: normal;
+  font-weight: 500;
+  font-size: 0.28rem;
+  line-height: 0.4rem;
+  color: #9B9CA3;
+}
+
+#v-ent-ent-search-group {
+  .van-tabs__line {
+    opacity: 0 !important;
+  }
+  .an-icon-box {
+    position: relative;
+    width: 0.32rem;
+    height: 0.32rem;
+    .j-icon {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 0.32rem;
+      height: 0.32rem;
+      transition: all 0.2s;
+      margin-left: 0.04rem;
+    }
+    .icon-triangle-up {
+      opacity: 0;
+    }
+    .icon-triangle-down {
+      opacity: 1;
+    }
+  }
+  .ent-search-tab-item {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    justify-content: center;
+    font-family: PingFang SC;
+    font-style: normal;
+    font-weight: 500;
+    font-size: 0.28rem;
+    line-height: 0.4rem;
+    color: #5F5E64;
+    padding: 0.24rem 0.38rem;
+  }
+  .van-tabs--line .van-tabs__wrap::after {
+    border: none;
+  }
+
+  .van-tab--active {
+    .ent-search-tab-item {
+      .icon-triangle-up {
+        opacity: 1;
+      }
+      .icon-triangle-down {
+        opacity: 0;
+      }
+    }
+  }
+  .ent-search-list {
+    overflow-y: auto;
+    position: relative;
+    &.stop {
+      overflow: hidden;
+    }
+  }
+  .jy-diy-pop {
+    .van-overlay {
+      position: absolute;
+    }
+    .van-popup {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 100%;
+      background-color: #fff;
+      z-index: 2;
+    }
+  }
+}
+
+.ent-stop-scroll {
+  overflow: hidden;
+}

+ 350 - 0
src/web/staticres/common-module/keep-tags/keep-tags-template.js

@@ -0,0 +1,350 @@
+var tempStyleComponent = `<style>
+    #v-keep-component[v-cloak]{
+        display: none;
+    }
+    #v-keep-component > .van-overlay {
+        z-index: 100000 !important;
+    }
+    #v-keep-component > .popup-group {
+        z-index: 100002 !important;
+    }
+    #v-keep-component .disabled-event {
+        pointer-events: none;
+    }
+    #v-keep-component .keep-component-group {
+        width: 6.54rem;
+        background-color: #fff;
+        padding: 16px;
+        box-sizing: border-box;
+        border-radius: 8px 8px 16px 16px;
+    }
+    #v-keep-component .popup-group {
+        background-color: transparent;
+    }
+    #v-keep-component .icon-padding-box {
+        padding: 0.12rem;
+        padding-right: 0;
+        box-sizing: border-box;
+    }
+    #v-keep-component .j-icon {
+        width: 0.4rem;
+        height: 0.4rem;
+    }
+    #v-keep-component .keep-component-title {
+        padding-bottom: 0.12rem;
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        justify-content: space-between;
+        font-family: PingFang SC;
+        font-style: normal;
+        font-weight: 500;
+        font-size: 0.4rem;
+        line-height: 0.6rem;
+        color: #171826;
+    }
+    #v-keep-component .keep-component-bottom {
+        padding: 0.16rem;
+    }
+    #v-keep-component .keep-component-bottom .van-button {
+        width: 100%;
+        background: #2ABED1;
+        border-radius: 0.16rem;
+        font-family: PingFang SC;
+        font-style: normal;
+        font-weight: 500;
+        font-size: 0.36rem;
+        line-height: 0.52rem;
+        color: #F7F9FA;
+        border-color: #2ABED1;
+        padding-top: 0.44rem;
+        padding-bottom: 0.44rem;
+    }
+    #v-keep-component .keep-component-bottom .van-button__loading {
+        font-size: 0.32rem;
+        width: 0.32rem;
+        height: 0.32rem;
+    }
+    #v-keep-component .kee-component-content {
+        padding-top: 0.24rem;
+    }
+    #v-keep-component .keep-component-tag-group {
+        display: flex;
+        flex-direction: row;
+        flex-wrap: wrap;
+        max-height: 30vh;
+        overflow-x: hidden;
+        overflow-y: scroll;
+    }
+
+    #v-keep-component .keep-component-tag i {
+        position: absolute;
+        width: 0.28rem;
+        height: 0.28rem;
+        bottom: 0;
+        right: 0;
+        opacity: 0;
+        transition: all 0.2s;
+    }
+    #v-keep-component .keep-component-tag {
+        position: relative;
+        max-width: 100%;
+        background: #F5F6F7;
+        border-radius: 0.08rem;
+        font-family: PingFang SC;
+        font-style: normal;
+        font-weight: 500;
+        font-size: 0.28rem;
+        line-height: 0.4rem;
+        color: #5F5E64;
+        padding: 0.1rem 0.2rem;
+        margin-bottom: 0.24rem;
+        margin-right: 0.24rem;
+        transition: color 0.2s;
+    }
+    #v-keep-component .keep-component-tag.checked i {
+        opacity: 1;
+    }
+    #v-keep-component .keep-component-tag.checked {
+        background: #E8FAFD;
+        color: #2ABED1;
+    }
+
+    #v-keep-component .keep-component-input-group .van-button {
+        margin-left: 0.3rem;
+        padding: 0.2rem;
+        padding-right: 0;
+        flex-shrink: 0;
+        background: transparent;
+        border-color: transparent;
+        color: inherit;
+    }
+    #v-keep-component .keep-component-input-group {
+        width: 100%;
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 0.44rem;
+        font-family: PingFang SC;
+        font-style: normal;
+        font-weight: 500;
+        font-size: 0.28rem;
+        line-height: 0.4rem;
+        color: #2ABED1;
+    }
+    #v-keep-component .keep-component-input-group  input:focus {
+        border-color: #2ABED1;
+    }
+    #v-keep-component .keep-component-input-group  input {
+        transition: width 0.2s;
+        flex: 1;
+        border: 1px solid rgba(0, 0, 0, 0.1);
+        box-sizing: border-box;
+        border-radius: 0.08rem;
+        font-family: PingFang SC;
+        font-style: normal;
+        font-weight: 500;
+        font-size: 0.3rem;
+        line-height: 0.44rem;
+        color: #5F5E64;
+        padding: 0.26rem 0.32rem;
+    }
+
+    #v-keep-component  .disabled-event .van-button{
+        opacity: 0.5;
+        cursor: not-allowed;
+    }
+
+</style>`
+
+Vue.component('keep-component', {
+  delimiters: ['@@', '@@'],
+  template: `
+<div id="v-keep-component" v-cloak>
+    <van-popup v-model="showKeepDialog" class="popup-group"  :close-on-click-overlay="!isLoading && !isAddLoading" :close-on-popstate="true">
+        <div class="keep-component-group" v-bind:class="{'disabled-event': isLoading || isAddLoading}">
+            <div class="keep-component-title">
+                <h3>选择标签</h3>
+                <div class="icon-padding-box" @click="togglePopStatus(false)">
+                    <i class="j-icon base-icon icon-delete-gray"></i>
+                </div>
+            </div>
+            <div class="kee-component-content">
+                <div class="keep-component-input-group">
+                    <input v-model.trim="tagInput" type="text" placeholder="请输入标签">
+                    <van-button v-show="isAddLoading || getOnlyStatus" @click="addTag" :loading="isAddLoading"  type="primary">添加并使用</van-button>
+                </div>
+                <div v-show="!isGetTagsLoading" class="keep-component-tag-group">
+                    <div class="keep-component-tag" @click="toggleTagStatus(item)" v-for="item in tags" :key="item.title" :class="{'checked': item.checked}">
+                        <div class="van-ellipsis">@@item.title@@</div>
+                        <i class="j-icon base-icon icon-corner-mark"></i>
+                    </div>
+                </div>
+                <van-loading  v-show="isGetTagsLoading" />
+            </div>
+            <div class="keep-component-bottom">
+                <van-button @click="submitSave" :loading="isLoading" loading-text="保存中..."  type="primary">确定</van-button>
+            </div>
+        </div>
+    </van-popup>
+</div>
+  `,
+  props: {
+    baseAjaxURL: {
+      type: String,
+      default: ''
+    },
+    bid: {
+      type: String,
+      required: true,
+      default: ''
+    },
+    // 是否首次打开时默认请求一次标签组
+    first: {
+      type: Boolean,
+      default: false
+    },
+    // 是否每次打开这遮罩时都请求标签组
+    every: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data: function () {
+    return {
+      showKeepDialog: false,
+      isLoading: false,
+      isAddLoading: false,
+      isGetTagsLoading: true,
+      tagInput: '',
+      tags: []
+    }
+  } ,
+  mounted () {
+    $('#v-keep-component').before(tempStyleComponent)
+    if (this.first) {
+      this.ajaxGetAllTags()
+    }
+  },
+  computed: {
+    getLids () {
+      return this.tags.filter(function (v) {
+        return v.checked
+      }).map(function (v) {
+        return v.lid
+      }).join(',')
+    },
+    getOnlyStatus () {
+      var _this = this
+      return this.tagInput !== '' && this.tags.filter(function (v) {
+        return v.title === _this.tagInput
+      }).length === 0
+    }
+  },
+  methods: {
+    checkAjaxFirst () {
+      if (!this.first) {
+        this.ajaxGetAllTags()
+      }
+    },
+    ajaxFn: function (url, data, callback, type) {
+      return $.ajax({
+        type: 'post',
+        url: this.baseAjaxURL + url,
+        contentType: type ? 'application/x-www-form-urlencoded' : "application/json;charset=utf-8",
+        data: type ? data : JSON.stringify(data),
+        dataType: "json",
+        success: typeof callback === 'function' ? callback.bind(this) : new Function()
+      })
+    },
+    ajaxGetAllTags () {
+      this.isGetTagsLoading = true
+      this.ajaxFn('/publicapply/bidcoll/getLabel', {} , function (r) {
+        this.isGetTagsLoading = false
+        if (r && r.error_msg === '' && r.data) {
+          this.tags = r.data.map(function (v) {
+            return {
+              lid: v.lid,
+              title: v.lanme,
+              checked: false
+            }
+          })
+        }
+      })
+    },
+    ajaxAddKeep (id, type) {
+      var t = this.$toast.loading({
+        duration: 0, // 持续展示 toast
+        forbidClick: true,
+        message: '提交中',
+      })
+      this.ajaxFn('/publicapply/bidcoll/action', { baction: type ? 'C' : 'R', binfo: [{ bid: id }] }, function (r) {
+        if (r && r.error_msg === '' && r.data) {
+          t.clear()
+          if (type) {
+            this.togglePopStatus(true)
+            this.$emit('on-change-keep', true)
+          } else {
+            this.$toast(r.error_msg || '已取消收藏')
+            this.$emit('on-change-keep', false)
+          }
+        } else {
+          t.clear()
+          this.$toast(r.error_msg)
+        }
+      })
+    },
+    togglePopStatus (type) {
+      this.showKeepDialog = type
+      if (type && this.every) {
+        this.ajaxGetAllTags()
+      }
+    },
+    toggleTagStatus (item) {
+      item.checked = !item.checked
+    },
+    submitSave () {
+      this.isLoading = true
+      this.ajaxFn('/publicapply/bidcoll/label', {
+        lids: this.getLids,
+        laction: 'S',
+        binfo: [
+          {
+            bid: this.bid
+          }
+        ]
+      }, function (r) {
+        if (r && r.error_msg === '' && r.data) {
+          this.isLoading = false
+          this.$toast(r.error_msg || '已收藏至“我的-标讯收藏”')
+          this.togglePopStatus(false)
+        } else {
+          this.$toast(r.error_msg)
+          this.isLoading = false
+        }
+      })
+    },
+    addTagInList (id) {
+      var tempInput = this.tagInput
+      this.tagInput = ''
+      this.tags.push({
+        lid: id,
+        title: tempInput,
+        checked: true
+      })
+      this.isAddLoading = false
+    },
+    addTag () {
+      this.isAddLoading = true
+      this.ajaxFn('/publicapply/bidcoll/addLabel', { name: this.tagInput }, function (r) {
+        if (r && r.error_msg === '' && r.data) {
+          this.addTagInList(r.data)
+        } else {
+          this.$toast(r.error_msg)
+          this.isAddLoading = false
+        }
+      }, true)
+    }
+  }
+})

+ 56 - 61
src/web/staticres/common-module/vipsubscribe/js/vip-coupon-template.js

@@ -1,67 +1,16 @@
-Vue.component('vip-coupon-template', {
+var vipCouponTem = {
   delimiters: ['@@', '@@'],
-  props: {
-    
-  },
+  props: {},
   data: function () {
     return {
-      couponList: [
-        {
-          "lotteryId": "4159",
-          "lotteryAttribute": "满减卷",
-          "lotteryBeginDate": "2021-04-08",
-          "lotteryEndDate": "2021-05-10",
-          "products": [],
-          "available": true,
-          "full": 100,
-          "reduce": 10,
-          "instructions": "使用说明",
-          "userLotteryId": "465c"
-        },
-        {
-          "lotteryId": "4159",
-          "lotteryAttribute": "折扣卷",
-          "lotteryBeginDate": "2021-04-08",
-          "lotteryEndDate": "2021-05-10",
-          "products": [],
-          "available": true,
-          "full": 100,
-          "reduce": 10,
-          "instructions": "使用说明",
-          "userLotteryId": "465c"
-        },
-        {
-          "lotteryId": "4159",
-          "lotteryAttribute": "折扣卷",
-          "lotteryBeginDate": "2021-04-08",
-          "lotteryEndDate": "2021-05-10",
-          "products": [],
-          "available": true,
-          "full": 100,
-          "reduce": 10,
-          "instructions": "使用说明",
-          "userLotteryId": "465c"
-        },
-        {
-          "lotteryId": "4159",
-          "lotteryAttribute": "折扣卷",
-          "lotteryBeginDate": "2021-04-08",
-          "lotteryEndDate": "2021-05-10",
-          "products": [],
-          "available": true,
-          "full": 100,
-          "reduce": 10,
-          "instructions": "使用说明",
-          "userLotteryId": "465c"
-        }
-      ]
+      couponList: []
     }
   },
   template: `
   <div class="vip-coupon-template" id="vip-coupon-template">
     <div class="vip-coupon-list" v-for="(item,index) in couponList" :key="item.lotteryId">
-      <div :class="['list-left', item.lotteryAttribute == '满减卷' ? 'red-bg': '', item.lotteryAttribute == '折扣卷' ? 'yellow-bg' : '']">
-        <div :class="['c-name', item.lotteryAttribute == '满减卷' ? 'red-bg': '', item.lotteryAttribute == '折扣卷' ? 'yellow-bg' : '']">@@item.lotteryAttribute@@</div>
+      <div :class="['list-left', item.lotteryAttribute == '满减券' ? 'red-bg': '', item.lotteryAttribute == '折扣券' ? 'yellow-bg' : '']">
+        <div :class="['c-name', item.lotteryAttribute == '满减券' ? 'red-bg': '', item.lotteryAttribute == '折扣券' ? 'yellow-bg' : '']">@@item.lotteryAttribute@@</div>
         <div class="c-result">@@item.reduce@@</div>
         <div class="c-sub">满@@item.full@@元可用</div>
       </div>
@@ -71,9 +20,8 @@ Vue.component('vip-coupon-template', {
           <p class="valid-value">@@item.lotteryBeginDate@@ - @@item.lotteryEndDate@@</p>
         </div>
         <div class="handle">
-          <button v-if="1 !== 2" :class="['handle-use', item.lotteryAttribute == '满减卷' ? 'red-color': 'yellow-color']" @click="useFn(item)">使用</button>
-          <button v-else-if="1 == 3" class="handle-disabled">暂不可用</button>
-          <button v-else class="handle-selected">已选择</button>
+          <button v-if="item.available" :class="['handle-use', item.active ? 'handle-selected' : '', item.lotteryAttribute == '满减券' ? 'red-color': 'yellow-color']" @click="useFn(item)" v-html="item.active ? '已选择': '使用'"></button>
+          <button v-else-if="!item.available" class="handle-disabled">暂不可用</button>
         </div>
       </div> 
     </div>
@@ -82,7 +30,54 @@ Vue.component('vip-coupon-template', {
   mounted() {},
   methods: {
     useFn: function(item) {
-      console.log(item)
+      this.couponList.forEach(function(item) {
+        item.active = false
+      })
+      item.active = true
+      sessionStorage.setItem('vip-cur-select-coupon', JSON.stringify(item))
+      this.$emit('update-coupon', item)
+    },
+    getCoupon: function(price) {
+      var _this = this
+      $.ajax({
+        type:'POST',
+        url:'/jyCoupon/showCoupons',
+        data:{
+          pId: 101,
+          price: parseInt(price*10000/100) ,
+          JYR: 1
+        },
+        success:function(res) {
+          if (res.data) {
+            res.data.forEach(function(item) {
+              if (item.lotteryBeginDate) {
+                item.lotteryBeginDate = item.lotteryBeginDate.replace(/-/g, '.')
+              }
+              if (item.lotteryEndDate) {
+                item.lotteryEndDate = item.lotteryEndDate.replace(/-/g, '.')
+              }
+              // 如当前选择过优惠券,将其状态回显至已选择
+              var curCoupon = JSON.parse(sessionStorage.getItem('vip-cur-select-coupon'))
+              if (curCoupon) {
+                if (curCoupon.userLotteryId && curCoupon.userLotteryId == item.userLotteryId) {
+                  item.active = true
+                } else {
+                  item.active = false
+                }
+              } else {
+                item.active = false
+              }
+            })
+            _this.couponList = res.data
+          }
+        },
+        error:function(err) {
+          console.log(err)
+        }
+      })
     }
   }
-})
+}
+if (typeof Vue !== 'undefined') {
+  Vue.component('goods-coupon-template', vipCouponTem)
+}

+ 66 - 24
src/web/staticres/common-module/vipsubscribe/js/vip-size-template.js

@@ -1,28 +1,20 @@
-Vue.component('vip-size-template', {
+var goodsSizeTem = {
   delimiters: ['@@', '@@'],
   props: {
-    
+    config: {
+      type: Object,
+      default: function() {
+        return {
+          areaCount: Number,
+          priceInfo: Object
+        }
+      }
+    }
   },
   data: function () {
     return {
       goodsActive: 0,
-      goodsSize: [
-        {
-          period: '1月',
-          price: 38,
-          summary: '每天仅需1.27元'
-        },
-        {
-          period: '1季',
-          price: 99,
-          summary: '每天仅需1.09元'
-        },
-        {
-          period: '1年',
-          price: 380,
-          summary: '每天仅需1.04元'
-        }
-      ],
+      goodsInfo: {},
       isShowAuto: false, // 是否显示自动续费,本次版本不显示
       autoChecked: false, // 自动续费是否勾选
     }
@@ -30,13 +22,13 @@ Vue.component('vip-size-template', {
   template: `
   <div class="goods-size-template">
     <div class="goods">
-      <div :class="['goods-list', goodsActive == index ? 'goods-active' : '']" v-for="(item,index) in goodsSize" :key="item.price" @click="chooseGoods(item, index)">
+      <div :class="['goods-list', goodsActive == index ? 'goods-active' : '']" v-for="(item,index) in priceList" :key="item.period" @click="chooseGoods(item, index)">
         <div class="goods-period">@@item.period@@</div>
         <div class="goods-price">
           <span>¥</span>
-          <strong>@@item.price@@</strong>
+          <strong>@@item.price/100@@</strong>
         </div>
-        <div class="goods-summary">@@item.summary@@</div>
+        <div class="goods-summary">每天仅需@@(item.price/item.days/100).toFixed(2)@@元</div>
       </div>
     </div>
     <div class="auto-renew" v-if="isShowAuto">
@@ -45,11 +37,58 @@ Vue.component('vip-size-template', {
     </div>
   </div>
   `,
-  mounted() {},
+  mounted() {
+    
+  },
+  computed: {
+    priceList: function() {
+      var list = []
+      var count = this.config.areaCount
+      var obj = {
+        '1月': this.config.priceInfo.month,
+        '1季': this.config.priceInfo.quarter,
+        '1年': this.config.priceInfo.year
+      }
+      for (var key in obj) {
+        var days = 30
+        if (obj[key]) {
+          switch (key) {
+            case '1月':
+              days = 30
+              break;
+            case '1季':
+              days = 90
+              break;
+            case '1年':
+              days = 365
+              break;
+          }
+          if (count < 16) {
+            list.push({
+              period: key,
+              price: obj[key].oneProvince_allBuyerClass * count,
+              days: days
+            })
+          } else {
+            list.push({
+              period: key,
+              price: obj[key].allProvince_allBuyerClass,
+              days: days
+            })
+          }
+        }
+      }
+      console.log(list)
+      return list
+    }
+  },
   methods: {
     // 选择商品规格
     chooseGoods: function(item, index) {
       this.goodsActive = index
+      sessionStorage.removeItem('vip-cur-select-coupon')
+      item.index = index
+      sessionStorage.setItem('vip-cur-select-size', JSON.stringify(item))
       this.$emit('select-vip-size', item)
     },
     // 自动续费
@@ -58,4 +97,7 @@ Vue.component('vip-size-template', {
       this.$emit('select-auto-renew', this.autoChecked)
     }
   }
-})
+}
+if (typeof Vue !== 'undefined') {
+  Vue.component('goods-size-template', goodsSizeTem)
+}

+ 0 - 39
src/web/staticres/collection/css/index-pc.css → src/web/staticres/frontRouter/pc/collection/css/index-pc.css

@@ -243,42 +243,3 @@
 .tag-drawer .el-tag {
     margin: 6px;
 }
-
-.j-t-button {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    padding: 7px 50px;
-    font-size: 16px;
-    color: #686868;
-    border: 1px solid #e0e0e0;
-    border-radius: 7px;
-    background-color: #fff;
-}
-.j-t-button.confirm {
-    color: #2cb7ca;
-    border-color: #2cb7ca;
-}
-.j-t-button.confirm:hover {
-    color: #fff;
-    background-color: #2cb7ca;
-}
-.j-t-button.cancel {
-    margin-left: 40px;
-}
-.j-el-confirm .el-dialog__header,
-.j-el-confirm .el-dialog__body,
-.j-el-confirm .el-dialog__footer {
-    text-align: center;
-}
-.j-el-confirm .el-dialog__header {
-    padding-top: 30px;
-}
-.j-el-confirm .el-dialog__footer {
-    padding-bottom: 40px;
-}
-.dialog-footer {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-}

+ 2 - 0
src/web/staticres/collection/js/index-pc.js → src/web/staticres/frontRouter/pc/collection/js/index-pc.js

@@ -11,6 +11,7 @@ var vm = new Vue({
     data: function () {
         return {
             power: false,
+            powerLoaded: false,
             toast: {
                 show: false,
                 content: '暂无数据'
@@ -82,6 +83,7 @@ var vm = new Vue({
                     }
                 }.bind(this),
                 complete: function () {
+                    this.powerLoaded = true
                     callback && callback()
                 }.bind(this)
             })

+ 5 - 0
src/web/staticres/js/selector/price-pc.js

@@ -38,6 +38,11 @@ var priceComponent = {
             this.price.max = max
         },
         getState: function () {
+            if (this.price.min > this.price.max) {
+                var max = this.price.max
+                this.price.max = this.price.min
+                this.price.min = max
+            }
             return this.price
         },
         confirm: function () {

+ 6 - 6
src/web/templates/frontRouter/pc/collection/sess/index.html

@@ -18,7 +18,7 @@
         <link href="//cdn.jsdelivr.net/npm/element-ui@2.13.2/lib/theme-chalk/index.css" rel="stylesheet" />
         <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/css/ele-reset.css?v={{Msg "seo" "version"}}'>
         <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/css/selector/selector.css?v={{Msg "seo" "version"}}'>
-        <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/collection/css/index-pc.css?v={{Msg "seo" "version"}}'>
+        <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/frontRouter/pc/collection/css/index-pc.css?v={{Msg "seo" "version"}}'>
         <style>
             .collection-container {
                 line-height: 1;
@@ -34,7 +34,7 @@
         <div class="collection-header w">
             <h3 class="tab-title">标讯收藏</h3>
         </div>
-        <div class="search-content w" v-cloak>
+        <div class="search-content w" v-cloak v-show="powerLoaded">
             <div class="selector-card-container search-filters" v-if="power">
                 <div class="selector-card">
                     <div class="selector-card-header">个人标签:</div>
@@ -117,7 +117,7 @@
                 </div>
             </div>
             <div class="collect-list-container">
-                <div class="collect-list-header">
+                <div class="collect-list-header" v-show="listState.list.length !== 0 && listState.loaded">
                     <div class="c-tab-container flex">
                         <div class="left flex">
                             <el-checkbox v-model="currentPageAllChecked" @change="allCheckboxChange"></el-checkbox>
@@ -166,7 +166,7 @@
                     </div>
                     <div class="list collect-table-list" v-loading="listState.loading" v-show="listState.listType === 'table'" style="display: none;">
                         <table class="table">
-                            <thead class="thead">
+                            <thead class="thead" v-show="listState.list.length !== 0">
                                 <tr>
                                     <td width="48">序号</td>
                                     <td width="315" class="deep-border">项目名称</td>
@@ -241,7 +241,7 @@
                 width="30%">
                 <span>确定删除该标签?</span>
                 <span slot="footer" class="dialog-footer">
-                    <button class="j-t-button confirm" @click="delThisTagConfirm">确 定</el-button>
+                    <button class="j-t-button confirm active" @click="delThisTagConfirm">确 定</el-button>
                     <button class="j-t-button cancel" @click="tagDrawer.dialogShow=false">取 消</button>
                 </span>
             </el-dialog>
@@ -264,7 +264,7 @@
     <script src='{{Msg "seo" "cdn"}}/js/selector/select-level2-pc.js?v={{Msg "seo" "version"}}'></script>
     <script src='{{Msg "seo" "cdn"}}/js/selector/article-item-pc.js?v={{Msg "seo" "version"}}'></script>
     <script src='{{Msg "seo" "cdn"}}/js/selector/no-data-pc.js?v={{Msg "seo" "version"}}'></script>
-    <script src='{{Msg "seo" "cdn"}}/collection/js/index-pc.js?v={{Msg "seo" "version"}}'></script>
+    <script src='{{Msg "seo" "cdn"}}/frontRouter/pc/collection/js/index-pc.js?v={{Msg "seo" "version"}}'></script>
 </body>
 
 </html>

+ 114 - 0
src/web/templates/frontRouter/wx/collection/sess/index.html

@@ -0,0 +1,114 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport"
+        content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="format-detection" content="telephone=yes"/>
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>标讯收藏</title>
+    <script src="/big-member/js/rem.js"></script>
+    <script src="/big-member/js/utils.js"></script>
+    <!--S-当前页面的css资源-->
+    <link rel="stylesheet" href=//cdn.jsdelivr.net/npm/reset-css@4.0.1/reset.min.css />
+    <link rel="stylesheet" href=//cdn.jsdelivr.net/npm/vant@2.11.1/lib/index.css />
+    <link rel="stylesheet" href=//cdn.jsdelivr.net/npm/vant@2.11.1/lib/icon/local.css />
+    <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/big-member/weixin/css/public.css?v={{Msg "seo" "version"}}'>
+    <link rel="stylesheet" href='{{Msg "seo" "cdn"}}/common-module/collection/css/index.css?v={{Msg "seo" "version"}}' />
+</head>
+<style>
+  .list-mian{
+    height: 100%;
+    overflow: hidden;
+  }
+  .list-mian .van-list{
+    height: 100%;
+    overflow: auto;
+  }
+</style>
+<body>
+  <div class="j-container">
+    {{include "/big-member/header.html"}}
+    <div class="j-main collection" id="myCollection" v-cloak ref="main">
+      <div class="j-container">
+        <div class="j-main">
+          <div class="search-container van-fade-an" ref="searchContainer">
+            <div class="listaction">
+              <div class="action_editor" @click="screenBtn">筛选</div>
+              <div class="data_report">
+                <div class="collec_datareport" @click="dataReport">
+                  <span class="data_download"></span>
+                  <span class="data text">数据导出</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <van-dropdown-menu v-show="limitshow" :get-container="getContainer" :close-on-click-outside="false">
+            <van-dropdown-item  title="个人标签"  ref="tagItem">
+              <tags-component @confirm="confirm" @cancel="cancel" :taglist="tagList"></tags-component>
+            </van-dropdown-item>
+            <van-dropdown-item title="收藏日期" ref="dateItem">
+              <date-component @confirm="confirm" @cancel="cancel"></date-component>
+            </van-dropdown-item>
+            <van-dropdown-item title="采购单位类型" ref="cateItem">
+              <cate-component @confirm="confirm" @cancel="cancel"></cate-component>
+            </van-dropdown-item>
+            <van-dropdown-item ref="buyerItem" v-model="limitlist.buyerPhone" title="采购单位联系方式">
+              <phone-component :data="params.buyerData" @confirm="confirm"></phone-component>
+            </van-dropdown-item>
+            <van-dropdown-item ref="winnerItem" v-model="limitlist.winnerPhone"  title="中标企业联系方式">
+              <phone-component :data="params.winnerData" @confirm="confirm"></phone-component>
+            </van-dropdown-item>
+          </van-dropdown-menu>
+          <div class="list-mian">
+            <van-list
+              v-model="listState.loading"
+              :finished="listState.finished"
+              finished-text="没有更多了"
+              @load="getList"
+            >
+              <div class="collec_li" v-for="(item, index) in listState.list" :key="index" @click="linkRouter(item._id)">
+                <div class="collec_head">
+                  <div class="collec_title ellipsis-2">
+                    ${item.title}
+                  </div>
+                  <div class="collec_star" @click="collecClick(item._id)">
+                    <span class="shoucang" v-if="condition"></span>
+                    <!-- <span class="weishoucang" v-if="!condition"></span> -->
+                  </div>
+                </div>
+                <div class="collec_action">
+                  <ul class="collec_tags">
+                    <li class="tag_active" v-if="item.area&&item.area!==''">${item.area}</li>
+                    <li class="tag_active" v-if="item.buyerclass&&item.buyerclass!==''">${item.buyerclass}</li>
+                    <li class="tag_active" v-if="item.type&&item.type!==''">${item.type}</li>
+                    <li class="tag_active" v-if="item.bidamount&&item.bidamount!==''">${item.bidamount}</li>
+                  </ul>
+                  <div class="collec_time">${item.publishtime}</div>
+                </div>
+              </div>
+            </van-list>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+  <!--S-当前页面的资源-->
+  <script src=//cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js></script>
+  <script src=//cdn.jsdelivr.net/npm/vant@2.11.1/lib/vant.min.js></script>
+  <script src=//cdn.jsdelivr.net/npm/zepto@1.2.0/dist/zepto.min.js></script>
+  <!--E-当前页面的资源-->
+  {{include "/big-member/commonjs.html"}}
+  <script src='{{Msg "seo" "cdn"}}/common-module/collection/js/tags-mobile.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Msg "seo" "cdn"}}/common-module/collection/js/date-mobile.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Msg "seo" "cdn"}}/common-module/collection/js/cate-mobile.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Msg "seo" "cdn"}}/common-module/collection/js/phone-mobile.js?v={{Msg "seo" "version"}}'></script>
+  <script src='{{Msg "seo" "cdn"}}/common-module/collection/js/index-wx.js?v={{Msg "seo" "version"}}'></script>
+  {{include "/common/baiducc.html"}}
+</body>
+
+</html>

Някои файлове не бяха показани, защото твърде много файлове са промени