Browse Source

Merge branch 'master' of http://192.168.3.207:10080/jianyu/jy-docs

xgwangman 4 năm trước cách đây
mục cha
commit
568efdefa7
42 tập tin đã thay đổi với 1095 bổ sung89 xóa
  1. 22 1
      jydocs-back/config.json
  2. 12 1
      jydocs-back/config/config.go
  3. 6 1
      jydocs-back/go.mod
  4. 2 0
      jydocs-back/main.go
  5. 18 0
      jydocs-back/public/util.go
  6. 77 0
      jydocs-back/rpc/pointsRpc.go
  7. 138 0
      jydocs-back/rpc/stdDocRpc.go
  8. 129 0
      jydocs-back/rpc/userDocRpc.go
  9. 4 2
      jydocs-back/servers/a_init.go
  10. 49 0
      jydocs-back/servers/ad.go
  11. 135 0
      jydocs-back/servers/stdDoc.go
  12. 136 0
      jydocs-back/servers/userDoc.go
  13. 1 1
      jydocs-mobile/.env.development
  14. 1 0
      jydocs-mobile/.eslintrc.js
  15. 53 0
      jydocs-mobile/src/api/ajax.ts
  16. 8 51
      jydocs-mobile/src/api/index.ts
  17. 3 3
      jydocs-mobile/src/api/main.ts
  18. 32 0
      jydocs-mobile/src/api/mock.ts
  19. 19 0
      jydocs-mobile/src/api/mock/activityList.json
  20. 18 0
      jydocs-mobile/src/api/mock/detail.json
  21. 10 0
      jydocs-mobile/src/api/mock/getAdvertisement.json
  22. 29 0
      jydocs-mobile/src/api/mock/search.json
  23. 5 0
      jydocs-mobile/src/api/mock/test$ajax.json
  24. 26 0
      jydocs-mobile/src/api/mock/topList.json
  25. 5 0
      jydocs-mobile/src/api/mock/user$buy.json
  26. 5 0
      jydocs-mobile/src/api/mock/user$collect$add.json
  27. 5 0
      jydocs-mobile/src/api/mock/user$collect$remove.json
  28. 22 0
      jydocs-mobile/src/api/mock/user$list.json
  29. 8 5
      jydocs-mobile/src/views/Home.vue
  30. 1 1
      jydocs-mobile/src/views/Search.vue
  31. 1 1
      jydocs-pc/src/api/mock.js
  32. 19 0
      jydocs-pc/src/api/mock/activityList.json
  33. 18 0
      jydocs-pc/src/api/mock/detail.json
  34. 10 0
      jydocs-pc/src/api/mock/getAdvertisement.json
  35. 3 20
      jydocs-pc/src/api/mock/test$ajax.json
  36. 26 0
      jydocs-pc/src/api/mock/topList.json
  37. 5 0
      jydocs-pc/src/api/mock/user$buy.json
  38. 5 0
      jydocs-pc/src/api/mock/user$collect$add.json
  39. 5 0
      jydocs-pc/src/api/mock/user$collect$remove.json
  40. 22 0
      jydocs-pc/src/api/mock/user$list.json
  41. 1 1
      jydocs-pc/src/components/doc-item-card/Price.vue
  42. 1 1
      jydocs-pc/src/views/Content.vue

+ 22 - 1
jydocs-back/config.json

@@ -1,3 +1,24 @@
 {
-  "webport": "8087"
+  "webport": "821",
+  "appid": "10000",
+  "rpcServers": {
+    "stdDoc": {
+      "key": "jydocs.stdlib.rpc",
+      "address": [
+        "127.0.0.1:2379"
+      ]
+    },
+    "userDoc": {
+      "key": "jydocs.userlib.rpc",
+      "address": [
+        "127.0.0.1:2379"
+      ]
+    },
+    "points": {
+      "key": "integral.rpc",
+      "address": [
+        "127.0.0.1:2379"
+      ]
+    }
+  }
 }

+ 12 - 1
jydocs-back/config/config.go

@@ -3,7 +3,18 @@ package config
 import "app.yhyue.com/moapp/jybase/common"
 
 type appConfig struct {
-	WebPort string `json:"webport"` //程序端口
+	WebPort    string `json:"webport"` //程序端口
+	AppId      string `json:"appid"`   //程序标识
+	RpcServers struct {
+		StdDoc  rpcConfig `json:"stdDoc"`  //标准库rpc接口
+		UserDoc rpcConfig `json:"userDoc"` //用户收藏rpc接口
+		Points  rpcConfig `json:"points"`  //剑鱼积分rpc接口
+	} `json:"rpcServers"` //rpc服务配置
+}
+
+type rpcConfig struct {
+	Key     string   `json:"key"`
+	Address []string `json:"address"` //集群地址
 }
 
 var JyDocsAppConfig appConfig

+ 6 - 1
jydocs-back/go.mod

@@ -2,4 +2,9 @@ module jy-docs
 
 go 1.13
 
-require app.yhyue.com/moapp/jybase v0.0.0-20210315074215-6cef54484b4b
+require (
+	app.yhyue.com/moapp/jyPoints v0.0.0-20210319020458-484a38074edd
+	app.yhyue.com/moapp/jy_docs v0.0.0-20210319020033-9866b358a9dd
+	app.yhyue.com/moapp/jybase v0.0.0-20210318061912-f5594310c8fe
+	github.com/tal-tech/go-zero v1.1.5
+)

+ 2 - 0
jydocs-back/main.go

@@ -3,6 +3,8 @@ package main
 import (
 	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
 	"jy-docs/config"
+	_ "jy-docs/filter"
+	_ "jy-docs/servers"
 	"net/http"
 )
 

+ 18 - 0
jydocs-back/public/util.go

@@ -0,0 +1,18 @@
+package public
+
+import "fmt"
+
+func PageNumParse(pageNum, pageSize, maxNum int64) (num, size int64, err error) {
+	if pageNum < 1 {
+		pageNum = 1
+	}
+	if pageSize < 1 {
+		pageSize = 1
+	}
+	if maxNum > 0 && pageNum*pageSize > maxNum {
+		err = fmt.Errorf("超出检索限制")
+	}
+	num = pageNum
+	size = pageSize
+	return
+}

