清理代码

This commit is contained in:
2022-02-08 09:17:12 +08:00
parent 0bfdcdf6af
commit ab958d0777
16 changed files with 1332 additions and 1817 deletions

View File

@@ -4,8 +4,6 @@
"description": "ZH健康", "description": "ZH健康",
"main": "main.js", "main": "main.js",
"dependencies": { "dependencies": {
"bitcore-lib": "^8.25.25",
"bitcore-mnemonic": "^8.25.25",
"moment": "^2.29.1", "moment": "^2.29.1",
"uni-read-pages": "^1.0.5", "uni-read-pages": "^1.0.5",
"uni-simple-router": "^2.0.7", "uni-simple-router": "^2.0.7",

View File

@@ -1,6 +1,6 @@
<template> <template>
<view class="im--img" :class="guest ? 'right': 'left'"> <view class="im--image" :class="guest ? 'right': 'left'">
<image class="src" :src="msg.thumbnail" @click="previewImage" mode="widthFix"></image> <image class="img" :src="msg.thumbnail" @click="previewImage" mode="widthFix"></image>
</view> </view>
</template> </template>
@@ -10,7 +10,15 @@
props: { props: {
msg: { msg: {
type: Object, type: Object,
default: {} default: () => {
return {
local: '',
remote: '',
objectName: '',
thumbnail: '',
isFull: false
}
}
}, },
guest: { guest: {
type: Boolean, type: Boolean,
@@ -30,22 +38,23 @@
} }
</script> </script>
<style scoped> <style scoped lang="scss">
.im--img { .im--image {
padding: 19rpx; padding: 20rpx;
}
.im--img.left { &.left {
border-radius: 0 20rpx 20rpx 20rpx; border-radius: 0 20rpx 20rpx 20rpx;
background: white; background: white;
} }
.im--img.right { &.right {
border-radius: 20rpx 0 20rpx 20rpx; border-radius: 20rpx 0 20rpx 20rpx;
background: #34CE98; background: #34CE98;
} }
.src { .img {
width: 240rpx; width: 150rpx;
border-radius: 10rpx;
}
} }
</style> </style>

View File

@@ -7,11 +7,6 @@
<script> <script>
export default { export default {
name: 'showText', name: 'showText',
data() {
return {
};
},
props: { props: {
msg: { msg: {
type: Object, type: Object,
@@ -25,22 +20,22 @@
} }
</script> </script>
<style scoped> <style scoped lang="scss">
.im--text { .im--text {
max-width: 400rpx; max-width: 400rpx;
padding: 20rpx; padding: 20rpx;
font-size: 28rpx; font-size: 28rpx;
line-height: 40rpx; line-height: 40rpx;
}
.im--text.left { &.left {
border-radius: 0 20rpx 20rpx 20rpx; border-radius: 0 20rpx 20rpx 20rpx;
background: white; background: white;
} }
.im--text.right { &.right {
border-radius: 20rpx 0 20rpx 20rpx; border-radius: 20rpx 0 20rpx 20rpx;
background: #34CE98; background: $main-color;
color: white; color: white;
} }
}
</style> </style>

View File

@@ -1,9 +1,9 @@
<template> <template>
<view> <view>
<view class="im--audio" :class="guest ? 'right': 'left'" @click="onPlayMsg"> <view class="im--voice" :class="guest ? 'right': 'left'" @click="onPlayMsg">
<image v-if="!guest" class="audio-mp3" src="@/static/icon/audio_green.png" mode="widthFix"></image> <image v-if="!guest" class="icon" src="@/static/icon/audio_green.png" mode="widthFix"></image>
<text class="audio-text">"{{msg.duration}}"</text> <text class="duration">{{msg.duration}}"</text>
<image v-if="guest" class="audio-mp3" src="@/static/icon/audio_white.png" mode="widthFix"></image> <image v-if="guest" class="icon" src="@/static/icon/audio_white.png" mode="widthFix"></image>
</view> </view>
</view> </view>
</template> </template>
@@ -57,8 +57,8 @@
} }
</script> </script>
<style scoped> <style scoped lang="scss">
.im--audio { .im--voice {
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@@ -66,33 +66,30 @@
width: 170rpx; width: 170rpx;
padding: 0 20rpx; padding: 0 20rpx;
box-sizing: border-box; box-sizing: border-box;
}
, .icon {
.im--audio.left {
border-radius: 0 20rpx 20rpx 20rpx;
background: white;
}
.im--audio.right {
border-radius: 20rpx 0 20rpx 20rpx;
background: #34CE98;
}
.audio-mp3 {
width: 38rpx; width: 38rpx;
height: 38rpx; height: 38rpx;
} }
.audio-text { &.left {
border-radius: 0 20rpx 20rpx 20rpx;
background: white;
.duration {
color: #333;
font-size: 30rpx; font-size: 30rpx;
} }
.im--audio.left .audio-text {
color: #333;
} }
.im--audio.right .audio-text { &.right {
border-radius: 20rpx 0 20rpx 20rpx;
background: $main-color;
.duration {
color: white; color: white;
font-size: 30rpx;
}
}
} }
</style> </style>

View File

@@ -29,21 +29,24 @@
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
.content{ .content {
position: relative; position: relative;
height: 100vh; height: 100vh;
padding: 0 15vw; padding: 0 15vw;
text-align: center; text-align: center;
.logo{
.logo {
width: 138rpx; width: 138rpx;
vertical-align: top; vertical-align: top;
margin-bottom: 20vh; margin-bottom: 20vh;
} }
.sub-title{
.sub-title {
font-size: $title-size-m; font-size: $title-size-m;
color: $text-gray; color: $text-gray;
} }
.wallet-btn{
.wallet-btn {
width: 100%; width: 100%;
background-color: $main-color; background-color: $main-color;
height: 90rpx; height: 90rpx;
@@ -53,10 +56,11 @@
color: white; color: white;
font-weight: bold; font-weight: bold;
font-size: $title-size; font-size: $title-size;
&.hollow{
&.hollow {
background-color: white; background-color: white;
color: $main-color; color: $main-color;
border:solid 2rpx $main-color; border: solid 2rpx $main-color;
box-sizing: border-box; box-sizing: border-box;
} }
} }

View File

@@ -29,17 +29,8 @@
</view> </view>
</view> </view>
<!-- key键盘 --> <!-- key键盘 -->
<u-keyboard <u-keyboard mode="number" random dotDisabled :overlay="false" :show="keyShow" :showCancel="false"
mode="number" @change="keyValChange" @backspace="keyValBackspace" @confirm="keyShow = false"></u-keyboard>
random
dotDisabled
:overlay="false"
:show="keyShow"
:showCancel="false"
@change="keyValChange"
@backspace="keyValBackspace"
@confirm="keyShow = false"
></u-keyboard>
<!-- 按钮 --> <!-- 按钮 -->
<view class="buttons"> <view class="buttons">
<button type="default" form-type="submit" @click="createWallet">确认激活</button> <button type="default" form-type="submit" @click="createWallet">确认激活</button>
@@ -48,30 +39,33 @@
</template> </template>
<script> <script>
import { security } from '@/apis/interfaces/wallet'; import {
export default { security
} from '@/apis/interfaces/wallet';
export default {
data() { data() {
return { return {
password: '', password: '',
verify : '', verify: '',
valKye : '', valKye: '',
keyShow : false keyShow: false
}; };
}, },
methods: { methods: {
// 唤起key // 唤起key
onShowKet(key){ onShowKet(key) {
this.valKye = key this.valKye = key
this.keyShow = true this.keyShow = true
}, },
// 键盘输入 // 键盘输入
keyValChange(e){ keyValChange(e) {
if(this[this.valKye].length >= 6) return if (this[this.valKye].length >= 6) return
this[this.valKye] += e this[this.valKye] += e
}, },
// 键盘删除 // 键盘删除
keyValBackspace(e){ keyValBackspace(e) {
if(this[this.valKye].length) this[this.valKye] = this[this.valKye].substr(0, this[this.valKye].length - 1) if (this[this.valKye].length) this[this.valKye] = this[this.valKye].substr(0, this[this.valKye].length -
1)
}, },
// 激活钱包 // 激活钱包
createWallet() { createWallet() {
@@ -104,31 +98,38 @@ export default {
}); });
} }
} }
}; };
</script> </script>
<style> <style>
.flicker-animation{ .flicker-animation {
animation: flicker .8s infinite; animation: flicker .8s infinite;
} }
@keyframes flicker{
0%{opacity: 0;} @keyframes flicker {
100{opacity: 1;} 0% {
opacity: 0;
}
100 {
opacity: 1;
}
} }
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
// 副标题 // 副标题
.sub-title { .sub-title {
color: $text-gray; color: $text-gray;
text-align: center; text-align: center;
margin: $margin * 2 $margin; margin: $margin * 2 $margin;
font-size: $title-size-m; font-size: $title-size-m;
} }
// 设置密码 // 设置密码
.password { .password {
padding: 0 $padding * 2; padding: 0 $padding * 2;
.prompt { .prompt {
margin-top: $margin * 2; margin-top: $margin * 2;
font-size: $title-size-m; font-size: $title-size-m;
@@ -138,6 +139,7 @@ export default {
.group { .group {
padding-top: $padding; padding-top: $padding;
.inputs { .inputs {
padding: 10rpx $padding + 10; padding: 10rpx $padding + 10;
margin-top: $margin; margin-top: $margin;
@@ -147,20 +149,23 @@ export default {
line-height: 70rpx; line-height: 70rpx;
font-size: $title-size-lg; font-size: $title-size-lg;
text-align: center; text-align: center;
text{
text {
padding: 0 10rpx; padding: 0 10rpx;
text-align: center; text-align: center;
} }
.placeholder{
.placeholder {
color: $text-gray; color: $text-gray;
} }
} }
} }
} }
// 按钮 // 按钮
.buttons { .buttons {
padding: $padding * 2; padding: $padding * 2;
.text { .text {
text-align: center; text-align: center;
line-height: 90rpx; line-height: 90rpx;
@@ -179,9 +184,10 @@ export default {
color: white; color: white;
font-weight: bold; font-weight: bold;
font-size: $title-size; font-size: $title-size;
&::after{
&::after {
display: none; display: none;
} }
} }
} }
</style> </style>

View File

@@ -15,7 +15,9 @@
</template> </template>
<script> <script>
import { seed } from "@/apis/interfaces/wallet" import {
seed
} from "@/apis/interfaces/wallet"
export default { export default {
data() { data() {
return { return {
@@ -35,7 +37,7 @@
}) })
}, },
methods: { methods: {
goto(){ goto() {
this.$Router.replace({ this.$Router.replace({
name: 'WalletValidation', name: 'WalletValidation',
params: { params: {
@@ -50,25 +52,28 @@
<style lang="scss" scoped> <style lang="scss" scoped>
// 提示信息 // 提示信息
.prompt{ .prompt {
color: $text-gray; color: $text-gray;
text-align: center; text-align: center;
line-height: 90rpx; line-height: 90rpx;
font-size: $title-size-m; font-size: $title-size-m;
} }
// 跳过 // 跳过
.skip{ .skip {
padding: $padding * 2; padding: $padding * 2;
text-align: center; text-align: center;
color: $text-gray; color: $text-gray;
navigator{
navigator {
color: $main-color; color: $main-color;
margin-left: $margin/2; margin-left: $margin/2;
display: inline-block; display: inline-block;
} }
} }
// 助记词 // 助记词
.mnemonic{ .mnemonic {
margin: $margin $margin * 2; margin: $margin $margin * 2;
border-radius: $radius-m; border-radius: $radius-m;
box-shadow: 0 0 4rpx 4rpx rgba($color: $text-color, $alpha: .02); box-shadow: 0 0 4rpx 4rpx rgba($color: $text-color, $alpha: .02);
@@ -77,7 +82,8 @@
list-style: none; list-style: none;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
li{
li {
text-align: center; text-align: center;
height: 58rpx; height: 58rpx;
padding: 0 $padding/2; padding: 0 $padding/2;
@@ -87,16 +93,19 @@
background: rgba($color: $border-color, $alpha: .4); background: rgba($color: $border-color, $alpha: .4);
} }
} }
// 按钮 // 按钮
.buttons{ .buttons {
padding: $padding $padding * 2; padding: $padding $padding * 2;
.text{
.text {
text-align: center; text-align: center;
margin-bottom: $margin * 2; margin-bottom: $margin * 2;
font-size: $title-size-m; font-size: $title-size-m;
color: $text-price; color: $text-price;
} }
button{
button {
height: 90rpx; height: 90rpx;
line-height: 90rpx; line-height: 90rpx;
background-color: $main-color; background-color: $main-color;
@@ -104,7 +113,8 @@
color: white; color: white;
font-weight: bold; font-weight: bold;
font-size: $title-size; font-size: $title-size;
&::after{
&::after {
display: none; display: none;
} }
} }

View File

@@ -21,13 +21,15 @@
</template> </template>
<script> <script>
import { privatekey, keyrules } from '@/apis/interfaces/wallet' import {
privatekey,
keyrules
} from '@/apis/interfaces/wallet'
export default { export default {
data() { data() {
return { return {
key: "", key: "",
rules: [ rules: [{
{
title: "什么是托管钱包?", title: "什么是托管钱包?",
description: "托管钱包顾名思义就是用户把私钥和数字资产委托给其他机构管理,也就是就是通过中心化的方式安全管理并保存资产,本质上是与区块链所追求的去中心化相背离的。" description: "托管钱包顾名思义就是用户把私钥和数字资产委托给其他机构管理,也就是就是通过中心化的方式安全管理并保存资产,本质上是与区块链所追求的去中心化相背离的。"
}, },
@@ -44,12 +46,12 @@
}).catch(err => { }).catch(err => {
uni.showToast({ uni.showToast({
title: err.message, title: err.message,
icon : 'none' icon: 'none'
}) })
}) })
}, },
methods:{ methods: {
copykey(){ copykey() {
uni.setClipboardData({ uni.setClipboardData({
data: this.key data: this.key
}) })
@@ -59,25 +61,28 @@
</script> </script>
<style lang="scss"> <style lang="scss">
.keys{ .keys {
margin: $margin * 2; margin: $margin * 2;
background: white; background: white;
padding: $padding * 2; padding: $padding * 2;
box-shadow: 0 0 4rpx 4rpx rgba($color: #000000, $alpha: .02); box-shadow: 0 0 4rpx 4rpx rgba($color: #000000, $alpha: .02);
border-radius: $radius; border-radius: $radius;
.title{
.title {
text-align: center; text-align: center;
font-weight: bold; font-weight: bold;
font-size: $title-size + 4; font-size: $title-size + 4;
color: $text-color; color: $text-color;
} }
.key{
.key {
padding: $padding * 2 0; padding: $padding * 2 0;
text-align: center; text-align: center;
color: $main-color; color: $main-color;
word-wrap: break-word; word-wrap: break-word;
} }
.copykey{
.copykey {
background-color: $main-color; background-color: $main-color;
color: white; color: white;
height: 95rpx; height: 95rpx;
@@ -88,28 +93,34 @@
font-weight: bold; font-weight: bold;
} }
} }
.doubt{
.doubt {
margin: $margin $margin * 2; margin: $margin $margin * 2;
.doubt-item{
.doubt-item {
padding: $padding 0; padding: $padding 0;
.title{
.title {
font-weight: bold; font-weight: bold;
color: $text-color; color: $text-color;
line-height: 50rpx; line-height: 50rpx;
font-size: $title-size + 2; font-size: $title-size + 2;
} }
.content{
.content {
color: $text-gray; color: $text-gray;
font-size: $title-size-m; font-size: $title-size-m;
line-height: 40rpx; line-height: 40rpx;
} }
} }
} }
.liability{
.liability {
text-align: center; text-align: center;
color: $text-gray; color: $text-gray;
@extend .ios-bottom; @extend .ios-bottom;
navigator{
navigator {
font-size: $title-size-sm; font-size: $title-size-sm;
display: inline-block; display: inline-block;
line-height: 90rpx; line-height: 90rpx;

View File

@@ -35,35 +35,30 @@
</view> </view>
</u-popup> </u-popup>
<!-- key --> <!-- key -->
<u-keyboard <u-keyboard mode="number" random dotDisabled :overlay="false" :show="passwordShow" confirmText="验证"
mode="number" @change="keyValChange" @backspace="keyValBackspace" @confirm="payPassword('confirm', passwordPages)"
random @cancel="passwordShow = false"></u-keyboard>
dotDisabled
:overlay="false"
:show="passwordShow"
confirmText="验证"
@change="keyValChange"
@backspace="keyValBackspace"
@confirm="payPassword('confirm', passwordPages)"
@cancel="passwordShow = false"
></u-keyboard>
</view> </view>
</template> </template>
<script> <script>
import record from '@/components/property/record' import record from '@/components/property/record'
import { sum, logs, securityCheck } from '@/apis/interfaces/wallet' import {
sum,
logs,
securityCheck
} from '@/apis/interfaces/wallet'
export default { export default {
components: { components: {
record record
}, },
data() { data() {
return { return {
balance : {}, balance: {},
logs : [], logs: [],
logsType : 0, logsType: 0,
password : '', password: '',
passwordShow : false, passwordShow: false,
passwordPages: '' passwordPages: ''
}; };
}, },
@@ -83,44 +78,59 @@
}, },
methods: { methods: {
// 键盘输入 // 键盘输入
keyValChange(e){ keyValChange(e) {
if(this.password.length >= 6) return if (this.password.length >= 6) return
this.password += e this.password += e
}, },
// 键盘删除 // 键盘删除
keyValBackspace(e){ keyValBackspace(e) {
if(this.password.length) this.password = this.password.substr(0, this.password.length - 1) if (this.password.length) this.password = this.password.substr(0, this.password.length - 1)
}, },
// 弹出私钥 // 弹出私钥
showPrivatekey(pages){ showPrivatekey(pages) {
this.passwordShow = true this.passwordShow = true
this.passwordPages = pages this.passwordPages = pages
}, },
// 重置密码 // 重置密码
resetPassword(){ resetPassword() {
this.passwordShow = false this.passwordShow = false
this.password = '' this.password = ''
}, },
// 验证私钥 // 验证私钥
payPassword(type){ payPassword(type) {
if(type === 'confirm'){ if (type === 'confirm') {
if(this.password === '') { if (this.password === '') {
uni.showToast({ uni.showToast({
title: '请输入安全密码', title: '请输入安全密码',
icon : 'none' icon: 'none'
}) })
return return
} }
securityCheck(this.password).then(res => { securityCheck(this.password).then(res => {
switch (this.passwordPages){ switch (this.passwordPages) {
case 'privatekey': case 'privatekey':
this.$Router.push({name:'WalletPrivatekey', params: {password: this.password}}) this.$Router.push({
name: 'WalletPrivatekey',
params: {
password: this.password
}
})
break; break;
case 'ResetPassword': case 'ResetPassword':
this.$Router.push({name:'ResetPassword', params: {password: this.password}}) this.$Router.push({
name: 'ResetPassword',
params: {
password: this.password
}
})
break; break;
case 'WalletMnemonic': case 'WalletMnemonic':
this.$Router.push({name:'WalletMnemonic', params: {password: this.password}}) this.$Router.push({
name: 'WalletMnemonic',
params: {
password: this.password
}
})
break; break;
} }
this.resetPassword() this.resetPassword()
@@ -184,23 +194,31 @@
</script> </script>
<style> <style>
.flicker-animation{ .flicker-animation {
animation: flicker .8s infinite; animation: flicker .8s infinite;
} }
@keyframes flicker{
0%{opacity: 0;} @keyframes flicker {
100{opacity: 1;} 0% {
opacity: 0;
}
100 {
opacity: 1;
}
} }
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
// 验证密码弹出层 // 验证密码弹出层
.validationPassword{ .validationPassword {
width: 80vw; width: 80vw;
.from{
.from {
padding: $padding*2; padding: $padding*2;
text-align: center; text-align: center;
.title{
.title {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@@ -209,6 +227,7 @@
font-size: $title-size; font-size: $title-size;
padding-bottom: $padding; padding-bottom: $padding;
} }
// input{ // input{
// background: $window-color; // background: $window-color;
// height: 90rpx; // height: 90rpx;
@@ -223,35 +242,43 @@
border-radius: 45rpx; border-radius: 45rpx;
font-size: $title-size-lg; font-size: $title-size-lg;
text-align: center; text-align: center;
text{
text {
padding: 0 10rpx; padding: 0 10rpx;
text-align: center; text-align: center;
} }
.placeholder{
.placeholder {
color: $text-gray; color: $text-gray;
} }
} }
} }
.buttons{
.buttons {
text-align: center; text-align: center;
padding: 0 $padding*2; padding: 0 $padding*2;
.button{
.button {
height: 90rpx; height: 90rpx;
line-height: 90rpx; line-height: 90rpx;
margin-bottom: $margin; margin-bottom: $margin;
&.cancel{
&.cancel {
color: $text-gray; color: $text-gray;
} }
&.confirm{
&.confirm {
color: white; color: white;
background: $main-color; background: $main-color;
border-radius: 45rpx; border-radius: 45rpx;
} }
} }
} }
// //
// //
} }
// 账户 // 账户
.propery { .propery {
position: relative; position: relative;

View File

@@ -29,17 +29,8 @@
</view> </view>
</view> </view>
<!-- key键盘 --> <!-- key键盘 -->
<u-keyboard <u-keyboard mode="number" random dotDisabled :overlay="false" :show="keyShow" :showCancel="false"
mode="number" @change="keyValChange" @backspace="keyValBackspace" @confirm="keyShow = false"></u-keyboard>
random
dotDisabled
:overlay="false"
:show="keyShow"
:showCancel="false"
@change="keyValChange"
@backspace="keyValBackspace"
@confirm="keyShow = false"
></u-keyboard>
<!-- 按钮 --> <!-- 按钮 -->
<view class="buttons"> <view class="buttons">
<button type="default" form-type="submit" @click="createWallet">确认修改</button> <button type="default" form-type="submit" @click="createWallet">确认修改</button>
@@ -48,16 +39,17 @@
</template> </template>
<script> <script>
import { securityReset } from '@/apis/interfaces/wallet' import {
securityReset
} from '@/apis/interfaces/wallet'
export default { export default {
data() { data() {
return { return {
password: '', password: '',
verify: '', verify: '',
oldPassword: '', oldPassword: '',
valKye: '',
valKye : '', keyShow: false
keyShow : false
} }
}, },
onLoad() { onLoad() {
@@ -65,18 +57,19 @@
}, },
methods: { methods: {
// 唤起key // 唤起key
onShowKet(key){ onShowKet(key) {
this.valKye = key this.valKye = key
this.keyShow = true this.keyShow = true
}, },
// 键盘输入 // 键盘输入
keyValChange(e){ keyValChange(e) {
if(this[this.valKye].length >= 6) return if (this[this.valKye].length >= 6) return
this[this.valKye] += e this[this.valKye] += e
}, },
// 键盘删除 // 键盘删除
keyValBackspace(e){ keyValBackspace(e) {
if(this[this.valKye].length) this[this.valKye] = this[this.valKye].substr(0, this[this.valKye].length - 1) if (this[this.valKye].length) this[this.valKye] = this[this.valKye].substr(0, this[this.valKye].length -
1)
}, },
// 修改密码 // 修改密码
createWallet() { createWallet() {
@@ -101,8 +94,8 @@
uni.showModal({ uni.showModal({
title: '提示', title: '提示',
content: '密码已重置', content: '密码已重置',
showCancel:false, showCancel: false,
success: res=> { success: res => {
uni.navigateBack() uni.navigateBack()
} }
}) })
@@ -119,12 +112,18 @@
<style> <style>
.flicker-animation{ .flicker-animation {
animation: flicker .8s infinite; animation: flicker .8s infinite;
} }
@keyframes flicker{
0%{opacity: 0;} @keyframes flicker {
100{opacity: 1;} 0% {
opacity: 0;
}
100 {
opacity: 1;
}
} }
</style> </style>
@@ -140,6 +139,7 @@
// 设置密码 // 设置密码
.password { .password {
padding: 0 $padding * 2; padding: 0 $padding * 2;
.prompt { .prompt {
margin-top: $margin * 2; margin-top: $margin * 2;
font-size: $title-size-m; font-size: $title-size-m;
@@ -149,6 +149,7 @@
.group { .group {
padding-top: $padding; padding-top: $padding;
.inputs { .inputs {
padding: 10rpx $padding + 10; padding: 10rpx $padding + 10;
margin-top: $margin; margin-top: $margin;
@@ -158,11 +159,13 @@
line-height: 70rpx; line-height: 70rpx;
font-size: $title-size-lg; font-size: $title-size-lg;
text-align: center; text-align: center;
text{
text {
padding: 0 10rpx; padding: 0 10rpx;
text-align: center; text-align: center;
} }
.placeholder{
.placeholder {
color: $text-gray; color: $text-gray;
} }
} }
@@ -172,6 +175,7 @@
// 按钮 // 按钮
.buttons { .buttons {
padding: $padding * 2; padding: $padding * 2;
.text { .text {
text-align: center; text-align: center;
line-height: 90rpx; line-height: 90rpx;
@@ -190,7 +194,8 @@
color: white; color: white;
font-weight: bold; font-weight: bold;
font-size: $title-size; font-size: $title-size;
&::after{
&::after {
display: none; display: none;
} }
} }

View File

@@ -6,13 +6,8 @@
</view> </view>
<!-- 助记词 --> <!-- 助记词 -->
<view class="mnemonic"> <view class="mnemonic">
<view <view class="item" v-for="(item, index) in validation" :key="index" :class="item === null ? 'hide': ''"
class="item" @click="onKeys('removeKey', index)">{{ item }}</view>
v-for="(item, index) in validation"
:key="index"
:class="item === null ? 'hide': ''"
@click="onKeys('removeKey', index)"
>{{ item }}</view>
</view> </view>
<!-- 选择助记词 --> <!-- 选择助记词 -->
<block v-if="mnemonic.length > 0"> <block v-if="mnemonic.length > 0">
@@ -20,7 +15,8 @@
按顺序填写助记词 按顺序填写助记词
</view> </view>
<view class="mnemonic-select"> <view class="mnemonic-select">
<view class="item" v-for="(item, index) in mnemonic" :key="index" @click="onKeys('addKey', index)">{{ item }}</view> <view class="item" v-for="(item, index) in mnemonic" :key="index" @click="onKeys('addKey', index)">
{{ item }}</view>
</view> </view>
</block> </block>
<!-- 按钮 --> <!-- 按钮 -->
@@ -31,14 +27,16 @@
</template> </template>
<script> <script>
import { hash } from "../../apis/interfaces/wallet" import {
hash
} from "@/apis/interfaces/wallet"
export default { export default {
data() { data() {
return { return {
validation : new Array(12).fill(null), // 验证key validation: new Array(12).fill(null), // 验证key
mnemonic : [], // 助记词key mnemonic: [], // 助记词key
sign : '', // 助记词校验签名 sign: '', // 助记词校验签名
seedString : '', // 助记词原词 seedString: '', // 助记词原词
} }
}, },
mounted() { mounted() {
@@ -53,24 +51,24 @@
}, },
methods: { methods: {
// 填写助记词 // 填写助记词
onKeys(type, index){ onKeys(type, index) {
if(type === 'addKey') { if (type === 'addKey') {
this.$set(this.validation, this.validation.findIndex(val => val === null), this.mnemonic[index]) this.$set(this.validation, this.validation.findIndex(val => val === null), this.mnemonic[index])
this.$delete(this.mnemonic, index) this.$delete(this.mnemonic, index)
return return
} }
if(type === 'removeKey' && this.validation[index] !== null) { if (type === 'removeKey' && this.validation[index] !== null) {
this.mnemonic.push(this.validation[index]) this.mnemonic.push(this.validation[index])
this.$delete(this.validation, index) this.$delete(this.validation, index)
this.validation.push(null) this.validation.push(null)
} }
}, },
// 验证助记词 // 验证助记词
verifyMnemonic(){ verifyMnemonic() {
if(this.validation.findIndex(val => val === null) > -1){ if (this.validation.findIndex(val => val === null) > -1) {
uni.showToast({ uni.showToast({
title: '请完整填写助记词', title: '请完整填写助记词',
icon : 'none' icon: 'none'
}) })
return return
} }
@@ -78,7 +76,7 @@
if (this.seedString !== seed) { if (this.seedString !== seed) {
uni.showToast({ uni.showToast({
title: '验证失败,请确认您的助记词', title: '验证失败,请确认您的助记词',
icon : 'none' icon: 'none'
}) })
return return
} }
@@ -92,24 +90,27 @@
<style lang="scss" scoped> <style lang="scss" scoped>
// 提示信息 // 提示信息
.prompt{ .prompt {
color: $text-gray; color: $text-gray;
text-align: center; text-align: center;
line-height: 90rpx; line-height: 90rpx;
font-size: $title-size-m; font-size: $title-size-m;
} }
// 选择助记词 // 选择助记词
.mnemonic-title{ .mnemonic-title {
padding-top: $padding * 2; padding-top: $padding * 2;
margin: 0 $margin * 2; margin: 0 $margin * 2;
font-size: $title-size-m; font-size: $title-size-m;
color: $main-color; color: $main-color;
} }
.mnemonic-select{
.mnemonic-select {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
padding: $padding $padding + $padding / 2; padding: $padding $padding + $padding / 2;
.item{
.item {
background-color: white; background-color: white;
line-height: 68rpx; line-height: 68rpx;
height: 68rpx; height: 68rpx;
@@ -120,8 +121,9 @@
box-shadow: 0 0 4rpx 4rpx rgba($color: $text-color, $alpha: .02); box-shadow: 0 0 4rpx 4rpx rgba($color: $text-color, $alpha: .02);
} }
} }
// 助记词 // 助记词
.mnemonic{ .mnemonic {
margin: $margin ($margin * 2); margin: $margin ($margin * 2);
border-radius: $radius-m; border-radius: $radius-m;
box-shadow: 0 0 4rpx 4rpx rgba($color: $text-color, $alpha: .02); box-shadow: 0 0 4rpx 4rpx rgba($color: $text-color, $alpha: .02);
@@ -130,7 +132,8 @@
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
align-items: flex-start; align-items: flex-start;
.item{
.item {
background: rgba($color: $border-color, $alpha: .4); background: rgba($color: $border-color, $alpha: .4);
min-width: 58rpx; min-width: 58rpx;
height: 58rpx; height: 58rpx;
@@ -138,23 +141,27 @@
text-align: center; text-align: center;
color: $text-color; color: $text-color;
margin: $margin / 2; margin: $margin / 2;
&.hide{
border:dashed 1px $border-color; &.hide {
border: dashed 1px $border-color;
box-sizing: border-box; box-sizing: border-box;
background-color: white; background-color: white;
} }
} }
} }
// 按钮 // 按钮
.buttons{ .buttons {
padding: $padding $padding * 2; padding: $padding $padding * 2;
.text{
.text {
text-align: center; text-align: center;
margin-bottom: $margin * 2; margin-bottom: $margin * 2;
font-size: $title-size-lg; font-size: $title-size-lg;
color: $text-price; color: $text-price;
} }
button{
button {
height: 90rpx; height: 90rpx;
line-height: 90rpx; line-height: 90rpx;
background-color: $main-color; background-color: $main-color;
@@ -162,7 +169,8 @@
color: white; color: white;
font-weight: bold; font-weight: bold;
font-size: $title-size; font-size: $title-size;
&[disabled]{
&[disabled] {
background: rgba($color: $main-color, $alpha: .8); background: rgba($color: $main-color, $alpha: .8);
} }
} }

View File

@@ -1,126 +0,0 @@
import Bitcore from "bitcore-lib"
import Mnemonic from "bitcore-mnemonic"
import secp256k1 from 'secp256k1'
import {
Address,
pubToAddress,
toBuffer,
toChecksumAddress,
intToBuffer
} from 'ethereumjs-util'
import coinType from './networks.js'
import basex from 'base-x'
export default class Wallet {
static coinType = coinType
/**
* 生成助记词
* @param {Object} lang
*/
static generateMnemonic(lang) {
if (lang) {
return (new Mnemonic(this.getLanguage(lang))).toString();
} else {
return (new Mnemonic()).toString();
}
}
/**
* 验证助记词
* @param {Object} code
* @param {Object} lang
*/
static validMnemonic(code, lang) {
if (lang) {
return Mnemonic.isValid(code, this.getLanguage(lang));
} else {
return Mnemonic.isValid(code);
}
}
/**
* 获取助记词字典
* @param {Object} lang
*/
static getLanguage(lang) {
return Mnemonic.Words[lang]
}
/**
* 转成硬钱包私钥
* @param {Object} code
*/
static toHDPrivateKey(code) {
return (new Mnemonic(code)).toHDPrivateKey()
}
/**
* 验证地址是否合法
* @param {Object} addr
*/
static isValidAddress(addr) {
return Bitcore.Address.isValid(addr)
}
/**
* 硬钱包私钥转成对应网络的 地址 和 私钥
* @param {Object} hdPrivateKey
* @param {Object} type
*/
static HDPrivateKeyToAddress(hdPrivateKey, type) {
const derived = hdPrivateKey.derive("m/44'/" + type.type + "'/0'/0/0");
if (type.type === 195) {
const ethAddr = this.getEthereumAddress(derived)
const addressBuffer = Buffer.concat([intToBuffer(0x41), ethAddr.buf], 21)
return {
address: Bitcore.encoding.Base58Check.encode(addressBuffer),
public_key: derived.privateKey.publicKey.toString(),
private_key: derived.privateKey.toString()
}
}
if (type.type === 144) {
let addr = derived.privateKey.toAddress(type.network).toString()
let deco = Bitcore.encoding.Base58.decode(addr)
return {
address: basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(deco),
public_key: derived.privateKey.publicKey.toString(),
private_key: derived.privateKey.toString()
}
}
if (this.networkIsEthereum(type)) {
return {
address: toChecksumAddress(this.getEthereumAddress(derived).toString()),
public_key: derived.privateKey.publicKey.toString(),
private_key: derived.privateKey.toString()
}
}
return {
address: derived.privateKey.toAddress(type.network).toString(),
public_key: derived.privateKey.publicKey.toString(),
private_key: derived.privateKey.toString()
}
}
/**
* 以太坊地址格式转换
* @param {Object} derived
*/
static getEthereumAddress(derived) {
const publicKey = derived.hdPublicKey.publicKey.toBuffer()
const ethPublicKey = secp256k1.publicKeyConvert(publicKey, false)
.slice(1)
return Address.fromPublicKey(toBuffer(ethPublicKey))
}
/**
* 是否是以太坊网络
* @param {Object} type
*/
static networkIsEthereum(type) {
return type.isEthereum
}
}

View File

@@ -1,29 +0,0 @@
import {
Wallet
} from "./Wallet.js"
const code = Wallet.generateMnemonic(this.defaultLanguage)
this.mnemonicCode = code
const hdPrivateKey = Wallet.toHDPrivateKey(this.mnemonicCode)
// const derived = hdPrivateKey.derive("m/44'/61'/0'/0/0");
// const publicKey = derived.hdPublicKey.publicKey.toBuffer()
// const ethPublicKey = secp256k1.publicKeyConvert(publicKey, false)
// .slice(1)
// const ethAddr = Address.fromPublicKey(toBuffer(ethPublicKey)).toString();
// console.log(toChecksumAddress(ethAddr));
// console.log(Address.fromPrivateKey(hdPrivateKey.hdPublicKey.publicKey.toBuffer()));
var addr = []
for (var i in this.coinType) {
let whk = Wallet.HDPrivateKeyToAddress(hdPrivateKey, i)
let parmas = {
name: this.coinType[i],
address: whk.address,
private_key: whk.private_key,
}
addr.push(parmas)
}
this.address = addr

View File

@@ -1,24 +0,0 @@
import store from "@/store/index.js"
const USE_SOTER_AUTH_KEY = 'USE_SOTER_AUTH_KEY'
/**
* 初始化配置
*/
const initWalletConfigs = () => {
// 生物识别
const USE_SOTER = Boolean(uni.getStorageSync(USE_SOTER_AUTH_KEY))
store.dispatch('wallet/setSoterAuth', USE_SOTER)
// 获取默认钱包
}
const setSoterAuthStatus = (opt) => {
uni.setStorageSync(USE_SOTER_AUTH_KEY, opt)
store.dispatch('wallet/setSoterAuth', opt)
}
export default {
USE_SOTER_AUTH_KEY,
setSoterAuthStatus,
initWalletConfigs
}

View File

@@ -1,209 +0,0 @@
import Bitcore from "bitcore-lib"
export default [{
type: 0,
name: '比特币',
symbol: 'BTC',
code: 'btc',
isEthereum: false,
network: Bitcore.Networks.mainnet
},
{
type: 60,
name: '以太坊',
symbol: 'ETH',
code: 'eth',
isEthereum: true
},
{
type: 61,
name: '以太经典',
symbol: 'ETC',
code: 'etc',
isEthereum: true
},
{
type: 60,
name: '赤子心',
symbol: 'CZX',
code: 'eth_0x3a2a239b1bdaae768ffa06314d523e88e98d4d1f',
isEthereum: true
},
// {
// type: 2,
// name: '莱特币',
// symbol: 'LTC',
// isEthereum: false,
// network: Bitcore.Networks.add({
// name: 'LTC',
// alias: 'LTC',
// pubkeyhash: 0x30,
// privatekey: 0x32,
// scripthash: 0xb0,
// bech32prefix: 'ltc',
// xpubkey: 0x019da462,
// xprivkey: 0x019d9cfe,
// networkMagic: 0xdbb6c0fb
// })
// },
{
type: 3,
name: '狗狗币',
symbol: 'DOGE',
code: 'doge',
isEthereum: false,
network: Bitcore.Networks.add({
name: 'DOGE',
alias: 'DOGE',
pubkeyhash: 0x1e,
privatekey: 0x16,
scripthash: 0x9e,
bech32prefix: 'doge',
xpubkey: 0x02facafd,
xprivkey: 0x02fac398,
networkMagic: 0xc0c0c0c0
})
},
// {
// type: 133,
// name: '零币',
// symbol: 'ZEC',
// isEthereum: false,
// network: Bitcore.Networks.add({
// name: 'ZEC',
// alias: 'ZEC',
// pubkeyhash: 0x1e,
// privatekey: 0x16,
// scripthash: 0x9e,
// bech32prefix: 'doge',
// xpubkey: 0x02facafd,
// xprivkey: 0x02fac398,
// networkMagic: 0xc0c0c0c0
// })
// },
// {
// type: 144,
// name: 'XPR - 瑞波币',
// symbol: 'XPR',
// isEthereum: false,
// network: Bitcore.Networks.add({
// name: 'XPR',
// alias: 'XPR',
// pubkeyhash: 0x1e,
// privatekey: 0x16,
// scripthash: 0x9e,
// bech32prefix: 'doge',
// xpubkey: 0x02facafd,
// xprivkey: 0x02fac398,
// networkMagic: 0xc0c0c0c0
// })
// },
// {
// type: 145,
// name: '比特现金',
// symbol: 'BCH',
// isEthereum: false,
// network: Bitcore.Networks.add({
// name: 'BCH',
// alias: 'BCH',
// pubkeyhash: 0x00,
// privatekey: 0x05,
// scripthash: 0x80,
// bech32prefix: 'bitcoincash',
// xpubkey: 0x0488b21e,
// xprivkey: 0x0488ade4,
// networkMagic: 0xd9b4bef9
// })
// },
// {
// type: 195,
// name: '波场',
// symbol: 'TRX',
// isEthereum: false,
// network: Bitcore.Networks.add({
// name: 'TRX',
// alias: 'TRX',
// pubkeyhash: 0x41,
// privatekey: 0x05,
// scripthash: 0x80,
// bech32prefix: '',
// xpubkey: 0x0488b21e,
// xprivkey: 0x0488ade4
// })
// },
{
type: 195,
name: 'USDT(TRC20)',
symbol: 'USDT',
code: 'trx_TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',
isEthereum: false,
network: Bitcore.Networks.add({
name: 'USDT',
alias: 'USDT',
pubkeyhash: 0x41,
privatekey: 0x05,
scripthash: 0x80,
bech32prefix: '',
xpubkey: 0x0488b21e,
xprivkey: 0x0488ade4
})
},
{
type: 195,
name: 'USDT(ERC20)',
symbol: 'USDT',
code: 'eth_0xdac17f958d2ee523a2206206994597c13d831ec7',
isEthereum: true
},
{
type: 0,
name: 'USDT(OMNI)',
symbol: 'USDT',
code: 'usdt',
isEthereum: false,
network: Bitcore.Networks.mainnet
},
{
type: 13107,
name: '比特元',
symbol: 'BTY',
code: 'bty',
isEthereum: false,
network: Bitcore.Networks.add({
name: 'BTY',
alias: 'BTY',
pubkeyhash: 0x00,
privatekey: 0x05,
scripthash: 0x80,
bech32prefix: 'bityuan',
xpubkey: 0x0488b21e,
xprivkey: 0x0488ade4,
networkMagic: 0xd9b4bef9
})
},
// {
// type: 60,
// name: '元链',
// symbol: 'YCC',
// isEthereum: true
// },
{
type: 13107,
name: 'JZC',
symbol: 'JZC',
code: 'bty',
isEthereum: false,
network: Bitcore.Networks.add({
name: 'JZC',
alias: 'JZC',
pubkeyhash: 0x00,
privatekey: 0x05,
scripthash: 0x80,
bech32prefix: 'bityuan',
xpubkey: 0x0488b21e,
xprivkey: 0x0488ade4,
networkMagic: 0xd9b4bef9
})
}
]

207
yarn.lock
View File

@@ -2,194 +2,27 @@
# yarn lockfile v1 # yarn lockfile v1
"base-x@^3.0.2": moment@^2.29.1:
"integrity" "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==" version "2.29.1"
"resolved" "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz"
"version" "3.0.9" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
dependencies:
"safe-buffer" "^5.0.1"
"bech32@=2.0.0": uni-read-pages@^1.0.5:
"integrity" "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" version "1.0.5"
"resolved" "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz" resolved "https://registry.npmjs.org/uni-read-pages/-/uni-read-pages-1.0.5.tgz"
"version" "2.0.0" integrity sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA==
"bigi@^1.1.0", "bigi@^1.4.2": uni-simple-router@^2.0.7:
"integrity" "sha1-nGZalfiLiwj8Bc/XMfVhhZ1yWCU=" version "2.0.7"
"resolved" "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz" resolved "https://registry.npmjs.org/uni-simple-router/-/uni-simple-router-2.0.7.tgz"
"version" "1.4.2" integrity sha512-8FKv5dw7Eoonm0gkO8udprrxzin0fNUI0+AvIphFkFRH5ZmP5ZWJ2pvnWzb2NiiqQSECTSU5VSB7HhvOSwD5eA==
"bip-schnorr@=0.6.4": uview-ui@^2.0.19:
"integrity" "sha512-dNKw7Lea8B0wMIN4OjEmOk/Z5qUGqoPDY0P2QttLqGk1hmDPytLWW8PR5Pb6Vxy6CprcdEgfJpOjUu+ONQveyg==" version "2.0.19"
"resolved" "https://registry.npmjs.org/bip-schnorr/-/bip-schnorr-0.6.4.tgz" resolved "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.19.tgz"
"version" "0.6.4" integrity sha512-ddZiaP7R9wsUxMzAuhuXgh5OswgCm2lKuulTqjnRXFr0uUWsgL1iBifU3GbOwpwP0LtTHKJOo9rYv1LP0WXmzA==
dependencies:
"bigi" "^1.4.2"
"ecurve" "^1.0.6"
"js-sha256" "^0.9.0"
"randombytes" "^2.1.0"
"safe-buffer" "^5.2.1"
"bitcore-lib@^8.25.25": vuex@^3.6.2:
"integrity" "sha512-H6qNCVl4M8/MglXhvc04mmeus1d6nrmqTJGQ+xezJLvL7hs7R3dyBPtOqSP3YSw0iq/GWspMd8f5OOlyXVipJQ==" version "3.6.2"
"resolved" "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-8.25.25.tgz" resolved "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz"
"version" "8.25.25" integrity sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==
dependencies:
"bech32" "=2.0.0"
"bip-schnorr" "=0.6.4"
"bn.js" "=4.11.8"
"bs58" "^4.0.1"
"buffer-compare" "=1.1.1"
"elliptic" "^6.5.3"
"inherits" "=2.0.1"
"lodash" "^4.17.20"
"bitcore-mnemonic@^8.25.25":
"integrity" "sha512-7HvRxHrmd+Rh0Ohl0SEDMKQBAM+FoevXbCFnxGju6H+uZjtWMOToHA8vUg0+B91pfEMjdt9mQVB/wSA8GMqnCA=="
"resolved" "https://registry.npmjs.org/bitcore-mnemonic/-/bitcore-mnemonic-8.25.25.tgz"
"version" "8.25.25"
dependencies:
"bitcore-lib" "^8.25.25"
"unorm" "^1.4.1"
"bn.js@^4.11.9":
"integrity" "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA=="
"resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz"
"version" "4.12.0"
"bn.js@=4.11.8":
"integrity" "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
"resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz"
"version" "4.11.8"
"brorand@^1.1.0":
"integrity" "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
"resolved" "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz"
"version" "1.1.0"
"bs58@^4.0.1":
"integrity" "sha1-vhYedsNU9veIrkBx9j806MTwpCo="
"resolved" "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz"
"version" "4.0.1"
dependencies:
"base-x" "^3.0.2"
"buffer-compare@=1.1.1":
"integrity" "sha1-W+e+hTr4kZjR9N3AkNHWakiu9ZY="
"resolved" "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.1.1.tgz"
"version" "1.1.1"
"ecurve@^1.0.6":
"integrity" "sha512-/BzEjNfiSuB7jIWKcS/z8FK9jNjmEWvUV2YZ4RLSmcDtP7Lq0m6FvDuSnJpBlDpGRpfRQeTLGLBI8H+kEv0r+w=="
"resolved" "https://registry.npmjs.org/ecurve/-/ecurve-1.0.6.tgz"
"version" "1.0.6"
dependencies:
"bigi" "^1.1.0"
"safe-buffer" "^5.0.1"
"elliptic@^6.5.3":
"integrity" "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ=="
"resolved" "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz"
"version" "6.5.4"
dependencies:
"bn.js" "^4.11.9"
"brorand" "^1.1.0"
"hash.js" "^1.0.0"
"hmac-drbg" "^1.0.1"
"inherits" "^2.0.4"
"minimalistic-assert" "^1.0.1"
"minimalistic-crypto-utils" "^1.0.1"
"hash.js@^1.0.0", "hash.js@^1.0.3":
"integrity" "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="
"resolved" "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz"
"version" "1.1.7"
dependencies:
"inherits" "^2.0.3"
"minimalistic-assert" "^1.0.1"
"hmac-drbg@^1.0.1":
"integrity" "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE="
"resolved" "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz"
"version" "1.0.1"
dependencies:
"hash.js" "^1.0.3"
"minimalistic-assert" "^1.0.0"
"minimalistic-crypto-utils" "^1.0.1"
"inherits@^2.0.3":
"integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
"resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
"version" "2.0.4"
"inherits@^2.0.4":
"integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
"resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
"version" "2.0.4"
"inherits@=2.0.1":
"integrity" "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
"resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
"version" "2.0.1"
"js-sha256@^0.9.0":
"integrity" "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA=="
"resolved" "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz"
"version" "0.9.0"
"lodash@^4.17.20":
"integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
"resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
"version" "4.17.21"
"minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1":
"integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
"resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz"
"version" "1.0.1"
"minimalistic-crypto-utils@^1.0.1":
"integrity" "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
"resolved" "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz"
"version" "1.0.1"
"moment@^2.29.1":
"integrity" "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
"resolved" "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz"
"version" "2.29.1"
"randombytes@^2.1.0":
"integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="
"resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz"
"version" "2.1.0"
dependencies:
"safe-buffer" "^5.1.0"
"safe-buffer@^5.0.1", "safe-buffer@^5.1.0", "safe-buffer@^5.2.1":
"integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
"resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
"version" "5.2.1"
"uni-read-pages@^1.0.5":
"integrity" "sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA=="
"resolved" "https://registry.npmjs.org/uni-read-pages/-/uni-read-pages-1.0.5.tgz"
"version" "1.0.5"
"uni-simple-router@^2.0.7":
"integrity" "sha512-8FKv5dw7Eoonm0gkO8udprrxzin0fNUI0+AvIphFkFRH5ZmP5ZWJ2pvnWzb2NiiqQSECTSU5VSB7HhvOSwD5eA=="
"resolved" "https://registry.npmjs.org/uni-simple-router/-/uni-simple-router-2.0.7.tgz"
"version" "2.0.7"
"unorm@^1.4.1":
"integrity" "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA=="
"resolved" "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz"
"version" "1.6.0"
"uview-ui@^2.0.19":
"integrity" "sha512-ddZiaP7R9wsUxMzAuhuXgh5OswgCm2lKuulTqjnRXFr0uUWsgL1iBifU3GbOwpwP0LtTHKJOo9rYv1LP0WXmzA=="
"resolved" "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.19.tgz"
"version" "2.0.19"
"vuex@^3.6.2":
"integrity" "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw=="
"resolved" "https://registry.npmjs.org/vuex/-/vuex-3.6.2.tgz"
"version" "3.6.2"