From e7cfb08f0869aac49495fb066904e8692db55f9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=20=E4=BC=9F=E6=98=8C?= Date: Thu, 5 Sep 2019 09:19:53 +0800 Subject: [PATCH 001/103] add the check Tags for submitproposal params --- backend/service/service_tx.go | 10 +++++++++- backend/service/service_tx_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/backend/service/service_tx.go b/backend/service/service_tx.go index cc47a4b0a..02b5a4526 100644 --- a/backend/service/service_tx.go +++ b/backend/service/service_tx.go @@ -882,7 +882,7 @@ func (service *TxService) buildTxVO(tx vo.CommonTx, blackListP *map[string]docum govTx.Title = msg.Title govTx.Description = msg.Description govTx.ProposalType = msg.ProposalType - govTx.Tags = tx.Tags + govTx.Tags = checkTags(tx.Tags, msg) govTx.Software = msg.Software govTx.Version = msg.Version govTx.SwitchHeight = msg.SwitchHeight @@ -943,6 +943,14 @@ func (service *TxService) buildTxVO(tx vo.CommonTx, blackListP *map[string]docum return nil } +func checkTags(tags map[string]string, msg vo.MsgSubmitProposal) map[string]string { + if _, ok := tags["param"]; !ok { + bytesData, _ := json.Marshal(msg.Params) + tags["param"] = string(bytesData) + } + return tags +} + func buildBaseTx(tx vo.CommonTx) vo.BaseTx { res := vo.BaseTx{ Hash: tx.TxHash, diff --git a/backend/service/service_tx_test.go b/backend/service/service_tx_test.go index 59c6a450e..5b7c1ddab 100644 --- a/backend/service/service_tx_test.go +++ b/backend/service/service_tx_test.go @@ -64,3 +64,31 @@ func TestQueryTxNumGroupByDay(t *testing.T) { t.Logf("idx: %v txCountByDay: %v \n", k, v) } } + +func TestTxService_checkTags(t *testing.T) { + tags := map[string]string{ + "voting-period-start": "41", + "action": "submit_proposal", + "proposer": "faa1x292qss22x4rls6ygr7hhnp0et94vwwrchaklp", + "proposal-id": "41", + "param": "[{\"subspace\":\"stake\",\"key\":\"UnbondingTime\",\"value\":\"123m\"}]", + } + tags1 := map[string]string{ + "voting-period-start": "41", + "action": "submit_proposal", + "proposer": "faa1x292qss22x4rls6ygr7hhnp0et94vwwrchaklp", + "proposal-id": "41", + } + submitprodata := vo.MsgSubmitProposal{ + Params: []vo.Param{ + {Subspace: "stake", Key: "UnbondingTime", Value: "12m"}, + }, + } + data := checkTags(tags, submitprodata) + t.Log(tags) + t.Log(data) + data1 := checkTags(tags1, submitprodata) + t.Log(tags1) + t.Log(data1) + +} From 91fbcd83aeec663489905a063824b61e3fc029eb Mon Sep 17 00:00:00 2001 From: wenwu Date: Mon, 9 Sep 2019 09:34:35 +0800 Subject: [PATCH 002/103] modify gitignore --- frontend/.gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/.gitignore b/frontend/.gitignore index 3eba04c68..0fa11c538 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -1,3 +1,4 @@ .idea/ node_modules/ -dist/ \ No newline at end of file +dist/ +vue.config.js \ No newline at end of file From ddb8d81ca1985bf2ca983780703b25d1d6727822 Mon Sep 17 00:00:00 2001 From: wenwu Date: Tue, 10 Sep 2019 16:06:24 +0800 Subject: [PATCH 003/103] 0.10.2 code develop --- backend/rest/controller/tx.go | 98 +- backend/service/service_tx.go | 33 +- backend/service/service_validator.go | 1 + backend/types/const.go | 1 + backend/vo/stake.go | 1 + backend/vo/tx.go | 27 +- .../src/components/TransactionsDetail.vue | 2407 +++++++++-------- frontend/src/components/ValidatorDetail.vue | 3 + frontend/src/components/ValidatorListPage.vue | 2 +- frontend/src/util/Tools.js | 8 +- 10 files changed, 1354 insertions(+), 1227 deletions(-) diff --git a/backend/rest/controller/tx.go b/backend/rest/controller/tx.go index e0e77139b..5bd8a3a0b 100644 --- a/backend/rest/controller/tx.go +++ b/backend/rest/controller/tx.go @@ -6,6 +6,7 @@ import ( "github.com/irisnet/explorer/backend/utils" "github.com/irisnet/explorer/backend/vo" "gopkg.in/mgo.v2/bson" + "time" ) func RegisterTx(r *mux.Router) error { @@ -18,6 +19,7 @@ func RegisterTx(r *mux.Router) error { registerQueryTxsCounter, registerQueryRecentTx, registerQueryTxList, + registerQueryTxType, } for _, fn := range funs { @@ -43,6 +45,10 @@ func registerQueryTxList(r *mux.Router) error { size := int(utils.ParseIntWithDefault(QueryParam(request, "size"), 5)) height := int(utils.ParseIntWithDefault(QueryParam(request, "height"), 0)) total := QueryParam(request, "total") + txType := QueryParam(request, "txType") + status := QueryParam(request, "status") + beginTime := int64(utils.ParseIntWithDefault(QueryParam(request, "beginTime"), 0)) + endTime := int64(utils.ParseIntWithDefault(QueryParam(request, "endTime"), 0)) istotal := false if total == "true" { istotal = true @@ -51,6 +57,27 @@ func registerQueryTxList(r *mux.Router) error { if height > 0 { query["height"] = height } + if txType != "" { + query["type"] = txType + } + + if status != "" { + query["status"] = status + } + if beginTime != 0 && endTime != 0 { + query["time"] = bson.M{ + "$gte": time.Unix(beginTime, 0), + "$lt": time.Unix(endTime, 0), + } + } else if beginTime != 0 { + query["time"] = bson.M{ + "$gte": time.Unix(beginTime, 0), + } + } else if endTime != 0 { + query["time"] = bson.M{ + "$lt": time.Unix(endTime, 0), + } + } var result vo.PageVo result = tx.QueryBaseList(query, page, size, istotal) return result @@ -63,6 +90,10 @@ func registerQueryTxListByType(r *mux.Router) error { tx.SetTid(request.TraceId) query := bson.M{} total := GetString(request, "total") + txTyp := QueryParam(request, "txType") + status := QueryParam(request, "status") + beginTime := int64(utils.ParseIntWithDefault(QueryParam(request, "beginTime"), 0)) + endTime := int64(utils.ParseIntWithDefault(QueryParam(request, "endTime"), 0)) istotal := true if total == "false" { istotal = false @@ -83,28 +114,51 @@ func registerQueryTxListByType(r *mux.Router) error { page, size := GetPage(request) var result vo.PageVo - switch types.TxTypeFromString(txType) { - case types.Trans: - query["type"] = bson.M{ - "$in": types.BankList, + if txTyp != "" { + query["type"] = txTyp + } else { + switch types.TxTypeFromString(txType) { + case types.Trans: + query["type"] = bson.M{ + "$in": types.BankList, + } + return tx.QueryTxList(query, page, size, istotal) + case types.Declaration: + query["type"] = bson.M{ + "$in": types.DeclarationList, + } + return tx.QueryTxList(query, page, size, istotal) + case types.Stake: + query["type"] = bson.M{ + "$in": types.StakeList, + } + return tx.QueryTxList(query, page, size, istotal) + case types.Gov: + query["type"] = bson.M{ + "$in": types.GovernanceList, + } + break } - return tx.QueryTxList(query, page, size, istotal) - case types.Declaration: - query["type"] = bson.M{ - "$in": types.DeclarationList, + } + + if status != "" { + query["status"] = status + } + if beginTime != 0 && endTime != 0 { + query["time"] = bson.M{ + "$gte": time.Unix(beginTime, 0), + "$lt": time.Unix(endTime, 0), } - return tx.QueryTxList(query, page, size, istotal) - case types.Stake: - query["type"] = bson.M{ - "$in": types.StakeList, + } else if beginTime != 0 { + query["time"] = bson.M{ + "$gte": time.Unix(beginTime, 0), } - return tx.QueryTxList(query, page, size, istotal) - case types.Gov: - query["type"] = bson.M{ - "$in": types.GovernanceList, + } else if endTime != 0 { + query["time"] = bson.M{ + "$lt": time.Unix(endTime, 0), } - break } + result = tx.QueryTxList(query, page, size, istotal) return result }) @@ -181,3 +235,13 @@ func registerQueryRecentTx(r *mux.Router) error { }) return nil } + +func registerQueryTxType(r *mux.Router) error { + doApi(r, types.UrlRegisterQueryTxType, "GET", func(request vo.IrisReq) interface{} { + tx.SetTid(request.TraceId) + txType := QueryParam(request, "type") + result := tx.QueryTxType(txType) + return result + }) + return nil +} diff --git a/backend/service/service_tx.go b/backend/service/service_tx.go index e7b681c46..5f8e7fee6 100644 --- a/backend/service/service_tx.go +++ b/backend/service/service_tx.go @@ -261,6 +261,35 @@ func (service *TxService) QueryTxNumGroupByDay() []vo.TxNumGroupByDayVo { return result } +func (service *TxService) QueryTxType(txType string) interface{} { + if txType == "" { + length := len(types.BankList) + len(types.DeclarationList) + len(types.StakeList) + len(types.GovernanceList) + len(types.AssetList) + len(types.RandList) + typeList := make([]string, 0, length) + res := append(typeList, types.BankList...) + res = append(res, types.DeclarationList...) + res = append(res, types.StakeList...) + res = append(res, types.GovernanceList...) + res = append(res, types.AssetList...) + res = append(res, types.RandList...) + return res + } + switch txType { + case "Trans": + return types.BankList + case "Declaration": + return types.DeclarationList + case "Stake": + return types.StakeList + case "Gov": + return types.GovernanceList + case "Asset": + return types.AssetList + case "Rand": + return types.RandList + } + return nil +} + func buildTxVOFromDoc(tx document.CommonTx) vo.CommonTx { txList := buildTxVOsFromDoc([]document.CommonTx{tx}) @@ -958,7 +987,9 @@ func buildBaseTx(tx vo.CommonTx) vo.BaseTx { Log: fetchLogMessage(tx.Log), Timestamp: tx.Time, } - + if tx.Type != types.TxTypeWithdrawDelegatorRewardsAll && tx.Type != types.TxTypeWithdrawValidatorRewardsAll { + res.Tags = tx.Tags + } if len(tx.Signers) > 0 { res.Signer = tx.Signers[0].AddrBech32 } diff --git a/backend/service/service_validator.go b/backend/service/service_validator.go index c471155cd..51a69c6d2 100644 --- a/backend/service/service_validator.go +++ b/backend/service/service_validator.go @@ -478,6 +478,7 @@ func (service *ValidatorService) GetValidatorDetail(validatorAddr string) vo.Val ConsensusAddr: validatorAsDoc.ConsensusPubkey, Description: desc, Icons: validatorAsDoc.Icons, + Uptime: validatorAsDoc.Uptime, } if validatorAsDoc.Jailed { diff --git a/backend/types/const.go b/backend/types/const.go index cfd5d0624..3c4c6d02d 100644 --- a/backend/types/const.go +++ b/backend/types/const.go @@ -71,6 +71,7 @@ const ( UrlRegisterQueryTxsByAccount = "/txsByAddress/{address}/{page}/{size}" UrlRegisterQueryTxsByDay = "/txsByDay" UrlRegisterQueryTx = "/tx/{hash}" + UrlRegisterQueryTxType = "/txType" //tokenstats UrlRegisterQueryTokenStats = "/tokenstats" UrlRegisterTokensAccountTotal = "/tokenstats/account_total" diff --git a/backend/vo/stake.go b/backend/vo/stake.go index e55abe9c1..d7760f078 100644 --- a/backend/vo/stake.go +++ b/backend/vo/stake.go @@ -27,6 +27,7 @@ type ValidatorForDetail struct { ConsensusAddr string `json:"consensus_addr"` Description Description `json:"description"` Icons string `json:"icons"` + Uptime float32 `json:"uptime"` } type WithdrawAddr struct { diff --git a/backend/vo/tx.go b/backend/vo/tx.go index 780aa8f2f..826e46a6f 100644 --- a/backend/vo/tx.go +++ b/backend/vo/tx.go @@ -125,19 +125,20 @@ func (t Tx) PrintHashFromToAmount() string { } type BaseTx struct { - Signer string `json:"signer,omitempty"` - Hash string `json:"hash"` - BlockHeight int64 `json:"block_height"` - Type string `json:"type"` - Fee utils.ActualFee `json:"fee"` - Status string `json:"status"` - GasLimit int64 `json:"gas_limit"` - GasUsed int64 `json:"gas_used"` - GasWanted int64 `json:"gas_wanted"` - GasPrice float64 `json:"gas_price"` - Memo string `json:"memo"` - Log string `json:"log"` - Timestamp time.Time `json:"timestamp"` + Signer string `json:"signer,omitempty"` + Hash string `json:"hash"` + BlockHeight int64 `json:"block_height"` + Type string `json:"type"` + Fee utils.ActualFee `json:"fee"` + Status string `json:"status"` + GasLimit int64 `json:"gas_limit"` + GasUsed int64 `json:"gas_used"` + GasWanted int64 `json:"gas_wanted"` + GasPrice float64 `json:"gas_price"` + Memo string `json:"memo"` + Log string `json:"log"` + Timestamp time.Time `json:"timestamp"` + Tags map[string]string `json:"tags,omitempty"` } type TransTx struct { diff --git a/frontend/src/components/TransactionsDetail.vue b/frontend/src/components/TransactionsDetail.vue index 5de04a42d..766b27f5d 100644 --- a/frontend/src/components/TransactionsDetail.vue +++ b/frontend/src/components/TransactionsDetail.vue @@ -1,192 +1,171 @@ diff --git a/frontend/src/components/ValidatorDetail.vue b/frontend/src/components/ValidatorDetail.vue index 2684b461b..ea6e5d062 100644 --- a/frontend/src/components/ValidatorDetail.vue +++ b/frontend/src/components/ValidatorDetail.vue @@ -409,6 +409,7 @@ export default { "Jailed Until": "", "Delegator Bonded": "", "Missed Blocks": "", + "Uptime": "", Delegators: "", "Commission Rate": "", "Delegator Shares": "", @@ -636,6 +637,8 @@ export default { )} %)`; this.validatorInfo["Missed Blocks"] = data.missed_blocks_count; + this.validatorInfo["Uptime"] = + Tools.FormatUptime(data.uptime); this.validatorInfo["Delegators"] = data.delegator_count; this.validatorInfo["Commission Rate"] = diff --git a/frontend/src/components/ValidatorListPage.vue b/frontend/src/components/ValidatorListPage.vue index d0cc40a8b..5e6442786 100644 --- a/frontend/src/components/ValidatorListPage.vue +++ b/frontend/src/components/ValidatorListPage.vue @@ -160,7 +160,7 @@ operatorAddress: item.operator_address, commission: `${(item.commission.rate * 100).toFixed(2)} %`, bondedToken: `${Tools.formatPriceToFixed(Number(item.tokens),2)} ${Constant.CHAINNAME.toLocaleUpperCase()}`, - uptime: `${(item.uptime * 100).toFixed(2)}%`, + uptime: Tools.FormatUptime(item.uptime), votingPower: `${(item.voting_rate * 100).toFixed(4)}%`, selfBond: `${Tools.subStrings(Tools.formatPriceToFixed(Number(item.self_bond.match(/\d*(\.\d{0,4})?/)[0])), 2)} ${Constant.CHAINNAME.toLocaleUpperCase()}`, delegatorNum: item.delegator_num, diff --git a/frontend/src/util/Tools.js b/frontend/src/util/Tools.js index 623395dc5..3d020937e 100644 --- a/frontend/src/util/Tools.js +++ b/frontend/src/util/Tools.js @@ -641,6 +641,10 @@ export default class Tools{ formattedNumber = number } return formattedNumber - } - + } + + // 转化uptime的方法 + static FormatUptime(number) { + return `${(number * 100).toFixed(4)}%` + } } From b80d0af22d56f7c9035676283e1a18a79614ea48 Mon Sep 17 00:00:00 2001 From: wenwu Date: Tue, 10 Sep 2019 16:11:22 +0800 Subject: [PATCH 004/103] modify query code --- backend/rest/controller/tx.go | 36 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/backend/rest/controller/tx.go b/backend/rest/controller/tx.go index 5bd8a3a0b..8b1ea7c6a 100644 --- a/backend/rest/controller/tx.go +++ b/backend/rest/controller/tx.go @@ -60,7 +60,6 @@ func registerQueryTxList(r *mux.Router) error { if txType != "" { query["type"] = txType } - if status != "" { query["status"] = status } @@ -114,6 +113,23 @@ func registerQueryTxListByType(r *mux.Router) error { page, size := GetPage(request) var result vo.PageVo + if status != "" { + query["status"] = status + } + if beginTime != 0 && endTime != 0 { + query["time"] = bson.M{ + "$gte": time.Unix(beginTime, 0), + "$lt": time.Unix(endTime, 0), + } + } else if beginTime != 0 { + query["time"] = bson.M{ + "$gte": time.Unix(beginTime, 0), + } + } else if endTime != 0 { + query["time"] = bson.M{ + "$lt": time.Unix(endTime, 0), + } + } if txTyp != "" { query["type"] = txTyp } else { @@ -141,24 +157,6 @@ func registerQueryTxListByType(r *mux.Router) error { } } - if status != "" { - query["status"] = status - } - if beginTime != 0 && endTime != 0 { - query["time"] = bson.M{ - "$gte": time.Unix(beginTime, 0), - "$lt": time.Unix(endTime, 0), - } - } else if beginTime != 0 { - query["time"] = bson.M{ - "$gte": time.Unix(beginTime, 0), - } - } else if endTime != 0 { - query["time"] = bson.M{ - "$lt": time.Unix(endTime, 0), - } - } - result = tx.QueryTxList(query, page, size, istotal) return result }) From d21eab80c4c993f64269bc832c4639ae5ef9d59f Mon Sep 17 00:00:00 2001 From: wenwu Date: Tue, 10 Sep 2019 16:14:44 +0800 Subject: [PATCH 005/103] modify queryTxType code --- backend/service/service_tx.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/service/service_tx.go b/backend/service/service_tx.go index 5f8e7fee6..265ba556f 100644 --- a/backend/service/service_tx.go +++ b/backend/service/service_tx.go @@ -261,7 +261,7 @@ func (service *TxService) QueryTxNumGroupByDay() []vo.TxNumGroupByDayVo { return result } -func (service *TxService) QueryTxType(txType string) interface{} { +func (service *TxService) QueryTxType(txType string) []string { if txType == "" { length := len(types.BankList) + len(types.DeclarationList) + len(types.StakeList) + len(types.GovernanceList) + len(types.AssetList) + len(types.RandList) typeList := make([]string, 0, length) From 80d577a82b2b47f435618cb61b0cf498a54aa8f5 Mon Sep 17 00:00:00 2001 From: wenwu Date: Tue, 10 Sep 2019 16:52:15 +0800 Subject: [PATCH 006/103] for some comments --- backend/rest/controller/tx.go | 12 ++++++------ backend/service/service_tx.go | 2 +- backend/types/const.go | 2 +- backend/vo/tx.go | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/backend/rest/controller/tx.go b/backend/rest/controller/tx.go index 8b1ea7c6a..600f5b20a 100644 --- a/backend/rest/controller/tx.go +++ b/backend/rest/controller/tx.go @@ -89,7 +89,7 @@ func registerQueryTxListByType(r *mux.Router) error { tx.SetTid(request.TraceId) query := bson.M{} total := GetString(request, "total") - txTyp := QueryParam(request, "txType") + txType := QueryParam(request, "txType") status := QueryParam(request, "status") beginTime := int64(utils.ParseIntWithDefault(QueryParam(request, "beginTime"), 0)) endTime := int64(utils.ParseIntWithDefault(QueryParam(request, "endTime"), 0)) @@ -109,7 +109,7 @@ func registerQueryTxListByType(r *mux.Router) error { query["height"] = height } - txType := Var(request, "type") + txTypeGroup := Var(request, "type") page, size := GetPage(request) var result vo.PageVo @@ -130,10 +130,10 @@ func registerQueryTxListByType(r *mux.Router) error { "$lt": time.Unix(endTime, 0), } } - if txTyp != "" { - query["type"] = txTyp + if txType != "" { + query["type"] = txType } else { - switch types.TxTypeFromString(txType) { + switch types.TxTypeFromString(txTypeGroup) { case types.Trans: query["type"] = bson.M{ "$in": types.BankList, @@ -237,7 +237,7 @@ func registerQueryRecentTx(r *mux.Router) error { func registerQueryTxType(r *mux.Router) error { doApi(r, types.UrlRegisterQueryTxType, "GET", func(request vo.IrisReq) interface{} { tx.SetTid(request.TraceId) - txType := QueryParam(request, "type") + txType := Var(request, "type") result := tx.QueryTxType(txType) return result }) diff --git a/backend/service/service_tx.go b/backend/service/service_tx.go index 265ba556f..c6cae282b 100644 --- a/backend/service/service_tx.go +++ b/backend/service/service_tx.go @@ -262,7 +262,7 @@ func (service *TxService) QueryTxNumGroupByDay() []vo.TxNumGroupByDayVo { } func (service *TxService) QueryTxType(txType string) []string { - if txType == "" { + if txType == "all" { length := len(types.BankList) + len(types.DeclarationList) + len(types.StakeList) + len(types.GovernanceList) + len(types.AssetList) + len(types.RandList) typeList := make([]string, 0, length) res := append(typeList, types.BankList...) diff --git a/backend/types/const.go b/backend/types/const.go index 3c4c6d02d..3fdc7b57f 100644 --- a/backend/types/const.go +++ b/backend/types/const.go @@ -71,7 +71,7 @@ const ( UrlRegisterQueryTxsByAccount = "/txsByAddress/{address}/{page}/{size}" UrlRegisterQueryTxsByDay = "/txsByDay" UrlRegisterQueryTx = "/tx/{hash}" - UrlRegisterQueryTxType = "/txType" + UrlRegisterQueryTxType = "/tx_types/{type}" //tokenstats UrlRegisterQueryTokenStats = "/tokenstats" UrlRegisterTokensAccountTotal = "/tokenstats/account_total" diff --git a/backend/vo/tx.go b/backend/vo/tx.go index 826e46a6f..e1a8f96dd 100644 --- a/backend/vo/tx.go +++ b/backend/vo/tx.go @@ -138,7 +138,7 @@ type BaseTx struct { Memo string `json:"memo"` Log string `json:"log"` Timestamp time.Time `json:"timestamp"` - Tags map[string]string `json:"tags,omitempty"` + Tags map[string]string `json:"tags"` } type TransTx struct { From 7e0b293d5ee5fba5247830c1720735095a8209e0 Mon Sep 17 00:00:00 2001 From: wenwu Date: Tue, 10 Sep 2019 17:20:15 +0800 Subject: [PATCH 007/103] change uppercase to lowercase --- backend/service/service_tx.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/service/service_tx.go b/backend/service/service_tx.go index c6cae282b..76358ef7b 100644 --- a/backend/service/service_tx.go +++ b/backend/service/service_tx.go @@ -274,17 +274,17 @@ func (service *TxService) QueryTxType(txType string) []string { return res } switch txType { - case "Trans": + case "trans": return types.BankList - case "Declaration": + case "declaration": return types.DeclarationList - case "Stake": + case "stake": return types.StakeList - case "Gov": + case "gov": return types.GovernanceList - case "Asset": + case "asset": return types.AssetList - case "Rand": + case "rand": return types.RandList } return nil From 9e70dfae5148f0bdc7aa3600ccc938b1af9c8139 Mon Sep 17 00:00:00 2001 From: zhjibi742626083 Date: Tue, 10 Sep 2019 19:19:55 +0800 Subject: [PATCH 008/103] add filters to the Txs page --- frontend/icon/iconfont.css | 24 +- frontend/icon/iconfont.eot | Bin 12088 -> 12792 bytes frontend/icon/iconfont.js | 2 +- frontend/icon/iconfont.svg | 9 + frontend/icon/iconfont.ttf | Bin 11920 -> 12624 bytes frontend/icon/iconfont.woff | Bin 8184 -> 8692 bytes frontend/icon/iconfont.woff2 | Bin 6916 -> 7348 bytes frontend/package.json | 1 + frontend/src/App.vue | 7 + frontend/src/api/index.js | 3 + frontend/src/components/AllTxTypeList.vue | 295 +++++++++++++++++- frontend/src/components/NativeAssetList.vue | 2 +- frontend/src/components/ProposalsDetail.vue | 4 +- frontend/src/components/ValidatorListPage.vue | 19 -- .../commonComponents/MProposalsEchart.vue | 2 +- frontend/src/main.ts | 6 + 16 files changed, 329 insertions(+), 45 deletions(-) diff --git a/frontend/icon/iconfont.css b/frontend/icon/iconfont.css index c659d87f0..d4772ade2 100644 --- a/frontend/icon/iconfont.css +++ b/frontend/icon/iconfont.css @@ -1,10 +1,10 @@ @font-face {font-family: "iconfont"; - src: url('iconfont.eot?t=1566983223561'); /* IE9 */ - src: url('iconfont.eot?t=1566983223561#iefix') format('embedded-opentype'), /* IE6-IE8 */ - url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), - url('iconfont.woff?t=1566983223561') format('woff'), - url('iconfont.ttf?t=1566983223561') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ - url('iconfont.svg?t=1566983223561#iconfont') format('svg'); /* iOS 4.1- */ + src: url('iconfont.eot?t=1568104774274'); /* IE9 */ + src: url('iconfont.eot?t=1568104774274#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAABy0AAsAAAAAMVAAABxkAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCGBgrPOL1SATYCJAN8C0AABCAFhG0Hgw8bYSdFRoaNA0DC83HJ/q8TOLk/rBMNC3S6C2HkmHXXbVNPhrqKSqds747M+X+7kRlL0AE6RP1ndW01HDOUkge+/b7dmTdfV1TTns2IWFJNeFRNwUIkFAgR4uCNzA+AZTar6LsyLNWx24tt1d8pl4OckCuE2mNj62BUMF/O9GcCl1HCA4aWbe9yaAPEgoQXy7QX6Sq93gYMC2lrc8sLAQLBhxsfW3NyCgcPE9WQNS6khRyGyAZz3IQcom3e/T9Py/OUNmAVYOQ2StGm7Fi0PasWpYsqFxXORbfr+Z9LbVIEVznKMK7CDKXPT1L4yT/4uVHKuWHuSpRUjUBN7VVVTu5NqIPB3Y3yyxkWUZ4r+KkpMTlhZx2wUHo65hj29LEJZJkGsi3OykmImGsc0cOv7J+AulHLwqbvXYdUJUQKaHcVL5xSvfBIgvyg6iwznplCeKukGp/Fz7wJNz/8XglVolKBRNx3fvNZ6zJkLO42bEeLIppTMXkeBZaRCK+Z5U+LCC6Hcp1VnhwVSwmmjI1GhkDILY+mUSEprf8Lr6Kqpq5Jsxat2rTr0GlQl249+vTqN2DIsBGjhDLSthnCHdSOksFjCWTCEsmUpSAzlkTmLCWyYCmTJUuFrFiqZM1SIxuWOtmyNJEdSzPZs7SQA0srOWJtQAlYO1AG1gFUgHUCVWCDQA1YF1AH1g00gPUATWB9QAtYL9AG1g90gA0AXWBDQA+SekQfEiAEhFMYC56xBu+0TGj7iDj+hXKwejnu8ssKfiW3MBylB9bfLeq2exgAu1bDiQKSEDPQ23Fq9eDaqtm5rkiMYXwr5Vj13ix6c07VuZRyatvArPT/uq3ewefaWjYBZlPzznkZIjUt88qRtLOHT9EgXWMRZPaTaWs+01b9PXVd88lke2QGbcFSk79zKKheCCNA/XHQNZsSiUz89pjzfRaDAxLx12Es6w/D0IwiKwgM3/9OUD+Ac2thqGtH0KJKza66dacxeHdL40Yy1XqI+NiOqxt+BnawcmIVUDUWkZv5I9h60Q/f6lGg/fv/FnzydjO3yUHhMUs59JB0cbPZFjl0ZtQ20s/9jkcRe3sAQaeM/GB1OoNXMUBuEThrrdo1bbbXcOpoMFOkJ7PIpb0yD6HT8GoEGCI3OGUmGIml4MdGMMOtw6lfe+QaUJ/7Q7BXt0q3NI/lE1Fklkok6T70ztCHMkDL5E02GeaTqJcpaWOXFmmDMtObc2N3sRqfkq2RntwT96kGnJrv7oV9Wg/oHsDddCrrI5/zrEGHA8SajfvVPIQAU2zczSU8FvGiPDjV0QZtX6fMMnRaJ+88uBJBZ9NfZvluKnXb3SLrYcpfdBXYwaV7t5ZWX+JF93wif55SlwtBiPiFkNy58XHGjHsRhyF0osgLgsH+Y5aqkHezxYz59id2AOrIznSnQnriA+bU0wZrPGhqYoqxHpI7E4sRIyRWt2EVfkyYOsfY0otnY7olMpiWpRu5c1rb+U1Jqb4gMixavt9Kdf242WcZ1hGjW++qteDbBbkUbDXuROsV216F8O1CRFu8JLD1OaFjdfjAXnS8SYK33/TXcPyhpJfDbZtqWf1Y8ypuvU49g4pVMCVXQ5ex7FrPnOlO3a2CaXYtPbcDSB9xKQhRp3ADAJI+621VTvWbE6OrByuXXjoxdDaTQ1wcjAvk7WmVxkjdQAJkL6ZmlC8nHIZuXn192plr2uxbL6oDPz/RPaLkG9pMT+Sy5gw3XyicQBNfAP04pZAR0aeTdDJEW7KtjbEmxpa757Wl6TQhDwEEHfH4y+TlOCFxgEEMY9Bx5Am4So/hCowomiQQxu2xJdAsGlcCgIewSyUzs6xxBqEMxil4cNc1yugqkO2Kh2VNDFJQq1GNUgQNJ2AwFIcYJiFkH8y6fv4gspxwVUXr9X3S3aNwMkrIx6tUhYwHLTm/67OeJvaJj1lPPVw24XdNhF1jfnM1WDp7MnrKmBJv7SXjTDvfU41lAUDQSY4ebrAGHHmO3PYqQOH6G0e9ZxRCDWgAAUE0TwCApKQQQc28ULMc6a1ZaZpijkTI5UABQiZY6DkCkCvPc0NxDBBU3RpEhifoZXrKVC9UmAZsbgALQSuo2UVcSTuRQnMIJUUcaI8F0wQBdhajjt4lG7fra/WFm7ZY6wy8vL1lgaKb2vmWlp4TH9BhzCALUkRgTIS5cLnHWOf2ZBfHGwWxOiWl7etSL3ckaZlSxPEORmppUj5vNWXPpthkm8VyANgxWoCO7iRJFtgE5y081oxThQtbaelcHNP6YGXqtr/GENVUSc2LT2zXn2yQzsch0oEGNMhNMAGyCkktxj+8PW5/0CxAJ5jFMREa5xS5B2LoESIYQ4oQLpSkiiiiQaSImXGMudxuY2kzo4rpDoRGuSkJ9sEcSamkUnrMuVQoHlFI4qFAb+QQIogAv/IwdV1Gq7+/UnT1mLJcbklpRmIJ6RS5Um648I60ujhZlNWCiFOqYE8JJRF2WcYmhHMpEReCIiptQVx6riimEEZSKbCGoIv1m2MuCBGiVHx+oTOTVIaaE+E5TImDUECIz3xcaAxlAxJGGpItMHIhk3cBQ59tY8xqwQs4pUPMhaRb89An2yNCMG4LJZQSnhJEE+ZDCYA9jWEOBUmR0rDgpAngCHOx9GCYwSCSQ65xjmx+YcUmd6JXpe77VP7WRqo/ExGNWFSONdMLk0T4FhEAJ+5lTKEcqxC3xOgNZUS8uoYwxVQhxqUSVGbN6FAhmCNxO5/PaFAN2B+jMFx1PgwXvAKsvsrS8aW3gu2T2ni6dK/lF99fcdZ/y00Vx2LVl38IWs4FQbS6Eb052po/nymjia6b4baJZR/zlO/j0i3UeLFU+AsR+S1KFvKv3Pf3hPrTQ6T74cOXhoKOrB8ELdeMgKMSHb4Rmb9Fr4wsK9Xiw3574G946ptuuCvcdD3cPBK++lNkPNPMXmQ8ifpl3imUckPZPlnEokQE5pLWJ7D8bbsSgPfWwy4eLIL41/DHgualg4B86Jr2rIaOVUGWLeLvKTZXLrAL0fY7W8dbasHrubjIEbljPEaLiOGXuMhibudymOcIETWSi2W3YIaf6v53Y12+r/u2YZdjF3jWg/3FLkqZqkw2scmkSkCZp1Tmk0pKRykqWWGE5gs1Paw8lSMQOokfXwnN21tu+iuKfjO9YVWaBmQZwVVJCL6Quygji66j0cZkukijyo/lhtNCpDgv5lvPhzfrDQXqPzaaKrfS4+cAlaSUi/dzmpF0k0xBVUQQXZZT3Dal2dQVXNLj0tedaP2LaPlktLVUIrU/QP2xSeivSmSoa97RkXxT5RwpBU2qUiNxwflEEXOhqRr1FVNFP3NfA5X3ezjHY+815rLo5hN/XqdinJy7RFQhISkVJTJ+CTAnTwURtTgU4n3YPwBnTv0aDvTDGVPfhhpYr3nqCTZERoeaJ4TN8QN1EiVk6AgBZPHbJJuE8NQzhQKdHtOkRJCU7oQvTEteRG7ZssV+l7dqYKLY1Wd1MbZzNedUylGVN2FAWZUGoutKeQSPyjiwuM1BOs05ctPwNbwaQFo32aoS+AOyYurKFCAWSK+Aq5GRgmlgCqcsz85geIjmhuPXAuDrokYKycg5Imm9niyMtDNmo00OmaV76iPNXfXr42Vj0PVu8K2nVXS4eDMFRj1/S0jTEih+JO7B4O181MTRmry09HUVrTdUdNi7GjVuEz/3/2mOHuG4f/R850hkcd+yomQTpH8TBx8oQ9YThQaLDbUYx0ZGOsxh3KRFKqaIjc9nlOsOO64m04IcFUOYd88s1YbxET6Wp7xjclQbDP+l15ypU5aLWWKId5tNVCFfxiuqVH2gBSTN9jU3PCQ/CxCQ4Hsr+ucggs7lDCpejIEZkeZeBGD+umCafSk927uSnJ6/bDqNyVoc2NUUcuuJjwoNrTQtHQPplzbHs6T0ukKUmwoZkiTISEKZgJHs0WYa8FtH0ilCeFPnIRQAzSHs/3/0ELlSD2EHB6VYA3Rmfincir17i24lV9VbsZ5B4NslBvapwM36d95vvd75SgThxolOFYenbxrxZl2ErUsCLC2AMQJ1GX4sV6vvkPt6xqb0mRGoMmQp2eVWJOKUobn0ucxVJVKdmOqWCGgsf7BLVAz+XapYb79u4jr7vQvmrbT18/R1FU1tFdO0CXv5W4Ezc8WVXu4Kccwyerwd381z4xnDAGo0wXMitB/DP2o5ThacNNqALAtoAy2WsLk2XDYQ87SHsX9/0dQO//97sFjcTsTirFi3Qkg1Mipbepi/LPzs/NjPvo68Ohs48OxW7LTGevrf7MH2op/fojvQvS9+bsRMLpvRp4+wDVazmIA1FSyhcR4JM7eWVcF2ZPtUdDhbXbjLIX2k/7UoO87DKRykaE5boJnQSLXOx6XHzsfwAui8jrDwI5q5oGYEUobMqYGZ5HzIZdCyvzzFyzKGOyClOJUtsZSwSZWlalEUCIR1LTgkbJ20XLA8LbuMRNcC2/7WK6ckp9quvLDjrkVPrGqaSEimDHs9QRCYd3jnEl1e42qALBATOb1iXJJzges1wgkVG+Eun0SNLkSvzGpUu5SLLELVFDAaObUEhBvKp2940eH1+R1jXPArMn7qMFGsPPKRyUqFXR8+PLt8RNtjtRV2zJT5YaRcFJM9JQspTN6xwzX1xjKXnqXstqAUteJ4Y2ZmUeysUUePACPj7+NOz/Uvp1dXne+t+H6xov8uQDg5nNhwVDHvc4pLl+URZF/01WJ8Qcw3sk7UX7HyGtOD436V3XTM5sj7sRRwadVAc4Br/GMJZjFAFCx32c/aP1qya7w5YbvN6pg8ZdfapO9dp9SzY2yo67mvIpcf2pP/ZAW5ZXl+4cRTVr6jlm/Kbr6yw4qi/2aT1zp4tjliUfVS/aIdx0aXLXLLzn2SaHkojd8rrLKsXesrMezf9vWisEo4bo23xHToSj59VW6I3v/BvXUlQeu7kJ8jQ+5Vjn8eol+Vm0dPVFhFxKoHTnBNPSkqiDpF/tM6Mk4zgD8xJHFldi498fWokHvFJaUWF9/pli8w5t3JMnjxXbHgvCBBeE5ZrD8nTMD2Py4SnhO+mOX6In1ItN8TTBZUeBYLtgrO6V2Fxe7FOzz5dYLlgnNCfEbBNC/2jcbcfYGWd+TnVdbOTQpu6Dn1xI5J+bkXL84vyK+yAc7HtIeJGvca4iiooQ05YJ8ronEGTXNZMohDE+U1zudOxPqDkxsLwiYqwmY3LmEJaIC5mPW/do2+fgnzCu0zaxELWjsyt5zZB72/8K05nglBkTgzMUPKc/IemLi2aTCf+lXKbW/zXL7yWfKrYD7sVjZz1rYJO1bF+6kr31ellCrWKVd7p/11SZRiGEXGF8DyqLSV53INMt+BfJ6HUTd/DJav0NQEOgXMRLgBrGVXa9ZK1THu7XtS+K5UFEP4KdXmgudXby3Z4tLUeuXIsavHcIy5VVt4IBXrIQcaZ3U14WMLzJVR4SiKoUw352pJWFWVfVGIIZT//Ys5R7gE6ea6WSMQEhp285e5O436RgC5Ie6BIhBaOzY65PjVlOryNqALuBo3rCIEyzLn88hEOHg0TIZJNgKJ0GcrxmuhGH9s2Cx4efZTaqnR9QclqYzCSkOqamE2zLIAaUg6UlmLZCHZFmnZHF2ZeY4+WubnFyXLXbMbB9Hw5BUJ2/MqP7muxjVTok/PAhp0xwHb1hUv7ckBpPPdTyclpcMc2H6ykO1Tg8NB4oPLkX28tW5rXNa6zgXBjzZyCFuOrQdzCRuvxKHNkvdMD4JDFCKurP+l9ywfyIghXmJFKaG4UYopdowlATJpmi1B7Jjvy0Ew6yMzcEZCccNLcF8xouRE0V1TOEWc7kK/N5JCiHfgfngVqwJ3ZgGaxZZQUzXeeBWjQjmxgJXFlmZqRA9J+cpY4Z04CxGHyFAjJ53eGNtI5zP7euCPnDr9vyIHHSORpv9XLtZZJzPg1cRgLGtSvhD5SAEbPukhhsCUAG78VpCTzQPcUex121ExsTxpf/enrFvVfRrqdC5JWNK/iF6uJuACRygXf+krrni2YPrulRbw6+7psYJ2m5EjZlpBq5nj8/jES8J61oRnJXATR8waOjmT3+EHv+76tbBr95dLJeXAept2HnrhAjpf7T525KeP+8QVDns/fXpW5q4E89HeXmQeMr/3wvzFzeimTUgzuVHdjLac7IMPsx/azH5KzimwKZCLYhsaq7M6X5xCbDkHJz60mfOUnMvKl4liEjM7E9YZUJeTo4ODG8AvOf0UWrIuH0cccVQvpqESjRjDc5ViwEdJQi3hJflJoqIQAoMYDzEsgVu61VztdwgLRvfkOikVMmkbAJBzmsejoALS0pNFpQjk5qRAR1cIMUqaQK1XKkplqFqjUkqMzTlJEVwZgIhTRNDFVIQsW+eL0qSkk187JcA+JyuDOgoEVUCQzDCn41QEkboozC5SHEX9nHAIEUnPBHqBVDzKqBwlc5xIkhhpAKgsVyJR+iFKzK8eU3dDhQwNPY9CoAQ9riDNrNBTxLIACCQaVSPTACGgiPkKuVoKXZ4b8pQ81Kjg8oFYjvEEqEaWJ4aOJI4CuWOIWiNF5Qb9R2qBXIqgqBLKgbM/kDqRcHqZQo2hoFDGVaud1HyCQDGJAijirEaEJJ21+iO5k+tHywJQCi8QpYkBAkiqWj8aKZCgUqMYa0ySEHpxEuoMURmXgJDgE0YVbpD74f4aSxyFCi4QG8QkFJJ+EU6EvsRN8AIclTlJjzqgRygvqlqBSVmnPp88ZwNvXlnEvmrN8obswhFJw/qkcEHy1JzBMz+eAxAA4hwgM4D0zVfLQPxhJ0ep3UkE9kZ1GI1FE6nX/TqqOtSK5CIpxDiUCiULbBE4qk3+zsmI/atCAAfSEsAS6eYBiizLyl0Zq5qe9smmwxrIneZ0+GnzqrjdNhX+mXGb5ttLxrp0y3svW05Y5W3+GTvPYTYyzy79p4/x5Fz65S3yq17KJaoWKO9Rmj5tcUwUjEgTXF6MhPd2LaPFecFfVqRuQM6kzp7VIYNr7MZZt2ic4scmY3JHS+tSuz9UM7fQ0TRkS4xNhng8zIUnfKtP+px0iPSyLaHb3xDGUBgOQ6gOKo/jN5z3y0rhgDEcaYToyE+n4w79tkOtk4fTIqyyNM4tdTa19jUrg/7/mHbW/bbsNu2WQQ1azy4b2lla4teoyOsgkN9UZQqFcfynV5iyaykebwt+IUI3eT6PpU0QDcvkA3tNpkmql9bW+qppt/TEXStwqTYV2CcTSw+1ZM95nptrZ2yOCew+KY4xQ4w6v2rdhXZBqXXMsORpInvJPClD6ZQZ3d27PsVq+N6u03RC+W9PnIPRkflkZNTAeHFVlThBot8qrjn/q08Q6yU9BsnrsCu1WDF3zcag7qOzuzJbQeaP5A3374wOcsjhPfDALT2mGqJGqSNIXnbF2g3bUSgg1I9tVRFsqzy/bFv9vYwBprX/NWbT79nXZLbcmtQUU/IglpaFi6eZhKNVPFI21yCeWegtSuYH2e3MSd+xacvjh2INi6JYsRRuaPPP56YWuQYi2fzcgB+8bEtK7osm3Yha27Xkk9HH+u/4AgvyMrvV8Ja1FI3mVg92LRl7YlBqOeIW5eSYHjqpt4zZrn6Tv9OMjGuNp4+d0cZ4j04mxzlaiyK9ljpIu4XnrA0M1oX4KwuvkqIz4hQz5CFHtmuckqxdapSWL3dErZFIHgYO6IcrDmtySylCm8MqvNa03eGE4xsIRoyJSaqSQf2CJITJKCxZWvgzIA+4hoMrLy2eFcbz3Z8igRfyZofNpj6OVmyynqfPsrDIc6JpscM8td6dc6WG2HfE2J52UNRXajbgmJSfAyTG9IxYNItspzoqvzw2t9PxmmdM0o7BE5QRZXjBjhPVnIkUFjlgBI8xnt3J8z7ZXLrTdiqLYw9YeLfWnjQITTwTmz7XYi45x2KOK20KziBktnKCLppcwiPDufSAAqYxS03TuHNiCWoFqxLfTLr1M8kJJSwOYUfwfKgdDFMWL5yUmr2X8Tt/sfrr9+90rEmt/X3zZ517p/Wy+tYbXfXt9b4H6vfVg1BSJtG/f2dcTCtzq9aATGd9pWBcd4t9LpDBZ0g1L25U+cMFB5y9Gs3pzbpp+fOSlyMCbsRnYSolZowix3bZ32ylRqZq1pmJVLBMW1srsWxaAg0dfJx2mRzjHHbLrWbDtRt1K5b+FK3MGtgjs5XWlKYaUwaxNYcpcqZGZEnB5uXJZhZ5WWbwg70dyzsP9jz5KNOwBYoZPWDDLP8x3NLCYB0cYfGX9JKPaTLCFvZWMtuNbwp2FiG1MxLoY1tm2rznTSXrnKZZdo09rUqvRNyinRILiKyIk/gic5w83vuF6rVXxQ2mcoRPsa9eu77cPu7YbMvW8NSW0H1PJwv0P5p0rspxduu4T5u30e74QnvuE/YMwzvmEttclePTHXoiA53x9wRf4OuhpTkvI6TLRXcYJgarN+7zlGtc0VlJqZbLQ4/u0PhHeLjUqK1e7ojeRYof6jR/4IpLpobBAqH1Izl1kmmb70m/NxAMH2t/4ZSf9PuToDWzsGqrY89lAPgw9kC2x2XfO9+DZobG/4Nis+bPzXeDH8jWUm7Te7Uz+15xyPRnFwhVyGI2hXasiUyQljc4mJyGzZ5SkxVevoikjR064OS4s3NOFtlFDx4aabNLqQNNwUVDAzrnBoxv7iudJpvOa2387eY1t5pbWjIKZTQQ9PijF9u+sg/pq2SzJ0TnB1Tas91vbL+KUvpr2rRbza7cxyYrZSWwgUwlELISkg2whAQpoJ5MXY7Avmq8RN+vL8G/kMWugxoSqpvUDZhK1aBseD6oTdn2eFALdWWLukUVcD+p7dagbgMN/xv/AHkkegJpAeD//pxAtZf0fXrfdRGsC0X73ynfl0khPIdExd3HkW9x6H6ZNig/h9Ihz2FxcGwy1c1p5JnpO8EfaclDw/KTyENW6oabHcD11DT9e+KI6tKovo6WDMX/kDwMmLfc987hhH+jMf9q0uPWcHNk6P2/JzpRP6Mq/rqN/D/kdAr8FeQmiDKWWF9g8BL4x+JK95COsL6rpoHqTt/y6+hR5gNYvRAnTFQxwhSqpumUvMyUNFllyqrWMnVLtj6/SZdrCiHVsOiRwwTtPjJRq09Mod0XOiV/ZUp6/WXK2kPB1B0JXRabzF5twIMPB5IhEsudQEU21nE+OLSfgg6ZdOfF4ZZ/cB7PikG3f13/AxaciSh+rYfMsYgd5eLbGRhkGYnCUQKKu4a5GPV6MStqV1FeOtA4kBzsGQnLXWFUZOPu+eBm46egQyad4KKrwv/gPD64MNDVV6B/ZKt00bwY/VoP8UCNhac7yiPH91CFbOcnoWCHS0Bxl4mhFyO9wc1iVbmbviPvL7LOd0kSeyxURNV0w7R+xOyd7bie79yFS1eu/WSr3bn3S+xIefLsxStRrm9Lq7NAKwQTpE1QWqZQZ/QGSw/IcBaBOWBi2g3HJQtHb2v9npFK55jD0TvZCKI5pWB9YwO4RdsQePzhfkR+AbXhhkY2YdnIIcKQ19ChP5o7ab1UjGSw1e73Be1kfsGw/oueye0qk8nhPzFaPaYNuPoOK7Zt/k3/Zha44Sn4QO1OR9xh8HygJBqyOpdUi8MWT70p3e471LAK6T14vEV50ayWkaa6SvngOMs41tsq8O6htb8Dl63wwOEKb5VSCQAAAA==') format('woff2'), + url('iconfont.woff?t=1568104774274') format('woff'), + url('iconfont.ttf?t=1568104774274') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1568104774274#iconfont') format('svg'); /* iOS 4.1- */ } .iconfont { @@ -123,3 +123,15 @@ content: "\e636"; } +.iconleixingxuanze:before { + content: "\e637"; +} + +.iconzhongzhi:before { + content: "\e638"; +} + +.iconriqixuanze:before { + content: "\e639"; +} + diff --git a/frontend/icon/iconfont.eot b/frontend/icon/iconfont.eot index 299eae4c280f9bca678bd5d7a0163cdf3749df0b..7a3b48fd29bd0c2886b17f702a4e3e67f64dbd1f 100644 GIT binary patch delta 1055 zcmYLGUuau(6h7zvZ<3odH_1)brZ-LV?@qgHZQ7ef+awNY#{?ZxhSaSR+cZf@(pqPU zq3({fm8mc{@}dtu3?FoRaU%#D_Q98lFM9~eSYPg22i`Of*y_dDm@ z-#z#C+>?3X$q2ydk*k8i1#jM3xSIXI90tI305~&W$*nwC-MIn4oCaWpLiz2*XI=M2 z0RAI@*zICIx1i3RyiT>h5R4)T;!o@~;@gC9v2wn)t`P&gM{d2mJfB1)3OaD-mSR92SXJb&Zf`l|p(zow!On+q7q1OTa+uyE^U z@HNN8-(clP0Qm8f#?=3D{|*OifpQ6$j!M?)3pBsMYnW;lna$=E#@5_nT!$}rPXI0f z+hxNPEmVFPI5P|F_@Ks!tQ}*~ z7#lT`2D94^y8X7twy2ZmcCCD`y{+KS?tZjAmLnwnZWDTK_$Bs5ZFtPVTRFb{U2j@6(<}DT{_hJBqP5+A)A?Vl;zkjH82m(nx5m+s+I{W6>eO z?NtYphQfaOLi_IZm(~VdV&5T2n6xO8RF);VPmXCz(-YZ~jYY#)Y+Pw1to?4w2F`4r z9bt}racMeqaV8>5j(+=^gEP~jzrRORPnG>XOqJjJ`2BJ!Wmr4|)~(Gv_H?!@(}uR$ zyX^C{pQA7VQ*a7igqPtA%)%VJ4vVlvmk*7PMPnhlzb8m+NEkp$JWjXj4UQT~XB=Z= zX;i%)w;+b-Ga_kBXz2BrZaYR}NGdIU+!Rx1!@9<3 zI=0vJN&T>$MIDu>8l>~QCWF5i1skPsyS|7`z|$uv%! zz~{1LnQWI(Xw5y{WH8YD{cnV#%^v LdZTop(cb?B-&Wj( delta 357 zcmey7yd#dyLZ5+Qg5E?nGnUPKcI*=!y6ZI=7#M397#PBma}x_*SXW(QU|@0q;ydX% zm1%|(Wp*(zu*NVjsK#WZCZ>p4@MQzlJ^*5~44?q}J?42p_8uTs$;d6KD3AuS7#Obr ziGrN`SnS76xWlAfJPQ z2_y;xAbm2Ek1;M}G@G2k)H3-8ldxt7Sd@XGiGdl+(gD(3K&2fFEDT{l^(;UL)c4G6 zvI(>M=0;{7M$QnBSwJAYc^Zow<76f_3!nv?9oS-3H~-X~z{Dssxy!&}^9ciPMrNQY E0Oj*d4gdfE diff --git a/frontend/icon/iconfont.js b/frontend/icon/iconfont.js index 5c770383c..50ec45977 100644 --- a/frontend/icon/iconfont.js +++ b/frontend/icon/iconfont.js @@ -1 +1 @@ -!function(m){var c,h='',l=(c=document.getElementsByTagName("script"))[c.length-1].getAttribute("data-injectcss");if(l&&!m.__iconfont__svg__cssinject__){m.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}!function(c){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(c,0);else{var l=function(){document.removeEventListener("DOMContentLoaded",l,!1),c()};document.addEventListener("DOMContentLoaded",l,!1)}else document.attachEvent&&(t=c,i=m.document,o=!1,(s=function(){try{i.documentElement.doScroll("left")}catch(c){return void setTimeout(s,50)}h()})(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,h())});function h(){o||(o=!0,t())}var t,i,o,s}(function(){var c,l;(c=document.createElement("div")).innerHTML=h,h=null,(l=c.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",function(c,l){l.firstChild?function(c,l){l.parentNode.insertBefore(c,l)}(c,l.firstChild):l.appendChild(c)}(l,document.body))})}(window); \ No newline at end of file +!function(s){var c,h='',l=(c=document.getElementsByTagName("script"))[c.length-1].getAttribute("data-injectcss");if(l&&!s.__iconfont__svg__cssinject__){s.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}!function(c){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(c,0);else{var l=function(){document.removeEventListener("DOMContentLoaded",l,!1),c()};document.addEventListener("DOMContentLoaded",l,!1)}else document.attachEvent&&(t=c,i=s.document,o=!1,(z=function(){try{i.documentElement.doScroll("left")}catch(c){return void setTimeout(z,50)}h()})(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,h())});function h(){o||(o=!0,t())}var t,i,o,z}(function(){var c,l;(c=document.createElement("div")).innerHTML=h,h=null,(l=c.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",function(c,l){l.firstChild?function(c,l){l.parentNode.insertBefore(c,l)}(c,l.firstChild):l.appendChild(c)}(l,document.body))})}(window); \ No newline at end of file diff --git a/frontend/icon/iconfont.svg b/frontend/icon/iconfont.svg index b4143a8cc..a06773e02 100644 --- a/frontend/icon/iconfont.svg +++ b/frontend/icon/iconfont.svg @@ -101,6 +101,15 @@ Created by iconfont + + + + + + + + + diff --git a/frontend/icon/iconfont.ttf b/frontend/icon/iconfont.ttf index 5d38734c4b239ca2f6457ce0d81582acdc61a9b0..9bfe4356845c2e3012885f6ace429e4c322ce293 100644 GIT binary patch delta 1051 zcmYLGO>7%g5T4of{>1j$@!H;X6K8E_ZLf=xw8V*BLt=-jN~$0MLQ#c60&-i&c4Q|Z zl*m}28#xIo97@n$;J~5cK-)`^A`lfm^wJ|zk*W%$s8p&{E~P{QE{Hgc9VBM;&3yB{ zH}l?`-I>34en&S40B{`u&RwYHSN2w)-UMJ?17P`L<^6>hy$=Kc?lS=6yHX*4QJFn^ zgZ4fmq)H?R57}$Pn}leoda1Uq5d*wWZoRU6A;0=({W{gZLHR^AUt7U(CQIu9%EL?f zY9Tw*)A|5lkPc+3E6eX*x_N*7O@I@3XwxU3HuYQxkoFQTe*JLpZTHw;;INSZ@bedq z$^YZwZ5yyf%0*z>Dp|WOWNCN}Gu9p4vi8wwongGkuXa`dt^nI%0~GDF{VLdCj%sZ5 zQSFnAwZTkv1)&eyIHb_vRKB^ba=<)hC(u4FPPyT8w|y;Z=j_H-qhP?NpOo}u}i zfH9baX?O)*hjTCsZ^3z3fJM5zJ~|RNbh^JkLad+fLrVM}pQ1*FQ)$l-8Y5X$RKJfG zbb3ZCi%AVtzv**f+(1%k@S~mxJF16pR98Jozito&f}haN)&Dqqc_5)NS^`^ZiSfj7 zEkW7eT7tnuGZ0l#kr_FF2fv{zdlXbiVVVMeAo2n$7fr5ia;Ev~_V(k=w#{!o-X>%A zCF+L>O`=Gi*ug9*)cGqd;i7&4*_4lw-)M8sh9yR)_;oZid17lL9P_C7iinaIhOZ9?SFD)+>>!q@Nwfs)`NTa#` E3q!lwL;wH) delta 351 zcmcbRG$D3^a=j)417i&X14CGHZeqa;>#9o(3`{OSd?!7pGR<(J%q|87)))o`)tHRb z#1t_LzHFe{2S99=0Tf`r$23ZtJNZ&u{aUftv*=z`$^`C)FH5|KH8R!0Za-b1*Q0M1cULPiC?l<3dKW$p;u) zCI>JHYj%J|85o)vn87R^Ak76-+QGoW5C&Aw0)#+)&&($GFu4PjuuXo*^l$P8M%Kyq xnb|l)K*j=r^yYWWZj6(oSS^5dZJxmztGYQ*cLEcm%;ZP<7Mm3exEYy&ssMnyOoRXc diff --git a/frontend/icon/iconfont.woff b/frontend/icon/iconfont.woff index 4c84e541c50c6ea3d7fc0fad5ac7c5e90b70a3db..232d876edffeeba76f496362a0e8cac636e0e810 100644 GIT binary patch delta 8194 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 delta 7703 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 Rq9yw7ErJK&3;X6}GXUVW3Yh=^ diff --git a/frontend/icon/iconfont.woff2 b/frontend/icon/iconfont.woff2 index 822f69092c9c04d5732f8218feae786154b47112..76ebc2c28157265276113e1966eabdef00e2d117 100644 GIT binary patch literal 7348 zcmV;l982SOPew8T0RR91035Uc3jhEB05MPi032ih0RR9100000000000000000000 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 KimP{W0ssJrkw+H* diff --git a/frontend/package.json b/frontend/package.json index b3cccd760..878d10ebd 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,6 +16,7 @@ "echarts": "^4.1.0", "fs": "^0.0.1-security", "irisnet-crypto": "git+https://github.com/irisnet/irisnet-crypto.git#v1.3.1", + "iview": "^3.5.0", "jquery": "^3.2.1", "js-yaml": "^3.13.1", "lodash.defaultsdeep": "^4.6.1", diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 0b6423e7c..1636c681f 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -418,5 +418,12 @@ } } } + //解决在移动端,日期选择器会移出到窗口以外 + .ivu-date-picker:nth-of-type(2){ + .ivu-select-dropdown{ + left: 150px !important; + } + } } + diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js index c3917f105..432583275 100644 --- a/frontend/src/api/index.js +++ b/frontend/src/api/index.js @@ -84,6 +84,8 @@ const urlApi = { tokenStatsDistribution: '/api/tokenstats/account_total', //txs allTypeList:'/api/txs?page={pageNumber}&size={pageSize}&total=true', + allTxType:'/api/tx_types/{type}', + getTxListByFilterCondition:'/api/txs?page={pageNumber}&size={pageSize}&total=true&txType={txType}&status={status}&beginTime={beginTime}&endTime={endTime}', allTypeListQuireHeight:'/api/txs?page={pageNumber}&size={pageSize}&height={height}&total=true', //assetInfo assetTokenInfo:'/api/asset/tokens/{tokenId}', @@ -94,6 +96,7 @@ const urlApi = { //assetList nativeAssetList:'/api/asset/tokens?source=native', gatewayAssetList:'/api/asset/tokens?source=gateway', + }; export default urlApi diff --git a/frontend/src/components/AllTxTypeList.vue b/frontend/src/components/AllTxTypeList.vue index 009f1bdea..9cf5b4738 100644 --- a/frontend/src/components/AllTxTypeList.vue +++ b/frontend/src/components/AllTxTypeList.vue @@ -2,8 +2,47 @@
-

Transactions

-
+
+

Transactions

+
+
+
+ + {{item.label}} + + + {{item.label}} + +
+
+ + ~ + +
+
+
+
Search
+
+
+
+
+
+
+ +
+
{ + try { + if(res){ + this.txTypeOption = res.map(item => { + return { + value : Tools.firstWordUpperCase(item), + label : item + } + }); + let allTxType = { + value:'allTxType', + label:'All TXType', + slot:'allTXType' + }; + this.txTypeOption.unshift(allTxType) + } + }catch (e) { + console.error(e) + } + }) + }, + resetFilterCondition(){ + this.value = 'allTxType'; + this.statusValue = 'allStatus'; + this.startTime = ''; + this.endTime = ''; + }, forCurrentPageNum() { let currentPageNum = 1; let urlPageSize = this.$route.query.page && Number(this.$route.query.page); @@ -74,28 +199,63 @@ if(Fee.amount && Fee.denom){ return `${Tools.formatStringToFixedNumber(String(Tools.formatNumber(Fee.amount)),4)} ${Tools.formatDenom(Fee.denom).toUpperCase()}`; } + }, + getTxListByFilterCondition(){ + let param = {}; + param.getTxListByFilterCondition = {}; + param.getTxListByFilterCondition.pageNumber = this.currentPageNum; + param.getTxListByFilterCondition.pageSize = this.pageSize; + param.getTxListByFilterCondition.txType = this.TxType; + param.getTxListByFilterCondition.status = this.txStatus; + param.getTxListByFilterCondition.beginTime = this.filterStartTime; + param.getTxListByFilterCondition.endTime = this.filterEndTime; + Service.commonInterface(param, (res) => { + try { + if(res && res.Data) { + this.countNum = res.Count; + sessionStorage.setItem('txsTotal',res.Count); + this.allTxTypeList = res.Data.map( item => { + return { + txHash:item.hash, + block: item.block_height, + type: item.type, + fee: this.formatFee(item.fee), + signer: item.signer, + status: item.status, + timestamp: Tools.format2UTC(item.timestamp) + } + }) + }else { + this.allTxTypeList = [] + + } + }catch (e) { + console.error(e) + } + }) }, getAllTxTypeList(){ + let that = this; Service.commonInterface({allTypeList:{ pageNumber:this.currentPageNum, pageSize: this.pageSize, }},(res) => { try { if(res){ - this.countNum = res.Count; + this.firstEntry = true; + that.countNum = res.Count; sessionStorage.setItem('txsTotal',res.Count); - this.allTxTypeList = res.Data.map( item => { + that.allTxTypeList = res.Data.map( item => { return { txHash:item.hash, block: item.block_height, type: item.type, - fee: this.formatFee(item.fee), + fee: that.formatFee(item.fee), signer: item.signer, status: item.status, timestamp: Tools.format2UTC(item.timestamp) } }) - } }catch (e) { console.error(e) @@ -108,7 +268,10 @@ // 有时候 mounted 方法不起作用,为此添加该 watch this.currentPageNum = Number(this.$route.query.page || 1); this.getAllTxTypeList(); - } + }, + startTime(startTime){ + console.log(startTime,"开始的时间") + } }, } @@ -117,7 +280,7 @@ .all_type_list_title_container{ width: 100%; position: fixed; - z-index: 1; + z-index: 3; background: #fff; .all_type_list_title_wrap{ max-width: 12.8rem; @@ -126,11 +289,61 @@ display: flex; justify-content: space-between; align-items: center; - .all_type_list_title{ - height: 0.7rem; - margin: 0; - line-height: 0.7rem; - font-size: 0.18rem; + .all_type_list_filter_content{ + display: flex; + align-items: center; + .all_type_list_title{ + height: 0.7rem; + margin: 0; + line-height: 0.7rem; + font-size: 0.18rem; + } + .filter_content{ + margin-left: 0.1rem; + .tx_type_content{ + display: flex; + align-items: center; + .tx_type_mobile_content{ + display: flex; + align-items: center; + .ivu-select{ + margin-right: 0.1rem; + width: 1.3rem; + .ivu-select-item{ + text-indent: 0.1rem; + font-size: 0.14rem; + line-height: 0.18rem; + } + } + .joint_mark{ + margin: 0 0.1rem; + } + .ivu-date-picker{ + width: 1.3rem; + } + .reset_btn{ + background: var(--bgColor); + color: #fff; + border-radius: 0.04rem; + margin-left: 0.1rem; + i{ + padding: 0.08rem; + font-size: 0.14rem; + line-height: 1; + display: inline-block; + } + } + .search_btn{ + background: var(--bgColor); + margin-left: 0.1rem; + color: #fff; + border-radius: 0.04rem; + padding: 0.05rem 0.18rem; + font-size: 0.14rem; + } + } + } + } } } } @@ -140,6 +353,15 @@ max-width: 12.8rem; margin: 0 auto; overflow-x: auto; + .no_data_img_content{ + display: flex; + justify-content: center; + border-top: 0.01rem solid #eee; + border-bottom: 0.01rem solid #eee; + font-size: 0.14rem; + height: 2.8rem; + align-items: center; + } } .pagination_content{ max-width: 12.8rem; @@ -147,10 +369,51 @@ text-align: right; } } + .el-select-dropdown__item{ + padding-left: 0.15rem; + } @media screen and (max-width: 910px){ .all_type_list_title_container{ position: static; padding-left: 0.1rem; + .all_type_list_title_wrap{ + .all_type_list_filter_content{ + flex-direction: column; + align-items: flex-start; + width: 100%; + .filter_content{ + width: 100%; + margin-left: 0; + display: flex; + .tx_type_content{ + width: 100%; + display: flex; + flex-direction: column; + align-items: flex-start; + .tx_type_mobile_content{ + width: 3.45rem; + display: flex; + justify-content: space-between; + margin-bottom: 0.1rem; + .ivu-select{ + margin-right: 0; + width: 1.6rem; + } + .ivu-date-picker{ + width: 1.6rem; + } + .reset_btn{ + margin-left: 0; + } + .search_btn{ + flex: 1; + text-align: center; + } + } + } + } + } + } } .all_type_list_table_container{ padding-top: 0; @@ -159,6 +422,8 @@ .pagination_content{ padding-right: 0.1rem; } + .mobile_style{ + display: none; + } } - diff --git a/frontend/src/components/NativeAssetList.vue b/frontend/src/components/NativeAssetList.vue index ea33823d2..1ca4c6547 100644 --- a/frontend/src/components/NativeAssetList.vue +++ b/frontend/src/components/NativeAssetList.vue @@ -103,7 +103,7 @@ } .native_asset_list_content{ max-width: 12.8rem; - margin: 0 auto; + margin: 0 auto 0.4rem auto; display: flex; flex-direction: column; align-items: center; diff --git a/frontend/src/components/ProposalsDetail.vue b/frontend/src/components/ProposalsDetail.vue index 706d7b13b..136f46f7d 100644 --- a/frontend/src/components/ProposalsDetail.vue +++ b/frontend/src/components/ProposalsDetail.vue @@ -626,7 +626,7 @@ export default { color: var(--contentColor); } .information_value { - color: var(--contentColor); + color: var(--titleColor); word-break: break-all; } .vote-details-content { @@ -687,7 +687,7 @@ pre { border-radius: 1px; } .information_pre { - color: var(--contentColor); + color: var(--titleColor); word-wrap: break-word; word-break: break-all; } diff --git a/frontend/src/components/ValidatorListPage.vue b/frontend/src/components/ValidatorListPage.vue index 5e6442786..b099af3d8 100644 --- a/frontend/src/components/ValidatorListPage.vue +++ b/frontend/src/components/ValidatorListPage.vue @@ -155,7 +155,6 @@ this.items = result.map((item) => { return { validatorStatus: status, - url:require('../assets/header_img.png'), moniker: Tools.formatString(item.description.moniker,15,'...'), operatorAddress: item.operator_address, commission: `${(item.commission.rate * 100).toFixed(2)} %`, @@ -171,7 +170,6 @@ url: item.icons || require('../assets/header_img.png') } }); - // this.items = this.getValidatorHeaderImg(this.items); this.showNoData = false; }else { this.showNoData = true; @@ -187,23 +185,6 @@ } }) }, - getValidatorHeaderImg(data){ - let url = 'https://keybase.io/_/api/1.0/user/lookup.json?fields=pictures&key_suffix='; - for(let i = 0; i < data.length; i++){ - if(data[i].identity){ - Http.http(`${url}${data[i].identity}`).then(res =>{ - if(res && res.them && res.them[0].pictures && res.them[0].pictures.primary && res.them[0].pictures.primary.url){ - data[i].url = res.them[0].pictures.primary.url; - }else { - data[i].url = require('../assets/header_img.png'); - } - }) - }else { - data[i].url = require('../assets/header_img.png'); - } - } - return data - }, getValidatorStatus(index){ let validatorStatus; switch (index) { diff --git a/frontend/src/components/commonComponents/MProposalsEchart.vue b/frontend/src/components/commonComponents/MProposalsEchart.vue index ff1cdcc23..a89f61f2b 100644 --- a/frontend/src/components/commonComponents/MProposalsEchart.vue +++ b/frontend/src/components/commonComponents/MProposalsEchart.vue @@ -21,7 +21,7 @@
- VotingPeriod + DepositPeriod
GovTallyingProcedure
diff --git a/frontend/src/main.ts b/frontend/src/main.ts index 67397fdc6..dfad1077d 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -15,6 +15,12 @@ import filters from './filters'; Vue.use(filters); /*引入自定义组件*/ import MTable from './components/commonComponents/MTable.vue'; +import iView from 'iview'; +import select from 'iview/src/components/select' +import datePicker from 'iview/src/components/date-picker' +import locale from 'iview/src/locale/lang/en-US' +import 'iview/dist/styles/iview.css' +Vue.use(iView,select,datePicker,locale); Vue.component('MTable', MTable); import axios from "axios" From 63c8dbded114304cd2ffac380b83e304509651e6 Mon Sep 17 00:00:00 2001 From: wenwu Date: Wed, 11 Sep 2019 11:47:10 +0800 Subject: [PATCH 009/103] for asset params --- backend/lcd/gov.go | 34 ++++++++++++++++++-- backend/orm/document/gov_params.go | 27 +++++++++++----- backend/service/service_gov_params.go | 46 +++++++++++++++++++++++++-- 3 files changed, 95 insertions(+), 12 deletions(-) diff --git a/backend/lcd/gov.go b/backend/lcd/gov.go index 98eedd3cf..ea2dc6293 100644 --- a/backend/lcd/gov.go +++ b/backend/lcd/gov.go @@ -16,6 +16,7 @@ const ( GovModuleMint = "mint" GovModuleDistr = "distr" GovModuleSlashing = "slashing" + GovModuleAsset = "asset" //auth key GovModuleAuthGasPriceThreshold string = "gas_price_threshold" GovModuleAuthTxSize string = "tx_size" @@ -39,13 +40,21 @@ const ( GovModuleSlashingSlashFractionDoubleSign = "slash_fraction_double_sign" GovModuleSlashingSlashFractionDowntime = "slash_fraction_downtime" GovModuleSlashingDowntimJailDuration = "downtime_jail_duration" + + //asset key + GovModuleAssetAssetTaxRate = "asset_tax_rate" + GovModuleAssetIssueTokenBaseFee = "issue_token_base_fee" + GovModuleAssetMintTokenFeeRatio = "mint_token_fee_ratio" + GovModuleAssetCreateGatewayBaseFee = "create_gateway_base_fee" + GovModuleAssetGatewayAssetFeeRatio = "gateway_asset_fee_ratio" ) var GovModuleList = []string{GovModuleAuth, GovModuleStake, GovModuleMint, GovModuleDistr, GovModuleSlashing} type RangeDescription struct { - Range string - Description string + Range string + Description string + InitialValue string } func GetAuthKeyWithRangeMap() map[string]RangeDescription { @@ -90,6 +99,16 @@ func GetSlashingKeyWithRangeMap() map[string]RangeDescription { result[GovModuleSlashingDowntimJailDuration] = RangeDescription{Range: "0,604800000000000", Description: "Jail duration of Downtime"} return result } + +func GetAssetKeyWithRangeMap() map[string]RangeDescription { + result := map[string]RangeDescription{} + result[GovModuleAssetAssetTaxRate] = RangeDescription{InitialValue: "0.4", Range: "0,1", Description: "Community Tax rate for issuing or minting assets"} + result[GovModuleAssetIssueTokenBaseFee] = RangeDescription{InitialValue: "60000", Range: "0,", Description: "Benchmark fees for issuing Fungible Token"} + result[GovModuleAssetMintTokenFeeRatio] = RangeDescription{InitialValue: "0.1", Range: "0,1", Description: "Fungible Token mint rate (relative to the issue fee)"} + result[GovModuleAssetCreateGatewayBaseFee] = RangeDescription{InitialValue: "120000", Range: "0,", Description: "Benchmark fees for creating Gateways"} + result[GovModuleAssetGatewayAssetFeeRatio] = RangeDescription{InitialValue: "0.1", Range: "0,1", Description: "Rate of issuing gateway tokens (relative to the issue fee of native tokens)"} + return result +} func GetGovModuleParam(module string) ([]byte, error) { url := fmt.Sprintf(UrlGovParam, conf.Get().Hub.LcdUrl, module) return utils.Get(url) @@ -129,6 +148,10 @@ func GetGovSlashingParam() (map[string]interface{}, error) { return GetGovModuleParamMap(GovModuleSlashing) } +func GetGovAssetParam() (map[string]interface{}, error) { + return GetGovModuleParamMap(GovModuleAsset) +} + func GetAllGovModuleParam() (map[string]interface{}, error) { result := map[string]interface{}{} @@ -153,6 +176,10 @@ func GetAllGovModuleParam() (map[string]interface{}, error) { if err != nil { return nil, err } + assetMap, err := GetGovAssetParam() + if err != nil { + return nil, err + } for k, v := range authMap { result[k] = v @@ -170,5 +197,8 @@ func GetAllGovModuleParam() (map[string]interface{}, error) { for k, v := range slashingMap { result[k] = v } + for k, v := range assetMap { + result[k] = v + } return result, nil } diff --git a/backend/orm/document/gov_params.go b/backend/orm/document/gov_params.go index ffc77dd8b..e88b9cca4 100644 --- a/backend/orm/document/gov_params.go +++ b/backend/orm/document/gov_params.go @@ -1,6 +1,7 @@ package document import ( + "encoding/json" "fmt" "github.com/irisnet/explorer/backend/logger" @@ -19,14 +20,24 @@ const ( ) type GovParams struct { - Module string `bson:"module" json:"module"` - Key string `bson:"key" json:"key"` - Type string `bson:"type" json:"type"` - Range string `bson:"range" json:"range"` - GenesisValue string `bson:"genesis_value" json:"genesis_value"` - CurrentValue string `bson:"current_value" json:"current_value"` - Description string `bson:"description" json:"description"` - Note string `bson:"note" json:"note"` + Module string `bson:"module" json:"module"` + Key string `bson:"key" json:"key"` + Type string `bson:"type" json:"type"` + Range string `bson:"range" json:"range"` + InitialValue string `bson:"initial_value" json:"initial_value"` + GenesisValue string `bson:"genesis_value" json:"genesis_value"` + CurrentValue interface{} `bson:"current_value" json:"current_value"` + Description string `bson:"description" json:"description"` + Note string `bson:"note" json:"note"` +} + +type AmountCurrentValue struct { + Amount string `bson:"amount" json:"amount"` + Denom string `bson:"denom" json:"denom"` +} + +func (v *AmountCurrentValue) BuildAmountCurrentValueByUnmarshalJson(data []byte) error { + return json.Unmarshal(data, v) } type Range struct { diff --git a/backend/service/service_gov_params.go b/backend/service/service_gov_params.go index 12216c972..f987046d4 100644 --- a/backend/service/service_gov_params.go +++ b/backend/service/service_gov_params.go @@ -2,10 +2,10 @@ package service import ( "fmt" - "github.com/irisnet/explorer/backend/lcd" "github.com/irisnet/explorer/backend/logger" "github.com/irisnet/explorer/backend/orm/document" + "github.com/irisnet/explorer/backend/utils" "gopkg.in/mgo.v2/bson" "gopkg.in/mgo.v2/txn" ) @@ -173,6 +173,40 @@ func (_ GovParamsService) GetGovSlashingParamList(genesisMap, currentMap map[str return result, nil } +func (_ GovParamsService) GetGovAssetParamList(currentMap map[string]interface{}) ([]document.GovParams, error) { + assetKeyRangeMap := lcd.GetAssetKeyWithRangeMap() + result := make([]document.GovParams, 0, len(assetKeyRangeMap)) + for k, v := range assetKeyRangeMap { + currentValueStr := "" + currentValueMap := document.AmountCurrentValue{} + switch curV := currentMap[k].(type) { + case string: + currentValueStr = curV + case map[string]interface{}: + if err := currentValueMap.BuildAmountCurrentValueByUnmarshalJson(utils.MarshalJsonIgnoreErr(curV)); err != nil { + logger.Error("BuildAmountCurrentValueByUnmarshalJson have error", logger.String("err", err.Error())) + } + } + + tmp := document.GovParams{ + Module: lcd.GovModuleAsset, + Key: k, + Range: v.Range, + Description: v.Description, + InitialValue: v.InitialValue, + } + + if currentValueStr != "" { + tmp.CurrentValue = currentValueStr + + } else if currentValueMap.Amount != "" || currentValueMap.Amount != "" { + tmp.CurrentValue = currentValueMap + } + result = append(result, tmp) + } + return result, nil +} + func (gov GovParamsService) GetDbInitGovModuleParamList(genesisMap, currentMap map[string]interface{}) ([]document.GovParams, error) { authList, err := gov.GetGovAuthParamList(genesisMap, currentMap) @@ -205,7 +239,15 @@ func (gov GovParamsService) GetDbInitGovModuleParamList(genesisMap, currentMap m if err != nil { return nil, err } - return append(slashingList, mintList...), nil + + slashingList = append(slashingList, mintList...) + + assetList, err := gov.GetGovAssetParamList(currentMap) + if err != nil { + return nil, err + } + + return append(assetList, slashingList...), nil } func init() { From bd2878dcb93cfe1e87bcfac2986043c81e78d23a Mon Sep 17 00:00:00 2001 From: wenwu Date: Wed, 11 Sep 2019 13:33:37 +0800 Subject: [PATCH 010/103] modify task gov_params --- backend/orm/document/gov_params.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/backend/orm/document/gov_params.go b/backend/orm/document/gov_params.go index e88b9cca4..c46113267 100644 --- a/backend/orm/document/gov_params.go +++ b/backend/orm/document/gov_params.go @@ -3,6 +3,7 @@ package document import ( "encoding/json" "fmt" + "github.com/irisnet/explorer/backend/utils" "github.com/irisnet/explorer/backend/logger" "github.com/irisnet/explorer/backend/orm" @@ -90,14 +91,22 @@ func (_ GovParams) UpdateCurrentModuleParamValue(kv map[string]interface{}) erro for k, v := range kv { vStr := "" + currentValueMap := AmountCurrentValue{} + update := bson.M{} switch vType := v.(type) { case string: vStr = vType + update["$set"] = bson.M{GovParamsFieldCurrentValue: vStr} + case map[string]interface{}: + if err := currentValueMap.BuildAmountCurrentValueByUnmarshalJson(utils.MarshalJsonIgnoreErr(vType)); err != nil { + logger.Error("BuildAmountCurrentValueByUnmarshalJson have error", logger.String("err", err.Error())) + } + update["$set"] = bson.M{GovParamsFieldCurrentValue: currentValueMap} default: vStr = fmt.Sprintf("%v", vType) + update["$set"] = bson.M{GovParamsFieldCurrentValue: vStr} } sel := bson.M{GovParamsFieldKey: k} - update := bson.M{"$set": bson.M{GovParamsFieldCurrentValue: vStr}} bulk.Update(sel, update) From 9142034e4a8813d00f203ffa0117914de1e86963 Mon Sep 17 00:00:00 2001 From: wenwu Date: Wed, 11 Sep 2019 15:25:10 +0800 Subject: [PATCH 011/103] for asset frontend --- frontend/src/components/ParametersPage.vue | 675 +++++++++++------- .../commonComponents/MParametersCard.vue | 7 + 2 files changed, 428 insertions(+), 254 deletions(-) diff --git a/frontend/src/components/ParametersPage.vue b/frontend/src/components/ParametersPage.vue index c339c8c2c..e83b01a79 100644 --- a/frontend/src/components/ParametersPage.vue +++ b/frontend/src/components/ParametersPage.vue @@ -5,7 +5,11 @@
-
+
{{index}}
@@ -15,7 +19,7 @@
- Genesis Value + {{index === 'Asset' ? 'Initial Value' : 'Genesis Value'}}
@@ -26,7 +30,7 @@
- +
@@ -34,282 +38,445 @@ diff --git a/frontend/src/components/commonComponents/MParametersCard.vue b/frontend/src/components/commonComponents/MParametersCard.vue index a0b356b7c..e32340cd6 100644 --- a/frontend/src/components/commonComponents/MParametersCard.vue +++ b/frontend/src/components/commonComponents/MParametersCard.vue @@ -79,6 +79,13 @@ export default { } } } +.Asset { + .content { + .progress { + background-color: #D9D9FF!important; + } + } +} .m_parameters_container { width: 413px; height: 164px; From 7a06a3c36b05945f79061c89275159106679a4af Mon Sep 17 00:00:00 2001 From: wenwu Date: Wed, 11 Sep 2019 15:33:37 +0800 Subject: [PATCH 012/103] modify backend/orm/document/gov_params.go --- backend/orm/document/gov_params.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/orm/document/gov_params.go b/backend/orm/document/gov_params.go index c46113267..910f8a4c3 100644 --- a/backend/orm/document/gov_params.go +++ b/backend/orm/document/gov_params.go @@ -91,13 +91,13 @@ func (_ GovParams) UpdateCurrentModuleParamValue(kv map[string]interface{}) erro for k, v := range kv { vStr := "" - currentValueMap := AmountCurrentValue{} update := bson.M{} switch vType := v.(type) { case string: vStr = vType update["$set"] = bson.M{GovParamsFieldCurrentValue: vStr} case map[string]interface{}: + currentValueMap := AmountCurrentValue{} if err := currentValueMap.BuildAmountCurrentValueByUnmarshalJson(utils.MarshalJsonIgnoreErr(vType)); err != nil { logger.Error("BuildAmountCurrentValueByUnmarshalJson have error", logger.String("err", err.Error())) } From 76599d3d0c01387e636be2178209a858705f9aa1 Mon Sep 17 00:00:00 2001 From: zhjibi742626083 Date: Wed, 11 Sep 2019 16:00:46 +0800 Subject: [PATCH 013/103] add filters to the Txs page --- frontend/src/api/index.js | 1 + frontend/src/components/AllTxTypeList.vue | 33 ++- frontend/src/components/TxListPage.vue | 319 ++++++++++++++++++++-- 3 files changed, 319 insertions(+), 34 deletions(-) diff --git a/frontend/src/api/index.js b/frontend/src/api/index.js index 432583275..4acbf41d9 100644 --- a/frontend/src/api/index.js +++ b/frontend/src/api/index.js @@ -87,6 +87,7 @@ const urlApi = { allTxType:'/api/tx_types/{type}', getTxListByFilterCondition:'/api/txs?page={pageNumber}&size={pageSize}&total=true&txType={txType}&status={status}&beginTime={beginTime}&endTime={endTime}', allTypeListQuireHeight:'/api/txs?page={pageNumber}&size={pageSize}&height={height}&total=true', + getTxListByTypeAndTxType:'/api/txs/{type}/{pageNumber}/{pageSize}?txType={txType}&status={status}&beginTime={beginTime}&endTime={endTime}', //assetInfo assetTokenInfo:'/api/asset/tokens/{tokenId}', gatewayTokenInfo:'/api/asset/gateways/{moniker}', diff --git a/frontend/src/components/AllTxTypeList.vue b/frontend/src/components/AllTxTypeList.vue index 9cf5b4738..15d12bb46 100644 --- a/frontend/src/components/AllTxTypeList.vue +++ b/frontend/src/components/AllTxTypeList.vue @@ -36,8 +36,8 @@ >
+
Search
-
Search
@@ -124,6 +124,12 @@ this.getAllTxType(); }, methods:{ + getFilterTxs(){ + this.currentPageNum = 1; + this.resetUrl(); + sessionStorage.setItem('txpagenum',1); + this.getTxListByFilterCondition(); + }, filterTxByTxType(e){ if (e === 'allTxType') { this.TxType = '' @@ -131,6 +137,14 @@ this.TxType = e } }, + resetUrl(){ + this.$router.push({ + path: this.$route.path, + query:{ + page:1 + } + }); + }, getStartTime(time){ this.filterStartTime = this.formatTime(time) }, @@ -157,7 +171,7 @@ if(res){ this.txTypeOption = res.map(item => { return { - value : Tools.firstWordUpperCase(item), + value : item, label : item } }); @@ -178,6 +192,13 @@ this.statusValue = 'allStatus'; this.startTime = ''; this.endTime = ''; + this.filterStartTime= ''; + this.filterEndTime = ''; + this.TxType = ''; + this.txStatus = ''; + this.currentPageNum = 1; + this.resetUrl(); + this.getTxListByFilterCondition() }, forCurrentPageNum() { let currentPageNum = 1; @@ -269,9 +290,6 @@ this.currentPageNum = Number(this.$route.query.page || 1); this.getAllTxTypeList(); }, - startTime(startTime){ - console.log(startTime,"开始的时间") - } }, } @@ -313,6 +331,7 @@ text-indent: 0.1rem; font-size: 0.14rem; line-height: 0.18rem; + padding: 0 0.1rem 0 0; } } .joint_mark{ @@ -326,6 +345,7 @@ color: #fff; border-radius: 0.04rem; margin-left: 0.1rem; + cursor: pointer; i{ padding: 0.08rem; font-size: 0.14rem; @@ -334,6 +354,7 @@ } } .search_btn{ + cursor: pointer; background: var(--bgColor); margin-left: 0.1rem; color: #fff; @@ -407,6 +428,8 @@ } .search_btn{ flex: 1; + margin-left: 0; + margin-right: 0.1rem; text-align: center; } } diff --git a/frontend/src/components/TxListPage.vue b/frontend/src/components/TxListPage.vue index dcaeafcd6..625b1e90b 100644 --- a/frontend/src/components/TxListPage.vue +++ b/frontend/src/components/TxListPage.vue @@ -3,6 +3,39 @@
{{count}} {{listTitleName}} +
+
+ + {{item.label}} + + + {{item.label}} + +
+
+ + ~ + +
+
+
Search
+
+
+
@@ -10,7 +43,7 @@
-
+
@@ -35,52 +68,177 @@ totalPageNum: sessionStorage.getItem("txpagenum") ? JSON.parse(sessionStorage.getItem("txpagenum")) : 1, currentPageNum: this.$route.query.page ? Number(this.$route.query.page) : 1, txList: [], + txTypeListArray:[], listTitleName: "", count: 0, pageSize: 30, showNoData: false, - flShowLoading: false + flShowLoading: false, + value: 'allTxType', + txStatus: '', + statusValue:'allStatus', + status:[ + { + value:'allStatus', + label:'All Status' + }, + { + value:'success', + label:'Success' + }, + { + value:'fail', + label:'Fail' + } + ], + startTime: '', + endTime: '', + filterStartTime: '', + filterEndTime: '', + type:'', + TxType:'' } }, created(){ - this.getTransactionList(this.currentPageNum,this.pageSize) + this.getType(); + this.getTxListByFilterCondition(); }, methods: { + getFilterTxs(){ + this.currentPageNum = 1; + this.resetUrl(); + sessionStorage.setItem('txpagenum',1); + this.getTxListByFilterCondition(); + }, + resetUrl(){ + this.$router.push({ + path: this.$route.path, + query:{ + page:1 + } + }); + }, + filterTxByTxType(e){ + if (e === 'allTxType') { + this.TxType = '' + }else { + this.TxType = e + } + }, + filterTxByStatus(e){ + if(e === 'allStatus'){ + this.txStatus = '' + }else { + this.txStatus = e + } + }, + getStartTime(time){ + this.filterStartTime = this.formatTime(time) + }, + getEndTime(time){ + this.filterEndTime = this.formatTime(time) + }, + formatTime(time){ + let utcTime = Tools.conversionTimeToUTCByValidatorsLine(new Date(time).toISOString()); + let oneDaySeconds = 24 * 60 *60; + return Number(new Date(utcTime).getTime()/1000) + Number(oneDaySeconds) + }, + resetFilterCondition(){ + this.value = 'allTxType'; + this.statusValue = 'allStatus'; + this.startTime = ''; + this.endTime = ''; + this.filterStartTime= ''; + this.filterEndTime = ''; + this.TxType = ''; + this.txStatus = ''; + this.currentPageNum = 1; + this.getType(); + this.getTxListByFilterCondition(); + this.resetUrl() + }, linkGen(pageNum) { return pageNum === 1 ? '?' : `?page=${pageNum}` }, - getTransactionList(currentPage, pageSize){ - let that = this, parmas; - if(this.$route.params.txType === 'transfers'){ - this.listTitleName = "Txs (Transfer or Burn)"; - parmas = {txListTransfer: {pageNumber: currentPage,pageSize: pageSize}}; - }else if(this.$route.params.txType === 'delegations'){ - this.listTitleName = "Txs (Staking or Distribution)"; - parmas = {txListStake: {pageNumber: currentPage,pageSize: pageSize}}; - }else if(this.$route.params.txType === 'validations'){ - this.listTitleName = "Txs (CreateValidator, EditValidator or Unjail)"; - parmas = {txListDeclaration: {pageNumber: currentPage,pageSize: pageSize}}; - }else if(this.$route.params.txType === 'governance'){ - this.listTitleName = "Txs (SubmitProposal, Deposit or Vote)"; - parmas = {txListGov: {pageNumber: currentPage,pageSize: pageSize}}; - } + getType(){ + switch (this.$route.params.txType) { + case 'delegations' : + this.type = 'stake'; + this.listTitleName = "Txs (Staking or Distribution)"; + break; + case 'validations': + this.type = 'declaration'; + this.listTitleName = "Txs (CreateValidator, EditValidator or Unjail)"; + break; + case 'transfers': + this.listTitleName = "Txs (Transfer or Burn)"; + this.type = 'trans'; + break; + case 'governance': + this.listTitleName = "Txs (SubmitProposal, Deposit or Vote)"; + this.type = 'gov'; + } + this.getAllTxType(); + }, + getAllTxType(){ + Service.commonInterface({allTxType:{ + type: this.type + }},(res) => { + try { + if(res){ + this.txTypeListArray = res.map(item => { + return { + value : item, + label : item + } + }); + let allTxType = { + value:'allTxType', + label:'All TXType', + slot:'allTXType' + }; + this.txTypeListArray.unshift(allTxType) + } + }catch (e) { + console.error(e) + } + }) + }, + getTxListByFilterCondition(){ + this.flShowLoading = true; - Service.commonInterface(parmas,(txList) => { + let param = {}; + param.getTxListByTypeAndTxType = {}; + param.getTxListByTypeAndTxType.type = this.type; + param.getTxListByTypeAndTxType.pageNumber = this.currentPageNum; + param.getTxListByTypeAndTxType.pageSize = this.pageSize; + param.getTxListByTypeAndTxType.txType = this.TxType; + param.getTxListByTypeAndTxType.status = this.txStatus; + param.getTxListByTypeAndTxType.beginTime = this.filterStartTime; + param.getTxListByTypeAndTxType.endTime = this.filterEndTime; + Service.commonInterface(param, (txList) => { try { - this.count = txList.Count; - this.totalPageNum = Math.ceil((txList.Count/this.pageSize) === 0 ? 1 : (txList.Count/this.pageSize)); - sessionStorage.setItem('txpagenum',JSON.stringify(this.totalPageNum)); - if(txList.Data){ - this.txList = Tools.formatTxList(txList.Data,that.$route.params.txType) - }else{ + if(txList && txList.Data){ + this.count = txList.Count; + this.totalPageNum = Math.ceil((txList.Count/this.pageSize) === 0 ? 1 : (txList.Count/this.pageSize)); + sessionStorage.setItem('txpagenum',JSON.stringify(this.totalPageNum)); + if(txList.Data){ + this.txList = Tools.formatTxList(txList.Data,this.$route.params.txType) + }else{ + this.txList = []; + this.showNoData = true; + } + this.flShowLoading = false; + }else { this.txList = []; this.showNoData = true; - } - this.flShowLoading = false; + this.flShowLoading = false; + } }catch (e) { + this.showNoData = true; console.error(e) } - }) + }) }, } } @@ -91,7 +249,7 @@ .transaction_list_title_wrap{ width: 100%; position: fixed; - z-index: 1; + z-index: 3; background-color: #ffffff; .transaction_list_title_content{ height:0.7rem; @@ -105,6 +263,60 @@ font-weight: 500; padding-left: 0.2rem; } + .filter_container{ + display: flex; + margin-left: 0.1rem; + .filter_tx_type_statue_content{ + display: flex; + align-items: center; + .ivu-select{ + width: 1.3rem; + margin-right: 0.1rem; + .ivu-select-item{ + text-indent: 0.1rem; + font-size: 0.14rem; + line-height: 0.18rem; + padding-right: 0.1rem; + } + } + } + .select_date_content{ + display: flex; + align-items: center; + .ivu-date-picker{ + width: 1.3rem; + } + .joint_mark{ + margin: 0 0.1rem; + } + } + .reset_search_content{ + display: flex; + .reset_btn{ + background: var(--bgColor); + color: #fff; + border-radius: 0.04rem; + margin-left: 0.1rem; + cursor: pointer; + i{ + padding: 0.08rem; + font-size: 0.14rem; + line-height: 1; + display: inline-block; + } + } + .search_btn{ + cursor: pointer; + background: var(--bgColor); + margin-left: 0.1rem; + color: #fff; + border-radius: 0.04rem; + padding: 0.05rem 0.18rem; + font-size: 0.14rem; + } + } + } + } } } @@ -140,6 +352,55 @@ .transaction_list_page_container{ .transaction_list_title_wrap{ position: static; + .transaction_list_title_content{ + display: flex; + flex-direction: column; + height: auto; + align-items: flex-start; + .transaction_list_title{ + height: 0.7rem; + line-height: 0.7rem; + } + .filter_container{ + flex-direction: column; + margin-left: 0.1rem; + width: 100%; + .filter_tx_type_statue_content{ + width: 3.45rem; + display: flex; + justify-content: space-between; + margin-bottom: 0.1rem; + .ivu-select{ + margin-right: 0; + width: 1.6rem; + } + } + .select_date_content{ + width: 3.45rem; + display: flex; + justify-content: space-between; + margin-bottom: 0.1rem; + .ivu-date-picker{ + width: 1.6rem; + } + } + .reset_search_content{ + width: 3.45rem; + display: flex; + justify-content: space-between; + margin-bottom: 0.1rem; + .reset_btn{ + margin-left: 0; + } + .search_btn{ + flex: 1; + margin-left: 0; + margin-right: 0.1rem; + text-align: center; + } + } + } + } } } From 6e47caab1995aba3556d2132a1b06fddb366a51d Mon Sep 17 00:00:00 2001 From: zhjibi742626083 Date: Wed, 11 Sep 2019 16:03:38 +0800 Subject: [PATCH 014/103] add filters to the Txs page --- frontend/src/components/AllTxTypeList.vue | 6 +++++- frontend/src/components/TxListPage.vue | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/AllTxTypeList.vue b/frontend/src/components/AllTxTypeList.vue index 15d12bb46..a3b9bdaf6 100644 --- a/frontend/src/components/AllTxTypeList.vue +++ b/frontend/src/components/AllTxTypeList.vue @@ -146,7 +146,7 @@ }); }, getStartTime(time){ - this.filterStartTime = this.formatTime(time) + this.filterStartTime = this.formatStartTime(time) }, getEndTime(time){ this.filterEndTime = this.formatTime(time) @@ -155,6 +155,10 @@ let utcTime = Tools.conversionTimeToUTCByValidatorsLine(new Date(time).toISOString()); let oneDaySeconds = 24 * 60 *60; return Number(new Date(utcTime).getTime()/1000) + Number(oneDaySeconds) + }, + formatStartTime(time){ + let utcTime = Tools.conversionTimeToUTCByValidatorsLine(new Date(time).toISOString()); + return Number(new Date(utcTime).getTime()/1000) }, filterTxByStatus(e){ if(e === 'allStatus'){ diff --git a/frontend/src/components/TxListPage.vue b/frontend/src/components/TxListPage.vue index 625b1e90b..fee4b3b28 100644 --- a/frontend/src/components/TxListPage.vue +++ b/frontend/src/components/TxListPage.vue @@ -133,11 +133,15 @@ } }, getStartTime(time){ - this.filterStartTime = this.formatTime(time) + this.filterStartTime = this.formatStartTime(time) }, getEndTime(time){ this.filterEndTime = this.formatTime(time) }, + formatStartTime(time){ + let utcTime = Tools.conversionTimeToUTCByValidatorsLine(new Date(time).toISOString()); + return Number(new Date(utcTime).getTime()/1000) + }, formatTime(time){ let utcTime = Tools.conversionTimeToUTCByValidatorsLine(new Date(time).toISOString()); let oneDaySeconds = 24 * 60 *60; From d0f20bb44b93eb648de24633765e38e5f1e020ae Mon Sep 17 00:00:00 2001 From: zhjibi742626083 Date: Wed, 11 Sep 2019 18:15:20 +0800 Subject: [PATCH 015/103] optimize the validator information in the validation detail page --- frontend/src/components/AllTxTypeList.vue | 19 ++++--- frontend/src/components/EchartsLine.vue | 7 ++- frontend/src/components/EchartsPie.vue | 2 +- frontend/src/components/HomeBlockModule.vue | 8 +-- frontend/src/components/TxListPage.vue | 26 ++++----- frontend/src/components/ValidatorDetail.vue | 57 ++++++++++++------- .../table/MValidatorDetailTable.vue | 2 +- 7 files changed, 68 insertions(+), 53 deletions(-) diff --git a/frontend/src/components/AllTxTypeList.vue b/frontend/src/components/AllTxTypeList.vue index a3b9bdaf6..d5805eff8 100644 --- a/frontend/src/components/AllTxTypeList.vue +++ b/frontend/src/components/AllTxTypeList.vue @@ -92,7 +92,11 @@ currentPageNum: this.forCurrentPageNum(), currentPageNumCache: 0, txTypeOption:[ - + { + value:'allTxType', + label:'All TXType', + slot:'allTXType' + } ], status:[ { @@ -173,18 +177,15 @@ }},(res) => { try { if(res){ - this.txTypeOption = res.map(item => { + let txType; + txType = res.map(item => { return { value : item, label : item } }); - let allTxType = { - value:'allTxType', - label:'All TXType', - slot:'allTXType' - }; - this.txTypeOption.unshift(allTxType) + this.txTypeOption = this.txTypeOption.concat(txType); + console.log(this.txTypeOption,"????") } }catch (e) { console.error(e) @@ -335,7 +336,7 @@ text-indent: 0.1rem; font-size: 0.14rem; line-height: 0.18rem; - padding: 0 0.1rem 0 0; + padding: 0.07rem 0.1rem 0.07rem 0; } } .joint_mark{ diff --git a/frontend/src/components/EchartsLine.vue b/frontend/src/components/EchartsLine.vue index 86e928d2a..53b06352a 100644 --- a/frontend/src/components/EchartsLine.vue +++ b/frontend/src/components/EchartsLine.vue @@ -1,7 +1,7 @@