+ 77 - 0
jydocs-back/rpc/pointsRpc.go

@@ -0,0 +1,77 @@
+package rpc
+
+import (
+	"app.yhyue.com/moapp/jyPoints/rpc/integralclient"
+	"context"
+	"fmt"
+	"github.com/tal-tech/go-zero/core/discov"
+	"github.com/tal-tech/go-zero/zrpc"
+	"jy-docs/config"
+	"log"
+)
+
+//剑鱼积分RPC接口
+var jyIntegralLib integralclient.Integral
+
+func init() {
+	jyIntegralLib = integralclient.NewIntegral(zrpc.MustNewClient(zrpc.RpcClientConf{
+		Etcd: discov.EtcdConf{
+			Key:   config.JyDocsAppConfig.RpcServers.Points.Key,
+			Hosts: config.JyDocsAppConfig.RpcServers.Points.Address,
+		},
+	}))
+}
+
+/*
+积分查询
+param
+	userId  用户id
+return
+	int64 剩余积分
+	error 异常
+*/
+func GetUserPointValue(userId string) (int64, error) {
+	resp, err := jyIntegralLib.IntegralBalanceCheck(context.Background(), &integralclient.Req{
+		AppId:  config.JyDocsAppConfig.AppId,
+		UserId: userId,
+	})
+	if err != nil {
+		log.Printf("%s getUserPointValue call error %v\n", userId, err)
+		return -1, err
+	}
+	if resp.Code != 1 {
+		log.Printf("%s getUserPointValue fail Message %v\n", userId, resp.Message)
+		return -1, fmt.Errorf("查询积分异常")
+	}
+	return resp.Data, nil
+}
+
+/*
+积分消费
+param
+	userId  用户id
+	docId	文库id
+	abstract 文库简介(积分流水列表展示)
+return
+	error 异常
+*/
+func SpendUserPoint(userId, docId, abstract string, value int64) error {
+	resp, err := jyIntegralLib.IntegralConsume(context.Background(), &integralclient.Req{
+		AppId:      config.JyDocsAppConfig.AppId,
+		UserId:     userId,
+		PointType:  2003, //文库下载编号
+		Point:      value,
+		SourceId:   docId,
+		SourceType: "积分消耗",
+		Abstract:   abstract,
+	})
+	if err != nil {
+		log.Printf("%s SpendUserPoint call error %v\n", userId, err)
+		return err
+	}
+	if resp.Code != 1 {
+		log.Printf("%s SpendUserPoint fail Message %v\n", userId, resp.Message)
+		return fmt.Errorf("积分扣除异常")
+	}
+	return nil
+}

+ 138 - 0
jydocs-back/rpc/stdDocRpc.go

@@ -0,0 +1,138 @@
+package rpc
+
+import (
+	"app.yhyue.com/moapp/jy_docs/rpc/stdlib/stdlib"
+	"app.yhyue.com/moapp/jy_docs/rpc/stdlib/stdlibclient"
+	"context"
+	"fmt"
+	"github.com/tal-tech/go-zero/core/discov"
+	"github.com/tal-tech/go-zero/zrpc"
+	"jy-docs/config"
+	"log"
+)
+
+//标准库RPC接口
+var jyStdDocStdlib stdlibclient.Stdlib
+
+func init() {
+	jyStdDocStdlib = stdlibclient.NewStdlib(zrpc.MustNewClient(zrpc.RpcClientConf{
+		Etcd: discov.EtcdConf{
+			Key:   config.JyDocsAppConfig.RpcServers.StdDoc.Key,
+			Hosts: config.JyDocsAppConfig.RpcServers.StdDoc.Address,
+		},
+	}))
+}
+
+/*
+检索文库
+param
+	userId  用户id
+	keyWord 关键词
+	tag	分类
+	pageNum 页码
+	pageSize 每页数量
+	tSort 时间排序
+	dSort 下载排序
+	vSort 浏览量排序
+*/
+func GetDocQuery(userId, keyWord, tag string, pageNum, pageSize int64, sort string) (interface{}, int64, error) {
+	param := &stdlib.DocQueryRequest{
+		AppId:    config.JyDocsAppConfig.AppId,
+		KeyWord:  keyWord,
+		PageSize: pageSize,
+		PageNum:  pageNum,
+	}
+	if tag != "" {
+		param.DocTag = []string{tag}
+	}
+	sortArr := []string{}
+	switch sort { //倒序字段前加-,uploadDate:上架时间 viewTimes:浏览量 downTimes:下载量
+	case "dSort": //下载量倒叙
+		sortArr = append(sortArr, "-downTimes")
+	case "vSort": //浏览量倒叙
+		sortArr = append(sortArr, "-viewTimes")
+	default: // "tSort"上传时间倒叙
+		sortArr = append(sortArr, "-uploadDate")
+	}
+	param.Sort = sortArr
+
+	resp, err := jyStdDocStdlib.DocQuery(context.Background(), param)
+	if err != nil {
+		log.Printf("%s SetUserCollect call error %v\n", userId, err)
+		return nil, -1, err
+	}
+	if resp.Code != 1 {
+		log.Printf("%s SetUserCollect fail Message %v\n", userId, resp.Msg)
+		return nil, -1, fmt.Errorf("查询失败")
+	}
+	return resp.Docs, resp.Total, nil
+}
+
+/*
+获取活动列表
+param
+	userId  用户id
+	code	活动编号
+	pageNum 页码
+	pageSize 每页数量
+return
+	文库列表、异常
+*/
+func GeActivityList(userId string, code, pageNum, pageSize int64) (interface{}, error) {
+	resp, err := jyStdDocStdlib.DocActivity(context.Background(), &stdlib.DocActivityReq{
+		AppId:      config.JyDocsAppConfig.AppId,
+		ActivityId: code,
+		PageNum:    pageNum,
+		PageSize:   pageSize,
+	})
+	log.Println(config.JyDocsAppConfig.AppId, int32(code), int32(pageNum), int32(pageSize))
+	if err != nil {
+		log.Printf("%s GeActivityList call error %v\n", userId, err)
+		return nil, err
+	}
+	if resp.Code != 1 {
+		log.Printf("%s GeActivityList fail Message %v\n", userId, resp.Msg)
+		return nil, fmt.Errorf("获取列表失败")
+	}
+	return resp.Docs, nil
+}
+
+/*
+获取文库详情
+param
+	userId  用户id
+	docId	文库id
+return
+	DocInfo 文库详情
+	error 异常
+*/
+func GetDocDetail(userId, docId string) (*stdlib.DocInfo, bool, error) {
+	resp, err := jyStdDocStdlib.DocGetCheck(context.Background(), &stdlib.DocGetCheckReq{
+		AppId:  config.JyDocsAppConfig.AppId,
+		UserId: userId,
+		DocId:  docId,
+	})
+	log.Println(config.JyDocsAppConfig.AppId, userId, docId)
+	if err != nil {
+		log.Printf("%s GetDocDetail call error %v\n", userId, err)
+		return nil, false, err
+	}
+	if resp.Code != 1 {
+		log.Printf("%s GetDocDetail fail Message %v\n", userId, resp.Msg)
+		return nil, false, fmt.Errorf("获取内容失败")
+	}
+	return resp.DocDeail, resp.IsBuy, nil
+}
+
+/*
+获取文库内容
+param
+	userId  用户id
+	docId	文库id
+return
+	interface 文库内容
+	error 异常
+*/
+func GetDocContent(userId, docId string) (interface{}, error) {
+	return nil, nil
+}

