diff --git a/README.md b/README.md
index daf267249..573038798 100644
--- a/README.md
+++ b/README.md
@@ -3,69 +3,85 @@ Wallet CLI
Download java-tron and wallet-cli
-
+---------------------------------
git clone https://github.com/tronprotocol/java-tron.git
git clone https://github.com/tronprotocol/wallet-cli.git
Build and run java-tron
-
-cd java-tron
-
+-------------------------
+cd java-tron
./gradlew build
-./gradlew run
+./gradlew run -Pwitness
-Build and run wallet-cli
+Build and run wallet-cli by command line
+----------------------------------------
Create a new command line terminal window.
-cd wallet-cli
-
+cd wallet-cli
./gradlew build
./gradlew run -Pcmd
-
-You can enter the following command:
-RegisterWallet
-
-ImportWallet
-
-ChangePassword
-
-Login
-
-Logout
-
-BackupWallet
-
-Getaddress
-
-GetBalance
-
-GetAccount
+How wallet-cli connects to java-tron :
+--------------------------------------
+Wallet-cli connect to java-tron by grpc protocol.
+Java-tron nodes can be deployed locally or remotely.
+We can set the connected java-tron node IP in config.conf of wallet-cli.
+
+Java-tron provides grpc api list:
+------------------------------------
+
+rpc GetAccount (Account) returns (Account)
+rpc CreateTransaction (TransferContract) returns (Transaction)
+rpc BroadcastTransaction (Transaction) returns (Return)
+rpc ListAccounts (EmptyMessage) returns (AccountList)
+rpc CreateAccount (AccountCreateContract) returns (Transaction)
+rpc VoteWitnessAccount (VoteWitnessContract) returns (Transaction)
+rpc CreateAssetIssue (AssetIssueContract) returns (Transaction)
+rpc ListWitnesses (EmptyMessage) returns (WitnessList)
+rpc UpdateWitness (WitnessUpdateContract) returns (Transaction)
+rpc CreateWitness (WitnessCreateContract) returns (Transaction)
+rpc TransferAsset (TransferAssetContract) returns (Transaction)
+rpc ParticipateAssetIssue (ParticipateAssetIssueContract) returns (Transaction)
+rpc ListNodes (EmptyMessage) returns (NodeList)
+rpc GetAssetIssueList (EmptyMessage) returns (AssetIssueList)
+rpc GetAssetIssueByAccount (Account) returns (AssetIssueList)
+rpc GetAssetIssueByName (BytesMessage) returns (AssetIssueContract)
+rpc GetNowBlock (EmptyMessage) returns (Block)
+rpc GetBlockByNum (NumberMessage) returns (Block)
+
+Wallet-cli supported command list:
+----------------------------------
+
+RegisterWallet
+ImportWallet
+ImportwalletByBase64
+ChangePassword
+Login
+Logout
+BackupWallet
+BackupWallet2Base64
+Getaddress
+GetBalance
+GetAccount
GetAssetissueByAccount
-
-SendCoin
-
-TransferAsset
-
-ParticipateAssetissue
-
-Assetissue
-
-CreateWitness
-
-VoteWitness
-
-Listaccounts
-
-Listwitnesses
-
+GetAssetIssueByName
+SendCoin
+TransferAsset
+ParticipateAssetissue
+Assetissue
+CreateWitness
+VoteWitness
+Listaccounts
+Listwitnesses
Listassetissue
+GetAssetIssueByName
+Getblock
+Exit or Quit
+help
-Getblock
+Input any one of then, you will get more tips.
-Exit or Quit
-Input any one of then, you will get more tips.
diff --git a/Wallet b/Wallet
old mode 100644
new mode 100755
diff --git a/build.gradle b/build.gradle
index c2301c209..a764cce91 100644
--- a/build.gradle
+++ b/build.gradle
@@ -117,6 +117,10 @@ dependencies {
//spring-boot-devtools
compile group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '1.5.6.RELEASE'
+ //spring test
+ testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '1.5.6.RELEASE'
+ testCompile group: 'org.springframework', name: 'spring-test', version: '4.3.10.RELEASE'
+
}
diff --git a/src/main/java/org/tron/common/utils/TransactionUtils.java b/src/main/java/org/tron/common/utils/TransactionUtils.java
index faaeb064a..2982c96b4 100644
--- a/src/main/java/org/tron/common/utils/TransactionUtils.java
+++ b/src/main/java/org/tron/common/utils/TransactionUtils.java
@@ -74,6 +74,9 @@ public static byte[] getOwner(Transaction.Contract contract) {
case AssetIssueContract:
owner = contract.getParameter().unpack(org.tron.protos.Contract.AssetIssueContract.class).getOwnerAddress();
break;
+ case ParticipateAssetIssueContract:
+ owner = contract.getParameter().unpack(org.tron.protos.Contract.ParticipateAssetIssueContract.class).getOwnerAddress();
+ break;
case DeployContract:
owner = contract.getParameter().unpack(org.tron.protos.Contract.AssetIssueContract.class).getOwnerAddress();
break;
@@ -184,7 +187,11 @@ public static boolean validTransaction(Transaction signedTransaction) {
signedTransaction.getRawData().getContractCount());
List listContract = signedTransaction.getRawData().getContractList();
byte[] hash = sha256(signedTransaction.getRawData().toByteArray());
- for (int i = 0; i < signedTransaction.getSignatureCount(); ++i) {
+ int count = signedTransaction.getSignatureCount();
+ if ( count == 0 ){
+ return false;
+ }
+ for (int i = 0; i < count; ++i) {
try {
Transaction.Contract contract = listContract.get(i);
byte[] owner = getOwner(contract);
diff --git a/src/main/java/org/tron/explorer/GrpcClientApplication.java b/src/main/java/org/tron/explorer/GrpcClientApplication.java
index 7910b2527..b48b4fe7d 100644
--- a/src/main/java/org/tron/explorer/GrpcClientApplication.java
+++ b/src/main/java/org/tron/explorer/GrpcClientApplication.java
@@ -4,7 +4,6 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.SerializationFeature;
-import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -19,17 +18,16 @@
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+import java.util.List;
+
@EnableScheduling
@SpringBootApplication
public class GrpcClientApplication extends SpringBootServletInitializer {
-
-
@Bean
public ObjectMapper objectMapper() {
final ObjectMapper mapper = new ObjectMapper();
@@ -44,16 +42,8 @@ public ObjectMapper objectMapper() {
@Autowired
ObjectMapper objectMapper;
-
-// @Bean
-// ProtobufHttpMessageConverter protobufHttpMessageConverter() {
-// return new ProtobufHttpMessageConverter();
-// }
-
@Bean
public WebMvcConfigurer webMvcConfigurer() {
-
-
return new WebMvcConfigurerAdapter() {
@@ -62,7 +52,7 @@ public WebMvcConfigurer webMvcConfigurer() {
*/
@Override
public void configureMessageConverters(List> converters) {
- final ProtobufHttpMessageConverter protobufconverter = new ProtobufHttpMessageConverter();
+ final ProtobufHttpMessageConverter protobufconverter = new ProtobufHttpMessageConverter();
final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setObjectMapper(objectMapper);
converters.add(converter);
@@ -72,9 +62,6 @@ public void configureMessageConverters(List> converters)
};
}
-
-
- //fix cors
@Configuration
public class CorsConfig {
private CorsConfiguration buildConfig() {
@@ -91,14 +78,12 @@ public CorsFilter corsFilter() {
source.registerCorsConfiguration("/**", buildConfig()); // 4
return new CorsFilter(source);
}
-
}
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(GrpcClientApplication.class);
}
-
public static void main(String[] args) {
SpringApplication.run(GrpcClientApplication.class, args);
}
diff --git a/src/main/java/org/tron/explorer/controller/AssetIssueController.java b/src/main/java/org/tron/explorer/controller/AssetIssueController.java
index c0ecace54..497ba5465 100644
--- a/src/main/java/org/tron/explorer/controller/AssetIssueController.java
+++ b/src/main/java/org/tron/explorer/controller/AssetIssueController.java
@@ -4,7 +4,6 @@
import java.io.IOException;
import java.util.Base64;
import java.util.Base64.Decoder;
-import java.util.List;
import java.util.Optional;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -30,12 +29,12 @@ public class AssetIssueController {
protected final Log log = LogFactory.getLog(getClass());
@ModelAttribute
- AssetIssueVo setAssetIssueVo() {
- return new AssetIssueVo();
+ AssetIssueVo setAssetIssueVo() {
+ return new AssetIssueVo();
}
@ModelAttribute
- TransferAsset setTransferAsset() {
+ TransferAsset setTransferAsset() {
return new TransferAsset();
}
@@ -51,7 +50,6 @@ public ModelAndView viewCreateWitness() {
}
-
@PostMapping("/createAssetIssueToView")
public byte[] getTransactionToView(@ModelAttribute AssetIssueVo assetIssueVo) {
try {
@@ -78,14 +76,14 @@ public byte[] getTransactionToView(@ModelAttribute AssetIssueVo assetIssueVo) {
transaction = TransactionUtils.setTimestamp(transaction);
return transaction.toByteArray();
} catch (Exception e) {
+ System.out.printf("error=====" + e.getMessage());
e.printStackTrace();
return null;
}
}
@GetMapping("/getAssetIssueList")
- public byte[] getAssetIssueList()
- throws IOException {
+ public byte[] getAssetIssueList() throws IOException {
try {
Optional result = WalletClient.getAssetIssueList();
if (result.isPresent()) {
@@ -99,14 +97,12 @@ public byte[] getAssetIssueList()
}
@GetMapping("/getAssetIssueByAccount")
- public byte[] getAssetIssueByAccount(String address)
- throws IOException {
+ public byte[] getAssetIssueByAccount(String address) throws IOException {
try {
if (!WalletClient.addressValid(address)) {
return null;
}
- Decoder decoder = Base64.getDecoder();
- byte[] owner = decoder.decode(address.getBytes());
+ byte[] owner = ByteArray.fromHexString(address);
Optional result = WalletClient.getAssetIssueByAccount(owner);
if (result.isPresent()) {
@@ -127,7 +123,7 @@ public byte[] getTransactionToView(@ModelAttribute TransferAsset transferAsset)
}
Transaction transaction = WalletClient
.createTransferAssetTransaction(ByteArray.fromHexString(transferAsset.getToAddress()),
- ByteArray.fromHexString(transferAsset.getAssetName()),
+ ByteArray.fromString(transferAsset.getAssetName()),
ByteArray.fromHexString(transferAsset.getAddress()),
Long.parseLong(transferAsset.getAmount()));
transaction = TransactionUtils.setTimestamp(transaction);
diff --git a/src/main/java/org/tron/explorer/controller/AssetTransferController.java b/src/main/java/org/tron/explorer/controller/AssetTransferController.java
new file mode 100644
index 000000000..5805e6fe1
--- /dev/null
+++ b/src/main/java/org/tron/explorer/controller/AssetTransferController.java
@@ -0,0 +1,51 @@
+package org.tron.explorer.controller;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.tron.common.utils.ByteArray;
+import org.tron.common.utils.TransactionUtils;
+import org.tron.explorer.domain.TransferAsset;
+import org.tron.protos.Contract.TransferContract;
+import org.tron.protos.Protocol.Transaction;
+import org.tron.walletserver.WalletClient;
+
+@RestController
+public class AssetTransferController {
+
+ protected final Log log = LogFactory.getLog(getClass());
+
+ @PostMapping("/sendAssetCoinToView")
+ public byte[] getTransactionToView(@ModelAttribute TransferAsset transferAsset) {
+ Transaction transaction;
+ try {
+ if (transferAsset == null) {
+ return null;
+ }
+ if (transferAsset.getAssetName() != "TRX") {
+ transaction = WalletClient
+ .createTransferAssetTransaction(ByteArray.fromHexString(transferAsset.getToAddress()),
+ ByteArray.fromHexString(transferAsset.getAssetName()),
+ ByteArray.fromHexString(transferAsset.getAddress()),
+ Long.parseLong(transferAsset.getAmount()));
+ } else {
+ TransferContract contract = WalletClient
+ .createTransferContract(ByteArray.fromHexString(transferAsset.getToAddress()),
+ ByteArray.fromHexString(transferAsset.getAddress()),
+ Long.parseLong(transferAsset.getAmount()));
+ transaction = WalletClient.createTransaction4Transfer(contract);
+ }
+
+ transaction = TransactionUtils.setTimestamp(transaction);
+ return transaction.toByteArray();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+
+
+ }
+
+}
diff --git a/src/main/java/org/tron/explorer/controller/BlockController.java b/src/main/java/org/tron/explorer/controller/BlockController.java
index 79ce06ae2..9e856a7e0 100644
--- a/src/main/java/org/tron/explorer/controller/BlockController.java
+++ b/src/main/java/org/tron/explorer/controller/BlockController.java
@@ -15,8 +15,6 @@
package org.tron.explorer.controller;
import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.tron.walletserver.WalletClient;
import org.tron.protos.Protocol.Block;
@@ -26,8 +24,9 @@ public class BlockController {
@GetMapping("/getBlockByNumToView")
+ public byte[] getBlockByNumToView( long num) {
+ System.out.println("num is : " +num);
- public byte[] getBlockByNumToView(long num) {
Block currentBlock = WalletClient.GetBlock(num);
return currentBlock.toByteArray();
diff --git a/src/main/java/org/tron/explorer/controller/CommController.java b/src/main/java/org/tron/explorer/controller/CommController.java
index e782d1dba..fcffefd54 100644
--- a/src/main/java/org/tron/explorer/controller/CommController.java
+++ b/src/main/java/org/tron/explorer/controller/CommController.java
@@ -25,7 +25,7 @@ public class CommController {
@RequestMapping(value = "/html/{pageName}", method = { RequestMethod.POST, RequestMethod.GET })
public String toPage(@PathVariable("pageName") String pageName) {
- return "/html/" + pageName;
+ return "html/" + pageName;
}
}
diff --git a/src/main/java/org/tron/explorer/controller/GrpcClientController.java b/src/main/java/org/tron/explorer/controller/GrpcClientController.java
index 7415d8460..94a70a708 100644
--- a/src/main/java/org/tron/explorer/controller/GrpcClientController.java
+++ b/src/main/java/org/tron/explorer/controller/GrpcClientController.java
@@ -1,22 +1,8 @@
package org.tron.explorer.controller;
-import static org.tron.common.crypto.Hash.sha256;
-
import com.google.protobuf.Any;
import com.google.protobuf.InvalidProtocolBufferException;
import com.googlecode.protobuf.format.JsonFormat;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiOperation;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.math.BigInteger;
-import java.security.SignatureException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Base64;
-import java.util.Base64.Encoder;
-import java.util.List;
-import java.util.Optional;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.bind.annotation.GetMapping;
@@ -24,8 +10,6 @@
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
-import org.tron.api.GrpcAPI.AccountList;
-import org.tron.api.GrpcAPI.WitnessList;
import org.tron.common.crypto.ECKey;
import org.tron.common.crypto.ECKey.ECDSASignature;
import org.tron.common.utils.ByteArray;
@@ -38,6 +22,18 @@
import org.tron.walletcli.Test;
import org.tron.walletserver.WalletClient;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
+import java.security.SignatureException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Base64;
+import java.util.Base64.Encoder;
+import java.util.List;
+
+import static org.tron.common.crypto.Hash.sha256;
+
@RestController
public class GrpcClientController {
@@ -145,6 +141,10 @@ public byte[] getTransactionToView(@ModelAttribute AccountVo account) {
//get account transaction from view
@PostMapping("/transactionFromView")
public boolean transactionFromView(String transactionData) throws InvalidProtocolBufferException {
+ System.out.println("pppppppppppp");
+ if ( transactionData == null || transactionData.equals("")){
+ return false;
+ }
final byte[] bytes = ByteArray.fromHexString(transactionData);
return WalletClient.broadcastTransaction(bytes);
}
diff --git a/src/main/java/org/tron/explorer/controller/VoteWitnessController.java b/src/main/java/org/tron/explorer/controller/VoteWitnessController.java
index 6afcb067a..d42e09aa2 100644
--- a/src/main/java/org/tron/explorer/controller/VoteWitnessController.java
+++ b/src/main/java/org/tron/explorer/controller/VoteWitnessController.java
@@ -3,15 +3,15 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.tron.api.GrpcAPI.WitnessList;
import org.tron.common.utils.ByteArray;
import org.tron.common.utils.TransactionUtils;
import org.tron.explorer.domain.VoteWitness;
import org.tron.explorer.domain.Witness;
-import org.tron.protos.Protocol.Transaction;
+import org.tron.protos.Protocol;
import org.tron.walletserver.WalletClient;
import java.util.HashMap;
@@ -22,53 +22,46 @@
@RestController
public class VoteWitnessController {
- protected final Log log = LogFactory.getLog(getClass());
+ protected final Log log = LogFactory.getLog(getClass());
- @ModelAttribute
- VoteWitness setVoteWitness() {
- return new VoteWitness();
- }
- @GetMapping("/voteWitnessList")
- public byte[] getVoteWitnessList() {
- Optional result = WalletClient.listWitnesses();
- if (result.isPresent()) {
- WitnessList witnessList = result.get();
- return witnessList.toByteArray();
- } else {
- return null;
+ @GetMapping("/voteWitnessList")
+ public byte[] getVoteWitnessList() {
+ Optional result = WalletClient.listWitnesses();
+ if (result.isPresent()) {
+ WitnessList witnessList = result.get();
+ return witnessList.toByteArray();
+ } else {
+ return null;
+ }
}
- }
- @PostMapping("/createVoteWitnessToView")
- public byte[] getTransactionToView(@ModelAttribute VoteWitness voteWitness) {
- try {
- if (voteWitness.getOwnerAddress() == null || voteWitness.getList() == null) {
- return null;
- }
- if (!WalletClient.addressValid(voteWitness.getOwnerAddress())) {
- return null;
- }
- List list = voteWitness.getList();
- String ownerAddress = voteWitness.getOwnerAddress();
- HashMap m = new HashMap<>();
- for (int i = 0; i <= list.size(); i++) {
- String address = list.get(i).getAddress();
- String acount = list.get(i).getAmount();
- m.put(address, acount);
- }
+ @PostMapping("/createVoteWitnessToView")
+ public byte[] getTransactionToView(@RequestBody VoteWitness voteWitness) {
+ try {
+ if (voteWitness.getOwner() == null || voteWitness.getList() == null) {
+ return null;
+ }
+ if (!WalletClient.addressValid(voteWitness.getOwner())) {
+ return null;
+ }
+ List list = voteWitness.getList();
+ String ownerAddress = voteWitness.getOwner();
+ HashMap voteMap = new HashMap<>();
- Transaction transaction = WalletClient
- .createVoteWitnessTransaction(ByteArray.fromHexString(ownerAddress), m);
- transaction = TransactionUtils.setTimestamp(transaction);
-
- return transaction.toByteArray();
-
- } catch (Exception e) {
- e.printStackTrace();
- return null;
+ for (int i = 0; i < list.size(); i++) {
+ String addressHex = list.get(i).getAddress();
+ String count = list.get(i).getAmount();
+ voteMap.put(addressHex, count);
+ }
+ Protocol.Transaction transaction = WalletClient
+ .createVoteWitnessTransaction(ByteArray.fromHexString(ownerAddress), voteMap);
+ transaction = TransactionUtils.setTimestamp(transaction);
+ return transaction.toByteArray();
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
}
- }
-
}
diff --git a/src/main/java/org/tron/explorer/controller/WitnessController.java b/src/main/java/org/tron/explorer/controller/WitnessController.java
index a19298c34..3639f24d5 100644
--- a/src/main/java/org/tron/explorer/controller/WitnessController.java
+++ b/src/main/java/org/tron/explorer/controller/WitnessController.java
@@ -1,9 +1,5 @@
package org.tron.explorer.controller;
-import java.io.IOException;
-import java.util.Base64;
-import java.util.Base64.Decoder;
-import java.util.List;
import java.util.Optional;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -11,11 +7,10 @@
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
-import org.tron.api.GrpcAPI.AssetIssueList;
import org.tron.api.GrpcAPI.WitnessList;
+import org.tron.common.utils.ByteArray;
import org.tron.common.utils.TransactionUtils;
import org.tron.protos.Protocol.Transaction;
-import org.tron.protos.Protocol.Witness;
import org.tron.walletserver.WalletClient;
@@ -57,9 +52,9 @@ public byte[] getTransactionToView(String address, String onwerUrl) {
if (onwerUrl == null || onwerUrl.equals("")) {
return null;
}
- Decoder decoder = Base64.getDecoder();
- byte[] owner = decoder.decode(address.getBytes());
- Transaction transaction = WalletClient.createWitnessTransaction(owner, onwerUrl.getBytes());
+
+ Transaction transaction = WalletClient
+ .createWitnessTransaction(ByteArray.fromHexString(address), onwerUrl.getBytes());
transaction = TransactionUtils.setTimestamp(transaction);
return transaction.toByteArray();
} catch (Exception e) {
diff --git a/src/main/java/org/tron/explorer/domain/VoteWitness.java b/src/main/java/org/tron/explorer/domain/VoteWitness.java
index 33fc798f0..46563ed82 100644
--- a/src/main/java/org/tron/explorer/domain/VoteWitness.java
+++ b/src/main/java/org/tron/explorer/domain/VoteWitness.java
@@ -3,24 +3,15 @@
import java.util.List;
public class VoteWitness {
+ private String owner;
+ private List list;
- String ownerAddress;
- List list;
-
- public VoteWitness(String ownerAddress, List list) {
- this.ownerAddress = ownerAddress;
- this.list = list;
- }
-
- public VoteWitness() {
- }
-
- public String getOwnerAddress() {
- return ownerAddress;
+ public String getOwner() {
+ return owner;
}
- public void setOwnerAddress(String ownerAddress) {
- this.ownerAddress = ownerAddress;
+ public void setOwner(String owner) {
+ this.owner = owner;
}
public List getList() {
@@ -30,4 +21,13 @@ public List getList() {
public void setList(List list) {
this.list = list;
}
+
+ public VoteWitness(String owner, List list) {
+ this.owner = owner;
+ this.list = list;
+ }
+
+ public VoteWitness(){
+
+ }
}
diff --git a/src/main/java/org/tron/explorer/domain/Witness.java b/src/main/java/org/tron/explorer/domain/Witness.java
index dc7f7b0df..67d897a57 100644
--- a/src/main/java/org/tron/explorer/domain/Witness.java
+++ b/src/main/java/org/tron/explorer/domain/Witness.java
@@ -2,8 +2,13 @@
public class Witness {
- String address;
- String amount;
+ private String address;
+ private String amount;
+
+ public Witness(String address, String amount){
+ this.address = address;
+ this.amount = amount;
+ }
public Witness() {
}
diff --git a/src/main/java/org/tron/walletcli/Client.java b/src/main/java/org/tron/walletcli/Client.java
index 319857692..31e2452f3 100644
--- a/src/main/java/org/tron/walletcli/Client.java
+++ b/src/main/java/org/tron/walletcli/Client.java
@@ -106,7 +106,7 @@ public void logout() {
}
//password is current, will be enc by password2.
- public String backupWallet(String password, String encPassword) {
+ public String backupWallet(String password) {
if (wallet == null || !wallet.isLoginState()) {
logger.warn("Warning: BackupWallet failed, Please login first !!");
return null;
@@ -115,10 +115,6 @@ public String backupWallet(String password, String encPassword) {
logger.warn("Warning: BackupWallet failed, password is Invalid !!");
return null;
}
- if (!WalletClient.passwordValid(encPassword)) {
- logger.warn("Warning: BackupWallet failed, encPassword is Invalid !!");
- return null;
- }
if (!WalletClient.checkPassWord(password)) {
logger
@@ -139,9 +135,7 @@ public String backupWallet(String password, String encPassword) {
ECKey ecKey = wallet.getEcKey();
byte[] privKeyPlain = ecKey.getPrivKeyBytes();
//Enced by encPassword
- byte[] aseKey = WalletClient.getEncKey(encPassword);
- byte[] privKeyEnced = SymmEncoder.AES128EcbEnc(privKeyPlain, aseKey);
- String priKey = ByteArray.toHexString(privKeyEnced);
+ String priKey = ByteArray.toHexString(privKeyPlain);
return priKey;
}
@@ -164,14 +158,6 @@ public Account queryAccount() {
return null;
}
- if (wallet.getEcKey() == null) {
- wallet = WalletClient.GetWalletByStorageIgnorPrivKey();
- if (wallet == null) {
- logger.warn("Warning: QueryAccount failed, Load wallet failed !!");
- return null;
- }
- }
-
try {
return wallet.queryAccount();
} catch (Exception ex) {
@@ -354,7 +340,7 @@ public Block GetBlock(long blockNum) {
public boolean voteWitness(String password, HashMap witness) {
if (wallet == null || !wallet.isLoginState()) {
- logger.warn("Warning: SendCoin failed, Please login first !!");
+ logger.warn("Warning: VoteWitness failed, Please login first !!");
return false;
}
if (!WalletClient.passwordValid(password)) {
@@ -364,7 +350,7 @@ public boolean voteWitness(String password, HashMap witness) {
if (wallet.getEcKey() == null || wallet.getEcKey().getPrivKey() == null) {
wallet = WalletClient.GetWalletByStorage(password);
if (wallet == null) {
- logger.warn("Warning: SendCoin failed, Load wallet failed !!");
+ logger.warn("Warning: VoteWitness failed, Load wallet failed !!");
return false;
}
}
diff --git a/src/main/java/org/tron/walletcli/TestClient.java b/src/main/java/org/tron/walletcli/TestClient.java
old mode 100644
new mode 100755
index 53e256f2b..62ec21fb0
--- a/src/main/java/org/tron/walletcli/TestClient.java
+++ b/src/main/java/org/tron/walletcli/TestClient.java
@@ -2,8 +2,8 @@
import com.beust.jcommander.JCommander;
import com.google.protobuf.ByteString;
-import java.util.List;
-import java.util.Optional;
+import java.util.Base64.Decoder;
+import java.util.Base64.Encoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tron.api.GrpcAPI.AccountList;
@@ -11,17 +11,16 @@
import org.tron.api.GrpcAPI.WitnessList;
import org.tron.common.utils.ByteArray;
import org.tron.common.utils.Utils;
-
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Scanner;
+import org.tron.protos.Contract.AssetIssueContract;
import org.tron.protos.Protocol.Account;
import org.tron.protos.Protocol.Block;
import org.tron.protos.Protocol.BlockHeader;
import org.tron.protos.Protocol.BlockHeader.raw;
+import org.tron.protos.Protocol.Witness;
import org.tron.walletserver.WalletClient;
+import java.util.*;
+
public class TestClient {
private static final Logger logger = LoggerFactory.getLogger("TestClient");
@@ -59,6 +58,25 @@ private void importWallet(String[] parameters) {
}
}
+ private void importwalletByBase64(String[] parameters) {
+ if (parameters == null || parameters.length != 2) {
+ System.out.println("ImportwalletByBase64 need 2 parameter like following: ");
+ System.out.println("ImportwalletByBase64 Password PriKey");
+ System.out.println("PriKey need base64 string format.");
+ return;
+ }
+ String password = parameters[0];
+ String priKey64 = parameters[1];
+ Decoder decoder = Base64.getDecoder();
+ String priKey = ByteArray.toHexString(decoder.decode(priKey64));
+
+ if (client.importWallet(password, priKey)) {
+ logger.info("Import a wallet and store it successful !!");
+ } else {
+ logger.info("Import a wallet failed !!");
+ }
+ }
+
private void changePassword(String[] parameters) {
if (parameters == null || parameters.length != 2) {
System.out.println("ChangePassword need 2 parameter like following: ");
@@ -97,29 +115,33 @@ private void logout() {
}
private void backupWallet(String[] parameters) {
- if (parameters == null || (parameters.length != 1 && parameters.length != 2)) {
- System.out.println("BackupWallet need 1 or 2 parameter like following: ");
+ if (parameters == null || parameters.length != 1) {
+ System.out.println("BackupWallet need 1 parameter like following: ");
System.out.println("BackupWallet Password ");
- System.out
- .println("The private key of wallet will be export and be encrypted with the password.");
- System.out.println("BackupWallet Password Password2");
- System.out.println(
- "The private key of wallet will be decryption with password and be encrypted with the password2.");
return;
}
String password = parameters[0];
- String password2;
- if (parameters.length == 2) {
- password2 = parameters[1];
- } else {
- password2 = parameters[0]; //same password
+ String priKey = client.backupWallet(password);
+ if (priKey != null) {
+ logger.info("Backup a wallet successful !!");
+ logger.info("priKey = " + priKey);
}
+ }
- String priKey = client.backupWallet(password, password2);
+ private void backupWallet2Base64(String[] parameters) {
+ if (parameters == null || parameters.length != 1) {
+ System.out.println("BackupWallet2Base64 need 1 parameter like following: ");
+ System.out.println("BackupWallet2Base64 Password ");
+ return;
+ }
+ String password = parameters[0];
+ String priKey = client.backupWallet(password);
+ Encoder encoder = Base64.getEncoder();
+ String priKey64 = encoder.encodeToString(ByteArray.fromHexString(priKey));
if (priKey != null) {
logger.info("Backup a wallet successful !!");
- logger.info("priKey = " + priKey);
+ logger.info("priKey = " + priKey64);
}
}
@@ -154,8 +176,8 @@ private void getAccount(String[] parameters) {
Account account = WalletClient.queryAccount(addressBytes);
if (account == null) {
logger.info("Get Account failed !!!!");
-
} else {
+ logger.info("Address::" + ByteArray.toHexString(account.getAddress().toByteArray()));
logger.info("Account[" + account + "]");
}
}
@@ -172,8 +194,13 @@ private void getAssetIssueByAccount(String[] parameters) {
Optional result = WalletClient.getAssetIssueByAccount(addressBytes);
if (result.isPresent()) {
AssetIssueList assetIssueList = result.get();
- logger.info("assetIssueList[" + assetIssueList.getAssetIssueList() + "]");
-
+ List list = assetIssueList.getAssetIssueList();
+ for (int i = 0; i < list.size(); i++) {
+ AssetIssueContract assetIssueContract = list.get(i);
+ logger.info("Address::" + ByteArray
+ .toHexString(assetIssueContract.getOwnerAddress().toByteArray()));
+ logger.info("assetIssueContract[" + assetIssueContract + "]");
+ }
} else {
logger.info("GetAssetIssueByAccount " + " failed !!");
}
@@ -182,7 +209,7 @@ private void getAssetIssueByAccount(String[] parameters) {
private void sendCoin(String[] parameters) {
if (parameters == null || parameters.length != 3) {
System.out.println("SendCoin need 3 parameter like following: ");
- System.out.println("GetAssetIssueByAccount Password ToAddress Amount");
+ System.out.println("SendCoin Password ToAddress Amount");
return;
}
String password = parameters[0];
@@ -192,10 +219,58 @@ private void sendCoin(String[] parameters) {
boolean result = client.sendCoin(password, toAddress, amount);
if (result) {
- logger.info("Send " + amount + " dron to " + toAddress + " successful !!");
+ logger.info("Send " + amount + " drop to " + toAddress + " successful !!");
} else {
- logger.info("Send " + amount + " dron to " + toAddress + " failed !!");
+ logger.info("Send " + amount + " drop to " + toAddress + " failed !!");
+ }
+ }
+
+ private void testTransaction(String[] parameters) {
+ if (parameters == null || parameters.length != 4) {
+ System.out.println("testTransaction need 4 parameter like following: ");
+ System.out.println("testTransaction Password ToAddress assertName times");
+ return;
}
+ String password = parameters[0];
+ String toAddress = parameters[1];
+ String assertName = parameters[2];
+ String loopTime = parameters[3];
+
+ long times = new Long(loopTime);
+
+ for (int i = 1; i <= times; i++) {
+ long amount = i;
+ boolean result = client.sendCoin(password, toAddress, amount);
+ if (result) {
+ logger.info("Send " + amount + " dron to " + toAddress + " successful !!");
+ try {
+ Thread.sleep(500);
+ } catch (Exception e) {
+ e.printStackTrace();
+ break;
+ }
+
+ } else {
+ logger.info("Send " + amount + " dron to " + toAddress + " failed !!");
+ break;
+ }
+
+ result = client.transferAsset(password, toAddress, assertName, amount);
+ if (result) {
+ logger.info("transferAsset " + assertName + " dron to " + toAddress + " successful !!");
+ try {
+ Thread.sleep(500);
+ } catch (Exception e) {
+ e.printStackTrace();
+ break;
+ }
+
+ } else {
+ logger.info("transferAsset " + assertName + " dron to " + toAddress + " failed !!");
+ break;
+ }
+ }
+
}
private void transferAsset(String[] parameters) {
@@ -283,7 +358,7 @@ private void assetIssue(String[] parameters) {
private void createWitness(String[] parameters) {
if (parameters == null || parameters.length != 2) {
System.out.println("CreateWitness need 2 parameter like following: ");
- System.out.println("ImportWallet Password Url");
+ System.out.println("CreateWitness Password Url");
return;
}
@@ -302,8 +377,12 @@ private void listAccounts() {
Optional result = client.listAccounts();
if (result.isPresent()) {
AccountList accountList = result.get();
- logger.info("accountList[" + accountList.getAccountsList() + "]");
- logger.info("List accounts " + " successful !!");
+ List list = accountList.getAccountsList();
+ for (int i = 0; i < list.size(); i++) {
+ Account account = list.get(i);
+ logger.info("Address::" + ByteArray.toHexString(account.getAddress().toByteArray()));
+ logger.info("Account[" + account + "]");
+ }
} else {
logger.info("List accounts " + " failed !!");
}
@@ -313,8 +392,12 @@ private void listWitnesses() {
Optional result = client.listWitnesses();
if (result.isPresent()) {
WitnessList witnessList = result.get();
- logger.info("witnessList[" + witnessList.getWitnessesList() + "]");
- logger.info("List witnesses " + " successful !!");
+ List list = witnessList.getWitnessesList();
+ for (int i = 0; i < list.size(); i++) {
+ Witness witness = list.get(i);
+ logger.info("Address::" + ByteArray.toHexString(witness.getAddress().toByteArray()));
+ logger.info("Witness[" + witness + "]");
+ }
} else {
logger.info("List witnesses " + " failed !!");
}
@@ -324,8 +407,13 @@ private void getAssetIssueList() {
Optional result = client.getAssetIssueList();
if (result.isPresent()) {
AssetIssueList assetIssueList = result.get();
- logger.info("assetIssueList[" + assetIssueList.getAssetIssueList() + "]");
-
+ List list = assetIssueList.getAssetIssueList();
+ for (int i = 0; i < list.size(); i++) {
+ AssetIssueContract assetIssueContract = list.get(i);
+ logger.info("Address::" + ByteArray
+ .toHexString(assetIssueContract.getOwnerAddress().toByteArray()));
+ logger.info("assetIssueContract[" + assetIssueContract + "]");
+ }
} else {
logger.info("GetAssetIssueList " + " failed !!");
}
@@ -371,7 +459,7 @@ private void GetBlock(String[] parameters) {
private void voteWitness(String[] parameters) {
if (parameters == null || parameters.length < 3 || (parameters.length & 1) != 1) {
System.out.println("Use VoteWitness command you need like: ");
- System.out.println("VoteWitness Address0 Count0 ... AddressN CountN");
+ System.out.println("VoteWitness Password Address0 Count0 ... AddressN CountN");
return;
}
@@ -391,6 +479,36 @@ private void voteWitness(String[] parameters) {
}
}
+ private void help() {
+ System.out.println("You can enter the following command: ");
+
+ System.out.println("RegisterWallet");
+ System.out.println("ImportWallet");
+ System.out.println("ImportwalletByBase64");
+ System.out.println("ChangePassword");
+ System.out.println("Login");
+ System.out.println("Logout");
+ System.out.println("BackupWallet");
+ System.out.println("BackupWallet2Base64");
+ System.out.println("Getaddress");
+ System.out.println("GetBalance");
+ System.out.println("GetAccount");
+ System.out.println("GetAssetissueByAccount");
+ System.out.println("SendCoin");
+ System.out.println("TransferAsset");
+ System.out.println("ParticipateAssetissue");
+ System.out.println("Assetissue");
+ System.out.println("CreateWitness");
+ System.out.println("VoteWitness");
+ System.out.println("Listaccounts");
+ System.out.println("Listwitnesses");
+ System.out.println("Listassetissue");
+ System.out.println("Getblock");
+ System.out.println("Exit or Quit");
+
+ System.out.println("Input any one of then, you will get more tips.");
+ }
+
private void run() {
Scanner in = new Scanner(System.in);
while (true) {
@@ -405,6 +523,10 @@ private void run() {
String cmdLowerCase = cmd.toLowerCase();
switch (cmdLowerCase) {
+ case "help": {
+ help();
+ break;
+ }
case "registerwallet": {
registerWallet(parameters);
break;
@@ -413,6 +535,10 @@ private void run() {
importWallet(parameters);
break;
}
+ case "importwalletbybase64": {
+ importwalletByBase64(parameters);
+ break;
+ }
case "changepassword": {
changePassword(parameters);
break;
@@ -429,6 +555,10 @@ private void run() {
backupWallet(parameters);
break;
}
+ case "backupwallet2base64": {
+ backupWallet2Base64(parameters);
+ break;
+ }
case "getaddress": {
getAddress();
break;
@@ -449,6 +579,10 @@ private void run() {
sendCoin(parameters);
break;
}
+ case "testtransaction": {
+ testTransaction(parameters);
+ break;
+ }
case "transferasset": {
transferAsset(parameters);
break;
@@ -485,6 +619,10 @@ private void run() {
GetBlock(parameters);
break;
}
+ case "testTransaction": {
+ testTransaction(parameters);
+ break;
+ }
case "exit":
case "quit": {
System.out.println("Exit !!!");
@@ -492,31 +630,8 @@ private void run() {
}
default: {
System.out.println("Invalid cmd: " + cmd);
- System.out.println("You can enter the following command: ");
-
- System.out.println("RegisterWallet");
- System.out.println("ImportWallet");
- System.out.println("ChangePassword");
- System.out.println("Login");
- System.out.println("Logout");
- System.out.println("BackupWallet");
- System.out.println("Getaddress");
- System.out.println("GetBalance");
- System.out.println("GetAccount");
- System.out.println("GetAssetissueByAccount");
- System.out.println("SendCoin");
- System.out.println("TransferAsset");
- System.out.println("ParticipateAssetissue");
- System.out.println("Assetissue");
- System.out.println("CreateWitness");
- System.out.println("VoteWitness");
- System.out.println("Listaccounts");
- System.out.println("Listwitnesses");
- System.out.println("Listassetissue");
- System.out.println("Getblock");
- System.out.println("Exit or Quit");
-
- System.out.println("Input any one of then, you will get more tips.");
+ help();
+
}
}
}
diff --git a/src/main/java/org/tron/walletserver/WalletClient.java b/src/main/java/org/tron/walletserver/WalletClient.java
index 7c2885988..0a36f8b8d 100644
--- a/src/main/java/org/tron/walletserver/WalletClient.java
+++ b/src/main/java/org/tron/walletserver/WalletClient.java
@@ -3,11 +3,6 @@
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import com.typesafe.config.Config;
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.spongycastle.util.encoders.Hex;
@@ -28,6 +23,12 @@
import org.tron.protos.Protocol.Block;
import org.tron.protos.Protocol.Transaction;
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Optional;
+
public class WalletClient {
private static final Logger logger = LoggerFactory.getLogger("WalletClient");
@@ -119,11 +120,11 @@ public void store(String password) {
byte[] pwd = getPassWord(password);
String pwdAsc = ByteArray.toHexString(pwd);
byte[] privKeyPlain = ecKey.getPrivKeyBytes();
+ System.out.println("privKey:" + ByteArray.toHexString(privKeyPlain));
//encrypted by password
byte[] aseKey = getEncKey(password);
byte[] privKeyEnced = SymmEncoder.AES128EcbEnc(privKeyPlain, aseKey);
String privKeyStr = ByteArray.toHexString(privKeyEnced);
- System.out.println("privKeyStr:" + privKeyStr);
byte[] pubKeyBytes = ecKey.getPubKey();
String pubKeyStr = ByteArray.toHexString(pubKeyBytes);
// SAVE PASSWORD
@@ -358,12 +359,13 @@ public static Contract.VoteWitnessContract createVoteWitnessContract(byte[] owne
HashMap witness) {
Contract.VoteWitnessContract.Builder builder = Contract.VoteWitnessContract.newBuilder();
builder.setOwnerAddress(ByteString.copyFrom(owner));
- for (String address : witness.keySet()) {
- String value = witness.get(address);
+ for (String addressHex : witness.keySet()) {
+ String value = witness.get(addressHex);
long count = Long.parseLong(value);
Contract.VoteWitnessContract.Vote.Builder voteBuilder = Contract.VoteWitnessContract.Vote
.newBuilder();
- voteBuilder.setVoteAddress(ByteString.copyFrom(address.getBytes()));
+ byte[] address = ByteArray.fromHexString(addressHex);
+ voteBuilder.setVoteAddress(ByteString.copyFrom(address));
voteBuilder.setVoteCount(count);
builder.addVotes(voteBuilder.build());
}
diff --git a/src/main/protos/core/Tron.proto b/src/main/protos/core/Tron.proto
index 8a86eebcc..093f024e8 100644
--- a/src/main/protos/core/Tron.proto
+++ b/src/main/protos/core/Tron.proto
@@ -73,6 +73,7 @@ message Transaction {
enum ContractType {
AccountCreateContract = 0;
TransferContract = 1;
+
TransferAssetContract = 2;
VoteAssetContract = 3;
VoteWitnessContract = 4;
diff --git a/src/main/resources/config.conf b/src/main/resources/config.conf
index 167cd0479..bf36bb5fe 100644
--- a/src/main/resources/config.conf
+++ b/src/main/resources/config.conf
@@ -2,8 +2,10 @@
fullnode = {
ip.list = [
"127.0.0.1:50051"
+ "192.168.10.55:50051",
+ "127.0.0.1:50051",
"192.168.10.134:7080",
- "192.168.10.195:7080",
+ "192.168.10.195:7080"
]
}
diff --git a/src/main/resources/static/css/accountQuery.css b/src/main/resources/static/css/accountQuery.css
index 86833712b..7924923bf 100644
--- a/src/main/resources/static/css/accountQuery.css
+++ b/src/main/resources/static/css/accountQuery.css
@@ -27,16 +27,21 @@
font-size: 14px;
}
.main table{
- width: 100%;
+ width: 80%;
height: auto;
overflow: hidden;
border: none;
text-align: center;
font-size: 14px;
+ margin: auto;
+}
+#text .main{
+ margin-top: 40px;
}
.main table tr{
height: 50px;
line-height: 50px;
+ color: #428dff;
}
#tablHtml tr{
color: #45425e;
@@ -44,14 +49,9 @@
.tbody tr:nth-of-type(odd){
background: none;
}
-#tablHtml tr:nth-of-type(even),#myac_table .account_tab{
- border: 1px solid #d4dde7;
- border-radius: 2px;
- background-color: #fff;
-}
-.tbody tr td:nth-child(2){
- color: #428dff;
-}
+/*.tbody tr td:nth-child(2){*/
+ /*color: #428dff;*/
+/*}*/
#tablHtml tr td:nth-child(2) span{
display: block;
width: 30%;
@@ -61,27 +61,13 @@
margin: auto;
line-height: 50px;
}
-#tablHtml td:nth-last-of-type(2) {
- border-top-right-radius: 5px;
- border-bottom-right-radius: 5px;
-}
-#tablHtml td:nth-last-of-type(1){
- border-top: 0;
- border-bottom: 0;
- background-color: #fafbfc;
-}
+
#myac_table tbody .account_tab td {
border: 1px solid #d4d8da;
border-right: 0;
border-left: 0;
padding: 5px;
}
-/*#tablHtml tr td:nth-child(2){*/
- /*color: #428dff;*/
-/*}*/
-/*
-count_detail
-*/
.main p{
font-size: 18px;
color: #428dff;
@@ -185,9 +171,61 @@ count_detail
.tbody tr .stop{
background: url("../img/stop.png") no-repeat 50%;
+
color: #ccc;
}
-.tbody tr:nth-of-type(even){
- background: #fff;
+#coun_pwd{
+ font-size: 14px;
+ display: none;
+}
+#coun_pwd p{
+ color: #333;
+ margin-left: 10px;
+ line-height: 30px;
+}
+#coun_pwd p span{
+ display: inline-block;
+ width:40%;
+}
+#coun_pwd p span:nth-of-type(2){
+ margin-left: 50px;
+}
+.sele_ctcount{
+ width: 100%;
+}
+.select select{
+ width: 80%;
+ margin: 10px;
+}
+.count_pwd{
+ width: 80%;
+ border: 1px solid #ccc;
+ border-radius: 2px;
+ margin: 10px 0 0 10px;
+}
+/**/
+.tbody tr td {
+ border: 1px solid transparent;
+ padding: 5px;
+}
+.tbody .b_acitve td {
+ border: 1px solid #d4d8da;
+ border-right: 0;
+ border-left: 0;
+ padding: 5px;
+ background-color: #fff;
+}
+.tbody .b_acitve td:nth-last-of-type(1){
+ border-right: 1px solid #d4d8da;
+}
+.tbody .b_acitve td:nth-of-type(1){
+ border-left: 1px solid #d4d8da;
+}
+.main thead{
+ font-size: 16px;
+}
+#priceByTrx{
+ font-size: 18px;
+ color: #428dff;
}
\ No newline at end of file
diff --git a/src/main/resources/static/css/common.css b/src/main/resources/static/css/common.css
index 8c673cc28..a0594c364 100644
--- a/src/main/resources/static/css/common.css
+++ b/src/main/resources/static/css/common.css
@@ -5,13 +5,13 @@
box-sizing: border-box;
}
html {
- font-size: 625%;
+ /*font-size: 625%;*/
width: 100%;
}
body {
font-family: Arial, "Microsoft YaHei", "微软雅黑";
width: 100%;
- font-size: 30px;
+ /*font-size: 30px;*/
min-width: 1200px;
}
a {
diff --git a/src/main/resources/static/css/control.css b/src/main/resources/static/css/control.css
index 60051d23d..10bf07835 100644
--- a/src/main/resources/static/css/control.css
+++ b/src/main/resources/static/css/control.css
@@ -51,15 +51,22 @@
float: left;
font-size: 14px;
color: #8d9ba9;
- padding: 20px;
+ padding: 20px 20px 20px 0;
height: 100%;
background-color: #fff;
border-right: 1px solid #d4dde7;
}
.c_form li {
line-height: 40px;
- text-align: center;
+ text-align: left;
cursor: pointer;
+ padding-left: 80px;
+}
+.c_form li img{
+ vertical-align: middle;
+ height: 20px;
+ width: 20px;
+ margin-right: 10px;
}
.c_form .c_active{
color: #3291fe;
@@ -91,6 +98,7 @@
font-weight: 700;
margin: auto;
text-align: left;
+ line-height: 25px;
/**/
}
.order p:nth-of-type(even){
@@ -104,8 +112,18 @@
font-weight: 500;
margin: 100px 0 0 180px;
padding-bottom: 100px;
+ color: #c5c4c4;
+}
+.ord_input{
+ height: 35px;
+ width: 400px;
+ border: 1px solid #3291fe;
+ border-radius: 5px;
+ margin-bottom:30px;
+ display: block;
+ text-align: center;
}
-.ord_btn{
+.ord_btn,.ord_suc{
height: 35px;
width: 280px;
border-radius: 5px;
@@ -116,8 +134,16 @@
background-image: -moz-linear-gradient(top, #80afff, #2185ff); /* Firefox */
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #80afff), color-stop(1, #2185ff)); /* Saf4+, Chrome */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80afff', endColorstr='#2185ff'); /* IE*/
+}
+.ord_suc{
+ display: none;
}
+.disable_btn{
+ background-image: -moz-linear-gradient(top, #97aec7, #97aec7); /* Firefox */
+ background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #97aec7), color-stop(1, #97aec7))
+}
+
/*
vote
*/
@@ -133,8 +159,9 @@ vote
.vote table thead{
color: #3291fe;
}
-.vote table tr{
- line-height: 60px;
+.vote table tr {
+ line-height: 50px;
+ border: 1px solid transparent;
}
.vote_d{
height: 30px;
@@ -164,7 +191,7 @@ vote
border-spacing:0px 20px;
margin: auto;
color: #64768a;
- padding: 0 20px;
+ /*padding: 0 20px;*/
border-radius: 5px;
}
.vote table thead{
@@ -230,7 +257,7 @@ set
width: 100%;
background-color: #fff;
box-shadow: 5px 5px 10px #f0f3f6;
- /*float: left;*/
+ border-radius: 5px;
font-size: 14px;
padding: 20px;
}
@@ -242,6 +269,7 @@ set
padding: 20px;
box-shadow: 5px 5px 10px #f0f3f6;
background-color: #fff;
+ border-radius: 5px;
}
.information h6{
color: #a0b4cc;
@@ -267,7 +295,7 @@ set
.price h6{
font-size: 20px;
display: inline-block;
- color: #ccc;
+ color: #a0b4cc;
}
.price .liner_granet{
float: right;
@@ -276,19 +304,72 @@ set
height: 20px;
border-radius: 2px;
}
+.none{
+ display: none;
+}
+.help{
+ font-size: 14px;
+ color: #818181;
+}
+.help>div>p{
+ line-height: 50px;
+ padding:0 160px 0 40px;
+}
+.help>div>p>.title{
+ font-size: 16px;
+ color: #2e3a60;
+}
+.help>div>p:nth-of-type(1){
+ cursor: pointer;
+}
+.ques,.ans{
+ display: inline-block;
+ height: 20px;
+ width: 20px;
+ color: #fff;
+ text-align: center;
+ line-height: 20px;
+ border-radius: 5px;
+ background-color:#0077ff ;
+}
+.ans{
+ background-color:#818181 ;
+}
+.h_list{
+ float: right;
+ margin-top: 20px;
+}
+.help_detail >i,.help_detail>span{
+ display: inline-block;
+}
+.help_detail>span{
+ margin-left: 40px;
+ margin-top: -50px;
+}
+.help_list >span{
+ margin-left: 40px;
+}
+.help_detail>.more{
+ margin-left: 60px;
+}
+/**/
-
-
-
-
-
-
-
-
-
+#witnessList .b_acitve td {
+ border: 1px solid #d4d8da;
+ border-right: 0;
+ border-left: 0;
+ /*padding: 5px;*/
+ background-color: #fff;
+}
+#witnessList .b_acitve td:nth-last-of-type(1){
+ border-right: 1px solid #d4d8da;
+}
+#witnessList .b_acitve td:nth-of-type(1){
+ border-left: 1px solid #d4d8da;
+}
diff --git a/src/main/resources/static/css/index.css b/src/main/resources/static/css/index.css
index 9b58c8f66..fec8d167f 100644
--- a/src/main/resources/static/css/index.css
+++ b/src/main/resources/static/css/index.css
@@ -8,4 +8,45 @@ body ,html{
float: left;
margin-left: 50px;
padding: 8px;
+}
+/*发行资产*/
+#addcount{
+ /*display: block;*/
+ font-size: 14px;
+ width: 50%;
+ margin: auto;
+ display: none;
+}
+#addcount h4{
+ font-size: 18px;
+ color: #428dff;
+ margin: 20px 0;
+}
+#addcount p{
+ line-height: 30px;
+}
+#addcount p span{
+ display: inline-block;
+ width: 45%;
+}
+#addcount p span:nth-of-type(2){
+ width: 30%;
+}
+#addcount p span input{
+border: 1px solid #ccc;
+ border-radius: 2px;
+ height: 20px;
+}
+#addcount .cou_hei{
+ line-height: 50px;
+}
+.sure_dele{
+ display: block;
+ height: 30px;
+ width: 400px;
+ border-radius: 5px;
+ margin:50px auto;
+}
+.check{
+ margin-top: 100px;
}
\ No newline at end of file
diff --git a/src/main/resources/static/css/laydate.css b/src/main/resources/static/css/laydate.css
new file mode 100644
index 000000000..c7e15086b
--- /dev/null
+++ b/src/main/resources/static/css/laydate.css
@@ -0,0 +1,2 @@
+/*! laydate-v5.0.9 日期与时间组件 MIT License http://www.layui.com/laydate/ By 贤心 */
+.laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}@font-face{font-family:laydate-icon;src:url(font/iconfont.eot);src:url(font/iconfont.eot#iefix) format('embedded-opentype'),url(font/iconfont.svg#iconfont) format('svg'),url(font/iconfont.woff) format('woff'),url(font/iconfont.ttf) format('truetype')}.laydate-icon{font-family:laydate-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
\ No newline at end of file
diff --git a/src/main/resources/static/css/login.css b/src/main/resources/static/css/login.css
index 1d69a1b78..725bf8efe 100644
--- a/src/main/resources/static/css/login.css
+++ b/src/main/resources/static/css/login.css
@@ -31,7 +31,8 @@ header .left_list{
.left_list button{
display: inline-block;
height: 30px;
- width: 80px;
+ width: auto;
+ padding: 0 5px;
border-radius: 2px;
border: 0;
cursor: pointer;
@@ -68,7 +69,7 @@ header span{
width: 400px;
position:absolute;
left:50%;
- top:50%;
+ top:65%;
margin-left: -200px;
margin-top: -300px;
padding: 10px 10px 50px 10px;
@@ -124,18 +125,28 @@ header span{
background:none;
border: 0;
border-bottom: 1px solid #acb4c3;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ margin-left: 10px;
+ outline:none;
+}
+#repawd{
+ margin-left: 0;
}
form input{
margin:0 0 10px 0;
}
.submit{
- height: 50px;
- width: 100%;
+ display: block;
+ height: 40px;
+ width: 90%;
border-radius: 5px;
margin: auto;
- font-size: 20px;
+ font-size: 16px;
border: 0;
margin-top: 40px;
+
}
.article_login form .l_warn ,.mo_warn,.pw_warn,.mopwd_warn,.com_warn,.go_warn,.num_warn{
font-size: 12px;
@@ -145,6 +156,7 @@ form input{
.repeat{
width: 50px;
border-radius: 5px;
+ vertical-align: middle;
}
.create img{
display: block;
@@ -162,8 +174,7 @@ form input{
margin-top: 20px;
}
.warn_list li{
- list-style: square;
- margin-left: 20px;
+ margin-left: 10px;
line-height: 25px;
}
@@ -189,6 +200,11 @@ form input{
height: 35px;
border-radius: 5px;
border:1px solid #117eff;
+ color: #117eff;
+ background-color: #fff;
+}
+.wel_creat .liner_granet{
+ color: #fff;
}
.wel_active{
background-color: #d2d5dd;
@@ -197,6 +213,11 @@ form input{
font-size: 20px;
text-align: center;
}
+.t_logo p:nth-child(3){
+ font-size: 14px;
+ margin-top: 16px;
+}
+
.t_logo img{
display: block;
height: 53px;
@@ -231,7 +252,7 @@ form input{
.adress,.cret_pwd{
- margin: 10px 0;
+ margin: 10px 10px 0;
}
.tran_money input{
height: 30px;
@@ -250,17 +271,39 @@ form input{
top:50%;
margin-left: -200px;
margin-top: -100px;
- padding: 30px;
+ padding: 40px 30px 30px 30px;
color: #4194f8;
- background-color: rgba(255,255,255,0.8);
+ background-color: rgba(255,255,255,0.9);
border-radius: 5px;
display: none;
+ z-index: 999;
}
.mona_warn{
font-size: 12px;
color: #d5453e;
}
-.motal .add ,.motal .no{
+.motal-mask{
+ width: 100%;
+ height:100%;
+ position: fixed;
+ top:0;
+ bottom:0;
+ left: 0;
+ right: 0;
+ background-color: rgba(51,51,51,0.4);
+ z-index: 998;
+ display: none;
+}
+.motal .no{
+ height: 30px;
+ width: 100px;
+ border: 0;
+ border-radius: 5px;
+ margin-top: 20px;
+ border: 1px solid #117eff;
+ color: #117eff;
+}
+.motal .add{
height: 30px;
width: 100px;
border: 0;
@@ -272,14 +315,63 @@ form input{
}
.motal .add {
- margin-left: 90px;
+ margin-left: 70px;
}
.mona_warn{
display: none;
}
+#wel_select{
+ margin-top: 60px;
+}
+.disable_btn{
+ background-image: -moz-linear-gradient(top, #97aec7, #97aec7); /* Firefox */
+ background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #97aec7), color-stop(1, #97aec7))
+}
+
+.new_top{
+ top:55%;
+}
+
+#transform_box .tran_form .name,#transform_box .tran_form .pwd{
+ width: 340px;
+ height: 26px;
+ background-color: rgb(255, 255, 255);
+ box-shadow: 0px 9px 14px 1px
+ rgba(126, 153, 185, 0.13);
+ border-radius: 5px;
+ border: solid 1px rgb(126, 153, 185);
+ margin-left: 20px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+#transform_box .tran_form p{
+ margin-left: 20px;
+}
+#num{
+ width: 218px;
+ height: 26px;
+ background-color: rgb(255, 255, 255);
+ box-shadow: 0px 9px 14px 1px
+ rgba(126, 153, 185, 0.13);
+ border-radius: 5px;
+ border: solid 1px rgb(126, 153, 185);
+ margin-left: 20px;
+}
+#coinSelect{
+ width: 218px;
+ height: 26px;
+ background-color: rgb(255, 255, 255);
+ margin-left: 20px;
+}
+#coinSelect_box{
+ display: none;
+}
+.login_html{
+ border:none;
+}
\ No newline at end of file
diff --git a/src/main/resources/static/css/message.css b/src/main/resources/static/css/message.css
index be2bdd999..ce3974c39 100644
--- a/src/main/resources/static/css/message.css
+++ b/src/main/resources/static/css/message.css
@@ -31,10 +31,18 @@
line-height: 30px;
}
.ml_message p{
-line-height: 40px;
+ width: 100%;
+ line-height: 40px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.ml_font_top{
+ font-size: 20px;
+
}
.ml_font{
- font-size: 14px;
+ font-size: 16px;
}
.m_title{
font-size: 30px;
@@ -48,6 +56,7 @@ line-height: 40px;
.transfer{
font-size: 16px;
margin: 40px 0;
+ /*border-bottom: 1px solid #000000;*/
}
.transfer button{
height: 33px;
@@ -61,8 +70,11 @@ line-height: 40px;
box-shadow: 0px 0px 10px 0px rgba(172,223,255,1) ;
margin-right: 50px;
}
+.transfer span:nth-child(2){
+ margin-right: 15px;
+}
.transfer span:nth-last-of-type(1){
- margin-left: 50px;
+ margin-left: 15px;
}
.tran_name{
color: #7e99b9;
@@ -70,6 +82,13 @@ line-height: 40px;
.ml_vote{
margin-top: 30px;
}
+
+.before-block{
+ margin-top: 35px;
+}
+.before-block:nth-child(1){
+ margin-top: 0px;
+}
.mr_left{
height: 80px;
width: 175px;
@@ -78,7 +97,7 @@ line-height: 40px;
display: inline-block;
text-align: center;
line-height: 30px;
- margin: 0 20px 0 70px;
+ margin: 0 20px 0 85px;
padding: 10px;
}
.mr_left p{
@@ -94,6 +113,10 @@ line-height: 40px;
text-overflow:ellipsis;
white-space:nowrap;
}
+
+.mr_right p span:nth-child(2){
+ margin-left: 20px;
+}
.serch_msg{
margin: 20px 0 20px 80px;
}
@@ -102,4 +125,9 @@ line-height: 40px;
}
.ml_vote p:nth-last-of-type(1){
margin: 0;
-}
\ No newline at end of file
+}
+/*.tbody{*/
+ /*width: 500px;*/
+ /*background: #7e99b9;*/
+ /*overflow: hidden;*/
+/*}*/
\ No newline at end of file
diff --git a/src/main/resources/static/css/witness.css b/src/main/resources/static/css/witness.css
index f850b5d5c..7f8d599b6 100644
--- a/src/main/resources/static/css/witness.css
+++ b/src/main/resources/static/css/witness.css
@@ -41,7 +41,7 @@
}
.w_table table thead{
line-height: 40px;
- font-size: 12px;
+ font-size: 16px;
font-weight: 500;
color: #428dff;
}
@@ -163,7 +163,7 @@
}
/**/
.table tbody tr td {
- border: 0;
+ border: 1px solid transparent;
padding: 5px;
}
.table tbody .b_acitve td {
@@ -177,4 +177,4 @@
}
.table tbody .b_acitve td:nth-of-type(1){
border-left: 1px solid #d4d8da;
-}
\ No newline at end of file
+}
diff --git a/src/main/resources/static/img/coding.png b/src/main/resources/static/img/coding.png
new file mode 100644
index 000000000..501fd109c
Binary files /dev/null and b/src/main/resources/static/img/coding.png differ
diff --git a/src/main/resources/static/img/codingact.png b/src/main/resources/static/img/codingact.png
new file mode 100644
index 000000000..5b760c5bf
Binary files /dev/null and b/src/main/resources/static/img/codingact.png differ
diff --git a/src/main/resources/static/img/doc.png b/src/main/resources/static/img/doc.png
new file mode 100644
index 000000000..877187c93
Binary files /dev/null and b/src/main/resources/static/img/doc.png differ
diff --git a/src/main/resources/static/img/docact.png b/src/main/resources/static/img/docact.png
new file mode 100644
index 000000000..138374443
Binary files /dev/null and b/src/main/resources/static/img/docact.png differ
diff --git a/src/main/resources/static/img/graph.png b/src/main/resources/static/img/graph.png
new file mode 100644
index 000000000..29127e1b6
Binary files /dev/null and b/src/main/resources/static/img/graph.png differ
diff --git a/src/main/resources/static/img/graphact.png b/src/main/resources/static/img/graphact.png
new file mode 100644
index 000000000..91d9dc887
Binary files /dev/null and b/src/main/resources/static/img/graphact.png differ
diff --git a/src/main/resources/static/img/listbot.png b/src/main/resources/static/img/listbot.png
new file mode 100644
index 000000000..857b42886
Binary files /dev/null and b/src/main/resources/static/img/listbot.png differ
diff --git a/src/main/resources/static/img/many.png b/src/main/resources/static/img/many.png
new file mode 100644
index 000000000..59cbb4086
Binary files /dev/null and b/src/main/resources/static/img/many.png differ
diff --git a/src/main/resources/static/img/manyact.png b/src/main/resources/static/img/manyact.png
new file mode 100644
index 000000000..da8d11fe8
Binary files /dev/null and b/src/main/resources/static/img/manyact.png differ
diff --git a/src/main/resources/static/img/per.png b/src/main/resources/static/img/per.png
new file mode 100644
index 000000000..6cd9d6f63
Binary files /dev/null and b/src/main/resources/static/img/per.png differ
diff --git a/src/main/resources/static/img/right.png b/src/main/resources/static/img/right.png
new file mode 100644
index 000000000..b0d270d03
Binary files /dev/null and b/src/main/resources/static/img/right.png differ
diff --git a/src/main/resources/static/img/share.png b/src/main/resources/static/img/share.png
new file mode 100644
index 000000000..eb112d8b5
Binary files /dev/null and b/src/main/resources/static/img/share.png differ
diff --git a/src/main/resources/static/img/shareact.png b/src/main/resources/static/img/shareact.png
new file mode 100644
index 000000000..a564e163c
Binary files /dev/null and b/src/main/resources/static/img/shareact.png differ
diff --git a/src/main/resources/static/js/api/interface.js b/src/main/resources/static/js/api/interface.js
index 70cad04d3..3ffb2769c 100644
--- a/src/main/resources/static/js/api/interface.js
+++ b/src/main/resources/static/js/api/interface.js
@@ -1,12 +1,24 @@
-var baseUrl = 'http://localhost:8088/';
-
+//var baseUrl = 'http://47.95.14.107:8088/';
//var baseUrl = 'http://192.168.10.195:8088/';
+var baseUrl = 'http://192.168.10.55:8088/';
+
+
+
-var trans = baseUrl+'sendCoinToView'; //转账接口
-var anintran = baseUrl+'transactionFromView'; // 转账接口
-var witelist = baseUrl +'witnessList' //见证人接口
+var transTrx = baseUrl+'sendCoinToView'; //转账接口
+var transOther = baseUrl+'TransferAssetToView'; //资产转让
-var accountList = baseUrl +'accountList' //查询账户列表
+var anintran = baseUrl+'transactionFromView'; // 签名接口
+var getAccountInfo = baseUrl +'queryAccount'; //查询账户详情
+var accountList = baseUrl +'accountList'; //查询账户列表
+var witnessList = baseUrl +'witnessList'; //查询出块人列表
+var getBlockToView = baseUrl +'getBlockToView' ;//current block
+var getBlockByNumToView = baseUrl +'getBlockByNumToView'; //recent block
+var createAssetView = baseUrl + 'createAssetIssueToView'; //发行资产
+var signView = baseUrl + 'transactionFromView'; //签名接口
+var assetIssueListView = baseUrl + 'getAssetIssueList'; //资产列表
+var createWitness = baseUrl + 'createWitnessToView'; //申请成为出块人
+var participateAssetView = baseUrl + 'ParticipateAssetIssueToView'; //参与资产发行接口
+var voteWitnessView = baseUrl + 'createVoteWitnessToView'; //投票接口
-var getBlockToView = baseUrl +'getBlockToView' //查询账户列表
diff --git a/src/main/resources/static/js/cryptohash/crypto.js b/src/main/resources/static/js/cryptohash/crypto.js
index 1b7e2c2d8..afb9f4be1 100644
--- a/src/main/resources/static/js/cryptohash/crypto.js
+++ b/src/main/resources/static/js/cryptohash/crypto.js
@@ -1,9 +1,21 @@
-//return sign by 65 bytes r s id. id < 27
-function doSign(priKeyBytes, base64Data) {
- var rowBytes = getRowBytesFromTransactionBase64(base64Data);
- var hashBytes = SHA256(rowBytes);
+/**
+ * Sign A Transaction by priKey.
+ * signature is 65 bytes, r[32] || s[32] || id[1](<27)
+ * @returns a Transaction object signed
+ * @param priKeyBytes: privateKey for ECC
+ * @param transaction: a Transaction object unSigned
+ */
+function signTransaction(priKeyBytes, transaction) {
+ var raw = transaction.getRawData();
+ var rawBytes = raw.serializeBinary();
+ var hashBytes = SHA256(rawBytes);
var signBytes = ECKeySign(hashBytes, priKeyBytes);
- return signBytes;
+ var uint8Array = new Uint8Array(signBytes);
+ var count = raw.getContractList().length;
+ for (i = 0; i < count; i++) {
+ transaction.addSignature(uint8Array); //TODO: multy priKey
+ }
+ return transaction;
}
//return bytes of rowdata, use to sign.
@@ -16,15 +28,14 @@ function getRowBytesFromTransactionBase64(base64Data) {
return rawBytes;
}
-
//gen Ecc priKey for bytes
function genPriKey() {
var EC = elliptic.ec;
var ec = new EC('secp256k1');
var key = ec.genKeyPair();
var priKey = key.getPrivate();
- var priKeyHex = priKey.toString('hex');
- while (priKeyHex.length < 64){
+ var priKeyHex = priKey.toString('hex');
+ while (priKeyHex.length < 64) {
priKeyHex = "0" + priKeyHex;
}
var priKeyBytes = hexStr2byteArray(priKeyHex);
@@ -32,6 +43,13 @@ function genPriKey() {
}
//return address by bytes, pubBytes is byte[]
+//return address by bytes, pubBytes is byte[]
+//TODO: There have a bug。Hundreds of computing addresses, possibly with once error.
+//For example,
+//pubBytes = 0405BE4D534BC638CF97BC41E47B62789454F96C232D21B5DE5DE4ACA127E8C169A62487D42546414C0B7CB6A3CD6129C5CAAD157EB0652867994DFAA203AA11B4
+//Compute the result of the address will be:28E0309DA5FCF9CE4C2BC5FA75EC7388597112A8
+//but Compute the function public static byte[] computeAddress(byte[] pubBytes) of ECKey.java will get f1fb4f6095c057bfa2bb6933e1ad6b9609fba865
+//Maybe CryptoJS.SHA3 was a little wrong.
function computeAddress(pubBytes) {
var pubKey = bin2String(pubBytes);
if (pubKey.length == 65) {
@@ -49,6 +67,22 @@ function getAddressFromPriKey(priKeyBytes) {
var addressBytes = computeAddress(pubBytes);
return addressBytes;
}
+//return address by String, priKeyBytes is base64String
+function getHexStrAddressFromPriKeyBase64String(priKeyBase64String) {
+ var priKeyBytes = base64DecodeFromString(priKeyBase64String);
+ var pubBytes = getPubKeyFromPriKey(priKeyBytes);
+ var addressBytes = computeAddress(pubBytes);
+ var addressHex = byteArray2hexStr(addressBytes);
+ return addressHex;
+}
+//return address by String, priKeyBytes is base64String
+function getAddressFromPriKeyBase64String(priKeyBase64String) {
+ var priKeyBytes = base64DecodeFromString(priKeyBase64String);
+ var pubBytes = getPubKeyFromPriKey(priKeyBytes);
+ var addressBytes = computeAddress(pubBytes);
+ var addressBase64 = base64EncodeToString(addressBytes);
+ return addressBase64;
+}
//return pubkey by 65 bytes, priKeyBytes is byte[]
function getPubKeyFromPriKey(priKeyBytes) {
diff --git a/src/main/resources/static/js/cryptohash/lib/code.js b/src/main/resources/static/js/cryptohash/lib/code.js
index d303ba04e..4ddc26caf 100644
--- a/src/main/resources/static/js/cryptohash/lib/code.js
+++ b/src/main/resources/static/js/cryptohash/lib/code.js
@@ -28,13 +28,13 @@ function getContractListFromTransaction(transaction) {
var raw = transaction.getRawData();
var type = raw.getType();
if (type != 1) {
- alert("Invalid transaction type !!!!" + type);
+ layer.alert("Invalid transaction type !!!!" + type);
return null;
}
var contractList = raw.getContractList();
var count = contractList.length;
if (count == 0) {
- alert("No contract !!!!");
+ layer.alert("No contract !!!!");
return null;
}
diff --git a/src/main/resources/static/js/index.js b/src/main/resources/static/js/index.js
index 31733a521..b56937bdc 100644
--- a/src/main/resources/static/js/index.js
+++ b/src/main/resources/static/js/index.js
@@ -4,69 +4,100 @@
*/
// 跳转页面
$(document).ready(function(){
+ if( window.localStorage.getItem('key')){
+ $('#header_login').css('display','inline-block')
+ $('#center').css('display','inline-block')
+ $('#create').css('display','none')
+ }else{
+ $('#header_login').css('display','none')
+ $('#center').css('display','none')
+ $('#create').css('display','inline-block')
+ }
+
$("#header_login").click(function(){
- $('#text').css('background','none')
- $('.header span').removeClass('header_active')
- $('#text').load('html/control.html');
+ $('#text').css('background','none');
+ $('.header span').removeClass('header_active');
+ $('#text').load('/html/control.html');
});
$("#a_witness").click(function(){
- $('#text').css('background','none')
- $(this).addClass('header_active').siblings().removeClass('header_active')
- $('#text').load('html/witness.html');
+ $('#text').css('background','none');
+ $(this).addClass('header_active').siblings().removeClass('header_active');
+ $('#text').load('/html/witness.html');
});
$('#acco').click(function () {
- $('#text').css('background','none')
- $(this).addClass('header_active').siblings().removeClass('header_active')
- $('#text').load('html/accountQuery.html');
+ $('#text').css('background','none');
+ $(this).addClass('header_active').siblings().removeClass('header_active');
+ $('#text').load('/html/accountQuery.html');
});
$('.j_left').click(function () {
- $('#text').css('background','none')
- $(this).addClass('header_active').siblings().removeClass('header_active')
- $('#text').load('html/message.html');
+ $('#text').css('background','none');
+ $(this).addClass('header_active').siblings().removeClass('header_active');
+ $('#text').load('/html/message.html');
});
+ //退出
$('#center').click(function () {
- $('.header span').removeClass('header_active')
- $('#text').load('html/login.html');
+
+ window.localStorage.removeItem('key')
+ $('#create').css('display','inline-block');
+ $('#header_login').css('display','none');
+ $('#center').css('display','none');
+ $('.header span').removeClass('header_active');
+ $('#text').css('background','url(/../static/img/bg.png)')
+ $('#text').load('/html/login.html');
});
$('#money').click(function () {
- $(this).addClass('header_active').siblings().removeClass('header_active')
- $('#text').load('html/transform.html');
- $('#text').css('background','url(img/bg.png)')
+ $(this).addClass('header_active').siblings().removeClass('header_active');
+ $('#text').css('background','url(/img/bg.png)')
+ $('#text').load('/html/transform.html');
+ // if(window.localStorage.getItem('key')){
+ // $('#text').load('/html/transform.html');
+ // }else{
+ // $('#text').load('/html/login.html');
+ // }
});
$('#create').click(function () {
- $('#text').load('html/login.html');
+ $('#text').load('/html/login.html');
$('.header span').removeClass('header_active');
- $('#text').css('background','url(img/bg.png)')
+ $('#text').css('background','url(/img/bg.png)')
});
+
+ //资产发行
$('#nemoney').click(function () {
- $('#text').css('background','none')
- $(this).addClass('header_active').siblings().removeClass('header_active')
+ $(this).addClass('header_active').siblings().removeClass('header_active');
$('#text').load('html/count.html');
- });
- $('#a_witness').on('click',function () {
- ajaxRequest( "GET",witelist,data,TransSuccessCallback,TransFailureCallback)
- })
+ $('#text').css('background','none');
+ // if(window.localStorage.getItem('key')){
+ // $('#text').css('background','none');
+ // $('#text').load('/html/count.html');
+ // }else{
+ // $('#text').load('/html/login.html');
+ // $('#text').css('background','url(/../static/img/bg.png)')
+ // }
- TransSuccessCallback = function (data) {
- console.log(data);
- var bytes = stringToBytes(data);
- var bytesDecode = base64Decode(bytes);
- // debugger
- //var bytesDecode = base64DecodeFromString(data);
-
- var block= proto.protocol.WitnessList.deserializeBinary(bytesDecode);
-
- console.log(block.getWitnessesList().length);
-
- };
-
- TransFailureCallback = function (err) {
- console.log('err')
- };
+ });
+ // $('#a_witness').on('click',function () {
+ // ajaxRequest( "GET",witelist,{},TransSuccessCallback,TransFailureCallback)
+ // })
+ // TransSuccessCallback = function (data) {
+ // console.log(data);
+ // var bytes = stringToBytes(data);
+ // var bytesDecode = base64Decode(bytes);
+ // // debugger
+ // //var bytesDecode = base64DecodeFromString(data);
+ //
+ // var block= proto.protocol.WitnessList.deserializeBinary(bytesDecode);
+ //
+ // console.log(block.getWitnessesList().length);
+ //
+ // };
+ //
+ // TransFailureCallback = function (err) {
+ // console.log('err')
+ // };
-})
+});
//
diff --git a/src/main/resources/static/js/lib/laydate/laydate.js b/src/main/resources/static/js/lib/laydate/laydate.js
new file mode 100755
index 000000000..83a12cbef
--- /dev/null
+++ b/src/main/resources/static/js/lib/laydate/laydate.js
@@ -0,0 +1,2 @@
+/*! laydate-v5.0.9 日期与时间组件 MIT License http://www.layui.com/laydate/ By 贤心 */
+ ;!function(){"use strict";var e=window.layui&&layui.define,t={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,n=t.length-1,a=n;a>0;a--)if("interactive"===t[a].readyState){e=t[a].src;break}return e||t[n].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),getStyle:function(e,t){var n=e.currentStyle?e.currentStyle:window.getComputedStyle(e,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](t)},link:function(e,a,i){if(n.path){var r=document.getElementsByTagName("head")[0],o=document.createElement("link");"string"==typeof a&&(i=a);var s=(i||e).replace(/\.|\//g,""),l="layuicss-"+s,d=0;o.rel="stylesheet",o.href=n.path+e,o.id=l,document.getElementById(l)||r.appendChild(o),"function"==typeof a&&!function c(){return++d>80?window.console&&console.error("laydate.css: Invalid"):void(1989===parseInt(t.getStyle(document.getElementById(l),"width"))?a():setTimeout(c,100))}()}}},n={v:"5.0.9",config:{},index:window.laydate&&window.laydate.v?1e5:0,path:t.getPath,set:function(e){var t=this;return t.config=w.extend({},t.config,e),t},ready:function(a){var i="laydate",r="",o=(e?"modules/laydate/":"theme/")+"default/laydate.css?v="+n.v+r;return e?layui.addcss(o,a,i):t.link(o,a,i),this}},a=function(){var e=this;return{hint:function(t){e.hint.call(e,t)},config:e.config}},i="laydate",r=".layui-laydate",o="layui-this",s="laydate-disabled",l="开始日期超出了结束日期
建议重新选择",d=[100,2e5],c="layui-laydate-static",m="layui-laydate-list",u="laydate-selected",h="layui-laydate-hint",y="laydate-day-prev",f="laydate-day-next",p="layui-laydate-footer",g=".laydate-btns-confirm",v="laydate-time-text",D=".laydate-btns-time",T=function(e){var t=this;t.index=++n.index,t.config=w.extend({},t.config,n.config,e),n.ready(function(){t.init()})},w=function(e){return new C(e)},C=function(e){for(var t=0,n="object"==typeof e?[e]:(this.selector=e,document.querySelectorAll(e||null));t0)return n[0].getAttribute(e)}():n.each(function(n,a){a.setAttribute(e,t)})},C.prototype.removeAttr=function(e){return this.each(function(t,n){n.removeAttribute(e)})},C.prototype.html=function(e){return this.each(function(t,n){n.innerHTML=e})},C.prototype.val=function(e){return this.each(function(t,n){n.value=e})},C.prototype.append=function(e){return this.each(function(t,n){"object"==typeof e?n.appendChild(e):n.innerHTML=n.innerHTML+e})},C.prototype.remove=function(e){return this.each(function(t,n){e?n.removeChild(e):n.parentNode.removeChild(n)})},C.prototype.on=function(e,t){return this.each(function(n,a){a.attachEvent?a.attachEvent("on"+e,function(e){e.target=e.srcElement,t.call(a,e)}):a.addEventListener(e,t,!1)})},C.prototype.off=function(e,t){return this.each(function(n,a){a.detachEvent?a.detachEvent("on"+e,t):a.removeEventListener(e,t,!1)})},T.isLeapYear=function(e){return e%4===0&&e%100!==0||e%400===0},T.prototype.config={type:"date",range:!1,format:"yyyy-MM-dd",value:null,min:"1900-1-1",max:"2099-12-31",trigger:"focus",show:!1,showBottom:!0,btns:["clear","now","confirm"],lang:"cn",theme:"default",position:null,calendar:!1,mark:{},zIndex:null,done:null,change:null},T.prototype.lang=function(){var e=this,t=e.config,n={cn:{weeks:["日","一","二","三","四","五","六"],time:["时","分","秒"],timeTips:"选择时间",startTime:"开始时间",endTime:"结束时间",dateTips:"返回日期",month:["一","二","三","四","五","六","七","八","九","十","十一","十二"],tools:{confirm:"确定",clear:"清空",now:"现在"}},en:{weeks:["Su","Mo","Tu","We","Th","Fr","Sa"],time:["Hours","Minutes","Seconds"],timeTips:"Select Time",startTime:"Start Time",endTime:"End Time",dateTips:"Select Date",month:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],tools:{confirm:"Confirm",clear:"Clear",now:"Now"}}};return n[t.lang]||n.cn},T.prototype.init=function(){var e=this,t=e.config,n="yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s",a="static"===t.position,i={year:"yyyy",month:"yyyy-MM",date:"yyyy-MM-dd",time:"HH:mm:ss",datetime:"yyyy-MM-dd HH:mm:ss"};t.elem=w(t.elem),t.eventElem=w(t.eventElem),t.elem[0]&&(t.range===!0&&(t.range="-"),t.format===i.date&&(t.format=i[t.type]),e.format=t.format.match(new RegExp(n+"|.","g"))||[],e.EXP_IF="",e.EXP_SPLIT="",w.each(e.format,function(t,a){var i=new RegExp(n).test(a)?"\\d{"+function(){return new RegExp(n).test(e.format[0===t?t+1:t-1]||"")?/^yyyy|y$/.test(a)?4:a.length:/^yyyy$/.test(a)?"1,4":/^y$/.test(a)?"1,308":"1,2"}()+"}":"\\"+a;e.EXP_IF=e.EXP_IF+i,e.EXP_SPLIT=e.EXP_SPLIT+"("+i+")"}),e.EXP_IF=new RegExp("^"+(t.range?e.EXP_IF+"\\s\\"+t.range+"\\s"+e.EXP_IF:e.EXP_IF)+"$"),e.EXP_SPLIT=new RegExp("^"+e.EXP_SPLIT+"$",""),e.isInput(t.elem[0])||"focus"===t.trigger&&(t.trigger="click"),t.elem.attr("lay-key")||(t.elem.attr("lay-key",e.index),t.eventElem.attr("lay-key",e.index)),t.mark=w.extend({},t.calendar&&"cn"===t.lang?{"0-1-1":"元旦","0-2-14":"情人","0-3-8":"妇女","0-3-12":"植树","0-4-1":"愚人","0-5-1":"劳动","0-5-4":"青年","0-6-1":"儿童","0-9-10":"教师","0-9-18":"国耻","0-10-1":"国庆","0-12-25":"圣诞"}:{},t.mark),w.each(["min","max"],function(e,n){var a=[],i=[];if("number"==typeof t[n]){var r=t[n],o=(new Date).getTime(),s=864e5,l=new Date(r?r0)return!0;var a=w.elem("div",{"class":"layui-laydate-header"}),i=[function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-prev-y"});return e.innerHTML="",e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-prev-m"});return e.innerHTML="",e}(),function(){var e=w.elem("div",{"class":"laydate-set-ym"}),t=w.elem("span"),n=w.elem("span");return e.appendChild(t),e.appendChild(n),e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-next-m"});return e.innerHTML="",e}(),function(){var e=w.elem("i",{"class":"layui-icon laydate-icon laydate-next-y"});return e.innerHTML="",e}()],d=w.elem("div",{"class":"layui-laydate-content"}),c=w.elem("table"),m=w.elem("thead"),u=w.elem("tr");w.each(i,function(e,t){a.appendChild(t)}),m.appendChild(u),w.each(new Array(6),function(e){var t=c.insertRow(0);w.each(new Array(7),function(a){if(0===e){var i=w.elem("th");i.innerHTML=n.weeks[a],u.appendChild(i)}t.insertCell(a)})}),c.insertBefore(m,c.children[0]),d.appendChild(c),r[e]=w.elem("div",{"class":"layui-laydate-main laydate-main-list-"+e}),r[e].appendChild(a),r[e].appendChild(d),o.push(i),s.push(d),l.push(c)}),w(d).html(function(){var e=[],i=[];return"datetime"===t.type&&e.push(''+n.timeTips+""),w.each(t.btns,function(e,r){var o=n.tools[r]||"btn";t.range&&"now"===r||(a&&"clear"===r&&(o="cn"===t.lang?"重置":"Reset"),i.push(''+o+""))}),e.push('"),e.join("")}()),w.each(r,function(e,t){i.appendChild(t)}),t.showBottom&&i.appendChild(d),/^#/.test(t.theme)){var m=w.elem("style"),u=["#{{id}} .layui-laydate-header{background-color:{{theme}};}","#{{id}} .layui-this{background-color:{{theme}} !important;}"].join("").replace(/{{id}}/g,e.elemID).replace(/{{theme}}/g,t.theme);"styleSheet"in m?(m.setAttribute("type","text/css"),m.styleSheet.cssText=u):m.innerHTML=u,w(i).addClass("laydate-theme-molv"),i.appendChild(m)}e.remove(T.thisElemDate),a?t.elem.append(i):(document.body.appendChild(i),e.position()),e.checkDate().calendar(),e.changeEvent(),T.thisElemDate=e.elemID,"function"==typeof t.ready&&t.ready(w.extend({},t.dateTime,{month:t.dateTime.month+1}))},T.prototype.remove=function(e){var t=this,n=(t.config,w("#"+(e||t.elemID)));return n.hasClass(c)||t.checkDate(function(){n.remove()}),t},T.prototype.position=function(){var e=this,t=e.config,n=e.bindElem||t.elem[0],a=n.getBoundingClientRect(),i=e.elem.offsetWidth,r=e.elem.offsetHeight,o=function(e){return e=e?"scrollLeft":"scrollTop",document.body[e]|document.documentElement[e]},s=function(e){return document.documentElement[e?"clientWidth":"clientHeight"]},l=5,d=a.left,c=a.bottom;d+i+l>s("width")&&(d=s("width")-i-l),c+r+l>s()&&(c=a.top>r?a.top-r:s()-r,c-=2*l),t.position&&(e.elem.style.position=t.position),e.elem.style.left=d+("fixed"===t.position?0:o(1))+"px",e.elem.style.top=c+("fixed"===t.position?0:o())+"px"},T.prototype.hint=function(e){var t=this,n=(t.config,w.elem("div",{"class":h}));n.innerHTML=e||"",w(t.elem).find("."+h).remove(),t.elem.appendChild(n),clearTimeout(t.hinTimer),t.hinTimer=setTimeout(function(){w(t.elem).find("."+h).remove()},3e3)},T.prototype.getAsYM=function(e,t,n){return n?t--:t++,t<0&&(t=11,e--),t>11&&(t=0,e++),[e,t]},T.prototype.systemDate=function(e){var t=e||new Date;return{year:t.getFullYear(),month:t.getMonth(),date:t.getDate(),hours:e?e.getHours():0,minutes:e?e.getMinutes():0,seconds:e?e.getSeconds():0}},T.prototype.checkDate=function(e){var t,a,i=this,r=(new Date,i.config),o=r.dateTime=r.dateTime||i.systemDate(),s=i.bindElem||r.elem[0],l=(i.isInput(s)?"val":"html",i.isInput(s)?s.value:"static"===r.position?"":s.innerHTML),c=function(e){e.year>d[1]&&(e.year=d[1],a=!0),e.month>11&&(e.month=11,a=!0),e.hours>23&&(e.hours=0,a=!0),e.minutes>59&&(e.minutes=0,e.hours++,a=!0),e.seconds>59&&(e.seconds=0,e.minutes++,a=!0),t=n.getEndDate(e.month+1,e.year),e.date>t&&(e.date=t,a=!0)},m=function(e,t,n){var o=["startTime","endTime"];t=(t.match(i.EXP_SPLIT)||[]).slice(1),n=n||0,r.range&&(i[o[n]]=i[o[n]]||{}),w.each(i.format,function(s,l){var c=parseFloat(t[s]);t[s].length必须遵循下述格式:
"+(r.range?r.format+" "+r.range+" "+r.format:r.format)+"
已为你重置"),a=!0):l&&l.constructor===Date?r.dateTime=i.systemDate(l):(r.dateTime=i.systemDate(),delete i.startState,delete i.endState,delete i.startDate,delete i.endDate,delete i.startTime,delete i.endTime),c(o),a&&l&&i.setValue(r.range?i.endDate?i.parse():"":i.parse()),e&&e(),i)},T.prototype.mark=function(e,t){var n,a=this,i=a.config;return w.each(i.mark,function(e,a){var i=e.split("-");i[0]!=t[0]&&0!=i[0]||i[1]!=t[1]&&0!=i[1]||i[2]!=t[2]||(n=a||t[2])}),n&&e.html(''+n+""),a},T.prototype.limit=function(e,t,n,a){var i,r=this,o=r.config,l={},d=o[n>41?"endDate":"dateTime"],c=w.extend({},d,t||{});return w.each({now:c,min:o.min,max:o.max},function(e,t){l[e]=r.newDate(w.extend({year:t.year,month:t.month,date:t.date},function(){var e={};return w.each(a,function(n,a){e[a]=t[a]}),e}())).getTime()}),i=l.nowl.max,e&&e[i?"addClass":"removeClass"](s),i},T.prototype.calendar=function(e){var t,a,i,r=this,s=r.config,l=e||s.dateTime,c=new Date,m=r.lang(),u="date"!==s.type&&"datetime"!==s.type,h=e?1:0,y=w(r.table[h]).find("td"),f=w(r.elemHeader[h][2]).find("span");if(l.yeard[1]&&(l.year=d[1],r.hint("最高只能支持到公元"+d[1]+"年")),r.firstDate||(r.firstDate=w.extend({},l)),c.setFullYear(l.year,l.month,1),t=c.getDay(),a=n.getEndDate(l.month||12,l.year),i=n.getEndDate(l.month+1,l.year),w.each(y,function(e,n){var d=[l.year,l.month],c=0;n=w(n),n.removeAttr("class"),e=t&&e=n.firstDate.year&&(r.month=a.max.month,r.date=a.max.date),n.limit(w(i),r,t),M++}),w(u[f?0:1]).attr("lay-ym",M-8+"-"+T[1]).html(b+p+" - "+(M-1+p))}else if("month"===e)w.each(new Array(12),function(e){var i=w.elem("li",{"lay-ym":e}),s={year:T[0],month:e};e+1==T[1]&&w(i).addClass(o),i.innerHTML=r.month[e]+(f?"月":""),d.appendChild(i),T[0]=n.firstDate.year&&(s.date=a.max.date),n.limit(w(i),s,t)}),w(u[f?0:1]).attr("lay-ym",T[0]+"-"+T[1]).html(T[0]+p);else if("time"===e){var E=function(){w(d).find("ol").each(function(e,a){w(a).find("li").each(function(a,i){n.limit(w(i),[{hours:a},{hours:n[x].hours,minutes:a},{hours:n[x].hours,minutes:n[x].minutes,seconds:a}][e],t,[["hours"],["hours","minutes"],["hours","minutes","seconds"]][e])})}),a.range||n.limit(w(n.footer).find(g),n[x],0,["hours","minutes","seconds"])};a.range?n[x]||(n[x]={hours:0,minutes:0,seconds:0}):n[x]=i,w.each([24,60,60],function(e,t){var a=w.elem("li"),i=[""+r.time[e]+"
"];w.each(new Array(t),function(t){i.push("- "+w.digit(t,2)+"
")}),a.innerHTML=i.join("")+"
",d.appendChild(a)}),E()}if(y&&h.removeChild(y),h.appendChild(d),"year"===e||"month"===e)w(n.elemMain[t]).addClass("laydate-ym-show"),w(d).find("li").on("click",function(){var r=0|w(this).attr("lay-ym");if(!w(this).hasClass(s)){if(0===t)i[e]=r,l&&(n.startDate[e]=r),n.limit(w(n.footer).find(g),null,0);else if(l)n.endDate[e]=r;else{var c="year"===e?n.getAsYM(r,T[1]-1,"sub"):n.getAsYM(T[0],r,"sub");w.extend(i,{year:c[0],month:c[1]})}"year"===a.type||"month"===a.type?(w(d).find("."+o).removeClass(o),w(this).addClass(o),"month"===a.type&&"year"===e&&(n.listYM[t][0]=r,l&&(n[["startDate","endDate"][t]].year=r),n.list("month",t))):(n.checkDate("limit").calendar(),n.closeList()),n.setBtnStatus(),a.range||n.done(null,"change"),w(n.footer).find(D).removeClass(s)}});else{var S=w.elem("span",{"class":v}),k=function(){w(d).find("ol").each(function(e){var t=this,a=w(t).find("li");t.scrollTop=30*(n[x][C[e]]-2),t.scrollTop<=0&&a.each(function(e,n){if(!w(this).hasClass(s))return t.scrollTop=30*(e-2),!0})})},H=w(c[2]).find("."+v);k(),S.innerHTML=a.range?[r.startTime,r.endTime][t]:r.timeTips,w(n.elemMain[t]).addClass("laydate-time-show"),H[0]&&H.remove(),c[2].appendChild(S),w(d).find("ol").each(function(e){var t=this;w(t).find("li").on("click",function(){var r=0|this.innerHTML;w(this).hasClass(s)||(a.range?n[x][C[e]]=r:i[C[e]]=r,w(t).find("."+o).removeClass(o),w(this).addClass(o),E(),k(),(n.endDate||"time"===a.type)&&n.done(null,"change"),n.setBtnStatus())})})}return n},T.prototype.listYM=[],T.prototype.closeList=function(){var e=this;e.config;w.each(e.elemCont,function(t,n){w(this).find("."+m).remove(),w(e.elemMain[t]).removeClass("laydate-ym-show laydate-time-show")}),w(e.elem).find("."+v).remove()},T.prototype.setBtnStatus=function(e,t,n){var a,i=this,r=i.config,o=w(i.footer).find(g),d=r.range&&"date"!==r.type&&"time"!==r.type;d&&(t=t||i.startDate,n=n||i.endDate,a=i.newDate(t).getTime()>i.newDate(n).getTime(),i.limit(null,t)||i.limit(null,n)?o.addClass(s):o[a?"addClass":"removeClass"](s),e&&a&&i.hint("string"==typeof e?l.replace(/日期/g,e):l))},T.prototype.parse=function(e,t){var n=this,a=n.config,i=t||(e?w.extend({},n.endDate,n.endTime):a.range?w.extend({},n.startDate,n.startTime):a.dateTime),r=n.format.concat();return w.each(r,function(e,t){/yyyy|y/.test(t)?r[e]=w.digit(i.year,t.length):/MM|M/.test(t)?r[e]=w.digit(i.month+1,t.length):/dd|d/.test(t)?r[e]=w.digit(i.date,t.length):/HH|H/.test(t)?r[e]=w.digit(i.hours,t.length):/mm|m/.test(t)?r[e]=w.digit(i.minutes,t.length):/ss|s/.test(t)&&(r[e]=w.digit(i.seconds,t.length))}),a.range&&!e?r.join("")+" "+a.range+" "+n.parse(1):r.join("")},T.prototype.newDate=function(e){return e=e||{},new Date(e.year||1,e.month||0,e.date||1,e.hours||0,e.minutes||0,e.seconds||0)},T.prototype.setValue=function(e){var t=this,n=t.config,a=t.bindElem||n.elem[0],i=t.isInput(a)?"val":"html";return"static"===n.position||w(a)[i](e||""),this},T.prototype.stampRange=function(){var e,t,n=this,a=n.config,i=w(n.elem).find("td");if(a.range&&!n.endDate&&w(n.footer).find(g).addClass(s),n.endDate)return e=n.newDate({year:n.startDate.year,month:n.startDate.month,date:n.startDate.date}).getTime(),t=n.newDate({year:n.endDate.year,month:n.endDate.month,date:n.endDate.date}).getTime(),e>t?n.hint(l):void w.each(i,function(a,i){var r=w(i).attr("lay-ymd").split("-"),s=n.newDate({year:r[0],month:r[1]-1,date:r[2]}).getTime();w(i).removeClass(u+" "+o),s!==e&&s!==t||w(i).addClass(w(i).hasClass(y)||w(i).hasClass(f)?u:o),s>e&&s
+
+
+
diff --git a/src/main/resources/static/js/lib/laydate/theme/default/font/iconfont.ttf b/src/main/resources/static/js/lib/laydate/theme/default/font/iconfont.ttf
new file mode 100755
index 000000000..0bd6c4a88
Binary files /dev/null and b/src/main/resources/static/js/lib/laydate/theme/default/font/iconfont.ttf differ
diff --git a/src/main/resources/static/js/lib/laydate/theme/default/font/iconfont.woff b/src/main/resources/static/js/lib/laydate/theme/default/font/iconfont.woff
new file mode 100755
index 000000000..bfe559967
Binary files /dev/null and b/src/main/resources/static/js/lib/laydate/theme/default/font/iconfont.woff differ
diff --git a/src/main/resources/static/js/lib/laydate/theme/default/laydate.css b/src/main/resources/static/js/lib/laydate/theme/default/laydate.css
new file mode 100755
index 000000000..c7e15086b
--- /dev/null
+++ b/src/main/resources/static/js/lib/laydate/theme/default/laydate.css
@@ -0,0 +1,2 @@
+/*! laydate-v5.0.9 日期与时间组件 MIT License http://www.layui.com/laydate/ By 贤心 */
+.laydate-set-ym,.layui-laydate,.layui-laydate *,.layui-laydate-list{box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-name:laydate-upbit;animation-name:laydate-upbit}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}@-webkit-keyframes laydate-upbit{from{-webkit-transform:translate3d(0,20px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes laydate-upbit{from{transform:translate3d(0,20px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon,.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.laydate-set-ym span,.layui-laydate-header i{padding:0 5px;cursor:pointer}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;color:#999;font-size:18px}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:5px;text-align:center}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;height:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px 20px}.layui-laydate-footer span{margin-right:15px;display:inline-block;cursor:pointer;font-size:12px}.layui-laydate-footer span:hover{color:#5FB878}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{height:26px;line-height:26px;margin:0 0 0 -1px;padding:0 10px;border:1px solid #C9C9C9;background-color:#fff;white-space:nowrap;vertical-align:top;border-radius:2px}.layui-laydate-list>li,.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;background-color:#fff}.layui-laydate-list>li{position:relative;width:33.3%;height:36px;line-height:36px;margin:3px 0;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px}.layui-laydate-range{width:546px}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:1px solid #e2e2e2}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#666}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#5FB878}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{font-weight:400;color:#333}.layui-laydate-content td{color:#666}.layui-laydate-content td.laydate-selected{background-color:#00F7DE}.laydate-selected:hover{background-color:#00F7DE!important}.layui-laydate-content td:hover,.layui-laydate-list li:hover{background-color:#eaeaea;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.laydate-selected.laydate-day-next,.laydate-selected.laydate-day-prev{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#FF5722}.laydate-day-mark::after{background-color:#5FB878}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#5FB878}.layui-laydate .layui-this{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead,.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-selected,.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.laydate-theme-grid .laydate-selected.laydate-day-next,.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}@font-face{font-family:laydate-icon;src:url(font/iconfont.eot);src:url(font/iconfont.eot#iefix) format('embedded-opentype'),url(font/iconfont.svg#iconfont) format('svg'),url(font/iconfont.woff) format('woff'),url(font/iconfont.ttf) format('truetype')}.laydate-icon{font-family:laydate-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
\ No newline at end of file
diff --git a/src/main/resources/static/js/lib/layer/layer.js b/src/main/resources/static/js/lib/layer/layer.js
new file mode 100755
index 000000000..716ef5077
--- /dev/null
+++ b/src/main/resources/static/js/lib/layer/layer.js
@@ -0,0 +1,2 @@
+/*! layer-v3.1.1 Web弹层组件 MIT License http://layer.layui.com/ By 贤心 */
+ ;!function(e,t){"use strict";var i,n,a=e.layui&&layui.define,o={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,i=t.length-1,n=i;n>0;n--)if("interactive"===t[n].readyState){e=t[n].src;break}return e||t[i].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),config:{},end:{},minIndex:0,minLeft:[],btn:["确定","取消"],type:["dialog","page","iframe","loading","tips"],getStyle:function(t,i){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](i)},link:function(t,i,n){if(r.path){var a=document.getElementsByTagName("head")[0],s=document.createElement("link");"string"==typeof i&&(n=i);var l=(n||t).replace(/\.|\//g,""),f="layuicss-"+l,c=0;s.rel="stylesheet",s.href=r.path+t,s.id=f,document.getElementById(f)||a.appendChild(s),"function"==typeof i&&!function u(){return++c>80?e.console&&console.error("layer.css: Invalid"):void(1989===parseInt(o.getStyle(document.getElementById(f),"width"))?i():setTimeout(u,100))}()}}},r={v:"3.1.1",ie:function(){var t=navigator.userAgent.toLowerCase();return!!(e.ActiveXObject||"ActiveXObject"in e)&&((t.match(/msie\s(\d+)/)||[])[1]||"11")}(),index:e.layer&&e.layer.v?1e5:0,path:o.getPath,config:function(e,t){return e=e||{},r.cache=o.config=i.extend({},o.config,e),r.path=o.config.path||r.path,"string"==typeof e.extend&&(e.extend=[e.extend]),o.config.path&&r.ready(),e.extend?(a?layui.addcss("modules/layer/"+e.extend):o.link("theme/"+e.extend),this):this},ready:function(e){var t="layer",i="",n=(a?"modules/layer/":"theme/")+"default/layer.css?v="+r.v+i;return a?layui.addcss(n,e,t):o.link(n,e,t),this},layer.alert:function(e,t,n){var a="function"==typeof t;return a&&(n=t),r.open(i.extend({content:e,yes:n},a?{}:t))},confirm:function(e,t,n,a){var s="function"==typeof t;return s&&(a=n,n=t),r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t))},msg:function(e,n,a){var s="function"==typeof n,f=o.config.skin,c=(f?f+" "+f+"-msg":"")||"layui-layer-msg",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+" layui-layer-hui",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+" "+(n.skin||"layui-layer-hui")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n))}},s=function(e){var t=this;t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30)};s.pt=s.prototype;var l=["layui-layer",".layui-layer-title",".layui-layer-main",".layui-layer-dialog","layui-layer-iframe","layui-layer-content","layui-layer-btn","layui-layer-close"];l.anim=["layer-anim-00","layer-anim-01","layer-anim-02","layer-anim-03","layer-anim-04","layer-anim-05","layer-anim-06"],s.pt.config={type:0,shade:.3,fixed:!0,move:l[1],title:"信息",offset:"auto",area:"auto",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,anim:0,isOutAnim:!0,icon:-1,moveType:1,resize:!0,scrollbar:!0,tips:2},s.pt.vessel=function(e,t){var n=this,a=n.index,r=n.config,s=r.zIndex+a,f="object"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?''+(f?r.title[0]:r.title)+"
":"";return r.zIndex=s,t([r.shade?'':"",''+(e&&2!=r.type?"":u)+'
'+(0==r.type&&r.icon!==-1?'':"")+(1==r.type&&e?"":r.content||"")+'
'+function(){var e=c?'':"";return r.closeBtn&&(e+=''),e}()+""+(r.btn?function(){var e="";"string"==typeof r.btn&&(r.btn=[r.btn]);for(var t=0,i=r.btn.length;t
'+r.btn[t]+"";return''+e+"
"}():"")+(r.resize?'':"")+" "],u,i('')),n},s.pt.creat=function(){var e=this,t=e.config,a=e.index,s=t.content,f="object"==typeof s,c=i("body");if(!t.id||!i("#"+t.id)[0]){switch("string"==typeof t.area&&(t.area="auto"===t.area?["",""]:[t.area,""]),t.shift&&(t.anim=t.shift),6==r.ie&&(t.fixed=!1),t.type){case 0:t.btn="btn"in t?t.btn:o.btn[0],r.closeAll("dialog");break;case 2:var s=t.content=f?t.content:[t.content||"http://layer.layui.com","auto"];t.content='';break;case 3:delete t.title,delete t.closeBtn,t.icon===-1&&0===t.icon,r.closeAll("loading");break;case 4:f||(t.content=[t.content,"body"]),t.follow=t.content[1],t.content=t.content[0]+'',delete t.title,t.tips="object"==typeof t.tips?t.tips:[t.tips,!0],t.tipsMore||r.closeAll("tips")}if(e.vessel(f,function(n,r,u){c.append(n[0]),f?function(){2==t.type||4==t.type?function(){i("body").append(n[1])}():function(){s.parents("."+l[0])[0]||(s.data("display",s.css("display")).show().addClass("layui-layer-wrap").wrap(n[1]),i("#"+l[0]+a).find("."+l[5]).before(r))}()}():c.append(n[1]),i(".layui-layer-move")[0]||c.append(o.moveElem=u),e.layero=i("#"+l[0]+a),t.scrollbar||l.html.css("overflow","hidden").attr("layer-full",a)}).auto(a),i("#layui-layer-shade"+e.index).css({"background-color":t.shade[1]||"#000",opacity:t.shade[0]||t.shade}),2==t.type&&6==r.ie&&e.layero.find("iframe").attr("src",s[0]),4==t.type?e.tips():e.offset(),t.fixed&&n.on("resize",function(){e.offset(),(/^\d+%$/.test(t.area[0])||/^\d+%$/.test(t.area[1]))&&e.auto(a),4==t.type&&e.tips()}),t.time<=0||setTimeout(function(){r.close(e.index)},t.time),e.move().callback(),l.anim[t.anim]){var u="layer-anim "+l.anim[t.anim];e.layero.addClass(u).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){i(this).removeClass(u)})}t.isOutAnim&&e.layero.data("isOutAnim",!0)}},s.pt.auto=function(e){var t=this,a=t.config,o=i("#"+l[0]+e);""===a.area[0]&&a.maxWidth>0&&(r.ie&&r.ie<8&&a.btn&&o.width(o.innerWidth()),o.outerWidth()>a.maxWidth&&o.width(a.maxWidth));var s=[o.innerWidth(),o.innerHeight()],f=o.find(l[1]).outerHeight()||0,c=o.find("."+l[6]).outerHeight()||0,u=function(e){e=o.find(e),e.height(s[1]-f-c-2*(0|parseFloat(e.css("padding-top"))))};switch(a.type){case 2:u("iframe");break;default:""===a.area[1]?a.maxHeight>0&&o.outerHeight()>a.maxHeight?(s[1]=a.maxHeight,u("."+l[5])):a.fixed&&s[1]>=n.height()&&(s[1]=n.height(),u("."+l[5])):u("."+l[5])}return t},s.pt.offset=function(){var e=this,t=e.config,i=e.layero,a=[i.outerWidth(),i.outerHeight()],o="object"==typeof t.offset;e.offsetTop=(n.height()-a[1])/2,e.offsetLeft=(n.width()-a[0])/2,o?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):"auto"!==t.offset&&("t"===t.offset?e.offsetTop=0:"r"===t.offset?e.offsetLeft=n.width()-a[0]:"b"===t.offset?e.offsetTop=n.height()-a[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=n.width()-a[0]):"rb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=n.width()-a[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?n.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?n.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=n.scrollTop(),e.offsetLeft+=n.scrollLeft()),i.attr("minLeft")&&(e.offsetTop=n.height()-(i.find(l[1]).outerHeight()||0),e.offsetLeft=i.css("left")),i.css({top:e.offsetTop,left:e.offsetLeft})},s.pt.tips=function(){var e=this,t=e.config,a=e.layero,o=[a.outerWidth(),a.outerHeight()],r=i(t.follow);r[0]||(r=i("body"));var s={width:r.outerWidth(),height:r.outerHeight(),top:r.offset().top,left:r.offset().left},f=a.find(".layui-layer-TipsG"),c=t.tips[0];t.tips[1]||f.remove(),s.autoLeft=function(){s.left+o[0]-n.width()>0?(s.tipLeft=s.left+s.width-o[0],f.css({right:12,left:"auto"})):s.tipLeft=s.left},s.where=[function(){s.autoLeft(),s.tipTop=s.top-o[1]-10,f.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left+s.width+10,s.tipTop=s.top,f.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color",t.tips[1])},function(){s.autoLeft(),s.tipTop=s.top+s.height+10,f.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left-o[0]-10,s.tipTop=s.top,f.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color",t.tips[1])}],s.where[c-1](),1===c?s.top-(n.scrollTop()+o[1]+16)<0&&s.where[2]():2===c?n.width()-(s.left+s.width+o[0]+16)>0||s.where[3]():3===c?s.top-n.scrollTop()+s.height+o[1]+16-n.height()>0&&s.where[0]():4===c&&o[0]+16-s.left>0&&s.where[1](),a.find("."+l[5]).css({"background-color":t.tips[1],"padding-right":t.closeBtn?"30px":""}),a.css({left:s.tipLeft-(t.fixed?n.scrollLeft():0),top:s.tipTop-(t.fixed?n.scrollTop():0)})},s.pt.move=function(){var e=this,t=e.config,a=i(document),s=e.layero,l=s.find(t.move),f=s.find(".layui-layer-resize"),c={};return t.move&&l.css("cursor","move"),l.on("mousedown",function(e){e.preventDefault(),t.move&&(c.moveStart=!0,c.offset=[e.clientX-parseFloat(s.css("left")),e.clientY-parseFloat(s.css("top"))],o.moveElem.css("cursor","move").show())}),f.on("mousedown",function(e){e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],c.area=[s.outerWidth(),s.outerHeight()],o.moveElem.css("cursor","se-resize").show()}),a.on("mousemove",function(i){if(c.moveStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1],l="fixed"===s.css("position");if(i.preventDefault(),c.stX=l?0:n.scrollLeft(),c.stY=l?0:n.scrollTop(),!t.moveOut){var f=n.width()-s.outerWidth()+c.stX,u=n.height()-s.outerHeight()+c.stY;af&&(a=f),ou&&(o=u)}s.css({left:a,top:o})}if(t.resize&&c.resizeStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1];i.preventDefault(),r.style(e.index,{width:c.area[0]+a,height:c.area[1]+o}),c.isResize=!0,t.resizing&&t.resizing(s)}}).on("mouseup",function(e){c.moveStart&&(delete c.moveStart,o.moveElem.hide(),t.moveEnd&&t.moveEnd(s)),c.resizeStart&&(delete c.resizeStart,o.moveElem.hide())}),e},s.pt.callback=function(){function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}var t=this,n=t.layero,a=t.config;t.openLayer(),a.success&&(2==a.type?n.find("iframe").on("load",function(){a.success(n,t.index)}):a.success(n,t.index)),6==r.ie&&t.IE6(n),n.find("."+l[6]).children("a").on("click",function(){var e=i(this).index();if(0===e)a.yes?a.yes(t.index,n):a.btn1?a.btn1(t.index,n):r.close(t.index);else{var o=a["btn"+(e+1)]&&a["btn"+(e+1)](t.index,n);o===!1||r.close(t.index)}}),n.find("."+l[7]).on("click",e),a.shadeClose&&i("#layui-layer-shade"+t.index).on("click",function(){r.close(t.index)}),n.find(".layui-layer-min").on("click",function(){var e=a.min&&a.min(n);e===!1||r.min(t.index,a)}),n.find(".layui-layer-max").on("click",function(){i(this).hasClass("layui-layer-maxmin")?(r.restore(t.index),a.restore&&a.restore(n)):(r.full(t.index,a),setTimeout(function(){a.full&&a.full(n)},100))}),a.end&&(o.end[t.index]=a.end)},o.reselect=function(){i.each(i("select"),function(e,t){var n=i(this);n.parents("."+l[0])[0]||1==n.attr("layer")&&i("."+l[0]).length<1&&n.removeAttr("layer").show(),n=null})},s.pt.IE6=function(e){i("select").each(function(e,t){var n=i(this);n.parents("."+l[0])[0]||"none"===n.css("display")||n.attr({layer:"1"}).hide(),n=null})},s.pt.openLayer=function(){var e=this;r.zIndex=e.config.zIndex,r.setTop=function(e){var t=function(){r.zIndex++,e.css("z-index",r.zIndex+1)};return r.zIndex=parseInt(e[0].style.zIndex),e.on("mousedown",t),r.zIndex}},o.record=function(e){var t=[e.width(),e.height(),e.position().top,e.position().left+parseFloat(e.css("margin-left"))];e.find(".layui-layer-max").addClass("layui-layer-maxmin"),e.attr({area:t})},o.rescollbar=function(e){l.html.attr("layer-full")==e&&(l.html[0].style.removeProperty?l.html[0].style.removeProperty("overflow"):l.html[0].style.removeAttribute("overflow"),l.html.removeAttr("layer-full"))},e.layer=r,r.getChildFrame=function(e,t){return t=t||i("."+l[4]).attr("times"),i("#"+l[0]+t).find("iframe").contents().find(e)},r.getFrameIndex=function(e){return i("#"+e).parents("."+l[4]).attr("times")},r.iframeAuto=function(e){if(e){var t=r.getChildFrame("html",e).outerHeight(),n=i("#"+l[0]+e),a=n.find(l[1]).outerHeight()||0,o=n.find("."+l[6]).outerHeight()||0;n.css({height:t+a+o}),n.find("iframe").css({height:t})}},r.iframeSrc=function(e,t){i("#"+l[0]+e).find("iframe").attr("src",t)},r.style=function(e,t,n){var a=i("#"+l[0]+e),r=a.find(".layui-layer-content"),s=a.attr("type"),f=a.find(l[1]).outerHeight()||0,c=a.find("."+l[6]).outerHeight()||0;a.attr("minLeft");s!==o.type[3]&&s!==o.type[4]&&(n||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-f-c<=64&&(t.height=64+f+c)),a.css(t),c=a.find("."+l[6]).outerHeight(),s===o.type[2]?a.find("iframe").css({height:parseFloat(t.height)-f-c}):r.css({height:parseFloat(t.height)-f-c-parseFloat(r.css("padding-top"))-parseFloat(r.css("padding-bottom"))}))},r.min=function(e,t){var a=i("#"+l[0]+e),s=a.find(l[1]).outerHeight()||0,f=a.attr("minLeft")||181*o.minIndex+"px",c=a.css("position");o.record(a),o.minLeft[0]&&(f=o.minLeft[0],o.minLeft.shift()),a.attr("position",c),r.style(e,{width:180,height:s,left:f,top:n.height()-s,position:"fixed",overflow:"hidden"},!0),a.find(".layui-layer-min").hide(),"page"===a.attr("type")&&a.find(l[4]).hide(),o.rescollbar(e),a.attr("minLeft")||o.minIndex++,a.attr("minLeft",f)},r.restore=function(e){var t=i("#"+l[0]+e),n=t.attr("area").split(",");t.attr("type");r.style(e,{width:parseFloat(n[0]),height:parseFloat(n[1]),top:parseFloat(n[2]),left:parseFloat(n[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===t.attr("type")&&t.find(l[4]).show(),o.rescollbar(e)},r.full=function(e){var t,a=i("#"+l[0]+e);o.record(a),l.html.attr("layer-full")||l.html.css("overflow","hidden").attr("layer-full",e),clearTimeout(t),t=setTimeout(function(){var t="fixed"===a.css("position");r.style(e,{top:t?0:n.scrollTop(),left:t?0:n.scrollLeft(),width:n.width(),height:n.height()},!0),a.find(".layui-layer-min").hide()},100)},r.title=function(e,t){var n=i("#"+l[0]+(t||r.index)).find(l[1]);n.html(e)},r.close=function(e){var t=i("#"+l[0]+e),n=t.attr("type"),a="layer-anim-close";if(t[0]){var s="layui-layer-wrap",f=function(){if(n===o.type[1]&&"object"===t.attr("conType")){t.children(":not(."+l[5]+")").remove();for(var a=t.find("."+s),r=0;r<2;r++)a.unwrap();a.css("display",a.data("display")).removeClass(s)}else{if(n===o.type[2])try{var f=i("#"+l[4]+e)[0];f.contentWindow.document.write(""),f.contentWindow.close(),t.find("."+l[5])[0].removeChild(f)}catch(c){}t[0].innerHTML="",t.remove()}"function"==typeof o.end[e]&&o.end[e](),delete o.end[e]};t.data("isOutAnim")&&t.addClass("layer-anim "+a),i("#layui-layer-moves, #layui-layer-shade"+e).remove(),6==r.ie&&o.reselect(),o.rescollbar(e),t.attr("minLeft")&&(o.minIndex--,o.minLeft.push(t.attr("minLeft"))),r.ie&&r.ie<10||!t.data("isOutAnim")?f():setTimeout(function(){f()},200)}},r.closeAll=function(e){i.each(i("."+l[0]),function(){var t=i(this),n=e?t.attr("type")===e:1;n&&r.close(t.attr("times")),n=null})};var f=r.cache||{},c=function(e){return f.skin?" "+f.skin+" "+f.skin+"-"+e:""};r.prompt=function(e,t){var a="";if(e=e||{},"function"==typeof e&&(t=e),e.area){var o=e.area;a='style="width: '+o[0]+"; height: "+o[1]+';"',delete e.area}var s,l=2==e.formType?'":function(){return''}(),f=e.success;return delete e.success,r.open(i.extend({type:1,btn:["确定","取消"],content:l,skin:"layui-layer-prompt"+c("prompt"),maxWidth:n.width(),success:function(e){s=e.find(".layui-layer-input"),s.focus(),"function"==typeof f&&f(e)},resize:!1,yes:function(i){var n=s.val();""===n?s.focus():n.length>(e.maxlength||500)?r.tips("最多输入"+(e.maxlength||500)+"个字数",s,{tips:1}):t&&t(n,i,s)}},e))},r.tab=function(e){e=e||{};var t=e.tab||{},n="layui-this",a=e.success;return delete e.success,r.open(i.extend({type:1,skin:"layui-layer-tab"+c("tab"),resize:!1,title:function(){var e=t.length,i=1,a="";if(e>0)for(a=''+t[0].title+"";i"+t[i].title+"";return a}(),content:''+function(){var e=t.length,i=1,a="";if(e>0)for(a='- '+(t[0].content||"no content")+"
";i'+(t[i].content||"no content")+"";return a}()+"
",success:function(t){var o=t.find(".layui-layer-title").children(),r=t.find(".layui-layer-tabmain").children();o.on("mousedown",function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0;var a=i(this),o=a.index();a.addClass(n).siblings().removeClass(n),r.eq(o).show().siblings().hide(),"function"==typeof e.change&&e.change(o)}),"function"==typeof a&&a(t)}},e))},r.photos=function(t,n,a){function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,i(e)}))}var s={};if(t=t||{},t.photos){var l=t.photos.constructor===Object,f=l?t.photos:{},u=f.data||[],d=f.start||0;s.imgIndex=(0|d)+1,t.img=t.img||"img";var y=t.success;if(delete t.success,l){if(0===u.length)return r.msg("没有图片")}else{var p=i(t.photos),h=function(){u=[],p.find(t.img).each(function(e){var t=i(this);t.attr("layer-index",e),u.push({alt:t.attr("alt"),pid:t.attr("layer-pid"),src:t.attr("layer-src")||t.attr("src"),thumb:t.attr("src")})})};if(h(),0===u.length)return;if(n||p.on("click",t.img,function(){var e=i(this),n=e.attr("layer-index");r.photos(i.extend(t,{photos:{start:n,data:u,tab:t.tab},full:t.full}),!0),h()}),!n)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=u.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>u.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){if(!s.end){var t=e.keyCode;e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&r.close(s.index)}},s.tabimg=function(e){if(!(u.length<=1))return f.start=s.imgIndex-1,r.close(s.index),r.photos(t,!0,e)},s.event=function(){s.bigimg.hover(function(){s.imgsee.show()},function(){s.imgsee.hide()}),s.bigimg.find(".layui-layer-imgprev").on("click",function(e){e.preventDefault(),s.imgprev()}),s.bigimg.find(".layui-layer-imgnext").on("click",function(e){e.preventDefault(),s.imgnext()}),i(document).on("keyup",s.keyup)},s.loadi=r.load(1,{shade:!("shade"in t)&&.9,scrollbar:!1}),o(u[d].src,function(n){r.close(s.loadi),s.index=r.open(i.extend({type:1,id:"layui-layer-photos",area:function(){var a=[n.width,n.height],o=[i(e).width()-100,i(e).height()-100];if(!t.full&&(a[0]>o[0]||a[1]>o[1])){var r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]
",success:function(e,i){s.bigimg=e.find(".layui-layer-phimg"),s.imgsee=e.find(".layui-layer-imguide,.layui-layer-imgbar"),s.event(e),t.tab&&t.tab(u[d],e),"function"==typeof y&&y(e)},end:function(){s.end=!0,i(document).off("keyup",s.keyup)}},t))},function(){r.close(s.loadi),r.msg("当前图片地址异常
是否继续查看下一张?",{time:3e4,btn:["下一张","不看了"],yes:function(){u.length>1&&s.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),l.html=i("html"),r.open=function(e){var t=new s(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define("jquery",function(t){r.path=layui.cache.dir,o.run(layui.$),e.layer=r,t("layer",r)})):"function"==typeof define&&define.amd?define(["jquery"],function(){return o.run(e.jQuery),r}):function(){o.run(e.jQuery),r.ready()}()}(window);
\ No newline at end of file
diff --git a/src/main/resources/static/js/lib/layer/mobile/layer.js b/src/main/resources/static/js/lib/layer/mobile/layer.js
new file mode 100755
index 000000000..f9cf69313
--- /dev/null
+++ b/src/main/resources/static/js/lib/layer/mobile/layer.js
@@ -0,0 +1,2 @@
+/*! layer mobile-v2.0.0 Web弹层组件 MIT License http://layer.layui.com/mobile By 贤心 */
+ ;!function(e){"use strict";var t=document,n="querySelectorAll",i="getElementsByClassName",a=function(e){return t[n](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var n in e)t[n]=e[n];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener("click",function(e){t.call(this,e)},!1)};var r=0,o=["layui-m-layer"],c=function(e){var t=this;t.config=l.extend(e),t.view()};c.prototype.view=function(){var e=this,n=e.config,s=t.createElement("div");e.id=s.id=o[0]+r,s.setAttribute("class",o[0]+" "+o[0]+(n.type||0)),s.setAttribute("index",r);var l=function(){var e="object"==typeof n.title;return n.title?''+(e?n.title[0]:n.title)+"
":""}(),c=function(){"string"==typeof n.btn&&(n.btn=[n.btn]);var e,t=(n.btn||[]).length;return 0!==t&&n.btn?(e=''+n.btn[0]+"",2===t&&(e=''+n.btn[1]+""+e),''+e+"
"):""}();if(n.fixed||(n.top=n.hasOwnProperty("top")?n.top:100,n.style=n.style||"",n.style+=" top:"+(t.body.scrollTop+n.top)+"px"),2===n.type&&(n.content=''+(n.content||"")+"
"),n.skin&&(n.anim="up"),"msg"===n.skin&&(n.shade=!1),s.innerHTML=(n.shade?"':"")+'",!n.type||2===n.type){var d=t[i](o[0]+n.type),y=d.length;y>=1&&layer.close(d[0].getAttribute("index"))}document.body.appendChild(s);var u=e.elem=a("#"+e.id)[0];n.success&&n.success(u),e.index=r++,e.action(n,u)},c.prototype.action=function(e,t){var n=this;e.time&&(l.timer[n.index]=setTimeout(function(){layer.close(n.index)},1e3*e.time));var a=function(){var t=this.getAttribute("type");0==t?(e.no&&e.no(),layer.close(n.index)):e.yes?e.yes(n.index):layer.close(n.index)};if(e.btn)for(var s=t[i]("layui-m-layerbtn")[0].children,r=s.length,o=0;odiv{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px}
\ No newline at end of file
diff --git a/src/main/resources/static/js/lib/layer/theme/default/icon-ext.png b/src/main/resources/static/js/lib/layer/theme/default/icon-ext.png
new file mode 100755
index 000000000..bbbb669bb
Binary files /dev/null and b/src/main/resources/static/js/lib/layer/theme/default/icon-ext.png differ
diff --git a/src/main/resources/static/js/lib/layer/theme/default/icon.png b/src/main/resources/static/js/lib/layer/theme/default/icon.png
new file mode 100755
index 000000000..3e17da8b1
Binary files /dev/null and b/src/main/resources/static/js/lib/layer/theme/default/icon.png differ
diff --git a/src/main/resources/static/js/lib/layer/theme/default/layer.css b/src/main/resources/static/js/lib/layer/theme/default/layer.css
new file mode 100755
index 000000000..820b4a99b
--- /dev/null
+++ b/src/main/resources/static/js/lib/layer/theme/default/layer.css
@@ -0,0 +1 @@
+.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}}
\ No newline at end of file
diff --git a/src/main/resources/static/js/lib/layer/theme/default/loading-0.gif b/src/main/resources/static/js/lib/layer/theme/default/loading-0.gif
new file mode 100755
index 000000000..6f3c9539a
Binary files /dev/null and b/src/main/resources/static/js/lib/layer/theme/default/loading-0.gif differ
diff --git a/src/main/resources/static/js/lib/layer/theme/default/loading-1.gif b/src/main/resources/static/js/lib/layer/theme/default/loading-1.gif
new file mode 100755
index 000000000..db3a483e4
Binary files /dev/null and b/src/main/resources/static/js/lib/layer/theme/default/loading-1.gif differ
diff --git a/src/main/resources/static/js/lib/layer/theme/default/loading-2.gif b/src/main/resources/static/js/lib/layer/theme/default/loading-2.gif
new file mode 100755
index 000000000..5bb90fd6a
Binary files /dev/null and b/src/main/resources/static/js/lib/layer/theme/default/loading-2.gif differ
diff --git a/src/main/resources/static/js/utils/accountInfo.js b/src/main/resources/static/js/utils/accountInfo.js
new file mode 100644
index 000000000..04f5884a7
--- /dev/null
+++ b/src/main/resources/static/js/utils/accountInfo.js
@@ -0,0 +1,169 @@
+
+$(document).ready(function(){
+
+ /**
+ *
+ 方法说明
+ *
+ @method 查询账户处理数据数据 QueryAccountInfoSuccess
+ *
+ @param {data} 请求成功返回的数据
+ */
+
+ function QueryAccountInfoSuccess(data) {
+ var name = '';
+ var nameBalance = '';
+ var str = '';
+ var str2 = '';
+ $('#accountInfoView').html('');
+ //从base64字符串中解码出原文,格式为byteArray格式
+ var bytesAccountInfo = base64DecodeFromString(data);
+ //调用方法deserializeBinary解析
+ var accountInfo = proto.protocol.Account.deserializeBinary(bytesAccountInfo);
+ var Map = accountInfo.getAssetMap().toArray();
+ var Balance = accountInfo.getBalance();
+ var BalanceNum = (Balance/1000000).toFixed(6)
+
+ if(Balance > 0){
+ str += ''
+ +'| TRX | '
+ +''+BalanceNum+' TRX | '
+ +'
';
+ $('#accountInfoView').append(str)
+ }else{
+ str = '| TRX | 0 |
'
+ $('#accountInfoView').append(str)
+
+ }
+ if(Map.length > 0){
+ for (var key in Map) {
+ name = Map[key][0];
+ nameBalance = Map[key][1];
+ str2 += ''
+ +'| '+name+' | '
+ +''+nameBalance+' | '
+ +'
';
+ }
+ $('#accountInfoView').append(str2)
+ }
+ }
+
+
+ /**
+ *
+ 方法说明
+ *
+ @method 查询账户列表处理数据数据 QueryAccountInfoFail
+ *
+ @param {data} 请求失败返回的数据
+ */
+
+ function QueryAccountInfoFail(data) {
+ console.log(data);
+ console.log('error');
+ }
+
+ /**
+ *
+ 方法说明
+ *
+ @method 查询账户详情 getWitnessList
+ *
+ @param
+ */
+
+ function getAccountInfoView( ) {
+ var com_pri = window.localStorage.getItem('key');
+ com_priKeyBytes = base64DecodeFromString(com_pri);
+ com_addressBytes = getAddressFromPriKey(com_priKeyBytes);
+ com_text = byteArray2hexStr(com_addressBytes);
+ $('#tronAddress').text(com_text)
+ ajaxRequest( "post",getAccountInfo,{'address':com_text},QueryAccountInfoSuccess,QueryAccountInfoFail)
+ }
+
+
+ //调用接口
+ getAccountInfoView()
+ $('#accountInfo').on('click',function () {
+ getAccountInfoView()
+ })
+
+
+ /**
+ *
+ 方法说明
+ *
+ @method 查询出块人处理数据数据 QueryAccountSuccess
+ *
+ @param {data} 请求成功返回的数据
+ */
+ function QueryWitnessSuccess(data) {
+ var str = ''
+ //字符串转byteArray数据格式
+ //var bytes = stringToBytes(data);
+ //从base64字符串中解码出原文,格式为byteArray格式
+ var bytesWitnessList = base64DecodeFromString(data);
+
+ //调用方法deserializeBinary解析
+ var witness = proto.protocol.WitnessList.deserializeBinary(bytesWitnessList);
+
+ var witnessList = witness.getWitnessesList()
+ if(witnessList.length >0){
+ for(var i = 0; i0){
+ for(var i = 0; i'
+ +''+(i+1)+' | '
+ +''+address+' | '
+ +''+name+' | '
+ +''+balanceNum+' TRX | '
+ +'';
+ }
+ }else{
+ str = '没有查到账户 | '
+ }
+
+ $('#tablHtml').html(str);
+ $("#tablHtml tr").hover(function(){
+ $(this).addClass('b_acitve')
+ },function(){
+ $(this).removeClass('b_acitve')
+ });
+
- console.log('accountList'+accountList+'len'+accountList.length)
- //账户名称
- var name = account.getAccountName()
- var nameString = byteArray2hexStr(name);
- console.log("nameString:: " + nameString)
- var balance = account.getBalance();
- console.log("balance:: " + balance);
- str += ''
- // +'| '+addressHex+' | '
- +''+nameString+' | '
- +''+balance+' | '
- +'
';
-// }
- $('#tablHtml').html(str)
}
@@ -41,13 +53,12 @@
*
方法说明
*
- @method 查询账户列表处理数据数据 QueryAccountSuccess
+ @method 查询账户列表处理数据数据 QueryAccountFail
*
@param {data} 请求失败返回的数据
*/
function QueryAccountFail(data) {
- console.log(data);
console.log('error');
}
@@ -65,8 +76,6 @@ function getAccountList( ) {
}
-
-
//调用接口
getAccountList()
diff --git a/src/main/resources/static/js/utils/asset.js b/src/main/resources/static/js/utils/asset.js
index e69de29bb..9fd930dd3 100644
--- a/src/main/resources/static/js/utils/asset.js
+++ b/src/main/resources/static/js/utils/asset.js
@@ -0,0 +1,159 @@
+
+var assetIssueList;
+
+function formateDate(timeStamp) {
+ var dateObj = new Date(timeStamp);
+ var year=dateObj.getFullYear();
+ var month=dateObj.getMonth() + 1;
+ if(month<10) month = "0" + month;
+ var date=dateObj.getDate();
+ if(date<10) date = "0" + date;
+ var hour=dateObj.getHours();
+ if(hour<10) hour = "0" + hour;
+ var minute=dateObj.getMinutes();
+ if(minute<10) minute = "0" + minute;
+ var second=dateObj.getSeconds();
+ if(second<10) second = "0" + second;
+ return year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
+}
+
+function participateAssetIssue(i) {
+ $('.account_list').css('display','none');
+ $('#addcount').css('display','block');
+ var name = bytesToString(assetIssueList[i].getName());
+ var ownerAddress = byteArray2hexStr(assetIssueList[i].getOwnerAddress());
+ var totalSupply = assetIssueList[i].getTotalSupply();
+ var startTime = assetIssueList[i].getStartTime();
+ var endTime = assetIssueList[i].getEndTime();
+ var desc = bytesToString(assetIssueList[i].getDescription())
+ var num = assetIssueList[i].getNum();
+ var trxNum = assetIssueList[i].getTrxNum();
+ var price = trxNum/num;
+ var formattedStartTime = formateDate(startTime);
+ var formattedEndTime = formateDate(endTime);
+ $('#assetName').text(name);
+ $('#ownAddress').text(ownerAddress);
+ $('#assetTotalSupply').text(totalSupply);
+ $('#price').text(price);
+ $('#lastTime').text(formattedStartTime + " - " + formattedEndTime);
+ $('#desc').text(desc);
+}
+
+function calPriceByTrx() {
+ if($('#assetNum').val()!="" && $('#trxNum').val()!="") {
+ var priceByTrx = $('#trxNum').val() / $('#assetNum').val();
+ $('#priceByTrx').text(priceByTrx);
+ }
+}
+
+function checkFunction() {
+ $('#trxNumCheck').text($('#amount').val()+ '');
+ var assetNum = $('#price').text() * $('#amount').val();
+ var info = $('#assetName').text() +' '+ assetNum;
+ $('#assetInfoCheck').text(info);
+}
+
+function submitParticipateAssetIssue() {
+ var isChecked = $('#checkParticipate').prop('checked');
+ if(!isChecked){
+ layer.alert("请确认参与资产发行");
+ return;
+ }
+ var name = byteArray2hexStr(stringToBytes($('#assetName').text()));
+ var ownerAddress = getHexStrAddressFromPriKeyBase64String($('#myKey').val());
+ var toAddress = $('#ownAddress').text();
+ var amount = $('#amount').val();
+ var data = "name=" + name + "&ownerAddress=" + ownerAddress + "&toAddress=" + toAddress + "&amount=" + amount;
+ ajaxRequest("post", participateAssetView, data, submitParticipateAssetIssueSuccessCallback, submitAssetIssueFailureCallback)
+}
+
+submitParticipateAssetIssueSuccessCallback = function (data) {
+ var privateKey = base64DecodeFromString($("#myKey").val());
+ var transation = getTransActionFromBase64String(data);
+ var transationAfterSign = signTransaction(privateKey, transation);
+ var transationHex = byteArray2hexStr(transationAfterSign.serializeBinary());
+ var para = "transactionData=" + transationHex;
+ ajaxRequest("post", signView, para, submitAssetIssueSuccessCallback, submitAssetIssueFailureCallback)
+}
+
+submitAssetIssueSuccessCallback = function (data) {
+ if(data) {
+ layer.alert("参与成功");
+ $('#text').css('background','none');
+ $('.header span').removeClass('header_active');
+ $('#text').load('/html/control.html');
+ }else{
+ layer.alert("参与失败");
+ }
+}
+
+submitAssetIssueFailureCallback = function (data) {
+ layer.alert("参与失败");
+}
+
+
+getAssetListSuccessCallback = function (data) {
+ var curTime = new Date().getTime();
+ var content = "";
+ var assetIssueListObj = proto.protocol.AssetIssueList.deserializeBinary(base64DecodeFromString(data));
+ assetIssueList = assetIssueListObj.getAssetissueList();
+ for(var i = 0; i" + name + " | " + ownerAddress + " | " + totalSupply + " | 1 | | ";
+ }else{
+ content += "| " + name + " | " + ownerAddress + " | " + totalSupply + " | " + formattedStartTime + " - " + formattedEndTime + " | |
";
+ }
+ }
+ $('#assetIssueListTable').append(content);
+
+}
+
+getAssetListFailureCallback = function (data) {
+ layer.alert("获取资产列表失败");
+}
+
+
+$(document).ready(function() {
+ $("#creatAssetBtn").click(function() {
+ var address = getAddressFromPriKeyBase64String($("#privateKey").val());
+ var start = Date.parse(new Date($("#startTimeFormat").val()));
+ var end = Date.parse(new Date($("#endTimeFormat").val()));
+ var data = $("#createAssetForm").serialize() + "&ownerAddress=" + address + "&startTime=" + start + "&endTime=" + end;
+ ajaxRequest("post", createAssetView, data, createAssetSuccessCallback, createAssetFailureCallback);
+ })
+})
+
+createAssetSuccessCallback = function (data) {
+ var privateKey = base64DecodeFromString($("#privateKey").val());
+ var transation = getTransActionFromBase64String(data);
+ var transationAfterSign = signTransaction(privateKey, transation);
+ var transationHex = byteArray2hexStr(transationAfterSign.serializeBinary());
+ var para = "transactionData=" + transationHex;
+ ajaxRequest("post", signView, para, signSuccessCallback, createAssetFailureCallback)
+}
+
+signSuccessCallback = function (data) {
+ if(data) {
+ layer.alert("发行资产成功");
+ $('#text').css('background','none');
+ $('.header span').removeClass('header_active');
+ $('#text').load('/html/control.html');
+ }else{
+ layer.alert("发行资产失败");
+ }
+}
+
+createAssetFailureCallback = function (data) {
+ layer.alert("发行资产失败");
+}
+
+function getAssetIssueListFun(){
+ ajaxRequest("get", assetIssueListView, {}, getAssetListSuccessCallback, getAssetListFailureCallback);
+}
diff --git a/src/main/resources/static/js/utils/beWitness.js b/src/main/resources/static/js/utils/beWitness.js
new file mode 100644
index 000000000..8721d5da4
--- /dev/null
+++ b/src/main/resources/static/js/utils/beWitness.js
@@ -0,0 +1,81 @@
+$(document).ready(function(){
+ //btn 是否可点击
+ $(".c_check input").on("click", function () {
+ if ($(this).is(":checked")) {
+ if($('.ord_input').val() != ''){
+ $('#tobeWitness').removeClass('disable_btn')
+ } else {
+ $('#tobeWitness').addClass('disable_btn')
+ }
+ }else{
+ $('#tobeWitness').addClass('disable_btn')
+ }
+ })
+ $('.ord_input').on('blur',function(){
+ if($('.ord_input').val() != ''){
+ if ($(".c_check input").is(":checked")) {
+ $('#tobeWitness').removeClass('disable_btn')
+ }else {
+ $('#tobeWitness').addClass('disable_btn')
+ }
+ }else{
+ $('#tobeWitness').addClass('disable_btn')
+ }
+ })
+
+ $('#tobeWitness').on('click',function () {
+ if(!$(".c_check input").is(":checked")){
+ layer.alert('请阅读出块人通知,并勾选')
+ }else if($('.ord_input').val() == ''){
+ layer.alert('请输入您的个人站点')
+ }else{
+ createWitnessView()
+ }
+ })
+
+ function createWitnessSuccess(data) {
+ console.log(data)
+ var transaction = getTransActionFromBase64String(data);
+ var transactionSigned = signTransaction(com_priKeyBytes, transaction);
+ var transactionBytes = transactionSigned.serializeBinary();
+ var transactionString = byteArray2hexStr(transactionBytes);
+ var para = "transactionData=" + transactionString;
+
+ ajaxRequest("POST", anintran, para, TransBroadSuccessCallback,
+ TransBroadFailureCallback)
+
+ }
+ function createWitnessFail(error) {
+ console.log(error)
+ }
+ createWitnessView =function() {
+ var com_pri = window.localStorage.getItem('key');
+ var onwerUrl = $('.ord_input').val();
+ com_priKeyBytes = base64DecodeFromString(com_pri);
+ var com_addressBytes = getAddressFromPriKey(com_priKeyBytes);
+ var com_text = byteArray2hexStr(com_addressBytes);
+ console.log(com_text)
+ ajaxRequest( "post",createWitness,{'address':com_text,'onwerUrl':onwerUrl},createWitnessSuccess,createWitnessFail)
+ }
+ //验签成功
+ function TransBroadSuccessCallback(data) {
+ if(data){
+ layer.alert('申请成功');
+ $('#tobeWitness').css('display','none')
+ $('.ord_suc').css('display','block')
+ }else{
+ layer.alert('申请失败');
+ }
+
+
+ };
+
+ function TransBroadFailureCallback(data) {
+ console.log(data)
+ }
+
+
+
+
+
+});
\ No newline at end of file
diff --git a/src/main/resources/static/js/utils/block.js b/src/main/resources/static/js/utils/block.js
index 5bbd06b32..814916d0e 100644
--- a/src/main/resources/static/js/utils/block.js
+++ b/src/main/resources/static/js/utils/block.js
@@ -1,20 +1,217 @@
-$(function () {
+// $(function() {
+// var listPanel = $('#recentHtml');
+// var z = 0; //向上滚动top值
+// function up() { //向上滚动
+// listPanel.animate({ //中奖结果
+// 'top': (z - 35) + 'px'
+// }, 1500, 'slow', function() {
+// listPanel.css({
+// 'top': '0px'
+// })
+// .find("li:first").appendTo(listPanel).animate({opacity:1});;
+// up();
+// });
+// }
+// up();
+// });
-});
+TransSuccessCallback = function (data) {
+
+ var parenthash;
+ var parenthashHex;
+ var blockNumber;
+ var currentBlock = base64DecodeFromString(data);
+ var contractList;
+
+ var blockData = proto.protocol.Block.deserializeBinary(currentBlock);
+ blockNumber = blockData.getBlockHeader().getRawData().getNumber();
+ var witnessId = blockData.getBlockHeader().getRawData().getWitnessId();
+ var witnessNum=1;
+ parenthash = blockData.getBlockHeader().getRawData().getParenthash();
+ parenthashHex = byteArray2hexStr(parenthash);
+ parenthashHexSix = parenthashHex.substr(0,6) + '...'
+ var contraxtType=proto.protocol.Transaction.Contract.ContractType;
+
+ var contractType;
+ var contractName;
+
+ var ownerHex = "";
+ var toHex = "";
+ var amount = 0 ;
+ // time
+ var time =10;
+ var str="";
+ function getTx(contractName,ownerHex,amount,toHex) {
+ str += ''
+ + ''
+ + '' + ownerHex + ''
+ + '将' + amount + ' TRX转帐给'
+ + '' + toHex + ''
+ // + '' + time + '秒钟前'
+ + '';
+ $("#recentHtml").html(str);
+ }
+
+ $("#block_num").text('#'+blockNumber);
+ $("#witness_num").text(witnessNum);
+ $("#beforeBlock").text(parenthashHexSix);
+
+ // console.log("parenthashHex : " + parenthashHex);
+
+ var witnessNum = 1;
+
+ console.log("blockNumber : " + blockNumber + " witnessId : " + witnessId);
+
+ var txlist = blockData.getTransactionsList();
+
+ if (txlist.length > 0) {
+ var txlistFive = txlist.slice(0,12)
+ for (var index in txlistFive) {
+ // console.log(txlist[index]);
+ var tx = txlist[index];
+ contractList = tx.getRawData().getContractList();
+ //console.log(contractList)
+ for (var conIndex in contractList) {
+ var contract = contractList[conIndex]
+ var any = contract.getParameter();
+ // console.log("contract "+contract);
+ // console.log("type1 "+contract.getType());
+ switch (contract.getType()) {
+
+ case contraxtType.ACCOUNTCREATECONTRACT:
+ contractType=contraxtType.ACCOUNTCREATECONTRACT;
+
+ obje = any.unpack(
+ proto.protocol.AccountCreateContract.deserializeBinary,
+ "protocol.AccountCreateContract");
+
+
+ break;
+
+ case contraxtType.TRANSFERCONTRACT:
+ contractType=contraxtType.TRANSFERCONTRACT;
+ contractName="转账";
+
+ obje = any.unpack(
+ proto.protocol.TransferContract.deserializeBinary,
+ "protocol.TransferContract");
+
+ var owner = obje.getOwnerAddress();
+ ownerHex = byteArray2hexStr(owner);
+ ownerHexSix = ownerHex.substr(0,6) + '...';
+
+ var to = obje.getToAddress();
+ toHex = byteArray2hexStr(to);
+
+ toHexSix = toHex.substr(0,6) + '...';
+
+ amount = obje.getAmount();
+
+ // console.log("ownerHex " + ownerHex);
+ // console.log("to " + toHex);
+ // console.log("amount " + amount);
+
+ getTx(contractName,ownerHexSix,amount,toHexSix);
+ break;
-ajaxRequest( "GET",getBlockToView,data,TransSuccessCallback,TransFailureCallback);
+ }
+ }
-var data ={
+ }
+
+ }
+
+ $("#recentBlock").html("");
+ // get before block
+ for(var i= 1;i<7;i++){
+ getBeforeBlockByNumToView(getBlockByNumToView,blockNumber,i,TransSuccessByNumToViewCallback,TransFailureCallback)
+ }
};
-TransSuccessCallback = function (data) {
- console.log(data)
+
+function getBeforeBlockByNumToView(getBlockByNumToView,blockNumber,i,TransSuccessByNumToViewCallback,TransFailureCallback) {
+ $.ajax({
+ url: getBlockByNumToView,
+ type: 'get',
+ dataType: 'json',
+ data:{num: blockNumber - i},
+ async: false, // 是否异步
+ success: function (data) {
+ TransSuccessByNumToViewCallback(data)
+ },
+ fail: function (data) {
+ TransFailureCallback(data)
+ }
+ })
+}
+
+
+TransFailureCallback = function (err) {
+ console.log('err')
+};
+
+
+// query current block
+ajaxRequest( "GET",getBlockToView,{},TransSuccessCallback,TransFailureCallback);
+
+setInterval(function () {
+ ajaxRequest( "GET",getBlockToView,{},TransSuccessCallback,TransFailureCallback);
+},100000)
+
+//query recent block
+
+TransSuccessByNumToViewCallback = function (data) {
+ var recentBlock = base64DecodeFromString(data);
+ //区块大小
+ var big = recentBlock.length;
+ var blockData = proto.protocol.Block.deserializeBinary(recentBlock);
+ var blockNumber= blockData.getBlockHeader().getRawData().getNumber();
+ var witnessAddress= blockData.getBlockHeader().getRawData().getWitnessAddress();
+ var witnessAddressHex=byteArray2hexStr(witnessAddress);
+ var witnessAddressHexSix = witnessAddressHex.substr(0,10) + '...';
+ var time= blockData.getBlockHeader().getRawData().getTimestamp();
+ var transactionNum= blockData.getTransactionsList().length;
+ var contraxtType=proto.protocol.Transaction.Contract.ContractType;
+ //var big = 255;
+ var timeStr = '';
+ //当前时间戳
+ var timestamp=new Date().getTime();
+ //当前时间戳 - 块生成的时间戳
+ var accordTimes = Math.floor(timestamp - time);
+ console.log('accordTimes====='+accordTimes);
+ if(Math.floor(accordTimes/1000) > 60){
+ var sec = Math.floor(accordTimes/60000);
+ timeStr = sec+ '分'
+ }else{
+ var sec = Math.floor(accordTimes/1000);
+ timeStr = sec+ '秒'
+ }
+
+
+
+ //console.log(blockNumber+" ::: "+time+" ::: "+witnessAddressHex+" ::: "+transactionNum);
+
+
+ var html= ''
+ + '
区块 #'+ blockNumber+'
'
+ + '
'+timeStr+'前
'
+ + '
'
+ + '
'
+ + '
出块人: '+witnessAddressHexSix+'
'
+ + '交易数:'+transactionNum+''
+ +'大小:'+big+'bytes
';
+
+ $("#recentBlock").append(html);
};
TransFailureCallback = function (err) {
console.log('err')
-};
\ No newline at end of file
+};
+
+
+// ajaxRequest("GET", getBlockByNumToView, {num: 1233},
+// TransSuccessCallback, TransFailureCallback);
\ No newline at end of file
diff --git a/src/main/resources/static/js/utils/control.js b/src/main/resources/static/js/utils/control.js
index 95ec894b7..a4d05c72e 100644
--- a/src/main/resources/static/js/utils/control.js
+++ b/src/main/resources/static/js/utils/control.js
@@ -1,7 +1,105 @@
+//侧边栏
$(".c_form li").each(function(i,item){
$(this).on('click',function () {
$(this).addClass('c_active').siblings().removeClass('c_active');
$('.c_table>div').eq(i).show().siblings().hide();
-
})
-});
\ No newline at end of file
+ $('#transfer_accounts').on('click',function () {
+ $('#text').css('background','url(/../static/img/bg.png)')
+ $('#text').load('/html/transform.html');
+ })
+});
+
+
+
+/**
+ *
+ 方法说明
+ *
+ @method 查询账户详情处理数据数据 QueryAccountInfoSuccess
+ *
+ @param {data} 请求成功返回的数据
+ */
+
+function QueryAccountInfoSuccess(data) {
+ var str = ''
+ //从base64字符串中解码出原文,格式为byteArray格式
+ var bytesAccountInfo = base64DecodeFromString(data);
+ console.log(bytesAccountInfo)
+ //调用方法deserializeBinary解析
+ // var witness = proto.protocol.WitnessList.deserializeBinary(bytesWitnessList);
+ // var witnessList = witness.getWitnessesList()
+ //
+ // if(witnessList.length >0){
+ // for(var i = 0; i'
+ // +''+(i+1)+' | '
+ // +''+address+' | '
+ // +''+latestblocknum+' | '
+ // +''+producedtotal+' | '
+ // +''+missedtotal+' | '
+ // +''+votecount+' | '
+ // +'';
+ // }
+ // }else{
+ // str = '没有查到账户 | '
+ // }
+ //
+ // $('#witnessDate').append(str)
+ //
+ // $("#witnessDate tr").hover(function(){
+ // $(this).addClass('b_acitve')
+ // },function(){
+ // $(this).removeClass('b_acitve')
+ // });
+}
+
+
+/**
+ *
+ 方法说明
+ *
+ @method 查询账户详情处理数据数据 QueryAccountInfoFail
+ *
+ @param {data} 请求失败返回的数据
+ */
+
+function QueryAccountInfoFail(data) {
+ console.log(data);
+ console.log('error');
+}
+
+/**
+ *
+ 方法说明
+ *
+ @method 查询账户详情 getAcInfo
+ *
+ @param
+ */
+
+function getAcInfo() {
+ ajaxRequest( "post",getAccountInfo,{},QueryAccountInfoSuccess,QueryAccountInfoFail)
+}
+
+
+//调用接口
+getAcInfo()
+
+
+
+
+
+
diff --git a/src/main/resources/static/js/utils/login.js b/src/main/resources/static/js/utils/login.js
index 8adbdd7cb..6c7fe710c 100644
--- a/src/main/resources/static/js/utils/login.js
+++ b/src/main/resources/static/js/utils/login.js
@@ -6,13 +6,18 @@ var priKeyBytes;
var addressBytes;
var address;
var accountName;
+
var pk;
//创建账户
$('.login_html').on('click',function () {
$('#wel_login').css('display','none');
- $('.article_login').css('display','block')
+ $('#article_login').css('display','block')
+ $('#article_login').css('top','50%')
});
+
$('.wel_active').on('click',function () {
+
+ $('.motal-mask').css('display','block')
$('.motal').css('display','block')
});
$('#repawd').bind('input propertychange',function(){
@@ -20,15 +25,24 @@ $('#repawd').bind('input propertychange',function(){
})
$('.no').on('click',function () {
$('.motal').css('display','none');
- $('.mona_warn').css('display','none')
+ $('.mona_warn').css('display','none');
+ $('#repawd').val('');
+ $('.motal-mask').css('display','none')
})
$('#login').on('click',function () {
- if($('#repawd').val() == ''){
+ if($('#repawd').val() == ''||$('#repawd').val().length<20){
$('.mona_warn').css('display','block')
}else{
- $('#create').css('display','none')
+ $('.header span').eq(0).addClass('header_active');
+ $('#create').css('display','none');
$('#header_login').css('display','inline-block');
$('#center').css('display','inline-block');
+ $('.motal').css('display','none');
+ $('.motal-mask').css('display','none');
+ window.localStorage.setItem('key',$('#repawd').val());
+ $('#repawd').val('');
+ $('#text').load('/html/message.html');
+ $('#text').css('background','none');
}
})
//注册账户 复制文本
@@ -45,12 +59,11 @@ function copyUrl2 (repeat) {
selection.removeAllRanges();
selection.addRange(range);
} else {
- alert("none");
+ layer.alert("none");
}
document.execCommand('Copy','false',null);
}
$('#submit').on('click',function () {
-
priKeyBytes = genPriKey();
//return address by bytes, priKeyBytes is byte[]
addressBytes = getAddressFromPriKey(priKeyBytes);
@@ -58,18 +71,16 @@ $('#submit').on('click',function () {
address = byteArray2hexStr(addressBytes);
accountName = $("#name").val();
//TODO fix privateKey store
- // $("#privateKey").val(priKeyBytes);
$("#contents").text(address);
- // console.log($("#contents").text())
-
// priKeyBytes = genPriKey();
- var pk = base64EncodeToString(priKeyBytes);
+ pk = base64EncodeToString(priKeyBytes);
// console.log(pk)
$('#pwd').text(pk);
- $('#create').css('display','none')
- $('#header_login').css('display','inline-block');
- $('#center').css('display','inline-block');
-})
+
+ if($('.warn-info1').is(":checked")&&$('.warn-info2').is(":checked")&&$('.warn-info3').is(":checked")){
+ $('#creatAccount').removeClass('disable_btn')
+ }
+});
/*
* 转账
@@ -82,8 +93,6 @@ var go_text='' ;
var num_text='' ;
$('#com_adress').bind('input propertychange',function(){
com_text = $('#com_adress').val();
- console.log(typeof($('#com_adress').val()))
-
if(this!=''){
$('.com_warn').css('display','none');
return;
@@ -100,7 +109,6 @@ $('#go_cont').bind('input propertychange',function(){
})
$('#num').bind('input propertychange',function(){
num_text =$('#num').val();
-console.log(typeof($('#num').val()) )
if(this!=''){
$('.num_warn').css('display','none');
return;
@@ -134,9 +142,29 @@ TransFailureCallback = function (err) {
console.log('err')
};
+$('.warn_list input[type="checkbox"]').on('click',function (i) {
+ if($('.warn-info1').is(":checked")&&$('.warn-info2').is(":checked")&&$('.warn-info3').is(":checked")){
+ $('#creatAccount').removeClass('disable_btn')
+ }
+});
-
-
+$('#creatAccount').on('click',function () {
+ if($("#contents").text()&&$("#pwd").text()){
+ if($('.warn-info1').is(":checked")&&$('.warn-info2').is(":checked")&&$('.warn-info3').is(":checked")){
+ $('#create').css('display','none')
+ $('#header_login').css('display','inline-block');
+ $('#center').css('display','inline-block');
+ $('#text').css('background','none');
+ $(this).addClass('header_active').siblings().removeClass('header_active');
+ $('#text').load('/html/message.html');
+ window.localStorage.setItem('key',pk)
+ }else{
+ layer.alert('请您认真阅读并勾选创建账户须知')
+ }
+ }else{
+ layer.alert('请生成账户地址和密码')
+ }
+})
diff --git a/src/main/resources/static/js/utils/transfer.js b/src/main/resources/static/js/utils/transfer.js
new file mode 100644
index 000000000..b61a8db9e
--- /dev/null
+++ b/src/main/resources/static/js/utils/transfer.js
@@ -0,0 +1,86 @@
+/*
+* 转账
+*
+*
+*
+* */
+
+$('#com_adress').on('input propertychange', function () {
+
+ if (this != '') {
+ $('.com_warn').css('display', 'none');
+ return;
+ }
+});
+$('#go_cont').on('input propertychange', function () {
+
+ console.log(typeof($('#go_cont').val()))
+ if (this != '') {
+ $('.go_warn').css('display', 'none');
+ return;
+ }
+});
+$('#num').on('input propertychange', function () {
+ if (this != '') {
+ $('.num_warn').css('display', 'none');
+ return;
+ }
+});
+$('#change').off('click').on('click', function () {
+ event.stopPropagation();
+ if (com_prik == '') {
+ $('.com_warn').css('display', 'block');
+ return;
+ }
+ if (go_text == '') {
+ $('.go_warn').css('display', 'block');
+ return;
+ }
+ if (num_text == '') {
+ $('.num_warn').css('display', 'block');
+ return;
+ }
+ ;
+ var com_prik = $('#com_adress').val();
+ var go_text = $('#go_cont').val();
+ var num_text = $('#num').val();
+
+ com_priKeyBytes = base64DecodeFromString(com_prik);
+ com_addressBytes = getAddressFromPriKey(com_priKeyBytes);
+ com_text = byteArray2hexStr(com_addressBytes);
+ // layer.alert("com_priKeyBytes:" + com_priKeyBytes);
+ // layer.alert("com_text:" + com_text);
+ // layer.alert("go_text:" + go_text);
+ // layer.alert("num_text:" + num_text);
+ var data = {
+ "Address": com_text,
+ "toAddress": go_text,
+ "Amount": num_text
+ }
+ ajaxRequest("POST", trans, data, TransSuccessCallback, TransFailureCallback)
+})
+
+TransSuccessCallback = function (data) {
+ //layer.alert("data:" + data);
+ var transaction = getTransActionFromBase64String(data);
+ var transactionSigned = signTransaction(com_priKeyBytes, transaction);
+ var transactionBytes = transactionSigned.serializeBinary();
+ var transactionString = byteArray2hexStr(transactionBytes);
+ ajaxRequest("POST", anintran, transactionString, TransBroadSuccessCallback,
+ TransBroadFailureCallback)
+};
+TransBroadSuccessCallback = function (success) {
+ layer.alert("转账成功");
+ console.log('转账成功')
+
+};
+TransFailureCallback = function (err) {
+ layer.alert("转账失败,生成交易失败");
+
+ console.log('转账失败,生成交易失败')
+};
+TransBroadFailureCallback = function (err) {
+ layer.alert("转账失败,签名失败");
+
+ console.log('转账失败,签名失败')
+};
diff --git a/src/main/resources/static/js/utils/transferCoin.js b/src/main/resources/static/js/utils/transferCoin.js
new file mode 100644
index 000000000..597b9bd1a
--- /dev/null
+++ b/src/main/resources/static/js/utils/transferCoin.js
@@ -0,0 +1,150 @@
+/*
+* 转账
+*
+*
+*
+* */
+
+//select
+$('#com_adress').on('blur', function () {
+ if($('#com_adress').val()) {
+ com_priKeyBytes = base64DecodeFromString($('#com_adress').val());
+ com_addressBytes = getAddressFromPriKey(com_priKeyBytes);
+ com_text = byteArray2hexStr(com_addressBytes);
+ //查询用户账户资产
+ ajaxRequest("POST", getAccountInfo, {'address': com_text}, GetAccountSuccessCallback, GetAccountFailureCallback)
+ } else {
+ $('.com_warn').css('display', 'block');
+ }
+});
+
+//查询用户账户资产 数据处理
+GetAccountSuccessCallback = function (account) {
+ //从base64字符串中解码出原文,格式为byteArray格式
+ var bytesAccountInfo = base64DecodeFromString(account);
+ //调用方法deserializeBinary解析
+ var accountInfo = proto.protocol.Account.deserializeBinary(bytesAccountInfo);
+ var Map = accountInfo.getAssetMap().toArray();
+ var Balance = accountInfo.getBalance();
+ var str = ''
+ $('#coinSelect').html('')
+ if (Balance > 0) {
+ str = ''
+ +''
+ }else{
+ str = ''
+ }
+ for (var key in Map) {
+ var name = Map[key][0];
+ //nameBalance = Map[key][1];
+ str += ''
+ }
+ $('#coinSelect').append(str)
+ $('#coinSelect_box').css('display','block')
+}
+
+GetAccountFailureCallback = function () {
+ console.log(err)
+}
+
+//监听输入框 非空效验
+$('#com_adress').on('input propertychange', function () {
+ console.log($(this).val())
+ if ($(this).val() != '') {
+ $('.com_warn').css('display', 'none');
+ return;
+ }
+});
+$('#go_cont').on('input propertychange', function () {
+
+ console.log(typeof($('#go_cont').val()))
+ if ($(this).val() != '') {
+ $('.go_warn').css('display', 'none');
+ return;
+ }
+});
+$('#num').on('input propertychange', function () {
+ if ($(this).val() != '') {
+ $('.num_warn').css('display', 'none');
+ return;
+ }
+});
+
+//select val
+$('#coinSelect').on('change',function () {
+ com_asset = $(this).val()
+ console.log(com_asset)
+})
+//转账
+$('#change').off('click').on('click', function () {
+ event.stopPropagation();
+ //非空效验
+ if (com_prik == '') {
+ $('.com_warn').css('display', 'block');
+ return;
+ }
+ if (go_text == '') {
+ $('.go_warn').css('display', 'block');
+ return;
+ }
+ if (num_text == '') {
+ $('.num_warn').css('display', 'block');
+ return;
+ };
+
+ var com_prik = $('#com_adress').val();
+ var go_text = $('#go_cont').val();
+ var num_text = $('#num').val();
+ var numTrx = Number(num_text)*1000000;
+
+ var dataOther = {
+ "assetName": com_asset,
+ "Address": com_text,
+ "toAddress": go_text,
+ "Amount": numTrx
+ }
+ var dataTrx = {
+ "Address": com_text,
+ "toAddress": go_text,
+ "Amount": numTrx
+ }
+ if(com_asset == 'TRX'){
+ ajaxRequest("POST", transTrx, dataTrx, TransTrxSuccessCallback, TransFailureCallback)
+ } else{
+ ajaxRequest("POST", transOther, dataOther, TransTrxSuccessCallback, TransFailureCallback)
+ }
+
+
+})
+
+TransTrxSuccessCallback = function (data) {
+ var transaction = getTransActionFromBase64String(data);
+ var transactionSigned = signTransaction(com_priKeyBytes, transaction);
+ var transactionBytes = transactionSigned.serializeBinary();
+ var transactionString = byteArray2hexStr(transactionBytes);
+ var para = "transactionData=" + transactionString;
+ //签名验证
+ ajaxRequest("POST", anintran, para, TransBroadSuccessCallback, TransBroadFailureCallback)
+};
+
+TransBroadSuccessCallback = function (data) {
+ if(data){
+ layer.alert("转账成功");
+ //跳转到账户管理
+ $('#text').css('background','none');
+ $('.header span').removeClass('header_active');
+ $('#text').load('/html/control.html');
+ }else{
+ layer.alert("转账失败");
+ }
+
+};
+TransFailureCallback = function (err) {
+ layer.alert("转账失败,生成交易失败");
+ console.log('转账失败,生成交易失败')
+};
+
+TransBroadFailureCallback = function (err) {
+ layer.alert("转账失败,签名失败");
+ console.log('转账失败,签名失败')
+};
diff --git a/src/main/resources/static/js/utils/vote.js b/src/main/resources/static/js/utils/vote.js
new file mode 100644
index 000000000..11ca29418
--- /dev/null
+++ b/src/main/resources/static/js/utils/vote.js
@@ -0,0 +1,90 @@
+
+
+function voteInit() {
+ ajaxRequest( "get",witnessList,{},QueryWitnessSuccess,QueryWitnessFail)
+}
+
+function QueryWitnessSuccess(data) {
+ var str = ''
+ var bytesWitnessList = base64DecodeFromString(data);
+ var witness = proto.protocol.WitnessList.deserializeBinary(bytesWitnessList);
+ var witnessList = witness.getWitnessesList()
+ $('#witnessList').html("");
+ if(witnessList.length >0){
+ for(var i = 0; i'
+ +''+(i+1)+' | '
+ +''+address+' | '
+ +''+votecount+' | '
+ +' | '
+ +'';
+ }
+ }else{
+ str = '没有查到账户 | '
+ }
+ $('#witnessList').append(str);
+ $("#witnessList tr").hover(function(){
+ $(this).addClass('b_acitve')
+ },function(){
+ $(this).removeClass('b_acitve')
+ });
+}
+
+function QueryWitnessFail(data) {
+ console.log(data);
+ console.log('error');
+}
+
+function voteSubmit() {
+ var ownerAddress = getHexStrAddressFromPriKeyBase64String($("#myKey").val());
+ var para = "{\"owner\": \"" + ownerAddress + "\", \"list\": [";
+
+ for(var i=0; i<$("#witnessList tr").length; i++){
+ var addressHex = $("#witnessList tr").eq(i).find('td').eq(1).text();
+ var voteCount = $("#witnessList tr").eq(i).find('td input').eq(0).val();
+ if(voteCount > 0){
+ para += "{\"address\": \"" + addressHex + "\", \"amount\":\"" + voteCount + "\"},"
+ }
+ }
+ para = para.substr(0, para.length - 1);
+ para += "]}";
+
+ $.ajax({
+ type: "POST",
+ url: voteWitnessView,
+ dataType: "json",
+ contentType: "application/json",
+ data: para,
+ success: voteSubmitSuccessCallback,
+ error: voteFailureCallback,
+ });
+}
+
+voteSubmitSuccessCallback = function (data) {
+ var privateKey = base64DecodeFromString($("#myKey").val());
+ var transation = getTransActionFromBase64String(data);
+ var transationAfterSign = signTransaction(privateKey, transation);
+ var transationHex = byteArray2hexStr(transationAfterSign.serializeBinary());
+ var para = "transactionData=" + transationHex;
+ ajaxRequest("post", signView, para, voteSuccessCallback, voteFailureCallback)
+}
+
+voteSuccessCallback = function (data) {
+ layer.alert("投票成功");
+}
+
+voteFailureCallback = function (data) {
+ layer.alert("投票失败");
+}
diff --git a/src/main/resources/static/js/utils/witness.js b/src/main/resources/static/js/utils/witness.js
new file mode 100644
index 000000000..1ef0eae59
--- /dev/null
+++ b/src/main/resources/static/js/utils/witness.js
@@ -0,0 +1,93 @@
+
+
+
+
+/**
+ *
+ 方法说明
+ *
+ @method 查询出块人处理数据数据 QueryAccountSuccess
+ *
+ @param {data} 请求成功返回的数据
+ */
+
+function QueryWitnessSuccess(data) {
+ var str = ''
+ //字符串转byteArray数据格式
+ //var bytes = stringToBytes(data);
+ //从base64字符串中解码出原文,格式为byteArray格式
+ var bytesWitnessList = base64DecodeFromString(data);
+
+ //调用方法deserializeBinary解析
+ var witness = proto.protocol.WitnessList.deserializeBinary(bytesWitnessList);
+
+ var witnessList = witness.getWitnessesList()
+
+ if(witnessList.length >0){
+ for(var i = 0; i'
+ +''+(i+1)+' | '
+ +''+address+' | '
+ // +''+latestblocknum+' | '
+ // +''+producedtotal+' | '
+ // +''+missedtotal+' | '
+ +''+votecount+' TRX | '
+ +'';
+ }
+ }else{
+ str = '没有查到账户 | '
+ }
+
+ $('#witnessDate').append(str)
+
+ $("#witnessDate tr").hover(function(){
+ $(this).addClass('b_acitve')
+ },function(){
+ $(this).removeClass('b_acitve')
+ });
+}
+
+
+/**
+ *
+ 方法说明
+ *
+ @method 查询账户列表处理数据数据 QueryWitnessFail
+ *
+ @param {data} 请求失败返回的数据
+ */
+
+function QueryWitnessFail(data) {
+ console.log(data);
+ console.log('error');
+}
+
+/**
+ *
+ 方法说明
+ *
+ @method 查询账户列表 getWitnessList
+ *
+ @param
+ */
+
+function getWitnessList( ) {
+ ajaxRequest( "get",witnessList,{},QueryWitnessSuccess,QueryWitnessFail)
+}
+
+
+//调用接口
+getWitnessList()
+
diff --git a/src/main/resources/templates/html/accountQuery.html b/src/main/resources/templates/html/accountQuery.html
index d8825f33c..ce1f74ee9 100644
--- a/src/main/resources/templates/html/accountQuery.html
+++ b/src/main/resources/templates/html/accountQuery.html
@@ -1,5 +1,5 @@
- 账户
+
@@ -10,40 +10,19 @@ 账户
-
+ | 排名 |
+ 账户地址 |
账户名称 |
- 余额 |
-
+ 余额 |
-
-
- | 1 |
- 1 |
-
-
- | 1 |
- 1 |
-
-
- | 1 |
- 1 |
-
-
- | 1 |
- 1 |
-
-
- | 1 |
- 1 |
-
-
- | 1 |
+
- 1 |
-
-
\ No newline at end of file
+
+
+
+
diff --git a/src/main/resources/templates/html/control.html b/src/main/resources/templates/html/control.html
index eab35896e..f63f107da 100644
--- a/src/main/resources/templates/html/control.html
+++ b/src/main/resources/templates/html/control.html
@@ -1,11 +1,11 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/resources/templates/html/login.html b/src/main/resources/templates/html/login.html
index 265173c6d..66580e908 100644
--- a/src/main/resources/templates/html/login.html
+++ b/src/main/resources/templates/html/login.html
@@ -4,12 +4,12 @@
欢迎使用波场区块链浏览器
-
- 交易方式决定内容的分发、订阅、推送,赋能内容创造者,形成去中心化的内容娱乐生态。波场平台应用合作伙伴(陪我APP,Obike,GIFTO,Uplive)用户规模突破四千万,波场平台也是全球DAPP用户最多的智能合约区块链平台。
-
+
+
+
-