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 + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + 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]'+(u[d].alt||
'+(u.length>1?'':"")+'
'+(u[d].alt||"")+""+s.imgIndex+"/"+u.length+"
",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?"
':"")+'
"+l+'
'+n.content+"
"+c+"
",!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 = 'TRX0' + $('#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" + 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 @@

    账户

    - + + - - + - - - - - - - - - - - - - - - - - - - - - - - + - -
    排名账户地址 账户名称余额余额
    11
    11
    11
    11
    11
    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 @@
      -
    • 账户详情
    • +
    • 账户详情
    • -
    • 申请成为见证人
    • -
    • 投票
    • +
    • 申请成为出块人
    • +
    • 投票
    • 帮助
    • @@ -16,43 +16,24 @@
      资产列表
      - + - - - - - - - - - - - - - - + -
      资产名称发行人 我的总量
      1$1001
      1$1001
      账户信息
      - -

      - 账户名称 - tron -

      账户地址 - tron +

      @@ -96,23 +77,19 @@
      账户信息
      -
      见证人通知
      -

      见证人

      +
      出块人通知
      +

      出块人

      - 见证人是为区块链打包生成新的区块的实体。每一个见证人由股东批准,打包经验证的交易,生成并签署区块。每一条进入网络的交易最终将被所有见证人验证。 -

      -

      - 共识机制 -

      -

      - 由谁在什么时间来打包生成区块是由被称为Delegated Proof of Stak (DPOS)的共识算法决定的。算法的本质是 BitShares - 的股东(BTS的持有者)能通过投票来决定他们期望的块打包者。由获得最多票数的所谓"见证人"来打包生成区块。 + 申请成为出块者需要您的账户TRX余额>0,点击申请按钮,输入您的账户密码,即可申请成为出块候选者。通过用户投票,得票最多的几个人,会成为出块者。成为出块者可以打包交易,生成区块并获取对应的TRX奖励。

      - 我已理解见证人注意事项,确认申请见证人候选人 + + 我已理解出块人注意事项,确认申请出块人候选人

      - + + +
      @@ -122,92 +99,137 @@
      见证人通知
      # 账户地址 - 上一周得票数 + 上一周期得票数 我的投票 - - - 1 - tron2 - 1243,4212,4213 - - - - - - - 2 - tron2 - 1243,4212,4213 - - - - - - - 3 - tron2 - 1243,4212,4213 - - - - - - - 4 - tron2 - 1243,4212,4213 - - - - - + + +
      -
      - -

      语言选择

      -

      - 设置您喜欢的语言 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      +
      +

      + Q + TRON区块链浏览器有哪些功能? + + +

      +

      + A + 目前TRON区块链浏览器包括账户管理功能和5大版块:区块信息、账户查询、出块人、钱包、资产发行。 +

      +
      +
      +

      + Q + 如何注册TRON区块链浏览器账户? + +

      - - -

      记账单位

      -

      - 选择您想要的记账单位 - +

      + A + TRON区块链浏览器钱包和资产发行功能,需要用户登录账户进行操作。未登录用户需通过账户管理功能,注册TRON账户,将注册密码保存在本地(切记不可泄漏公开),通过密码即可进行登录操作。

      -
      - -

      - 浏览器通知 - - 启用浏览器通知 - +

      +
      +

      + Q + 如何用TRON区块链浏览器发行资产或参与资产发行? + +

      +

      + A + + TRON区块链浏览器支持用户一键发行资产和参与资产发行。 +
      【1】发行资产 +
      点击上部导航栏中资产发行,切换到资产发行页。输入您要发行的数字资产信息,一键就可以发行数字资产。每次资产发行需要消耗发行账户100,000 TRX。 +
      【2】参与资产发行 +
      通过查看全部资产列表,可以参与到发行当中。 + +
      +

      +
      +
      +

      + Q + 如何使用TRON钱包进行资产交易? + + +

      +

      + A + TRON钱包支持用户进行资产交易,通过转账操作,向对方账户转出资产。 +

      +
      +
      +

      + Q + 如何成为TRON主链见证人? + + +

      +

      + A + 只要当前账户拥有TRX,即可在账户管理功能中申请成为出块人。同时可以对当前出块候选人进行投票,每个账户可以多次投票,每次最大投票数小于等于TRX数(拥有N个TRX,就能投小于等于N票),可以投给多个出块人。1天(00:00~24:00)为一个投票周期,每个周期以最终一次投票数据计算得票结果,得票最多的几个人,会成为出块人。 + +申请成为出块人以及投票操作均不消耗TRX。 +

      - - -

      自动注销

      - -

      一段时间不活动后,您的账户将自动注销

      -
      -
      帮助
      + - - - + + + + diff --git a/src/main/resources/templates/html/count.html b/src/main/resources/templates/html/count.html index 9304d10fc..cf9a9fdc6 100644 --- a/src/main/resources/templates/html/count.html +++ b/src/main/resources/templates/html/count.html @@ -1,10 +1,11 @@ +