+ 129 - 0
jydocs-back/rpc/userDocRpc.go

@@ -0,0 +1,129 @@
+package rpc
+
+import (
+	"app.yhyue.com/moapp/jy_docs/rpc/userlib/userlib"
+	"app.yhyue.com/moapp/jy_docs/rpc/userlib/userlibclient"
+	"context"
+	"fmt"
+	"github.com/tal-tech/go-zero/core/discov"
+	"github.com/tal-tech/go-zero/zrpc"
+	"jy-docs/config"
+	"log"
+)
+
+//用户库RPC接口
+var jyUserDocLib userlibclient.UserLib
+
+func init() {
+	jyUserDocLib = userlibclient.NewUserLib(zrpc.MustNewClient(zrpc.RpcClientConf{
+		Etcd: discov.EtcdConf{
+			Key:   config.JyDocsAppConfig.RpcServers.UserDoc.Key,
+			Hosts: config.JyDocsAppConfig.RpcServers.UserDoc.Address,
+		},
+	}))
+}
+
+/*查询用户文库列表
+param
+	userId  用户id
+	pageNum 页码
+	pageSize 每页大小
+	colloctType  0兑换的 1收藏的 2回收站的
+return
+	文库列表,文库数量,异常
+*/
+func GetUserDocs(userId string, pageNum, pageSize, colloctType int64) (interface{}, int64, error) {
+	resp, err := jyUserDocLib.UserDocs(context.Background(), &userlibclient.UserDocsRequest{
+		AppId:           config.JyDocsAppConfig.AppId,
+		UserId:          userId,
+		Page:            pageNum,
+		PageSize:        pageSize,
+		UserDocCategory: colloctType,
+	})
+	if err != nil {
+		log.Printf("%s GetUserDocs call error %v\n", userId, err)
+		return nil, -1, err
+	}
+	if resp.Code != 1 {
+		log.Printf("%s GetUserDocs fail Message %v\n", userId, resp.Message)
+		return nil, -1, fmt.Errorf("获取文库列表失败")
+	}
+	log.Printf("用户id:%s appid:%d 返回值:%+v\n", userId, config.JyDocsAppConfig.AppId, resp)
+	return resp.Data, resp.Count, nil
+}
+
+/*收藏文库
+param
+	userId  用户id
+	docId   文库id
+return
+	异常
+*/
+func SetUserCollect(userId, docId string) error {
+	resp, err := jyUserDocLib.DocCollect(context.Background(), &userlib.UserCollectRequest{
+		AppId:  config.JyDocsAppConfig.AppId,
+		UserId: userId,
+		DocId:  docId,
+		Cost:   0,
+	})
+	if err != nil {
+		log.Printf("%s SetUserCollect call error %v\n", userId, err)
+		return err
+	}
+	if resp.Code != 1 {
+		log.Printf("%s SetUserCollect fail Message %v\n", userId, resp.Message)
+		return fmt.Errorf("添加收藏失败")
+	}
+	//log.Printf("用户id:%s appid:%d 返回值:%+v\n", userId, config.JyDocsAppConfig.AppId, resp)
+	return nil
+}
+
+/*
+取消收藏
+param
+	userId  用户id
+	docId   文库id
+return
+	异常
+*/
+func DelUserCollect(userId, docId string) error {
+	resp, err := jyUserDocLib.DocCancelCollect(context.Background(), &userlib.UserCancelRequest{
+		AppId:  config.JyDocsAppConfig.AppId,
+		UserId: userId,
+		DocId:  docId,
+	})
+	if err != nil {
+		log.Printf("%s DelUserCollect call error %v\n", userId, err)
+		return err
+	}
+	if resp.Code != 1 {
+		log.Printf("%s DelUserCollect fail Message %v\n", userId, resp.Message)
+		return fmt.Errorf("删除收藏失败")
+	}
+	return nil
+}
+
+/*
+文库转存
+param
+	userId  用户id
+	docId   文库id
+return
+	异常
+*/
+func PayDoc(userId, docId string) error {
+	resp, err := jyUserDocLib.DocDownload(context.Background(), &userlib.UserCollectRequest{
+		AppId:  config.JyDocsAppConfig.AppId,
+		UserId: userId,
+		DocId:  docId,
+	})
+	if err != nil {
+		log.Printf("%s SetUserCollect call error %v\n", userId, err)
+		return err
+	}
+	if resp.Code != 1 {
+		log.Printf("%s PayDoc fail Message %v\n", userId, resp.Message)
+		return fmt.Errorf("下载文库失败")
+	}
+	return nil
+}

+ 4 - 2
jydocs-back/servers/init.go → jydocs-back/servers/a_init.go

@@ -18,7 +18,9 @@ func init() {
 	xweb.RootApp().AppConfig.ReloadTemplates = true
 	xweb.RootApp().AppConfig.SessionTimeout = 7 * 24 * time.Hour
 	xweb.RootApp().Logger.SetOutputLevel(1) //输出日志,改为4则不输出任何日志
-	xweb.RootApp().BasePath = "/jyDocs"
+	xweb.RootApp().BasePath = "/jydocs"
 
-	//xweb.AddAction(&)
+	xweb.AddAction(&Ad{})
+	xweb.AddAction(&StdDoc{})
+	xweb.AddAction(&UserDoc{})
 }

+ 49 - 0
jydocs-back/servers/ad.go

@@ -0,0 +1,49 @@
+package servers
+
+import (
+	. "app.yhyue.com/moapp/jybase/api"
+	util "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"app.yhyue.com/moapp/jybase/redis"
+	"fmt"
+	"jy-docs/public"
+	"log"
+)
+
+type Ad struct {
+	*xweb.Action
+	ad xweb.Mapper `xweb:"/getAdvertisement"` //广告位图片
+}
+
+func (ad *Ad) Ad() {
+	rData, errMsg := func() (interface{}, error) {
+		var i_num int = -1
+		s_code := ad.GetString("code")                          //广告位代码
+		if i_num_req, err := ad.GetInteger("num"); err == nil { //数量 -1取一个
+			i_num = i_num_req
+		}
+		obj := redis.Get("other", "ad_"+s_code)
+		if obj != nil {
+			return util.ObjArrToMapArr(obj.([]interface{})), nil
+		} else {
+			f := ""
+			if i_num > -1 {
+				f = `{"a_son":{"$slice":[0,` + fmt.Sprintf("%d", i_num) + `]}}`
+			} else {
+				f = `{"a_son":1}`
+			}
+			res, ok := public.MQFW.FindOneByField("ad", `{"s_code":"`+s_code+`"}`, f)
+			if ok && res != nil && (*res)["a_son"] != nil {
+				son := (*res)["a_son"].([]interface{})
+				resmap := util.ObjArrToMapArr(son)
+				redis.PutCKV("other", "ad_"+s_code, resmap)
+				return resmap, nil
+			}
+		}
+		return nil, nil
+	}()
+	if errMsg != nil {
+		log.Printf("Ad  err:%s\n", errMsg.Error())
+	}
+	ad.ServeJson(NewResult(rData, errMsg))
+}

+ 135 - 0
jydocs-back/servers/stdDoc.go

@@ -0,0 +1,135 @@
+package servers
+
+import (
+	. "app.yhyue.com/moapp/jybase/api"
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"fmt"
+	"jy-docs/public"
+	"jy-docs/rpc"
+	"log"
+	"strings"
+)
+
+type StdDoc struct {
+	*xweb.Action
+	search       xweb.Mapper `xweb:"/search"`       //检索文库
+	detail       xweb.Mapper `xweb:"/detail"`       //文库详情
+	content      xweb.Mapper `xweb:"/content"`      //文库内容
+	topList      xweb.Mapper `xweb:"/topList"`      //最新文档&热门下载
+	activityList xweb.Mapper `xweb:"/activityList"` //活动文库(精品推荐、兑换榜)
+}
+
+func (stdDoc *StdDoc) Search() {
+	userId := common.ObjToString(stdDoc.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		keyWord := strings.TrimSpace(stdDoc.GetString("keyWord")) //关键词
+		tag := stdDoc.GetString("tag")                            //标签
+		sort := stdDoc.GetString("sort")                          //排序 tSort dSort vSort
+		pageNumReq, _ := stdDoc.GetInt("num")                     //页码 从1开始
+		pageSizeReq, _ := stdDoc.GetInt("size")                   //每页数量
+		pageNum, pageSize, err := public.PageNumParse(pageNumReq, pageSizeReq, 20*10)
+		if err != nil {
+			return nil, err
+		}
+		if keyWord == "" {
+			return nil, fmt.Errorf("检索内容不能为空")
+		}
+		list, total, err := rpc.GetDocQuery(userId, keyWord, tag, pageNum, pageSize, sort)
+		if err != nil {
+			return nil, err
+		}
+		return map[string]interface{}{
+			"total": total,
+			"list":  list,
+		}, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s StdDoc search err:%s\n", userId, errMsg.Error())
+	}
+	stdDoc.ServeJson(NewResult(rData, errMsg))
+}
+
+func (stdDoc *StdDoc) Detail() {
+	userId := common.ObjToString(stdDoc.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		docId := stdDoc.GetString("docId")
+		if docId == "" {
+			return nil, fmt.Errorf("参数异常")
+		}
+		detail, isBuy, err := rpc.GetDocDetail(userId, docId)
+		if err != nil {
+			return nil, err
+		}
+		return map[string]interface{}{
+			"status": common.If(isBuy, 1, 0),
+			"detail": detail,
+		}, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s StdDoc detail err:%s\n", userId, errMsg.Error())
+	}
+	stdDoc.ServeJson(NewResult(rData, errMsg))
+}
+
+func (stdDoc *StdDoc) Content() {
+	userId := common.ObjToString(stdDoc.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+
+		return nil, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s StdDoc content err:%s\n", userId, errMsg.Error())
+	}
+	stdDoc.ServeJson(NewResult(rData, errMsg))
+}
+
+func (stdDoc *StdDoc) TopList() {
+	userId := common.ObjToString(stdDoc.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		num, _ := stdDoc.GetInt("num")   //返回数量
+		sign := stdDoc.GetString("sign") //类别
+		reqSort := ""
+		if num > 50 {
+			num = 50
+		}
+		if sign == "hot" {
+			reqSort = "dSort"
+		} else if sign == "new" {
+			reqSort = "tSort"
+		} else {
+			return nil, fmt.Errorf("未知请求")
+		}
+		list, _, err := rpc.GetDocQuery(userId, "", "", 1, num, reqSort)
+		if err != nil {
+			return nil, err
+		}
+		return list, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s StdDoc topList err:%s\n", userId, errMsg.Error())
+	}
+	stdDoc.ServeJson(NewResult(rData, errMsg))
+}
+
+func (stdDoc *StdDoc) ActivityList() {
+	userId := common.ObjToString(stdDoc.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		code, _ := stdDoc.GetInt("code")
+		pageNumReq, _ := stdDoc.GetInt("num")   //页码 从1开始
+		pageSizeReq, _ := stdDoc.GetInt("size") //每页数量
+		pageNum, pageSize, err := public.PageNumParse(pageNumReq, pageSizeReq, 20*10)
+		if err != nil {
+			return nil, err
+		}
+		list, err := rpc.GeActivityList(userId, code, pageNum, pageSize)
+		if err != nil {
+			return nil, err
+		}
+		return list, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s StdDoc activityList err:%s\n", userId, errMsg.Error())
+	}
+	stdDoc.ServeJson(NewResult(rData, errMsg))
+}

+ 136 - 0
jydocs-back/servers/userDoc.go

@@ -0,0 +1,136 @@
+package servers
+
+import (
+	. "app.yhyue.com/moapp/jybase/api"
+	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/go-xweb/xweb"
+	"encoding/json"
+	"fmt"
+	"jy-docs/public"
+	"jy-docs/rpc"
+	"log"
+)
+
+type UserDoc struct {
+	*xweb.Action
+	userList      xweb.Mapper `xweb:"/user/list"`           //用户列表
+	collectAdd    xweb.Mapper `xweb:"/user/collect/add"`    //收藏文库
+	collectRemove xweb.Mapper `xweb:"/user/collect/remove"` //取消收藏
+	docBuy        xweb.Mapper `xweb:"/user/buy"`            //文库购买
+}
+
+//用户文库列表
+func (userDoc *UserDoc) UserList() {
+	userId := common.ObjToString(userDoc.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		pageNumReq, _ := userDoc.GetInt("num")
+		pageSizeReq, _ := userDoc.GetInt("size")
+		sign, _ := userDoc.GetInt("sign") // 0兑换的 1收藏的 2回收站的
+		pageNum, pageSize, _ := public.PageNumParse(pageNumReq, pageSizeReq, -1)
+		if sign < 0 || sign > 2 {
+			return nil, fmt.Errorf("请求参数异常")
+		}
+		collectList, total, err := rpc.GetUserDocs(userId, pageNum, pageSize, sign)
+		if err != nil {
+			return nil, err
+		}
+		return map[string]interface{}{
+			"total": total,
+			"list":  collectList,
+		}, nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s UserDoc collectList err:%s\n", userId, errMsg.Error())
+	}
+	userDoc.ServeJson(NewResult(rData, errMsg))
+}
+
+func (userDoc *UserDoc) CollectAdd() {
+	userId := common.ObjToString(userDoc.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		docId := userDoc.GetString("docId")
+		if docId == "" {
+			return nil, fmt.Errorf("参数异常")
+		}
+		err := rpc.SetUserCollect(userId, docId)
+		if err != nil {
+			return nil, err
+		}
+		return "success", nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s UserDoc collectAdd err:%s\n", userId, errMsg.Error())
+	}
+	userDoc.ServeJson(NewResult(rData, errMsg))
+}
+
+func (userDoc *UserDoc) CollectRemove() {
+	userId := common.ObjToString(userDoc.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		docId := userDoc.GetString("docId")
+		if docId == "" {
+			return nil, fmt.Errorf("参数异常")
+		}
+		err := rpc.DelUserCollect(userId, docId)
+		if err != nil {
+			return nil, err
+		}
+		return "success", nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s UserDoc collectRemove err:%s\n", userId, errMsg.Error())
+	}
+	userDoc.ServeJson(NewResult(rData, errMsg))
+}
+
+func (userDoc *UserDoc) DocBuy() {
+	userId := common.ObjToString(userDoc.GetSession("userId"))
+	rData, errMsg := func() (interface{}, error) {
+		docId := userDoc.GetString("docId")
+		if docId == "" {
+			return nil, fmt.Errorf("参数异常")
+		}
+		var userPoint, docPoint int64 = 0, 0
+		var err error
+		//查询用户剩余积分
+		userPoint, err = rpc.GetUserPointValue(userId)
+		if err != nil {
+			return nil, err
+		}
+		//查询文档所需积分
+		docInfo, isBuy, err := rpc.GetDocDetail(userId, docId)
+		if err != nil {
+			return nil, err
+		}
+		if isBuy {
+			return nil, fmt.Errorf("已兑换,请勿重复操作")
+		}
+		docPoint = docInfo.Price
+		//积分够调扣积分
+		if userPoint < docPoint {
+			return nil, fmt.Errorf("剩余积分不足")
+		}
+		bytes, err := json.Marshal(map[string]interface{}{
+			"name":    docInfo.DocName,
+			"summary": docInfo.DocSummary,
+			"img":     docInfo.PreviewImgId,
+			"fType":   docInfo.DocFileType,
+		})
+		if err != nil {
+			return nil, fmt.Errorf("文库异常")
+		}
+		if err := rpc.SpendUserPoint(userId, docInfo.DocId, string(bytes), docPoint); err != nil {
+			return nil, err
+		}
+		//转存文库
+		err = rpc.PayDoc(userId, docId)
+		if err != nil {
+			return nil, err
+		}
+		return "success", nil
+	}()
+	if errMsg != nil {
+		log.Printf("%s UserDoc docBuy err:%s\n", userId, errMsg.Error())
+	}
+	userDoc.ServeJson(NewResult(rData, errMsg))
+}

+ 1 - 1
jydocs-mobile/.env.development

@@ -1,4 +1,4 @@
 NODE_ENV=development
-VUE_APP_MOCK=false
+VUE_APP_MOCK=true
 VUE_APP_BASE_API = '/dev/api'
 BASE_URL = '/dev/docs/'

+ 1 - 0
jydocs-mobile/.eslintrc.js

@@ -15,6 +15,7 @@ module.exports = {
     'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
     'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
     'no-any': [0, { 'ignore-rest-args': 0 }],
+    "@typescript-eslint/ban-ts-ignore": ['off'],
     '@typescript-eslint/no-explicit-any': ['off'],
     '@typescript-eslint/camelcase': ['off']
   }

+ 53 - 0
jydocs-mobile/src/api/ajax.ts

@@ -0,0 +1,53 @@
+import axios from 'axios'
+import { Toast } from 'vant'
+
+// 配置api地址
+// axios设置
+const $ajax = axios.create({
+  baseURL: process.env.VUE_APP_BASE_API,
+  timeout: 6000,
+  withCredentials: true
+})
+
+/* 拦截器 */
+$ajax.interceptors.request.use(config => {
+  // 在请求发送之前做一些事
+  console.log('--发送之前--', config)
+  // 获取插入token
+  return config
+}, function (error) {
+  // 当出现请求错误是做一些事
+  console.log('--请求超时--', error)
+  Toast('请求超时,请重试')
+  return Promise.reject(error)
+})
+
+// 添加一个返回拦截器
+$ajax.interceptors.response.use((response) => {
+  // 是否需要toast弹窗
+  if (response.config.headers.noToast !== 1) {
+    // 判断是否需要重新登录
+    if (response.data.error_msg === '需要登录' || response.data.error_code === 1001) {
+      Toast({
+        message: '需要登录',
+        forbidClick: true,
+        duration: 1500
+      })
+    }
+    if (response.data.error_code && response.data.error_code !== 0) {
+      Toast({
+        message: response.data.error_msg || '请求失败,请重试',
+        forbidClick: true,
+        duration: 1500
+      })
+    }
+  }
+
+  return response
+}, function (error) {
+  console.log('--响应超时--', error)
+  Toast('响应超时,请重试')
+  return Promise.reject(error)
+})
+
+export default $ajax

+ 8 - 51
jydocs-mobile/src/api/index.ts

@@ -1,53 +1,10 @@
-import axios from 'axios'
-import { Toast } from 'vant'
+import request from '@/api/ajax'
+import mock from '@/api/mock'
 
-// 配置api地址
-// axios设置
-const $ajax = axios.create({
-  baseURL: process.env.VUE_APP_BASE_API,
-  timeout: 6000,
-  withCredentials: true
-})
+let $request = request
+if (process.env.NODE_ENV === 'development' && process.env.VUE_APP_MOCK === 'true') {
+  // @ts-ignore
+  $request = mock
+}
 
-/* 拦截器 */
-$ajax.interceptors.request.use(config => {
-  // 在请求发送之前做一些事
-  console.log('--发送之前--', config)
-  // 获取插入token
-  return config
-}, function (error) {
-  // 当出现请求错误是做一些事
-  console.log('--请求超时--', error)
-  Toast('请求超时,请重试')
-  return Promise.reject(error)
-})
-
-// 添加一个返回拦截器
-$ajax.interceptors.response.use((response) => {
-  // 是否需要toast弹窗
-  if (response.config.headers.noToast !== 1) {
-    // 判断是否需要重新登录
-    if (response.data.error_msg === '需要登录' || response.data.error_code === 1001) {
-      Toast({
-        message: '需要登录',
-        forbidClick: true,
-        duration: 1500
-      })
-    }
-    if (response.data.error_code && response.data.error_code !== 0) {
-      Toast({
-        message: response.data.error_msg || '请求失败,请重试',
-        forbidClick: true,
-        duration: 1500
-      })
-    }
-  }
-
-  return response
-}, function (error) {
-  console.log('--响应超时--', error)
-  Toast('响应超时,请重试')
-  return Promise.reject(error)
-})
-
-export default $ajax
+export default $request

+ 3 - 3
jydocs-mobile/src/api/main.ts

@@ -3,9 +3,9 @@ import qs from 'qs'
 
 export function getHome (data: any) {
   return $request({
-    url: '/distribution/cashout/index',
-    method: 'get',
-    params: data
+    url: '/topList',
+    method: 'post',
+    data: data
   })
 }
 

+ 32 - 0
jydocs-mobile/src/api/mock.ts

@@ -0,0 +1,32 @@
+import { Toast } from 'vant'
+
+type APIStructure = Record<string, any>;
+
+const files = require.context('@/api/mock', false, /\.json$/)
+const mocks: APIStructure = {}
+files.keys().forEach(key => {
+  const tempK = '/' + key.replace(/\$/g, '/').replace(/(\.\/|\.json)/g, '')
+  mocks[tempK] = files(key)
+})
+
+function mock (config: APIStructure) {
+  return new Promise(resolve => {
+    setTimeout(() => {
+      const result = {
+        data: mocks[config.url]
+      }
+      Toast.clear()
+      try {
+        if (result.data.error_msg) {
+          Toast(result.data.error_msg)
+        }
+      } catch (e) {
+        console.log('[debug]当前mock', config)
+        console.log(e)
+      }
+      resolve(result)
+    }, Math.random() * 3 * 1000 + 2000)
+  })
+}
+
+export default mock

+ 19 - 0
jydocs-mobile/src/api/mock/activityList.json

@@ -0,0 +1,19 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": [
+    {
+      "docId": "NyfuxSR0iUPobdFzNV2y",
+      "activityId": 3,
+      "docTitle": "1111",
+      "docSummary": "1111",
+      "docImg": "1111",
+      "price": 11,
+      "costPrice": 11,
+      "docFileSize": 666,
+      "docPageSize": 777,
+      "downTimes":5,
+      "sourceUserId":""
+    }
+  ]
+}

+ 18 - 0
jydocs-mobile/src/api/mock/detail.json

@@ -0,0 +1,18 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": {
+    "status": 1,
+    "detail": {
+      "docId": "RJ82241sM3DyHwrupW7w",
+      "docName": "软件单元、组装、确认测试系统-中标候选人公示",
+      "price": 359,
+      "docFileSize": 387,
+      "docPageSize": 5,
+      "tags": "信息技术",
+      "uploadDate": "2021-03-17 15:46:04",
+      "docFileType": 6,
+      "docSummary": "公告软件单元、组装、确认测试系统-中标候选人公示(招标编号:ZKX20210231A002)公示开始时间:2021年01月28日09时00分00秒公示结束时间:2021年02月01日23时59分59秒本软件单元、组装、确认测试系统(招标项目"
+    }
+  }
+}

+ 10 - 0
jydocs-mobile/src/api/mock/getAdvertisement.json

@@ -0,0 +1,10 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": [
+    {
+      "s_link": "/front/subscribe.html",
+      "s_pic": "https://web2-qmxtest.jianyu360.cn/upload/2020/11/03/20201103164312011K5K93rYu.png"
+    }
+  ]
+}

+ 29 - 0
jydocs-mobile/src/api/mock/search.json

@@ -0,0 +1,29 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": {
+    "total": 2,
+    "list": [
+      {
+        "docId": "RJ82241sM3DyHwrupW7w",
+        "docName": "软件单元、组装、确认测试系统-中标候选人公示",
+        "price": 359,
+        "docFileSize": 387,
+        "docPageSize": 5,
+        "uploadDate": "2021-03-17 15:46:04",
+        "docSummary": "公告软件单元、组装、确认测试系统-中标候选人公示(招标编号:ZKX20210231A002)公示开始时间:2021年01月28日09时00分00秒公示结束时间:2021年02月01日23时59分59秒本软件单元、组装、确认测试系统(招标项目",
+        "docFileType": "其他"
+      },
+      {
+        "docId": "PImyRKyNohbocfUbhIef",
+        "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统",
+        "price": 193,
+        "docFileSize": 164,
+        "docPageSize": 3,
+        "uploadDate": "2021-03-17 15:46:05",
+        "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
+        "docFileType": "pdf"
+      }
+    ]
+  }
+}

+ 5 - 0
jydocs-mobile/src/api/mock/test$ajax.json

@@ -0,0 +1,5 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": "success"
+}

+ 26 - 0
jydocs-mobile/src/api/mock/topList.json

@@ -0,0 +1,26 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data":  [
+    {
+      "docId": "RJ82241sM3DyHwrupW7w",
+      "docName": "软件单元、组装、确认测试系统-中标候选人公示",
+      "price": 359,
+      "docFileSize": 387,
+      "docPageSize": 5,
+      "uploadDate": "2021-03-17 15:46:04",
+      "docSummary": "公告软件单元、组装、确认测试系统-中标候选人公示(招标编号:ZKX20210231A002)公示开始时间:2021年01月28日09时00分00秒公示结束时间:2021年02月01日23时59分59秒本软件单元、组装、确认测试系统(招标项目",
+      "docFileType": "其他"
+    },
+    {
+      "docId": "PImyRKyNohbocfUbhIef",
+      "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统",
+      "price": 193,
+      "docFileSize": 164,
+      "docPageSize": 3,
+      "uploadDate": "2021-03-17 15:46:05",
+      "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
+      "docFileType": "pdf"
+    }
+  ]
+}

+ 5 - 0
jydocs-mobile/src/api/mock/user$buy.json

@@ -0,0 +1,5 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": "success"
+}

+ 5 - 0
jydocs-mobile/src/api/mock/user$collect$add.json

@@ -0,0 +1,5 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": "success"
+}

+ 5 - 0
jydocs-mobile/src/api/mock/user$collect$remove.json

@@ -0,0 +1,5 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": "success"
+}

+ 22 - 0
jydocs-mobile/src/api/mock/user$list.json

@@ -0,0 +1,22 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": {
+    "total": 1,
+    "list": [
+      {
+        "DocId": "RJ82241sM3DyHwrupW7w",
+        "DocName": "软件单元、组装、确认测试系统-中标候选人公示",
+        "DocPageSize": 5,
+        "DocFileSize": 387,
+        "DocFileType": 6,
+        "DocSummary": "公告软件单元、组装、确认测试系统-中标候选人公示(招标编号:ZKX20210231A002)公示开始时间:2021年01月28日09时00分00秒公示结束时间:2021年02月01日23时59分59秒本软件单元、组装、确认测试系统(招标项目",
+        "IsCollection": 1,
+        "Cost": "359",
+        "CreateAt": 1616049084,
+        "UpdateAt": 1616049084,
+        "DeletedAt": 1616049084
+      }
+    ]
+  }
+}

+ 8 - 5
jydocs-mobile/src/views/Home.vue

@@ -76,7 +76,7 @@ import { Component, Vue } from 'vue-property-decorator'
 import Search from '@/components/Search.vue'
 // import { Cell, CellGroup, Icon, Dialog, Toast } from 'vant'
 import { Icon } from 'vant'
-// import { mapActions } from 'vuex'
+import { mapActions } from 'vuex'
   // import { MixinTop } from '@/utils/mixin-top'
   @Component({
     name: 'home',
@@ -88,18 +88,21 @@ import { Icon } from 'vant'
       Search
     },
     methods: {
-      // ...mapActions({
-      //   ajaxData: 'main/getHome'
-      // })
+      ...mapActions({
+        ajaxData: 'main/getHome'
+      })
     }
   })
 
 export default class extends Vue {
-    // protected ajaxData: any
     pageData: any = {}
+    ajaxData: any
 
     created () {
       console.log('111')
+      this.ajaxData().then((res: any) => {
+        console.log(res)
+      })
       this.pageData = {
         new: [
           {

+ 1 - 1
jydocs-mobile/src/views/Search.vue

@@ -34,7 +34,7 @@
 <script lang="ts">
 import { Component, Vue } from 'vue-property-decorator'
 import Search from '@/components/Search.vue'
-import { Tabs, Tab, Icon, Sticky, Toast } from 'vant'
+import { Tabs, Tab, Icon, Sticky } from 'vant'
 // import { mapActions } from 'vuex'
   // import { MixinTop } from '@/utils/mixin-top'
   @Component({

+ 1 - 1
jydocs-pc/src/api/mock.js

@@ -13,7 +13,7 @@ function mock (config) {
       }
       // Toast.clear()
       try {
-        if (!result.data.code) {
+        if (!result.data.error_msg) {
           // Toast(result.data.msg)
         }
       } catch (e) {

+ 19 - 0
jydocs-pc/src/api/mock/activityList.json

@@ -0,0 +1,19 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": [
+    {
+      "docId": "NyfuxSR0iUPobdFzNV2y",
+      "activityId": 3,
+      "docTitle": "1111",
+      "docSummary": "1111",
+      "docImg": "1111",
+      "price": 11,
+      "costPrice": 11,
+      "docFileSize": 666,
+      "docPageSize": 777,
+      "downTimes":5,
+      "sourceUserId":""
+    }
+  ]
+}

+ 18 - 0
jydocs-pc/src/api/mock/detail.json

@@ -0,0 +1,18 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": {
+    "status": 1,
+    "detail": {
+      "docId": "RJ82241sM3DyHwrupW7w",
+      "docName": "软件单元、组装、确认测试系统-中标候选人公示",
+      "price": 359,
+      "docFileSize": 387,
+      "docPageSize": 5,
+      "tags": "信息技术",
+      "uploadDate": "2021-03-17 15:46:04",
+      "docFileType": 6,
+      "docSummary": "公告软件单元、组装、确认测试系统-中标候选人公示(招标编号:ZKX20210231A002)公示开始时间:2021年01月28日09时00分00秒公示结束时间:2021年02月01日23时59分59秒本软件单元、组装、确认测试系统(招标项目"
+    }
+  }
+}

+ 10 - 0
jydocs-pc/src/api/mock/getAdvertisement.json

@@ -0,0 +1,10 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": [
+    {
+      "s_link": "/front/subscribe.html",
+      "s_pic": "https://web2-qmxtest.jianyu360.cn/upload/2020/11/03/20201103164312011K5K93rYu.png"
+    }
+  ]
+}

+ 3 - 20
jydocs-pc/src/api/mock/test$ajax.json

@@ -1,22 +1,5 @@
 {
-  "code": 1,
-  "msg": "请求成功",
-  "time": "1596525438",
-  "data": [
-    {
-      "id": 1,
-      "title": "垂直滚动",
-      "maincontent": "搭配 NoticeBar 和 Swipe 组件可以实现垂直滚动的效果。"
-    },
-    {
-      "id": 2,
-      "title": "技术是开发它的人的共同灵魂。在代码阅读过程中人们说脏话的频率是衡量代码质量的唯一标准。",
-      "maincontent": "在代码阅读过程中人们说脏话的频率是衡量代码质量的唯一标准。"
-    },
-    {
-      "id": 3,
-      "title": "自定义样式",
-      "maincontent": "通过 color 属性设置文本颜色,通过 background 属性设置背景色。"
-    }
-  ]
+  "error_code": 0,
+  "error_msg": "",
+  "data": "success"
 }

+ 26 - 0
jydocs-pc/src/api/mock/topList.json

@@ -0,0 +1,26 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data":  [
+    {
+      "docId": "RJ82241sM3DyHwrupW7w",
+      "docName": "软件单元、组装、确认测试系统-中标候选人公示",
+      "price": 359,
+      "docFileSize": 387,
+      "docPageSize": 5,
+      "uploadDate": "2021-03-17 15:46:04",
+      "docSummary": "公告软件单元、组装、确认测试系统-中标候选人公示(招标编号:ZKX20210231A002)公示开始时间:2021年01月28日09时00分00秒公示结束时间:2021年02月01日23时59分59秒本软件单元、组装、确认测试系统(招标项目",
+      "docFileType": "其他"
+    },
+    {
+      "docId": "PImyRKyNohbocfUbhIef",
+      "docName": "北京精密机电控制设备研究所软件单元、组装、确认测试系统",
+      "price": 193,
+      "docFileSize": 164,
+      "docPageSize": 3,
+      "uploadDate": "2021-03-17 15:46:05",
+      "docSummary": "1.招标条件本招标项目:软件单元、组装、确认测试系统已由中国航天科技集团有限公司部门批准建设,项目业主为北京精密机电控制设备研究所,建设资金及出资比例其他资金100.0%,招标人为北京精密机电控制设备研究所。项目已具备招标条件,中科信工程咨",
+      "docFileType": "pdf"
+    }
+  ]
+}

+ 5 - 0
jydocs-pc/src/api/mock/user$buy.json

@@ -0,0 +1,5 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": "success"
+}

+ 5 - 0
jydocs-pc/src/api/mock/user$collect$add.json

@@ -0,0 +1,5 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": "success"
+}

+ 5 - 0
jydocs-pc/src/api/mock/user$collect$remove.json

@@ -0,0 +1,5 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": "success"
+}

+ 22 - 0
jydocs-pc/src/api/mock/user$list.json

@@ -0,0 +1,22 @@
+{
+  "error_code": 0,
+  "error_msg": "",
+  "data": {
+    "total": 1,
+    "list": [
+      {
+        "DocId": "RJ82241sM3DyHwrupW7w",
+        "DocName": "软件单元、组装、确认测试系统-中标候选人公示",
+        "DocPageSize": 5,
+        "DocFileSize": 387,
+        "DocFileType": 6,
+        "DocSummary": "公告软件单元、组装、确认测试系统-中标候选人公示(招标编号:ZKX20210231A002)公示开始时间:2021年01月28日09时00分00秒公示结束时间:2021年02月01日23时59分59秒本软件单元、组装、确认测试系统(招标项目",
+        "IsCollection": 1,
+        "Cost": "359",
+        "CreateAt": 1616049084,
+        "UpdateAt": 1616049084,
+        "DeletedAt": 1616049084
+      }
+    ]
+  }
+}

+ 1 - 1
jydocs-pc/src/components/doc-item-card/Price.vue

@@ -17,7 +17,7 @@ export default {
 }
 </script>
 
-<style scoped lang="scss" scoped>
+<style scoped lang="scss">
 .price-container {
   display: flex;
   align-items: center;

+ 1 - 1
jydocs-pc/src/views/Content.vue

@@ -141,7 +141,7 @@ export default {
       // 获取页面滚动距离
       const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
       // 判断滚动距离是否大于元素到顶端距离
-      this.fixed = scrollTop > this.offsetTop && this.buyed ? true : false
+      this.fixed = !!(scrollTop > this.offsetTop && this.buyed)
     },
     continued () {
       // this.buyed = !this.buyed;