commit c4ebb193ca97322fa1e10d11c941d5af985fb9a8 Author: liaoxinyu Date: Thu Aug 1 09:29:49 2024 +0800 项目初始化 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2b8f438 --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +# ---> Vue +# gitignore template for Vue.js projects +# +# Recommended template: Node.gitignore + +# TODO: where does this rule come from? +docs/_book + +# TODO: where does this rule come from? +test/ + +# ---> macOS +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +node_modules/ +unpackage + +.idea/ +.hbuilderx/ \ No newline at end of file diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..0150f73 --- /dev/null +++ b/App.vue @@ -0,0 +1,159 @@ + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..2b64487 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +初始化 \ No newline at end of file diff --git a/api/Socket.js b/api/Socket.js new file mode 100644 index 0000000..0ddd750 --- /dev/null +++ b/api/Socket.js @@ -0,0 +1,177 @@ +class Socket { + constructor(link) { + // 初始化socket + if (link.constructor === WebSocket) { + this.socket = link; + } else { + this.socket = new WebSocket(link); + } + + // this.socket.binaryType = 'arraybuffer'; + + this.doOpen(); + + // 连接状态的标识符 + this.readyState = this.socket.readyState; + + // 订阅/发布模型 + this._events = { + // 订阅的事件 : 发布的方法 + + }; + + // 定时验证的标识符 + this.heartBeatTimer = null; + + } + + // 执行socket并发布事件 + doOpen() { + + this.afterOpenEmit = []; + + // 执行socket连接 并初始化验证请求 + this.socket.addEventListener("open", evt => this.onOpen(evt)); + + // 接收socket数据 + this.socket.addEventListener("message", evt => this.onMessage(evt)); + + // 关闭socket连接 + this.socket.addEventListener("close", evt => this.onClose(evt)); + + // 请求发生错误 + this.socket.addEventListener("error", err => this.onError(err)); + + } + + // 发布后通知订阅者 + Notify(entry) { + // 检查是否有订阅者 返回队列 + const cbQueue = this._events[entry.Event]; + if (cbQueue && cbQueue.length) { + for (let callback of cbQueue) { + if (callback instanceof Function) callback(entry.Data); + } + } + } + + // 请求数据的方法 + onOpen(evt) { + + // 每隔20s检查连接 + // this.heartBeatTimer = setInterval(() => this.send({ + // 'cmd': 'ping', + // 'args': '' + // }), 20000); + + // 通知订阅 + this.Notify({Event: 'open', Data : evt}); + } + + /** + * 订阅所有的数据 + * @param {array|object} datas 订阅参数集合 + */ + send(datas) { + if (datas.constructor != Array) { + datas = [datas]; + } + + for (let item of datas) { + this.socket.send(JSON.stringify(item)); + } + } + + + onMessage(evt) { + + try { + + // 解析推送的数据 + const data = JSON.parse(evt.data); + + // 通知订阅者 + this.Notify({ + Event: 'message', + Data: data + }); + + } catch (err) { + console.error(' >> Data parsing error:', err); + + // 通知订阅者 + this.Notify({ + Event: 'error', + Data: err + }); + } + } + + // 添加事件监听 + on(name, handler) { + this.subscribe(name, handler); + } + + // 取消订阅事件 + off(name, handler) { + this.unsubscribe(name, handler); + } + + // 订阅事件的方法 + subscribe(name, handler) { + if (this._events[name]) { + this._events[name].push(handler); // 追加事件 + } else { + this._events[name] = [handler]; // 添加事件 + } + } + + // 取消订阅事件 + unsubscribe(name, handler) { + + let start = this._events[name].findIndex(item => item === handler); + + // 删除该事件 + this._events[name].splice(start, 1); + + } + + checkOpen() { + return this.readyState >= 2; + } + + onClose(evt) { + this.Notify({Event: 'close', Data : evt}); + } + + + onError(err) { + this.Notify({Event: 'error', Data : err}); + } + + emit(data) { + return new Promise((resolve) => { + this.send(JSON.stringify(data)); + this.on('message', function (data) { + resolve(data); + }); + }); + } + + doClose() { + this.socket.close(); + } + + destroy() { + if (this.heartBeatTimer) { + clearInterval(this.heartBeatTimer); + this.heartBeatTimer = null; + } + this.doClose(); + this._events = {}; + this.readyState = 0; + this.socket = null; + } +} + +export default Socket diff --git a/api/assets.js b/api/assets.js new file mode 100644 index 0000000..eb8e49f --- /dev/null +++ b/api/assets.js @@ -0,0 +1,251 @@ +import {$get,$post,$postFile} from '@/api' + + +class Assets { + /** + * 数字货币提现 + * @param {Object} data + */ + static cryptocurrenciesWithdrawal(data) { + + return $post(`/withdraw/cryptocurrenciesWithdrawal`, data); + + } + + + + /** + * assets页面 + * @param {Object} data + */ + static assets(data) { + + return $post(`/userCoin/assets`, data); + + } + + + /** + * assets页面 + * @param {Object} data + */ + static getAllList(data) { + + return $get(`coin/getAllList`, data); + + } + + /** + * 币币用户历史委托 + * @param {Object} data + */ + static history(data) { + + return $post(`/coin/orders/history`, data); + + } + + /** + * 资金划转记录 + * @param {Object} data + */ + static fundsTransferRecordPageList(data) { + + return $post(`/fundsTransferRecord/pageList`, data); + + } + + /** + * 资金划转 + * @param {Object} data + */ + static transfer(data) { + + return $post(`/userCoin/transfer`, data); + + } + + /** + * 数字货币充值 + * @param {int} params + */ + static cryptocurrenciesRecharge(coinId) { + + return $get(`/recharge/cryptocurrenciesRecharge/${coinId}`); + + } + + /** + * 数字货币充值记录 + * @param {Object} data + */ + static cryptocurrenciesRechargeRecords(data) { + + return $post(`/recharge/cryptocurrenciesRechargeRecords`, data); + + } + + + /** + * 用户数字货币提现记录 + * @param {Object} data + */ + static cryptocurrenciesWithdrawRecords(data) { + + return $post(`/withdraw/cryptocurrenciesWithdrawRecords`, data); + + } + + /** + * 删除提现地址 + * @param {Object} data + */ + static deleteById(data) { + + return $post(`/withdrawAddress/deleteById`, data); + + } + + /** + * 编辑提现地址 + * @param {Object} data + */ + static editById(data) { + + return $post(`/withdrawAddress/editById`, data); + + } + + /** + * 移除添加地址 + * @param {Object} data + */ + static addRemove(data) { + + return $post(`/withdrawAddress/addOrRemoveWhiteList`, data); + + } + + + /** + * 提现地址分页列表 + * @param {Object} data + */ + static pageList(data) { + + return $post(`/withdrawAddress/pageList`, data); + + } + + + /** + * 添加提现地址 + * @param {Object} data + */ + static save(data) { + + return $post(`/withdrawAddress/save`, data); + + } + + + /** + * 费率列表(手续费) + * @param {Object} data + */ + static getList(data) { + + return $get(`/transferFee/getList`, data); + + } + + /** + * 用户合约资金 + * @param {Object} data + */ + static contractsAccount(data) { + + return $get(`/futuresUserCoin/contractsAccount`, data); + + } + /** + * 用户合约资金(详情) + * @param {number} accountId + */ + static contractsAccountDetail(accountId) { + + return $get(`/futuresUserCoin/contractsAccountDetail/${accountId}`); + + } + + /** + * 用户资金历史记录 + * @param {Object} data + */ + static transactionHistory(data) { + + return $post(`/futuresUserCoin/transactionHistory`, data); + + } + /** + * 确认是否白名单地址 + * @param {Object} data + */ + static checkIsWhiteList(data) { + + return $post(`/withdrawAddress/checkIsWhiteList`, data); + + } + + /** + * 用户已实现盈亏列表 + * @param {Object} data + */ + static realisedPnlLog(data) { + + return $post(`/realisedPnlLog/list`, data); + + } + + /** + * 定期宝列表 + * @param {Object} data + */ + static financeList(data) { + + return $post(`/finance/list`, data); + + } + /** + * 理财订单列表 + * @param {Object} data + */ + static financeOrderList(data) { + + return $post(`/finance/order/list`, data); + + } + /** + * 定期宝列表 + * @param {Object} data + */ + static financeApply(data) { + + return $post(`/finance/apply`, data); + + } + /** + * 定期理财账户资产 + * @param {Object} data + */ + static financeAccount(data) { + + return $post(`/finance/account`, data); + + } + + + +} + +export default Assets; \ No newline at end of file diff --git a/api/cache.js b/api/cache.js new file mode 100644 index 0000000..3d8f813 --- /dev/null +++ b/api/cache.js @@ -0,0 +1,104 @@ +/** + * @description 返回数据时提示的消息 + * @param {String} msg 返回的消息 + * @param {Object} data 返回的数据 + * @returns { { msg,data } } + */ +function msg(msg = '请传递消息', data = null) { + return { msg, data }; +} +let map = new Map(), + storage = uni.getStorageInfoSync(); //所有数据缓存 +/** + * @description 缓存类 + * @class 缓存类class + */ +class Cache { + /** + * @constructor + * @param {Number} [timeout=86400] 缓存时间默认86400秒等于一天,传0为永久存储 + */ + constructor(timeout = 86400) { + // 把本地缓存数据存入map中 + storage.keys.forEach((key) => map.set(key, uni.getStorageSync(key))); + this.map = map; //map数据 + this.timeout = timeout; + } + /** + * @description 设置缓存数据 + * @param {String} key 存储的key + * @param {Object} data 存储的data数据 + * @param {String} [timeout] 缓存时间,传0为永久存储 + * @returns { {msg,data} } + */ + set(key, data, timeout = this.timeout) { + //data = 数据value值,超时时间,加入缓存时间 + Object.assign(data, { createTime: Date.now(), timeout }); + uni.setStorageSync(key, data); //保存到本地缓存 + this.map.set(key, data); //保存到map + return msg('保存成功', data); + } + /** + * @description 获取缓存数据 + * @param {String} key 存储的key + * @returns { {msg,data | data:null} } + */ + get(key) { + let value = this.map.get(key); //取值 + if (!value) return msg('没有key值'); //如果没有值,那就就返回空 + // 数据,超时时间,加入缓存时间 现在时间 时间差(秒) + let { timeout, createTime, ...data } = value, + presentTime = Date.now(), + tdoa = (presentTime - createTime) / 1000; + // 超出缓存时间,那么就清除缓存返回空 + if (timeout != 0 && tdoa > timeout) { + uni.removeStorageSync(key); + this.map.delete(key); //删除map中对应的key值 + return msg('数据过期'); + } else { + return msg('ok', data); + } + } + /** + * @description 清除某个缓存数据 + * @param {String} key 存储的key + * @returns { {msg,data:null} } + */ + remove(key) { + uni.removeStorageSync(key); //删除缓存的数据 + this.map.delete(key); //删除map中对应的key值 + return msg('删除成功'); + } + /** + * @description 清除整个缓存数据 + * @returns { {msg,data:null} } + */ + clear() { + uni.clearStorageSync(); //清空缓存的数据 + this.map.clear(); //清空map + return msg('清空成功'); + } + /** + * @description 获取缓存数据大小 + * @param { function } cb - 缓存大小 + */ + getSize(cb) { + plus.cache.calculate((size) => { + let sizeCache = parseInt(size); + let cacheSize; + if (sizeCache == 0) { + cacheSize = '0B'; + } else if (sizeCache < 1024) { + cacheSize = sizeCache + 'B'; + } else if (sizeCache < 1048576) { + cacheSize = (sizeCache / 1024).toFixed(2) + 'KB'; + } else if (sizeCache < 1073741824) { + cacheSize = (sizeCache / 1048576).toFixed(2) + 'MB'; + } else { + cacheSize = (sizeCache / 1073741824).toFixed(2) + 'GB'; + } + cb(cacheSize); + }); + } +} +export default new Cache(); \ No newline at end of file diff --git a/api/college.js b/api/college.js new file mode 100644 index 0000000..bd90fb4 --- /dev/null +++ b/api/college.js @@ -0,0 +1,25 @@ +import Serve from '@/api/serve' + +class College { + static college(data) { + return Serve.get(`/college`,data); + } + + static getArticleList(data) { + return Serve.get(`/articleList`,data); + } + + static getCategoryList() { + return Serve.get(`/categoryList`); + } + + static getArticleDetail(data) { + return Serve.get(`/article/detail`,data); + } + + static getRecommend() { + return Serve.get(`/recommend`); + } +} + +export default College; \ No newline at end of file diff --git a/api/contract.js b/api/contract.js new file mode 100644 index 0000000..b415cf8 --- /dev/null +++ b/api/contract.js @@ -0,0 +1,110 @@ +import Serve from '@/api/serve' + +class Contract { + /** + * 合约初始化面板数据 + * @param {Object} data + */ + static getMarketInfo(data) { + return Serve.get(`/contract/getMarketInfo`, data); + } + + /** + * 获取合约市场 + */ + static getMarketList(data) { + return Serve.get('/contract/getMarketList', data) + } + + /** + * 获取合约账户信息 + */ + static contractAccount(data, config) { + return Serve.get('/contract/contractAccount', data, config) + } + + /** + * 获取合约详情 + */ + static getSymbolDetail(data) { + return Serve.get('/contract/getSymbolDetail', data) + } + /** + * 可开张数(合约上限) + * */ + static openNum(data,config) { + return Serve.get('/contract/openNum', data,config) + } + /** + * 合约开仓 + */ + static openPosition(data, config) { + return Serve.post('/contract/openPosition', data, config) + } + + // 获取合约持仓 + static holdPosition(data, config) { + return Serve.get('/contract/holdPosition', data, config) + } + // 合约平仓 + static closePosition(data, config) { + return Serve.post('/contract/closePosition', data, config) + } + // 一键全平 + static closeAllPosition(data, config) { + return Serve.post('/contract/closeAllPosition', data, config) + } + // 获取当前合约委托 + static getCurrentEntrust(data, config) { + return Serve.get('/contract/getCurrentEntrust', data, config) + } + // 撤单 + static cancelEntrust(data, config) { + return Serve.post('/contract/cancelEntrust', data, config) + } + // 历史委托 + static getHistoryEntrust(data, config) { + return Serve.get('/contract/getHistoryEntrust', data, config) + } + // 获取k线数据 + static getKline(data, config) { + return Serve.get('/contract/getKline', data, config) + } + // 获取委托明细 + static getEntrustDealList(data, config) { + return Serve.get('/contract/getEntrustDealList', data, config) + } + // 获取开通状态 + static openStatus() { + return Serve.get('/contract/openStatus') + } + // 开通永续合约 + static opening() { + return Serve.post('/contract/opening') + } + static setStrategy(data, config) { + return Serve.post('/contract/setStrategy', data, config) + } + // 委托盈亏分享 + static entrustShare(data) { + return Serve.get('/contract/entrustShare', data, { loading: true }) + } + // 持仓盈亏分享 + static positionShare(data) { + return Serve.get('/contract/positionShare', data, { loading: true }) + } + // 一键全平 + static onekeyAllFlat(data) { + return Serve.post('/contract/onekeyAllFlat', data, { loading: true }) + } + // 一键反向 + static onekeyReverse(data) { + return Serve.post('/contract/onekeyReverse', data, { loading: true }) + } + // 合约说明 + static instruction() { + return Serve.get('/contract/instruction') + } +} + +export default Contract; \ No newline at end of file diff --git a/api/currency.js b/api/currency.js new file mode 100644 index 0000000..8418f68 --- /dev/null +++ b/api/currency.js @@ -0,0 +1,42 @@ +import Serve from '@/api/serve' + +class Currency { + // 获取平台收款方式列表 + static legalPayList() { + return Serve.post(`/collection/legalPayList`); + } + //用户收款地址列表 + static paymentsList() { + return Serve.post(`/user/paymentsList`); + } + //法币交易创建订单 + static legalCurrency(data) { + return Serve.post(`/user/legalCurrency`,data); + } + //法币交易订单列表 + static legalList(data) { + return Serve.post(`/user/legalList`,data); + } + //法币交易订单详情 + static legalInfo(data) { + return Serve.post(`/user/legalInfo`,data); + } + //用户收款地址编辑 + static paymentsSubmit(data) { + return Serve.post(`/user/paymentsSubmit`,data); + } + //订单确认支付/收款/取消 + static legalPay(data) { + return Serve.post(`/user/legalPay`,data); + } + //用户收款方式详情 + static paymentsInfo(data) { + return Serve.post(`/user/paymentsInfo`,data); + } + //用户收款方式开启关闭 + static paymentsStatus(data) { + return Serve.post(`/user/paymentsStatus`,data); + } +} + +export default Currency; \ No newline at end of file diff --git a/api/exchange.js b/api/exchange.js new file mode 100644 index 0000000..9f451b4 --- /dev/null +++ b/api/exchange.js @@ -0,0 +1,41 @@ +import Serve from '@/api/serve' + +class Exchange { + + // 获取账户余额 + static getUserBalance(data) { + return Serve.get(`/exchange/getUserCoinBalance`,data); + } + + /** + * 提交订单 + * @param {object} data + * @param {string} data.direction buy sell + * @param {string} data.type 1限价2市价 + * @param {string} data.symbol 交易对 + * @param {number} data.entrust_price 限价单价 + * @param {number} data.amount 限价数量 + * @param {number} data.trigger_price 条件单单价 + * @param {number} data.total 市价单总价 + * + */ + static storeEntrust(data,config) { + return Serve.post(`/exchange/storeEntrust`, data,config); + } + + // 获取币种基本信息 + static getSymbolInfo(data) { + return Serve.post(`/user/tradingPairCurrency`, data); + } + + // 查询最新资讯 + static newTrends() { + return Serve.get(`/newTrends`); + } + // 获取汇率 + static getCurrencyExCny(data){ + return Serve.get('/market/getCurrencyExCny',data) + } +} + +export default Exchange; \ No newline at end of file diff --git a/api/home.js b/api/home.js new file mode 100644 index 0000000..7fdb8f6 --- /dev/null +++ b/api/home.js @@ -0,0 +1,25 @@ + +import Serve from '@/api/serve/index' + +class Home { + // 获取大部分数据 + static indexList(data,config){ + return Serve.get('/indexList',data,config) + } + // 获取自选数据 + static getCollect(){ + return Serve.get('/getCollect') + } + + /** + * 添加自选 + * @param {object} data + * @param {string} data.pair_id + * @param {string} data.pair_name + */ + static option(data){ + return Serve.post('/option',data) + } +} + +export default Home; \ No newline at end of file diff --git a/api/market.js b/api/market.js new file mode 100644 index 0000000..b38877a --- /dev/null +++ b/api/market.js @@ -0,0 +1,56 @@ +import Serve from '@/api/serve' + +class Market { + + /** + * 轮播图列表 + * @param {Object} data + * @param {int} type 请求类型 1是pc(默认) 2是app + * @param {int} position 位置 1(币币首页) 2(预留扩展) + */ + static cryptocurrenciesWithdrawal(type, position) { + + return Serve.post(`/market/banner/${type}/${position}`); + + } + + /** + * 用户收藏交易对信息 需要先登录 + */ + static userFavList() { + + return Serve.get(`/coin/market/collection/list`); + + } + + + static blogCategoryList() { + return Serve.get(`/blogCategory/list`); + } + + static blogDetailList(categoryId, params) { + return Serve.get(`/blog/list/${categoryId}`, params ); + } + + static blogDetailContent(id) { + return Serve.get(`/blog/detail/${id}`); + } + + // 初始化查询市场行情 + static getMarketList() { + return Serve.get(`/exchange/getMarketList`); + } + + // 初始化买卖盘数据 + static getBooks(data) { + return Serve.get(`/exchange/getMarketInfo`,data); + } + + // 获取币种信息 + static getCoinInfo(data){ + return Serve.get(`/exchange/getCoinInfo`,data) + } + +} + +export default Market; \ No newline at end of file diff --git a/api/member.js b/api/member.js new file mode 100644 index 0000000..225b44c --- /dev/null +++ b/api/member.js @@ -0,0 +1,144 @@ +import server from '@/api/serve' + +class Member { + + /** + * 注册滑块验证码 + * @param {object} data + */ + static sliderVerify(data) { + return server.post(`/sliderVerify`, data); + } + + /** + * 注册发送手机验证码 + * @param data {phone,country_code,token} + */ + static sendSmsCode(data) { + return server.post(`/register/sendSmsCode`, data); + } + + /** + * 注册发送验证码 + * @param data {email,token} + */ + static sendEmailCode(data) { + return server.post(`/register/sendEmailCode`, data); + } + + /** + * 获取国家区号 + * @param {object} data + */ + static getCountryCode() { + return server.get(`/getCountryList`); + } + + /** + * 注册提交 + * @param {object} data + */ + static register(data) { + return server.post(`/user/register`, data); + } + + /** + * 登陆发送短信验证码 + * @param {object} data + */ + static sendSmsCodeBeforeLogin(data) { + return server.post(`/login/sendSmsCodeBeforeLogin`, data) + } + + /** + * 登陆发送邮箱验证码 + * @param {object} data + */ + static sendEmailCodeBeforeLogin(data) { + return server.post(`/login/sendEmailCodeBeforeLogin`, data); + } + + /** + * 登陆初始化验证 + * @param {object} data + */ + static login(data) { + return server.post(`/user/login`, data); + } + + /** + * 登陆二次验证 + * @param {object} data + */ + static loginConfirm(data,{loading}) { + return server.post(`/user/loginConfirm`, data,{loading}) + } + + /** + * 退出登录 + */ + static logout(data) { + return server.post(`/user/logout`,data); + } + /** + * 上传文件 + * @param {FormData} data + */ + static uploadImage(data) { + + return server.uploadFile(`/uploadImage`,data); + } + + // 页面底部信息 + static floor(){ + return server.get('/floor') + } + // 移动端logo + static mobileLogo(){ + return server.get('/index/logo',{},{loading:false}) + } + // 消息通知 + static myNotifiables(data){ + return server.get('/user/myNotifiables',data) + } + // 消息通知详情 + static readNotifiable(data){ + return server.get('/user/readNotifiable',data) + } + // 移动端文章 + static article(data){ + return server.get('/article/list',data) + } + // 文章详情 + static articleDetail(data){ + return server.get('/article/detail',data) + } + // 获取协议 + static clause(){ + return server.get('/login/clause') + } + // 获取app更新信息 + static getNewestVersion(){ + return server.get('/getNewestVersion') + } + static serviceDetail(data) { + return server.get(`/article/serviceDetail`, data); + } + static contact () { + return server.get(`/contact`); + } + + /** + * 获取图形验证码 + * @param data {email,token} + */ + static Graph_che() { + return server.get(`/register/Graph_che`); + } + // 提币获取邮箱验证码 + static getWdcode(data){ + return server.get(`/user/wdcode`, data); + } +} + +export default Member; diff --git a/api/option.js b/api/option.js new file mode 100644 index 0000000..ddd9587 --- /dev/null +++ b/api/option.js @@ -0,0 +1,119 @@ + +import Serve from '@/api/serve' + +class Option { + // 交易对 + static getOptionSymbol() { + return Serve.get(`/option/getOptionSymbol`); + } + /** + * 获取期权交割记录 + * @param {object} data + * @param {string} data.pair_id + * @param {string} data.time_id + */ + static getSceneResultList(data) { + return Serve.get(`/option/getSceneResultList`, data) + } + /** + * 获取k线数据 + * @param {object} data + * @param {string} data.symbol + * @param {string} data.period + * @param {string} data.size + * @param {string} data.form + * @param {string} data.to + */ + static getKline(data) { + // let url = `https://api.hadax.com/market/history/kline`; + let url = `/option/getKline`; + return Serve.get(url, data) + } + /** + * 获取可用于期权交易的币种列表 + */ + static getBetCoinList() { + return Serve.get(`/option/getBetCoinList`) + } + /** + * 获取指定币种的余额 + * @param {object} data + * @param {string} data.coin_id + */ + static getUserCoinBalance(data) { + return Serve.get(`/option/getUserCoinBalance`, data) + } + /** + * 获取当前最新期权场景 + * @param {object} data + * @param {string} data.pair_id + * @param {string} data.time_id + */ + static sceneDetail(data) { + return Serve.get(`/option/sceneDetail`, data) + } + /** + * 获取全部期权场景 + */ + static sceneListByPairs() { + return Serve.get(`/option/sceneListByPairs`) + } + /** + * 获取当前最新期权场景赔率 + * @param {object} data + * @param {string} data.pair_id + * @param {string} data.time_id + */ + static getOddsList(data) { + return Serve.get(`/option/getOddsList`, data) + } + /** + * 获取用户期权购买记录 + * @param {object} data + * @param {string} data.status + * @param {string} data.pair_id + * @param {string} data.time_id + */ + static getOptionHistoryOrders(data) { + return Serve.get(`/option/getOptionHistoryOrders`, data) + } + /** + * 购买期权 + * @param {object} data + * @param {string} data.bet_amount + * @param {string} data.bet_coin_id + * @param {string} data.odds_id + * */ + static betScene(data) { + return Serve.post(`/option/betScene`, data) + } + /** + * 获取交易价格组 + * @param {object} data + * @param {string} data.symbol + * + */ + static getNewPriceBook(data) { + return Serve.get('/option/getNewPriceBook', data) + } + /** + * 移动端期权列表 + */ + static sceneListByTimes() { + return Serve.get('/option/sceneListByTimes') + } + /** + * 移动端详情 + * @param {object} data + * @param {string} data.order_id + */ + static getOptionOrderDetail(data) { + return Serve.get('/option/getOptionOrderDetail', data) + } + //期权说明 + static instruction() { + return Serve.get('/option/instruction') + } +} + +export default Option; \ No newline at end of file diff --git a/api/order.js b/api/order.js new file mode 100644 index 0000000..c188eed --- /dev/null +++ b/api/order.js @@ -0,0 +1,95 @@ +import Serve from '@/api/serve' +class Order { + /** + * 发布委托 + * @param {object} data + * @param {string} data.direction 方向 + * @param {number} data.type - 类型 + * @param {string} data.symbol - 交易对 + * @param {number} data.entrust_price - 价格 + * @param {number} data.amount - 数量 + * + */ + static storeEntrust(data) { + return Serve.post(`/exchange/storeEntrust`,data); + } + /** + * 获取历史委托 + * @param {object} data + * @param {string} data.direction 方向 + * @param {number} data.type - 类型 + * @param {string} data.symbol - 交易对 + * + */ + static getHistoryEntrust(data) { + return Serve.get(`/exchange/getHistoryEntrust`,data); + } + /** + * 获取当前委托 + * @param {object} data + * @param {string} data.direction 方向 + * @param {number} data.type - 类型 + * @param {string} data.symbol - 交易对 + * + */ + static getCurrentEntrust(data) { + return Serve.get(`/exchange/getCurrentEntrust`,data); + } + + // 获取止盈止损单 + static getConditionEntrust(data) { + return Serve.get(`/exchange/getConditionEntrust`,data); + } + + /** + * 获取委托成交记录 + * @param {object} data + * @param {string} data.entrust_id 委托id + * @param {number} data.entrust_type - 买入卖出 + * @param {string} data.symbol - 交易对 + * + */ + static getEntrustTradeRecord(data) { + return Serve.get(`/exchange/getEntrustTradeRecord`,data); + } + + /** + * 撤单 + * @param {object} data + * @param {string} data.entrust_id 委托id + * @param {number} data.entrust_type - 买入卖出 + * @param {string} data.symbol - 交易对 + * + */ + static cancelEntrust(data) { + return Serve.post(`/exchange/cancelEntrust`,data); + } + /** + * 批量撤单 + * @param {object} data + * @param {string} data.symbol - 交易对 + * + */ + static batchCancelEntrust(data) { + return Serve.post(`/exchange/batchCancelEntrust`,data); + } + // 获取交易对 + static getExchangeSymbol(){ + return Serve.get('/exchange/getExchangeSymbol') + } + /** + * 期权交易记录 + * @param {object} [data] + * @param {string} data.status + * @param {string} data.pair_id + * @param {string} data.time_id + * + */ + static getOptionHistoryOrders(data){ + return Serve.get('/option/getOptionHistoryOrders',data) + } + + +} + +export default Order; \ No newline at end of file diff --git a/api/otc.js b/api/otc.js new file mode 100644 index 0000000..3b93e90 --- /dev/null +++ b/api/otc.js @@ -0,0 +1,69 @@ +import Serve from '@/api/serve/index' +class Otc { + static userPayment(data) { + return Serve.get(`/userPayment`,data,{loading:true}); + } + static editUserPayment(data) { + return Serve.post(`/userPayment/${data.id}`,data,{loading:true}); + } + static getUserPayment(data) { + return Serve.post(`/userPayment/${data.id}`,{},{loading:true}); + } + static addUserPayment(data) { + return Serve.post(`/userPayment`,data,{loading:true}); + } + static otcTicker(){ + return Serve.get(`/otc/otcTicker`,{}); + } + static tradingEntrusts(data){ + return Serve.get(`/otc/tradingEntrusts`,data,{loading:true}) + } + static storeEntrust(data){ + return Serve.post(`/otc/storeEntrust`,data,{loading:true}) + } + static storeOrder(data){ + return Serve.post(`/otc/storeOrder`,data,{loading:true}) + } + static myEntrusts(data){ + return Serve.get(`/otc/myEntrusts`,data,{loading:true}) + } + static myOrders(data){ + return Serve.get(`/otc/myOrders`,data,{loading:true}) + } + static cancelEntrust(data){ + return Serve.post(`/otc/cancelEntrust`,data,{loading:true}) + } + static cancelOrder(data){ + return Serve.post(`/otc/cancelOrder`,data,{loading:true}) + } + static confirmPaidOrder(data){ + return Serve.post(`/otc/confirmPaidOrder`,data,{loading:true}) + } + static confirmOrder(data){ + return Serve.post(`/otc/confirmOrder`,data,{loading:true}) + } + static notConfirmOrder(data){ + return Serve.post(`/otc/notConfirmOrder`,data,{loading:true}) + } + static orderDetail(data){ + return Serve.get(`/otc/orderDetail`,data,{loading:true}) + } + static otcAccount(data){ + return Serve.get(`/otc/otcAccount`,data,{loading:true}) + } + + static legalBuy(data){ + return Serve.post(`/user/legal-buy-sell`,data) + } + static legalPrice(data){ + return Serve.post(`/user/legal-unit-price`,data) + } + static legalList(data){ + return Serve.post(`/user/legal-order-list`,data) + } + static otcWalletLogs(data){ + return Serve.get(`/user/otcWalletLogs`,data) + } +} + +export default Otc; \ No newline at end of file diff --git a/api/profile.js b/api/profile.js new file mode 100644 index 0000000..0684b45 --- /dev/null +++ b/api/profile.js @@ -0,0 +1,81 @@ +import Serve from '@/api/serve/index' +class Profile { + // 获取用户信息 + static getUserInfo() { + return Serve.get(`/user/getUserInfo`); + } + // 获取实名认证信息 + static getAuthInfo() { + return Serve.get(`/user/getAuthInfo`); + } + /** + * 初级认证 (认证第一步) + * @param {object} data + * @param {number} data.country_code + * @param {number} data.country_id // 区号id + * @param {string} data.realname + * @param {number} data.id_card //证件号 + * @param {number} data.type //证件类型 + * @param {string} data.birthday //出生日期 + * @param {string} data.address //地址 + * @param {string} data.city //城市 + * @param {string} data.extra //额外信息 + * @param {string} data.postal_code //邮政编码 + * @param {string} data.phone //手机号 + */ + static primaryAuth(data) { + return Serve.post(`/user/primaryAuth`, data); + } + /** + * 高级认证(认证第二步) + * @param {object} data + * @param {string} data.front_img //证件照正面 + * @param {string} data.back_img //证件照反面 + * @param {string} data.hand_img //手持证件照 + */ + static topAuth(data) { + return Serve.post(`/user/topAuth`, data); + } + + /** + * 登录记录 + */ + static getLoginLogs(data){ + return Serve.get(`/user/getLoginLogs`, data) + } + /** + * 邀请推广 + */ + static generalizeInfo(){ + return Serve.get(`/generalize/info`,) + } + /** + * 推广记录 + */ + static generalizeList(data){ + return Serve.get(`/generalize/list`,data) + } + /** + * 返佣记录 + */ + static rewardLogs(data){ + return Serve.get('/generalize/rewardLogs',data) + } + /** + * 获取用户等级详情 + */ + static getGradeInfo(){ + return Serve.get('/user/getGradeInfo') + } + /** + * 海报图 + */ + static poster(data){ + return Serve.get('/generalize/poster',data) + } + static qrcode(){ + return Serve.get('/generalize/invite_qrcode') + } +} + +export default Profile; \ No newline at end of file diff --git a/api/record.js b/api/record.js new file mode 100644 index 0000000..4139f2e --- /dev/null +++ b/api/record.js @@ -0,0 +1,101 @@ +import {$get,$post,$postFile} from '@/api' + +class Record { + /** + * fundHistory列表 + * @param {Object} data + */ + static fundList(data) { + + return $get(`/coin/getAllList`, data); + + } + + /** + * 币币用户当前委托记录 + * @param {Object} data + */ + static openOrder(data) { + + return $post(`/coin/orders/openOrder`, data); + + } + static conditionOrders(data) { + + return $post(`/coin/orders/condition/openOrder`, data); + + } + + + /** +     * 币币用户取消接口 +     * @param {Object} data  +    */ +   static openOrderCancel(data) { + +       return $post(`/coin/orders/cancel/${data}`); + +  } + + static orderConditionCancel(data) { + return $post(`/coin/orders/condition/cancel/${data}`) + } + + /** +     * 币币用户筛选接口 +     * @param {Object} data  +    */ +   static openOrderfilter() { + +       return $post(`/coin/orders/filter`); + +  } + + + /** + * 用户返佣记录 + * @param {Object} data + */ + static rewardList(data) { + + return $post(`/member/rewardList`, data); + + } + + /** + * 币币用户历史委托 + * @param {Object} data + */ + static history(data) { + + return $post(`/coin/orders/history`, data); + + } + + /** +     * 联系我们 +     * @param {Object} data  +    */ +   static contactUs(data) { +       return $post(`/contactUs/save` , data); +  } + + /** +     * 取消订单 +     * @param {Object} data  +    */ +   static cancelActiveOrder(data) { +       return $get(`/futuresOrders/cancelActiveOrder/${data}`); +  } + + /** +     * 取消订单 +     * @param {Object} data  +    */ +   static cancelById(data) { +       return $get(`/futuresConditionOrders/cancelById/${data}`); +  } + +} + +export default Record; diff --git a/api/resIntercept.js b/api/resIntercept.js new file mode 100644 index 0000000..fed1d0f --- /dev/null +++ b/api/resIntercept.js @@ -0,0 +1,31 @@ +import vue from "vue"; +import router from '@/router' +const resIntercept = (result) => { + let res = result.data + let config = result.config + return new Promise( + function (resolve, reject) { + // 是否提示 + if (typeof config.toast == 'boolean') { + if (config.toast) { + vue.prototype.$toast(res.msg) + } + } else { + if (res.code != 200 && res.code != 100) { + vue.prototype.$toast(res.msg) + } + } + // 过滤 + if (res.code == 200) {//成功 + resolve(res) + } else {//失败 + reject(res) + if (res.code == 100 && !config.notLogin) { + router.push('/InterceptAccount') + } + } + } + ) +} + +export default resIntercept \ No newline at end of file diff --git a/api/serve/index.js b/api/serve/index.js new file mode 100644 index 0000000..89656d4 --- /dev/null +++ b/api/serve/index.js @@ -0,0 +1,330 @@ +import app from "@/app.js" +import Cache from "../cache.js" +let settings = { + method: "get", // 默认请求方法 + contentType: "application/json", // 传参格式 + dataType: "json", // 返回值类型 + baseUrl: app.baseUrl + '/api/app', // 请求根地址 +} + +let loadNum = 0; //加载框的数量 +let loadingShow = () => { + loadNum++ + uni.showLoading({ + title: 'loading...' + }); +} +let loadingHide = () => { + loadNum-- + if (loadNum <= 0) { + uni.hideLoading(); + } +} +function x(options = null) { + + // 返回当前实例对象 无需手动return + return new x.fn.init(options); + +} + +x.fn = x.prototype = { + + constructor: x, + + config(options) { + // 解构并设置默认值 + let { + baseUrl, + url, + data, + method, + contentType, + dataType + } = options; + + // 请求头参数 写入token和language + let auth = null; + if (uni.getStorageSync('token')) { + auth = uni.getStorageSync('token'); + } + + let lang=uni.getStorageSync('language') + const header = auth ? { + 'X-Requested-With': 'XMLHttpRequest', + lang: lang || 'en', + authorization: `bearer ${auth}`, + 'content-type': 'application/x-www-form-urlencoded' + } : { + 'X-Requested-With': 'XMLHttpRequest', + lang: lang || 'en', + 'content-type': 'application/x-www-form-urlencoded' + }; + + this.header = header; + + // 请求地址解析 + if (url.startsWith('http')) { // 外部链接 + this.url = url; + } else { // 本地相对路径 + this.url = baseUrl + url; + } + + if (data) this.data = data; + if (method) this.method = method; + if (contentType) this.contentType = contentType; + if (dataType) this.dataType = dataType; + }, + + init(options) { + // 将用户参数 写入配置信息 + this.config(Object.assign(settings, options)); + let { config = {} } = options + return new Promise((resolve, reject) => { + let reg=new RegExp('/','g')//g代表全部 + let newMsg=options.url.replace(reg,'_'); + // console.info(newMsg) + if(Cache.get(newMsg).data){ + if(newMsg!='_user_walletImage'&& newMsg!='_user_getAuthInfo' && newMsg!='_user_withdrawalBalance' + && newMsg!='_wallet_getBalance' && newMsg!='_contract_getMarketInfo'&& newMsg!='_contract_openNum' + && newMsg!='_user_primaryAuth' && newMsg!='_user_subscribeTokenList' && newMsg!='_article_detail' && newMsg!='_articleList' + && newMsg!='_user_subscribeRecords' && newMsg!='_user_subscribeNow' && newMsg!='_exchange_getMarketInfo' + && newMsg!='_indexList'&& newMsg!='_user_subscribe'&& newMsg!='_contract_getSymbolDetail' && newMsg!='_user_withdrawalRecord'){ + // resolve(Cache.get(newMsg).data);//缓存数据 + + } + uni.request({ + url: this.url, + data: this.data, + method: this.method, + header: this.header, + dataType: this.dataType, + sslVerify: false, + success: (res) => { + // console.info(res) + let message = res.data.message + let code = res.data.code + if (code != 200) { + switch (code) { + case 1003: // 登陆失效 清除状态 重新登陆 + // 清除session + uni.removeStorageSync('token'); + uni.redirectTo({ + url: "/pages/login/index", + }); + break; + case 1021: + resolve(res.data); + break; + case 4001: + resolve(res.data); + break; + default: + reject(message); + break; + } + if (config.toast !== false&&message) { + uni.showToast({ + title: message, + duration: 2000, + icon: 'none' + }); + } + } else { + // console.info(Cache.set(newMsg,res.data)) + Cache.set(newMsg,res.data); + // console.info(res.data) + resolve(res.data); // 直接返回数据 + if (config.toast&&message) { + uni.showToast({ + title: message, + duration: 2000, + icon: 'none' + }); + } + } + }, + fail: (err) => { + console.log(err) + reject(err) + if (config.toast !== false) { + // uni.showToast({ + // title: 'error reload!', + // icon: "none" + // }); + } + if (err) { + throw new Error(); + } + }, + complete: (er) => { + console.log() + reject(er) + } + }) + }else{ + // 提示状态 + if (config.loading) { + loadingShow() + } + uni.request({ + url: this.url, + data: this.data, + method: this.method, + header: this.header, + dataType: this.dataType, + sslVerify: false, + success: (res) => { + let message = res.data.message + let code = res.data.code + if (code != 200) { + switch (code) { + case 1003: // 登陆失效 清除状态 重新登陆 + // 清除session + uni.removeStorageSync('token'); + uni.redirectTo({ + url: "/pages/login/index", + }); + break; + case 1021: + resolve(res.data); + break; + case 4001: + resolve(res.data); + break; + default: + reject(message); + break; + } + if (config.toast !== false&&message) { + uni.showToast({ + title: message, + duration: 2000, + icon: 'none' + }); + } + } else { + Cache.set(newMsg,res.data); + resolve(Cache.get(newMsg).data); // 直接返回数据 + if (config.toast&&message) { + uni.showToast({ + title: message, + duration: 2000, + icon: 'none' + }); + } + } + }, + fail: (err) => { + reject(err) + if (config.toast !== false) { + uni.showToast({ + title: 'error reload!', + icon: "none" + }); + } + if (err) { + throw new Error(); + } + }, + complete: () => { + loadingHide() + } + }) + } + + }) + + }, + + // 使用promise封装同步化的确认框 + confirmSync(content, fullfilled, rejected = null) { + let showCancel = false; + if (rejected instanceof Function) { + showCancel = true; + } + return new Promise(function (resolve, reject) { + uni.showModal({ + content, + showCancel, + success(res) { // confirm or cancel + if (res.confirm) { + resolve(fullfilled()); // 执行动作 需要返回值 则标记到resolve中 + } else if (res.cancel && rejected) { + reject(rejected()); // 执行动作 需要返回值 则标记到reject中 + } + } + }) + }) + }, + + get(url, data = null, config = {}) { + return x({ + method: "get", + url, + data, + config + }) + }, + + post(url, data, config = {}) { + return x({ + method: "post", + url, + data, + config + }) + }, + // data 为uni的chooseImage + uploadFile(url, data, config = {}) { + let auth = null; + if (uni.getStorageSync('token')) { + auth = uni.getStorageSync('token'); + } + let lang=uni.getStorageSync('language') + let header = { + 'X-Requested-With': 'XMLHttpRequest', + lang: lang || "en", + } + if (auth) header.authorization = `bearer ${auth}`; + if (config.loading !== false) { + loadingShow() + } + return new Promise((resolve, reject) => { + uni.uploadFile({ + url: settings.baseUrl + url, //仅为示例,非真实的接口地址 + filePath: data.tempFilePaths[0], + name: 'image', + formData: {}, + sslVerify: false, + header, + success: (res) => { + resolve(JSON.parse(res.data)) + }, + fail: () => { + reject() + }, + complete: () => { + loadingHide() + } + }); + }) + + }, + head() { + + }, + put() { + + }, + // ... +} + +x.fn.init.prototype = x.fn, x.extend = x.fn.extend = function (obj, prop) { + if (!prop) { //如果未设置prop 则表示给this扩展一个对象的内容 + prop = obj; + obj = this; + } + for (var i in prop) obj[i] = prop[i]; +}, x.extend(x.fn); + +export default x; diff --git a/api/serve/market-socket.js b/api/serve/market-socket.js new file mode 100644 index 0000000..47a1708 --- /dev/null +++ b/api/serve/market-socket.js @@ -0,0 +1,200 @@ + +class Ws { + constructor(ws, data, ...args) { // [{url, data, method...},,,,] + this._ws = ws; + this._data = data; + // 待发送的消息列 + this._msgs = [] + + this.socket = this.doLink(); + this.doOpen(); + // 订阅/发布模型 + this._events = {}; + // 是否保持连接 + this._isLink = true; + // 订阅列表(交易所专用) + this.subs = [] + // 循环检查 + setInterval(() => { + if (this._isLink) { + if (this.socket.readyState == 2 || this.socket.readyState == 3) { + this.resetLink() + } + } + }, 3000) + } + // 重连 + resetLink() { + this.socket = this.doLink(() => { + this.Notify({ + Event: 'resetLink' + }); + this.resetSub() + }); + this.doOpen(); + } + // 连接 + doLink(call) { + let ws = uni.connectSocket({ + url: this._ws, + // 可选参数 设置默认值 + header: { + 'content-type': 'application/json' + }, + method: 'GET', + success: () => { + call && call() + } + }) + return ws; + } + doOpen() { + this.socket.onOpen((ev) => { + this.onOpen(ev) + }) + this.socket.onMessage((ev) => { + this.onMessage(ev) + }) + this.socket.onClose((ev) => { + this.onClose(ev) + }) + this.socket.onError((ev) => { + this.onError(ev) + }) + + } + // 打开 + onOpen() { + // 打开时重发未发出的消息 + let list = Object.assign([], this._msgs) + list.forEach((item) => { + if (this.send(item)) { + let idx = this._msgs.indexOf(item) + if (idx != -1) { + this._msgs.splice(idx, 1) + } + } + }) + } + // 手动关闭 + doClose() { + this._isLink = false + this._events = {} + this._msgs = [] + this.socket.close({ + success: () => { + console.log('socket close success') + } + }) + } + // 添加监听 + on(name, handler) { + this.subscribe(name, handler); + } + // 取消监听 + off(name, handler) { + this.unsubscribe(name, handler); + } + // 关闭事件 + onClose() { + // 是否重新连接 + if (this._isLink) { + setTimeout(() => { + this.resetLink() + }, 3000) + } + } + // 错误 + onError(evt) { + this.Notify({ + Event: 'error', + Data: evt + }); + + } + // 接受数据 + onMessage(evt) { + try { + + // 解析推送的数据 + const data = JSON.parse(evt.data); + + // 通知订阅者 + this.Notify({ + Event: 'message', + Data: data + }); + + } catch (err) { + console.error(' >> Data parsing error:', err); + // 通知订阅者 + this.Notify({ + Event: 'error', + Data: err + }); + } + } + // 订阅事件的方法 + subscribe(name, handler) { + if (this._events.hasOwnProperty(name)) { + this._events[name].push(handler); // 追加事件 + } else { + this._events[name] = [handler]; // 添加事件 + } + } + // 取消订阅事件 + unsubscribe(name, handler) { + let start = this._events[name].findIndex(item => item === handler); + // 删除该事件 + this._events[name].splice(start, 1); + } + // 发布后通知订阅者 + Notify(entry) { + // 检查是否有订阅者 返回队列 + const cbQueue = this._events[entry.Event]; + if (cbQueue && cbQueue.length) { + for (let callback of cbQueue) { + if (callback instanceof Function) callback(entry.Data); + } + } + } + // 发送消息 + send(data) { + this.changeSubs(data) + if (this.socket.readyState == 1) { + this.socket.send({ data: JSON.stringify(data) }) + return true + } else { + // 保存到待发送信息 + if (!this._msgs.includes(data)) { + this._msgs.push(data) + }; + return false + } + + } + // 修改订阅列表(交易所用) + changeSubs(data) { + if (data.cmd == 'sub') { + if (!this.subs.includes(data.msg)) { + this.subs.push(data.msg) + } + } else if (data.cmd == 'unsub') { + let idx = this.subs.indexOf(data.msg) + if (idx != -1) { + this.subs.splice(idx, 1) + } + } + } + // 重新订阅(交易所用) + resetSub() { + let list = Object.assign([], this.subs) + list.forEach((item) => { + this.send({ + cmd: 'sub', + msg: item + }) + }) + } +} +export default Ws \ No newline at end of file diff --git a/api/serve/webaxios.js b/api/serve/webaxios.js new file mode 100644 index 0000000..27407ef --- /dev/null +++ b/api/serve/webaxios.js @@ -0,0 +1,62 @@ +import axios from 'axios' +import app from '@/app' +import qs from 'qs'; + +// 初始化配置 +let setting = { + baseURL: app.baseUrl + '/api/app', + timeout: 10000, + withCredentials: true, + crossDomain: true, + responseType: 'json', + headers: { + 'content-type': 'application/x-www-form-urlencoded' + } +} +const server = axios.create(setting) + +// 请求拦截 +server.interceptors.request.use(function (config) { + if (config.method === 'post') { + if (!config.file) { + config.data = qs.stringify(config.data) + } + } + config.headers = Object.assign(config.headers, { + 'X-Requested-With': 'XMLHttpRequest', + + }) + return config; +}, function (error) { + return Promise.reject(error); +}) +// 响应拦截 +server.interceptors.response.use(function (response) { + return response.data; +}, function (error) { + return Promise.reject(error); +}) +export default server; + + +const $get = (url, data, config) => { + return server.get(url, { + params: data, + ...config + }) +} +const $post = (url, data, config) => { + return server.post(url, data, config) +} +const $postFile = (url, data, config) => { + let form = new FormData() + for (let i in data) { + form.append(i, data[i]) + } + let postConfig = { + file: true + } + return server.post(url, form, Object.assign(postConfig, config)) +} +export { $get, $post, $postFile } + diff --git a/api/setting.js b/api/setting.js new file mode 100644 index 0000000..b855c5a --- /dev/null +++ b/api/setting.js @@ -0,0 +1,197 @@ +import Serve from '@/api/serve' +class Setting { + // 获取用户信息 + static getUserInfo() { + return Serve.get(`/user/getUserInfo`); + } + /** + * 修改用户信息 + * @param {{username:string,avatar:'url'}} data + */ + static updateUserInfo(data) { + return Serve.post(`/user/updateUserInfo`, data); + } + /** + * 关闭手机号/邮箱/谷歌验证 + * @param {object} data + * @param {number} data.type 1:手机 2:邮箱 3:谷歌 + * @param {number} data.sms_code 手机验证码 + * @param {number} data.email_code 邮箱验证码 + * @param {number} data.google_code 谷歌验证码 + */ + static disableSmsEmailGoogle(data,{btn}) { + return Serve.post(`/user/disableSmsEmailGoogle`, data,{btn}); + } + /** + * 开启手机号/邮箱/谷歌验证 + * @param {object} data + * @param {number} data.type 1:手机 2:邮箱 3:谷歌 + * @param {number} data.sms_code 手机验证码 + * @param {number} data.email_code 邮箱验证码 + * @param {number} data.google_code 谷歌验证码 + */ + static enableSmsEmailGoogle(data,{btn}) { + return Serve.post(`/user/enableSmsEmailGoogle`, data,{btn}); + } + /** + * 发送邮箱验证码 + * @param {object} data + * @param {string} data.email 邮箱号 + */ + static sendBindEmailCode(data) { + return Serve.post(`/user/sendBindEmailCode`, data); + } + /** + * 登录二次验证开关 + */ + static switchSecondVerify() { + return Serve.get(`/user/switchSecondVerify`); + } + /** + * 账号安全信息 + */ + static accountSecurity() { + return Serve.get(`/user/security/home`); + } + /** + * 设置或重置交易密码 + * @param {object} data + * @param {string} data.payword + * @param {string} data.payword_confirmation + * @param {string} data.sms_code + * @param {string} data.email_code + * @param {string} data.google_code + */ + static setOrResetPaypwd(data) { + return Serve.post(`/user/setOrResetPaypwd`, data); + } + /** + * 设置或重置登录密码 + * @param {object} data + * @param {string} data.password + * @param {string} data.password_confirmation + * @param {string} data.sms_code + * @param {string} data.email_code + * @param {string} data.google_code + */ + static updatePassword(data,{btn}) { + return Serve.post(`/user/updatePassword`, data,{btn}); + } + /** + * 绑定邮箱 + * @param {object} data + * @param {string} data.email + * @param {string} data.email_code + * @param {string} data.sms_code + * @param {string} data.google_code + */ + static bindEmail(data,{btn}) { + return Serve.post(`/user/bindEmail`, data,{btn}); + } + + /** + * 绑定手机 + * @param {object} data + * @param {string} data.phone + * @param {string} data.country_code - 手机区号 + * @param {string} data.sms_code + * @param {string} data.email_code + * @param {string} data.google_code + */ + static bindPhone(data,{btn}) { + return Serve.post(`/user/bindPhone`, data,{btn}); + } + + /** + * 解绑邮箱 + * @param {object} data + * @param {string} data.sms_code + * @param {string} data.email_code + * @param {string} data.google_code + */ + static unbindEmail(data) { + return Serve.post(`/user/unbindEmail`, data); + } + + /** + * 解绑手机 + * @param {object} data + * @param {string} data.sms_code + * @param {string} data.email_code + * @param {string} data.google_code + */ + static unbindPhone(data) { + return Serve.post(`/user/unbindPhone`, data); + } + + /** + * 忘记登录密码 - 账号确认 + * @param {object} data + * @param {string} data.account + */ + static forgetPasswordAttempt(data) { + return Serve.post(`/user/forgetPasswordAttempt`, data,{toast:false}); + } + /** + * 忘记登录密码 - 提交 + * @param {object} data + * @param {string} data.account + * @param {string} data.email_code + * @param {string} data.google_code + * @param {string} data.password + * @param {string} data.password_confirmation + */ + static forgetPassword(data,{btn}) { + return Serve.post(`/user/forgetPassword`, data,{btn}); + } + + /** + * 获取谷歌密钥 + */ + static getGoogleToken(data) { + return Serve.get(`/user/getGoogleToken`, data); + } + /** + * 绑定谷歌 + * @param {object} data + * @param {string} data.google_token + * @param {string} data.google_code + * @param {string} data.sms_code + * @param {string} data.email_code + */ + static bindGoogleToken(data,{btn}) { + return Serve.post(`/user/bindGoogleToken`, data,{btn}); + } + /** + * 解绑谷歌 + * @param {object} data + * @param {string} data.sms_code + * @param {string} data.google_code + * @param {string} data.email_code + */ + static unbindGoogleToken(data) { + return Serve.post(`/user/unbindGoogleToken`, data); + } + /** + * 发送绑定手机短信验证码 + * @param {object} data + * @param {string} data.phone + * @param {string} data.country_code + */ + static sendBindSmsCode(data) { + return Serve.post(`/user/sendBindSmsCode`, data); + } + /** + * 在线获取验证码 + * @param {object} data + * @param {string} data.type 1:手机 2:邮箱 + */ + static getCode(data) { + return Serve.post(`/user/getCode`, data); + } + + + +} + +export default Setting; \ No newline at end of file diff --git a/api/subscride.js b/api/subscride.js new file mode 100644 index 0000000..d4ca0d1 --- /dev/null +++ b/api/subscride.js @@ -0,0 +1,31 @@ + +import Serve from '@/api/serve' + +class Subscribe { + /** + * 请求数据 + */ + static subscribeTokenList(data){ + return Serve.post('/user/subscribeTokenList',data) + } + static activity(data){ + return Serve.get('/subscribe/activity',data) + } + static subscribe(data){ + return Serve.post('/user/subscribe',data) + } + /** + * 提交数据 + * @param {object} data + * @param {string} data.amount + * @param {string} data.coin_name + */ + static subscribeNow(data){ + return Serve.post('/user/subscribeNow',data) + } + static changePurchaseCode(data){ + return Serve.post('/user/changePurchaseCode',data) + } +} + +export default Subscribe; diff --git a/api/wallet.js b/api/wallet.js new file mode 100644 index 0000000..cafbc72 --- /dev/null +++ b/api/wallet.js @@ -0,0 +1,175 @@ + +import Serve from '@/api/serve' + +class Wallet { + + // 提币记录 + static withdrawalRecord() { + return Serve.post(`/user/withdrawalRecord`); + } + // PayPal支付 + static rechargeManualPost(data) { + return Serve.post(`/user/rechargeManualPost`, data); + } + // PayPal账号 + static paypal() { + return Serve.get(`/user/paypal`); + } + // PayPal支付记录 + static rechargeManualLog(data) { + return Serve.post(`/user/rechargeManualLog`,data); + } + // 充值记录 + static depositHistory(data) { + return Serve.post(`/user/depositHistory`,data); + } + + // 钱包划转记录 + static transferRecord() { + return Serve.post(`/user/transferRecord`); + } + // 申购记录 + static subscribeRecords() { + return Serve.post(`/user/subscribeRecords`); + } + // 个人资产管理 + static personalAssets() { + return Serve.post(`/user/personalAssets`); + } + + // 各个币种的资产 + static fundAccount(data) { + return Serve.post(`/user/fundAccount`, data); + } + + // 代币以及对应的余额 + static tokenList(data) { + return Serve.post(`/user/tokenList`, data); + } + + // 资金划转 + static fundsTransfer(data) { + return Serve.post(`/user/appFundsTransfer`, data); + } + + // 生成充值地址 + static walletImage(data) { + return Serve.post(`/user/walletImage`, data); + } + + // 提交充值 + static recharge(data) { + return Serve.post(`/user/recharge`, data); + } + + // 提交提币 + static withdraw(data) { + return Serve.post(`/user/withdraw`, data); + } + + // 提币地址管理 + static getUserWithdrawAdress(data) { + return Serve.post(`/user/withdrawalAddressManagement`, data); + } + + // 编辑提币地址 + static editUserWithdrawAdress (data) { + return Serve.post(`/user/editUserAdress`, data); + } + + // 删除提币地址 + static delUserWithdrawAdress(data) { + return Serve.post(`/user/withdrawalAddressManagement`, data); + } + + // 添加提币地址 + static addUserWithdrawAdress(data) { + return Serve.post(`/`, data); + } + + static withdrawalSelectAddress() { + return Serve.post(`/user/withdrawalSelectAddress`); + } + + static addWithdrawAddress(data) { + return Serve.post(`/user/withdrawalAddressAdd`, data); + } + + + // 查询币种余额 + static withdrawalBalance(data) { + return Serve.post(`/user/withdrawalBalance`, data); + } + + // 修改用户地址 + static withdrawalAddressModify(data) { + return Serve.post(`/user/withdrawalAddressModify`, data); + } + + // 删除币种地址 + static withdrawalAddressDeleted(data) { + return Serve.post(`/user/withdrawalAddressDeleted`, data); + } + // 资金余额 + static appTokenAssets(data){ + return Serve.post(`/user/appTokenAssets`,data) + } + // 指定币种划转记录 + static appTransferRecord(data){ + return Serve.post(`/user/appTransferRecord`,data) + } + // 指定币种提币记录 + static appWithdrawalRecord(data){ + return Serve.post(`/user/appWithdrawalRecord`,data) + } + // 指定币种提币记录 + static appDepositHistory(data){ + return Serve.post(`/user/appDepositHistory`,data) + } + // 指定币种币币记录 + static getWalletLogs(data){ + return Serve.get(`/user/getWalletLogs`,data) + } + // 生成钱包地址 + static createWalletAddress() { + return Serve.post(`/user/createWalletAddress`); + } + // 获取充币地址 + static collectionType(data) { + return Serve.post(`/user/collectionType`, data) + } + // 获取转换列表 + static accounts(data){ + return Serve.get(`/wallet/accounts`, data) + } + // 获取子账户类别 + static accountPairList(data){ + return Serve.get('/wallet/accountPairList',data) + } + // 获取转换币种列表 + static coinList(data){ + return Serve.get('/wallet/coinList',data) + } + // 获取余额 + static getBalance(data){ + return Serve.get('/wallet/getBalance',data) + } + // 资金划转 + static transfer(data){ + return Serve.post('/wallet/transfer',data) + } + // 合约资金列表 + static accountList(data){ + return Serve.get('/contract/accountList',data) + } + // 合约资金流水 + static accountFlow(data){ + return Serve.get('/contract/accountFlow',data) + } + // 合约资金流水 + static cancelWithdraw(data){ + return Serve.post('/user/cancelWithdraw',data,{loading:true}) + } +} + +export default Wallet; \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..4d85246 --- /dev/null +++ b/app.js @@ -0,0 +1,55 @@ + +let config = {}; +if (process.env.NODE_ENV == 'production'||true) { //生产环境 + config = { + // ajax地址 + baseUrl: 'https://seee.moabcoin.com', + // 图片地址 (暂时无用) + imgUrl: 'https://seee.moabcoin.com/storage', + // socket地址 + socketUrl: 'wss://seee.moabcoin.com/ws1', + socketUrl1: 'wss://seee.moabcoin.com/ws2', + // pc端地址 + pcUrl:'https://www.moabcoin.com/', + // app名称 + appName: 'Moabcoin', + // 版本 + version: '1.0.0', + // 移动端地址 + mobile: 'https://app.moabcoin.com/', + down:"https://app.moabcoin.com/download/Moabcoin.html" + }; +} else { //开发环境 + config = { + baseUrl: 'http://qkladmin2.ruanmeng.top', + imgUrl: 'http://qkladmin2.ruanmeng.top/upload', + socketUrl: 'ws://qkladmin2.ruanmeng.top:2346/', + socketUrl1: 'ws://qkladmin2.ruanmeng.top:2348/', + // pc端地址 + pcUrl:'http://qklhome2.ruanmeng.top', + // app名称 + appName: '本地开发', + // 版本 + version: '0.0.0', + // 移动端地址 + mobile: '' + } + // config = { + // // ajax地址 + // baseUrl: 'https://server.7coin.in', + // // 图片地址 (暂时无用) + // imgUrl: 'https://server.7coin.in/upload', + // // socket地址 + // socketUrl: 'wss://server.7coin.in:2346/', + // socketUrl1: 'wss://server.7coin.in:2348/', + // // pc端地址 + // pcUrl:'https://www.7coin.in', + // // app名称 + // appName: '7COIN test', + // // 版本 + // version: '1.0.0', + // // 移动端地址 + // mobile: 'https://h5.7coin.in' + // }; +} +export default config; diff --git a/assets/fontIcon/iconfont.eot b/assets/fontIcon/iconfont.eot new file mode 100644 index 0000000..ca2272c Binary files /dev/null and b/assets/fontIcon/iconfont.eot differ diff --git a/assets/fontIcon/iconfont.svg b/assets/fontIcon/iconfont.svg new file mode 100644 index 0000000..ff43def --- /dev/null +++ b/assets/fontIcon/iconfont.svg @@ -0,0 +1,77 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/fontIcon/iconfont.ttf b/assets/fontIcon/iconfont.ttf new file mode 100644 index 0000000..1f7eb0d Binary files /dev/null and b/assets/fontIcon/iconfont.ttf differ diff --git a/assets/fontIcon/iconfont.woff b/assets/fontIcon/iconfont.woff new file mode 100644 index 0000000..8ebb8d6 Binary files /dev/null and b/assets/fontIcon/iconfont.woff differ diff --git a/assets/fontIcon/iconfont.woff2 b/assets/fontIcon/iconfont.woff2 new file mode 100644 index 0000000..5b23522 Binary files /dev/null and b/assets/fontIcon/iconfont.woff2 differ diff --git a/assets/img/7coin_qidongye.gif b/assets/img/7coin_qidongye.gif new file mode 100644 index 0000000..66df8e3 Binary files /dev/null and b/assets/img/7coin_qidongye.gif differ diff --git a/assets/img/Bitmap3x.png b/assets/img/Bitmap3x.png new file mode 100644 index 0000000..5834509 Binary files /dev/null and b/assets/img/Bitmap3x.png differ diff --git a/assets/img/Fill13x.png b/assets/img/Fill13x.png new file mode 100644 index 0000000..7ff73ce Binary files /dev/null and b/assets/img/Fill13x.png differ diff --git a/assets/img/Upload_File3x.png b/assets/img/Upload_File3x.png new file mode 100644 index 0000000..818adc3 Binary files /dev/null and b/assets/img/Upload_File3x.png differ diff --git a/assets/img/auth_fanmian.png b/assets/img/auth_fanmian.png new file mode 100644 index 0000000..a10a4da Binary files /dev/null and b/assets/img/auth_fanmian.png differ diff --git a/assets/img/auth_shouchi.png b/assets/img/auth_shouchi.png new file mode 100644 index 0000000..fd36b97 Binary files /dev/null and b/assets/img/auth_shouchi.png differ diff --git a/assets/img/auth_zhengmain.png b/assets/img/auth_zhengmain.png new file mode 100644 index 0000000..e082cd8 Binary files /dev/null and b/assets/img/auth_zhengmain.png differ diff --git a/assets/img/border_bottom.png b/assets/img/border_bottom.png new file mode 100644 index 0000000..727a514 Binary files /dev/null and b/assets/img/border_bottom.png differ diff --git a/assets/img/border_bottom_g.png b/assets/img/border_bottom_g.png new file mode 100644 index 0000000..0dc75d7 Binary files /dev/null and b/assets/img/border_bottom_g.png differ diff --git a/assets/img/che.png b/assets/img/che.png new file mode 100644 index 0000000..c578336 Binary files /dev/null and b/assets/img/che.png differ diff --git a/assets/img/fenzu23x.png b/assets/img/fenzu23x.png new file mode 100644 index 0000000..c8ed5c8 Binary files /dev/null and b/assets/img/fenzu23x.png differ diff --git a/assets/img/fenzu_73x.png b/assets/img/fenzu_73x.png new file mode 100644 index 0000000..361c7a4 Binary files /dev/null and b/assets/img/fenzu_73x.png differ diff --git a/assets/img/home/7.png b/assets/img/home/7.png new file mode 100644 index 0000000..7db2644 Binary files /dev/null and b/assets/img/home/7.png differ diff --git a/assets/img/home/8.png b/assets/img/home/8.png new file mode 100644 index 0000000..2c6eb29 Binary files /dev/null and b/assets/img/home/8.png differ diff --git a/assets/img/home/9.png b/assets/img/home/9.png new file mode 100644 index 0000000..5a22cdd Binary files /dev/null and b/assets/img/home/9.png differ diff --git a/assets/img/home/Goldcoin.png b/assets/img/home/Goldcoin.png new file mode 100644 index 0000000..5160f50 Binary files /dev/null and b/assets/img/home/Goldcoin.png differ diff --git a/assets/img/home/Havelogged.png b/assets/img/home/Havelogged.png new file mode 100644 index 0000000..743f650 Binary files /dev/null and b/assets/img/home/Havelogged.png differ diff --git a/assets/img/home/Lendmoney.png b/assets/img/home/Lendmoney.png new file mode 100644 index 0000000..2a9462a Binary files /dev/null and b/assets/img/home/Lendmoney.png differ diff --git a/assets/img/home/Make.png b/assets/img/home/Make.png new file mode 100644 index 0000000..bb944d9 Binary files /dev/null and b/assets/img/home/Make.png differ diff --git a/assets/img/home/aj.png b/assets/img/home/aj.png new file mode 100644 index 0000000..39915ec Binary files /dev/null and b/assets/img/home/aj.png differ diff --git a/assets/img/home/antFill-apple@2x.png b/assets/img/home/antFill-apple@2x.png new file mode 100644 index 0000000..f26e4a8 Binary files /dev/null and b/assets/img/home/antFill-apple@2x.png differ diff --git a/assets/img/home/arrow-right.png b/assets/img/home/arrow-right.png new file mode 100644 index 0000000..94f92a3 Binary files /dev/null and b/assets/img/home/arrow-right.png differ diff --git a/assets/img/home/check.png b/assets/img/home/check.png new file mode 100644 index 0000000..500d4ad Binary files /dev/null and b/assets/img/home/check.png differ diff --git a/assets/img/home/currency.png b/assets/img/home/currency.png new file mode 100644 index 0000000..267a879 Binary files /dev/null and b/assets/img/home/currency.png differ diff --git a/assets/img/home/fas fa-angle-right@3x.png b/assets/img/home/fas fa-angle-right@3x.png new file mode 100644 index 0000000..96707fe Binary files /dev/null and b/assets/img/home/fas fa-angle-right@3x.png differ diff --git a/assets/img/home/history.png b/assets/img/home/history.png new file mode 100644 index 0000000..4ecdd0b Binary files /dev/null and b/assets/img/home/history.png differ diff --git a/assets/img/home/home1.png b/assets/img/home/home1.png new file mode 100644 index 0000000..2ffbf72 Binary files /dev/null and b/assets/img/home/home1.png differ diff --git a/assets/img/home/home10.png b/assets/img/home/home10.png new file mode 100644 index 0000000..35d30d4 Binary files /dev/null and b/assets/img/home/home10.png differ diff --git a/assets/img/home/home2.png b/assets/img/home/home2.png new file mode 100644 index 0000000..5acbc40 Binary files /dev/null and b/assets/img/home/home2.png differ diff --git a/assets/img/home/home3.png b/assets/img/home/home3.png new file mode 100644 index 0000000..6e836ce Binary files /dev/null and b/assets/img/home/home3.png differ diff --git a/assets/img/home/home4.png b/assets/img/home/home4.png new file mode 100644 index 0000000..859a9ad Binary files /dev/null and b/assets/img/home/home4.png differ diff --git a/assets/img/home/home5.png b/assets/img/home/home5.png new file mode 100644 index 0000000..8983481 Binary files /dev/null and b/assets/img/home/home5.png differ diff --git a/assets/img/home/home6.png b/assets/img/home/home6.png new file mode 100644 index 0000000..6dd78dd Binary files /dev/null and b/assets/img/home/home6.png differ diff --git a/assets/img/home/home7.png b/assets/img/home/home7.png new file mode 100644 index 0000000..4d76cfb Binary files /dev/null and b/assets/img/home/home7.png differ diff --git a/assets/img/home/home8.png b/assets/img/home/home8.png new file mode 100644 index 0000000..ee63a25 Binary files /dev/null and b/assets/img/home/home8.png differ diff --git a/assets/img/home/home9.png b/assets/img/home/home9.png new file mode 100644 index 0000000..47d2ac6 Binary files /dev/null and b/assets/img/home/home9.png differ diff --git a/assets/img/home/img1.png b/assets/img/home/img1.png new file mode 100644 index 0000000..520cb01 Binary files /dev/null and b/assets/img/home/img1.png differ diff --git a/assets/img/home/img10.png b/assets/img/home/img10.png new file mode 100644 index 0000000..ac79234 Binary files /dev/null and b/assets/img/home/img10.png differ diff --git a/assets/img/home/img11.png b/assets/img/home/img11.png new file mode 100644 index 0000000..a8f6fb1 Binary files /dev/null and b/assets/img/home/img11.png differ diff --git a/assets/img/home/img12.png b/assets/img/home/img12.png new file mode 100644 index 0000000..8cf931e Binary files /dev/null and b/assets/img/home/img12.png differ diff --git a/assets/img/home/img2.png b/assets/img/home/img2.png new file mode 100644 index 0000000..c61a03e Binary files /dev/null and b/assets/img/home/img2.png differ diff --git a/assets/img/home/img3.png b/assets/img/home/img3.png new file mode 100644 index 0000000..c680a57 Binary files /dev/null and b/assets/img/home/img3.png differ diff --git a/assets/img/home/img4.png b/assets/img/home/img4.png new file mode 100644 index 0000000..0614686 Binary files /dev/null and b/assets/img/home/img4.png differ diff --git a/assets/img/home/img5.png b/assets/img/home/img5.png new file mode 100644 index 0000000..86a31ca Binary files /dev/null and b/assets/img/home/img5.png differ diff --git a/assets/img/home/img6.png b/assets/img/home/img6.png new file mode 100644 index 0000000..82a86b0 Binary files /dev/null and b/assets/img/home/img6.png differ diff --git a/assets/img/home/img7.png b/assets/img/home/img7.png new file mode 100644 index 0000000..585f505 Binary files /dev/null and b/assets/img/home/img7.png differ diff --git a/assets/img/home/img8.png b/assets/img/home/img8.png new file mode 100644 index 0000000..dc1bfcf Binary files /dev/null and b/assets/img/home/img8.png differ diff --git a/assets/img/home/img9.png b/assets/img/home/img9.png new file mode 100644 index 0000000..b56f01c Binary files /dev/null and b/assets/img/home/img9.png differ diff --git a/assets/img/home/login.png b/assets/img/home/login.png new file mode 100644 index 0000000..24fdbe8 Binary files /dev/null and b/assets/img/home/login.png differ diff --git a/assets/img/home/md-android@2x.png b/assets/img/home/md-android@2x.png new file mode 100644 index 0000000..e44b791 Binary files /dev/null and b/assets/img/home/md-android@2x.png differ diff --git a/assets/img/home/radial_bg.png b/assets/img/home/radial_bg.png new file mode 100644 index 0000000..faeea93 Binary files /dev/null and b/assets/img/home/radial_bg.png differ diff --git a/assets/img/home/riFill-google-play-fill@2x.png b/assets/img/home/riFill-google-play-fill@2x.png new file mode 100644 index 0000000..8cbd4e6 Binary files /dev/null and b/assets/img/home/riFill-google-play-fill@2x.png differ diff --git a/assets/img/home/stt.png b/assets/img/home/stt.png new file mode 100644 index 0000000..1153630 Binary files /dev/null and b/assets/img/home/stt.png differ diff --git a/assets/img/home/styy.png b/assets/img/home/styy.png new file mode 100644 index 0000000..774e2c3 Binary files /dev/null and b/assets/img/home/styy.png differ diff --git a/assets/img/home/top.png b/assets/img/home/top.png new file mode 100644 index 0000000..37f2c3c Binary files /dev/null and b/assets/img/home/top.png differ diff --git a/assets/img/home/transfer.png b/assets/img/home/transfer.png new file mode 100644 index 0000000..e845246 Binary files /dev/null and b/assets/img/home/transfer.png differ diff --git a/assets/img/initve.png b/assets/img/initve.png new file mode 100644 index 0000000..3ad6f35 Binary files /dev/null and b/assets/img/initve.png differ diff --git a/assets/img/invite-1.png b/assets/img/invite-1.png new file mode 100644 index 0000000..76152ad Binary files /dev/null and b/assets/img/invite-1.png differ diff --git a/assets/img/invite-2.png b/assets/img/invite-2.png new file mode 100644 index 0000000..ec4a300 Binary files /dev/null and b/assets/img/invite-2.png differ diff --git a/assets/img/invite-3.png b/assets/img/invite-3.png new file mode 100644 index 0000000..757b82f Binary files /dev/null and b/assets/img/invite-3.png differ diff --git a/assets/img/invite-4.png b/assets/img/invite-4.png new file mode 100644 index 0000000..0653bb9 Binary files /dev/null and b/assets/img/invite-4.png differ diff --git a/assets/img/invite-5.png b/assets/img/invite-5.png new file mode 100644 index 0000000..fd89b98 Binary files /dev/null and b/assets/img/invite-5.png differ diff --git a/assets/img/invite-6.png b/assets/img/invite-6.png new file mode 100644 index 0000000..4f21cf3 Binary files /dev/null and b/assets/img/invite-6.png differ diff --git a/assets/img/invite-bg.png b/assets/img/invite-bg.png new file mode 100644 index 0000000..8b20e20 Binary files /dev/null and b/assets/img/invite-bg.png differ diff --git a/assets/img/invite-fy.png b/assets/img/invite-fy.png new file mode 100644 index 0000000..5c1dc9c Binary files /dev/null and b/assets/img/invite-fy.png differ diff --git a/assets/img/invite-sy.png b/assets/img/invite-sy.png new file mode 100644 index 0000000..21c1834 Binary files /dev/null and b/assets/img/invite-sy.png differ diff --git a/assets/img/invite-tg.png b/assets/img/invite-tg.png new file mode 100644 index 0000000..658733d Binary files /dev/null and b/assets/img/invite-tg.png differ diff --git a/assets/img/invite-yq.png b/assets/img/invite-yq.png new file mode 100644 index 0000000..18df6d1 Binary files /dev/null and b/assets/img/invite-yq.png differ diff --git a/assets/img/shengji.png b/assets/img/shengji.png new file mode 100644 index 0000000..ddb77c8 Binary files /dev/null and b/assets/img/shengji.png differ diff --git a/assets/scss/app.scss b/assets/scss/app.scss new file mode 100644 index 0000000..53b139b --- /dev/null +++ b/assets/scss/app.scss @@ -0,0 +1,619 @@ +// 样式重置 +table { + border-collapse: collapse; + + th, + td { + border-color: inherit; + } +} +body{ + font-family: 'Microsoft YaHei'; +} +p { + margin: 0; +} + +input { + background: transparent; + border: none; +} +ul { + padding: 0; + margin: 0; + list-style: none; +} +// 边框 +$dir1: (top t, right r, bottom b, left l); +$dir2: (top left tl, top right tr, bottom right br, bottom left bl); +// 颜色 +$color-list: ( + plain $plain, + dark $black, + light $light, + gray-1 $gray-1, + gray-2 $gray-2, + gray-3 $gray-3, + gray-4 $gray-4, + gray-5 $gray-5, + gray-6 $gray-6, + gray-7 $gray-7, + gray-8 $gray-8, + gray-9 $gray-9, + danger $red, + primary $blue, + warning $orange, + yellows $yellow, + warning-dark $orange-dark, + warning-light $orange-light, + success $green, + buy $buy, + sell $sell, + theme-1 $theme-1, + theme-2 $theme-2, + panel $panel, + panel-1 $panel-1, + panel-2 $panel-2, + panel-3 $panel-3, + panel-4 $panel-4, + panel-5 $panel-5, + panel-6 $panel-6, + form-panel-4 $form-panel-4, + form-panel-3 $form-panel-3, + tab-nav $tab-nav +); +// 颜色(不包含css变量) +$color-list2: ( + dark $black, + gray-1 $gray-1, + gray-2 $gray-2, + gray-3 $gray-3, + gray-4 $gray-4, + gray-5 $gray-5, + gray-6 $gray-6, + gray-7 $gray-7, + gray-8 $gray-8, + gray-9 $gray-9, + danger $red, + primary $blue, + warning $orange, + yellows $yellow, + warning-dark $orange-dark, + warning-light $orange-light, + success $green, + buy $buy, + sell $sell, + theme-1 $theme-1, + theme-2 $theme-2, + panel-5 $panel-5, + panel-6 $panel-6 +); +// 间距 +$pad: ( + base: $padding-base, + xs: $padding-xs, + ms: $padding-ms, + sm: $padding-sm, + md: $padding-md, + lg: $padding-lg, + xl: $padding-xl, +); + +// 公用样式 +.d-flex { + display: flex; +} + +.d-inline-flex { + display: inline-flex; +} + +.d-inline { + display: inline; +} + +.d-inline-block { + display: inline-block; +} + +.d-block { + display: block; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.justify-around { + justify-content: space-around; +} + +.justify-start { + justify-content: flex-start; +} + +.justify-end { + justify-content: flex-end; +} + +.align-center { + align-items: center; +} + +.align-stretch { + align-items: stretch; +} + +.align-start { + align-items: flex-start; +} + +.align-end { + align-items: flex-end; +} + +.flex-fill { + flex: 1; +} + +.flex-col { + flex-direction: column; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.flex-shrink { + flex-shrink: 0; +} + +.float-r { + float: right; +} + +.float-l { + float: left; +} + +.clear { + &::after { + display: block; + content: ""; + clear: both; + } +} + +// 字体尺寸 +.fn-xs { + font-size: $font-size-xs; +} + +.fn-sm { + font-size: $font-size-sm; +} + +.fn-md { + font-size: $font-size-md; +} + +.fn-lg { + font-size: $font-size-lg; +} + +.fn-bold { + font-weight: 600; +} + +.fn-center { + text-align: center; +} + +.fn-left { + text-align: start; +} + +.fn-right { + text-align: end; +} + +.fn-middle { + vertical-align: middle; +} + +.fn-wrap { + white-space: normal; + word-break: break-word; +} + +.fn-nowrap { + white-space: nowrap; +} + +$i: 10; + +@while $i <=40 { + .fn-#{$i} { + font-size: $i + px; + } + + $i: $i + 1; +} + +$i: 1; + +@while $i<=4 { + .eps-#{$i} { + @include eps($i); + } + + $i: $i + 1; +} + +.color-default { + color: $text-color; +} + +@each $item1, $item2 in $color-list { + .color-#{$item1} { + color: $item2; + } + .bg-#{$item1} { + background-color: $item2; + } + .border-#{$item1} { + &::after { + border-color: $item2 !important; + } + } + .border-#{$item1}-original { + border-color: $item2 !important; + } +} +@each $item1, $item2 in $color-list2 { + .bg-#{$item1}-transparent { + background: rgba($item2, 0.1); + } +} + +.border { + // border: 1px solid $border-color; + position: relative; + + &::after { + @include harirline-common(); + border: 1px solid $border-color; + } +} +.bg-gradient-blue { + background: $gradient-blue; +} +.bg-gradient-red { + background: $gradient-red; +} +.bg-gradient-green { + background: $gradient-green; +} + +.border-original { + border: 1.02px solid $border-color; +} + +.border-original-0 { + border-width: 0px; +} + +@each $item1, $item2 in $dir1 { + .border-#{$item2} { + position: relative; + + &::after { + @include harirline-common(); + border-#{$item1}: 1px solid $border-color; + } + } + + .border-#{$item2}-original { + border-#{$item1}: 1.02px solid $border-color; + } + + .border-#{$item2}-0 { + &::after { + border-#{$item1}: 0 !important; + } + } + + .border-#{$item2}-original-0 { + border-#{$item1}: 0 !important; + } +} + +.rounded { + border-radius: $border-radius-md; +} + +.rounded-xs { + border-radius: $border-radius-xs; +} +.rounded-sm { + border-radius: $border-radius-sm; +} + +.rounded-md { + border-radius: $border-radius-md; +} + +.rounded-lg { + border-radius: $border-radius-lg; +} + +.rounded-max { + border-radius: $border-radius-max; +} + +@each $item1, $item2, $item3 in $dir2 { + .rounded-#{$item3}-xs { + border-#{$item1}-#{$item2}-radius: $border-radius-xs; + } + .rounded-#{$item3}-sm { + border-#{$item1}-#{$item2}-radius: $border-radius-sm; + } + + .rounded-#{$item3}-md { + border-#{$item1}-#{$item2}-radius: $border-radius-md; + } + + .rounded-#{$item3}-lg { + border-#{$item1}-#{$item2}-radius: $border-radius-lg; + } + + .rounded-#{$item3}-max { + border-#{$item1}-#{$item2}-radius: $border-radius-max; + } +} + +@each $idx, $var in $pad { + // 外间距 + .m-#{$idx} { + margin: $var !important; + } + + .m-x-#{$idx} { + margin-left: $var !important; + margin-right: $var !important; + } + + .m-y-#{$idx} { + margin-top: $var !important; + margin-bottom: $var !important; + } + + @each $item1, $item2 in $dir1 { + .m-#{$item2}-#{$idx} { + margin-#{$item1}: $var !important; + } + } + + // 内间距 + .p-#{$idx} { + padding: $var !important; + } + + .p-x-#{$idx} { + padding-left: $var !important; + padding-right: $var !important; + } + + .p-y-#{$idx} { + padding-top: $var !important; + padding-bottom: $var !important; + } + + @each $item1, $item2 in $dir1 { + .p-#{$item2}-#{$idx} { + padding-#{$item1}: $var !important; + } + } +} + +.m-x-auto { + margin-left: auto; + margin-right: auto; +} +.m-l-auto { + margin-left: auto; +} +.m-r-auto { + margin-right: auto; +} +.box-size { + box-sizing: border-box; +} + +// 尺寸 +$i: 1; + +@while $i <=100 { + .w-#{$i} { + width: $i + px; + } + .min-w-#{$i} { + min-width: $i + px; + } + .max-w-#{$i} { + max-width: $i + px; + } + + .h-#{$i} { + height: $i + px; + } + .min-h-#{$i} { + min-height: $i + px; + } + .max-h-#{$i} { + max-height: $i + px; + } + + $i: $i + 1; +} + +$i: 1; + +@while $i <=12 { + .w-#{$i}\/#{12} { + width: #{$i/12 * 100}#{"%"}; + } + + .h-#{$i}\/#{12} { + height: #{$i/12 * 100}#{"%"}; + } + + $i: $i + 1; +} + +.w-max { + width: 100%; +} + +.h-max { + height: 100%; +} + +$i: 1; + +@while $i <=4 { + .line-height-#{$i} { + line-height: $i; + } + + $i: $i + 1; +} + +// 公共布局 +.layout-page { + display: flex; + flex-direction: column; + height: 100vh; + background: $bg; +} + +.layout-main { + overflow: auto; + -webkit-overflow-scrolling: touch; + flex: 1; +} + +// 引入字体图标 +@font-face { + font-family: "iconfont"; + src: url("./assets/fontIcon/iconfont.eot?t=1594112878280"); + /* IE9 */ + src: url("./assets/fontIcon/iconfont.eot?t=1594112878280#iefix") format("embedded-opentype"), + /* IE6-IE8 */ url("./assets/fontIcon/iconfont.woff?t=1594112878280") format("woff"), + url("./assets/fontIcon/iconfont.ttf?t=1594112878280") format("truetype"), + /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url("./assets/fontIcon/iconfont.svg?t=1594112878280#iconfont") format("svg"); + /* iOS 4.1- */ +} + +.iconfont { + font-family: "iconfont" !important; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +// 富文本容器 +.edit-content { + img { + max-width: 100%; + height: auto; + } +} + +.overflow-hidden { + overflow: hidden; +} + +.overflow-scroll { + overflow: auto; +} + +// 背景选中 +.link-active { + &:active { + background: $panel-1; + } +} +.color-white{ + color: white; + } +// 拟态投影 panel-4 +.shadow-panel-4 { + box-shadow: var(--mimicry-shadow); +} +.shadow-panel-nei { + box-shadow: var(--nei-shadow); +} +.shadow-panel-nei-5 { + box-shadow: var(--nei-shadow-5); +} + +.box-shadow { + box-shadow: $shadow; +} +.transition-default { + transition: all 0.3s; +} + +navigator { + display: inline-block; +} +// picker +.lb-picker-header { + &::before, + &::after { + border: none !important; + } +} +.lb-picker-header-actions { + background-color: $panel-3; +} +.uni-picker-view-indicator { + &::before, + &::after { + border: none !important; + } +} +.lb-picker-content { + background-color: $panel-4 !important; +} +.uni-picker-view-mask { + background: var(--picker-mask); + background-position: top, bottom; + background-size: 100% 102px; + background-repeat: no-repeat; +} +.lb-picker-action-confirm-text { + color: $green !important; +} + +.app-nav { + height: $status-bar; +} +.padding-nav { + padding-top: $status-bar; +} +.backcor-black{ + background-color: #121212 +} + +.backcor-grey{ + background-color: #242424 +} + +@import "./vant.scss"; diff --git a/assets/scss/base.scss b/assets/scss/base.scss new file mode 100644 index 0000000..85b73a6 --- /dev/null +++ b/assets/scss/base.scss @@ -0,0 +1,3 @@ +@import './theme.scss'; +@import './size.scss'; +@import './mixin.scss'; \ No newline at end of file diff --git a/assets/scss/mixin.scss b/assets/scss/mixin.scss new file mode 100644 index 0000000..f97a77e --- /dev/null +++ b/assets/scss/mixin.scss @@ -0,0 +1,22 @@ +// 边框 +@mixin harirline-common { + position: absolute; + box-sizing: border-box; + display: block; + content: ' '; + pointer-events: none; + border-radius: inherit; + top: -50%; + right: -50%; + bottom: -50%; + left: -50%; + transform: scale(0.5); +} + +// 溢出省略 +@mixin eps($num:1) { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: $num; + overflow: hidden; +} diff --git a/assets/scss/size.scss b/assets/scss/size.scss new file mode 100644 index 0000000..fcf4023 --- /dev/null +++ b/assets/scss/size.scss @@ -0,0 +1,24 @@ +// 字体尺寸 +$font-size-xs: 10px; +$font-size-sm: 12px; +$font-size-md: 14px; +$font-size-lg: 16px; +$font-weight-bold: 500; + +$border-radius-xs: 6px; +$border-radius-sm: 14px; +$border-radius-md: 20px; +$border-radius-lg: 26px; +$border-radius-max: 50%; + +// 间距 +$padding-base: 4px; +$padding-xs: 6px; +$padding-ms: 8px; +$padding-sm: 12px; +$padding-md: 15px; +$padding-lg: 20px; +$padding-xl: 25px; + +// 状态栏高度 +$status-bar: var(--status-bar-height); diff --git a/assets/scss/theme.scss b/assets/scss/theme.scss new file mode 100644 index 0000000..ed8864d --- /dev/null +++ b/assets/scss/theme.scss @@ -0,0 +1,85 @@ +// -------不可修改↓-------- +$black: #000 !default; +$white: #fff !default; +$gray-1: #f7f8fa !default; +$gray-2: #f2f3f5 !default; +$gray-3: #ebedf0 !default; +$gray-4: #dcdee0 !default; +$gray-5: #c8c9cc !default; +$gray-6: #888894 !default; +$gray-7: #646566 !default; +$gray-8: #323233 !default; +$gray-9: #202635 !default; +$red: #ce5b67 !default; +$blue: #1989fa !default; +$orange: #ff976a !default; +$yellow: #f8b936 !default; +$orange-dark: #ed6a0c !default; +$orange-light: #fffbe8 !default; +$green: #60c08c !default; +// 采用字体样式 +// $base-font-family: -apple-system, +// BlinkMacSystemFont, +// "Helvetica Neue", +// Helvetica, +// Segoe UI, +// Arial, +// Roboto, +// "PingFang SC", +// "Hiragino Sans GB", +// "Microsoft Yahei", +// sans-serif; +// $price-integer-font-family: Avenir-Heavy, +// PingFang SC, +// Helvetica Neue, +// Arial, +// sans-serif; +// -------------------- +// ------随便你改↓------- +$plain:var(--plain,#fff); +$theme-1: #ceb359 !default; +$theme-2: #f0c947 !default; +// $theme-1:#ff4d5c !default; +$buy: #60c08c !default; +$sell: #ea3131 !default; +$panel: var(--panel,#36332c) !default; +$panel-1: var(--panel-1,#2A2A38) !default; +$panel-2: var(--panel-2,#343445) !default; +$panel-3: var(--panel-3,#393948) !default; +$panel-4: var(--panel-4,#484859) !default; +$panel-5: #202635 !default; +$panel-6: #646566 !default; +$form-panel-3: var(--form-panel-3,#393948) !default; +$form-panel-4: var(--form-panel-4,#484859) !default; +$text-color: var(--text-color,#9FA6B5) !default; +$active-color: $gray-2 !default; +$active-opacity: 0.7 !default; +$disabled-opacity: 0.5 !default; +$text-link-color: #576b95 !default; +$light:var(--light,#333); + +$bg-top:var(--bg-top,#383847); +$bg-bottom:var(--bg-bottom,#242230); +$bg: linear-gradient(to bottom,$bg-top,$bg-bottom); +$tab-nav:var(--tab-nav,#31313F); + +// 边框 + +$border-color: var(--border-color,#49495F) !default; + +// 阴影 +$shadow:var(--shadow, 0px 0px 33px 0px rgba(34, 34, 44, 0.25)); + +// 渐变 +$gradient-blue:linear-gradient(315deg, #4048EF 0%, #5A7BEF 100%); +$gradient-green:linear-gradient(328deg, #2FAD66 0%, #9DE686 100%); +$gradient-red: linear-gradient(270deg, #F15887 0%, #FE9B86 100%); +$gradient-orange: linear-gradient(to bottom, #ef9b7e 0%, #ea673e 100%); +$gradient-yellow: linear-gradient(to right, #f6c769 0%, #f9ba44 100%); + +// 底部阴影 +$tab-nav-shadow:var(--tab-nav-shadow,0px -7px 20px 0px rgba(37, 37, 48, 0.83)); + +// 按钮颜色 +$bg-buy:#60c08c; +$bg-sell:#ce5b67; diff --git a/assets/scss/vant.scss b/assets/scss/vant.scss new file mode 100644 index 0000000..ba7b54c --- /dev/null +++ b/assets/scss/vant.scss @@ -0,0 +1,226 @@ +:root { + --tabs-nav-background-color: transparent; + --button-plain-background-color: transparent; + --button-primary-background-color: #60c08c; + --button-primary-border-color: #60c08c; + --button-default-background-color: $panel-3; + --tab-text-color:#888894; + --button-default-border-color:#49495F; + --button-default-background-color:transparent; +} + +.van-toast__loading { + color: $theme-1; +} + +// nav-bar +.van-nav-bar__left { + .van-nav-bar__arrow { + color: $text-color; + font-weight: bold; + } +} + +.van-hairline--bottom::after { + border-color: $border-color; +} + +.van-nav-bar__content { + min-height: var(--nav-bar-height, 44px); +} + +.nav-timename{ + .van-tab--active{ + .van-ellipsis{ + font-weight: bold; + font-size: 16px; + } + } + .van-tabs__line { + background-color: transparent; + height: 6px; + &::before { + top: -4px !important; + width: 40px !important; + height: 20px !important; + // background: url(~@/assets/img/border_bottom.png) no-repeat !important; + + } + } + .van-sticky{ + z-index: 1; + .van-tabs__wrap { + border-bottom: 1px solid #f1a68c; + overflow: visible; + } + } +} +.hg { + .van-tabs__line{ + &::before { + background: url(~@/assets/img/border_bottom.png) no-repeat !important; + background-size: 100% 100% !important; + }} + .van-tab--active{ + .van-ellipsis{ + color: #333 !important; + } + } +} +.sun { + .van-tabs__line{ + &::before { + background: url(~@/assets/img/border_bottom_g.png) no-repeat !important; + background-size: 100% 100% !important; + }} + .van-tab--active{ + .van-ellipsis{ + color: #f2f2f2 !important; + } + } +} +.m-t-md .d-inline-block .rounded-lg .van-button{ + box-shadow: 1px 5px 12px -2px #ef9b7e ; +} +.layout-page { + .van-swipe, + .van-tab--active { + // color: var(--nav-tab-active,#fff); + } + + .van-nav-bar__title { + color: $light; + } + + .van-nav-bar { + background-color: transparent; + &.van-hairline--bottom:after { + border-bottom-width: 0; + } + } + + .van-popup { + background-color: $panel-3; + } + .van-popup--left { + background: $bg; + } + .van-field__input { + color: $light; + } + + .van-steps { + background-color: transparent; + } + + .van-stepper__minus, + .van-stepper__plus { + background-color: $panel-3; + color: $light; + } + + .van-stepper__input { + background-color: $panel-3; + color: $light; + } + + .van-count-down { + color: $light; + } + + // search + .van-search { + background-color: transparent !important; + + .van-search__content { + background-color: $panel-4 !important; + border-radius: 20px; + } + } + .van-hairline--bottom:after, + .van-hairline--left:after, + .van-hairline--right:after, + .van-hairline--surround:after, + .van-hairline--top-bottom:after, + .van-hairline--top:after, + .van-hairline:after { + border-color: var(--border-color); + } + .van-tag { + background-color: transparent; + color: $light; + } + .van-tab { + font-size: $font-size-md; + } + .van-tabs__line { + background-color: transparent; + height: 6px; + &::before { + content: ""; + display: block; + position: absolute; + left: 50%; + top: 0; + transform: translateX(-50%); + width: 6px; + height: 6px; + border-radius: 50%; + background-color: var(--nav-tab-active,#fff); + } + } + .van-search__action, + .van-cell { + color: $light; + } + .van-button--default { + .van-button__text { + color: $text-color; + } + &.van-dialog__confirm{ + .van-button__text { + color: $blue; + } + } + } + +} +.vant-toast-index{ + position: relative; + z-index: 99999999; +} +// picker +.van-picker { + background-color: $panel-4; +} + +.van-picker-column__item { + color: $light; +} + +[class*="van-hairline"]::after { + border-color: $border-color; +} + +.van-number-keyboard__keys { + color: $gray-9; +} + +.vant-popup-index { + position: fixed; + z-index: 6; +} + +.default .van-button { + color: $black !important; +} + +.layout-page { + .van-tabs__wrap--scrollable .van-tabs__nav--complete { + padding-left: 0; + padding-right: 0; + } +} +::v-deep .tab-active-class{ + color: $theme-1!important; +} diff --git a/components/README.md b/components/README.md new file mode 100644 index 0000000..ab8e954 --- /dev/null +++ b/components/README.md @@ -0,0 +1,11 @@ +## 引入插件 +`在main.js中添加` + +import dropdown from './components/dropdown/dt-dropDown.vue' +Vue.component('dropdown', dropdown) + + + +## 使用 + + diff --git a/components/bing-progress/bing-progress.css b/components/bing-progress/bing-progress.css new file mode 100644 index 0000000..67ed20b --- /dev/null +++ b/components/bing-progress/bing-progress.css @@ -0,0 +1,70 @@ +.bing-progress { + position: relative; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + align-items: center; + justify-content: space-around; + overflow: hidden; +} +.bp-marea { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + position: absolute; + left: 0; + top: 0; + flex-direction: row; + align-items: center; + text-align: center; + justify-content: space-around; + background-color: rgba(0,0,0,0); + z-index: 6; +} +.bp-mview, +.bp-handle { + position: absolute; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + align-items: center; + text-align: center; + justify-content: center; + z-index: 5; + overflow: hidden; +} +.bp-handle-text { + text-align: center; + z-index: 5; + overflow: hidden; +} +.bp-bar_max { + position: absolute; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + align-items: center; + margin: 0; + padding: 0; + z-index: 1; + overflow: hidden; +} +.bp-bar_active { + position: absolute; + z-index: 3; + overflow: hidden; +} +.bp-bar_sub_active { + position: absolute; + z-index: 2; + overflow: hidden; +} +.bp-value { + position: absolute; + text-align: center; + overflow: hidden; + z-index: 4; +} \ No newline at end of file diff --git a/components/bing-progress/bing-progress.vue b/components/bing-progress/bing-progress.vue new file mode 100644 index 0000000..854fd88 --- /dev/null +++ b/components/bing-progress/bing-progress.vue @@ -0,0 +1,727 @@ + + + + + diff --git a/components/dt-dropdown/dt-dropdown.vue b/components/dt-dropdown/dt-dropdown.vue new file mode 100644 index 0000000..082947e --- /dev/null +++ b/components/dt-dropdown/dt-dropdown.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/components/lb-picker/README.md b/components/lb-picker/README.md new file mode 100644 index 0000000..4d05078 --- /dev/null +++ b/components/lb-picker/README.md @@ -0,0 +1,454 @@ +

+ + + + + + + + + + + + + + + + + + + + + +

+ +插件市场里面的 picker 选择器不满足自己的需求,所以自己写了一个简单的 picker 选择器,可扩展、可自定义,一般满足日常需要。 +Github:[uni-lb-picker](https://github.com/liub1934/uni-lb-picker) +插件市场:[uni-lb-picker](https://ext.dcloud.net.cn/plugin?id=1111) +H5 Demo:[点击预览](https://github.liubing.me/uni-lb-picker) + +> 如果问题最好去 github 反馈,插件市场评论区留下五星好评即可,[点我去反馈](https://github.com/liub1934/uni-lb-picker/issues/new) + +> **由于之前`cancel`拼写失误,写成了`cancle`,`v1.08`现已修正,如果之前版本有使用`cancel`事件的,更新后请及时修正。** + +## 兼容性 + +App + H5 + 各平台小程序(快应用及 360 未测试,nvue 待支持) + +## 功能 + +1、单选 +2、多级联动,非多级联动,理论支持任意级数 +3、省市区选择,基于多级联动 +4、自定义选择器头部确定取消按钮颜色及插槽支持 +5、选择器可视区自定义滚动个数 +6、自定义数据字段,满足不同人的需求 +7、自定义选择器样式 +8、单选及非联动选择支持扁平化的简单数据,如下形式: + +```javascript +// 单选列表 +list1: ['选项1', '选项2', '选项2'], +// 非联动选择列表 +list2: [ + ['选项1', '选项2', '选项3'], + ['选项11', '选项22', '选项33'], + ['选项111', '选项222', '选项333'] +] +``` + +## 引入插件 + +单独引入,在需要使用的页面上 import 引入即可 + +```html + + + +``` + +全局引入,`main.js`中 import 引入并注册即可全局使用 + +```jsvascript +import LbPicker from '@/components/lb-picker' +Vue.component("lb-picker", LbPicker) +``` + +easycom 引入 + +`pages.json`加上如下配置: + +```json +"easycom": { + "autoscan": true, + "custom": { + "lb-picker": "@/components/lb-picker/index.vue" + } +} +``` + +npm 安装引入: + +```shell +npm install uni-lb-picker +``` + +```jsvascript +import LbPicker from 'uni-lb-picker' +``` + +## 选择器数据格式 + +### 单选 + +常规数据 + +```javascript +list: [ + { + label: '选项1', + value: '1' + }, + { + label: '选项2', + value: '2' + } +] +``` + +扁平化简单数据 + +```javascript +list: ['选项1', '选项2'] +``` + +### 多级联动 + +```javascript +list: [ + { + label: '选项1', + value: '1', + children: [ + { + label: '选项1-1', + value: '1-1', + children: [ + { + label: '选项1-1-1', + value: '1-1-1' + } + ] + } + ] + } +] +``` + +### 非联动选择 + +常规数据 + +```javascript +list: [ + [ + { label: '选项1', value: '1' }, + { label: '选项2', value: '2' }, + { label: '选项3', value: '3' } + ], + [ + { label: '选项11', value: '11' }, + { label: '选项22', value: '22' }, + { label: '选项33', value: '33' } + ], + [ + { label: '选项111', value: '111' }, + { label: '选项222', value: '222' }, + { label: '选项333', value: '333' } + ] +] +``` + +扁平化简单数据 + +```javascript +list: [ + ['选项1', '选项2', '选项3'], + ['选项11', '选项22', '选项33'], + ['选项111', '选项222', '选项333'] +] +``` + +## 调用显示选择器 + +通过`ref`形式手动调用`show`方法显示,隐藏同理调用`hide` + +```html + +``` + +```javascript +this.$refs.picker.show() // 显示 +this.$refs.picker.hide() // 隐藏 +``` + +`v1.1.3`新增,将需要点击的元素包裹在`lb-picker`中即可。 + +```html + + + +``` + +## 绑定值及设置默认值 + +支持 vue 中`v-model`写法绑定值,无需自己维护选中值的索引。 + +```javascript + + + +data () { + return { + value1: '' // 单选 + value2: [] // 多列联动选择 + } +} +``` + +## 多个选择器 + +通过设置不同的`ref`,然后调用即可 + +```javascript + + + +this.$refs.picker1.show() // picker1显示 +this.$refs.picker2.show() // picker2显示 +``` + +## 省市区选择 + +省市区选择是基于多列联动选择,数据来源:[https://github.com/modood/Administrative-divisions-of-China](https://github.com/modood/Administrative-divisions-of-China), +省市区文件位于`/pages/demos/area-data-min.js`,自行引入即可,可参考`demo3省市区选择`, +也可使用自己已有的省市区数据,如果数据字段不一样,也可以自定义,参考下方自定义数据字段。 + +## 自定义数据字段 + +为了满足不同人的需求,插件支持自定义数据字段名称, 插件默认的数据字段如下形式: + +```javascript +list: [ + { + label: '选择1', + value: 1, + children: [] + }, + { + label: '选择1', + value: 1, + children: [] + } +] +``` + +如果你的数据字段和上面不一样,如下形式: + +```javascript +list: [ + { + text: '选择1', + id: 1, + child: [] + }, + { + text: '选择1', + id: 1, + child: [] + } +] +``` + +通过设置参数中的`props`即可,如下所示: + +```javascript + + +data () { + return { + myProps: { + label: 'text', + value: 'id', + children: 'child' + } + } +} +``` + +## 插槽使用 + +选择器支持一些可自定义化的插槽,如选择器的取消和确定文字按钮,如果需要对其自定义处理的话,比如加个 icon 图标之类的,可使用插槽,使用方法如下: + +```html + + 我是自定义取消 + 我是自定义确定 + +``` + +也可参考示例中的`demo5`,自定义插槽元素样式交给开发者自由调整,插槽仅提供预留位置。 + +其他插槽见下。 + +## 参数及事件 + +### Props + +| 参数 | 说明 | 类型 | 可选值 | 默认值 | +| :---------------------- | :--------------------------------------------------------------------------------------------------------------------------------- | :------------------ | :--------------------------------------------------------------- | :------------------------------------------------ | +| value/v-model | 绑定值,联动选择为 Array 类型 | String/Number/Array | - | - | +| mode | 选择器类型,支持单列,多列联动 | String | selector 单选/multiSelector 多级联动/unlinkedSelector 多级非联动 | selector | +| list | 选择器数据(v1.0.7 单选及非联动多选支持扁平数据:['选项 1', '选项 2']) | Array | - | - | +| level | 多列联动层级,仅 mode 为 multiSelector 有效 | Number | - | 2 | +| props | 自定义数据字段 | Object | - | {label:'label',value:'value',children:'children'} | +| cancel-text | 取消文字 | String | - | 取消 | +| cancel-color | 取消文字颜色 | String | - | #999 | +| confirm-text | 确定文字 | String | - | 确定 | +| confirm-color | 确定文字颜色 | String | - | #007aff | +| empty-text | (v1.0.7 新增)选择器列表为空的时候显示的文字 | String | - | 暂无数据 | +| empty-color | (v1.0.7 新增)暂无数据文字颜色 | String | - | #999 | +| column-num | 可视滚动区域内滚动个数,最好设置奇数值 | Number | - | 5 | +| radius | 选择器顶部圆角,支持 rpx,如 radius="10rpx" | String | - | - | +| ~~column-style~~ | ~~选择器默认样式(已弃用,见下方自定义样式说明)~~ | Object | - | - | +| ~~active-column-style~~ | ~~选择器选中样式(已弃用,见下方自定义样式说明)~~ | Object | - | - | +| loading | 选择器是否显示加载中,可使用 loading 插槽自定义加载效果 | Boolean | - | - | +| mask-color | 遮罩层颜色 | String | - | rgba(0, 0, 0, 0.4) | +| show-mask | (v1.1.0 新增)是否显示遮罩层 | Boolean | true/false | true | +| close-on-click-mask | 点击遮罩层是否关闭选择器 | Boolean | true/false | true | +| ~~change-on-init~~ | ~~(v1.0.7 已弃用)初始化时是否触发 change 事件~~ | Boolean | true/false | - | +| dataset | (v1.0.7 新增)可以向组件中传递任意的自定义的数据(对象形式数据),如`:dataset="{name:'test'}"`,在`confirm`或`change`事件中可以取到 | Object | - | - | +| show-header | (v1.0.8 新增)是否显示选择器头部 | Boolean | - | true | +| inline | (v1.0.8 新增)inline 模式,开启后默认显示选择器,无需点击弹出,可以配合`show-header`一起使用 | Boolean | - | - | +| z-index | (v1.0.9 新增)选择器层级,遮罩层默认-1 | Number | - | 999 | + +### 方法 + +| 方法名 | 说明 | 参数 | 返回值 | +| :------------- | :------------------------------------- | :-------------- | :----------------------------------------------------------------------------------------------------------- | +| show | 打开选择器 | - | | +| hide | 关闭选择器 | - | | +| getColumnsInfo | (v1.1.0 新增)根据 value 获取选择器信息 | 绑定值的`value` | 同`change` `confirm`回调参数,如果传入的`value`获取不到信息则只返回一个含有`dataset`的对象,具体自行打印查看 | + +### Events + +| 事件名称 | 说明 | 回调参数 | +| :------- | :--------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| show | 选择器打开时触发 | - | +| hide | 选择器隐藏时触发 | - | +| change | 选择器滚动时触发,此时不会改变绑定的值 | `{ index, item, value, change }` `index`触发滚动后新的索引,单选时是具体的索引值,多列联动选择时为数组。`item`触发滚动后新的的完整内容,包括`label`、`value`等,单选时为对象,多列选择时为数组对象。`value`触发滚动后新的 value 值,单列选择时为具体值,多列联动选择时为数组。`change`触发事件的类型,详情参考下面的 change 事件备注 | +| confirm | 点击选择器确定时触发,此时会改变绑定的值 | 同上`change`事件说明 | +| cancel | 点击选择器取消时触发 | 同上`change`事件说明 | + +### `change` 事件备注 + +如果绑定的值是空的,`change`触发后里面的内容都是列表的第一项。 +`change`事件会在以下情况触发: + +- 初始化 +- 绑定值 value 变化 +- 选择器 list 列表变化 +- 滚动选择器 + +以上情况会在回调函数中都可以取到`change`变化的类型,对应上面的情况包括以下: + +- `init` +- `value` +- `list` +- `scroll` + +根据这些类型大家可以在`change`的时候按需处理自己的业务逻辑,`init`现在指挥在调用选择器弹出的时候触发。 +下面的说明情况已失效,如需要在页面显示的时候根据`value`的值显示相应的中文,调用`v1.10`新增的方法`getColumnsInfo`,传入绑定的值即可获取到你想要的所有信息。 +~~比如一种常见的情况,有默认值的时候需要显示默认值的文字,此时可以`change`事件中判断`change`的类型是否是`init`,如果是的话可以取事件回调中的`item`进行显示绑定值对应的文字信息。~~ + +```javascript +handleChange (e) { + if (e.change === 'init') { + console.log(e.item.label) // 单选 选项1 + console.log(e.item.map(item => item.label).join('-')) // 多选 选项1-选项11 + } +} +``` + +### 插槽 + +| 插槽名 | 说明 | +| :------------ | :--------------------- | +| cancel-text | 选择器取消文字插槽 | +| action-center | 选择器顶部中间插槽 | +| confirm-text | 选择器确定文字插槽 | +| loading | 选择器 loading 插槽 | +| empty | 选择器 空数据 插槽 | +| header-top | 选择器头部顶部插槽 | +| header-bottom | 选择器头部底部插槽 | +| picker-top | 选择器滚动部分顶部插槽 | +| picker-bottom | 选择器滚动部分底部插槽 | + +### 选择器自定义样式 + +原先的`column-style`和`active-column-style`已弃用,如需修改默认样式及选中样式参考`demo9` + +```css + +``` + +### 获取选中值的文字 + +`@confirm`事件中可以拿到: + +单选: + +```javascript +handleConfirm (e) { + console.log(e.item.label) // 选项1 +} +``` + +联动选择: + +```javascript +handleConfirm (e) { + console.log(e.item.map(item => item.label).join('-')) // 选项1-选项11 +} +``` + +## Tips + +微信小程序端,滚动时在 iOS 自带振动反馈,可在系统设置 -> 声音与触感 -> 系统触感反馈中关闭 + +## 其他 + +其他功能参考示例 Demo 代码。 diff --git a/components/lb-picker/index.vue b/components/lb-picker/index.vue new file mode 100644 index 0000000..b606755 --- /dev/null +++ b/components/lb-picker/index.vue @@ -0,0 +1,369 @@ + + + + + diff --git a/components/lb-picker/mixins/index.js b/components/lb-picker/mixins/index.js new file mode 100644 index 0000000..de3965d --- /dev/null +++ b/components/lb-picker/mixins/index.js @@ -0,0 +1,46 @@ +import { getColumns } from '../utils' +export const commonMixin = { + data () { + return { + isConfirmChange: false, + indicatorStyle: `height: 34px` + } + }, + created () { + this.init('init') + }, + methods: { + init (changeType) { + if (this.list && this.list.length) { + const column = getColumns({ + value: this.value, + list: this.list, + mode: this.mode, + props: this.props, + level: this.level + }) + const { columns, value, item, index } = column + this.selectValue = value + this.selectItem = item + this.pickerColumns = columns + this.pickerValue = index + this.$emit('change', { + value: this.selectValue, + item: this.selectItem, + index: this.pickerValue, + change: changeType + }) + } + } + }, + watch: { + value () { + if (!this.isConfirmChange) { + this.init('value') + } + }, + list () { + this.init('list') + } + } +} diff --git a/components/lb-picker/pickers/multi-selector-picker.vue b/components/lb-picker/pickers/multi-selector-picker.vue new file mode 100644 index 0000000..24c8b9c --- /dev/null +++ b/components/lb-picker/pickers/multi-selector-picker.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/components/lb-picker/pickers/selector-picker.vue b/components/lb-picker/pickers/selector-picker.vue new file mode 100644 index 0000000..57c32f2 --- /dev/null +++ b/components/lb-picker/pickers/selector-picker.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/components/lb-picker/pickers/unlinked-selector-picker.vue b/components/lb-picker/pickers/unlinked-selector-picker.vue new file mode 100644 index 0000000..1dd1184 --- /dev/null +++ b/components/lb-picker/pickers/unlinked-selector-picker.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/components/lb-picker/style/picker-item.scss b/components/lb-picker/style/picker-item.scss new file mode 100644 index 0000000..fc497d1 --- /dev/null +++ b/components/lb-picker/style/picker-item.scss @@ -0,0 +1,23 @@ +.lb-picker-column { + height: 34px; + /* #ifndef APP-NVUE */ + display: flex; + box-sizing: border-box; + white-space: nowrap; + overflow: hidden; + /* #endif */ + flex-direction: row; + align-items: center; + justify-content: center; +} + +.lb-picker-column-label { + font-size: 16px; + text-align: center; + text-overflow: ellipsis; + transition-property: color; + transition-duration: 0.3s; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} \ No newline at end of file diff --git a/components/lb-picker/style/picker.scss b/components/lb-picker/style/picker.scss new file mode 100644 index 0000000..368b7ac --- /dev/null +++ b/components/lb-picker/style/picker.scss @@ -0,0 +1,179 @@ +.lb-picker { + position: relative; +} + +.lb-picker-mask { + background-color: rgba(0, 0, 0, 0.0); + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; +} + +.lb-picker-mask-animation { + transition-property: background-color; + transition-duration: 0.3s; +} + +.lb-picker-container { + position: relative; +} + +.lb-picker-container-fixed { + position: fixed; + left: 0; + right: 0; + bottom: 0; + transform: translateY(100%); + /* #ifndef APP-PLUS */ + overflow: hidden; + /* #endif */ +} + +.lb-picker-container-animation { + transition-property: transform; + transition-duration: 0.3s; +} + +.lb-picker-container-show { + transform: translateY(0); +} + +.lb-picker-header { + position: relative; + background-color: #fff; + /* #ifdef APP-NVUE */ + border-bottom-width: 1px; + border-bottom-style: solid; + border-bottom-color: #e5e5e5; + border-top-width: 1px; + border-top-style: solid; + border-top-color: #e5e5e5; + /* #endif */ + /* #ifndef APP-NVUE */ + box-sizing: border-box; + /* #endif */ + +} + +.lb-picker-header-actions { + height: 45px; + /* #ifndef APP-NVUE */ + box-sizing: border-box; + display: flex; + /* #endif */ + flex-direction: row; + justify-content: space-between; + flex-wrap: nowrap; +} + +/* #ifndef APP-PLUS */ +.lb-picker-header::before { + content: ""; + position: absolute; + left: 0; + top: 0; + right: 0; + height: 1px; + clear: both; + border-bottom: 1px solid #e5e5e5; + color: #e5e5e5; + transform-origin: 0 100%; + transform: scaleY(0.5); +} + +.lb-picker-header::after { + content: ""; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 1px; + clear: both; + border-bottom: 1px solid #e5e5e5; + color: #e5e5e5; + transform-origin: 0 100%; + transform: scaleY(0.5); +} + +/* #endif */ + +.lb-picker-action { + padding-left: 14px; + padding-right: 14px; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + align-items: center; + justify-content: center; +} + +.lb-picker-action-item { + text-align: center; + height: 45px; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + align-items: center; +} + +.lb-picker-action-cancel-text { + font-size: 16px; + color: #999; +} + +.lb-picker-action-confirm-text { + font-size: 16px; + color: #007aff; +} + +.lb-picker-content { + position: relative; + background-color: #fff; +} + +.lb-picker-content-main { + position: relative; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + justify-content: center; + flex-direction: column; +} + +.lb-picker-loading, +.lb-picker-empty { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + justify-content: center; + align-items: center; +} + +.lb-picker-empty-text { + color: #999; + font-size: 16px; +} + +.lb-picker-loading-img { + width: 25px; + height: 25px; + /* #ifndef APP-NVUE */ + animation: rotating 2s linear infinite; + /* #endif */ +} + +/* #ifndef APP-NVUE */ +@keyframes rotating { + 0% { + transform: rotate(0deg) + } + + to { + transform: rotate(1turn) + } +} + +/* #endif */ \ No newline at end of file diff --git a/components/lb-picker/utils.js b/components/lb-picker/utils.js new file mode 100644 index 0000000..5330d9b --- /dev/null +++ b/components/lb-picker/utils.js @@ -0,0 +1,110 @@ +/** + * 判断是否是对象 + * + * @export + * @param {*} val + * @returns true/false + */ +export function isObject (val) { + return Object.prototype.toString.call(val) === '[object Object]' +} + +/** + * 根据value获取columns信息 + * + * @export + * @param {*} { value, list, mode, props, level } + * @param {number} [type=2] 查询不到value数据返回数据类型 1空值null 2默认第一个选项 + * @returns + */ +export function getColumns ({ value, list, mode, props, level }, type = 2) { + let pickerValue = [] + let pickerColumns = [] + let selectValue = [] + let selectItem = [] + let columnsInfo = null + switch (mode) { + case 'selector': + let index = list.findIndex(item => { + return isObject(item) ? item[props.value] === value : item === value + }) + if (index === -1 && type === 1) { + columnsInfo = null + } else { + index = index > -1 ? index : 0 + selectItem = list[index] + selectValue = isObject(selectItem) + ? selectItem[props.value] + : selectItem + pickerColumns = list + pickerValue = [index] + columnsInfo = { + index: pickerValue, + value: selectValue, + item: selectItem, + columns: pickerColumns + } + } + break + case 'multiSelector': + const setPickerItems = (data = [], index = 0) => { + if (!data.length) return + const defaultValue = value || [] + if (index < level) { + const value = defaultValue[index] || '' + let i = data.findIndex(item => item[props.value] === value) + if (i === -1 && type === 1) return + i = i > -1 ? i : 0 + pickerValue[index] = i + pickerColumns[index] = data + if (data[i]) { + selectValue[index] = data[i][props.value] + selectItem[index] = data[i] + setPickerItems(data[i][props.children] || [], index + 1) + } + } + } + setPickerItems(list) + if (!selectValue.length && type === 1) { + columnsInfo = null + } else { + columnsInfo = { + index: pickerValue, + value: selectValue, + item: selectItem, + columns: pickerColumns + } + } + break + case 'unlinkedSelector': + list.forEach((item, i) => { + let index = item.findIndex(item => { + return isObject(item) + ? item[props.value] === value[i] + : item === value[i] + }) + if (index === -1 && type === 1) return + index = index > -1 ? index : 0 + const columnItem = list[i][index] + const valueItem = isObject(columnItem) + ? columnItem[props.value] + : columnItem + pickerValue[i] = index + selectValue[i] = valueItem + selectItem[i] = columnItem + }) + pickerColumns = list + if (!selectValue.length && type === 1) { + columnsInfo = null + } else { + columnsInfo = { + index: pickerValue, + value: selectValue, + item: selectItem, + columns: pickerColumns + } + } + break + } + return columnsInfo +} diff --git a/components/uni-badge/uni-badge.vue b/components/uni-badge/uni-badge.vue new file mode 100644 index 0000000..dc6f6e6 --- /dev/null +++ b/components/uni-badge/uni-badge.vue @@ -0,0 +1,148 @@ + + + + + \ No newline at end of file diff --git a/components/uni-calendar/calendar.js b/components/uni-calendar/calendar.js new file mode 100644 index 0000000..b8d7d6f --- /dev/null +++ b/components/uni-calendar/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default : + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/components/uni-calendar/uni-calendar-item.vue b/components/uni-calendar/uni-calendar-item.vue new file mode 100644 index 0000000..d633df1 --- /dev/null +++ b/components/uni-calendar/uni-calendar-item.vue @@ -0,0 +1,151 @@ + + + + + \ No newline at end of file diff --git a/components/uni-calendar/uni-calendar.vue b/components/uni-calendar/uni-calendar.vue new file mode 100644 index 0000000..8b81c10 --- /dev/null +++ b/components/uni-calendar/uni-calendar.vue @@ -0,0 +1,431 @@ + + + + + \ No newline at end of file diff --git a/components/uni-calendar/util.js b/components/uni-calendar/util.js new file mode 100644 index 0000000..09b4c6c --- /dev/null +++ b/components/uni-calendar/util.js @@ -0,0 +1,327 @@ +import CALENDAR from './calendar.js' + +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range + } = {}) { + // 当前日期 + this.date = this.getDate(date) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.multipleStatus = { + before: '', + after: '', + data: [] + } + // 每周日期 + this.weeks = {} + + this._getWeek(this.date.fullDate) + } + + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期 + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + lunar: this.getlunar(full.year, full.month - 1, beforeDate), + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let isinfo = false + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + let dateCompBefore = this.dateCompare(this.startDate, fullDate) + disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + } + + if (this.endDate) { + let dateCompAfter = this.dateCompare(fullDate, this.endDate) + disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + } + + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + month: full.month, + lunar: this.getlunar(full.year, full.month, i), + disable: !disableBefore || !disableAfter, + isDay + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + lunar: this.getlunar(full.year, Number(full.month) + 1, i), + disable: true + }) + } + return dateArr + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this._getWeek(date) + } + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + /** + * 计算阴历日期显示 + */ + getlunar(year, month, date) { + return CALENDAR.solar2lunar(year, month, date) + } + /** + * 设置打点 + */ + setSelectInfo(data, value) { + this.selected = value + this._getWeek(data) + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + if (!this.range) return + if (before && after) { + this.multipleStatus.before = '' + this.multipleStatus.after = '' + this.multipleStatus.data = [] + this._getWeek(fullDate) + } else { + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + this._getWeek(fullDate) + } + } + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + fullDate, + year, + month, + date, + day + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} + + +export default Calendar diff --git a/components/uni-card/uni-card.vue b/components/uni-card/uni-card.vue new file mode 100644 index 0000000..ede6eac --- /dev/null +++ b/components/uni-card/uni-card.vue @@ -0,0 +1,403 @@ + + + + + \ No newline at end of file diff --git a/components/uni-collapse-item/uni-collapse-item.vue b/components/uni-collapse-item/uni-collapse-item.vue new file mode 100644 index 0000000..6a04f04 --- /dev/null +++ b/components/uni-collapse-item/uni-collapse-item.vue @@ -0,0 +1,217 @@ + + + + + \ No newline at end of file diff --git a/components/uni-collapse/uni-collapse.vue b/components/uni-collapse/uni-collapse.vue new file mode 100644 index 0000000..b1b8777 --- /dev/null +++ b/components/uni-collapse/uni-collapse.vue @@ -0,0 +1,59 @@ + + + \ No newline at end of file diff --git a/components/uni-combox/uni-combox.vue b/components/uni-combox/uni-combox.vue new file mode 100644 index 0000000..2f80816 --- /dev/null +++ b/components/uni-combox/uni-combox.vue @@ -0,0 +1,212 @@ + + + + + \ No newline at end of file diff --git a/components/uni-countdown/uni-countdown.vue b/components/uni-countdown/uni-countdown.vue new file mode 100644 index 0000000..d4ed8e0 --- /dev/null +++ b/components/uni-countdown/uni-countdown.vue @@ -0,0 +1,200 @@ + + + \ No newline at end of file diff --git a/components/uni-drawer/uni-drawer.vue b/components/uni-drawer/uni-drawer.vue new file mode 100644 index 0000000..f62c329 --- /dev/null +++ b/components/uni-drawer/uni-drawer.vue @@ -0,0 +1,170 @@ + + + + + \ No newline at end of file diff --git a/components/uni-fab/uni-fab.vue b/components/uni-fab/uni-fab.vue new file mode 100644 index 0000000..288803f --- /dev/null +++ b/components/uni-fab/uni-fab.vue @@ -0,0 +1,428 @@ + + + + + \ No newline at end of file diff --git a/components/uni-fav/uni-fav.vue b/components/uni-fav/uni-fav.vue new file mode 100644 index 0000000..4e9ec8b --- /dev/null +++ b/components/uni-fav/uni-fav.vue @@ -0,0 +1,136 @@ + + + + + \ No newline at end of file diff --git a/components/uni-goods-nav/uni-goods-nav.vue b/components/uni-goods-nav/uni-goods-nav.vue new file mode 100644 index 0000000..69e5637 --- /dev/null +++ b/components/uni-goods-nav/uni-goods-nav.vue @@ -0,0 +1,230 @@ + + + + + \ No newline at end of file diff --git a/components/uni-grid-item/uni-grid-item copy.vue b/components/uni-grid-item/uni-grid-item copy.vue new file mode 100644 index 0000000..d9a5703 --- /dev/null +++ b/components/uni-grid-item/uni-grid-item copy.vue @@ -0,0 +1,167 @@ + + + + + \ No newline at end of file diff --git a/components/uni-grid-item/uni-grid-item.vue b/components/uni-grid-item/uni-grid-item.vue new file mode 100644 index 0000000..5ab7063 --- /dev/null +++ b/components/uni-grid-item/uni-grid-item.vue @@ -0,0 +1,125 @@ + + + + + \ No newline at end of file diff --git a/components/uni-grid/uni-grid.vue b/components/uni-grid/uni-grid.vue new file mode 100644 index 0000000..1355b4e --- /dev/null +++ b/components/uni-grid/uni-grid.vue @@ -0,0 +1,142 @@ + + + + + \ No newline at end of file diff --git a/components/uni-icons/icons.js b/components/uni-icons/icons.js new file mode 100644 index 0000000..60b7332 --- /dev/null +++ b/components/uni-icons/icons.js @@ -0,0 +1,132 @@ +export default { + "pulldown": "\ue588", + "refreshempty": "\ue461", + "back": "\ue471", + "forward": "\ue470", + "more": "\ue507", + "more-filled": "\ue537", + "scan": "\ue612", + "qq": "\ue264", + "weibo": "\ue260", + "weixin": "\ue261", + "pengyouquan": "\ue262", + "loop": "\ue565", + "refresh": "\ue407", + "refresh-filled": "\ue437", + "arrowthindown": "\ue585", + "arrowthinleft": "\ue586", + "arrowthinright": "\ue587", + "arrowthinup": "\ue584", + "undo-filled": "\ue7d6", + "undo": "\ue406", + "redo": "\ue405", + "redo-filled": "\ue7d9", + "bars": "\ue563", + "chatboxes": "\ue203", + "camera": "\ue301", + "chatboxes-filled": "\ue233", + "camera-filled": "\ue7ef", + "cart-filled": "\ue7f4", + "cart": "\ue7f5", + "checkbox-filled": "\ue442", + "checkbox": "\ue7fa", + "arrowleft": "\ue582", + "arrowdown": "\ue581", + "arrowright": "\ue583", + "smallcircle-filled": "\ue801", + "arrowup": "\ue580", + "circle": "\ue411", + "eye-filled": "\ue568", + "eye-slash-filled": "\ue822", + "eye-slash": "\ue823", + "eye": "\ue824", + "flag-filled": "\ue825", + "flag": "\ue508", + "gear-filled": "\ue532", + "reload": "\ue462", + "gear": "\ue502", + "hand-thumbsdown-filled": "\ue83b", + "hand-thumbsdown": "\ue83c", + "hand-thumbsup-filled": "\ue83d", + "heart-filled": "\ue83e", + "hand-thumbsup": "\ue83f", + "heart": "\ue840", + "home": "\ue500", + "info": "\ue504", + "home-filled": "\ue530", + "info-filled": "\ue534", + "circle-filled": "\ue441", + "chat-filled": "\ue847", + "chat": "\ue263", + "mail-open-filled": "\ue84d", + "email-filled": "\ue231", + "mail-open": "\ue84e", + "email": "\ue201", + "checkmarkempty": "\ue472", + "list": "\ue562", + "locked-filled": "\ue856", + "locked": "\ue506", + "map-filled": "\ue85c", + "map-pin": "\ue85e", + "map-pin-ellipse": "\ue864", + "map": "\ue364", + "minus-filled": "\ue440", + "mic-filled": "\ue332", + "minus": "\ue410", + "micoff": "\ue360", + "mic": "\ue302", + "clear": "\ue434", + "smallcircle": "\ue868", + "close": "\ue404", + "closeempty": "\ue460", + "paperclip": "\ue567", + "paperplane": "\ue503", + "paperplane-filled": "\ue86e", + "person-filled": "\ue131", + "contact-filled": "\ue130", + "person": "\ue101", + "contact": "\ue100", + "images-filled": "\ue87a", + "phone": "\ue200", + "images": "\ue87b", + "image": "\ue363", + "image-filled": "\ue877", + "location-filled": "\ue333", + "location": "\ue303", + "plus-filled": "\ue439", + "plus": "\ue409", + "plusempty": "\ue468", + "help-filled": "\ue535", + "help": "\ue505", + "navigate-filled": "\ue884", + "navigate": "\ue501", + "mic-slash-filled": "\ue892", + "search": "\ue466", + "settings": "\ue560", + "sound": "\ue590", + "sound-filled": "\ue8a1", + "spinner-cycle": "\ue465", + "download-filled": "\ue8a4", + "personadd-filled": "\ue132", + "videocam-filled": "\ue8af", + "personadd": "\ue102", + "upload": "\ue402", + "upload-filled": "\ue8b1", + "starhalf": "\ue463", + "star-filled": "\ue438", + "star": "\ue408", + "trash": "\ue401", + "phone-filled": "\ue230", + "compose": "\ue400", + "videocam": "\ue300", + "trash-filled": "\ue8dc", + "download": "\ue403", + "chatbubble-filled": "\ue232", + "chatbubble": "\ue202", + "cloud-download": "\ue8e4", + "cloud-upload-filled": "\ue8e5", + "cloud-upload": "\ue8e6", + "cloud-download-filled": "\ue8e9", + "headphones":"\ue8bf", + "shop":"\ue609" +} diff --git a/components/uni-icons/uni-icons.vue b/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..c1f1227 --- /dev/null +++ b/components/uni-icons/uni-icons.vue @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/components/uni-indexed-list/uni-indexed-list-item.vue b/components/uni-indexed-list/uni-indexed-list-item.vue new file mode 100644 index 0000000..b328e4a --- /dev/null +++ b/components/uni-indexed-list/uni-indexed-list-item.vue @@ -0,0 +1,142 @@ + + + + + \ No newline at end of file diff --git a/components/uni-indexed-list/uni-indexed-list.vue b/components/uni-indexed-list/uni-indexed-list.vue new file mode 100644 index 0000000..49c4060 --- /dev/null +++ b/components/uni-indexed-list/uni-indexed-list.vue @@ -0,0 +1,317 @@ + + + \ No newline at end of file diff --git a/components/uni-link/uni-link.vue b/components/uni-link/uni-link.vue new file mode 100644 index 0000000..804b7e5 --- /dev/null +++ b/components/uni-link/uni-link.vue @@ -0,0 +1,72 @@ + + + + + \ No newline at end of file diff --git a/components/uni-list-item/uni-list-item.vue b/components/uni-list-item/uni-list-item.vue new file mode 100644 index 0000000..300d808 --- /dev/null +++ b/components/uni-list-item/uni-list-item.vue @@ -0,0 +1,270 @@ + + + + + \ No newline at end of file diff --git a/components/uni-list/uni-list.vue b/components/uni-list/uni-list.vue new file mode 100644 index 0000000..4f7b030 --- /dev/null +++ b/components/uni-list/uni-list.vue @@ -0,0 +1,78 @@ + + + + \ No newline at end of file diff --git a/components/uni-list/uni-refresh.vue b/components/uni-list/uni-refresh.vue new file mode 100644 index 0000000..8563709 --- /dev/null +++ b/components/uni-list/uni-refresh.vue @@ -0,0 +1,65 @@ + + + + + \ No newline at end of file diff --git a/components/uni-list/uni-refresh.wxs b/components/uni-list/uni-refresh.wxs new file mode 100644 index 0000000..818a6b7 --- /dev/null +++ b/components/uni-list/uni-refresh.wxs @@ -0,0 +1,87 @@ +var pullDown = { + threshold: 95, + maxHeight: 200, + callRefresh: 'onrefresh', + callPullingDown: 'onpullingdown', + refreshSelector: '.uni-refresh' +}; + +function ready(newValue, oldValue, ownerInstance, instance) { + var state = instance.getState() + state.canPullDown = newValue; + // console.log(newValue); +} + +function touchStart(e, instance) { + var state = instance.getState(); + state.refreshInstance = instance.selectComponent(pullDown.refreshSelector); + state.canPullDown = (state.refreshInstance != null && state.refreshInstance != undefined); + if (!state.canPullDown) { + return + } + + // console.log("touchStart"); + + state.height = 0; + state.touchStartY = e.touches[0].pageY || e.changedTouches[0].pageY; + state.refreshInstance.setStyle({ + 'height': 0 + }); + state.refreshInstance.callMethod("onchange", true); +} + +function touchMove(e, ownerInstance) { + var instance = e.instance; + var state = instance.getState(); + if (!state.canPullDown) { + return + } + + var oldHeight = state.height; + var endY = e.touches[0].pageY || e.changedTouches[0].pageY; + var height = endY - state.touchStartY; + if (height > pullDown.maxHeight) { + return; + } + + var refreshInstance = state.refreshInstance; + refreshInstance.setStyle({ + 'height': height + 'px' + }); + + height = height < pullDown.maxHeight ? height : pullDown.maxHeight; + state.height = height; + refreshInstance.callMethod(pullDown.callPullingDown, { + height: height + }); +} + +function touchEnd(e, ownerInstance) { + var state = e.instance.getState(); + if (!state.canPullDown) { + return + } + + state.refreshInstance.callMethod("onchange", false); + + var refreshInstance = state.refreshInstance; + if (state.height > pullDown.threshold) { + refreshInstance.callMethod(pullDown.callRefresh); + return; + } + + refreshInstance.setStyle({ + 'height': 0 + }); +} + +function propObserver(newValue, oldValue, instance) { + pullDown = newValue; +} + +module.exports = { + touchmove: touchMove, + touchstart: touchStart, + touchend: touchEnd, + propObserver: propObserver +} diff --git a/components/uni-load-more/uni-load-more.vue b/components/uni-load-more/uni-load-more.vue new file mode 100644 index 0000000..ac35e5b --- /dev/null +++ b/components/uni-load-more/uni-load-more.vue @@ -0,0 +1,364 @@ + + + + + \ No newline at end of file diff --git a/components/uni-nav-bar/uni-nav-bar.vue b/components/uni-nav-bar/uni-nav-bar.vue new file mode 100644 index 0000000..0d70727 --- /dev/null +++ b/components/uni-nav-bar/uni-nav-bar.vue @@ -0,0 +1,235 @@ + + + + + \ No newline at end of file diff --git a/components/uni-notice-bar/uni-notice-bar.vue b/components/uni-notice-bar/uni-notice-bar.vue new file mode 100644 index 0000000..76d06d9 --- /dev/null +++ b/components/uni-notice-bar/uni-notice-bar.vue @@ -0,0 +1,392 @@ + + + + + \ No newline at end of file diff --git a/components/uni-number-box/uni-number-box.vue b/components/uni-number-box/uni-number-box.vue new file mode 100644 index 0000000..3f3e866 --- /dev/null +++ b/components/uni-number-box/uni-number-box.vue @@ -0,0 +1,197 @@ + + + \ No newline at end of file diff --git a/components/uni-pagination/uni-pagination.vue b/components/uni-pagination/uni-pagination.vue new file mode 100644 index 0000000..e1f2a76 --- /dev/null +++ b/components/uni-pagination/uni-pagination.vue @@ -0,0 +1,200 @@ + + + + + \ No newline at end of file diff --git a/components/uni-popup/message.js b/components/uni-popup/message.js new file mode 100644 index 0000000..6688e84 --- /dev/null +++ b/components/uni-popup/message.js @@ -0,0 +1,29 @@ +export default { + created() { + if (this.type === 'message') { + // 获取自组件对象 + this.maskShow = false + this.children = null + } + }, + created() { + if (this.type === 'message') { + // 不显示遮罩 + this.maskShow = false + // 获取子组件对象 + this.childrenMsg = null + } + }, + methods: { + customOpen() { + if (this.childrenMsg) { + this.childrenMsg.open() + } + }, + customClose() { + if (this.childrenMsg) { + this.childrenMsg.close() + } + } + } +} diff --git a/components/uni-popup/popup.js b/components/uni-popup/popup.js new file mode 100644 index 0000000..2a7f22f --- /dev/null +++ b/components/uni-popup/popup.js @@ -0,0 +1,25 @@ +import message from './message.js'; +// 定义 type 类型:弹出类型:top/bottom/center +const config = { + // 顶部弹出 + top:'top', + // 底部弹出 + bottom:'bottom', + // 居中弹出 + center:'center', + // 消息提示 + message:'top', + // 对话框 + dialog:'center', + // 分享 + share:'bottom', +} + +export default { + data(){ + return { + config:config + } + }, + mixins: [message], +} diff --git a/components/uni-popup/uni-popup-dialog.vue b/components/uni-popup/uni-popup-dialog.vue new file mode 100644 index 0000000..cfca261 --- /dev/null +++ b/components/uni-popup/uni-popup-dialog.vue @@ -0,0 +1,243 @@ + + + + + \ No newline at end of file diff --git a/components/uni-popup/uni-popup-message.vue b/components/uni-popup/uni-popup-message.vue new file mode 100644 index 0000000..7f0f7c5 --- /dev/null +++ b/components/uni-popup/uni-popup-message.vue @@ -0,0 +1,116 @@ + + + + \ No newline at end of file diff --git a/components/uni-popup/uni-popup-share.vue b/components/uni-popup/uni-popup-share.vue new file mode 100644 index 0000000..dce13d5 --- /dev/null +++ b/components/uni-popup/uni-popup-share.vue @@ -0,0 +1,168 @@ + + + + \ No newline at end of file diff --git a/components/uni-popup/uni-popup.vue b/components/uni-popup/uni-popup.vue new file mode 100644 index 0000000..91c98fc --- /dev/null +++ b/components/uni-popup/uni-popup.vue @@ -0,0 +1,293 @@ + + + + \ No newline at end of file diff --git a/components/uni-rate/uni-rate.vue b/components/uni-rate/uni-rate.vue new file mode 100644 index 0000000..a9ddd68 --- /dev/null +++ b/components/uni-rate/uni-rate.vue @@ -0,0 +1,157 @@ + + + + + \ No newline at end of file diff --git a/components/uni-search-bar/uni-search-bar.vue b/components/uni-search-bar/uni-search-bar.vue new file mode 100644 index 0000000..2a9bff8 --- /dev/null +++ b/components/uni-search-bar/uni-search-bar.vue @@ -0,0 +1,203 @@ + + + + + \ No newline at end of file diff --git a/components/uni-section/uni-section.vue b/components/uni-section/uni-section.vue new file mode 100644 index 0000000..1ba75cc --- /dev/null +++ b/components/uni-section/uni-section.vue @@ -0,0 +1,137 @@ + + + + \ No newline at end of file diff --git a/components/uni-segmented-control/uni-segmented-control.vue b/components/uni-segmented-control/uni-segmented-control.vue new file mode 100644 index 0000000..a10f069 --- /dev/null +++ b/components/uni-segmented-control/uni-segmented-control.vue @@ -0,0 +1,133 @@ + + + + + \ No newline at end of file diff --git a/components/uni-status-bar/uni-status-bar.vue b/components/uni-status-bar/uni-status-bar.vue new file mode 100644 index 0000000..693faa4 --- /dev/null +++ b/components/uni-status-bar/uni-status-bar.vue @@ -0,0 +1,26 @@ + + + + + \ No newline at end of file diff --git a/components/uni-steps/uni-steps.vue b/components/uni-steps/uni-steps.vue new file mode 100644 index 0000000..1978e95 --- /dev/null +++ b/components/uni-steps/uni-steps.vue @@ -0,0 +1,253 @@ + + + + + \ No newline at end of file diff --git a/components/uni-swipe-action-item/bindingx.js b/components/uni-swipe-action-item/bindingx.js new file mode 100644 index 0000000..50b9241 --- /dev/null +++ b/components/uni-swipe-action-item/bindingx.js @@ -0,0 +1,245 @@ +const BindingX = uni.requireNativePlugin('bindingx'); +const dom = uni.requireNativePlugin('dom'); +const animation = uni.requireNativePlugin('animation'); + +export default { + data() { + return { + right: 0, + button: [], + preventGesture: false + } + }, + + watch: { + show(newVal) { + if (!this.position || JSON.stringify(this.position) === '{}') return; + if (this.autoClose) return + if (this.isInAnimation) return + if (newVal) { + this.open() + } else { + this.close() + } + }, + }, + created() { + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.boxSelector = this.getEl(this.$refs['selector-box-hock']); + this.selector = this.getEl(this.$refs['selector-content-hock']); + this.buttonSelector = this.getEl(this.$refs['selector-button-hock']); + this.position = {} + this.x = 0 + setTimeout(() => { + this.getSelectorQuery() + }, 200) + }, + beforeDestroy() { + if (this.timing) { + BindingX.unbind({ + token: this.timing.token, + eventType: 'timing' + }) + } + if (this.eventpan) { + BindingX.unbind({ + token: this.eventpan.token, + eventType: 'pan' + }) + } + this.swipeaction.children.forEach((item, index) => { + if (item === this) { + this.swipeaction.children.splice(index, 1) + } + }) + }, + methods: { + onClick(index, item) { + this.$emit('click', { + content: item, + index + }) + }, + touchstart(e) { + if (this.isInAnimation) return + if (this.stop) return + this.stop = true + if (this.autoClose) { + this.swipeaction.closeOther(this) + } + let endWidth = this.right + let boxStep = `(x+${this.x})` + let pageX = `${boxStep}> ${-endWidth} && ${boxStep} < 0?${boxStep}:(x+${this.x} < 0? ${-endWidth}:0)` + + let props = [{ + element: this.selector, + property: 'transform.translateX', + expression: pageX + }] + + let left = 0 + for (let i = 0; i < this.options.length; i++) { + let buttonSelectors = this.getEl(this.$refs['button-hock'][i]); + if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return + let moveMix = endWidth - left + left += this.button[i].width + let step = `(${this.x}+x)/${endWidth}` + let moveX = `(${step}) * ${moveMix}` + let pageButtonX = `${moveX}&& (x+${this.x} > ${-endWidth})?${moveX}:${-moveMix}` + props.push({ + element: buttonSelectors, + property: 'transform.translateX', + expression: pageButtonX + }) + } + + this.eventpan = this._bind(this.boxSelector, props, 'pan', (e) => { + if (e.state === 'end') { + this.x = e.deltaX + this.x; + if (this.x < -endWidth) { + this.x = -endWidth + } + if (this.x > 0) { + this.x = 0 + } + this.stop = false + this.bindTiming(); + } + }) + }, + touchend(e) { + this.$nextTick(() => { + if (this.isopen && !this.isDrag && !this.isInAnimation) { + this.close() + } + }) + }, + bindTiming() { + if (this.isopen) { + this.move(this.x, -this.right) + } else { + this.move(this.x, -40) + } + }, + move(left, value) { + if (left >= value) { + this.close() + } else { + this.open() + } + }, + /** + * 开启swipe + */ + open() { + this.animation(true) + }, + /** + * 关闭swipe + */ + close() { + this.animation(false) + }, + /** + * 开启关闭动画 + * @param {Object} type + */ + animation(type) { + this.isDrag = true + let endWidth = this.right + let time = 200 + this.isInAnimation = true; + + let exit = `t>${time}`; + let translate_x_expression = `easeOutExpo(t,${this.x},${type?(-endWidth-this.x):(-this.x)},${time})` + let props = [{ + element: this.selector, + property: 'transform.translateX', + expression: translate_x_expression + }] + + let left = 0 + for (let i = 0; i < this.options.length; i++) { + let buttonSelectors = this.getEl(this.$refs['button-hock'][i]); + if (this.button.length === 0 || !this.button[i] || !this.button[i].width) return + let moveMix = endWidth - left + left += this.button[i].width + let step = `${this.x}/${endWidth}` + let moveX = `(${step}) * ${moveMix}` + let pageButtonX = `easeOutExpo(t,${moveX},${type ? -moveMix + '-' + moveX: 0 + '-' + moveX},${time})` + props.push({ + element: buttonSelectors, + property: 'transform.translateX', + expression: pageButtonX + }) + } + + this.timing = BindingX.bind({ + eventType: 'timing', + exitExpression: exit, + props: props + }, (e) => { + if (e.state === 'end' || e.state === 'exit') { + this.x = type ? -endWidth : 0 + this.isInAnimation = false; + + this.isopen = this.isopen || false + if (this.isopen !== type) { + this.$emit('change', type) + } + this.isopen = type + this.isDrag = false + } + }); + }, + /** + * 绑定 BindingX + * @param {Object} anchor + * @param {Object} props + * @param {Object} fn + */ + _bind(anchor, props, eventType, fn) { + return BindingX.bind({ + anchor, + eventType, + props + }, (e) => { + typeof(fn) === 'function' && fn(e) + }); + }, + /** + * 获取ref + * @param {Object} el + */ + getEl(el) { + return el.ref + }, + /** + * 获取节点信息 + */ + getSelectorQuery() { + dom.getComponentRect(this.$refs['selector-content-hock'], (data) => { + if (this.position.content) return + this.position.content = data.size + }) + for (let i = 0; i < this.options.length; i++) { + dom.getComponentRect(this.$refs['button-hock'][i], (data) => { + if (!this.button) { + this.button = [] + } + if (this.options.length === this.button.length) return + this.button.push(data.size) + this.right += data.size.width + if (this.autoClose) return + if (this.show) { + this.open() + } + }) + } + } + } +} diff --git a/components/uni-swipe-action-item/index.wxs b/components/uni-swipe-action-item/index.wxs new file mode 100644 index 0000000..24c94bb --- /dev/null +++ b/components/uni-swipe-action-item/index.wxs @@ -0,0 +1,204 @@ +/** + * 监听页面内值的变化,主要用于动态开关swipe-action + * @param {Object} newValue + * @param {Object} oldValue + * @param {Object} ownerInstance + * @param {Object} instance + */ +function sizeReady(newValue, oldValue, ownerInstance, instance) { + var state = instance.getState() + state.position = JSON.parse(newValue) + if (!state.position || state.position.length === 0) return + var show = state.position[0].show + state.left = state.left || state.position[0].left; + // 通过用户变量,开启或关闭 + if (show) { + openState(true, instance, ownerInstance) + } else { + openState(false, instance, ownerInstance) + } +} + +/** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ +function touchstart(e, ins) { + var instance = e.instance; + var state = instance.getState(); + var pageX = e.touches[0].pageX; + // 开始触摸时移除动画类 + instance.removeClass('ani'); + var owner = ins.selectAllComponents('.button-hock') + for (var i = 0; i < owner.length; i++) { + owner[i].removeClass('ani'); + } + // state.position = JSON.parse(instance.getDataset().position); + state.left = state.left || state.position[0].left; + // 获取最终按钮组的宽度 + state.width = pageX - state.left; + ins.callMethod('closeSwipe') +} + +/** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchmove(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + + if (disabled) return + var pageX = e.touches[0].pageX; + move(pageX - state.width, instance, ownerInstance) +} + +/** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchend(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + moveDirection(state.left, -40, instance, ownerInstance) +} + +/** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ +function move(value, instance, ownerInstance) { + var state = instance.getState() + // 获取可滑动范围 + var x = Math.max(-state.position[1].width, Math.min((value), 0)); + state.left = x; + instance.setStyle({ + transform: 'translateX(' + x + 'px)', + '-webkit-transform': 'translateX(' + x + 'px)' + }) + // 折叠按钮动画 + buttonFold(x, instance, ownerInstance) +} + +/** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ +function moveDirection(left, value, ins, ownerInstance) { + var state = ins.getState() + var position = state.position + var isopen = state.isopen + if (!position[1].width) { + openState(false, ins, ownerInstance) + return + } + // 如果已经是打开状态,进行判断是否关闭,还是保留打开状态 + if (isopen) { + if (-left <= position[1].width) { + openState(false, ins, ownerInstance) + } else { + openState(true, ins, ownerInstance) + } + return + } + // 如果是关闭状态,进行判断是否打开,还是保留关闭状态 + if (left <= value) { + openState(true, ins, ownerInstance) + } else { + openState(false, ins, ownerInstance) + } +} + +/** + * 设置按钮移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ +function buttonFold(value, instance, ownerInstance) { + var ins = ownerInstance.selectAllComponents('.button-hock'); + var state = instance.getState(); + var position = state.position; + var arr = []; + var w = 0; + for (var i = 0; i < ins.length; i++) { + if (!ins[i].getDataset().button) return + var btnData = JSON.parse(ins[i].getDataset().button) + + // fix by mehaotian TODO 在 app-vue 中,字符串转对象,需要转两次,这里先这么兼容 + if (typeof(btnData) === 'string') { + btnData = JSON.parse(btnData) + } + + var button = btnData[i] && btnData[i].width || 0 + w += button + arr.push(-w) + // 动态计算按钮组每个按钮的折叠动画移动距离 + var distance = arr[i - 1] + value * (arr[i - 1] / position[1].width) + if (i != 0) { + ins[i].setStyle({ + transform: 'translateX(' + distance + 'px)', + }) + } + } +} + +/** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ +function openState(type, ins, ownerInstance) { + var state = ins.getState() + var position = state.position + if (state.isopen === undefined) { + state.isopen = false + } + // 只有状态有改变才会通知页面改变状态 + if (state.isopen !== type) { + // 通知页面,已经打开 + ownerInstance.callMethod('change', { + open: type + }) + } + // 设置打开和移动状态 + state.isopen = type + + + // 添加动画类 + ins.addClass('ani'); + var owner = ownerInstance.selectAllComponents('.button-hock') + for (var i = 0; i < owner.length; i++) { + owner[i].addClass('ani'); + } + // 设置最终移动位置 + move(type ? -position[1].width : 0, ins, ownerInstance) + +} + +module.exports = { + sizeReady: sizeReady, + touchstart: touchstart, + touchmove: touchmove, + touchend: touchend +} diff --git a/components/uni-swipe-action-item/mpalipay.js b/components/uni-swipe-action-item/mpalipay.js new file mode 100644 index 0000000..2b494a4 --- /dev/null +++ b/components/uni-swipe-action-item/mpalipay.js @@ -0,0 +1,160 @@ +export default { + data() { + return { + isshow: false, + viewWidth: 0, + buttonWidth: 0, + disabledView: false, + x: 0, + transition: false + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + if (newVal) { + this.open() + } else { + this.close() + } + }, + }, + created() { + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + beforeDestroy() { + this.swipeaction.children.forEach((item, index) => { + if (item === this) { + this.swipeaction.children.splice(index, 1) + } + }) + }, + mounted() { + this.isopen = false + this.transition = true + setTimeout(() => { + this.getQuerySelect() + }, 50) + + }, + methods: { + onClick(index, item) { + this.$emit('click', { + content: item, + index + }) + }, + touchstart(e) { + let { + pageX, + pageY + } = e.changedTouches[0] + this.transition = false + this.startX = pageX + if (this.autoClose) { + this.swipeaction.closeOther(this) + } + }, + touchmove(e) { + let { + pageX, + } = e.changedTouches[0] + this.slide = this.getSlide(pageX) + if (this.slide === 0) { + this.disabledView = false + } + + }, + touchend(e) { + this.stop = false + this.transition = true + if (this.isopen) { + if (this.moveX === -this.buttonWidth) { + this.close() + return + } + this.move() + } else { + if (this.moveX === 0) { + this.close() + return + } + this.move() + } + }, + open() { + this.x = this.moveX + this.$nextTick(() => { + this.x = -this.buttonWidth + this.moveX = this.x + + if(!this.isopen){ + this.isopen = true + this.$emit('change', true) + } + }) + }, + close() { + this.x = this.moveX + this.$nextTick(() => { + this.x = 0 + this.moveX = this.x + if(this.isopen){ + this.isopen = false + this.$emit('change', false) + } + }) + }, + move() { + if (this.slide === 0) { + this.open() + } else { + this.close() + } + }, + onChange(e) { + let x = e.detail.x + this.moveX = x + if (x >= this.buttonWidth) { + this.disabledView = true + this.$nextTick(() => { + this.x = this.buttonWidth + }) + } + }, + getSlide(x) { + if (x >= this.startX) { + this.startX = x + return 1 + } else { + this.startX = x + return 0 + } + + }, + getQuerySelect() { + const query = uni.createSelectorQuery().in(this); + query.selectAll('.viewWidth-hook').boundingClientRect(data => { + + this.viewWidth = data[0].width + this.buttonWidth = data[1].width + this.transition = false + this.$nextTick(() => { + this.transition = true + }) + + if (!this.buttonWidth) { + this.disabledView = true + } + + if (this.autoClose) return + if (this.show) { + this.open() + } + }).exec(); + + } + } +} diff --git a/components/uni-swipe-action-item/mpother.js b/components/uni-swipe-action-item/mpother.js new file mode 100644 index 0000000..cd0fa1d --- /dev/null +++ b/components/uni-swipe-action-item/mpother.js @@ -0,0 +1,158 @@ +// #ifdef APP-NVUE +const dom = weex.requireModule('dom'); +// #endif +export default { + data() { + return { + uniShow: false, + left: 0 + } + }, + computed: { + moveLeft() { + return `translateX(${this.left}px)` + } + }, + watch: { + show(newVal) { + if (!this.position || JSON.stringify(this.position) === '{}') return; + if (this.autoClose) return + if (newVal) { + this.$emit('change', true) + this.open() + } else { + this.$emit('change', false) + this.close() + } + } + }, + mounted() { + this.position = {} + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + setTimeout(() => { + this.getSelectorQuery() + }, 100) + }, + beforeDestoy() { + this.swipeaction.children.forEach((item, index) => { + if (item === this) { + this.swipeaction.children.splice(index, 1) + } + }) + }, + methods: { + onClick(index, item) { + this.$emit('click', { + content: item, + index + }) + this.close() + }, + touchstart(e) { + const { + pageX + } = e.touches[0] + if (this.disabled) return + const left = this.position.content.left + if (this.autoClose) { + this.swipeaction.closeOther(this) + } + this.width = pageX - left + if (this.isopen) return + if (this.uniShow) { + this.uniShow = false + this.isopen = true + this.openleft = this.left + this.position.button.width + } + }, + touchmove(e, index) { + if (this.disabled) return + const { + pageX + } = e.touches[0] + this.setPosition(pageX) + }, + touchend() { + if (this.disabled) return + if (this.isopen) { + this.move(this.openleft, 0) + return + } + this.move(this.left, -40) + }, + setPosition(x, y) { + if (!this.position.button.width) { + return + } + // this.left = x - this.width + this.setValue(x - this.width) + }, + setValue(value) { + // 设置最大最小值 + this.left = Math.max(-this.position.button.width, Math.min(parseInt(value), 0)) + this.position.content.left = this.left + if (this.isopen) { + this.openleft = this.left + this.position.button.width + } + }, + move(left, value) { + if (left >= value) { + this.$emit('change', false) + this.close() + } else { + this.$emit('change', true) + this.open() + } + }, + open() { + this.uniShow = true + this.left = -this.position.button.width + this.setValue(-this.position.button.width) + }, + close() { + this.uniShow = true + this.setValue(0) + setTimeout(() => { + this.uniShow = false + this.isopen = false + }, 300) + }, + getSelectorQuery() { + // #ifndef APP-NVUE + const views = uni.createSelectorQuery().in(this); + views + .selectAll('.selector-query-hock') + .boundingClientRect(data => { + // console.log(data) + this.position.content = data[1] + this.position.button = data[0] + if (this.autoClose) return + if (this.show) { + this.open() + } else { + this.close() + } + }) + .exec() + // #endif + // #ifdef APP-NVUE + dom.getComponentRect(this.$refs['selector-content-hock'], (data) => { + if (this.position.content) return + this.position.content = data.size + }) + dom.getComponentRect(this.$refs['selector-button-hock'], (data) => { + if (this.position.button) return + this.position.button = data.size + if (this.autoClose) return + if (this.show) { + this.open() + } else { + this.close() + } + }) + // #endif + } + } +} diff --git a/components/uni-swipe-action-item/mpwxs.js b/components/uni-swipe-action-item/mpwxs.js new file mode 100644 index 0000000..88c3ec2 --- /dev/null +++ b/components/uni-swipe-action-item/mpwxs.js @@ -0,0 +1,118 @@ +export default { + data() { + return { + position: [], + button: [] + } + }, + computed: { + pos() { + return JSON.stringify(this.position) + }, + btn() { + return JSON.stringify(this.button) + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + let valueObj = this.position[0] + if (!valueObj) { + this.init() + return + } + valueObj.show = newVal + this.$set(this.position, 0, valueObj) + } + }, + created() { + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.init() + + }, + beforeDestroy() { + this.swipeaction.children.forEach((item, index) => { + if (item === this) { + this.swipeaction.children.splice(index, 1) + } + }) + }, + methods: { + init() { + + setTimeout(() => { + this.getSize() + this.getButtonSize() + }, 50) + }, + closeSwipe(e) { + if (!this.autoClose) return + this.swipeaction.closeOther(this) + }, + + change(e) { + this.$emit('change', e.open) + let valueObj = this.position[0] + if (valueObj.show !== e.open) { + valueObj.show = e.open + this.$set(this.position, 0, valueObj) + } + }, + onClick(index, item) { + this.$emit('click', { + content: item, + index + }) + }, + appTouchStart(e) { + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item) { + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + // console.log(diff); + if (diff < 40 && time < 300) { + // console.log('点击'); + this.$emit('click', { + content: item, + index + }) + } + }, + getSize() { + const views = uni.createSelectorQuery().in(this) + views + .selectAll('.selector-query-hock') + .boundingClientRect(data => { + if (this.autoClose) { + data[0].show = false + } else { + data[0].show = this.show + } + this.position = data + }) + .exec() + }, + getButtonSize() { + const views = uni.createSelectorQuery().in(this) + views + .selectAll('.button-hock') + .boundingClientRect(data => { + this.button = data + }) + .exec() + } + } +} diff --git a/components/uni-swipe-action-item/uni-swipe-action-item.vue b/components/uni-swipe-action-item/uni-swipe-action-item.vue new file mode 100644 index 0000000..bda7581 --- /dev/null +++ b/components/uni-swipe-action-item/uni-swipe-action-item.vue @@ -0,0 +1,265 @@ + + + + \ No newline at end of file diff --git a/components/uni-swipe-action/uni-swipe-action.vue b/components/uni-swipe-action/uni-swipe-action.vue new file mode 100644 index 0000000..a2f09cb --- /dev/null +++ b/components/uni-swipe-action/uni-swipe-action.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/components/uni-swiper-dot/uni-swiper-dot.vue b/components/uni-swiper-dot/uni-swiper-dot.vue new file mode 100644 index 0000000..60f27e3 --- /dev/null +++ b/components/uni-swiper-dot/uni-swiper-dot.vue @@ -0,0 +1,198 @@ + + + + + \ No newline at end of file diff --git a/components/uni-tag/uni-tag.vue b/components/uni-tag/uni-tag.vue new file mode 100644 index 0000000..64a3473 --- /dev/null +++ b/components/uni-tag/uni-tag.vue @@ -0,0 +1,226 @@ + + + + + \ No newline at end of file diff --git a/components/uni-title/uni-title.vue b/components/uni-title/uni-title.vue new file mode 100644 index 0000000..eba2aa5 --- /dev/null +++ b/components/uni-title/uni-title.vue @@ -0,0 +1,170 @@ + + + + + \ No newline at end of file diff --git a/components/uni-transition/uni-transition.vue b/components/uni-transition/uni-transition.vue new file mode 100644 index 0000000..ad1cb55 --- /dev/null +++ b/components/uni-transition/uni-transition.vue @@ -0,0 +1,279 @@ + + + + + \ No newline at end of file diff --git a/dev/logo.png b/dev/logo.png new file mode 100644 index 0000000..6a033d2 Binary files /dev/null and b/dev/logo.png differ diff --git a/dev/test.keystore b/dev/test.keystore new file mode 100644 index 0000000..25037ab Binary files /dev/null and b/dev/test.keystore differ diff --git a/element/index.js b/element/index.js new file mode 100644 index 0000000..f4715c0 --- /dev/null +++ b/element/index.js @@ -0,0 +1,8 @@ +// 导入自己需要的组件 +import { Slider } from 'element-ui' +const element = { + install: function (Vue) { + Vue.use(Slider) + } +} +export default element \ No newline at end of file diff --git a/i18n/index.js b/i18n/index.js new file mode 100644 index 0000000..a3ca621 --- /dev/null +++ b/i18n/index.js @@ -0,0 +1,26 @@ +import vue from "vue"; +import VueI18n from "vue-i18n"; +vue.use(VueI18n) + +// 获取语言 +const requireComponent = require.context( + // 其组件目录的相对路径 + './lang', + // 是否查询其子目录 + true, + // 匹配基础组件文件名的正则表达式 + /[a-zA-Z]\w+\.(json)$/ +) +let messages = new Object(); +requireComponent.keys().forEach(fileName => { + // 获取组件的PascalCase命名 + const componentName = fileName.split('/').pop().replace(/\.\w+$/, ''); + messages[componentName] = requireComponent(fileName); +}) +// 语言注入 +let i18n = new VueI18n({ + locale: uni.getStorageSync('language')||'en', + // locale:'en', + messages: messages +}) +export default i18n; diff --git a/i18n/lang/de.json b/i18n/lang/de.json new file mode 100644 index 0000000..3081f2a --- /dev/null +++ b/i18n/lang/de.json @@ -0,0 +1,927 @@ +{ + "common": { + "D": "Tag", + "M": "Monat", + "Y": "Jahr", + "add": "hinzufügen zu", + "address": "Adresse", + "all": "Alle", + "amout": "Anzahl", + "cancel": "Stornieren", + "check": "zu untersuchen", + "code": "Code der Überprüfung", + "confirm": "bestimmen", + "date": "Datum", + "detail": "Details", + "email": "Briefkasten", + "enter": "Bitte geben", + "error": "fehlgeschlagen", + "getCode": "Verifikationscode erhalten", + "h": "Zeit", + "loadMore": "Laden Sie mehr", + "m": "Zweig", + "money": "Betrag des Geldes", + "more": "mehr", + "notData": "Keine Daten verfügbar", + "notMore": "Nicht mehr", + "phone": "Handy (Handy)", + "requestError": "Das Netzwerk ist beschäftigt. Bitte versuchen Sie es später noch einmal.", + "s": "Sekunde", + "save": "Erhaltung", + "select": "Bitte wählen", + "sendSuccess": "Gesendet erfolgreich", + "sms": "kurze Nachricht", + "submit": "Senden", + "success": "Erfolg", + "tips": "Erinnerung", + "total": "insgesamt", + "type": "Typ", + "copy": "Kopie", + "light": "weiß", + "dark": "schwarz", + "service": "Kundendienst", + "toDwon": "Möchten Sie auf die Download-Seite gehen", + "a0": "Bitte geben Sie den Kaufcode ein", + "a1": "Kopieren erfolgreich", + "a2": "Kopieren fehlgeschlagen", + "a3": "Aufzeichnungen über den Kauf", + "a4": "Betrag der Zahlung", + "a5": "Bestellungen.", + "a6": "Nummer des Kontos", + "a7": "Menge der Ladung", + "a8": "Gutschein für Zahlungen", + "a9": "Bitte geben Sie die Lademenge ein", + "b0": "Bitte laden Sie den Zahlungsbeleg hoch", + "b1": "Kauf{amount}Teile{name}Token verfügbar{rate}%Belohnung", + "b2": "Aktivitäten im Abonnement", + "b3": "Speichern erfolgreich", + "b4": "Speichern fehlgeschlagen", + "b5": "Einladung erstellen Poster", + "b6": "Poster auswählen", + "b8": "Zeit der Eröffnung", + "b9": "Zeit zum Schließen", + "c0": "Minimaler Ladebetrag: {num}. Ladewert kleiner als der Mindestbetrag wird nicht gepostet und kann nicht zurückgegeben werden", + "c1": "Mindestbetrag der Rücknahme", + "c2": "Nummer der Version", + "c3": "Offenbar", + "c4": "Geschätzte Spanne", + "c7": "Der aktuelle wert", + "c6": "Oranı artır", + "c5": "Ihre Überweisungsaufgabe wurde erfolgreich eingereicht, warten Sie bitte geduldig, und das Übertragungsergebnis wird per SMS oder E-Mail benachrichtigt. Bitte überprüfen Sie es sorgfältig. Bei Fragen wenden Sie sich bitte rechtzeitig an den Kundenservice.", + "GraphicValidation": "Grafische Überprüfung" + }, + "base": { + "a0": "Titel", + "a1": "zurück", + "a2": "mehr", + "a3": "Angebot", + "a4": "Option", + "a5": "Neue Zone", + "a6": "Mitglied", + "a7": "Hochschule", + "a8": "Deal für", + "a9": "Aktuelle Preise", + "b0": "Auf und ab", + "b1": "Klicken Sie auf Anmelden", + "b2": "Willkommen bei", + "b3": "Bitte einloggen", + "b4": "Upgrade", + "b5": "Geld verlangen", + "b6": "Zurückziehen des Geldes", + "b7": "Erweiterung", + "b8": "Abzug der Dienstgebühr", + "b9": "verfügbar", + "c0": "Kauf", + "c1": "Meine Provision", + "c2": "Authentifizierung der Identität", + "c3": "Security Center", + "c4": "Benachrichtigung der Nachricht", + "c5": "Anschrift der Rücknahme", + "c6": "zur Einrichtung", + "c7": "Optional", + "c8": "Erfolgreich hinzugefügt", + "c9": "Abbrechen erfolgreich", + "d0": "Home Page", + "d1": "Transaktion", + "d2": "Aktiva", + "d3": "Bitte geben Sie Suchbegriffe ein", + "d4": "ganze", + "d5": "eine Hauptplatine", + "d6": "Gegenwert der Aktiva insgesamt", + "d7": "Währungskonto", + "d8": "Übertragung", + "d9": "Währung suchen", + "e0": "verstecken", + "e1": "Aktive Bilanz", + "e2": "gefroren", + "e3": "Gleichwertige", + "e4": "Konto des Vertrags", + "e5": "Umwandlung von Verträgen", + "e6": "Klasse der Bergleute", + "e7": "Mineral", + "wallet": "Brieftasche", + "f0": "Starten Sie Ihre Kryptowährungsreise", + "f1": "kaufe Münzen", + "f2": "Geh jetzt", + "f3": "Beliebte Kryptowährungen", + "f4": "Name", + "f5": "Gemeinsame Funktionen", + "f6": "Abgeschlossene Primärzertifizierung", + "f7": "Reservezertifikat", + "f8": "Wir sind bestrebt, eine hohe Transparenz des Fondsstatus zu erreichen und ein Reserveverhältnis von 1:1 für die Vermögenswerte der Nutzer aufrechtzuerhalten", + "f9": "Bitcoin", + "g0": "durchschnittliche Rendite", + "g1": "Schaffen Sie unendliche Möglichkeiten", + "g2": "Beginnen Sie mit der Erkundung", + "g3": "zum Kauf verfügbar", + "g4": "Steht zum Verkauf", + "g5": "Kontrahentenpreis", + "h1": "Rechnung" + }, + "accountSettings": { + "a0": "Einstellungen des Kontos", + "a1": "Portrait des Kopfes", + "a2": "Spitzname?", + "a3": "Wichtigste Kontonummer", + "a4": "Nummer des Handys", + "a5": "Entb眉ndelung", + "a6": "Bindung", + "a7": "Bindung an Mailbox", + "a8": "Konten wechseln", + "a9": "Loggen Sie sich", + "b0": "Spitzname 盲ndern", + "b1": "Bitte einen Spitznamen eingeben", + "b2": "Sprache", + "b3": "Kontakt Informationen", + "b4": "Routinemäßige Beratung", + "b5": "Kundendienst", + "b6": "Zusammenarbeit im Medienbereich", + "b7": "Wenn Sie Hilfe benötigen, kontaktieren Sie uns bitte" + }, + "assets": { + "a0": "Verwaltung der Rücknahmeadresse", + "a1": "Das Adressbuch kann verwendet werden, um Ihre gemeinsamen Adressen zu verwalten, und es besteht keine Notwendigkeit, mehrere Kontrollen durchzuführen, wenn Geld von den Adressen im Adressbuch entnommen wird.", + "a2": "Wenn {name} verwendet wird, dürfen nur die Adressen im Adressbuch einen Währungsrückzug einleiten.", + "a3": "Adresse löschen", + "a4": "Adresse hinzufügen", + "a5": "Bitte wählen Sie die zu löschende Adresse", + "a6": "Löscht die aktuell ausgewählte Adresse", + "a7": "fließendes Wasser", + "a8": "insgesamt", + "a9": "verfügbar", + "b0": "gefroren", + "b1": "Kapitalverkehr (Kapitalverkehr)", + "b2": "Konto des Vertrags", + "b3": "Konto des Leverage", + "b4": "Finanzielle Gesamtrechnung", + "b5": "Bitte geben Sie Suchbegriffe ein", + "b6": "Zurückziehen des Geldes", + "b7": "Bitte wählen Sie Kettentyp", + "b8": "Anschrift der Rücknahme", + "b9": "Bitte geben Sie die Adresse ein", + "c0": "Anzahl", + "c1": "Bilanz", + "c2": "Bitte geben Sie die", + "c3": "ganze", + "c4": "Service berechnen", + "c5": "Bitte überprüfen Sie sorgfältig und geben Sie die richtige Adresse der Brieftasche ein", + "c6": "Das Senden einer nicht ausgeglichenen digitalen Währung an die Brieftasche-Adresse wird zu permanentem Verlust führen", + "c7": "Die Bearbeitungsgebühr wird von dem Betrag des eingezogenen Geldes abgezogen", + "c8": "Aufzeichnung des Entzugs", + "c9": "Zeit", + "d0": "Zustand", + "d1": "Gegenstand der Überprüfung", + "d2": "Erfolg", + "d3": "fehlgeschlagen", + "d4": "Weitere Informationen", + "d5": "Erfolgreich eingereicht, wird geprüft", + "d6": "edit", + "d7": "hinzufügen zu", + "d8": "Adresse", + "d9": "Bitte geben Sie die Adresse ein oder einfügen", + "e0": "Bemerkungen", + "e1": "Bitte geben Sie Ihre Kommentare ein", + "e2": "Bitte geben Sie die Adresse ein", + "e3": "Bitte füllen Sie die Anmerkungen aus", + "e4": "Operation erfolgreich", + "e5": "Geld verlangen", + "e6": "Scannen Sie den QR-Code oben, um die Ladeadresse zu erhalten", + "e7": "Adresse laden", + "e8": "Anzahl der geladenen Münzen", + "e9": "Bitte geben Sie den Betrag der abgerechneten Währung ein", + "f0": "Diese Adresse ist Ihre neueste Ladeadresse. Wenn das System die Aufladung empfängt, wird sie automatisch aufgezeichnet.", + "f1": "Der Transfer muss durch das gesamte Blockchain-Netzwerk bestätigt werden. Wenn Sie bei {num} Netzwerkbestätigung ankommen, wird Ihr {Name} automatisch auf das Konto hinterlegt.", + "f2": "Wenn ein Netzwerk bestätigt wird,", + "f3": "Bitte senden Sie nur {name} an diese Adresse. Wenn Sie andere digitale Währung an diese Adresse senden, wird dies zu permanenten Verlusten führen.", + "f4": "Aufzeichnung laden" + }, + "auth": { + "a0": "Authentifizierung der Identität", + "a1": "Authentifizierung des realen Namens", + "a2": "Nicht zertifiziert", + "a3": "Zertifiziert", + "a4": "Erweiterte Zertifizierung", + "a5": "Gegenstand der Überprüfung", + "a6": "Authentifizierung fehlgeschlagen", + "a7": "Nationalität", + "a8": "Bitte wählen Sie Ihre Nationalität", + "a9": "Real name", + "b0": "Bitte geben Sie Ihren richtigen Namen ein", + "b1": "Kennnummer (Kennnummer)", + "b2": "Bitte geben Sie die ID-Nummer ein", + "b3": "bestätigen", + "b4": "Zertifizierung erfolgreich", + "b5": "Bitte laden Sie das Foto Ihrer Personalausweise hoch", + "b6": "Bitte laden Sie die Rückseite des Zertifikats hoch", + "b7": "Bitte laden Sie Ihr Handgerät hoch", + "b8": "Stellen Sie sicher, dass das Foto ohne Wasserzeichen klar ist und der Oberkörper intakt ist", + "b9": "Die Dateigröße ist zu groß und darf nicht überschritten werden", + "c0": "Fehler beim Dateityp", + "c1": "Upload erfolgreich", + "c2": "Bitte laden Sie das Foto auf der Rückseite des Zertifikats hoch", + "c3": "Bitte laden Sie das Foto Ihrer Personalausweise hoch", + "c4": "Upload erfolgreich, bitte warten Sie auf das Audit", + "c5": "Geburtsdatum", + "c6": "Art des Zertifikats", + "c7": "Wohnadresse", + "c8": "Bitte geben Sie Ihre Wohnadresse ein", + "c9": "Telefonnummer", + "d0": "Bitte geben sie ihre Telefonnummer ein", + "d1": "Führerschein", + "d2": "Reisepass", + "d3": "Ausweis", + "d4": "Datum auswählen", + "d5": "bitte auswählen" + }, + "exchange": { + "a0": "Münzen", + "a1": "für den Kauf", + "a2": "Vertrag", + "a3": "Transaktion", + "a4": "Aktuelle Delegation", + "a5": "Historische Kommission", + "a6": "Erfolgreich hinzugefügt", + "a7": "Abbrechen erfolgreich", + "a8": "Ausgabe insgesamt", + "a9": "Umlauf insgesamt", + "b0": "Preis der Emission", + "b1": "Uhrzeit der Ausstellung", + "b2": "Adresse auf weißem Papier", + "b3": "Offizielle Website", + "b4": "kurze Einführung", + "b5": "kaufen", + "b6": "verkaufen", + "b7": "Preis der Kommission", + "b8": "Typ", + "b9": "Beschränkung des Handels", + "c0": "Marktbezogene Transaktion", + "c1": "Geschlossen", + "c2": "insgesamt", + "c3": "Kauf", + "c4": "Verkauf aus", + "c5": "Anzahl", + "c6": "Nahe zum besten Marktpreis", + "c7": "Preis insgesamt", + "c8": "Verfügbare Menge", + "c9": "Bruttowert (Bruttowert)", + "d0": "Melden Sie sich", + "d1": "Diagramm der Zeitfreigabe", + "d2": "Preis", + "d3": "Letzte Abmachung", + "d4": "Zeit", + "d5": "Richtung", + "d6": "Fester Preis", + "d7": "der Marktpreis", + "d8": "Bitte geben Sie den Preis ein", + "d9": "Bitte geben Sie die", + "e0": "Bitte geben Sie den Gesamtpreis ein", + "e1": "Erfolg der Kasse", + "e2": "Durchschnittspreis", + "e3": "höchste", + "e4": "Minimum", + "e5": "Betrag", + "e6": "Ordnung", + "e7": "Informationen über Währung", + "e8": "Minute", + "e9": "Stunde", + "f0": "Tag", + "f1": "Woche", + "f2": "Monat", + "f3": "Der Kaufpreis", + "f4": "Verkaufspreis", + "f5": "Transaktion in Währung", + "f6": "Bitte geben Sie Suchbegriffe ein", + "f7": "Deal für", + "f8": "Aktuelle Preise", + "f9": "Auf und ab", + "g0": "Optional", + "g1": "Meine Provision", + "g2": "Widerruf der Beauftragung", + "g3": "Betrieb", + "g4": "Widerruf", + "g5": "Die aktuelle Delegation stornieren", + "g6": "Erfolgreich storniert" + }, + "option": { + "a0": "Option", + "a1": "Entfernung Lieferung", + "a2": "Weitere Informationen", + "a3": "sei bärtisch", + "a4": "Rate der Rendite", + "a5": "Kauf", + "a6": "viele", + "a7": "leer", + "a8": "aktuell", + "a9": "Nächste Ausgabe", + "b0": "Siehe flach", + "b1": "Wahl des Preisanstiegs", + "b2": "Rate der Rendite", + "b3": "Menge des Käufes", + "b4": "Bitte geben Sie die", + "b5": "Bilanz", + "b6": "Gewinn-und Verlust", + "b7": "Jetzt kaufen", + "b8": "steigen", + "b9": "flach", + "c0": "Fall", + "c1": "Erfolgreicher Kauf", + "c2": "Details", + "c3": "Nummer der Bestellung", + "c4": "Preis der Eröffnung", + "c5": "Abschließender Preis", + "c6": "Zeit kaufen", + "c7": "Menge des Käufes", + "c8": "Art der Bestellung", + "c9": "Zustand", + "d0": "Ergebnis schließen", + "d1": "Menge der Abrechnung", + "d2": "Zeit der Lieferung", + "d3": "Weitere Informationen", + "d4": "Option kaufen", + "d5": "Warten auf die Lieferung", + "d6": "Meine Lieferung", + "d7": "Aufzeichnung der Lieferung", + "d8": "Minute", + "d9": "Stunde", + "e0": "Tag", + "e1": "Woche", + "e2": "Monat", + "e3": "Richtung", + "e4": "Auf und ab" + }, + "purchase": { + "a0": "Preis der Emission", + "a1": "Währung der Abonnements", + "a2": "Erwartete Online-Zeit", + "a3": "Beginn des Abonnements", + "a4": "Zeit zum Schließen", + "a5": "Kauf beantragen", + "a6": "Bitte wählen Sie die Währung des Abonnements", + "a7": "Menge des Käufes", + "a8": "Bitte geben Sie die Menge ein", + "a9": "ganze", + "b0": "Sofort anwenden", + "b1": "Zyklus der Abonnements", + "b2": "Projekt aufwärmen", + "b3": "Abonnement starten", + "b4": "Schließen Sie das Abonnement", + "b5": "aufgeführte Transaktion", + "b6": "Details des Projekts", + "b7": "Verwenden oder nicht", + "b8": "Kauf", + "b9": "Erfolgreicher Kauf" + }, + "reg": { + "a0": "Registrieren Sie Ihr Telefon", + "a1": "E-Mail Registrierung", + "a2": "Handy", + "a3": "Bitte geben Sie die Telefonnummer ein", + "a4": "Briefkasten", + "a5": "Bitte geben Sie die Mailboxnummer ein", + "a6": "Verifizierungs-Schlüssel", + "a7": "Bitte geben Sie den Bestätigungscode ein", + "a8": "Passwort", + "a9": "Bitte geben Sie das Passwort ein", + "b0": "Kennwort bestätigen", + "b1": "Bitte bestätigen Sie Ihr Passwort", + "b2": "Referrer", + "b3": "Bitte geben Sie einen Empfehlungsgeber ein", + "b4": "Optional", + "b5": "Sie haben zugestimmt", + "b6": "Nutzungsbedingungen", + "b7": "Und verstehe unsere", + "b8": "Datenschutzvereinbarung", + "b9": "Eingetragen", + "c0": "Sie haben bereits ein Konto", + "c1": "Melden Sie sich sofort an", + "c2": "Bitte lesen Sie die Vereinbarung und stimmen Sie ihr zu", + "c3": "Bitte geben Sie Ihre Telefonnummer ein", + "c4": "Bitte geben Sie die Mailboxnummer ein", + "c5": "Registrierung erfolgreich", + "c6": "Institutionscode (erforderlich)", + "c7": "Bitte geben Sie den Institutionscode ein", + "c8": "Registrieren Sie sich jetzt, um Ihre Reise in die Kryptowährung zu beginnen" + }, + "safe": { + "a0": "Lösen", + "a1": "Binden", + "a2": "Briefkasten", + "a3": "Mailboxnummer", + "a4": "Bitte geben Sie die Mailboxnummer ein", + "a5": "E-Mail-Bestätigungscode", + "a6": "Bitte geben Sie den Bestätigungscode ein", + "a7": "Verifizierungs-Schlüssel", + "a8": "Erfolgreich lösen", + "a9": "Erfolgreich binden", + "b0": "Passwort vergessen", + "b1": "Kontonummer", + "b2": "Bitte geben Sie Ihr Telefon ein", + "b3": "Neues Kennwort", + "b4": "Bitte geben Sie ein neues Passwort ein", + "b5": "Kennwort bestätigen", + "b6": "Bitte bestätigen Sie Ihr Passwort", + "b7": "Bestätigen Sie die Änderungen", + "b8": "Bitte geben Sie die richtige Telefon- oder E-Mail-Nummer ein", + "b9": "Google Authenticator", + "c0": "Betriebsmethode: Laden Sie Google Authenticator herunter und öffnen Sie es, scannen Sie den folgenden QR-Code oder geben Sie den geheimen Schlüssel manuell ein, um ein Bestätigungstoken hinzuzufügen", + "c1": "Schlüssel kopieren", + "c2": "Ich habe den Schlüssel ordnungsgemäß gespeichert und er wird nicht wiederhergestellt, wenn er verloren geht", + "c3": "Nächster Schritt", + "c4": "SMS-Bestätigungscode", + "c5": "Google-Bestätigungscode", + "c6": "Bindung bestätigen", + "c7": "Sicherheitscenter", + "c8": "Passwort", + "c9": "ändern", + "d0": "Einrichten", + "d1": "Transaktions Passwort", + "d2": "Handy", + "d3": "Erfolgreich modifiziert", + "d4": "Telefonnummer", + "d5": "Bitte geben Sie die Telefonnummer ein", + "d6": "Bitte geben Sie den SMS-Bestätigungscode ein", + "d7": "schließen", + "d8": "Einschalten", + "d9": "Überprüfung", + "e0": "SMS", + "e1": "Erfolgreich geschlossen", + "e2": "Erfolgreich geöffnet", + "e3": "bestätigen", + "e4": "Erfolgreich einstellen", + "Remembered": "Passwort vergessen?", + "e5": "Passwort abrufen" + }, + "transfer": { + "a0": "Datensatz übertragen", + "a1": "Erfolg", + "a2": "Menge", + "a3": "Richtung", + "a4": "Kontovermögen", + "a5": "Vertragskonto", + "a6": "Margin-Konto", + "a55": "nach Menge verkaufen", + "Aa66": "nach Betrag verkaufen", + "a7": "Bankkonto", + "a8": "Transfer", + "a9": "Von", + "b0": "zu", + "b1": "Währung übertragen", + "b2": "Balance", + "b3": "Alle", + "b4": "Übertragen" + }, + "notice": { + "a0": "Einzelheiten", + "a1": "Benachrichtigung", + "a2": "Ankündigung", + "a3": "Nachrichten" + }, + "invite": { + "a0": "Laden Sie Freunde mit exklusiven Handelsrabatten ein", + "a1": "Partner", + "a2": "Exklusiver Handelsrabatt", + "a3": "allgemeiner Benutzer", + "a4": "Meine Identität", + "a5": "Exklusivstatus", + "a6": "Mein Einladungscode", + "a7": "Kopieren Sie den QR-Code der Einladung", + "a8": "Einladungslink kopieren", + "a9": "Meine Beförderung", + "b0": "Gesamtzahl der Werbeaktionen", + "b1": "Menschen", + "b2": "Gesamteinkommensäquivalent", + "b3": "Promotion-Rekord", + "b4": "Direkte Einladung", + "b5": "Rabattdatensatz", + "b6": "Klasse", + "b7": "Pegeleinstellung", + "b8": "Beförderungsbedingungen", + "b9": "Dividendenrechte", + "c0": "Spitzname", + "c1": "Anzahl der Promotionen", + "c2": "Einkommensäquivalent", + "c3": "Einladungsprotokoll", + "c4": "Rabattdatensatz", + "c5": "Beschreibung der Levelrechte", + "c6": "Klasse", + "c7": "Rechte und Interessen", + "c8": "Beschreibung", + "c9": "Meine Rechte" + }, + "help": { + "a0": "Einzelheiten", + "a1": "Hochschule", + "a2": "Einstufung" + }, + " login": { + "a0": "E-Mail-Nummer", + "a1": "Bitte geben sie ihren briefkasten ein", + "a2": "Passwort", + "a3": "Bitte geben Sie das Passwort ein", + "a4": "Einloggen", + "a5": "Passwort vergessen", + "a6": "Kein Account", + "a7": "Jetzt registrieren", + "a8": "Handy", + "a9": "Briefkasten", + "b0": "durchführen", + "b1": "Anmeldekonto", + "b2": "Melden Sie sich jetzt an, um Ihre Reise zur Kryptowährung zu beginnen", + "b3": "E-Mail", + "b4": "Bitte E-Mail-Adresse eingeben" + }, + "contract": { + "a0": "Öffnen Sie eine Position", + "a1": "Position", + "a2": "Kommission", + "a3": "Geschichte", + "a4": "Vertragstransaktion", + "a5": "Erfolgreich geöffnet", + "a6": "Art der Transaktion", + "a7": "Geschäft abgeschlossen", + "a8": "Gesamtprovision", + "a9": "Durchschnittlicher Transaktionspreis", + "b0": "Provisionspreis", + "b1": "Rand", + "b2": "Bearbeitungsgebühr", + "b3": "Status", + "b4": "Betriebs", + "b5": "Bestellung stornieren", + "b6": "Widerrufen", + "b7": "Nicht verkauft", + "b8": "Teiltransaktion", + "b9": "Alle Transaktionen", + "c0": "Mehr öffnen", + "c1": "Flache Luft", + "c2": "Freifläche", + "c3": "Pindo", + "c4": "Tipps", + "c5": "Gibt an, ob die aktuelle Bestellung storniert werden soll", + "c6": "Widerruf erfolgreich", + "c7": "Gewinn-und Verlust", + "c8": "teilt es", + "c9": "Angaben zur Kommission", + "d0": "Keine Daten", + "d1": "Preis", + "d2": "Menge", + "d3": "Transaktionszeit", + "d4": "Nutzerrechte", + "d5": "Nicht realisierter Gewinn und Verlust", + "d6": "Risikorate", + "d7": "Marktpreis", + "d8": "USDT", + "d9": "Besetzen Sie den Rand", + "e0": "Bullish", + "e1": "Kann mehr öffnen", + "e2": "Bärisch", + "e3": "Öffnungsfähig", + "e4": "Verfügbar", + "e5": "Transfer", + "e6": "Finanzierungsrate", + "e7": "Entfernungsabrechnung", + "e8": "viele", + "e9": "Eröffnungskurs", + "f0": "Überweisung", + "f1": "Taschenrechner", + "f2": "Über den Vertrag", + "f3": "Risikoschutzfonds", + "f4": "Geschichte der Finanzierungskosten", + "f5": "Ordentliche Provision", + "f6": "Marktordnung", + "f7": "Ob zu", + "f8": "s Preis", + "f9": "Öffnen Sie eine Position mit Mehrfachhebel", + "g0": "Mehr öffnen", + "g1": "Freifläche", + "g2": "Erfolgreich in Betrieb genommen", + "g3": "Nur den aktuellen Vertrag anzeigen", + "g4": "Keping", + "g5": "Kommission", + "g6": "durchschnittlicher Eröffnungskurs", + "g7": "Abrechnungsgrundpreis", + "g8": "Geschätzte starke Parität", + "g9": "Abgerechnetes Einkommen", + "h0": "Rendite", + "h1": "Halt", + "h2": "Stop Loss", + "h3": "Position schließen", + "h4": "Flacher Marktpreis", + "h5": "Take-Profit und Stop-Loss", + "h6": "Niveau", + "h7": "Bitte geben Sie den Schlusskurs ein", + "h8": "Preis begrenzen", + "h9": "Bitte geben Sie die Schlussmenge ein", + "i0": "Keping", + "i1": "Durchschnittlicher Eröffnungspreis", + "i2": "Letzter Transaktionspreis", + "i3": "Bitte geben Sie den Preis ein", + "i4": "Gewinn mitnehmen", + "i5": "Marktpreis zu", + "i6": "Löst die Take-Profit-Order aus und der Gewinn und Verlust wird nach der Transaktion geschätzt", + "i7": "Verlust stoppen", + "i8": "Zum Zeitpunkt der Transaktion wird ein Stop-Loss-Auftrag ausgelöst, und der Gewinn und Verlust wird nach der Transaktion erwartet", + "i9": "bestimmen", + "j0": "Erfolgreich geschlossen", + "j1": "Ob der Marktpreis flach ist", + "j2": "Zenpei", + "j3": "Erfolg", + "j4": "Erfolgreich einstellen", + "j5": "Magische Berechnungen, unübertroffen", + "j6": "tun", + "j7": "Schlusskurs", + "j8": "Handelsplattform für digitale Assets", + "j9": "Wenn {name1} auf den feurigen Weg von {name2} {name3} zum Aufstieg trifft", + "k0": "Eröffnungskurs", + "k1": "letzter Preis", + "k2": "Scannen Sie den Code, um mehr zu erfahren", + "k3": "Abrechnungsgewinn und -verlust", + "k4": "Der Screenshot ist erfolgreich und wurde lokal gespeichert", + "k5": "Screenshot fehlgeschlagen", + "k6": "Lang drücken, um einen Screenshot zu machen", + "k7": "One-Key-Vollnivellierung", + "k8": "Ein-Klick-Rückwärtsgang", + "k9": "Ob One-Key-Full-Leveling", + "l0": "Voller Erfolg", + "l1": "Ob eine Taste umkehrt", + "l2": "Erfolg umkehren", + "l3": "Flache Luft", + "l4": "Pindo" + }, + "otc": { + "a0": "Werbung", + "a1": "Bestellung", + "a2": "Währung der Transaktion", + "a3": "Meine Bestellung", + "a4": "Meine Anzeige", + "a5": "Kauf", + "a6": "verkaufen", + "a7": "insgesamt", + "a8": "Überschuss", + "a9": "Grenzen", + "b0": "Preis pro Einheit", + "b1": "Methode der Zahlung", + "b2": "Betrieb", + "b3": "insgesamt", + "b4": "Bitte wählen Sie die Zahlungsmethode", + "b5": "Bitte geben Sie die", + "b6": "eine Bestellung aufgeben", + "b7": "Alipay", + "b8": "WeChatGenericName", + "b9": "Karte der Bank", + "c0": "Erfolg der Kasse", + "c1": "Zustand", + "c2": "Nummer der Werbung", + "c3": "Preis insgesamt", + "c4": "Anzahl", + "c5": "Zeit der Veröffentlichung", + "c6": "Aus dem Regal", + "c7": "aufgehoben", + "c8": "Im Handel", + "c9": "Abgeschlossen", + "d0": "Erinnerung", + "d1": "Ist die aktuelle Anzeige entfernt", + "d2": "bestimmen", + "d3": "Stornieren", + "d4": "Erfolgreich storniert", + "d5": "Rechtliches Währungskonto", + "d6": "gefroren", + "d7": "Nummer des Alipay-Kontos", + "d8": "Bitte geben Sie die Kontonummer ein", + "d9": "vollständiger Name", + "e0": "Bitte geben Sie Ihren Namen ein", + "e1": "Code der Zahlung", + "e2": "Bindung", + "e3": "Konto Wechat", + "e4": "Name der Bank", + "e5": "Bitte geben Sie den Banknamen ein", + "e6": "Zweig zur Kontoeröffnung", + "e7": "Bitte geben Sie die Kontoeröffnung ein", + "e8": "Nummer der Bankkarte", + "e9": "Bitte geben Sie die Bankkartennummer ein", + "f0": "erfolgreich editiert", + "f1": "Erfolgreich hinzugefügt", + "f2": "Verkauf aus", + "f3": "Kauf", + "f4": "Details zur Bestellung", + "f5": "Nummer der Bestellung", + "f6": "Nummer des Kontos", + "f7": "Bank der Einlagen", + "f8": "Restliche Zeit", + "f9": "Zweig", + "g0": "Sekunde", + "g1": "Gutschein hochladen", + "g2": "Bestätigung der Zahlung", + "g3": "Stornierung der Bestellung", + "g4": "Bestätigen Sie den Empfang", + "g5": "Nicht eingegangen", + "g6": "Löscht die aktuelle Bestellung", + "g7": "Bestellung storniert", + "g8": "Bestätigung der laufenden Zahlung", + "g9": "Operation erfolgreich", + "h0": "Nach Bestätigung der Einziehung werden die Vermögenswerte automatisch verkauft und übertragen.", + "h1": "Nach Bestätigung, dass die Zahlung nicht eingegangen ist, wird der Auftrag automatisch in den Beschwerdemodus eingegeben", + "h2": "Bestellung des Vertriebs", + "h3": "Bestellung bestellen", + "h4": "Kaufauftrag für Werbung", + "h5": "Verkaufsauftrag der Werbung", + "h6": "Zeit", + "h7": "Details", + "h8": "ganze", + "h9": "Geschlossen", + "i0": "Zu zahlen", + "i1": "Zu bestätigen", + "i2": "Gegenstand der Beschwerde", + "i3": "Art der Werbung", + "i4": "Bitte wählen Sie den Transaktionstyp", + "i5": "Bitte wählen Sie Transaktionswährung", + "i6": "Preis", + "i7": "Bitte geben Sie den Preis ein", + "i8": "Mindestpreis", + "i9": "Bitte geben Sie den niedrigsten Preis ein", + "j0": "Höchster Preis", + "j1": "Bitte geben Sie den höchsten Preis ein", + "j2": "Bemerkungen", + "j3": "Bitte geben Sie Ihre Kommentare ein", + "j4": "Freigabe", + "j5": "Erfolgreich veröffentlicht", + "j6": "Methode der Zahlung", + "j7": "Mindestmenge", + "j8": "Maximale Menge", + "j9": "Bitte geben Sie das minimale Transaktionsvolumen ein", + "k0": "Bitte geben Sie das maximale Handelsvolumen ein" + }, + "first": { + "a0": "Gehe zum richtigen Namen", + "a1": "Über uns", + "a2": "Willkommen!", + "a3": "Einstellung von Gewinn und Verlust stoppen", + "a4": "Handel zu aktuellem Preis", + "a5": "Position halten", + "a6": "Management von Bestellungen", + "a7": "Alle Aufträge", + "a8": "Historische Aufzeichnungen", + "a9": "mehrere", + "b0": "Bist du sicher, dass du dich einloggen willst?", + "b1": "Anmelden oder registrieren", + "b2": "Hallo, willkommen bei Moabcoin", + "b3": "Betrag", + "b4": "Index der Spots", + "b5": "Index der Verträge", + "b6": "Unterstützung mehrerer Einkaufsmethoden", + "b7": "Schnell kaufen", + "b8": "nachhaltig", + "b9": "Der aktuelle Bereich ist noch nicht geöffnet", + "c0": "Kauf", + "c1": "Verkauf aus", + "c2": "Zeit", + "c3": "Preis insgesamt", + "c4": "Anzahl", + "c5": "Letzter Preis", + "c6": "Umgesetzte Aktiva", + "c7": "Volumen" + }, + "recharge": { + "a0": "Währung wechseln", + "a1": "*Adressänderung kann nur empfangen werden", + "a2": "Wenn Sie Ihr Vermögen in anderen Währungen aufladen, können Sie es nicht mehr abrufen!", + "a3": "Erc20 wird für die Sammlung empfohlen", + "a4": "Adresse kopieren", + "a5": "*Bitte vergewissern Sie sich, dass die Adresse und die Informationen korrekt sind, bevor sie übertragen werden!Einmal verlegt, ist es unwiderruflich!", + "a6": "Bitte regenerieren" + }, + "currency": { + "a0": "Legale Währungstransaktion", + "a1": "Ich möchte es kaufen", + "a2": "Ich will verkaufen", + "a3": "Ein Klick Münzkauf", + "a4": "Ein Klick Münze verkaufen", + "a5": "Einkauf nach Menge", + "a6": "Käufe nach Betrag", + "a7": "Bitte geben Sie die Bestellmenge ein", + "a8": "Bitte geben Sie den Kaufbetrag ein", + "a9": "Bitte geben Sie die Verkaufsmenge ein", + "b0": "Bitte geben Sie den Verkaufsbetrag ein", + "b1": "Preis pro Einheit", + "b2": "0 Handling charge kaufen", + "b3": "0 Provisionsverkauf", + "b4": "Nicht genügend verfügbare Bilanz", + "b5": "Bitte füllen Sie zuerst die erweiterte Zertifizierung aus", + "b6": "De Authentifizierung", + "b7": "Kauf bestätigen", + "b8": "Bestätigen Verkauf" + }, + "shou": { + "a0": "Konto aufladen", + "a1": "Kryptowährungsgelder zu Ihrem Wallet hinzufügen", + "a2": "Und sofort mit dem Handel beginnen", + "a3": "Jetzt aufladen", + "a4": "Globale Handelsplattform für digitale Vermögenswerte", + "a5": "Verschlüsselte Asset-Transaktionen einfacher machen", + "a6": "Jetzt anmelden", + "a7": "Digital Asset Market Express", + "a8": "Markttrend", + "a9": "Währung", + "a10": "Letzter Preis (USD)", + "a11": "24h-Erhöhung", + "a12": "24h-Transaktionsvolumen", + "a13": "Top 10", + "a14": "5 Millionen+", + "a15": "< 0,10 %", + "a16": "200+", + "a17": "Globales Ranking", + "a18": "Benutzer vertrauen uns", + "a19": "Extrem niedrige Gebühren", + "a20": "Länder", + "a21": "Multi-Terminal-Unterstützung", + "a22": "Mit digitalen Vermögenswerten jederzeit und überall handeln", + "a23": "Unterstützt eine breite Palette von Vermögenswerttypen mit allen Währungsinformationen", + "a24": "APP Store", + "a25": "Android APK", + "a26": "Code scannen, um APP herunterzuladen", + "a27": "iOS & Android", + "a28": "Warum xuscoin.com wählen?", + "a29": "Bemühen Sie sich, Dienstleistungen für den Handel mit digitalen Vermögenswerten für mehrere Länder anzubieten", + "a30": "Einfacher und bequemer Handel mit Kryptowährungs-Assets", + "a31": "Das Produkt ist leicht zu verstehen, der Transaktionsprozess ist bequem und die Blockchain-Asset-Service-Plattform aus einer Hand", + "a32": "Bieten Sie basierend auf der Benutzererfahrung ein angenehmes Verschlüsselungsdiensterlebnis", + "a33": "Bedienung globaler mehrsprachiger Regionen und Entwicklung eines Tors für alle Benutzer zum Eintritt in die verschlüsselte Welt", + "a34": "Sicherheit und Stabilität ohne Unfälle", + "a35": "Mehrere Sicherheitsstrategiegarantien, 100 % Reservefondsgarantie, seit seiner Gründung sind keine Sicherheitsvorfälle aufgetreten", + "a36": "Optimaler Transaktionsgebührensatz", + "a37": "Vorzugstransaktionspreise, wettbewerbsfähige VIP-Rechte, genießen Sie den hochwertigsten Service", + "a38": "Anfängerleitfaden", + "a39": "Den Transaktionsprozess für digitale Vermögenswerte schnell verstehen", + "a40": "sofort Einkommen verdienen", + "a41": "Klicken Sie hier, um zu gehen", + "a42": "XUScoin-Kryptowährungs-Handelsplattform – für jedermann konzipiert", + "a43": "Beginnen Sie die Verschlüsselungsreise" + }, + "homeNewText": { + "aa3": "Jetzt registrieren und Ihre Reise in die Kryptowährung beginnen", + "aa4": "Sofort mit dem Handel beginnen", + "aa7": "Währung", + "aa8": "Anmelden/Registrieren", + "bb1": "Aktuellster Preis (USD)", + "bb2": "24-Stunden-Erhöhung", + + "bb4": "Die Zukunft des Geldes ist da", + "bb5": "Wir sind der vertrauenswürdigste Ort für Anleger, wenn es um den Kauf, Verkauf und die Verwaltung von Kryptowährungen geht", + "bb6": "Per E-Mail registrieren", + "bb7": "Einfache Aufnahme", + "bb8": "Handelsmöglichkeiten", + "bb9": "Bequeme Verwendung von Kryptowährung", + "bb10": "Werkzeuge", + "bb11": "Wir arbeiten regelmäßig an der Aktualisierung vorhandener Funktionen und der Implementierung neuer Servicefunktionen.", + "bb12": "Kommerzielle Verschlüsselungsverarbeitung", + "bb13": "Bietet eine zuverlässige Möglichkeit, bequem Zahlungen mit den beliebtesten Kryptowährungen auf der ganzen Welt zu akzeptieren.", + "bb14": "Unbegrenzter Kryptowährungsaustausch", + "bb15": "Tauschen Sie Bitcoin, Tether, Litecoin, Ethereum und über 50 andere Münzen einfach und sicher um.", + "bb16": "Benutzererfahrung optimieren", + "bb17": "Benutzererfahrung optimieren: hochwertige neue Produkte auf den Markt bringen, Abläufe vereinfachen und Benutzerfreundlichkeit verbessern.", + "bb18": "Flash-Ein- und Auszahlung", + "bb19": "Unsere Partner", + "bb20": "Überall auf der Welt", + "bb21": "Unsere Partner sind Marktführer und helfen uns, die besten Kryptowährungslösungen anzubieten.", + "bb22": "Anfängerleitfaden", + "bb23": "Erstellen Sie ein {name}-Konto", + "bb24": "Jetzt registrieren und Ihre Handelsreise beginnen!", + "bb25": "Registrieren", + "bb26": "Einzahlung", + "bb27": "Schnelle Aufladung und einfache Einzahlung!", + "bb28": "Aufladen", + "bb29": "Handel starten", + "bb30": "Starten Sie mit dem Handel und genießen Sie unbegrenzte Möglichkeiten!", + "bb31": "Coin-to-Coin-Transaktion", + "bb32": "Transaktionen jederzeit und überall öffnen", + "bb33": "Zum Herunterladen scannen", + "bb34": "Starten Sie jetzt Ihre Krypto-Reise!", + "bb35": "Es dauert nur 10 Sekunden, sich zu registrieren und mit dem Handel zu beginnen", + "bb36": "Kostenlose Registrierung", + "bb37": "Einzahlungen und Auszahlungen können in maximal 3 Minuten durchgeführt werden.", + "bb38": "Jetzt registrieren", + "bb39": "Jetzt handeln", + "bb40": "{name}, jederzeit und überall handeln", + "bb41": "Scannen Sie den QR-Code, um die {name}-APP herunterzuladen", + "bb42": "Scannen Sie den QR-Code, um die APP herunterzuladen." + } +} \ No newline at end of file diff --git a/i18n/lang/en.json b/i18n/lang/en.json new file mode 100644 index 0000000..ec94ea2 --- /dev/null +++ b/i18n/lang/en.json @@ -0,0 +1,971 @@ +{ + "common": { + "million": "million", + "user": "BTC/USDT", + "trading": "trading", + "transactions": "transactions", + "payments": "payments in local", + "currency": "currency", + "using": "payments using", + "crypto": "crypto", + "Why": "Why do you choose to buy", + "digital": "digital currency in Moabcoin", + "believe": "We believe Cryptolly is here to stay — and that a future worth building is one which opens its doors and invites everyone in ", + "help": "We help you make sense of the coins,the terms,the dense charts and market changes", + "Clarity": "Clarity", + "safety": "safety", + "double": "Safety double risk control,intelligent risk control system plus manual double risk control", + "convenient": "convenient", + "key": "One key transaction,more convenient operation", + "technology": "Our technology", + "CoinsExpound": "Moabcoin adopts advanced technologies such as GSLB,distributed server cluster ,distributed storage,high speed memory trading engine with multiple machines,cold wallet,hot wallet with private key offline,etc.,to provide our customers with secure,stable and reliable digital asset trading services through multiple terminals such as web,mobile and desktop terminals ", + "guide": "Beginner's guide", + "Wear": "Wear an account", + "Get": "Register a trading account", + "deposit": "deposit", + "Invest": "Invest in your account and start your journey. Multiple payment methods are supported", + "Complete": "Complete identity authentication", + "become": "Complete identity authentication and become a compliant account ", + "Start": "Start trading", + "Sell": "Sell,buy or copy deals to explore more", + "Create": "Create infinite possibilities Scan the code to download the trading software for mobile APP trading", + "Rights": "©2022 BingX Exchange All Rights Reserved", + "Beginners Guide": "Beginners Guide", + "Trading Strategy": "Trading Strategy", + "Industry Research": "Industry Research", + "Market News": "Market News", + "User protocol": "User protocol", + "Privacy policy": "Privacy policy", + "Legal declaration": "Legal declaration", + "About us": "About us", + "Android": "Android", + "ios": "ios", + "D": "Day", + "M": "Month", + "Y": "Year", + "add": "Add", + "address": "Address", + "all": "All", + "amout": "Amount", + "cancel": "Cancel", + "check": "Check", + "code": "Verification Code", + "confirm": "Confirm", + "date": "Date", + "detail": "Detail", + "email": "Mailbox", + "enter": "Please enter", + "error": "Failed", + "getCode": "Get Verification Code", + "h": "Hour", + "loadMore": "Load More", + "m": "Minute", + "money": "Amount", + "more": "More", + "notData": "No data temporarily", + "notMore": "No More", + "phone": "Mobile", + "requestError": "The network is busy,please try again later", + "s": "second", + "save": "Save", + "select": "Please select", + "sendSuccess": "Send successfully", + "sms": "SMS", + "submit": "Submit", + "success": "Success", + "tips": "Warm Tips", + "total": "Total", + "type": "Type", + "copy": "Copy", + "light": "light", + "dark": "dark", + "service": "Service", + "toDwon": "Do you want to go to the download page", + "toDwon1": "Do you want to go to the authentication page", + "a0": "Please enter the purchase code", + "a1": "Copy succeeded", + "a2": "copy failed", + "a3": "Purchase records", + "a4": "Payment amount", + "a5": "The number of applications", + "a6": "account number", + "a7": "Recharge quantity", + "a8": "Payment voucher", + "a9": "Please input recharge quantity", + "b0": "Please upload the payment voucher", + "b1": "purchase{amount}Pieces{name}Token available{rate}%reward", + "b2": "Subscription activities", + "b3": "Saved successfully", + "b4": "Save failed", + "b5": "Generate invitation Poster", + "b6": "Select Poster", + "b8": "Opening time", + "b9": "Closing time", + "c0": "Minimum recharge amount: {num}. Recharge less than the minimum amount will not be posted and cannot be returned", + "c1": "Minimum withdrawal amount", + "c2": "Version number", + "c3": "Openable", + "c4": "Size", + "c5": "your transfer order has been submitted successfully,please wait patiently,and the transfer result will be notified by SMS or e-mail. Please check it carefully. If you have any questions,please contact the customer service in time.", + "c6": "Increase ratio", + "c7": "Current valuation", + "GraphicValidation": "Graphical verification" + }, + "base": { + "a0": "Title", + "a1": "Return", + "a2": "More", + "a3": "Quotes", + "a4": "Options", + "a5": "Tap a new zone", + "a6": "Member", + "a7": "College", + "a8": "Trading Pair", + "a9": "Latest Price", + "b0": "Rise and fall", + "b1": "Click to log in", + "b2": "Welcome to", + "b3": "Please log in", + "b4": "Upgrade", + "b5": "Deposit", + "b6": "Withdraw", + "b7": "Promotion", + "b8": "Deduct the handling fee", + "b9": "Available", + "c0": "Buy", + "c1": "My wallets", + "c2": "Identity Authentication", + "c3": "Security Center", + "c4": "Message Notification", + "c5": "Withdraw Address", + "c6": "Settings", + "c7": "Optional", + "c8": "Added successfully", + "c9": "Cancelled successfully", + "d0": "Home", + "d1": "Transaction", + "d2": "Wallets", + "d3": "Please enter search keywords", + "d4": "All", + "d5": "Motherboard", + "d6": "Total Value", + "d7": "Spot Account", + "d8": "Transfer", + "d9": "Search Coin", + "e0": "Hide", + "e1": "Balance Assets", + "e2": "Freeze", + "e3": "Valution", + "e4": "Derivatives Account", + "e5": "Contract conversion", + "e6": "Miner Level", + "e7": "Miner", + "wallet": "Wallet", + "f0": "Start your crypto journey", + "f1": "buy coins", + "f2": "Go now", + "f3": "Popular cryptocurrencies", + "f4": "name", + "f5": "Common Functions", + "f6": "Completed primary certification", + "f7": "Reserve Certificate", + "f8": "We are committed to achieving high transparency of funding status and maintaining a 1:1 reserve ratio for user assets", + "f9": "Bitcoin", + "g0": "average return", + "g1": "Create infinite possibilities", + "g2": "Start exploring", + "g3": "available for purchase", + "g4": "Available for sale", + "g5": "counterparty price", + "h1": "Bill" + }, + "accountSettings": { + "a0": "Account Settings", + "a1": "Portrait", + "a2": "Nickname", + "a3": "Master Account", + "a4": "Mobile Number", + "a5": "Untie", + "a6": "Binding", + "a7": "Mailbox binding", + "a8": "Switch account", + "a9": "Log Out", + "b0": "Modify Nickname", + "b1": "Please enter a nickname", + "b2": "Language", + "b3": "Contact Information", + "b4": "Routine Consultation", + "b5": "Customer Service", + "b6": "Media Cooperation", + "b7": "If you need any help,please contact us!" + }, + "assets": { + "a0": "Withdrawal address management", + "a1": "The address book can be used to manage your frequently used addresses. There is no need to perform multiple verifications when initiating withdrawals from addresses in the address book", + "a2": "Automatic withdrawal is supported. When using {name} to withdraw,only addresses in the web address book are allowed to initiate withdrawals", + "a3": "Delete Address", + "a4": "Add Address", + "a5": "Please select the address to delete", + "a6": "Whether to delete the currently selected address", + "a7": "Flowing Water", + "a8": "Total", + "a9": "Available", + "b0": "Freeze", + "b1": "Funding Account", + "b2": "Contract Account", + "b3": "Margin Account", + "b4": "Wealth Management Account", + "b5": "Please enter search keywords", + "b6": "Withdrawal", + "b7": "Please select the chain type", + "b8": "Withdraw Address", + "b9": "Please enter address", + "c0": "Quantity", + "c1": "Balance", + "c2": "Please enter the quantity", + "c3": "All", + "c4": "Handling Fee", + "c5": "Please double check and enter the correct wallet address for withdrawal", + "c6": "Sending non-corresponding digital currency to the wallet address will cause permanent loss", + "c7": "Withdrawal fees will be deducted from the amount of withdrawals", + "c8": "Withdrawal Record", + "c9": "Time", + "d0": "Status", + "d1": "Under review", + "d2": "Success", + "d3": "Failed", + "d4": "See more", + "d5": "Submitted successfully,under review", + "d6": "Edit", + "d7": "Add", + "d8": "Address", + "d9": "Please enter or paste the address", + "e0": "Remarks", + "e1": "Please enter a note", + "e2": "Please fill in the address", + "e3": "Please fill in the remarks", + "e4": "Operation successful", + "e5": "Deposit", + "e6": "Scan the QR code above to get the deposit address", + "e7": "coin deposit address", + "e8": "Amount of Deposit", + "e9": "Please enter the deposit amount", + "f0": "This address is your latest recharge address. When the system receives recharge,it will be automatically credited to the account", + "f1": "The transfer needs to be confirmed by the entire blockchain network. When it reaches {num} network confirmations,your {name} will be automatically deposit into the account", + "f2": "When a network is confirmed,yours", + "f3": "Please only send {name} to this address,sending other digital currencies to this address will cause permanent loss", + "f4": "Token Deposit Record" + }, + "auth": { + "a0": "Identity Authentication", + "a1": "Real-name authentication", + "a2": "Uncertified", + "a3": "Certified", + "a4": "Advanced Certification", + "a5": "Under review", + "a6": "Authentication failed", + "a7": "Nationality", + "a8": "Please select nationality", + "a9": "Real name", + "b0": "Please enter your real name", + "b1": "Certificate Number", + "b2": "Please enter the ID number", + "b3": "Confirm", + "b4": "Authentication successful", + "b5": "Please upload the front photo of the ID", + "b6": "Please upload the back of the certificate", + "b7": "Please upload a hand-held ID photo", + "b8": "Make sure the photo is clear without watermark,and the upper body is intact", + "b9": "The file size is too large and must not exceed", + "c0": "File type error", + "c1": "Uploaded successfully", + "c2": "Please upload a photo of the back of your ID", + "c3": "Please upload the front photo of your ID", + "c4": "Uploaded successfully,please wait for review", + "c5": "Date of birth", + "c6": "Document type", + "c7": "Residential address", + "c8": "Please enter residential address", + "c9": "Telephone number", + "d0": "Please enter a phone number", + "d1": "Driver's license", + "d2": "Passport", + "d3": "ID card", + "d4": "Select date", + "d5": "Please select" + }, + "exchange": { + "a0": "Spot Trading", + "a1": "Subscription", + "a2": "Derivatives", + "a3": "Transaction", + "a4": "Open Orders", + "a5": "History", + "a6": "Added successfully", + "a7": "Cancelled successfully", + "a8": "Total Issued", + "a9": "Total Circulation", + "b0": "Issue Price", + "b1": "Release time", + "b2": "White Paper Address", + "b3": "Official website address", + "b4": "Introduction", + "b5": "Buy", + "b6": "Sell", + "b7": "Order Price", + "b8": "Type", + "b9": "Limit Price Trading", + "c0": "Market Trading", + "c1": "Closed", + "c2": "Total", + "c3": "Buy", + "c4": "Sell", + "c5": "Quantity", + "c6": "Sold at the best market price", + "c7": "Total Price", + "c8": "Available Quantity", + "c9": "Total Value", + "d0": "Login", + "d1": "Time Sharing Chart", + "d2": "Price", + "d3": "Latest Transaction", + "d4": "Time", + "d5": "Direction", + "d6": "Limit Price", + "d7": "Market Price", + "d8": "Please enter the price", + "d9": "Please enter the quantity", + "e0": "Please enter the total price", + "e1": "Order successfully placed", + "e2": "Average Price", + "e3": "High", + "e4": "Low", + "e5": "amount", + "e6": "Order", + "e7": "Currency Information", + "e8": "Minutes", + "e9": "Hour", + "f0": "Day", + "f1": "Week", + "f2": "Month", + "f3": "Buying Price", + "f4": "Sell Price", + "f5": "Currency Trading", + "f6": "Please enter search keywords", + "f7": "Trading Pair", + "f8": "Latest Price", + "f9": "Rise and fall", + "g0": "Optional", + "g1": "My delegation", + "g2": "Cancel delegation", + "g3": "Operation", + "g4": "Cancel", + "g5": "Whether to cancel the current order", + "g6": "Undo successfully" + }, + "option": { + "a0": "Options", + "a1": "Distance delivery", + "a2": "See more", + "a3": "look empty", + "a4": "Yield", + "a5": "Buy", + "a6": "Multi", + "a7": "Empty", + "a8": "Current", + "a9": "Next Issue", + "b0": "Seeing Ping", + "b1": "Increase selection", + "b2": "Yield", + "b3": "Purchase Quantity", + "b4": "Please enter the quantity", + "b5": "Balance", + "b6": "Profit and loss", + "b7": "Buy Now", + "b8": "Increase", + "b9": "Flush", + "c0": "Fall", + "c1": "Successful purchase", + "c2": "Details", + "c3": "Order Number", + "c4": "Opening Price", + "c5": "Closing Price", + "c6": "Buy Time", + "c7": "Buy Quantity", + "c8": "Purchase Type", + "c9": "Status", + "d0": "Delivery Result", + "d1": "Settlement Quantity", + "d2": "Delivery Time", + "d3": "View more", + "d4": "Buy Option", + "d5": "Waiting for delivery", + "d6": "My Delivery", + "d7": "Delivery Record", + "d8": "Minutes", + "d9": "Hour", + "e0": "Day", + "e1": "Week", + "e2": "Month", + "e3": "Direction", + "e4": "Rise and fall" + }, + "purchase": { + "a0": "Issue Price", + "a1": "Subscription Currency", + "a2": "Estimated time to go online", + "a3": "Start time for purchase", + "a4": "End of Subscription Time", + "a5": "Purchase", + "a6": "Please select the purchase currency", + "a7": "Purchase Quantity", + "a8": "Please enter the purchase quantity", + "a9": "All", + "b0": "Subscribe now", + "b1": "Subscription Period", + "b2": "Project warm-up", + "b3": "Start purchase", + "b4": "End of Subscription", + "b5": "Announce Results", + "b6": "Project Details", + "b7": "Whether to use", + "b8": "Buy", + "b9": "Subscription is successful" + }, + "reg": { + "a0": "Mobile registration", + "a1": "Register Account", + "a2": "Email", + "a3": "Enter your email address", + "a4": "Email", + "a5": "Enter your email address", + "a6": "Email verification Code", + "a7": "Enter the email verification code", + "a8": "Password", + "a9": "Enter your password", + "b0": "Confirm your password", + "b1": "Confirm your password", + "b2": "Recommended person", + "b3": "Please enter the recommender", + "b4": "Optional", + "b5": "I have agreed", + "b6": "User Agreement", + "b7": "and understand ours", + "b8": "Privacy Agreement", + "b9": "Register", + "c0": "Already have an account", + "c1": "Log in now", + "c2": "Please read and agree to the agreement", + "c3": "Please fill in the phone number", + "c4": "Please fill in the mailbox number", + "c5": "Registered successfully", + "c6": "Institution Code (required)", + "c7": "Please fill in the institution code", + "c8": "Register now to start your cryptocurrency journey" + }, + "safe": { + "a0": "Untie", + "a1": "Binding", + "a2": "Mailbox", + "a3": "Mailbox Number", + "a4": "Please enter the mailbox number", + "a5": "Email Verification Code", + "a6": "Enter the verification code", + "a7": "Verification Code", + "a8": "Unbind successfully", + "a9": "Binding successful", + "b0": "Forgot login password", + "b1": "Account", + "b2": "Enter your email", + "b3": "New Password", + "b4": "Enter a new password", + "b5": "Confirm Password", + "b6": "Confirm your password", + "b7": "Confirm Modification", + "b8": "Please enter the correct phone or email number", + "b9": "Google Authenticator", + "c0": "How to: Download and open Google Authenticator,scan the QR code below or manually enter the secret key to add a verification token", + "c1": "Copy key", + "c2": "I have stored the key properly,and it will not be retrieved if it is lost", + "c3": "Next", + "c4": "SMS verification code", + "c5": "Google Verification Code", + "c6": "Confirm binding", + "c7": "Security Center", + "c8": "Login Password", + "c9": "Modify", + "d0": "Settings", + "d1": "Transaction Password", + "d2": "Mobile", + "d3": "Modified successfully", + "d4": "Mobile Number", + "d5": "Please enter your phone number", + "d6": "Please enter the SMS verification code", + "d7": "Close", + "d8": "Open", + "d9": "Verify", + "e0": "SMS", + "e1": "Closed successfully", + "e2": "Open successfully", + "e3": "Confirm", + "e4": "Set up successfully", + "Remembered": "Remembered your password?", + "e5": "Retrieve password" + + }, + "transfer": { + "a0": "Transfer Record", + "a1": "Success", + "a2": "Quantity", + "a3": "Direction", + "a4": "Funding Account", + "a5": "Contract Account", + "a6": "Margin Account", + "a7": "Wealth Management Account", + "a8": "Transfer", + "a9": "From", + "b0": "To", + "b1": "Transfer Currency", + "b2": "Balance", + "b3": "All", + "b4": "Transferred", + "b5": "Transfer Currency", + "a10": "222" + }, + "notice": { + "a0": "Details", + "a1": "Message Notification", + "a2": "Announcement", + "a3": "Message" + }, + "invite": { + "a0": "Purchase", + "a1": "Partner", + "a2": "Exclusive trading rebate", + "a3": "Ordinary user", + "a4": "My Identity", + "a5": "Exclusive Identity", + "a6": "My invitation code", + "a7": "Copy the invitation QR code", + "a8": "Copy invitation link", + "a9": "My Promotion", + "b0": "Total number of people to promote", + "b1": "People", + "b2": "Total income equivalent", + "b3": "Promotion Record", + "b4": "Direct invitation", + "b5": "Rebate Record", + "b6": "Level", + "b7": "Level Setting", + "b8": "Promotion Conditions", + "b9": "Dividend Rights", + "c0": "nickname", + "c1": "Number of Promotions", + "c2": "Earnings equivalent", + "c3": "Invitation Record", + "c4": "Rebate Record", + "c5": "Class rights description", + "c6": "Level", + "c7": "Equity", + "c8": "Description", + "c9": "My rights" + }, + "help": { + "a0": "Details", + "a1": "College", + "a2": "Classification", + "a3": "Learn" + }, + "login": { + "a0": "Email", + "a1": "Enter your email", + "a2": "Password", + "a3": "Enter your password", + "a4": "Log In ", + "a5": "Forgot Password", + "a6": "No account", + "a7": "Register Now", + "a8": "Mobile", + "a9": "mailbox", + "b0": "Done", + "b1": "Login account", + "b2": "Log in now to start your cryptocurrency journey", + "b3": "Email", + "b4": "Please enter your email" + }, + "contract": { + "a0": "Open Position", + "a1": "position", + "a2": "Open Orders", + "a3": "Order History", + "a4": "Contract Transaction", + "a5": "Opened successfully", + "a6": "Transaction Type", + "a7": "Filled", + "a8": "Amount", + "a9": "Avg.", + "b0": "Price", + "b1": "Margin", + "b2": "Fee", + "b3": "Status", + "b4": "Operation", + "b5": "Cancel order", + "b6": "Cancelled", + "b7": "Unsold", + "b8": "Partial deal", + "b9": "Full deal", + "c0": "Open long", + "c1": "Close", + "c2": "Open short", + "c3": "Close", + "c4": "Warm Reminder", + "c5": "Whether to cancel the current order", + "c6": "Undo successfully", + "c7": "Realized PNL", + "c8": "Share", + "c9": "Delegation Details", + "d0": "No data yet", + "d1": "Price", + "d2": "Margin", + "d3": "Deal time", + "d4": "Account Equity", + "d5": "Unrealized profit and loss", + "d6": "Risk Rate", + "d7": "Market Price", + "d8": "USDT", + "d9": "Occupy Margin", + "e0": "buy", + "e1": "Can open more", + "e2": "sell", + "e3": "Can open empty", + "e4": "Available Funds", + "e5": "Transfer", + "e6": "Fund Rate", + "e7": "Distance settlement", + "e8": "Buy", + "e9": "opening price", + "f0": "Funds Transfer", + "f1": "Calculator", + "f2": "About the contract", + "f3": "Risk Protection Fund", + "f4": "Fund Expense History", + "f5": "Ordinary Commission", + "f6": "Market Order", + "f7": "Whether to use", + "f8": "The price", + "f9": "Open position with double leverage", + "g0": "Buy", + "g1": "Sell", + "g2": "Delegation successful", + "g3": "Only display the current contract", + "g4": "Amountable to level", + "g5": "Delegated Freeze", + "g6": "average opening price", + "g7": "Settlement Base Price", + "g8": "Liq Price", + "g9": "Settled income", + "h0": "rate of return", + "h1": "Stop Profit", + "h2": "Stop Loss", + "h3": "close the position", + "h4": "The market price is flat", + "h5": "Take Profit and Stop Loss", + "h6": "flat", + "h7": "Please enter the closing price", + "h8": "Limit Price", + "h9": "Please enter the closing quantity", + "i0": "Can flat", + "i1": "Average opening price", + "i2": "Latest Transaction Price", + "i3": "Please enter the price", + "i4": "Take Profit", + "i5": "Market price to", + "i6": "Take profit order will be triggered at the time,and profit and loss is expected after the transaction", + "i7": "stop loss", + "i8": "A stop loss order will be triggered at the time,and profit and loss is expected after the transaction", + "i9": "OK", + "j0": "Successfully closed position", + "j1": "Whether the market price is flat", + "j2": "Quan Ping", + "j3": "Success", + "j4": "Setup successful", + "j5": "Magic calculation,unmatched", + "j6": "Do", + "j7": "Close price", + "j8": "Digital asset trading platform", + "j9": "When {name1} meets {name2} {name3}’s fiery road to ascendance", + "k0": "Opening price", + "k1": "Latest Price", + "k2": "Scan the code to learn more", + "k3": "Settlement profit and loss", + "k4": "The screenshot is successful and has been saved locally", + "k5": "Screenshot failed", + "k6": "Long press to take screenshot", + "k7": "Close All Positions", + "k8": "One-key reverse", + "k9": "Whether one-key full leveling", + "l0": "Completely successful", + "l1": "Whether to reverse with one key", + "l2": "Reverse success", + "l3": "Close" + }, + "otc": { + "a0": "Post an ad", + "a1": "Order", + "a2": "Trading currency", + "a3": "My Order", + "a4": "My Ads", + "a5": "Buy", + "a6": "Sale", + "a7": "Total", + "a8": "Remaining", + "a9": "Limited", + "b0": "Unit Price", + "b1": "Payment Method", + "b2": "Operation", + "b3": "Total", + "b4": "Please choose a payment method", + "b5": "Please enter the quantity", + "b6": "Place an order", + "b7": "Alipay", + "b8": "WeChat", + "b9": "Bank Card", + "c0": "Order successfully placed", + "c1": "Status", + "c2": "Advertisement Number", + "c3": "Total Price", + "c4": "Quantity", + "c5": "Release time", + "c6": "Remove", + "c7": "Cancelled", + "c8": "In transaction", + "c9": "Completed", + "d0": "Warm Reminder", + "d1": "Whether to remove the current ad", + "d2": "OK", + "d3": "Cancel", + "d4": "Undo successfully", + "d5": "Fiat currency account", + "d6": "Freeze", + "d7": "Alipay Account", + "d8": "Please enter the account number", + "d9": "Name", + "e0": "Please enter your name", + "e1": "Payment Code", + "e2": "Binding", + "e3": "WeChat Account", + "e4": "Bank Name", + "e5": "Please enter the bank name", + "e6": "Account Opening Branch", + "e7": "Please enter the account opening branch", + "e8": "Bank Card Number", + "e9": "Please enter the bank card number", + "f0": "Edited successfully", + "f1": "Added successfully", + "f2": "Sell", + "f3": "Buy", + "f4": "Order Details", + "f5": "Order Number", + "f6": "Account", + "f7": "Account Bank", + "f8": "Remaining time", + "f9": "Min", + "g0": "Second", + "g1": "Upload payment voucher", + "g2": "Confirm payment", + "g3": "Cancel order", + "g4": "Confirm Payment", + "g5": "Unpaid account", + "g6": "Whether to cancel the current order", + "g7": "Order has been cancelled", + "g8": "Confirm the current payment", + "g9": "Operation successful", + "h0": "After the payment is confirmed,the listed assets will be automatically transferred", + "h1": "After confirming that the payment has not been received,this order will automatically enter the appeal", + "h2": "Sell Order", + "h3": "Purchase Order", + "h4": "Advertising Purchase Order", + "h5": "Advertising Sale Order", + "h6": "Time", + "h7": "Details", + "h8": "All", + "h9": "Closed", + "i0": "Pending Payment", + "i1": "To be confirmed", + "i2": "Appealing", + "i3": "Ad Type", + "i4": "Please select transaction type", + "i5": "Please select the transaction currency", + "i6": "Price", + "i7": "Please enter the price", + "i8": "Lowest Price", + "i9": "Please enter the lowest price", + "j0": "Highest price", + "j1": "Please enter the highest price", + "j2": "Remarks", + "j3": "Please enter a note", + "j4": "Release", + "j5": "Posted successfully", + "j6": "Payment method", + "j7": "Minimum Quantity", + "j8": "Maximum amount", + "j9": "Please enter the minimum transaction volume", + "k0": "Please enter the highest transaction volume" + }, + "first": { + "a0": "Go to real name", + "a1": "Contact Us", + "a2": "Welcome!", + "a3": "TP/SL for position", + "a4": "Trade at current latest price", + "a5": "Positions", + "a6": "Order management", + "a7": "Open Orders", + "a8": "Order History", + "a9": "multiple", + "b0": "Are you sure you want to log out?", + "b1": "Sign in or register", + "b2": "Hi,welcome to Moabcoin", + "b3": "amount", + "b4": "spot index ", + "b5": "Contract index", + "b6": "Support multiple ways", + "b7": "Buy coins", + "b8": "Swap", + "b9": "The current area is not open yet", + "c0": "purchase", + "c1": "sell out", + "c2": "time", + "c3": "Total price", + "c4": "quantity", + "c5": "Latest price", + "c6": "Encumbered assets", + "c7": "Turnover" + }, + "recharge": { + "a0": "Switch currency", + "a1": "*Address change can only receive", + "a2": "If you recharge your assets in other currencies,you will not be able to retrieve them!", + "a3": "Erc20 is recommended for collection", + "a4": "Copy address", + "a5": "*Please make sure that the address and information are correct before transfer! Once transferred out,it is irrevocable!", + "a6": "Please regenerate" + }, + "currency": { + "a0": "Legal currency transaction", + "a1": "Buy", + "a2": "Sell", + "a3": "One click coin buying", + "a4": "One click coin selling", + "a5": "Purchase by quantity", + "a6": "Purchase by amount", + "a55": "sell by quantity", + "a66": "sell by amount", + "a7": "Please enter the purchase quantity", + "a8": "Please enter the purchase amount", + "a9": "Please enter the quantity for sale", + "b0": "Please enter the sale amount", + "b1": "Unit Price", + "b2": "0 handling charge purchase", + "b3": "0 commission sale", + "b4": "Insufficient available balance", + "b5": "Please complete advanced certification first", + "b6": "De authentication", + "b7": "Confirm purchase", + "b8": "Confirm sale" + }, + "shou": { + "a0": "Recharge the account", + "a1": "Add cryptocurrency funds to your wallet", + "a2": "And start trading immediately", + "a3": "Recharge now", + "a4": "Global digital asset trading platform", + "a5": "Make encrypted asset transactions easier", + "a6": "Sign up now", + "a7": "Digital Asset Market Express", + "a8": "Market Trend", + "a9": "Currency", + "a10": "Latest Price (USD)", + "a11": "24h increase", + "a12": "24h transaction volume", + "a13": "Top 10", + "a14": "5 million+", + "a15": "< 0.10%", + "a16": "200+", + "a17": "Global Ranking", + "a18": "users trust us", + "a19": "Ultra-Low Fees", + "a20": "Countries", + "a21": "Multi-terminal support", + "a22": "Trade digital assets anytime,anywhere", + "a23": "Supports a wide range of asset types,with all currency information", + "a24": "APP Store", + "a25": "Android APK", + "a26": "Scan code to download APP", + "a27": "iOS & Android", + "a28": "Why choose xuscoin.com?", + "a29": "Strive to provide digital asset trading services for multiple countries", + "a30": "Simple and convenient trading of encrypted assets", + "a31": "The product is easy to understand,the transaction process is convenient,and the one-stop blockchain asset service platform", + "a32": "Based on user experience,provide pleasant encryption service experience", + "a33": "Serving global multilingual regions,becoming a gateway for all users to enter the encrypted world", + "a34": "Safety and stability with zero accidents", + "a35": "Multiple security strategy guarantees,100% reserve fund guarantee,no security incidents have occurred since its establishment", + "a36": "Optimal transaction fee rate", + "a37": "Preferential transaction rates,competitive VIP rights,enjoy the highest quality service", + "a38": "Beginner's Guide", + "a39": "Quickly understand the digital asset transaction process", + "a40": "earn income immediately", + "a41": "Click to go", + "a42": "XUScoin Cryptocurrency Trading Platform - Designed for Everyone", + "a43": "Start the encryption journey" + }, + "homeNewText": { + "aa3": "Register now and start your cryptocurrency journey", + "aa4": "Start trading immediately", + "aa7": "Currency", + "aa8": "Login/Register", + "bb1": "Latest price (USD)", + "bb2": "24h increase", + + "bb4": "The future of money is here", + "bb5": "We are the most trusted place for investors to buy, sell and manage cryptocurrencies", + "bb6": "Register by email", + "bb7": "Easily capture", + "bb8": "Trading opportunities", + "bb9": "Easy to use cryptocurrencies", + "bb10": "Tools", + "bb11": "We regularly work on updating existing features and implementing new service features.", + "bb12": "Business crypto processing", + "bb13": "Provide a reliable way to easily accept payments from the most popular cryptocurrencies around the world.", + "bb14": "Unlimited cryptocurrency exchange", + "bb15": "Exchange Bitcoin, Tether, Litecoin, Ethereum and more than 50 other coins in a simple and secure way.", + "bb16": "Optimize user experience", + "bb17": "Optimize user experience: launch high-quality new products, simplify operations and improve ease of use.", + "bb18": "Quick charge and withdrawal", + "bb19": "Our partners", + "bb20": "All over the world", + "bb21": "Our partners are market leaders who help us provide the best cryptocurrency solutions.", + "bb22": "Beginner's Guide", + "bb23": "Create an {name} account", + "bb24": "Register now and start your trading journey!", + "bb25": "Register", + "bb26": "Deposit", + "bb27": "Quick top-up, easy deposit!", + "bb28": "Top-up", + "bb29": "Start trading", + "bb30": "Start trading and enjoy unlimited possibilities!", + "bb31": "Coin-to-coin trading", + "bb32": "Start trading anytime, anywhere", + "bb33": "Scan and download", + "bb34": "Start your crypto journey now!", + "bb35": "Register and start trading in just 10 seconds", + "bb36": "Free registration", + "bb37": "Top-up and withdrawal can be completed in as fast as 3 minutes.", + "bb38": "Register now", + "bb39": "Trade now", + "bb40": "{name}, trade anytime, anywhere", + "bb41": "Scan the code to download the {name} APP", + "bb42": "Scan the code to download the APP" + } +} \ No newline at end of file diff --git a/i18n/lang/fin.json b/i18n/lang/fin.json new file mode 100644 index 0000000..22ac6e3 --- /dev/null +++ b/i18n/lang/fin.json @@ -0,0 +1,788 @@ +{ + "common": { + "D":"päivä", + "M":"kuukausi", + "Y":"vuosi", + "add":"Lisää lisää", + "address":"Osoite", + "all":"Kaikki", + "amout":"numero", + "cancel":"peruuta", + "check":"tutkittavaksi ottaminen", + "code":"Tarkastuksen koodi", + "confirm":"määrittää", + "date":"päivämäärä", + "detail":"yksityiskohdat", + "email":"postilaatikko", + "enter":"Syötä, ole hyvä.", + "error":"epäonnistuu", + "getCode":"Hanki tarkastuskoodi", + "h":"Aika", + "loadMore":"Lataa enemmän", + "m":"haara", + "money":"rahan määrä", + "more":"enemmän", + "notData":"Tietoja ei ole saatavilla", + "notMore":"Ei enää", + "phone":"matkapuhelin (matkapuhelin)", + "requestError":"Verkko on varattu. Yritä myöhemmin uudelleen", + "s":"toinen", + "save":"säilyttäminen", + "select":"Ole hyvä ja valitse", + "sendSuccess":"Lähetetty onnistuneesti", + "sms":"lyhyt viesti", + "submit":"Lähetä", + "success":"menestys", + "tips":"muistutus", + "total":"yhteensä", + "type":"tyyppi", + "copy":"Kopio", + "light":"valkoinen", + "dark":"musta", + "service":"Asiakkaiden palvelut", + "toDwon":"Haluatko mennä latauksen sivulle@ info: whatsthis", + "a0":"Syötä osto- koodi@ info: whatsthis", + "a1":"Kopio onnistui", + "a2":"Kopio epäonnistui", + "a3":"Ostosta koskevat tiedot", + "a4":"Maksun määrä", + "a5":"Saadut määrät", + "a6":"tilin numero", + "a7":"Purkamisen määrä", + "a8":"Maksun tosite", + "a9":"Syötä ladattava määrä", + "b0":"Ole hyvä ja lataa maksukuponki", + "b1": "osto{amount}Palaset{name}Saatavilla Token{rate}%Répalkkio", + "b2":"Tilaus- ja tilaustoiminta", + "b3":"Tallennettu onnistuneesti", + "b4":"Tallenna epäonnistui", + "b5":"Kutsu lähettäjä", + "b6":"Valitse juliste", + "b8":"Avauksen aika", + "b9":"Aika lopettaa.", + "c0":"Latauksen vähimmäismäärä: {num}. Vähimmäismäärää pienempää latausta ei julkaista eikä sitä voida palauttaa", + "c1":"Peruuttamisen vähimmäismäärä", + "c2":"Version numero", + "c3":"Avoin", + "c4":"Arvioitu marginaali", + "c5": "Siirtotilauksesi on toimitettu onnistuneesti, odota kärsivällisesti, ja siirron tulos ilmoitetaan tekstiviestillä tai sähköpostilla. Tarkista se huolellisesti. Jos sinulla on kysyttävää, ota yhteyttä asiakaspalveluun ajoissa." + }, + "base": { + "a0":"otsikko", + "a1":"paluu", + "a2":"enemmän", + "a3":"noteeraus", + "a4":"vaihtoehto", + "a5":"Uusi alue", + "a6":"jäsen", + "a7":"korkeakoulu", + "a8":"Sovitaan näin.", + "a9":"Viimeisin hinta", + "b0":"Ylös ja alas", + "b1":"Napsauta kirjautumista", + "b2":"Tervetuloa osoitteeseen", + "b3":"Kirjaudu sisään", + "b4":"Päivitä", + "b5":"Rahan maksu", + "b6":"Rahan nosto", + "b7":"laajennus", + "b8":"Palvelusta perittävän maksun vähentäminen", + "b9":"saatavilla", + "c0":"osto", + "c1":"Minun provisioni", + "c2":"henkilöllisyyden todentaminen", + "c3":"Turvallisuus- keskus", + "c4":"Viestien ilmoittaminen", + "c5":"Peruuttamisen osoite", + "c6":"on perustettu", + "c7":"Valinnainen", + "c8":"Lisää onnistuneesti", + "c9":"Peruuta onnistuneesti", + "d0":"home page", + "d1":"transactie", + "d2":"activa", + "d3":"Voer zoekwoorden in", + "d4":"koko", + "d5":"päälauta (päälauta)", + "d6":"Vastaavat saamiset yhteensä", + "d7":"Oma pääoma", + "d8":"Siirto", + "d9":"Etsi valuutta", + "e0":"piilottaa", + "e1":"Taseen loppusumma", + "e2":"jäädytetty", + "e3":"Vastaava", + "e4":"Sopimusta koskeva tili", + "e5":"Sopimusten muuntaminen", + "e6":"Mineraanien luokka", + "e7":"kaivosmies" + }, + "accountSettings": { + "a0":"Tilin asetukset", + "a1":"pää muotokuva", + "a2":"Lempinimi?", + "a3":"Tilin numero", + "a4":"matkapuhelimen numero", + "a5":"Irtisanominen", + "a6":"sidonta", + "a7":"Postilaatikko sitova", + "a8":"Tilien vaihto", + "a9":"Kirjaudu ulos", + "b0":"Muuta nimimerkkiä", + "b1":"Anna nimimerkki@ info: whatsthis", + "b2":"kieli" + }, + "assets": { + "a0":"Peruuttamisen osoitteen hallinnointi", + "a1":"Osoitekirjaa voidaan käyttää hallinnoimaan yhteisiä osoitteita, ja ei ole tarpeen suorittaa useita tarkastuksia, kun otetaan rahaa osoitteesta osoitekirjassa, ja", + "a2":"Automaattinen valuutasta luopuminen on tuettu. Kun {nimi} käytetään, ainoastaan osoitekirjassa olevat osoitteet saavat aloittaa valuutasta luopumisen.", + "a3":"Poista osoite", + "a4":"Lisää osoite", + "a5":"Ole hyvä ja valitse poistettava osoite", + "a6":"Poista valittu osoite", + "a7":"Virtaava vesi", + "a8":"yhteensä", + "a9":"saatavilla", + "b0":"jäädytetty", + "b1":"Oma pääoma", + "b2":"Sopimusta koskeva tili", + "b3":"Vivujen tili", + "b4":"Taloudellinen tili", + "b5":"Syötä hakusanat@ info: whatsthis", + "b6":"Rahan nosto", + "b7":"Valitse ketjutyyppi@ info: whatsthis", + "b8":"Peruuttamisen osoite", + "b9":"Syötä osoite@ info: whatsthis", + "c0":"numero", + "c1":"tase", + "c2":"Syötä määrä", + "c3":"koko", + "c4":"Palvelun lataus", + "c5":"Tarkista huolellisesti ja anna lompakkoon oikea osoite", + "c6":"Tallettamattoman digitaalisen valuutan lähettäminen lompakkoosoitteeseen aiheuttaa pysyvän tappion", + "c7":"Käsittelymaksu vähennetään siitä rahamäärästä, joka on otettu pois markkinoilta", + "c8":"Irtisanomisen kirjaaminen", + "c9":"aika", + "d0":"valtio", + "d1":"Tarkasteltavana oleva", + "d2":"menestys", + "d3":"epäonnistuu", + "d4":"Katso lisää", + "d5":"Toimitettu onnistuneesti, uudelleentarkastelun kohteena", + "d6":"editointi", + "d7":"Lisää lisää", + "d8":"Osoite", + "d9":"Syötä tai liitä osoite", + "e0":"huomautukset", + "e1":"Syötä kommentit@ info: whatsthis", + "e2":"Ole hyvä ja täytä osoite", + "e3":"Olkaa hyvä ja täyttäkää huomautukset.", + "e4":"Operaatio onnistui", + "e5":"Rahan maksu", + "e6":"Skannaa yllä oleva QR- koodi saadaksesi latauksen osoitteen", + "e7":"Latauksen osoite", + "e8":"Maksettujen metallirahojen lukumäärä", + "e9":"Syötä veloitetun valuutan määrä", + "f0":"Tämä osoite on viimeisin lataussivu. Kun järjestelmä vastaanottaa latauksen, se tallennetaan automaattisesti", + "f1":"Siirto on vahvistettava koko ketjuverkon kautta. Kun saavut {num} verkon vahvistumiseen, sinun {nimi} talletetaan automaattisesti tilille.", + "f2":"Kun verkko on vahvistettu, sinun", + "f3":"Lähettäkää vain {nimi} tähän osoitteeseen. Muun digitaalisen valuutan lähettäminen tähän osoitteeseen aiheuttaa pysyvän tappion", + "f4":"Latauksen tietue" + + }, + "auth": { + "a0":"henkilöllisyyden todentaminen", + "a1":"Oikea nimi", + "a2":"Ei sertifioitu", + "a3":"Varmennettu", + "a4":"Kehittynyt varmentaminen", + "a5":"Tarkasteltavana oleva", + "a6":"Tunnistaminen epäonnistui", + "a7":"kansalaisuus", + "a8":"Valitse oma kansallisuutesi", + "a9":"Oikea nimi", + "b0":"Anna oikea nimesi", + "b1":"Tunnistusnumero@ info: whatsthis", + "b2":"Syötä ID- numero", + "b3":"vahvistus", + "b4":"Sertifiointi onnistui", + "b5":"Ole hyvä ja lataa etusivu henkilökorttistasi", + "b6":"Ole hyvä ja lataa varmenteen takaosa", + "b7":"Lataa kädessäsi oleva ID- kuva", + "b8":"Varmista, että kuva on puhdas ilman vesileimaa ja ylävartalo on ehjä.", + "b9":"Tiedoston koko on liian suuri eikä voi ylittää", + "c0":"Tiedoston tyypin virhe", + "c1":"Lähetys onnistui", + "c2":"Ole hyvä ja lataa kuva todistuksen takaosaan", + "c3":"Ole hyvä ja lataa etusivu henkilökorttistasi", + "c4":"Lähetys onnistui, odota tarkastusta@ info: whatsthis" + }, + "exchange": { + "a0":"Kolikot", + "a1":"hakea muutosta", + "a2":"sopimus", + "a3":"tapahtuma", + "a4":"Nykyinen delegointi", + "a5":"Historiallinen komissio", + "a6":"Lisää onnistuneesti", + "a7":"Peruuta onnistuneesti", + "a8":"Liikkeeseen laskeminen yhteensä", + "a9":"Kierre yhteensä", + "b0":"Liikkeeseenlaskun hinta", + "b1":"Liikkeeseenlaskun kellonaika", + "b2":"Valkoisen paperin osoite", + "b3":"Virallinen verkkosivuston osoite", + "b4":"lyhyt esittely", + "b5":"osto", + "b6":"Myy", + "b7":"Komission hinta", + "b8":"tyyppi", + "b9":"Hintojen rajakauppa", + "c0":"Markkinoiden liiketoimi", + "c1":"Suljettu", + "c2":"yhteensä", + "c3":"osto", + "c4":"Myy loppuun", + "c5":"numero", + "c6":"Lähellä parhaaseen markkinahintaan@ info: whatsthis", + "c7":"Hinta yhteensä", + "c8":"Käytettävissä oleva määrä", + "c9":"bruttoarvo (bruttoarvo)", + "d0":"Kirjaudu sisään.", + "d1":"Ajan jakamisen kaavio", + "d2":"Hinta", + "d3":"Viimeisin sopimus", + "d4":"aika", + "d5":"suunta", + "d6":"kiinteä hinta", + "d7":"markkinahinta (markkinahinta)", + "d8":"Olkaa hyvä ja ilmoittakaa hinta.", + "d9":"Syötä määrä", + "e0":"Syötä täydellinen hinta@ info: whatsthis", + "e1":"Checkout menestys", + "e2":"Keskimääräinen hinta", + "e3":"korkein", + "e4":"vähimmäismäärä", + "e5":"määrä", + "e6":"Järjestys", + "e7":"Valuutta koskevat tiedot", + "e8":"minuutti", + "e9":"tunti", + "f0":"päivä", + "f1":"viikko", + "f2":"kuukausi", + "f3":"Hankinnan hinta", + "f4":"Myynnin hinta", + "f5":"Valuutta transaktio", + "f6":"Syötä hakusanat@ info: whatsthis", + "f7":"Sovitaan näin.", + "f8":"Viimeisin hinta", + "f9":"Ylös ja alas", + "g0":"Valinnainen", + "g1":"Minun provisioni", + "g2":"Tehtävän peruuttaminen", + "g3":"toiminta", + "g4":"kumoa", + "g5":"Peruuta nykyinen delegaatio", + "g6":"Peruutettu onnistuneesti" + }, + "option": { + "a0":"vaihtoehto", + "a1":"Etäisyyden toteutuminen", + "a2":"Katso lisää", + "a3":"Ole karhunkainen", + "a4":"Palautuksen määrä", + "a5":"osto", + "a6":"monia", + "a7":"tyhjä", + "a8":"nykyinen", + "a9":"Seuraava numero", + "b0":"Katso litteä", + "b1":"Hintojen nousun valinta", + "b2":"Palautuksen määrä", + "b3":"Hankinnan määrä", + "b4":"Syötä määrä", + "b5":"tase", + "b6":"Odotetut tulot", + "b7":"Osta nyt.", + "b8":"nousu", + "b9":"tasainen", + "c0":"putoaminen", + "c1":"Onnistunut osto", + "c2":"yksityiskohdat", + "c3":"tilauksen numero", + "c4":"Avattu hinta", + "c5":"Lopullinen hinta", + "c6":"Ajan ostaminen", + "c7":"Hankinnan määrä", + "c8":"Oston tyyppi", + "c9":"valtio", + "d0":"Lopputulos@ info: whatsthis", + "d1":"Selvityksen määrä", + "d2":"Toimitusaika@ info: whatsthis", + "d3":"Katso lisää", + "d4":"Osto optio", + "d5":"Odottaa toimitusta", + "d6":"Minun toimitukseni.", + "d7":"Toimituksen tietue", + "d8":"minuutti", + "d9":"tunti", + "e0":"päivä", + "e1":"viikko", + "e2":"kuukausi", + "e3":"suunta", + "e4":"Ylös ja alas" + }, + "purchase": { + "a0":"Liikkeeseenlaskun hinta", + "a1":"Osakkuuden valuutta", + "a2":"Odotettu online-aika", + "a3":"Tilauksen alkamisajankohta", + "a4":"Aika lopettaa.", + "a5":"hakea muutosta", + "a6":"Olkaa hyvä ja valitkaa merkintävaluutta", + "a7":"Hankinnan määrä", + "a8":"Syötä määrä@ info: whatsthis", + "a9":"koko", + "b0":"Täytä välittömästi", + "b1":"Tilauksen sykli", + "b2":"Projektin lämmittäminen", + "b3":"Aloita tilaus", + "b4":"Sulje tilaus", + "b5":"Tulosten julkaiseminen", + "b6":"Hankkeen yksityiskohdat", + "b7":"Käyttö tai ei", + "b8":"osto", + "b9":"Onnistunut osto" + }, + "reg": { + "a0":"Liikkuva rekisteröinti", + "a1":"Sähköpostin rekisteröinti", + "a2":"matkapuhelin (matkapuhelin)", + "a3":"Syötä matkapuhelimen numero@ info: whatsthis", + "a4":"postilaatikko", + "a5":"Anna sähköpostiosoitteesi numero@ info: whatsthis", + "a6":"Tarkastuksen koodi", + "a7":"Syötä todentamiskoodi@ info: whatsthis", + "a8":"salasana", + "a9":"Syötä salasana@ info: whatsthis", + "b0":"Vahvista salasana", + "b1":"Vahvista salasana@ info: whatsthis", + "b2":"Viitteet", + "b3":"Syötä ohje@ info: whatsthis", + "b4":"Valinnainen", + "b5":"Olet suostunut.", + "b6":"Käyttäjän sopimus", + "b7":"Ja oppia meistä", + "b8":"Yksityisyyttä koskeva sopimus", + "b9":"rekisteri", + "c0":"Olemassa olevan tilin numero", + "c1":"Allekirjoitus nyt.", + "c2":"Olkaa hyvä ja lukekaa ja hyväksykää sopimus.", + "c3":"Ole hyvä ja täytä matkapuhelimen numero", + "c4":"Ole hyvä ja täytä sähköpostinumero", + "c5":"kirjautuminen onnistui" + }, + "safe": { + "a0":"Irtisanominen", + "a1":"sidonta", + "a2":"postilaatikko", + "a3":"Sähköposti nro", + "a4":"Anna sähköpostiosoitteesi numero@ info: whatsthis", + "a5":"Sähköpostin tarkistuskoodi", + "a6":"Syötä todentamiskoodi@ info: whatsthis", + "a7":"Tarkastuksen koodi", + "a8":"Vapauttaminen onnistui", + "a9":"Sidonta onnistui", + "b0":"Unohda salasana", + "b1":"tilin numero", + "b2":"Olkaa hyvä ja syöttäkää matkapuhelin", + "b3":"Uusi salasana", + "b4":"Anna uusi salasana@ info: whatsthis", + "b5":"Vahvista salasana", + "b6":"Vahvista salasana@ info: whatsthis", + "b7":"Vahvista muutos", + "b8":"Syötä oikea matkapuhelimen tai sähköpostin numero", + "b9":"Googlen todentaja", + "c0":"Miten se tehdään: Lataa ja avaa Googlen todentaja, skannaa alla alla oleva QR-koodi tai kirjoita käsin salainen avain lisätäksesi varmennusmerkin", + "c1":"Kopioi avain", + "c2":"Olen pitänyt avaimeni oikein, mutta jos menetän sen, sitä ei saada takaisin.", + "c3":"Seuraava vaihe", + "c4":"tekstiviestien tarkistuskoodi", + "c5":"Google captcha", + "c6":"Vahvista sitoutuminen", + "c7":"Turvallisuus- keskus", + "c8":"Kirjautumisen salasana", + "c9":"muuttaa", + "d0":"on perustettu", + "d1":"Tapahtuman koodi", + "d2":"matkapuhelin (matkapuhelin)", + "d3":"Muokattu onnistuneesti", + "d4":"matkapuhelimen numero", + "d5":"Syötä matkapuhelimen numero@ info: whatsthis", + "d6":"Syötä tekstiviestien tarkistuskoodi", + "d7":"Sulje", + "d8":"avoin", + "d9":"todentaminen", + "e0":"lyhyt viesti", + "e1":"Suljettu onnistuneesti", + "e2":"Avaa onnistuneesti", + "e3":"vahvistus", + "e4":"Aseta onnistuneesti" + }, + "transfer": { + "a0":"Siirtoa koskeva tietue", + "a1":"menestys", + "a2":"numero", + "a3":"suunta", + "a4":"Tilin varat", + "a5":"Sopimusta koskeva tili", + "a6":"Vivujen tili", + "a7":"Taloudellinen tili", + "a8":"Siirto", + "a9":"mistä", + "b0":"ja", + "b1":"Siirto valuutta", + "b2":"tase", + "b3":"koko", + "b4":"Siirretty" + }, + "notice": { + "a0":"yksityiskohdat", + "a1":"Viestien ilmoittaminen", + "a2":"Ilmoitus", + "a3":"Uutiset" + }, + "invite": { + "a0":"Nauti kaupan alennuksesta ja kutsu ystäviä", + "a1":"kumppani", + "a2":"Nauti kaupan alennuksesta", + "a3":"Tavalliset käyttäjät", + "a4":"Minun henkilöllisyyteni", + "a5":"Nauti identiteetistäsi", + "a6":"Minun kutsukoodini", + "a7":"Kopioi kutsu QR- koodi", + "a8":"Kopioi kutsulinkki", + "a9":"Minun ylennykseni", + "b0":"Ylennyksen kokonaismäärä", + "b1":"ihmiset", + "b2":"Tulojen yhteismäärä", + "b3":"Mainonnan tiedot", + "b4":"Suora kutsu", + "b5":"Palautetun komission tiedot", + "b6":"Luokka", + "b7":"Tason asetus", + "b8":"Ylennyksen edellytykset", + "b9":"Osinkojen korot", + "c0":"Lempinimi?", + "c1":"Hankkeen toteuttajien lukumäärä", + "c2":"Tulojen muuntaminen", + "c3":"Kutsujen ennätys", + "c4":"Palautetun komission tiedot", + "c5":"Luokan osuuksien kuvaus", + "c6":"Luokka", + "c7":"Oikeudet ja edut", + "c8":"selittää", + "c9":"Oikeuteni ja etuni" + }, + "help": { + "a0":"yksityiskohdat", + "a1":"korkeakoulu", + "a2":"luokitus" + }, + "login": { + "a0":"Matkapuhelimen tai sähköpostin numero", + "a1":"Syötä matkapuhelimen tai sähköpostin numero", + "a2":"salasana", + "a3":"Syötä salasana@ info: whatsthis", + "a4":"Kirjaudu sisään.", + "a5":"Unohda salasana", + "a6":"Ei tiliä", + "a7":"Rekisteröidy nyt", + "a8":"matkapuhelin (matkapuhelin)", + "a9":"postilaatikko", + "b0":"täydellinen" + }, + "contract": { + "a0":"avata viljavarasto avun antamiseksi", + "a1":"Sijainti", + "a2":"tehtävä", + "a3":"historia", + "a4":"Sopimusta koskeva liiketoimi", + "a5":"Onnistunut avautuminen", + "a6":"Tapahtuman tyyppi", + "a7":"Suljettu", + "a8":"Luotettu kokonaismäärä", + "a9":"Keskimääräinen transaktiohinta", + "b0":"Komission hinta", + "b1":"sidos", + "b2":"Palvelun lataus", + "b3":"valtio", + "b4":"toiminta", + "b5":"peruuta tilaus", + "b6":"peruutettu", + "b7":"Levoton", + "b8":"Osittainen tapahtuma", + "b9":"Kaikki kiinni.", + "c0":"Kaiduo.", + "c1":"PingkongName", + "c2":"Avoin ilma", + "c3":"PintoName", + "c4":"muistutus", + "c5":"Peruuta nykyinen järjestys", + "c6":"Peruutettu onnistuneesti", + "c7":"Voitto ja tappio", + "c8":"osake", + "c9":"Tehtävää koskevat tiedot", + "d0":"Tietoja ei ole saatavilla", + "d1":"Hinta", + "d2":"numero", + "d3":"Tapahtuman aika", + "d4":"Käyttäjien oikeudet", + "d5":"Selvittämätön voitto ja tappio", + "d6":"Riskien määrä", + "d7":"markkinahinta (markkinahinta)", + "d8":"Zhang.", + "d9":"Talletuksen kesto", + "e0":"Kiusaaja", + "e1":"Voit avata enemmän", + "e2":"Parta", + "e3":"Avaa tyhjä", + "e4":"saatavilla", + "e5":"Siirto", + "e6":"Oma pääoma", + "e7":"Etäisyyden selvittäminen", + "e8":"monia", + "e9":"tyhjä", + "f0":"Varojen siirto", + "f1":"Laskenta", + "f2":"Sopimuksen suhteen", + "f3":"Riskien suojelurahasto", + "f4":"Pääoman kustannushistoria", + "f5":"Yleinen toimeksianto", + "f6":"markkinoiden järjestys", + "f7":"Onko se perustuu", + "f8":"Sen hinta", + "f9":"Kaksinkertainen velkaantuminen", + "g0":"Kaiduo.", + "g1":"Avoin ilma", + "g2":"Onnistunut komissio", + "g3":"Näytä vain nykyinen sopimus", + "g4":"Kepping", + "g5":"tehtävä", + "g6":"Keskimääräinen avaamisen hinta", + "g7":"Selvityksen viitehinta", + "g8":"Arvio vahvasta pariteetista", + "g9":"Selvitetyt tulot", + "h0":"Palautuksen määrä", + "h1":"Keskeytä voitto", + "h2":"Keskeytä tappio", + "h3":"Sulje sijainti", + "h4":"Markkinahinta on kiinteä", + "h5":"Lopeta voitto ja lopeta tappio", + "h6":"tasainen", + "h7":"Olkaa hyvä ja ilmoittakaa myyntihinta", + "h8":"kiinteä hinta", + "h9":"Syötä lopullinen määrä@ info: whatsthis", + "i0":"Kepping", + "i1":"Keskimääräinen avaamisen hinta", + "i2":"Viimeisin kauppahinta", + "i3":"Olkaa hyvä ja ilmoittakaa hinta.", + "i4":"Lopeta liipaisinhinnan ansaitseminen", + "i5":"Markkinoiden hinta", + "i6":"Kun liiketoimi on suoritettu, voitto ja tappio arvioidaan", + "i7":"Keskeytä tappion laukaisijahinta", + "i8":"Keskeytystappio Komissio käynnistetään, kun liiketoimi on saatu päätökseen, ja voitto ja tappio odotetaan tapahtuman jälkeen", + "i9":"määrittää", + "j0":"Onnistunut sulkeminen", + "j1":"Onko markkinahinta kiinteä", + "j2":"Kaikki tasaiset", + "j3":"menestys", + "j4":"Aseta onnistuneesti", + "j5":"Ei ole vastusta nokkelalle laskelmoinnille.", + "j6":"on", + "j7":"kiinteä korko", + "j8":"Digitaalinen omaisuuksien kauppajärjestelmä", + "j9":"Kun {name1} kohtaa {Name2} {name3} tulisen nousun tiellä", + "k0":"Avattu hinta", + "k1":"Viimeisin hinta", + "k2":"Lisää tietoa hakukoodista@ info: whatsthis", + "k3":"Voittojen ja tappioiden kirjaaminen", + "k4":"Kuvaruutu on tallennettu paikallisesti", + "k5":"Kuvakuva epäonnistui", + "k6":"Pitkä lehdistötiedote", + "k7":"Yksi klikkaus tasainen", + "k8":"Yksi napsautus taaksepäin", + "k9":"Onko kaikki litteä?", + "l0":"Kaikki yhtä hyvin, menestys", + "l1":"Yksi avain peruutetaan", + "l2":"Käänteinen menestys", + "l3":"PingkongName", + "l4":"PintoName" + }, + "otc": { + "a0":"Mainonta", + "a1":"järjestys", + "a2":"Taloustoimen valuutta", + "a3":"Minun tilaukseni.", + "a4":"Minun mainokseni", + "a5":"osto", + "a6":"Myy", + "a7":"yhteensä", + "a8":"ylijäämä", + "a9":"Raja", + "b0":"Yksikön hinta", + "b1":"Maksun menetelmä", + "b2":"toiminta", + "b3":"yhteensä", + "b4":"Valitse maksutapa@ info: whatsthis", + "b5":"Syötä määrä", + "b6":"antaa tilauksen", + "b7":"Alipay.", + "b8":"WeChatLanguage", + "b9":"pankin kortti", + "c0":"Checkout menestys", + "c1":"valtio", + "c2":"Mainoksen numero", + "c3":"Hinta yhteensä", + "c4":"numero", + "c5":"Vapautuksen aika", + "c6":"Pois hyllyltä.", + "c7":"peruutettu", + "c8":"Kaupan alalla", + "c9":"Valmis", + "d0":"muistutus", + "d1":"Onko nykyinen mainos poistettu", + "d2":"määrittää", + "d3":"peruuta", + "d4":"Peruutettu onnistuneesti", + "d5":"Oikeudellinen valuuttatili", + "d6":"jäädytetty", + "d7":"Alipayn tilin numero", + "d8":"Syötä tilin numero@ info: whatsthis", + "d9":"koko nimi", + "e0":"Ole hyvä ja kirjoita nimesi", + "e1":"Maksun koodi", + "e2":"sidonta", + "e3":"Wechat- tili", + "e4":"Pankin nimi", + "e5":"Syötä pankin nimi", + "e6":"Tilin avaaminen", + "e7":"Syötä tilin avaamista koskeva sivukonttori", + "e8":"Pankkikortin numero", + "e9":"Syötä pankin kortin numero", + "f0":"Muokattu onnistuneesti", + "f1":"Lisää onnistuneesti", + "f2":"Myy loppuun", + "f3":"osto", + "f4":"Tilausta koskevat tiedot", + "f5":"tilauksen numero", + "f6":"tilin numero", + "f7":"Talletusten pankki", + "f8":"Jäljellä oleva aika", + "f9":"haara", + "g0":"toinen", + "g1":"Lataa maksutodistus", + "g2":"vahvistaa maksun", + "g3":"tilauksen peruuttaminen", + "g4":"Vahvista vastaanotto", + "g5":"Ei saatu", + "g6":"Peruuta nykyinen järjestys", + "g7":"Tilaus peruutettu", + "g8":"Vahvista nykyinen maksu", + "g9":"Operaatio onnistui", + "h0":"Keräyksen vahvistamisen jälkeen varat myydään ja siirretään automaattisesti", + "h1":"Kun on vahvistettu, että maksua ei ole saatu, määräys siirtyy automaattisesti valitustilaan", + "h2":"Myynnin tilaus", + "h3":"Oston tilaus", + "h4":"Mainoston tilaus", + "h5":"Mainonnan myyntitilaus", + "h6":"aika", + "h7":"yksityiskohdat", + "h8":"koko", + "h9":"Suljettu", + "i0":"Maksettava määrä", + "i1":"Tullaan vahvistamaan", + "i2":"Kantelun kohteena", + "i3":"Ilmoitusten tyypit", + "i4":"Valitse tapahtuman tyyppi", + "i5":"Valitse transaktion valuutta", + "i6":"Hinta", + "i7":"Olkaa hyvä ja ilmoittakaa hinta.", + "i8":"alin hinta", + "i9":"Olkaa hyvä ja ilmoittakaa alin hinta", + "j0":"Korkein hinta", + "j1":"Olkaa hyvä ja ilmoittakaa korkein hinta.", + "j2":"huomautukset", + "j3":"Syötä kommentit@ info: whatsthis", + "j4":"vapautuminen", + "j5":"Julkaistu onnistuneesti", + "j6":"Maksun menetelmä", + "j7":"Pienin määrä", + "j8":"Suurin määrä", + "j9":"Syötä transaktion vähimmäismäärä@ info: whatsthis", + "k0":"Syötä suurin kaupan määrä" + }, + "first":{ + "a0":"Mene oikealle nimelle", + "a1":"Meidän suhteemme", + "a2":"Tervetuloa.", + "a3":"Lopeta voitto ja lopeta tappion laskeminen", + "a4":"Kaupankäynti viimeisimmällä hinnalla", + "a5":"Pysykää paikoillanne.", + "a6":"Järjestelyjen hallinnointi", + "a7":"Kaikki toimeksiannot", + "a8":"Historialliset tiedot", + "a9":"useita", + "b0":"Oletko varma, että haluat kirjautua ulos?", + "b1":"Allekirjoitus tai rekisteröinti", + "b2":"Hei, tervetuloa Bindvetiin.", + "b3":"määrä", + "b4":"spot- indeksi", + "b5":"Sopimuksen indeksi", + "b6":"Tuetaan useita ostomenetelmiä", + "b7":"Nopean rahan ostaminen", + "b8":"kestävä", + "b9":"Nykyinen alue ei ole vielä auki", + "c0":"osto", + "c1":"Myy loppuun", + "c2":"aika", + "c3":"Hinta yhteensä", + "c4":"numero", + "c5":"Merkitse hinta", + "c6":"Numeroidut varat", + "c7":"tilavuus" + }, + "recharge":{ + "a0":"Vaihda valuuttaa", + "a1":"*Osoitteen muutos voidaan saada vain", + "a2":"Jos lataat omaisuutesi uudelleen muissa valuutoissa, et pysty saamaan niitä takaisin!", + "a3":"Erc20 on suositeltavaa kerätä", + "a4":"Kopioi osoite", + "a5":"Varmista, että osoite ja tiedot ovat oikeat ennen siirtoa!Kun se on siirretty pois, se on peruuttamaton!", + "a6":"Ole kiltti ja uusiudu." + }, + "currency":{ + "a0":"Oikeudellinen valuuttakauppa", + "a1":"Minä haluaisin ostaa sen.", + "a2":"Haluan myydä sen.", + "a3":"Yksi napsautus kolikon ostaminen", + "a4":"Yksi klik kolikko myynti", + "a5":"Hankinta määrän mukaan", + "a6":"Hankinta määrän mukaan", + "a55": "Myy määrän mukaan", + "a66": "Myy määrän mukaan", + "a7":"Syötä oston määrä@ info: whatsthis", + "a8":"Syötä oston määrä@ info: whatsthis", + "a9":"Syötä kaupan oleva määrä", + "b0":"Olkaa hyvä ja ilmoittakaa myyntimäärä", + "b1":"Yksikön hinta", + "b2":"0 käsittelymaksujen osto", + "b3":"0 provision myynti", + "b4":"Riittämätön käytettävissä oleva tasapaino", + "b5":"Suorittakaa ensin pitkälle viety sertifiointi.", + "b6":"De autentinion", + "b7":"Vahvista osto", + "b8":"Vahvistettu myynti" + } +} \ No newline at end of file diff --git a/i18n/lang/fra.json b/i18n/lang/fra.json new file mode 100644 index 0000000..fa1c8e0 --- /dev/null +++ b/i18n/lang/fra.json @@ -0,0 +1,927 @@ +{ + "common": { + "D": "Jour", + "M": "Mois", + "Y": "Année", + "add": "Ajouter", + "address": "Adresse", + "all": "Tous", + "amout": "Nombre", + "cancel": "Annulation", + "check": "Audit", + "code": "Code de vérification", + "confirm": "C'est sûr.", + "date": "Date", + "detail": "Détails", + "email": "E - mail", + "enter": "Veuillez entrer", + "error": "Échec", + "getCode": "Obtenir le Code de vérification", + "h": "Heure", + "loadMore": "Charger plus", + "m": "Points", + "money": "Montant", + "more": "Plus", + "notData": "Aucune donnée disponible", + "notMore": "Il n'y en a plus.", + "phone": "Téléphone portable", + "requestError": "Le réseau est occupé, Veuillez réessayer plus tard", + "s": "Secondes", + "save": "Enregistrer", + "select": "Veuillez sélectionner", + "sendSuccess": "Envoyé avec succès", + "sms": "SMS", + "submit": "Présentation", + "success": "Succès", + "tips": "Conseils chaleureux", + "total": "Total général", + "type": "Type", + "copy": "Copier", + "light": "Blanc", + "dark": "Noir", + "service": "Service à la clientèle", + "toDwon": "Aller à la page de téléchargement", + "a0": "Veuillez saisir le Code d'abonnement", + "a1": "Copie réussie", + "a2": "La réplication a échoué", + "a3": "Dossiers d'abonnement", + "a4": "Montant payé", + "a5": "Número de solicitudes", + "a6": "Numéro de compte", + "a7": "Nombre de recharges", + "a8": "Certificat de paiement", + "a9": "Veuillez saisir la quantité de recharge", + "b0": "Veuillez télécharger le bon de paiement", + "b1": "Achats{amount}Pièce{name}Jetons disponibles{rate}%Récompenses", + "b2": "Activités de souscription", + "b3": "Enregistrer avec succès", + "b4": "Échec de l'enregistrement", + "b5": "Générer une affiche d'invitation", + "b6": "Sélectionner une affiche", + "b8": "Heure d'ouverture", + "b9": "Heure de clôture", + "c0": "Montant minimum de recharge: {num}. Les recharges inférieures au montant minimum ne seront pas facturées et ne seront pas retournées.", + "c1": "Retrait minimal", + "c2": "Numéro de version", + "c3": "Ouvert.", + "c4": "Marge estimée", + "c7": "La valorisation actuelle", + "c6": "Augmenter le rapport", + "c5": "votre commande de transfert a été soumise avec succès. Veuillez patienter. Les résultats du transfert seront notifiés par SMS ou e - mail. Veuillez vérifier et contacter le service à la clientèle en cas de doute.", + "GraphicValidation": "Vérification graphique" + }, + "base": { + "a0": "Titre", + "a1": "Retour", + "a2": "Plus", + "a3": "Marché", + "a4": "Options", + "a5": "Nouvelle zone spéciale", + "a6": "Membres", + "a7": "Institut", + "a8": "- Oui.", + "a9": "Dernier prix", + "b0": "Augmentation ou diminution", + "b1": "Cliquez pour vous connecter", + "b2": "Bienvenue.", + "b3": "Veuillez vous connecter", + "b4": "Mise à jour", + "b5": "Remplissage de monnaie", + "b6": "Retrait de pièces", + "b7": "Promotion", + "b8": "Déduction des frais de service", + "b9": "Disponible", + "c0": "Achats", + "c1": "Mon mandat", + "c2": "Authentification de l'identité", + "c3": "Centre de sécurité", + "c4": "Notification des messages", + "c5": "Adresse de retrait", + "c6": "Paramètres", + "c7": "Auto - Sélection", + "c8": "Ajouté avec succès", + "c9": "Annulation réussie", + "d0": "Page d'accueil", + "d1": "Commerce", + "d2": "Actifs", + "d3": "Veuillez saisir le mot - clé de recherche", + "d4": "Tous", + "d5": "Tableau principal", + "d6": "Total des actifs convertis", + "d7": "Compte en devises", + "d8": "Tourne.", + "d9": "Monnaie de recherche", + "e0": "Cacher", + "e1": "Solde des actifs", + "e2": "Gel", + "e3": "Réduction", + "e4": "Comptes contractuels", + "e5": "Conversion contractuelle", + "e6": "Classe de mineur", + "e7": "Mineurs", + "wallet": "Portefeuille", + "f0": "Commencez votre voyage crypto-monnaie", + "f1": "acheter des pièces", + "f2": "Vas-y maintenant", + "f3": "Crypto-monnaies populaires", + "f4": "nom", + "f5": "Fonctions", + "f6": "Certification primaire terminée", + "f7": "Certificat de réserve", + "f8": "Nous nous engageons à atteindre une grande transparence sur l'état de financement et à maintenir un ratio de réserve de 1:1 pour les actifs des utilisateurs", + "f9": "Bitcoin", + "g0": "rendement moyen", + "g1": "Créez des possibilités infinies", + "g2": "Commencez à explorer", + "g3": "disponible à l'achat", + "g4": "Disponible à la vente", + "g5": "prix de la contrepartie", + "h1": "Facturation" + }, + "accountSettings": { + "a0": "Configuration du compte", + "a1": "Portrait", + "a2": "Un surnom.", + "a3": "Numéro de compte principal", + "a4": "Numéro de téléphone portable", + "a5": "Dégroupage", + "a6": "Liaison", + "a7": "Liaison de la boîte aux lettres", + "a8": "Changer de compte", + "a9": "Déconnecter", + "b0": "Modifier le surnom", + "b1": "Veuillez saisir un surnom", + "b2": "Langues", + "b3": "Coordonnées", + "b4": "Consultation régulière", + "b5": "Service à la clientèle", + "b6": "Coopération avec les médias", + "b7": "Si vous avez besoin d'aide, veuillez nous contacter." + }, + "assets": { + "a0": "Gestion des adresses de retrait de pièces", + "a1": "Le carnet d'adresses peut être utilisé pour gérer votre adresse commune. Il n'est pas nécessaire d'effectuer plusieurs vérifications lors de la collecte de pièces à l'adresse existante dans le carnet d'adresses.", + "a2": "La collecte automatique de pièces est prise en charge. Lors de l'utilisation de {name} pour la collecte de pièces, seules les adresses existantes dans le carnet d'adresses réseau sont autorisées à initier la collecte de pièces.", + "a3": "Supprimer l'adresse", + "a4": "Ajouter une adresse", + "a5": "Veuillez sélectionner l'adresse à supprimer", + "a6": "Supprimer l'adresse actuellement sélectionnée", + "a7": "Eau courante", + "a8": "Total général", + "a9": "Disponible", + "b0": "Gel", + "b1": "Comptes des fonds", + "b2": "Comptes contractuels", + "b3": "Compte de levier", + "b4": "Comptes financiers", + "b5": "Veuillez saisir le mot - clé de recherche", + "b6": "Retrait de pièces", + "b7": "Veuillez sélectionner le type de chaîne", + "b8": "Adresse de retrait", + "b9": "Veuillez saisir l'adresse", + "c0": "Nombre", + "c1": "Solde", + "c2": "Veuillez entrer la quantité", + "c3": "Tous", + "c4": "Frais de manutention", + "c5": "Veuillez vérifier attentivement et saisir l'adresse correcte du portefeuille de retrait de pièces", + "c6": "L'envoi d'une monnaie numérique non correspondante à l'adresse du portefeuille entraîne une perte permanente", + "c7": "Les frais de manutention de la collecte de pièces seront déduits de la quantité de collecte de pièces.", + "c8": "Enregistrement de la monnaie", + "c9": "Temps", + "d0": "Statut", + "d1": "En cours de vérification", + "d2": "Succès", + "d3": "Échec", + "d4": "Voir plus", + "d5": "Soumission réussie, vérification en cours", + "d6": "Édition", + "d7": "Ajouter", + "d8": "Adresse", + "d9": "Veuillez saisir ou coller une adresse", + "e0": "Remarques", + "e1": "Veuillez entrer un commentaire", + "e2": "Veuillez remplir l'adresse", + "e3": "Veuillez remplir les commentaires", + "e4": "Opération réussie", + "e5": "Remplissage de monnaie", + "e6": "Numériser le Code QR supérieur pour obtenir l'adresse de remplissage de monnaie", + "e7": "Adresse de remplissage", + "e8": "Nombre de pièces remplies", + "e9": "Veuillez entrer la quantité de remplissage de monnaie", + "f0": "Cette adresse est votre dernière adresse de recharge et sera automatiquement affichée lorsque le système recevra la recharge", + "f1": "Le transfert doit être confirmé par l'ensemble du réseau blockchain et votre {nom} sera automatiquement déposé dans votre compte lorsque les {num} réseaux seront confirmés.", + "f2": "Lors de la confirmation du réseau, votre", + "f3": "N'envoyez que {nom} à cette adresse, l'envoi d'autres devises numériques à cette adresse causera une perte permanente", + "f4": "Enregistrement du remplissage de la monnaie" + }, + "auth": { + "a0": "Authentification de l'identité", + "a1": "Authentification par nom réel", + "a2": "Non certifié", + "a3": "Certifié", + "a4": "Certification avancée", + "a5": "En cours de vérification", + "a6": "Échec de l'authentification", + "a7": "Nationalité", + "a8": "Veuillez sélectionner la nationalité", + "a9": "Nom réel", + "b0": "Veuillez saisir votre vrai nom", + "b1": "Numéro du certificat", + "b2": "Veuillez saisir le numéro d'identification", + "b3": "Confirmation", + "b4": "Certification réussie", + "b5": "Veuillez télécharger la photo avant du certificat", + "b6": "Veuillez télécharger le verso du certificat", + "b7": "S'il vous plaît télécharger la photo d'identification manuelle", + "b8": "Assurez - vous que la photo est claire et sans filigrane et que le haut du corps est complet.", + "b9": "La taille du document est trop grande pour dépasser", + "c0": "Mauvais type de fichier", + "c1": "Téléchargement réussi", + "c2": "Veuillez télécharger la photo de retour du certificat", + "c3": "Veuillez télécharger la photo de face du certificat", + "c4": "Téléchargement réussi, veuillez attendre l'approbation", + "c5": "date de naissance", + "c6": "type de certificat", + "c7": "Adresse résidentielle", + "c8": "Veuillez entrer votre adresse résidentielle", + "c9": "numéro de téléphone", + "d0": "Veuillez entrer votre numéro de téléphone", + "d1": "permis de conduire", + "d2": "passeport", + "d3": "Carte d'identité", + "d4": "Sélectionner une date", + "d5": "Choisissez s'il vous plaît" + }, + "exchange": { + "a0": "Monnaie", + "a1": "Abonnement", + "a2": "Contrats", + "a3": "Commerce", + "a4": "Mandat actuel", + "a5": "Mandat Historique", + "a6": "Ajouté avec succès", + "a7": "Annulation réussie", + "a8": "Total des émissions", + "a9": "Total de la circulation", + "b0": "Prix d'émission", + "b1": "Date de publication", + "b2": "Adresse du Livre blanc", + "b3": "Adresse du site officiel", + "b4": "Introduction", + "b5": "Acheter", + "b6": "Vendre", + "b7": "Prix de la Commission", + "b8": "Type", + "b9": "Opérations à prix limité", + "c0": "Opérations sur le marché", + "c1": "Marché conclu", + "c2": "Total général", + "c3": "Acheter", + "c4": "Vendre", + "c5": "Nombre", + "c6": "Au meilleur prix du marché", + "c7": "Prix total", + "c8": "Quantité disponible", + "c9": "Valeur totale", + "d0": "Connexion", + "d1": "Diagramme de partage du temps", + "d2": "Prix", + "d3": "Dernière transaction", + "d4": "Temps", + "d5": "Orientation", + "d6": "Limite de prix", + "d7": "Prix du marché", + "d8": "Veuillez entrer le prix", + "d9": "Veuillez entrer la quantité", + "e0": "Veuillez saisir le prix total", + "e1": "Commande réussie", + "e2": "Prix moyen", + "e3": "Plus haut", + "e4": "Minimum", + "e5": "Quantité", + "e6": "Marché des changes", + "e7": "Informations sur la monnaie", + "e8": "Minutes", + "e9": "Heures", + "f0": "Oh, mon Dieu.", + "f1": "Semaine", + "f2": "Mois", + "f3": "Prix d'achat", + "f4": "Prix de vente", + "f5": "Opérations en monnaie", + "f6": "Veuillez saisir le mot - clé de recherche", + "f7": "- Oui.", + "f8": "Dernier prix", + "f9": "Augmentation ou diminution", + "g0": "Auto - Sélection", + "g1": "Mon mandat", + "g2": "Révocation du mandat", + "g3": "Fonctionnement", + "g4": "Annulation", + "g5": "Annuler le mandat actuel", + "g6": "Annulation réussie" + }, + "option": { + "a0": "Options", + "a1": "Clôture à distance", + "a2": "Regarde.", + "a3": "Regardez en l'air.", + "a4": "Taux de rendement", + "a5": "Achats", + "a6": "Beaucoup.", + "a7": "Vide", + "a8": "En cours", + "a9": "Période suivante", + "b0": "Regarde Ping.", + "b1": "Sélection des augmentations", + "b2": "Taux de rendement", + "b3": "Quantité achetée", + "b4": "Veuillez entrer la quantité", + "b5": "Solde", + "b6": "Profit et perte", + "b7": "Acheter maintenant", + "b8": "Augmentation", + "b9": "Ping", + "c0": "Chute", + "c1": "Achat réussi", + "c2": "Détails", + "c3": "No de commande", + "c4": "Prix d'ouverture", + "c5": "Prix de clôture", + "c6": "Temps d'achat", + "c7": "Quantité achetée", + "c8": "Type d'achat", + "c9": "Statut", + "d0": "Résultats de clôture", + "d1": "Nombre de règlements", + "d2": "Date de clôture", + "d3": "Voir plus", + "d4": "Options d'achat", + "d5": "En attente de clôture", + "d6": "Ma livraison", + "d7": "Dossiers de clôture", + "d8": "Minutes", + "d9": "Heures", + "e0": "Oh, mon Dieu.", + "e1": "Semaine", + "e2": "Mois", + "e3": "Orientation", + "e4": "Augmentation ou diminution" + }, + "purchase": { + "a0": "Prix d'émission", + "a1": "Monnaie de souscription", + "a2": "Temps de mise en service prévu", + "a3": "Date de début de l'abonnement", + "a4": "Date de clôture de l'abonnement", + "a5": "Abonnement", + "a6": "Veuillez sélectionner la monnaie d'abonnement", + "a7": "Quantité achetée", + "a8": "Veuillez entrer la quantité d'abonnement", + "a9": "Tous", + "b0": "Souscription immédiate", + "b1": "Cycle de souscription", + "b2": "Préchauffage du projet", + "b3": "Début de la souscription", + "b4": "Clôture de la souscription", + "b5": "transaction répertoriée", + "b6": "Détails du projet", + "b7": "Oui Non", + "b8": "Achats", + "b9": "Souscription réussie" + }, + "reg": { + "a0": "Enregistrement mobile", + "a1": "Inscription à la boîte aux lettres", + "a2": "Téléphone portable", + "a3": "Veuillez saisir le numéro de téléphone", + "a4": "E - mail", + "a5": "Veuillez saisir le numéro de la boîte aux lettres", + "a6": "Code de vérification", + "a7": "Veuillez saisir le Code de vérification", + "a8": "Mot de passe", + "a9": "Veuillez saisir le mot de passe", + "b0": "Confirmer le mot de passe", + "b1": "Veuillez confirmer le mot de passe", + "b2": "Références", + "b3": "Veuillez saisir une référence", + "b4": "Facultatif", + "b5": "Vous avez accepté", + "b6": "Protocole utilisateur", + "b7": "Et comprendre notre", + "b8": "Accord de confidentialité", + "b9": "Inscription", + "c0": "Compte existant", + "c1": "Connectez - vous maintenant", + "c2": "Veuillez lire et accepter l'Accord", + "c3": "Veuillez remplir le numéro de téléphone", + "c4": "Veuillez remplir le numéro de courriel", + "c5": "Inscription réussie", + "c6": "Code de l'établissement (obligatoire)", + "c7": "Veuillez saisir le code de l'établissement", + "c8": "Inscrivez-vous maintenant pour commencer votre voyage en crypto-monnaie" + }, + "safe": { + "a0": "Dégroupage", + "a1": "Liaison", + "a2": "E - mail", + "a3": "E - mail No.", + "a4": "Veuillez saisir le numéro de la boîte aux lettres", + "a5": "Code de vérification de la boîte aux lettres", + "a6": "Veuillez saisir le Code de vérification", + "a7": "Code de vérification", + "a8": "Débranchement réussi", + "a9": "Liaison réussie", + "b0": "Mot de passe de connexion oublié", + "b1": "Numéro de compte", + "b2": "Veuillez entrer le téléphone", + "b3": "Nouveau mot de passe", + "b4": "Veuillez saisir un nouveau mot de passe", + "b5": "Confirmer le mot de passe", + "b6": "Veuillez confirmer le mot de passe", + "b7": "Confirmer les modifications", + "b8": "Veuillez saisir le bon numéro de téléphone ou de courriel", + "b9": "Validateur Google", + "c0": "Comment faire: Télécharger et ouvrir le vérificateur Google, numériser le Code QR ci - dessous ou saisir manuellement la clé secrète pour ajouter un jeton de vérification", + "c1": "Copier la clé", + "c2": "J'ai sauvegardé la clé correctement et je ne la récupérerai pas si elle est perdue.", + "c3": "Prochaines étapes", + "c4": "Code de vérification SMS", + "c5": "Code de vérification Google", + "c6": "Confirmer la liaison", + "c7": "Centre de sécurité", + "c8": "Mot de passe de connexion", + "c9": "Modifier", + "d0": "Paramètres", + "d1": "Mot de passe de la transaction", + "d2": "Téléphone portable", + "d3": "Modification réussie", + "d4": "Numéro de téléphone portable", + "d5": "Veuillez saisir le numéro de téléphone", + "d6": "Veuillez saisir le Code de vérification SMS", + "d7": "Fermer", + "d8": "On y va.", + "d9": "Validation", + "e0": "SMS", + "e1": "Fermeture réussie", + "e2": "Ouverture réussie", + "e3": "Confirmation", + "e4": "Configuration réussie", + "Remembered": "Vous avez mémorisé votre mot de passe ? ", + "e5": "Récupérer le mot de passe" + }, + "transfer": { + "a0": "Enregistrement des transferts", + "a1": "Succès", + "a2": "Nombre", + "a3": "Orientation", + "a4": "Actifs du compte", + "a5": "Comptes contractuels", + "a6": "Compte de levier", + "a55": "vendu en quantité", + "a66": "vendu pour un montant", + "a7": "Comptes financiers", + "a8": "Tourne.", + "a9": "De", + "b0": "à", + "b1": "devise de transfert", + "b2": "Solde", + "b3": "Tout", + "b4": "Transféré" + }, + "notice": { + "a0": "Détails", + "a1": "Notification des messages", + "a2": "Annonces", + "a3": "Message (s)" + }, + "invite": { + "a0": "Les employés de maison de la transaction privilégiée invitent des amis", + "a1": "Partenaires", + "a2": "Opérations privilégiées", + "a3": "Utilisateurs ordinaires", + "a4": "Mon identité", + "a5": "Statut privilégié", + "a6": "Mon code d'invitation", + "a7": "Copier le Code QR de l'invitation", + "a8": "Copier le lien d'invitation", + "a9": "Ma promotion", + "b0": "Nombre total de personnes promues", + "b1": "Les gens", + "b2": "Total des recettes converties", + "b3": "Dossiers de promotion", + "b4": "Invitation directe", + "b5": "Registre des employés de maison rapatriés", + "b6": "Grade", + "b7": "Définition du niveau", + "b8": "Conditions de promotion", + "b9": "Participation aux dividendes", + "c0": "Un surnom.", + "c1": "Nombre de promotions", + "c2": "Conversion des recettes", + "c3": "Historique de l'invitation", + "c4": "Registre des employés de maison rapatriés", + "c5": "Description de la catégorie de participation", + "c6": "Grade", + "c7": "Capitaux propres", + "c8": "Description", + "c9": "Mes droits" + }, + "help": { + "a0": "Détails", + "a1": "Institut", + "a2": "Classification" + }, + "login": { + "a0": "La boîte aux lettres", + "a1": "Veuillez entrer votre email", + "a2": "Mot de passe", + "a3": "Veuillez saisir le mot de passe", + "a4": "Connexion", + "a5": "Mot de passe oublié", + "a6": "Pas de compte", + "a7": "Inscrivez - vous maintenant", + "a8": "Téléphone portable", + "a9": "E - mail", + "b0": "Terminé.", + "b1": "Connexion au compte", + "b2": "Connectez-vous maintenant pour commencer votre voyage en crypto-monnaie", + "b3": "E-mail", + "b4": "Veuillez saisir votre email" + }, + "contract": { + "a0": "Ouverture de la position", + "a1": "position", + "a2": "Mandat", + "a3": "Historique", + "a4": "Opérations contractuelles", + "a5": "Ouverture réussie", + "a6": "Type de transaction", + "a7": "Marché conclu", + "a8": "Total des mandats", + "a9": "Prix de transaction moyen", + "b0": "Prix de la Commission", + "b1": "Marge", + "b2": "Frais de manutention", + "b3": "Statut", + "b4": "Fonctionnement", + "b5": "Annulation", + "b6": "Annulé", + "b7": "Non conclu.", + "b8": "Accord partiel", + "b9": "Tout est réglé.", + "c0": "Kaido.", + "c1": "Vide.", + "c2": "Vide.", + "c3": "Pindo", + "c4": "Conseils chaleureux", + "c5": "Annuler l'ordre actuel", + "c6": "Annulation réussie", + "c7": "Profits et pertes", + "c8": "Partager", + "c9": "Détails du mandat", + "d0": "Aucune donnée disponible", + "d1": "Prix", + "d2": "Nombre", + "d3": "Date de clôture", + "d4": "Intérêts des utilisateurs", + "d5": "Résultat non réalisé", + "d6": "Taux de risque", + "d7": "Prix du marché", + "d8": "USDT.", + "d9": "Dépôt d'occupation", + "e0": "Bullish", + "e1": "- Oui.", + "e2": "Putting", + "e3": "Ouvert.", + "e4": "Disponible", + "e5": "Tourne.", + "e6": "Taux de financement", + "e7": "Règlement à distance", + "e8": "Beaucoup.", + "e9": "prix d'ouverture", + "f0": "Transfert de fonds", + "f1": "Calculatrice", + "f2": "À propos du contrat", + "f3": "Fonds de garantie des risques", + "f4": "Historique des dépenses en capital", + "f5": "Mandat ordinaire", + "f6": "Commission du marché", + "f7": "Oui Non", + "f8": "Prix", + "f9": "Double levier ouvert", + "g0": "Kaido.", + "g1": "Vide.", + "g2": "Délégation réussie", + "g3": "Afficher uniquement le contrat actuel", + "g4": "Koping", + "g5": "Mandat", + "g6": "prix d'ouverture moyen", + "g7": "Prix de base de règlement", + "g8": "Parités fortes estimées", + "g9": "Recettes réglées", + "h0": "taux de retour", + "h1": "Fin de l'interférence", + "h2": "Stop loss", + "h3": "clôturer le poste", + "h4": "Prix du marché", + "h5": "Prendre des bénéfices et stopper les pertes", + "h6": "Ping", + "h7": "Veuillez saisir le prix de clôture", + "h8": "Limite de prix", + "h9": "Veuillez saisir la quantité de clôture", + "i0": "Koping", + "i1": "Prix moyen d'ouverture", + "i2": "Dernier prix de transaction", + "i3": "Veuillez entrer le prix", + "i4": "Tirer profit", + "i5": "Prix du marché à", + "i6": "Le mandat d'arrêt des bénéfices sera déclenché et les bénéfices et pertes seront estimés après la transaction.", + "i7": "arrêter la perte", + "i8": "Le mandat d'arrêt des pertes sera déclenché et les bénéfices et pertes seront estimés après la transaction.", + "i9": "C'est sûr.", + "j0": "Clôture réussie", + "j1": "Si le prix du marché est égal ou non", + "j2": "Quanping", + "j3": "Succès", + "j4": "Configuration réussie", + "j5": "Il n'y a pas d'autre solution.", + "j6": "Fais - le.", + "j7": "Prix de clôture", + "j8": "Plate - forme de négociation d'actifs numériques", + "j9": "Quand {Name1} rencontre {name2} {name3} le chemin de l'Ascension", + "k0": "Prix d'ouverture", + "k1": "Dernier prix", + "k2": "Numériser le Code pour en savoir plus", + "k3": "Règlement des profits et pertes", + "k4": "Capture d'écran réussie, sauvegardée localement", + "k5": "Échec de la capture d'écran", + "k6": "Longue capture d'écran", + "k7": "Un bouton tout plat", + "k8": "Un bouton en arrière", + "k9": "Si un bouton est complètement plat", + "l0": "Quanping a réussi.", + "l1": "Si un bouton est inversé", + "l2": "Inversion réussie", + "l3": "Vide.", + "l4": "Pindo" + }, + "otc": { + "a0": "Annonce", + "a1": "Ordre", + "a2": "Monnaie de transaction", + "a3": "Ma commande", + "a4": "Ma Pub", + "a5": "Achats", + "a6": "Vente", + "a7": "Total général", + "a8": "Reste", + "a9": "Limites", + "b0": "Prix unitaire", + "b1": "Mode de paiement", + "b2": "Fonctionnement", + "b3": "Total", + "b4": "Veuillez sélectionner le mode de paiement", + "b5": "Veuillez entrer la quantité", + "b6": "Passer une commande", + "b7": "AliPay", + "b8": "Wechat", + "b9": "Carte bancaire", + "c0": "Commande réussie", + "c1": "Statut", + "c2": "Numéro de l'annonce", + "c3": "Prix total", + "c4": "Nombre", + "c5": "Date de publication", + "c6": "Cadre inférieur", + "c7": "Annulé", + "c8": "En cours de négociation", + "c9": "Terminé", + "d0": "Conseils chaleureux", + "d1": "Annonce actuelle", + "d2": "C'est sûr.", + "d3": "Annulation", + "d4": "Annulation réussie", + "d5": "Comptes en monnaie française", + "d6": "Gel", + "d7": "Numéro de compte AliPay", + "d8": "Veuillez saisir le numéro de compte", + "d9": "Nom (s)", + "e0": "Veuillez saisir un nom", + "e1": "Code de paiement", + "e2": "Liaison", + "e3": "Compte Wechat", + "e4": "Nom de la Banque", + "e5": "Veuillez saisir le nom de la Banque", + "e6": "Sous - direction de l'ouverture du compte", + "e7": "Veuillez saisir la Sous - direction de l'ouverture du compte", + "e8": "Numéro de carte bancaire", + "e9": "Veuillez saisir le numéro de carte bancaire", + "f0": "Édition réussie", + "f1": "Ajouté avec succès", + "f2": "Vendre", + "f3": "Acheter", + "f4": "Détails de la commande", + "f5": "No de commande", + "f6": "Numéro de compte", + "f7": "Banque de dépôt", + "f8": "Temps restant", + "f9": "Points", + "g0": "Secondes", + "g1": "Télécharger le bon de paiement", + "g2": "Confirmation du paiement", + "g3": "Annuler la commande", + "g4": "Confirmer le recouvrement", + "g5": "Non reçu", + "g6": "Annuler la commande actuelle", + "g7": "Ordre annulé", + "g8": "Confirmer le paiement actuel", + "g9": "Opération réussie", + "h0": "Les actifs à vendre seront automatiquement transférés après confirmation de la collecte.", + "h1": "Cette commande entrera automatiquement en appel après confirmation du non - paiement", + "h2": "Ordre de vente", + "h3": "Bon de commande", + "h4": "Bon de commande publicitaire", + "h5": "Commandes publicitaires", + "h6": "Temps", + "h7": "Détails", + "h8": "Tous", + "h9": "Fermé", + "i0": "À payer", + "i1": "À confirmer", + "i2": "Dans la plainte", + "i3": "Type de publicité", + "i4": "Veuillez sélectionner le type de transaction", + "i5": "Veuillez sélectionner la devise de transaction", + "i6": "Prix", + "i7": "Veuillez entrer le prix", + "i8": "Prix le plus bas", + "i9": "Veuillez saisir le prix le plus bas", + "j0": "Prix maximum", + "j1": "Veuillez saisir le prix maximum", + "j2": "Remarques", + "j3": "Veuillez entrer un commentaire", + "j4": "Publication", + "j5": "Publié avec succès", + "j6": "Mode de collecte", + "j7": "Quantité minimale", + "j8": "Quantité maximale", + "j9": "Veuillez saisir le volume minimal de transaction", + "k0": "Veuillez saisir le volume maximal de transaction" + }, + "first": { + "a0": "Au vrai nom", + "a1": "À propos de nous", + "a2": "Soyez le bienvenu.", + "a3": "Réglage de l'arrêt des gains et des pertes", + "a4": "Trading at Current latest price", + "a5": "Position de détention", + "a6": "Gestion des commandes", + "a7": "Toutes les délégations", + "a8": "Historique", + "a9": "Multiple", + "b0": "Tu es sûr de vouloir quitter la connexion?", + "b1": "Connexion ou inscription", + "b2": "Hi, bienvenue à Moabcoin", + "b3": "Quantité", + "b4": "Indice au comptant", + "b5": "Indices contractuels", + "b6": "Prise en charge de plusieurs modes d'achat", + "b7": "Acheter de l'argent rapidement", + "b8": "Durable", + "b9": "La zone actuelle n'est pas encore ouverte", + "c0": "Acheter", + "c1": "Vendre", + "c2": "Temps", + "c3": "Prix total", + "c4": "Nombre", + "c5": "Dernier prix", + "c6": "Biens grevés", + "c7": "Volume" + }, + "recharge": { + "a0": "切换币种", + "a1": "*改地址只能接收", + "a2": "的资产,如果充值其他币种,将无法找回!", + "a3": "推荐使用ERC20进行收款", + "a4": "复制地址", + "a5": "*转账前请务必确认地址及信息无误!一旦转出,不可撤回!", + "a6": "请重新生成" + }, + "currency": { + "a0": "Opérations en monnaie française", + "a1": "Je vais l'acheter.", + "a2": "Je vais le vendre.", + "a3": "Acheter de l'argent en un clic", + "a4": "Un bouton pour vendre de l'argent", + "a5": "Acheter par quantité", + "a6": "Acheter par montant", + "a7": "Veuillez entrer la quantité achetée", + "a8": "Veuillez saisir le montant de l'achat", + "a9": "Veuillez entrer la quantité vendue", + "b0": "Veuillez saisir le montant de la vente", + "b1": "Prix unitaire", + "b2": "0 frais d'achat", + "b3": "0 frais de vente", + "b4": "Solde disponible insuffisant", + "b5": "Veuillez d'abord compléter la certification avancée", + "b6": "Pour certifier", + "b7": "Confirmer l'achat", + "b8": "Confirmation de la vente" + }, + "shou": { + "a0": "Recharger le compte", + "a1": "Ajouter des fonds de crypto-monnaie à votre portefeuille", + "a2": "Et commencez à trader immédiatement", + "a3": "Recharger maintenant", + "a4": "Plateforme mondiale d'échange d'actifs numériques", + "a5": "Faciliter les transactions d'actifs chiffrés", + "a6": "Inscrivez-vous maintenant", + "a7": "Express du marché des actifs numériques", + "a8": "Tendance du marché", + "a9": "Devise", + "a10": "Dernier prix (USD)", + "a11": "augmentation de 24h", + "a12": "Volume de transactions 24h", + "a13": "Top 10", + "a14": "5 millions +", + "a15": "< 0,10 %", + "a16": "200+", + "a17": "Classement mondial", + "a18": "les utilisateurs nous font confiance", + "a19": "Frais ultra-bas", + "a20": "Pays", + "a21": "Prise en charge multi-terminaux", + "a22": "Échangez des actifs numériques à tout moment, n'importe où", + "a23": "Prend en charge un large éventail de types d'actifs, avec toutes les informations sur les devises", + "a24": "Magasin d'applications", + "a25": "APK Android", + "a26": "Scannez le code pour télécharger l'APP", + "a27": "iOS et Androïd", + "a28": "Pourquoi choisir xuscoin.com ?", + "a29": "S'efforcer de fournir des services de négociation d'actifs numériques pour plusieurs pays", + "a30": "Trading simple et pratique d'actifs cryptés", + "a31": "Le produit est facile à comprendre, le processus de transaction est pratique et la plate-forme de service d'actifs blockchain à guichet unique", + "a32": "En fonction de l'expérience utilisateur, offrez une expérience de service de chiffrement agréable", + "a33": "Desservant les régions multilingues du monde, devenant une passerelle permettant à tous les utilisateurs d'entrer dans le monde crypté", + "a34": "Sécurité et stabilité sans accident", + "a35": "De multiples garanties de stratégie de sécurité, garantie à 100% du fonds de réserve, aucun incident de sécurité n'est survenu depuis sa mise en place", + "a36": "Taux de frais de transaction optimal", + "a37": "Taux de transaction préférentiels, droits VIP compétitifs, profitez d'un service de la plus haute qualité", + "a38": "Guide du débutant", + "a39": "Comprendre rapidement le processus de transaction d'actifs numériques", + "a40": "gagner un revenu immédiatement", + "a41": "Cliquez pour aller", + "a42": "Plateforme de trading de crypto-monnaie XUScoin - Conçue pour tout le monde", + "a43": "Commencez le voyage de cryptage" + }, + "homeNewText": { + "aa3": "Inscrivez-vous maintenant et commencez votre voyage en crypto-monnaie", + "aa4": "Commencez à trader immédiatement", + "aa7": "Devise", + "aa8": "Connexion/Inscription", + "bb1": "Dernier prix (USD)", + "bb2": "Augmentation de 24h", + + "bb4": "L'avenir de l'argent est là", + "bb5": "Nous sommes l'endroit le plus fiable permettant aux investisseurs d'acheter, de vendre et de gérer des cryptomonnaies", + "bb6": "Inscrivez-vous par email", + "bb7": "Capture facile", + "bb8": "Opportunités de trading", + "bb9": "Pratique pour utiliser la cryptomonnaie", + "bb10": "Outils", + "bb11": "Nous travaillons régulièrement à la mise à jour des fonctionnalités existantes et à la mise en œuvre de nouvelles fonctionnalités du service.", + "bb12": "Traitement de chiffrement commercial", + "bb13": "Fournir un moyen fiable d'accepter facilement les paiements des crypto-monnaies les plus populaires dans le monde.", + "bb14": "Échange illimité de cryptomonnaies", + "bb15": "Échangez Bitcoin, Tether, Litecoin, Ethereum et plus de 50 autres pièces de manière simple et sécurisée.", + "bb16": "Optimiser l'expérience utilisateur", + "bb17": "Optimiser l'expérience utilisateur : lancer de nouveaux produits de haute qualité, simplifier les opérations et améliorer la facilité d'utilisation.", + "bb18": "Dépôt et retrait flash", + "bb19": "Nos partenaires", + "bb20": "Partout dans le monde", + "bb21": "Nos partenaires sont leaders du marché et ils nous aident à fournir les meilleures solutions de cryptomonnaie.", + "bb22": "Guide du débutant", + "bb23": "Créez un compte {name}", + "bb24": "Inscrivez-vous maintenant et commencez votre parcours commercial !", + "bb25": "S'inscrire", + "bb26": "Dépôt", + "bb27": "Recharge rapide et dépôt facile !", + "bb28": "Recharger", + "bb29": "Commencer à trader", + "bb30": "Commencez à trader et profitez de possibilités illimitées !", + "bb31": "Transaction pièce à pièce", + "bb32": "Ouvrir des transactions à tout moment et n'importe où", + "bb33": "Scanner pour télécharger", + "bb34": "Commencez votre voyage crypto maintenant !", + "bb35": "Cela ne prend que 10 secondes pour s'inscrire et commencer à trader", + "bb36": "Inscription gratuite", + "bb37": "Les dépôts et retraits peuvent être effectués en 3 minutes au maximum.", + "bb38": "Inscrivez-vous maintenant", + "bb39": "Échangez maintenant", + "bb40": "{name}, échangez à tout moment et n'importe où", + "bb41": "Scannez le code QR pour télécharger l'application {name}", + "bb42": "Scannez le code QR pour télécharger l'APP" + } +} \ No newline at end of file diff --git a/i18n/lang/it.json b/i18n/lang/it.json new file mode 100644 index 0000000..e0ab7a2 --- /dev/null +++ b/i18n/lang/it.json @@ -0,0 +1,927 @@ +{ + "common": { + "D": "giorno", + "M": "mese", + "Y": "anno", + "add": "aggiungere a", + "address": "indirizzo", + "all": "Tutti", + "amout": "numero", + "cancel": "annulla", + "check": "da esaminare", + "code": "Codice di verifica", + "confirm": "determinare", + "date": "data", + "detail": "dettagli", + "email": "mailbox", + "enter": "Inserisci prego", + "error": "fail", + "getCode": "Ottenere codice di verifica", + "h": "Tempo", + "loadMore": "Carica di più", + "m": "ramo", + "money": "importo del denaro", + "more": "più", + "notData": "Nessun dato disponibile", + "notMore": "Basta così.", + "phone": "cellulare", + "requestError": "La rete è occupata. Riprova più tardi", + "s": "secondo", + "save": "conservazione", + "select": "Seleziona", + "sendSuccess": "Inviato con successo", + "sms": "breve messaggio", + "submit": "Invia", + "success": "successo", + "tips": "promemoria", + "total": "totale", + "type": "tipo", + "copy": "Ricevuto.", + "light": "bianco", + "dark": "black", + "service": "Servizio clienti", + "toDwon": "Vuoi andare alla pagina di download", + "a0": "Inserisci il codice di acquisto", + "a1": "Copia riuscita", + "a2": "copia non riuscita", + "a3": "Registri di acquisto", + "a4": "Importo del pagamento", + "a5": "Quantitativi acquistati", + "a6": "numero di conto", + "a7": "Quantità di ricarica", + "a8": "buono di pagamento", + "a9": "Inserisci quantità di ricarica", + "b0": "Invia il buono di pagamento", + "b1": "acquisto{amount}Pezzi{name}Token disponibile{rate}%ricompensa", + "b2": "Attività di sottoscrizione", + "b3": "Salvato con successo", + "b4": "Salva non riuscito", + "b5": "Genera gli inviti Poster", + "b6": "Seleziona Poster", + "b8": "Orario di apertura", + "b9": "Tempo di chiusura", + "c0": "Importo minimo di ricarica: {num}. Ricarica meno della quantità minima non sarà postata e non può essere restituita", + "c1": "Importo minimo di prelievo", + "c2": "Numero di versione", + "c3": "Aperto", + "c4": "Margine stimato", + "c7": "Valutazione attuale", + "c6": "Aumenta il rapporto", + "c5": "l'ordine di trasferimento è stato presentato con successo, si prega di attendere pazientemente, e il risultato di trasferimento sarà notificato via SMS o e-mail. Si prega di controllare attentamente. Se avete domande, si prega di contattare il servizio clienti in tempo.", + "GraphicValidation": "Verifica grafica" + }, + "base": { + "a0": "titolo", + "a1": "ritorno", + "a2": "più", + "a3": "citazione", + "a4": "opzione", + "a5": "Nuova zona", + "a6": "membro", + "a7": "college", + "a8": "Accordo per", + "a9": "Prezzo ultimo", + "b0": "Su e giù", + "b1": "Fare clic sul login", + "b2": "Benvenuti a", + "b3": "Si prega di accedere", + "b4": "upgrade", + "b5": "Onere denaro", + "b6": "Ritirare i soldi", + "b7": "estensione", + "b8": "Riduzione della tassa di servizio", + "b9": "disponibile", + "c0": "acquisto", + "c1": "La mia commissione", + "c2": "autenticazione identità", + "c3": "Centro di sicurezza", + "c4": "Notifica del messaggio", + "c5": "Indirizzo di ritiro", + "c6": "montato", + "c7": "Facoltativo", + "c8": "Aggiunto con successo", + "c9": "Annulla con successo", + "d0": "home page", + "d1": "transazione", + "d2": "proprietà", + "d3": "Inserisci parole chiave di ricerca", + "d4": "intero", + "d5": "una scheda principale", + "d6": "Totale delle attività equivalenti", + "d7": "Conto in valuta", + "d8": "Trasferimento", + "d9": "Cerca valuta", + "e0": "nascondere", + "e1": "Attività di bilancio", + "e2": "congelati", + "e3": "Equivalente", + "e4": "Conto contrattuale", + "e5": "Conversione contrattuale", + "e6": "Classe di minerali", + "e7": "miner", + "wallet": "Portafoglio", + "f0": "Inizia il tuo viaggio in criptovaluta", + "f1": "comprare monete", + "f2": "Vai, ora", + "f3": "Criptovalute popolari", + "f4": "nome", + "f5": "Funzioni comuni", + "f6": "Certificazione primaria completata", + "f7": "Certificato di riserva", + "f8": "Ci impegniamo a raggiungere un'elevata trasparenza dello stato dei fondi e a mantenere un rapporto di riserva 1:1 per le risorse degli utenti.", + "f9": "Bitcoin", + "g0": "rendimento medio", + "g1": "Crea infinite possibilità", + "g2": "Inizia a esplorare", + "g3": "disponibile per l'acquisto", + "g4": "Disponibile alla vendita", + "g5": "prezzo della controparte", + "h1": "Fattura" + }, + "accountSettings": { + "a0": "Impostazioni account", + "a1": "ritratto della testa", + "a2": "Cognome?", + "a3": "Numero di conto principale", + "a4": "numero di cellulare", + "a5": "Separazione", + "a6": "vincolante", + "a7": "Legame per corrispondenza", + "a8": "Scambio di conti", + "a9": "Esci fuori", + "b0": "Cambia nick", + "b1": "Inserisci un nickname", + "b2": "lingua", + "b3": "Informazioni di contatto", + "b4": "Consultazione di routine", + "b5": "Servizio clienti", + "b6": "Cooperazione dei media", + "b7": "Se avete bisogno di aiuto, vi preghiamo di contattarci" + }, + "assets": { + "a0": "Gestione dell’indirizzo di ritiro", + "a1": "L'indirizzo può essere usato per gestire i vostri indirizzi comuni, e non c'è bisogno di effettuare controlli multipli quando prelevare denaro dagli indirizzi nella rubrica", + "a2": "Il prelievo automatico di valuta è supportato. Quando {nome} è usato, solo gli indirizzi nel portafoglio indirizzi sono autorizzati ad avviare il ritiro di valuta", + "a3": "Elimina indirizzo", + "a4": "Aggiungi indirizzo", + "a5": "Seleziona l'indirizzo da eliminare", + "a6": "Elimina l'indirizzo attualmente selezionato", + "a7": "fluente acqua", + "a8": "totale", + "a9": "disponibile", + "b0": "congelati", + "b1": "Conto di capitale", + "b2": "Conto contrattuale", + "b3": "Conto di leva", + "b4": "Conto finanziario", + "b5": "Inserisci parole chiave di ricerca", + "b6": "Ritirare i soldi", + "b7": "Per favore seleziona tipo di catena", + "b8": "Indirizzo di ritiro", + "b9": "Inserisci l'indirizzo", + "c0": "numero", + "c1": "saldo", + "c2": "Quantità di input", + "c3": "intero", + "c4": "Carica di servizio", + "c5": "Si prega di controllare attentamente ed inserire l'indirizzo corretto del portafoglio", + "c6": "Inviare valuta digitale senza pari all'indirizzo del portafoglio causerà perdite permanenti", + "c7": "La tassa di gestione sarà detratta dall’importo del denaro ritirato", + "c8": "Registrazione di ritiro", + "c9": "tempo", + "d0": "Stato", + "d1": "In revisione", + "d2": "successo", + "d3": "fail", + "d4": "Vedi di più", + "d5": "Presentato con successo, in corso di revisione", + "d6": "modifica", + "d7": "aggiungere a", + "d8": "indirizzo", + "d9": "Inserisci o incolla l'indirizzo", + "e0": "osservazioni", + "e1": "Per favore inserisci i tuoi commenti", + "e2": "Si prega di compilare l'indirizzo", + "e3": "Si prega di compilare le osservazioni", + "e4": "Funzionamento riuscito", + "e5": "Onere denaro", + "e6": "Scansiona il codice QR sopra per ottenere l'indirizzo di ricarica", + "e7": "Indirizzo di ricarica", + "e8": "Numero di monete addebitate", + "e9": "Inserisci l'importo della valuta addebitata", + "f0": "Questo indirizzo è il tuo ultimo indirizzo di ricarica. Quando il sistema riceve la ricarica, sarà automaticamente registrato", + "f1": "Il trasferimento deve essere confermato da tutta la rete Blockchain. Quando si arriva alla conferma della rete {num}, il tuo {nome} sarà automaticamente depositato nel conto", + "f2": "Quando una rete è confermata, il vostro", + "f3": "Inviare {nome} a questo indirizzo. Inviare altra valuta digitale a questo indirizzo causerà una perdita permanente", + "f4": "Registrazione di ricarica" + }, + "auth": { + "a0": "autenticazione identità", + "a1": "Autenticazione del nome reale", + "a2": "Non certificata", + "a3": "Certificato", + "a4": "Certificazione avanzata", + "a5": "In revisione", + "a6": "Autenticazione non riuscita", + "a7": "nazionalità", + "a8": "Scegli la tua nazionalità", + "a9": "Nome vero", + "b0": "Inserisci il tuo vero nome", + "b1": "Numero di identificazione", + "b2": "Inserisci numero identificativo", + "b3": "conferma", + "b4": "Certificazione riuscita", + "b5": "Si prega di caricare la foto anteriore della carta d'identità", + "b6": "Si prega di caricare il retro del certificato", + "b7": "Per favore carica la tua foto identificativa tenuta a mano", + "b8": "Assicurati che la foto sia chiara senza filigrana e che il corpo superiore sia intatto", + "b9": "La dimensione del file è troppo grande e non può superare", + "c0": "Errore del tipo di file", + "c1": "Upload riuscito", + "c2": "Si prega di caricare la foto sul retro del certificato", + "c3": "Si prega di caricare la foto anteriore della carta d'identità", + "c4": "Upload di successo, si prega di attendere il audit", + "c5": "data di nascita", + "c6": "tipo di certificato", + "c7": "Indirizzo di residenza", + "c8": "Inserisci il tuo indirizzo di residenza", + "c9": "numero di telefono", + "d0": "Per favore immetti il ​​tuo numero di telefono", + "d1": "patente di guida", + "d2": "passaporto", + "d3": "carta d'identità", + "d4": "Seleziona la data", + "d5": "si prega di scegliere" + }, + "exchange": { + "a0": "Monete", + "a1": "domanda per l'acquisto", + "a2": "contratto", + "a3": "transazione", + "a4": "Delegazione attuale", + "a5": "Commissione storica", + "a6": "Aggiunto con successo", + "a7": "Annulla con successo", + "a8": "Numero totale", + "a9": "Totale della circolazione", + "b0": "Prezzo di emissione", + "b1": "Tempo di emissione", + "b2": "Indirizzo della carta bianca", + "b3": "Indirizzo ufficiale del sito", + "b4": "breve introduzione", + "b5": "comprare", + "b6": "vendere", + "b7": "Prezzo della Commissione", + "b8": "tipo", + "b9": "Traffico limite di prezzo", + "c0": "Operazioni di mercato", + "c1": "Chiuso", + "c2": "totale", + "c3": "acquisto", + "c4": "vendere fuori", + "c5": "numero", + "c6": "Chiudi al miglior prezzo di mercato", + "c7": "Prezzo totale", + "c8": "Quantità disponibile", + "c9": "valore lordo", + "d0": "Firma in", + "d1": "Scheda di condivisione del tempo", + "d2": "Prezzo", + "d3": "Ultimo accordo", + "d4": "tempo", + "d5": "direzione", + "d6": "prezzo fisso", + "d7": "Prezzo di mercato", + "d8": "Inserisci il prezzo", + "d9": "Quantità di input", + "e0": "Inserisci il prezzo totale", + "e1": "verificare il successo", + "e2": "prezzo medio", + "e3": "più alto", + "e4": "minimo", + "e5": "importo", + "e6": "Ordine", + "e7": "Informazioni sulla valuta", + "e8": "minuto", + "e9": "ora", + "f0": "giorno", + "f1": "settimana", + "f2": "mese", + "f3": "Prezzo di acquisto", + "f4": "Prezzo di vendita", + "f5": "Operazioni di valuta", + "f6": "Inserisci parole chiave di ricerca", + "f7": "Accordo per", + "f8": "Prezzo ultimo", + "f9": "Su e giù", + "g0": "Facoltativo", + "g1": "La mia commissione", + "g2": "Revoca dell’incarico", + "g3": "operazione", + "g4": "revoco", + "g5": "Annulla la delegazione attuale", + "g6": "Cancellato con successo" + }, + "option": { + "a0": "opzione", + "a1": "Distanza di consegna", + "a2": "Vedi di più", + "a3": "essere portatori", + "a4": "Tasso di ritorno", + "a5": "acquisto", + "a6": "molti", + "a7": "vuota", + "a8": "corrente", + "a9": "Prossimo numero", + "b0": "Vedi piano", + "b1": "Scelta dell'aumento dei prezzi", + "b2": "Tasso di ritorno", + "b3": "Quantità di acquisto", + "b4": "Quantità di input", + "b5": "saldo", + "b6": "Profitti e perdite", + "b7": "Acquista ora", + "b8": "aumento", + "b9": "piatto", + "c0": "caduta", + "c1": "Acquisto riuscito", + "c2": "dettagli", + "c3": "Numero d'ordine", + "c4": "Prezzo di apertura", + "c5": "Prezzo di chiusura", + "c6": "Tempo di acquisto", + "c7": "Quantità di acquisto", + "c8": "Tipo di acquisto", + "c9": "Stato", + "d0": "Risultato di chiusura", + "d1": "Quantità di regolamento", + "d2": "tempo di consegna", + "d3": "Vedi di più", + "d4": "Opzione di acquisto", + "d5": "In attesa di consegna", + "d6": "La mia consegna", + "d7": "Registrazione di consegna", + "d8": "minuto", + "d9": "ora", + "e0": "giorno", + "e1": "settimana", + "e2": "mese", + "e3": "direzione", + "e4": "Su e giù" + }, + "purchase": { + "a0": "Prezzo di emissione", + "a1": "Moneta di sottoscrizione", + "a2": "Tempo previsto online", + "a3": "Orario di inizio della sottoscrizione", + "a4": "Tempo di chiusura", + "a5": "domanda per l'acquisto", + "a6": "Seleziona la valuta di sottoscrizione", + "a7": "Quantità di acquisto", + "a8": "Inserisci la quantità", + "a9": "intero", + "b0": "Applicare immediatamente", + "b1": "Ciclo di sottoscrizione", + "b2": "Progetto di riscaldamento", + "b3": "Avvia sottoscrizione", + "b4": "Chiudi l'abbonamento", + "b5": "transazione elencata", + "b6": "Dettagli del progetto", + "b7": "Uso o no", + "b8": "acquisto", + "b9": "Acquisto riuscito" + }, + "reg": { + "a0": "Registrazione mobile", + "a1": "Registrazione elettronica", + "a2": "cellulare", + "a3": "Inserisci il numero di telefono cellulare", + "a4": "mailbox", + "a5": "Inserisci il tuo numero di posta elettronica", + "a6": "Codice di verifica", + "a7": "Inserire il codice di verifica", + "a8": "password", + "a9": "Inserisci una password", + "b0": "Conferma password", + "b1": "Conferma la password", + "b2": "Riferimenti", + "b3": "Inserire la raccomandazione", + "b4": "Facoltativo", + "b5": "Avete accettato", + "b6": "Accordo utente", + "b7": "E impara su di noi", + "b8": "Accordo sulla privacy", + "b9": "registrazione", + "c0": "Numero di conto esistente", + "c1": "Firma subito.", + "c2": "Si prega di leggere e accettare l'accordo", + "c3": "Inserisci il tuo numero di cellulare", + "c4": "Inserisci il numero di posta elettronica", + "c5": "login è stato efficace", + "c6": "Codice istituto (richiesto)", + "c7": "Si prega di compilare il codice dell'istituto", + "c8": "Registrati ora per iniziare il tuo viaggio nella criptovaluta" + }, + "safe": { + "a0": "Separazione", + "a1": "vincolante", + "a2": "mailbox", + "a3": "Email n.", + "a4": "Inserisci il tuo numero di posta elettronica", + "a5": "Codice di verifica Email", + "a6": "Inserire il codice di verifica", + "a7": "Codice di verifica", + "a8": "Unlegante riuscito", + "a9": "Binding riuscito", + "b0": "Scordati la password di accesso", + "b1": "numero di conto", + "b2": "Inserisci il cellulare", + "b3": "Nuova password", + "b4": "Inserisci una nuova password", + "b5": "Conferma password", + "b6": "Conferma la password", + "b7": "Conferma modifica", + "b8": "Inserisci il numero di cellulare o di posta elettronica corretto", + "b9": "Google verificatore", + "c0": "Come farlo: Scarica e apri il verificatore di Google, scansiona il codice QR sotto o inserisci manualmente la chiave segreta per aggiungere il segno di verifica", + "c1": "Copia chiave", + "c2": "Ho tenuto la chiave come si deve, se la perdo, non sarà recuperata.", + "c3": "passo successivo", + "c4": "Codice di verifica SMS", + "c5": "Google captcha", + "c6": "Conferma il legame", + "c7": "Centro di sicurezza", + "c8": "Login password", + "c9": "modifica", + "d0": "montato", + "d1": "Codice di transazione", + "d2": "cellulare", + "d3": "Modificato con successo", + "d4": "numero di cellulare", + "d5": "Inserisci il numero di telefono cellulare", + "d6": "Inserisci codice di verifica SMS", + "d7": "chiusura", + "d8": "aperto", + "d9": "verifica", + "e0": "breve messaggio", + "e1": "Chiuso con successo", + "e2": "Apri con successo", + "e3": "conferma", + "e4": "Imposta con successo", + "Remembered": "Ricordato la tua password?", + "e5": "Recupera password" + }, + "transfer": { + "a0": "Registrazione di trasferimento", + "a1": "successo", + "a2": "numero", + "a3": "direzione", + "a4": "Attività del conto", + "a5": "Conto contrattuale", + "a6": "Conto di leva", + "a7": "Conto finanziario", + "a8": "Trasferimento", + "a9": "da", + "b0": "a", + "b1": "trasferire valuta", + "b2": "saldo", + "b3": "tutto", + "b4": "Trasferimento" + }, + "notice": { + "a0": "dettagli", + "a1": "Notifica del messaggio", + "a2": "Avviso", + "a3": "news" + }, + "invite": { + "a0": "Goditi lo sconto commerciale e invita gli amici", + "a1": "partner", + "a2": "Goditi lo sconto commerciale", + "a3": "Utenti ordinari", + "a4": "La mia identità", + "a5": "Goditi la tua identità", + "a6": "Il mio codice d'invito", + "a7": "Copia codice di invito QR", + "a8": "Copia link di invito", + "a9": "La mia promozione", + "b0": "Numero totale di promozioni", + "b1": "persone", + "b2": "Importo totale del reddito", + "b3": "Risultati della promozione", + "b4": "invito diretto", + "b5": "Registrazione della Commissione restituita", + "b6": "Grado", + "b7": "Impostazione del livello", + "b8": "Condizioni di promozione", + "b9": "Dividend interessi", + "c0": "Cognome?", + "c1": "Numero di promotori", + "c2": "Conversione del reddito", + "c3": "Registrazione di invito", + "c4": "Registrazione della Commissione restituita", + "c5": "Descrizione degli interessi di classe", + "c6": "Grado", + "c7": "Diritti e interessi", + "c8": "spiegare", + "c9": "I miei diritti e interessi" + }, + "help": { + "a0": "dettagli", + "a1": "college", + "a2": "classificazione" + }, + "login": { + "a0": "elettronica", + "a1": "Per abbonarsi, digitare la mailbox", + "a2": "password", + "a3": "Inserisci una password", + "a4": "Firma in", + "a5": "Scordati la password", + "a6": "Nessun conto", + "a7": "Registrati ora", + "a8": "cellulare", + "a9": "mailbox", + "b0": "completa", + "b1": "Account di accesso", + "b2": "Accedi ora per iniziare il tuo viaggio nella criptovaluta", + "b3": "E-mail", + "b4": "Inserisci la tua email" + }, + "contract": { + "a0": "aprire un granaio per fornire sollievo", + "a1": "posizione", + "a2": "affidare", + "a3": "storia", + "a4": "Operazioni contrattuali", + "a5": "Apertura riuscita", + "a6": "Tipo di transazione", + "a7": "Chiuso", + "a8": "Importo delegato totale", + "a9": "Prezzo medio di transazione", + "b0": "Prezzo della Commissione", + "b1": "Margine", + "b2": "Carica di servizio", + "b3": "Stato", + "b4": "operazione", + "b5": "annullare l'ordine", + "b6": "revocato", + "b7": "Senza", + "b8": "Operazioni parziali", + "b9": "Tutti chiusi", + "c0": "Kaiduo.", + "c1": "Pingkong", + "c2": "Aria aperta", + "c3": "Pinto", + "c4": "promemoria", + "c5": "Annulla l'ordine corrente", + "c6": "Cancellato con successo", + "c7": "Profitto e perdita", + "c8": "condivisione", + "c9": "Informazioni sull’incarico", + "d0": "Nessun dato disponibile", + "d1": "Prezzo", + "d2": "numero", + "d3": "Tempo di transazione", + "d4": "Diritti dell'utente", + "d5": "Risultato e perdita non saldati", + "d6": "Tasso di rischio", + "d7": "Prezzo di mercato", + "d8": "USDT", + "d9": "Attività di deposito", + "e0": "Buffo", + "e1": "Può aprire di più", + "e2": "Orribile", + "e3": "Può aprire vuoto", + "e4": "disponibile", + "e5": "Trasferimento", + "e6": "Tasso di capitale", + "e7": "Distanza di regolamento", + "e8": "molti", + "e9": "prezzo di apertura", + "f0": "Trasferimento di fondi", + "f1": "Calcolatore", + "f2": "Sul contratto", + "f3": "Fondo di protezione dei rischi", + "f4": "Storia dei costi di capitale", + "f5": "Obbligo generale", + "f6": "ordine di mercato", + "f7": "È basato su", + "f8": "Il prezzo di", + "f9": "Doppia leva finanziaria", + "g0": "Kaiduo.", + "g1": "Aria aperta", + "g2": "Commissione di successo", + "g3": "Mostra solo il contratto corrente", + "g4": "Keping", + "g5": "affidare", + "g6": "prezzo medio di apertura", + "g7": "Prezzo di riferimento per regolamento", + "g8": "Stimata forte parità", + "g9": "Reddito versato", + "h0": "tasso di rendimento", + "h1": "Stop profit", + "h2": "Perdita di arresto", + "h3": "chiudere la posizione", + "h4": "Il prezzo di mercato è piatto", + "h5": "Prendi profitto e ferma la perdita", + "h6": "piatto", + "h7": "Inserire il prezzo di chiusura", + "h8": "prezzo fisso", + "h9": "Indicare il quantitativo di chiusura", + "i0": "Keping", + "i1": "Prezzo di apertura medio", + "i2": "Ultimo prezzo di transazione", + "i3": "Inserisci il prezzo", + "i4": "Avere un profitto", + "i5": "Prezzo di mercato a", + "i6": "Quando l'operazione è completata, il profitto e la perdita saranno stimati", + "i7": "fermare la perdita", + "i8": "Stop loss Commission sarà attivato quando l'operazione è completata, e ci si aspetta profitti e perdite dopo l'operazione", + "i9": "determinare", + "j0": "Chiusura riuscita", + "j1": "Il prezzo di mercato è piatto", + "j2": "Tutto piatto", + "j3": "successo", + "j4": "Imposta con successo", + "j5": "Non c'e'nessuna corrispondenza per un calcolo intelligente.", + "j6": "do", + "j7": "tasso di chiusura", + "j8": "Digital asset trading platform", + "j9": "Quando {name1} incontra {Name2} {name3} sulla strada dell'ascensione ardente", + "k0": "Prezzo di apertura", + "k1": "Prezzo ultimo", + "k2": "Scansion codice per saperne di più", + "k3": "Regolamento del risultato economico", + "k4": "Lo screenshot è stato salvato localmente", + "k5": "Screenshot non riuscito", + "k6": "Schermo stampa lunga", + "k7": "Un clic piano", + "k8": "Un click indietro", + "k9": "E'tutto piatto?", + "l0": "Tutti uguali, successo", + "l1": "Una chiave inversa", + "l2": "Successo inverso", + "l3": "Pingkong", + "l4": "Pinto" + }, + "otc": { + "a0": "Pubblicità", + "a1": "ordine", + "a2": "Moneta di transazione", + "a3": "Il mio ordine", + "a4": "La mia pubblicità", + "a5": "acquisto", + "a6": "vendere", + "a7": "totale", + "a8": "eccedenza", + "a9": "Limiti", + "b0": "Prezzo unitario", + "b1": "Modalità di pagamento", + "b2": "operazione", + "b3": "totale", + "b4": "Si prega di scegliere il metodo di pagamento", + "b5": "Quantità di input", + "b6": "Effettuare un ordine", + "b7": "Alipay", + "b8": "Chat", + "b9": "carta bancaria", + "c0": "verificare il successo", + "c1": "Stato", + "c2": "Numero di pubblicità", + "c3": "Prezzo totale", + "c4": "numero", + "c5": "Tempo di rilascio", + "c6": "Sulla mensola", + "c7": "revocato", + "c8": "In commercio", + "c9": "Completato", + "d0": "promemoria", + "d1": "È rimosso l'annuncio corrente", + "d2": "determinare", + "d3": "annulla", + "d4": "Cancellato con successo", + "d5": "Conto di valuta legale", + "d6": "congelati", + "d7": "Numero del conto corrente", + "d8": "Inserisci il numero di conto", + "d9": "nome completo", + "e0": "Inserisci il tuo nome", + "e1": "Codice di pagamento", + "e2": "vincolante", + "e3": "Conto di Webchat", + "e4": "Nome della banca", + "e5": "Inserisci il nome della banca", + "e6": "Apertura del conto", + "e7": "Inserire la sezione di apertura del conto", + "e8": "Numero della carta bancaria", + "e9": "Inserisci il numero della carta bancaria", + "f0": "Modificato con successo", + "f1": "Aggiunto con successo", + "f2": "vendere fuori", + "f3": "acquisto", + "f4": "Dettagli dell'ordine", + "f5": "Numero d'ordine", + "f6": "numero di conto", + "f7": "Banca di deposito", + "f8": "Tempo rimanente", + "f9": "ramo", + "g0": "secondo", + "g1": "Biglietto di pagamento", + "g2": "confermare il pagamento", + "g3": "annullamento dell'ordine", + "g4": "Conferma ricevuta", + "g5": "Non ricevuto", + "g6": "Annulla l'ordine corrente", + "g7": "Ordine annullato", + "g8": "Conferma il pagamento corrente", + "g9": "Funzionamento riuscito", + "h0": "Dopo la conferma della raccolta, le attività saranno vendute e trasferite automaticamente", + "h1": "Dopo aver confermato che il pagamento non è stato ricevuto, l'ordine entrerà automaticamente nella modalità di ricorso", + "h2": "Ordine di vendita", + "h3": "Ordine di acquisto", + "h4": "Ordine di acquisto pubblicitario", + "h5": "Ordine di vendita pubblicitario", + "h6": "tempo", + "h7": "dettagli", + "h8": "intero", + "h9": "Chiuso", + "i0": "Da pagare", + "i1": "Da confermare", + "i2": "Sotto denuncia", + "i3": "Tipi di pubblicità", + "i4": "Seleziona il tipo di transazione", + "i5": "Seleziona la valuta di transazione", + "i6": "Prezzo", + "i7": "Inserisci il prezzo", + "i8": "prezzo minimo", + "i9": "Inserisci il prezzo più basso", + "j0": "Prezzo più alto", + "j1": "Inserisci il prezzo più alto", + "j2": "osservazioni", + "j3": "Per favore inserisci i tuoi commenti", + "j4": "rilascio", + "j5": "Pubblicato con successo", + "j6": "metodo di pagamento", + "j7": "Quantità minima", + "j8": "Quantità massima", + "j9": "Inserisci il volume minimo di transazione", + "k0": "Inserisci il volume massimo di trading" + }, + "first": { + "a0": "Vai al vero nome", + "a1": "Su di noi", + "a2": "Benvenuti!", + "a3": "Ferma l'impostazione del profitto e della perdita di arresto", + "a4": "Commercio all'ultimo prezzo attuale", + "a5": "Mantenere la posizione", + "a6": "Gestione degli ordini", + "a7": "Tutti gli incarichi", + "a8": "Archivi storici", + "a9": "multiplo", + "b0": "Sei sicuro di voler uscire di casa?", + "b1": "Firma o registro", + "b2": "Ciao, benvenuto a Moabcoin", + "b3": "importo", + "b4": "indice dei punti", + "b5": "Indice dei contratti", + "b6": "Supporta metodi di acquisto multipli", + "b7": "Acquisto di denaro veloce", + "b8": "sostenibile", + "b9": "L'area corrente non è ancora aperta", + "c0": "acquisto", + "c1": "vendere fuori", + "c2": "tempo", + "c3": "Prezzo totale", + "c4": "numero", + "c5": "Ultimo prezzo", + "c6": "Atti classificati", + "c7": "volume" + }, + "recharge": { + "a0": "Cambia valuta", + "a1": "*Cambio di indirizzo può ricevere solo", + "a2": "Se ricaricate i vostri beni in altre valute, non sarete in grado di recuperarli!", + "a3": "Erc20 è consigliato per la raccolta", + "a4": "Copia indirizzo", + "a5": "*Assicuratevi che l'indirizzo e le informazioni siano corretti prima del trasferimento!Una volta trasferito, è irrevocabile!", + "a6": "Si prega di rigenerare" + }, + "currency": { + "a0": "Operazioni in valuta legale", + "a1": "Mi piacerebbe comprarlo io.", + "a2": "Io voglio vendere", + "a3": "Acquisto di una moneta", + "a4": "Vendita di una moneta", + "a5": "Acquisto per quantità", + "a6": "Acquisto per importo", + "a55": "vendere per quantità", + "a66": "vendere per importo", + "a7": "Inserisci la quantità di acquisto", + "a8": "Inserisci l'importo dell'acquisto", + "a9": "Inserire il quantitativo in vendita", + "b0": "Inserire l'importo della vendita", + "b1": "Prezzo unitario", + "b2": "0 acquisto di spese di movimentazione", + "b3": "0 Vendita di commissione", + "b4": "Insufficiente saldo disponibile", + "b5": "Per favore completare la certificazione avanzata prima", + "b6": "De autenticazione", + "b7": "Conferma acquisto", + "b8": "Conferma vendita" + }, + "shou": { + "a0": "Ricarica il conto", + "a1": "Aggiungi fondi di criptovaluta al tuo portafoglio", + "a2": "E inizia subito a fare trading", + "a3": "Ricarica ora", + "a4": "Piattaforma globale di trading di asset digitali", + "a5": "Semplifica le transazioni di risorse crittografate", + "a6": "Iscriviti ora", + "a7": "Digital Asset Market Express", + "a8": "Tendenza di mercato", + "a9": "Valuta", + "a10": "Ultimo prezzo (USD)", + "a11": "Aumento 24h", + "a12": "Volume di transazione 24h", + "a13": "Primi 10", + "a14": "5 milioni+", + "a15": "< 0,10%", + "a16": "200+", + "a17": "Classifica globale", + "a18": "gli utenti si fidano di noi", + "a19": "Commissioni ultra basse", + "a20": "Paesi", + "a21": "Supporto multi-terminale", + "a22": "Scambia asset digitali sempre e ovunque", + "a23": "Supporta un'ampia gamma di tipi di risorse, con tutte le informazioni sulla valuta", + "a24": "App store", + "a25": "APK Android", + "a26": "Scansiona il codice per scaricare l'APP", + "a27": "iOS & Android", + "a28": "Perché scegliere xuscoin.com?", + "a29": "Sforzati di fornire servizi di trading di asset digitali per più paesi", + "a30": "Trading semplice e conveniente di risorse crittografate", + "a31": "Il prodotto è facile da capire, il processo di transazione è conveniente e la piattaforma di servizio asset blockchain one-stop", + "a32": "In base all'esperienza dell'utente, fornisci un'esperienza di servizio di crittografia piacevole", + "a33": "Al servizio di regioni multilingue globali, diventando un gateway per tutti gli utenti per entrare nel mondo crittografato", + "a34": "Sicurezza e stabilità con zero incidenti", + "a35": "Garanzie multiple sulla strategia di sicurezza, garanzia del fondo di riserva al 100%, non si sono verificati incidenti di sicurezza dalla sua istituzione", + "a36": "Tasso di commissione di transazione ottimale", + "a37": "Tariffe di transazione preferenziali, diritti VIP competitivi, goditi il ​​servizio della massima qualit", + "a38": "Guida per principianti", + "a39": "Comprendi rapidamente il processo di transazione degli asset digitali", + "a40": "guadagna reddito immediatamente", + "a41": "Clicca per andare", + "a42": "Piattaforma di trading di criptovalute XUScoin - Progettata per tutti", + "a43": "Inizia il viaggio di crittografia" + }, + "homeNewText": { + "aa3": "Registrati ora e inizia il tuo viaggio nella criptovaluta", + "aa4": "Inizia a fare trading immediatamente", + "aa7": "Valuta", + "aa8": "Accedi/Registrati", + "bb1": "Ultimo prezzo (USD)", + "bb2": "aumento 24 ore", + + "bb4": "Il futuro del denaro è qui", + "bb5": "Siamo il luogo più affidabile in cui gli investitori possono acquistare, vendere e gestire criptovalute", + "bb6": "Registrati via e-mail", + "bb7": "Cattura facile", + "bb8": "Opportunità di trading", + "bb9": "Comodo per usare la criptovaluta", + "bb10": "Strumenti", + "bb11": "Lavoriamo regolarmente sull'aggiornamento delle funzionalità esistenti e sull'implementazione di nuove funzionalità del servizio.", + "bb12": "Elaborazione della crittografia commerciale", + "bb13": "Fornire un modo affidabile per accettare comodamente pagamenti dalle criptovalute più popolari in tutto il mondo.", + "bb14": "Scambio di criptovaluta illimitato", + "bb15": "Scambia Bitcoin, Tether, Litecoin, Ethereum e oltre 50 altre monete in modo semplice e sicuro.", + "bb16": "Ottimizza l'esperienza utente", + "bb17": "Ottimizza l'esperienza dell'utente: lancia nuovi prodotti di alta qualità, semplifica le operazioni e migliora la facilità d'uso.", + "bb18": "Deposito e prelievo Flash", + "bb19": "I nostri partner", + "bb20": "In tutto il mondo", + "bb21": "I nostri partner sono leader di mercato e ci aiutano a fornire le migliori soluzioni di criptovaluta.", + "bb22": "Guida per principianti", + "bb23": "Crea un account {nome}", + "bb24": "Registrati ora e inizia il tuo viaggio nel trading!", + "bb25": "Registrati", + "bb26": "Deposito", + "bb27": "Ricarica rapida e deposito facile!", + "bb28": "Ricarica", + "bb29": "Inizia a fare trading", + "bb30": "Inizia a fare trading e goditi possibilità illimitate!", + "bb31": "Transazione da moneta a moneta", + "bb32": "Apri transazioni sempre e ovunque", + "bb33": "Scansiona per scaricare", + "bb34": "Inizia il tuo viaggio nel mondo delle criptovalute adesso!", + "bb35": "Ci vogliono solo 10 secondi per registrarsi e iniziare a fare trading", + "bb36": "Registrazione gratuita", + "bb37": "Depositi e prelievi possono essere completati in 3 minuti al massimo.", + "bb38": "Registrati ora", + "bb39": "Fai trading ora", + "bb40": "{name}, fai trading sempre e ovunque", + "bb41": "Scansiona il codice QR per scaricare l'APP di {name}", + "bb42": "Scansiona il codice QR per scaricare l'APP" + } +} \ No newline at end of file diff --git a/i18n/lang/jp.json b/i18n/lang/jp.json new file mode 100644 index 0000000..60de05a --- /dev/null +++ b/i18n/lang/jp.json @@ -0,0 +1,927 @@ +{ + "common": { + "D": "日", + "M": "月", + "Y": "年", + "add": "追加", + "address": "住所", + "all": "すべて", + "amout": "数", + "cancel": "キャンセル", + "check": "審査する", + "code": "認証コード", + "confirm": "を選択します", + "date": "日付", + "detail": "詳細", + "email": "メールボックス", + "enter": "入力してください", + "error": "失敗", + "getCode": "認証コードを取得", + "h": "時刻", + "loadMore": "もっとロード", + "m": "ポイント", + "money": "金額", + "more": "詳細", + "notData": "データがありません", + "notMore": "これ以上ないです", + "phone": "携帯電話", + "requestError": "インターネットが忙しいので、後で試してみてください。", + "s": "秒", + "save": "保存", + "select": "選択してください", + "sendSuccess": "送信成功", + "sms": "メッセージ", + "submit": "送信", + "success": "成功", + "tips": "暖かいヒント", + "total": "総額", + "type": "タイプ", + "copy": "コピー", + "light": "白", + "dark": "黒い", + "service": "顧客サービス", + "toDwon": "ダウンロードページに行くかどうか", + "a0": "申し込みコードを入力してください", + "a1": "コピー成功", + "a2": "コピーに失敗しました", + "a3": "購入申請記録", + "a4": "支払い金額", + "a5": "申し込み数", + "a6": "アカウント", + "a7": "チャージ数量", + "a8": "支払証明書", + "a9": "チャージ数量を入力してください", + "b0": "支払証明書をアップロードしてください", + "b1": "買います{amount}枚{name}トークンがもらえます{rate}%奨励", + "b2": "申し込み活動", + "b3": "保存に成功しました", + "b4": "保存に失敗しました", + "b5": "招待ポスターを生成", + "b6": "ポスターを選択", + "b8": "寄り付き時間", + "b9": "終値時間", + "c0": "最小チャージ金額:{num}では、最小金額以下のチャージは入金されず、かつ返却できません。", + "c1": "最小貨幣高", + "c2": "バージョン番号", + "c3": "開けてもいいです", + "c4": "仮勘定保証金", + "c6": "増加率", + "c7": "現在の評価値", + "c5": "あなたの振替注文書はすでに提出されました。待ってください。振り替え結果はメールやメールで通知されます。ご確認ください。問題があれば、すぐにカスタマーサービスに連絡してください。", + "GraphicValidation": "グラフィカルな検証" + }, + "base": { + "a0": "タイトル", + "a1": "戻る", + "a2": "詳細", + "a3": "相場", + "a4": "約束権", + "a5": "新コーナーを開く", + "a6": "会員", + "a7": "学院", + "a8": "取引ペア", + "a9": "最新の価格", + "b0": "上昇幅", + "b1": "ログインをクリックします", + "b2": "いらっしゃいませ", + "b3": "ログインしてください", + "b4": "級が上がる", + "b5": "貨幣をチャージする", + "b6": "貨幣を受け取る", + "b7": "押し広める", + "b8": "手数料を差し引く", + "b9": "利用可能", + "c0": "買います", + "c1": "私の依頼", + "c2": "認証", + "c3": "安全センター", + "c4": "メッセージ", + "c5": "お札の住所", + "c6": "設定", + "c7": "自選する", + "c8": "追加成功", + "c9": "キャンセル成功", + "d0": "最初のページ", + "d1": "取引", + "d2": "資産", + "d3": "検索キーワードを入力してください。", + "d4": "全部", + "d5": "マザーボード", + "d6": "総資産換算", + "d7": "通貨口座", + "d8": "振り回す", + "d9": "通貨を検索する", + "e0": "非表示", + "e1": "残余資産", + "e2": "凍結する", + "e3": "換算する", + "e4": "契約口座", + "e5": "契約が折衷する", + "e6": "鉱夫階級", + "e7": "鉱夫", + "wallet": "財布", + "f0": "暗号通貨への旅を始めます", + "f1": "コインを買います", + "f2": "今行く", + "f3": "人気の暗号通貨", + "f4": "名前", + "f5": "共通機能", + "f6": "一次認証を完了しました", + "f7": "リザーブ証明書", + "f8": "当社は、ファンド状況の高い透明性を達成し、ユーザー資産の積立率を1:1に維持することに取り組んでいます。", + "f9": "ビットコイン", + "g0": "平均リターン", + "g1": "無限の可能性を創造する", + "g2": "探索を開始する", + "g3": "購入可能", + "g4": "販売可能", + "g5": "相手先価格", + "h1": "帳簿" + }, + "accountSettings": { + "a0": "アカウントの設定", + "a1": "顔写真", + "a2": "ニックネーム", + "a3": "メインアカウント", + "a4": "携帯の番号", + "a5": "縛りを解く", + "a6": "結合", + "a7": "メールボックスバインド", + "a8": "アカウントを切り替え", + "a9": "ログアウト", + "b0": "ニックネームを変更", + "b1": "ニックネームを入力してください", + "b2": "言語", + "b3": "連絡情報", + "b4": "一般的なコンサルティング", + "b5": "顧客サービス", + "b6": "メディア連携", + "b7": "どんな助けが必要ですか?連絡してください。" + }, + "assets": { + "a0": "お札の住所管理", + "a1": "アドレス帳はよく使う住所を管理してもいいです。アドレス帳にある住所にお金を引き出してもいいです。多重検査は必要ありません。", + "a2": "自動貨幣の引き出しがサポートされています。「name」を使ってお金を引き出す場合、ネットアドレス帳に存在する住所だけでお金を引き出します。", + "a3": "アドレスを削除", + "a4": "アドレスを追加", + "a5": "削除する住所を選択してください。", + "a6": "現在選択されているアドレスを削除しますか?", + "a7": "水のながれ", + "a8": "総額", + "a9": "利用可能", + "b0": "凍結する", + "b1": "資金勘定", + "b2": "契約口座", + "b3": "てこの口座", + "b4": "投資信託口座", + "b5": "検索キーワードを入力してください。", + "b6": "貨幣を受け取る", + "b7": "チェーンの種類を選択してください", + "b8": "お札の住所", + "b9": "住所を入力してください", + "c0": "数", + "c1": "残額", + "c2": "数量を入力してください", + "c3": "全部", + "c4": "手数料", + "c5": "財布の住所をよく確認して入力してください。", + "c6": "対応していないデジタル通貨をウォレットアドレスに送ると永久的な損失が発生します。", + "c7": "お引き出し手数料は引き出しの数から差し引きます。", + "c8": "貨幣の引き出し記録", + "c9": "時間", + "d0": "状態", + "d1": "審査中", + "d2": "成功", + "d3": "失敗", + "d4": "もっと見る", + "d5": "提出に成功しました。審査中です。", + "d6": "編集", + "d7": "追加", + "d8": "住所", + "d9": "住所を入力または貼り付けてください。", + "e0": "コメント", + "e1": "コメントを入力してください", + "e2": "住所を記入してください", + "e3": "備考を記入してください", + "e4": "操作が成功しました", + "e5": "貨幣をチャージする", + "e6": "上の二次元コードをスキャンしてチャージアドレスを取得します。", + "e7": "チャージアドレス", + "e8": "チャージの数", + "e9": "チャージの数を入力してください。", + "f0": "この住所は最新のチャージ住所です。システムがチャージを受けると、自動的に入金されます。", + "f1": "振替はブロックチェーンネットワーク全体で確認する必要があります。num個のネットワークに確認したら、自動的に口座に振り込みます。", + "f2": "このネットワークを確認する時、あなたの", + "f3": "この住所だけを送ってください。他のデジタル通貨をこの住所に送ります。永久的な損失をもたらします。", + "f4": "チャージ記録" + }, + "auth": { + "a0": "認証", + "a1": "実名認証", + "a2": "認証なし", + "a3": "認証済み", + "a4": "認証", + "a5": "審査中", + "a6": "認証に失敗しました", + "a7": "国籍", + "a8": "国籍を選んでください", + "a9": "実名", + "b0": "実名を入力してください。", + "b1": "証明書番号", + "b2": "証明書の番号を入力してください。", + "b3": "確認", + "b4": "認証に成功しました", + "b5": "証明書の正面の写真をアップロードしてください。", + "b6": "証明書の裏に載せてください。", + "b7": "手に持っている証明書の写真をアップロードしてください。", + "b8": "写真のクリアな透かしなし、上半身の完全性を確保する。", + "b9": "ファイルサイズが大きすぎて、超えてはいけません。", + "c0": "ファイルタイプエラー", + "c1": "アップロード成功", + "c2": "証明書の裏写真をアップロードしてください。", + "c3": "証明書の正面写真をアップロードしてください。", + "c4": "アップロードが成功しました。審査を待ってください。", + "c5": "生年月日", + "c6": "証明書の種類", + "c7": "住宅アドレス", + "c8": "居住地の住所を入力してください", + "c9": "電話番号", + "d0": "電話番号を入力してください", + "d1": "運転免許証", + "d2": "パスポート", + "d3": "IDカード", + "d4": "日付を選択してください", + "d5": "選んでください" + }, + "exchange": { + "a0": "貨幣", + "a1": "購入を申請する", + "a2": "契約書", + "a3": "取引", + "a4": "現在の依頼", + "a5": "履歴依頼", + "a6": "追加成功", + "a7": "キャンセル成功", + "a8": "発行総量", + "a9": "流通総量", + "b0": "発行価格", + "b1": "リリース時間", + "b2": "白書の住所", + "b3": "公式サイトのアドレス", + "b4": "概要", + "b5": "買う", + "b6": "売ります", + "b7": "委託価格", + "b8": "タイプ", + "b9": "指し値取引", + "c0": "市価取引", + "c1": "取引済み", + "c2": "合計", + "c3": "買い入れる", + "c4": "売りに出る", + "c5": "数", + "c6": "ベスト市場で取引が成立する", + "c7": "総価格", + "c8": "利用可能な数", + "c9": "総価値", + "d0": "ログイン", + "d1": "タイムチャート", + "d2": "価格", + "d3": "最新の取引", + "d4": "時間", + "d5": "方向", + "d6": "価格を限る", + "d7": "市価", + "d8": "価格を入力してください", + "d9": "数量を入力してください", + "e0": "総価格を入力してください", + "e1": "注文しました", + "e2": "平均価格", + "e3": "最高", + "e4": "最低", + "e5": "量を測る", + "e6": "商売相場", + "e7": "通貨情報", + "e8": "分", + "e9": "時間", + "f0": "空", + "f1": "週間", + "f2": "月", + "f3": "買い取り価格", + "f4": "売り相場", + "f5": "貨幣取引", + "f6": "検索キーワードを入力してください。", + "f7": "取引ペア", + "f8": "最新の価格", + "f9": "上昇幅", + "g0": "自選する", + "g1": "私の依頼", + "g2": "依頼を取り消す", + "g3": "操作", + "g4": "取り消す", + "g5": "現在の依頼を取り消すかどうか", + "g6": "キャンセル成功" + }, + "option": { + "a0": "約束権", + "a1": "距離受け渡し", + "a2": "多目に見る", + "a3": "暇を見る", + "a4": "収益率", + "a5": "買います", + "a6": "複数", + "a7": "空", + "a8": "現在", + "a9": "次の号", + "b0": "平を読む", + "b1": "上げ幅の選択", + "b2": "収益率", + "b3": "購入数量", + "b4": "数量を入力してください", + "b5": "残額", + "b6": "利益と損失", + "b7": "即座に買う", + "b8": "上がる", + "b9": "フラット", + "c0": "転ぶ", + "c1": "購入成功", + "c2": "詳細", + "c3": "注文番号", + "c4": "寄り付き相場", + "c5": "終値", + "c6": "買い入れ時間", + "c7": "購入数量", + "c8": "購入タイプ", + "c9": "状態", + "d0": "受け渡しの結果", + "d1": "決済数量", + "d2": "受け渡し時間", + "d3": "もっと見る", + "d4": "購入オプション", + "d5": "受け渡しを待つ", + "d6": "私の受け渡し", + "d7": "受け渡し記録", + "d8": "分", + "d9": "時間", + "e0": "空", + "e1": "週間", + "e2": "月", + "e3": "方向", + "e4": "上昇幅" + }, + "purchase": { + "a0": "発行価格", + "a1": "通貨を申請購入する", + "a2": "予定ライン時間", + "a3": "申し込み開始時間", + "a4": "申請終了時間", + "a5": "購入を申請する", + "a6": "通貨の申請を選んでください。", + "a7": "購入数量", + "a8": "申し込み数量を入力してください。", + "a9": "全部", + "b0": "即座に申し込みます", + "b1": "申請期間", + "b2": "プロジェクト予熱", + "b3": "申し込みを開始する", + "b4": "申し込みを終了する", + "b5": "上場取引", + "b6": "プロジェクトの詳細", + "b7": "使用するかどうか", + "b8": "買います", + "b9": "申し込み成功" + }, + "reg": { + "a0": "携帯電話の登録", + "a1": "メールアドレス登録", + "a2": "携帯電話", + "a3": "携帯の番号を入力してください", + "a4": "メールボックス", + "a5": "メールアドレスを入力してください", + "a6": "認証コード", + "a7": "認証コードを入力してください", + "a8": "パスワード", + "a9": "パスワードを入力してください", + "b0": "パスワードを確認する", + "b1": "パスワードを確認してください", + "b2": "推薦人", + "b3": "推薦者を入力してください", + "b4": "記入する", + "b5": "同意しました", + "b6": "ユーザプロトコル", + "b7": "私たちのことを知っています", + "b8": "プライバシープロトコル", + "b9": "登録する", + "c0": "アカウントがあります", + "c1": "すぐに登録します", + "c2": "合意を読んでください。", + "c3": "携帯番号を記入してください", + "c4": "メールアドレスを記入してください", + "c5": "登録成功", + "c6": "機関コード (必須)", + "c7": "機関コードを入力してください", + "c8": "今すぐ登録して暗号通貨の旅を始めましょう" + }, + "safe": { + "a0": "縛りを解く", + "a1": "結合", + "a2": "メールボックス", + "a3": "メールアドレス", + "a4": "メールアドレスを入力してください", + "a5": "メールアドレス", + "a6": "認証コードを入力してください", + "a7": "認証コード", + "a8": "縛りを解くことに成功した", + "a9": "バインディング成功", + "b0": "パスワードを忘れます", + "b1": "アカウント", + "b2": "携帯電話を入力してください", + "b3": "新しいパスワード", + "b4": "新しいパスワードを入力してください", + "b5": "パスワードを確認する", + "b6": "パスワードを確認してください", + "b7": "変更の確認", + "b8": "正しい携帯電話またはメール番号を入力してください。", + "b9": "Google", + "c0": "操作方法:Googleの検証器をダウンロードして開き、下の二次元コードをスキャンしたり、秘密鍵を手動で入力して検証トークンを追加する。", + "c1": "鍵をコピー", + "c2": "鍵はちゃんと保存しましたので、なくしたら取り戻せません。", + "c3": "次のステップ", + "c4": "ショートメッセージの検証コード", + "c5": "Googleの認証コード", + "c6": "バインディングの確認", + "c7": "安全センター", + "c8": "ログインパスワード", + "c9": "変更", + "d0": "設定", + "d1": "取引パスワード", + "d2": "携帯電話", + "d3": "修正成功", + "d4": "携帯の番号", + "d5": "携帯の番号を入力してください", + "d6": "メールの検証コードを入力してください。", + "d7": "閉じる", + "d8": "開く", + "d9": "検証", + "e0": "メッセージ", + "e1": "クローズ成功", + "e2": "オープン成功", + "e3": "確認", + "e4": "設定成功", + "Remembered": "パスワードを覚えていますか?", + "e5": "パスワードを取得" + }, + "transfer": { + "a0": "記録を振り替える", + "a1": "成功", + "a2": "数", + "a3": "方向", + "a4": "口座資産", + "a5": "契約口座", + "a6": "てこの口座", + "a7": "投資信託口座", + "a8": "振り回す", + "a9": "から", + "b0": "を選択します", + "b1": "送金通貨", + "b2": "残額", + "b3": "全て", + "b4": "振り替え済み" + }, + "notice": { + "a0": "詳細", + "a1": "メッセージ", + "a2": "公告する", + "a3": "メッセージ" + }, + "invite": { + "a0": "取引を尊んで帰用して友人を招く", + "a1": "パートナー", + "a2": "取引を尊び奉公する", + "a3": "一般ユーザー", + "a4": "私の身分", + "a5": "身分を尊ぶ", + "a6": "私の招待番号", + "a7": "招待された二次元コードをコピー", + "a8": "招待リンクをコピー", + "a9": "私のプロモーション", + "b0": "総人数を押し広める", + "b1": "人", + "b2": "総収益の折衷", + "b3": "普及記録", + "b4": "直接招待", + "b5": "返上記録", + "b6": "レベル", + "b7": "レベル設定", + "b8": "昇進条件", + "b9": "利益を分配する", + "c0": "ニックネーム", + "c1": "人数を押し広める", + "c2": "収益折衷", + "c3": "招待レコード", + "c4": "返上記録", + "c5": "等級権益説明", + "c6": "レベル", + "c7": "権益", + "c8": "説明", + "c9": "私の権益" + }, + "help": { + "a0": "詳細", + "a1": "学院", + "a2": "カテゴリ" + }, + "login": { + "a0": "メール", + "a1": "メールアドレスを入力してください", + "a2": "パスワード", + "a3": "パスワードを入力してください", + "a4": "ログイン", + "a5": "パスワードを忘れます", + "a6": "アカウントがありません", + "a7": "即時登録", + "a8": "携帯電話", + "a9": "メールボックス", + "b0": "完了", + "b1": "ログインアカウント", + "b2": "今すぐログインして暗号通貨の旅を始めましょう", + "b3": "メール", + "b4": "メールアドレスを入力してください" + }, + "contract": { + "a0": "倉をあける", + "a1": "位置", + "a2": "委託する", + "a3": "歴史", + "a4": "契約取引", + "a5": "オープン成功", + "a6": "取引の種類", + "a7": "取引済み", + "a8": "委託総量", + "a9": "成約価格", + "b0": "委託価格", + "b1": "マージン", + "b2": "手数料", + "b3": "状態", + "b4": "操作", + "b5": "帳消しにする", + "b6": "キャンセルしました", + "b7": "取引が成立していない", + "b8": "部分的な取引", + "b9": "全部成約する", + "c0": "運転が多い", + "c1": "平たい空", + "c2": "暇をあける", + "c3": "平たい", + "c4": "暖かいヒント", + "c5": "現在の注文をキャンセルしますか?", + "c6": "キャンセル成功", + "c7": "利益と損失", + "c8": "分かち合う", + "c9": "委託の詳細", + "d0": "データがありません", + "d1": "価格", + "d2": "数", + "d3": "取引の時間", + "d4": "ユーザー持分", + "d5": "損益が実現されていない", + "d6": "リスク率", + "d7": "市価", + "d8": "USDT", + "d9": "占用保証金", + "e0": "上伸歩調だ", + "e1": "運転が多い", + "e2": "弱気になる", + "e3": "空きがある", + "e4": "利用可能", + "e5": "振り回す", + "e6": "資金費率", + "e7": "距離決済", + "e8": "複数", + "e9": "始値", + "f0": "資金の振り替え", + "f1": "計算機", + "f2": "", + "f3": "リスク保障基金", + "f4": "資金費の歴史", + "f5": "一般依頼", + "f6": "相場の委託", + "f7": "を選択します", + "f8": "の価格", + "f9": "倍レバー", + "g0": "運転が多い", + "g1": "暇をあける", + "g2": "依頼成功", + "g3": "現在の契約のみを表示します。", + "g4": "フラット", + "g5": "委託する", + "g6": "平均始値", + "g7": "決済基準価格", + "g8": "過当評価", + "g9": "決済済み収益", + "h0": "利益率", + "h1": "満ちが止まる", + "h2": "ストップロス", + "h3": "ポジションを閉じる", + "h4": "市価が全平均している", + "h5": "テイクプロフィットとストップロス", + "h6": "フラット", + "h7": "平倉価格を入力してください。", + "h8": "価格を限る", + "h9": "平倉の数量を入力してください。", + "i0": "フラット", + "i1": "寄り付き相場", + "i2": "最新の取引価格", + "i3": "価格を入力してください", + "i4": "利食い", + "i5": "市場価格が", + "i6": "取引が成立した後、損益が予想されます。", + "i7": "ストップロス", + "i8": "時に損失停止の委託をトリガします。取引後に損益が予想されます。", + "i9": "を選択します", + "j0": "平倉成功", + "j1": "市価は全平均ですか", + "j2": "全平均", + "j3": "成功", + "j4": "設定成功", + "j5": "神算鬼謀に匹敵するものはない", + "j6": "します", + "j7": "平倉価格", + "j8": "デジタル資産取引プラットフォーム", + "j9": "name 1が{name 2}{name 3}の熱い上昇の道に出会うと", + "k0": "寄り付き相場", + "k1": "最新の価格", + "k2": "スキャンコードをもっと知りたいです", + "k3": "損益を決算する", + "k4": "スクリーンショットが成功しました。ローカルに保存されました。", + "k5": "スクリーンショット失敗", + "k6": "", + "k7": "ワンボタン", + "k8": "ワンボタンの逆方向", + "k9": "ワンタッチで全フラットにしますか", + "l0": "完全に成功する", + "l1": "キーが逆になるかどうか", + "l2": "逆効果成功", + "l3": "平たい空", + "l4": "平たい" + }, + "otc": { + "a0": "広告を出す", + "a1": "注文書", + "a2": "貨幣を取引する", + "a3": "私の注文", + "a4": "私の広告", + "a5": "買います", + "a6": "売りに出す", + "a7": "合計", + "a8": "残り", + "a9": "数量を限定する", + "b0": "単価", + "b1": "支払い方法", + "b2": "操作", + "b3": "総量", + "b4": "お支払い方法を選択してください。", + "b5": "数量を入力してください", + "b6": "注文する", + "b7": "アリペイを支払う", + "b8": "WeChat", + "b9": "銀行カード", + "c0": "注文しました", + "c1": "状態", + "c2": "広告番号", + "c3": "総価格", + "c4": "数", + "c5": "リリース時間", + "c6": "棚をおりる", + "c7": "キャンセルしました", + "c8": "取引中", + "c9": "完了しました", + "d0": "暖かいヒント", + "d1": "現在の広告を降りますか?", + "d2": "を選択します", + "d3": "キャンセル", + "d4": "キャンセル成功", + "d5": "仏貨の口座", + "d6": "凍結する", + "d7": "アリペイアカウントを支払う", + "d8": "アカウントを入力してください", + "d9": "名前", + "e0": "名前を入力してください", + "e1": "支払いコード", + "e2": "結合", + "e3": "WeChatアカウント", + "e4": "銀行の名前", + "e5": "銀行名を入力してください。", + "e6": "銀行を開設する", + "e7": "口座開設支店を入力してください。", + "e8": "銀行カード番号", + "e9": "銀行カード番号を入力してください。", + "f0": "編集に成功しました", + "f1": "追加成功", + "f2": "売りに出る", + "f3": "買い入れる", + "f4": "注文の詳細", + "f5": "注文番号", + "f6": "アカウント", + "f7": "銀行を開く", + "f8": "残り時間", + "f9": "ポイント", + "g0": "秒", + "g1": "支払証明書をアップロードする", + "g2": "支払いの確認", + "g3": "注文をキャンセルする", + "g4": "入金確認", + "g5": "未着勘定", + "g6": "現在の注文をキャンセルしますか?", + "g7": "注文はキャンセルされました", + "g8": "現在の支払い確認", + "g9": "操作が成功しました", + "h0": "入金確認後、販売資産は自動的に振り替えられます。", + "h1": "お金を受け取っていないことを確認したら、この注文は自動的に申告に入ります。", + "h2": "注文を売る", + "h3": "注文書を買う", + "h4": "広告購入注文書", + "h5": "広告販売注文書", + "h6": "時間", + "h7": "詳細", + "h8": "全部", + "h9": "閉じられました", + "i0": "支払い待ち", + "i1": "確認します", + "i2": "訴えが当たる", + "i3": "広告の種類", + "i4": "取引の種類を選択してください。", + "i5": "通貨の取引を選択してください。", + "i6": "価格", + "i7": "価格を入力してください", + "i8": "最低価格", + "i9": "最低価格を入力してください", + "j0": "高値", + "j1": "最高価格を入力してください", + "j2": "コメント", + "j3": "コメントを入力してください", + "j4": "リリース", + "j5": "リリース成功", + "j6": "お支払い方法", + "j7": "最低量", + "j8": "最高量", + "j9": "最低取引量を入力してください。", + "k0": "最高取引量を入力してください。" + }, + "first": { + "a0": "実名をつける", + "a1": "私たちについて", + "a2": "いらっしゃいませ", + "a3": "ストップロス設定", + "a4": "現在の最新価格で取引する", + "a5": "倉位を持つ", + "a6": "オーダー管理", + "a7": "全部委託する", + "a8": "履歴", + "a9": "倍数", + "b0": "本当にログアウトしますか?", + "b1": "ログインまたは登録", + "b2": "Hi、Moabcoinをご利用ください。", + "b3": "量を測る", + "b4": "現物指数", + "b5": "契約指数", + "b6": "いろいろな方法で買うことができます。", + "b7": "速くお金を買います", + "b8": "永久に続く", + "b9": "現在の地区はまだ開放されていない。", + "c0": "買い入れる", + "c1": "売りに出る", + "c2": "時間", + "c3": "総価格", + "c4": "数", + "c5": "最新の価格", + "c6": "担保資産", + "c7": "出来高" + }, + "recharge": { + "a0": "貨幣の種類を切り替える", + "a1": "*住所変更は受信のみ可能です。", + "a2": "資産を他の貨幣にチャージすれば、探し出せません。", + "a3": "ERC 20を使って入金することをおすすめします。", + "a4": "アドレスをコピー", + "a5": "*振込前に必ず住所と情報を確認してください。いったん転出したら、撤回してはいけません。", + "a6": "再生成してください" + }, + "currency": { + "a0": "仏貨取引", + "a1": "買いたいです", + "a2": "売りたいです", + "a3": "ワンタッチで貨幣を買う", + "a4": "一押しで貨幣を売る", + "a5": "数量別に買う", + "a6": "金額で買う", + "a55": "数量で売る", + "a66": "金額で売る", + "a7": "購入数量を入力してください。", + "a8": "購入金額を入力してください。", + "a9": "販売数量を入力してください。", + "b0": "販売金額を入力してください。", + "b1": "単価", + "b2": "0手数料で買う", + "b3": "0手数料販売", + "b4": "利用可能残高が足りません", + "b5": "先に高級認証を完成してください。", + "b6": "認証に行きます", + "b7": "購入確認", + "b8": "販売の確認" + }, + "shou": { + "a0": "アカウントにリチャージします", + "a1": "ウォレットに暗号通貨資金を追加します", + "a2": "すぐに取引を開始します", + "a3": "今すぐ充電してください", + "a4": "グローバルデジタル資産取引プラットフォーム", + "a5": "暗号化資産の取引を容易にする", + "a6": "今すぐサインアップしてください", + "a7": "デジタルアセットマーケットエクスプレス", + "a8": "市場動向", + "a9": "通貨", + "a10": "最新価格 (USD)", + "a11": "24時間増加", + "a12": "24時間の取引量", + "a13": "トップ 10", + "a14": "500万以上", + "a15": "< 0.10%", + "a16": "200+", + "a17": "グローバルランキング", + "a18": "ユーザーは私たちを信頼しています", + "a19": "超低料金", + "a20": "国", + "a21": "複数端末サポート", + "a22": "いつでもどこでもデジタル資産を取引", + "a23": "あらゆる通貨情報を備えた幅広い資産タイプをサポートします", + "a24": "APP ストア", + "a25": "Android APK", + "a26": "コードをスキャンしてアプリをダウンロードします", + "a27": "iOS と Android", + "a28": "なぜxuscoin.comを選ぶのですか?", + "a29": "複数の国に向けたデジタル資産取引サービスの提供に努める", + "a30": "簡単かつ便利な暗号資産の取引", + "a31": "製品は理解しやすく、取引プロセスは便利で、ワンストップのブロックチェーン資産サービス プラットフォームです。", + "a32": "ユーザーエクスペリエンスに基づいて、快適な暗号化サービスエクスペリエンスを提供します", + "a33": "世界的な多言語地域にサービスを提供し、すべてのユーザーが暗号化された世界に入るゲートウェイになります", + "a34": "「事故ゼロの安全・安定」", + "a35": "複数のセキュリティ戦略保証、100% 予備費保証、設立以来セキュリティ事故は発生していません", + "a36": "最適な取引手数料率", + "a37": "優遇取引レート、競争力のある VIP 権利、最高品質のサービスをお楽しみください", + "a38": "初心者ガイド", + "a39": "デジタル資産の取引プロセスを素早く理解する", + "a40": "すぐに収入を得る", + "a41": "クリックして移動", + "a42": "XUScoin 暗号通貨取引プラットフォーム - 誰でも使えるように設計", + "a43": "暗号化への取り組みを始めましょう" + }, + "homeNewText": { + "aa3": "今すぐ登録して、暗号通貨の旅を始めましょう", + "aa4": "すぐに取引を開始します", + "aa7": "通貨", + "aa8": "ログイン/登録", + "bb1": "最新価格 (USD)", + "bb2": "24時間増加", + + "bb4": "お金の未来がここにあります", + "bb5": "当社は投資家にとって仮想通貨の購入、販売、管理において最も信頼できる場所です", + "bb6": "メールで登録", + "bb7": "簡単キャプチャ", + "bb8": "取引機会", + "bb9": "暗号通貨を使うと便利です", + "bb10": "ツール", + "bb11": "私たちは既存の機能の更新と新しいサービス機能の実装に定期的に取り組んでいます。", + "bb12": "商用暗号化処理", + "bb13": "世界中で最も人気のある暗号通貨からの支払いを便利に受け入れるための信頼できる方法を提供します。", + "bb14": "無制限の暗号通貨交換", + "bb15": "ビットコイン、テザー、ライトコイン、イーサリアム、その他 50 以上のコインを簡単かつ安全な方法で交換できます。", + "bb16": "ユーザー エクスペリエンスを最適化する", + "bb17": "ユーザー エクスペリエンスの最適化: 高品質の新製品を発売し、操作を簡素化し、使いやすさを向上させます。", + "bb18": "フラッシュ入金と出金", + "bb19": "私たちのパートナー", + "bb20": "世界中", + "bb21": "当社のパートナーは市場リーダーであり、当社が最高の暗号通貨ソリューションを提供できるよう支援しています。", + "bb22": "初心者ガイド", + "bb23": "{name} アカウントを作成します", + "bb24": "今すぐ登録して取引の旅を始めましょう!", + "bb25": "登録", + "bb26": "デポジット", + "bb27": "迅速なチャージと簡単な入金!", + "bb28": "リチャージ", + "bb29": "取引を開始", + "bb30": "取引を開始して、無限の可能性を楽しんでください!", + "bb31": "コイン間の取引", + "bb32": "いつでもどこでも取引を開始", + "bb33": "スキャンしてダウンロード", + "bb34": "今すぐ暗号通貨の旅を始めましょう!", + "bb35": "登録して取引を開始するには 10 秒しかかかりません", + "bb36": "無料登録", + "bb37": "入金・出金は最速3分で完了します。", + "bb38": "今すぐ登録", + "bb39": "今すぐ取引", + "bb40": "{name}、いつでもどこでも取引", + "bb41": "QR コードをスキャンして {name} アプリをダウンロードします", + "bb42": "QR コードをスキャンしてアプリをダウンロードします" + } +} \ No newline at end of file diff --git a/i18n/lang/kor.json b/i18n/lang/kor.json new file mode 100644 index 0000000..029496e --- /dev/null +++ b/i18n/lang/kor.json @@ -0,0 +1,927 @@ +{ + "common": { + "D": "해.", + "M": "달.", + "Y": "나이.", + "add": "첨가 하 다.", + "address": "주소.", + "all": "소유 하 다.", + "amout": "수량.", + "cancel": "취소 하 다.", + "check": "심사 하 다.", + "code": "인증번호", + "confirm": "확정 하 다.", + "date": "날짜.", + "detail": "상세 한 상황.", + "email": "메 일주 소", + "enter": "입력 하 세 요", + "error": "실패 하 다.", + "getCode": "인증번호 가 져 오기", + "h": "시.", + "loadMore": "더 많이 불 러 오기", + "m": "분.", + "money": "금액.", + "more": "더.", + "notData": "데이터 없 음", + "notMore": "더 없어.", + "phone": "핸드폰", + "requestError": "네트워크 가 바 쁘 니 잠시 후에 다시 시도 해 주세요.", + "s": "초.", + "save": "보존 하 다.", + "select": "선택 하 세 요.", + "sendSuccess": "발송 성공", + "sms": "문자 메시지", + "submit": "제출 하 다.", + "success": "성공 하 다.", + "tips": "알림", + "total": "총액", + "type": "유형.", + "copy": "복제 하 다.", + "light": "희다.", + "dark": "어둡다.", + "service": "고객 지원", + "toDwon": "다운로드 페이지 로 바로 가기", + "a0": "구 매 신청 코드 를 입력 하 세 요", + "a1": "복사 성공", + "a2": "복사 실패", + "a3": "구 매 신청 기록", + "a4": "지불 금액", + "a5": "구입 신청 수량", + "a6": "계좌번호", + "a7": "충전 수량", + "a8": "지불 증명서", + "a9": "충전 수량 을 입력 하 세 요", + "b0": "지급 증명 서 를 올 려 주세요.", + "b1": "구입 하 다{amount}매{name}토 큰 획득 가능{rate}%장려 하 다.", + "b2": "구 매 신청 이벤트", + "b3": "저장 성공", + "b4": "저장 실패", + "b5": "초대장 생 성", + "b6": "포스터 선택", + "b8": "개장 시간", + "b9": "마감 시간", + "c0": "최소 충전 금액:{num},최소 금액 이하 의 충전 은 입금 되 지 않 으 며 되 돌 릴 수 없습니다.", + "c1": "최소 인출 액", + "c2": "버 전 번호", + "c3": "열 수 있 습 니 다", + "c4": "보증금 예상", + "c6": "증가 비율", + "c7": "현재가치평가", + "c5": "당신 의 이월 주문 서 는 이미 제출 되 었 습 니 다. 인내심 을 가지 고 기 다 려 주 십시오. 이월 결 과 는 문자 나 우편 으로 통지 할 것 입 니 다. 수령 에 주의 하 십시오. 궁금 한 점 이 있 으 면 즉시 고객 센터 에 연락 하 십시오.", + "GraphicValidation": "그래픽 검증" + }, + "base": { + "a0": "표제.", + "a1": "돌아가다", + "a2": "더.", + "a3": "시세.", + "a4": "옵션", + "a5": "새로운 전문 지역 을 개척 하 다.", + "a6": "회원", + "a7": "대학.", + "a8": "거래 팀", + "a9": "최신 가", + "b0": "상승폭", + "b1": "클릭 하여 로그 인 하 다", + "b2": "어서 오 세 요.", + "b3": "로그 인하 세 요.", + "b4": "진급 하 다.", + "b5": "충전 화폐", + "b6": "돈 을 인출 하 다.", + "b7": "보급 하 다.", + "b8": "수수 료 를 공제 하 다.", + "b9": "사용 가능 하 다.", + "c0": "구입 하 다.", + "c1": "나의 부탁", + "c2": "신분 인증", + "c3": "안전 센터", + "c4": "소식 을 알리다.", + "c5": "코 인 주소", + "c6": "설치", + "c7": "스스로 선택 하 다.", + "c8": "추가 성공", + "c9": "취소 성공", + "d0": "홈 페이지", + "d1": "거래 하 다", + "d2": "자산", + "d3": "검색 키 워드 를 입력 하 세 요.", + "d4": "전부", + "d5": "메인보드", + "d6": "총 자산 을 환산 하 다.", + "d7": "통화 계정", + "d8": "돌리다", + "d9": "화폐 종 류 를 검색 하 다.", + "e0": "감추다", + "e1": "잔고 자산", + "e2": "동결 하 다", + "e3": "환산 하 다.", + "e4": "계약 계좌", + "e5": "계약 을 절충 하 다", + "e6": "광부 등급", + "e7": "광부", + "wallet": "지갑", + "f0": "암호화 화폐 여행을 시작하세요", + "f1": "동전을 사다", + "f2": "지금 이동", + "f3": "인기 있는 암호화폐", + "f4": "이름", + "f5": "공통 기능", + "f6": "기본 인증 완료", + "f7": "예비 증명서", + "f8": "우리는 자금 상태에 대한 높은 투명성을 달성하고 사용자 자산에 대한 준비금 비율을 1:1로 유지하기 위해 최선을 다하고 있습니다.", + "f9": "비트코인", + "g0": "평균 수익률", + "g1": "무한한 가능성을 창조하라", + "g2": "탐색 시작", + "g3": "구매 가능", + "g4": "판매 가능", + "g5": "상대방 가격", + "h1": "계산서" + }, + "accountSettings": { + "a0": "계 정 설정", + "a1": "두상", + "a2": "닉네임.", + "a3": "주 계좌 번호", + "a4": "핸드폰 번호", + "a5": "포박 을 풀다", + "a6": "귀속 하 다.", + "a7": "메 일 박스 바 인 딩", + "a8": "계 정 전환", + "a9": "로그아웃 로그 인", + "b0": "닉네임 을 고치다", + "b1": "닉네임 을 입력 하 세 요", + "b2": "언어.", + "b3": "연락 정보", + "b4": "일반 상담", + "b5": "고객 서비스", + "b6": "미디어 합작", + "b7": "도움 이 필요 하 시 면 연락 주세요." + }, + "assets": { + "a0": "코 인 주소 관리", + "a1": "주소록 은 귀하 가 자주 사용 하 는 주 소 를 관리 할 수 있 습 니 다. 주소록 에 존재 하 는 주소 로 돈 을 인출 할 때 여러 가지 검 사 를 하지 않 아 도 됩 니 다.", + "a2": "자동 으로 코 인 을 인출 할 수 있 습 니 다. {name} 코 인 을 사용 할 때, 웹 주소록 에 존재 하 는 주소 만 코 인 을 인출 할 수 있 습 니 다.", + "a3": "주소 삭제", + "a4": "주소 추가", + "a5": "삭제 할 주 소 를 선택 하 세 요", + "a6": "현재 선택 한 주 소 를 삭제 하 시 겠 습 니까", + "a7": "흐 르 는 물", + "a8": "총액", + "a9": "사용 가능 하 다.", + "b0": "동결 하 다.", + "b1": "자금 계좌", + "b2": "계약 계좌", + "b3": "레버 계 정", + "b4": "재 테 크 계좌", + "b5": "검색 키 워드 를 입력 하 세 요.", + "b6": "돈 을 인출 하 다.", + "b7": "체인 유형 을 선택 하 세 요", + "b8": "코 인 주소", + "b9": "주 소 를 입력 하 세 요", + "c0": "수량.", + "c1": "잔금", + "c2": "수량 을 입력 하 세 요", + "c3": "전부.", + "c4": "수수료", + "c5": "정확 한 코 인 지갑 주 소 를 자세히 확인 하고 입력 하 세 요.", + "c6": "대응 하지 않 는 디지털 화 폐 를 지갑 주소 로 보 내 면 영구적 인 손실 을 초래 할 수 있다.", + "c7": "인출 수수 료 는 인출 수량 에서 공제 된다.", + "c8": "동전 인출 기록", + "c9": "시간.", + "d0": "상태.", + "d1": "심사 중 입 니 다.", + "d2": "성공 하 다.", + "d3": "실패 하 다.", + "d4": "더 보기", + "d5": "제출 성공, 심사 중", + "d6": "편집 하 다.", + "d7": "첨가 하 다.", + "d8": "주소.", + "d9": "주 소 를 입력 하거나 붙 여 넣 으 세 요.", + "e0": "비고 하 다.", + "e1": "설명 을 입력 하 세 요", + "e2": "주소 적어 주세요.", + "e3": "비고 를 기입 해 주 십시오", + "e4": "조작 이 성공 하 다", + "e5": "충전 화폐", + "e6": "위의 QR 코드 를 스 캔 해서 동전 충전 주 소 를 획득 하 세 요.", + "e7": "코 인 충전 주소", + "e8": "충전 수량", + "e9": "충전 수량 을 입력 하 세 요", + "f0": "이 주 소 는 귀하 의 최신 충전 주소 입 니 다. 시스템 이 충전 을 받 으 면 자동 으로 입 금 됩 니 다.", + "f1": "계좌 이체 시 전체 블록 체인 네트워크 에서 확인 해 야 합 니 다. {num} 개 네트워크 확인 시 {name} 이 계 정 에 자동 으로 저 장 됩 니 다.", + "f2": "개 네트워크 확인 시", + "f3": "{name} 을 이 주소 로 만 보 내 주세요. 다른 디지털 화 폐 를 이 주소 로 보 내 면 영구적 인 손실 이 발생 합 니 다.", + "f4": "동전 충전 기록" + }, + "auth": { + "a0": "신분 인증", + "a1": "실명 인증", + "a2": "인증 되 지 않 음", + "a3": "인증 됨", + "a4": "고급 인증", + "a5": "심사 중 입 니 다.", + "a6": "인증 실패", + "a7": "국적.", + "a8": "국적 을 선택 하 세 요.", + "a9": "실명", + "b0": "실명 을 입력 하 세 요", + "b1": "여권번호", + "b2": "증명 번 호 를 입력 하 세 요.", + "b3": "확인 하 다.", + "b4": "인증 성공", + "b5": "증명서 정면 사진 올 려 주세요.", + "b6": "증명서 뒷면 을 올 려 주세요.", + "b7": "신분증 사진 을 올 려 주세요.", + "b8": "사진 이 선명 하고 워 터 마크 가 없 으 며 상반신 이 완전 하 게 보이 도록 확보 하 다", + "b9": "문건 의 크기 가 너무 커서 초과 해 서 는 안 된다.", + "c0": "파일 형식 오류", + "c1": "업로드 성공", + "c2": "증명서 뒷면 사진 을 올 려 주세요.", + "c3": "증명 서 를 정면 사진 으로 올 려 주세요.", + "c4": "업로드 성공, 심사 대기", + "c5": "생일", + "c6": "인증서 유형", + "c7": "거주지 주소", + "c8": "거주지 주소를 입력해주세요", + "c9": "전화 번호", + "d0": "전화번호를 입력해주세요", + "d1": "운전 면허증", + "d2": "여권", + "d3": "신분증", + "d4": "날짜 선택", + "d5": "선택해주세요" + }, + "exchange": { + "a0": "화폐", + "a1": "구입 을 신청 하 다.", + "a2": "계약", + "a3": "거래 하 다.", + "a4": "현재 의뢰", + "a5": "역사적 의뢰", + "a6": "추가 성공", + "a7": "취소 성공", + "a8": "발행 총량", + "a9": "유통 총량", + "b0": "발행 가격", + "b1": "발행 일자", + "b2": "백서 주소", + "b3": "홈 페이지 주소", + "b4": "간단 한 소개", + "b5": "사다.", + "b6": "팔다.", + "b7": "위탁 가격", + "b8": "유형.", + "b9": "제한 거래", + "c0": "시가 거래", + "c1": "거래 가 이루어지다", + "c2": "총계 하 다", + "c3": "매입 하 다.", + "c4": "매출 하 다.", + "c5": "수량.", + "c6": "최고의 시장가 격 에서 거래 가 이 루어 집 니 다.", + "c7": "총가격", + "c8": "사용 가능 수량", + "c9": "총액.", + "d0": "등록 하 다.", + "d1": "시 분할 도", + "d2": "가격.", + "d3": "최신 거래", + "d4": "시간.", + "d5": "방향.", + "d6": "가격 을 제한 하 다.", + "d7": "시가.", + "d8": "가격 입력 해 주세요.", + "d9": "수량 을 입력 하 세 요", + "e0": "총 가격 을 입력 하 세 요", + "e1": "주문 성공", + "e2": "평균 가격", + "e3": "최고", + "e4": "가장 낮다.", + "e5": "재다.", + "e6": "매매 시세", + "e7": "화폐 정보", + "e8": "분.", + "e9": "시간.", + "f0": "하늘.", + "f1": "주.", + "f2": "달.", + "f3": "매입 가격", + "f4": "판매 가격", + "f5": "화폐 거래", + "f6": "검색 키 워드 를 입력 하 세 요.", + "f7": "거래 팀", + "f8": "최신 가", + "f9": "상승폭", + "g0": "스스로 선택 하 다.", + "g1": "나의 부탁", + "g2": "의뢰 를 취소 하 다", + "g3": "조작 하 다.", + "g4": "철회 하 다.", + "g5": "현재 의뢰 를 취소 합 니까", + "g6": "취소 성공" + }, + "option": { + "a0": "옵션", + "a1": "거리 인도", + "a2": "많이 보다.", + "a3": "틈 을 보다.", + "a4": "수익 률", + "a5": "구입 하 다.", + "a6": "많다.", + "a7": "비다.", + "a8": "현재.", + "a9": "다음 기", + "b0": "똑바로 보다", + "b1": "상승폭 선택", + "b2": "수익 률", + "b3": "구 매 수량", + "b4": "수량 을 입력 하 세 요", + "b5": "잔금", + "b6": "이익과 손실", + "b7": "즉시 구 매", + "b8": "붇다.", + "b9": "평평 하 다.", + "c0": "넘어지다.", + "c1": "구 매 성공", + "c2": "상세 한 상황.", + "c3": "주문 번호", + "c4": "개장 가", + "c5": "종가", + "c6": "매입 시간", + "c7": "매입 수량", + "c8": "구 매 유형", + "c9": "상태.", + "d0": "결 과 를 인계 하 다.", + "d1": "결산 수량", + "d2": "결제 시간", + "d3": "더 보기", + "d4": "옵션 을 구 매 하 다", + "d5": "거래 를 기다리다", + "d6": "나의 인도", + "d7": "인계 기록", + "d8": "분.", + "d9": "시간.", + "e0": "하늘.", + "e1": "주.", + "e2": "달.", + "e3": "방향.", + "e4": "상승폭" + }, + "purchase": { + "a0": "발행 가격", + "a1": "구 매 신청 화폐 종류", + "a2": "예상 접속 시간", + "a3": "구입 신청 시작 시간", + "a4": "구 매 신청 마감 시간", + "a5": "구입 을 신청 하 다.", + "a6": "구 매 신청 화폐 종 류 를 선택 하 세 요.", + "a7": "구 매 수량", + "a8": "구 매 신청 수량 을 입력 하 세 요", + "a9": "전부.", + "b0": "즉시 구 매 신청", + "b1": "구입 신청 주기", + "b2": "프로젝트 예열", + "b3": "구 매 신청 을 시작 하 다", + "b4": "구 매 신청 을 마감 하 다", + "b5": "상장된 거래", + "b6": "프로젝트 정보", + "b7": "사용 여부", + "b8": "구입 하 다.", + "b9": "구 매 신청 성공" + }, + "reg": { + "a0": "휴대폰 등록", + "a1": "메 일주 소 등록", + "a2": "핸드폰", + "a3": "핸드폰 번 호 를 입력 하 세 요.", + "a4": "메 일주 소", + "a5": "메 일주 소 번 호 를 입력 하 세 요.", + "a6": "인증번호", + "a7": "인증번호 입력", + "a8": "비밀 번호", + "a9": "비밀 번 호 를 입력 하 세 요.", + "b0": "비밀번호 확인", + "b1": "비밀번호 확인 해 주세요.", + "b2": "추천인", + "b3": "추천 인 을 입력 하 세 요", + "b4": "골 라 적다", + "b5": "당신 은 이미 동의 하 였 습 니 다", + "b6": "사용자 프로 토 콜", + "b7": "우리 의", + "b8": "프라이버시 협의", + "b9": "등록 하 다.", + "c0": "계 정 이 있 습 니 다.", + "c1": "즉시 로그 인", + "c2": "협의 서 를 읽 고 동의 하 십시오.", + "c3": "핸드폰 번호 적어 주세요.", + "c4": "메 일주 소 번 호 를 적어 주세요.", + "c5": "등록 성공", + "c6": "기관 코드(필수)", + "c7": "기관 코드를 입력하세요.", + "c8": "암호화폐 여행을 시작하려면 지금 등록하세요" + }, + "safe": { + "a0": "포박 을 풀다", + "a1": "귀속 하 다.", + "a2": "메 일주 소", + "a3": "메 일주 소 번호", + "a4": "메 일주 소 번 호 를 입력 하 세 요.", + "a5": "메 일주 소 인증번호", + "a6": "인증번호 입력", + "a7": "인증번호", + "a8": "해제 성공", + "a9": "귀속 성공", + "b0": "로그 인 비밀 번 호 를 잊어버리다.", + "b1": "계좌번호", + "b2": "핸드폰 입력 해 주세요.", + "b3": "새 비밀번호", + "b4": "새 암 호 를 입력 하 세 요", + "b5": "비밀번호 확인", + "b6": "비밀번호 확인 해 주세요.", + "b7": "수정 을 확인 하 다", + "b8": "정확 한 핸드폰 이나 메 일주 소 번 호 를 입력 하 세 요.", + "b9": "구 글 검증 기", + "c0": "조작 방법: 구 글 의 검증 기 를 다운로드 하고 열 어 아래 QR 코드 를 스 캔 하거나 수 동 으로 비밀 키 를 입력 하여 인증 토 큰 을 추가 합 니 다.", + "c1": "키 복사", + "c2": "키 를 잘 저 장 했 습 니 다. 잃 어 버 리 면 찾 을 수 없습니다.", + "c3": "다음 단계", + "c4": "문자 인증번호", + "c5": "구 글 인증번호", + "c6": "바 인 딩 확인", + "c7": "안전 센터", + "c8": "로그 인 비밀번호", + "c9": "고치다.", + "d0": "설치", + "d1": "거래 비밀번호", + "d2": "핸드폰", + "d3": "수정 성공", + "d4": "핸드폰 번호", + "d5": "핸드폰 번 호 를 입력 하 세 요.", + "d6": "문자 인증 번 호 를 입력 하 세 요.", + "d7": "폐쇄 하 다.", + "d8": "열다.", + "d9": "검증 하 다.", + "e0": "문자 메시지", + "e1": "종료 성공", + "e2": "오픈 성공", + "e3": "확인 하 다.", + "e4": "설정 성공", + "Remembered": "비밀번호를 기억하셨나요?", + "e5": "비밀번호 검색" + }, + "transfer": { + "a0": "이체 기록", + "a1": "성공 하 다.", + "a2": "수량.", + "a3": "방향.", + "a4": "계좌 자산", + "a5": "계약 계좌", + "a6": "레버 계 정", + "a7": "재 테 크 계좌", + "a8": "돌리다.", + "a9": "부터.", + "b0": "까지", + "b1": "송금 통화", + "b2": "잔금", + "b3": "모두", + "b4": "스 위칭 됨" + }, + "notice": { + "a0": "상세 한 상황.", + "a1": "소식 을 알리다.", + "a2": "공고 하 다.", + "a3": "소식." + }, + "invite": { + "a0": "고객 님 께 서 거래 커미션 을 받 고 친 구 를 초대 하 십 니 다.", + "a1": "동업 자", + "a2": "거래 를 즐 기 고 커미션 을 반환 하 다.", + "a3": "일반 사용자", + "a4": "나의 신분", + "a5": "신분 을 존귀 하 게 누리다.", + "a6": "나의 초대 코드", + "a7": "요청 QR 코드 복사", + "a8": "초대장 링크 복사", + "a9": "나의 프로 모 션", + "b0": "총 인원 을 확대 하 다", + "b1": "사람.", + "b2": "총 수익 을 환산 하 다.", + "b3": "보급 기록", + "b4": "직접 요청", + "b5": "리베이트 레코드", + "b6": "등급.", + "b7": "등급 설정", + "b8": "진급 조건", + "b9": "배당 권익", + "c0": "닉네임.", + "c1": "인원 을 확대 하 다.", + "c2": "수익 을 환산 하 다.", + "c3": "요청 레코드", + "c4": "리베이트 레코드", + "c5": "등급 권익 설명", + "c6": "등급.", + "c7": "권익.", + "c8": "설명 하 다.", + "c9": "나의 권익" + }, + "help": { + "a0": "상세 한 상황.", + "a1": "대학.", + "a2": "분류 하 다." + }, + "login": { + "a0": "메일 박스", + "a1": "핸드폰 이나 메 일주 소 번 호 를 입력 하 세 요.", + "a2": "비밀 번호", + "a3": "비밀 번 호 를 입력 하 세 요.", + "a4": "등록 하 다.", + "a5": "비밀 번 호 를 잊어버리다.", + "a6": "계 정 이 없어 요.", + "a7": "즉시 등록", + "a8": "핸드폰", + "a9": "메 일주 소", + "b0": "완성 하 다.", + "b1": "로그인 계정", + "b2": "암호화폐 여행을 시작하려면 지금 로그인하세요", + "b3": "이메일", + "b4": "이메일을 입력하세요" + }, + "contract": { + "a0": "창 고 를 내다.", + "a1": "위치", + "a2": "위탁 하 다.", + "a3": "역사", + "a4": "계약 거래", + "a5": "개통 성공", + "a6": "거래 유형", + "a7": "거래 가 이루어지다", + "a8": "위탁 총량", + "a9": "평균 거래 가 성립 되다.", + "b0": "위탁 가격", + "b1": "여유", + "b2": "수수료", + "b3": "상태.", + "b4": "조작 하 다.", + "b5": "철회 서", + "b6": "취소 됨", + "b7": "미 거래", + "b8": "부분 적 거래", + "b9": "전 거래", + "c0": "많이 하 다.", + "c1": "텅 비다", + "c2": "비다", + "c3": "평 다", + "c4": "알림", + "c5": "현재 주문 취소 여부", + "c6": "취소 성공", + "c7": "손익.", + "c8": "함께 나누다", + "c9": "상세 한 상황 을 위탁 하 다.", + "d0": "데이터 없 음", + "d1": "가격.", + "d2": "수량.", + "d3": "거래 시간", + "d4": "사용자 권익", + "d5": "손익 을 실현 하지 못 하 다.", + "d6": "위험 률", + "d7": "시가.", + "d8": "USDT", + "d9": "보증금 을 점용 하 다", + "e0": "상승 세 를 보이다.", + "e1": "많이 열 수 있다.", + "e2": "하락 세 를 보이다.", + "e3": "오픈 스페이스", + "e4": "사용 가능 하 다.", + "e5": "돌리다.", + "e6": "자금 비율", + "e7": "거리 결산", + "e8": "많다.", + "e9": "개점 가격", + "f0": "자금 을 이체 하 다.", + "f1": "계산기", + "f2": "계약 에 대하 여", + "f3": "위험 보장 기금", + "f4": "자금 비용 역사", + "f5": "일반 의뢰", + "f6": "시가 의뢰", + "f7": "과연", + "f8": "가격", + "f9": "곱절 레버 로 창 고 를 열다.", + "g0": "많이 하 다.", + "g1": "비다", + "g2": "의뢰 성공", + "g3": "현재 계약 만 표시", + "g4": "가 평", + "g5": "위탁 하 다.", + "g6": "평균 시가", + "g7": "결제 기준 가격", + "g8": "강 평 가 를 견적 하 다.", + "g9": "이미 결산 한 수익", + "h0": "수익률", + "h1": "그치다.", + "h2": "손실 을 멈추다.", + "h3": "포지션을 닫다", + "h4": "시가 가 균일 하 다.", + "h5": "이익을 얻고 손절매", + "h6": "평평 하 다.", + "h7": "일반 창고 가격 입력 하 세 요", + "h8": "가격 을 제한 하 다.", + "h9": "창고 수량 을 입력 하 세 요", + "i0": "가 평", + "i1": "창고 오픈 평균 가격.", + "i2": "최신 거래 가격", + "i3": "가격 입력 해 주세요.", + "i4": "이익을 취하다", + "i5": "시가 가 되다", + "i6": "시 수익 정지 의뢰 를 촉발, 거래 후 손익 예상", + "i7": "손절하다", + "i8": "시 손실 정지 의뢰 를 촉발, 거래 후 손익 예상", + "i9": "확정 하 다.", + "j0": "창고 정리 에 성공 하 다.", + "j1": "시가 전평 여부", + "j2": "전 평", + "j3": "성공 하 다.", + "j4": "설정 성공", + "j5": "신기 한 계책 은 타의 추종 을 불허 한다", + "j6": "만들다.", + "j7": "일반 창고 가격.", + "j8": "디지털 자산 거래 플랫폼", + "j9": "{name 1} {name 2} {name 3} 뜨 거 운 날 아 오 르 는 길", + "k0": "창 고 를 여 는 가격.", + "k1": "최신 가격", + "k2": "스 캔 하면 더 알 아 요.", + "k3": "손익 을 결산 하 다.", + "k4": "캡 처 성공, 로 컬 에 저장", + "k5": "캡 처 실패.", + "k6": "길 게 눌 러 서 캡 처.", + "k7": "원 키 전평", + "k8": "원 키 반전", + "k9": "원 키 전평 여부", + "l0": "순 전 히 성공 하 다", + "l1": "원 클릭 반전 여부", + "l2": "역방향 성공", + "l3": "텅 비다", + "l4": "평 다" + }, + "otc": { + "a0": "광 고 를 내다", + "a1": "주문 하 다.", + "a2": "거래 화폐 종류", + "a3": "내 주문", + "a4": "내 광고.", + "a5": "구입 하 다.", + "a6": "판매 하 다.", + "a7": "총수", + "a8": "나머지.", + "a9": "한정 하 다.", + "b0": "단가", + "b1": "지불 방식", + "b2": "조작 하 다.", + "b3": "총량", + "b4": "결제 방법 을 선택해 주세요.", + "b5": "수량 을 입력 하 세 요", + "b6": "주문 하 다.", + "b7": "알 리 페 이", + "b8": "위 챗 편지", + "b9": "은행 카드", + "c0": "주문 성공", + "c1": "상태.", + "c2": "광고 번호", + "c3": "총가격", + "c4": "수량.", + "c5": "발표 시간", + "c6": "내리다", + "c7": "취소 됨", + "c8": "거래 중", + "c9": "완료 됨", + "d0": "알림", + "d1": "현재 광고 내리 기 여부", + "d2": "확정 하 다.", + "d3": "취소 하 다.", + "d4": "취소 성공", + "d5": "법정 통화 계좌", + "d6": "동결 하 다.", + "d7": "알 리 페 이 계 정", + "d8": "계 정 을 입력 하 세 요", + "d9": "성명.", + "e0": "이름 을 입력 하 세 요", + "e1": "지불 코드", + "e2": "귀속 하 다.", + "e3": "위 챗 계 정", + "e4": "은행 명", + "e5": "은행 명칭 을 입력 하 세 요", + "e6": "계좌 개설 지점", + "e7": "계좌 개설 지점 을 입력 하 세 요", + "e8": "은행 카드번호", + "e9": "카드 번 호 를 입력 하 세 요.", + "f0": "편집 성공", + "f1": "추가 성공", + "f2": "매출 하 다.", + "f3": "매입 하 다.", + "f4": "주문 상세", + "f5": "주문 번호", + "f6": "계좌번호", + "f7": "계좌 개설 은행", + "f8": "남 은 시간", + "f9": "분.", + "g0": "초.", + "g1": "지급 증명 서 를 업로드 하 다.", + "g2": "지불 을 확인 하 다", + "g3": "주문 취소", + "g4": "수금 을 확인 하 다", + "g5": "미 입금", + "g6": "현재 주문 취소 여부", + "g7": "주문 이 취소 되 었 습 니 다.", + "g8": "현재 지불 확인", + "g9": "조작 이 성공 하 다", + "h0": "수금 을 확인 한 후 매 물 자산 을 자동 으로 이체 하 다", + "h1": "미 입금 확인 후, 이 주문 서 는 자동 으로 신고 에 들 어 갑 니 다", + "h2": "판매 주문서", + "h3": "주문 서 를 구입 하 다.", + "h4": "광고 구 매 주문서", + "h5": "광고 판매 주문서", + "h6": "시간.", + "h7": "상세 한 상황.", + "h8": "전부.", + "h9": "종료 됨", + "i0": "미 지급", + "i1": "확인 을 기다리다", + "i2": "신고 중 입 니 다.", + "i3": "광고 유형", + "i4": "거래 유형 을 선택 하 세 요", + "i5": "거래 화폐 종 류 를 선택해 주세요.", + "i6": "가격.", + "i7": "가격 입력 해 주세요.", + "i8": "최저 가", + "i9": "최저 가 입력 하 세 요", + "j0": "최고가", + "j1": "최고 가격 을 입력 하 세 요", + "j2": "비고 하 다.", + "j3": "설명 을 입력 하 세 요", + "j4": "발표 하 다.", + "j5": "발표 성공", + "j6": "수금 방식", + "j7": "최저 량", + "j8": "최고 량", + "j9": "최소 거래 량 을 입력 하 세 요", + "k0": "최고 거래 량 을 입력 하 세 요" + }, + "first": { + "a0": "실명 을 찾아가다", + "a1": "우리", + "a2": "어서 오 세 요!", + "a3": "수익 정지 설정", + "a4": "현재 최신 가격 으로 거래 하 다.", + "a5": "보유 창고", + "a6": "주문 관리", + "a7": "모든 의뢰", + "a8": "역사 기록", + "a9": "배수", + "b0": "로그 인 을 종료 하 시 겠 습 니까?", + "b1": "등록", + "b2": "안녕하세요,Moabcoin 사용 을 환영 합 니 다.", + "b3": "재다.", + "b4": "현물 지수", + "b5": "계약 지수", + "b6": "다양한 방식 으로 구 매 지원", + "b7": "간편 구 매", + "b8": "영속", + "b9": "현재 지역 은 아직 개방 되 지 않 았 습 니 다.", + "c0": "매입", + "c1": "팔리다", + "c2": "시간.", + "c3": "총가격", + "c4": "수량", + "c5": "최신 가격", + "c6": "담보 자산", + "c7": "거래 량" + }, + "recharge": { + "a0": "화폐 종 류 를 바꾸다.", + "a1": "*주소 변경 은 수신 만 가능", + "a2": "의 자산 을 다른 화폐 로 충전 하면 찾 을 수 없습니다!", + "a3": "ERC 20 으로 수금 을 추천 합 니 다.", + "a4": "주소 복사", + "a5": "*계좌 이체 전 주소 및 정보 확인 꼭 해 주세요!일단 전출 하면 철회 할 수 없다!", + "a6": "다시 만들어 주세요" + }, + "currency": { + "a0": "법정 화폐 거래", + "a1": "살 래 요.", + "a2": "팔 거 야.", + "a3": "원 클릭 으로 돈 을 사다.", + "a4": "원 클릭 으로 화 폐 를 팔다.", + "a5": "수량 에 따라 구 매 하 다", + "a6": "금액 에 따라 구 매 하 다", + "a55": "수량 에 따라 판매", + "a66": "금액 에 따라 판매", + "a7": "구 매 수량 을 입력 하 세 요", + "a8": "구 매 금액 을 입력 하 세 요", + "a9": "판매 수량 을 입력 하 세 요", + "b0": "판매 금액 을 입력 하 세 요", + "b1": "단가", + "b2": "수수료", + "b3": "수수료", + "b4": "사용 가능 잔액 부족", + "b5": "우선 고급 인증 을 완성 하 세 요", + "b6": "인증 하 러 가다", + "b7": "구 매 확인", + "b8": "판매 확인" + }, + "shou": { + "a0": "계정 충전", + "a1": "지갑에 암호화폐 자금 추가", + "a2": "즉시 거래 시작", + "a3": "지금 충전하세요", + "a4": "글로벌 디지털 자산 거래 플랫폼", + "a5": "암호화된 자산 거래를 더 쉽게 만들기", + "a6": "지금 가입하세요", + "a7": "디지털 자산 마켓 익스프레스", + "a8": "시장 동향", + "a9": "통화", + "a10": "최신 가격(USD)", + "a11": "24시간 증가", + "a12": "24시간 거래량", + "a13": "상위 10개", + "a14": "5백만 이상", + "a15": "< 0.10%", + "a16": "200+", + "a17": "글로벌 랭킹", + "a18": "사용자는 우리를 신뢰합니다", + "a19": "매우 낮은 수수료", + "a20": "국가", + "a21": "다중 단말기 지원", + "a22": "언제 어디서나 디지털 자산 거래", + "a23": "모든 통화 정보와 함께 광범위한 자산 유형을 지원합니다.", + "a24": "앱 스토어", + "a25": "안드로이드 APK", + "a26": "앱을 다운로드하려면 코드를 스캔하세요", + "a27": "iOS 및 안드로이드", + "a28": "왜 xuscoin.com을 선택해야 합니까?", + "a29": "여러 국가에 디지털 자산 거래 서비스를 제공하기 위해 노력합니다.", + "a30": "간단하고 편리한 암호화 자산 거래", + "a31": "제품이 이해하기 쉽고 거래 프로세스가 편리하며 원스톱 블록체인 자산 서비스 플랫폼", + "a32": "사용자 경험을 바탕으로 즐거운 암호화 서비스 경험 제공", + "a33": "글로벌 다국어 지역에 서비스를 제공하여 모든 사용자가 암호화된 세계에 들어갈 수 있는 관문이 됨", + "a34": "사고 제로의 안전과 안정성", + "a35": "여러 보안 전략 보장, 100% 적립금 보장, 설립 이후 발생한 보안 사고 없음", + "a36": "최적 거래 수수료 비율", + "a37": "우대 거래율, 경쟁력 있는 VIP 권리, 최고 품질의 서비스를 즐기세요", + "a38": "초보자 가이드", + "a39": "디지털 자산 거래 프로세스를 빠르게 이해", + "a40": "즉시 수익 창출", + "a41": "클릭하여 이동", + "a42": "XUScoin 암호화폐 거래 플랫폼 - 모두를 위한 설계", + "a43": "암호화 여정 시작" + }, + "homeNewText": { + "aa3": "지금 등록하고 암호화폐 여행을 시작하세요", + "aa4": "즉시 거래 시작", + "aa7": "통화", + "aa8": "로그인/등록", + "bb1": "최신 가격(USD)", + "bb2": "24시간 증가", + + "bb4": "돈의 미래가 여기에 있습니다", + "bb5": "우리는 투자자들이 암호화폐를 사고 팔고 관리할 수 있는 가장 신뢰할 수 있는 곳입니다.", + "bb6": "이메일로 등록", + "bb7": "간편한 캡처", + "bb8": "거래 기회", + "bb9": "암호화폐 사용이 편리함", + "bb10": "도구", + "bb11": "우리는 정기적으로 기존 기능을 업데이트하고 새로운 서비스 기능을 구현하기 위해 노력하고 있습니다.", + "bb12": "상업용 암호화 처리", + "bb13": "전 세계에서 가장 인기 있는 암호화폐의 결제를 편리하게 수락할 수 있는 안정적인 방법을 제공합니다.", + "bb14": "무제한 암호화폐 교환", + "bb15": "비트코인, 테더, 라이트코인, 이더리움 및 기타 50개 이상의 코인을 쉽고 안전한 방법으로 교환하세요.", + "bb16": "사용자 경험 최적화", + "bb17": "사용자 경험 최적화: 고품질 신제품 출시, 운영 단순화, 사용 편의성 향상.", + "bb18": "플래시 입출금", + "bb19": "우리의 파트너", + "bb20": "전 세계", + "bb21": "저희 파트너는 시장 리더이며 최고의 암호화폐 솔루션을 제공하도록 도와줍니다.", + "bb22": "초보자 가이드", + "bb23": "{name} 계정 만들기", + "bb24": "지금 등록하고 거래 여정을 시작하세요!", + "bb25": "등록", + "bb26": "입금", + "bb27": "빠른 충전과 간편한 입금!", + "bb28": "충전", + "bb29": "거래 시작", + "bb30": "거래를 시작하고 무한한 가능성을 즐겨보세요!", + "bb31": "코인 대 코인 거래", + "bb32": "언제 어디서나 거래 열기", + "bb33": "스캔하여 다운로드", + "bb34": "지금 암호화폐 여행을 시작하세요!", + "bb35": "등록하고 거래를 시작하는 데 10초 밖에 걸리지 않습니다.", + "bb36": "무료 등록", + "bb37": "최장 3분 안에 입출금이 완료됩니다.", + "bb38": "지금 등록하세요", + "bb39": "지금 거래하세요", + "bb40": "{name}님, 언제 어디서나 거래하세요", + "bb41": "{name} 앱을 다운로드하려면 QR 코드를 스캔하세요", + "bb42": "QR 코드를 스캔하여 앱을 다운로드하세요" + } +} \ No newline at end of file diff --git a/i18n/lang/pl.json b/i18n/lang/pl.json new file mode 100644 index 0000000..85176ef --- /dev/null +++ b/i18n/lang/pl.json @@ -0,0 +1,787 @@ +{ + "common": { + "D":"dzień", + "M":"miesiąc", + "Y":"rok", + "add":"Dodaj do", + "address":"adres", + "all":"Wszystkie", + "amout":"liczba", + "cancel":"Anuluj", + "check":"do zbadania", + "code":"Kod weryfikacji", + "confirm":"określić", + "date":"data", + "detail":"szczegóły", + "email":"skrzynka", + "enter":"Proszę podać", + "error":"niepowodzenie", + "getCode":"Kod weryfikacji", + "h":"Czas", + "loadMore":"Wczytaj więcej", + "m":"Branża", + "money":"kwota pieniędzy", + "more":"więcej", + "notData":"Brak dostępnych danych", + "notMore":"Koniec z tym.", + "phone":"telefon komórkowy", + "requestError":"Sieć jest zajęta. Proszę spróbować później.", + "s":"drugi", + "save":"konserwacja", + "select":"Proszę wybrać", + "sendSuccess":"Wysłane pomyślnie", + "sms":"krótka wiadomość", + "submit":"Przedstaw", + "success":"sukces", + "tips":"przypomnienie", + "total":"ogółem", + "type":"rodzaj", + "copy":"kopiuj", + "light":"białe", + "dark":"czarny", + "service":"obsługi klienta", + "toDwon":"Czy chcesz przejść na stronę pobierania", + "a0":"Proszę podać kod zakupu", + "a1":"Kopiowanie zakończone", + "a2":"Kopiowanie nie powiodło się", + "a3":"Dokumentacja zakupu", + "a4":"Kwota płatności", + "a5":"Otrzymana ilość", + "a6":"numer konta", + "a7":"Ilość ładowania", + "a8":"Kwit płatniczy", + "a9":"Proszę podać ilość doładowania", + "b0":"Proszę przesłać kupon płatniczy", + "b1": "zakup{amount}Kawałki{name}Token dostępny{rate}%nagroda", + "b2":"Działalność subskrypcyjna", + "b3":"Zapisane pomyślnie", + "b4":"Błąd zapisu", + "b5":"Generuj plakat zaproszenia", + "b6":"Wybierz plakat", + "b8":"Czas otwarcia", + "b9":"Czas zamknięcia", + "c0":"Minimalna ilość doładowania: {num} usdt. Rekrutacja mniejsza niż minimalna kwota nie zostanie wysłana i nie może zostać zwrócona", + "c1":"Minimalna kwota wycofania", + "c2":"Numer wersji", + "c3":"otwarta", + "c4":"szacowany margines", + "c5": "Twój transfer został pomyślnie złożony, proszę czekać cierpliwie, a wynik transferu zostanie powiadomiony przez SMS lub e-mail. Proszę dokładnie sprawdzić. Jeśli masz jakieś pytania, skontaktuj się z obsługą klienta na czas." + }, + "base": { + "a0":"tytuł", + "a1":"powrót", + "a2":"więcej", + "a3":"cytat", + "a4":"opcja", + "a5":"Nowa strefa", + "a6":"członek", + "a7":"studia", + "a8":"Umowa na", + "a9":"Najnowsza cena", + "b0":"W górę i w dół", + "b1":"Kliknij na logowanie", + "b2":"Witamy w", + "b3":"Proszę zalogować się", + "b4":"aktualizacja", + "b5":"Pobierz pieniądze.", + "b6":"Wycofać pieniądze.", + "b7":"rozszerzenie", + "b8":"Odliczenie od opłaty za usługi", + "b9":"dostępne", + "c0":"zakup", + "c1":"Moja prowizja", + "c2":"uwierzytelnianie tożsamości", + "c3":"Centrum bezpieczeństwa", + "c4":"Powiadomienie o wiadomości", + "c5":"Adres wycofania", + "c6":"w górę", + "c7":"Opcjonalne", + "c8":"Dodano pomyślnie", + "c9":"Anuluj pomyślnie", + "d0":"Strona główna", + "d1":"Transakcja", + "d2":"aktywa", + "d3":"Proszę wpisać słowa kluczowe", + "d4":"całe", + "d5":"główny zarząd", + "d6":"ekwiwalent aktywów ogółem", + "d7":"Rachunek kapitałowy", + "d8":"Transfer", + "d9":"Szukanie waluty", + "e0":"ukryj", + "e1":"Aktywa salda", + "e2":"zamrożone", + "e3":"Równoważne", + "e4":"Konto kontraktowe", + "e5":"Przetwarzanie umów", + "e6":"Klasa górnicza", + "e7":"miner" + }, + "accountSettings": { + "a0":"Ustawienia konta", + "a1":"portret głowy", + "a2":"Pseudonim?", + "a3":"Główny numer rachunku", + "a4":"numer komórki", + "a5":"Rozdzielenie", + "a6":"wiążące", + "a7":"Skrzynka pocztowa", + "a8":"Przełączanie rachunków", + "a9":"Zgłoś się.", + "b0":"Zmień nazwę", + "b1":"Proszę wpisać pseudonim", + "b2":"język" + }, + "assets": { + "a0":"Zarządzanie adresem wycofania", + "a1":"Książka adresowa może być używana do zarządzania waszymi wspólnymi adresami i nie ma potrzeby przeprowadzania wielu kontroli przy pobieraniu pieniędzy z adresów w książce adresowej.", + "a2":"Automatyczne wycofanie waluty jest obsługiwane. W przypadku użycia {name} tylko adresy w książce adresowej mogą rozpocząć wycofanie waluty", + "a3":"Usuń adres", + "a4":"Dodaj adres", + "a5":"Proszę wybrać adres do usunięcia", + "a6":"Usuń aktualnie wybrany adres", + "a7":"Płynąca woda", + "a8":"ogółem", + "a9":"dostępne", + "b0":"zamrożone", + "b1":"Rachunek kapitałowy", + "b2":"Konto kontraktowe", + "b3":"Rachunek dźwigni", + "b4":"Rachunek finansowy", + "b5":"Proszę wpisać słowa kluczowe", + "b6":"Wycofać pieniądze.", + "b7":"Proszę wybrać typ łańcucha", + "b8":"Adres wycofania", + "b9":"Proszę podać adres", + "c0":"liczba", + "c1":"bilans", + "c2":"Proszę podać ilość", + "c3":"całe", + "c4":"Opłata za usługę", + "c5":"Proszę dokładnie sprawdzić i podać właściwy adres portfela", + "c6":"Wysyłanie nienamierzonej cyfrowej waluty na adres portfela spowoduje trwałą utratę", + "c7":"Opłata manipulacyjna zostanie odjęta od kwoty pobranych pieniędzy", + "c8":"Rejestr wycofania", + "c9":"czas", + "d0":"stan", + "d1":"W trakcie przeglądu", + "d2":"sukces", + "d3":"niepowodzenie", + "d4":"Więcej informacji", + "d5":"Przedstawione z powodzeniem, w trakcie przeglądu", + "d6":"edytuj", + "d7":"Dodaj do", + "d8":"adres", + "d9":"Proszę wpisać lub wkleić adres", + "e0":"uwagi", + "e1":"Proszę podać swoje uwagi", + "e2":"Proszę wpisać adres", + "e3":"Prosimy o wypełnienie uwag", + "e4":"Operacja zakończona sukcesem", + "e5":"Pobierz pieniądze.", + "e6":"Przeskanuj kod QR, aby uzyskać adres ładowania.", + "e7":"Pobieranie adresu", + "e8":"Liczba naładowanych monet", + "e9":"Proszę podać kwotę naładowanej waluty", + "f0":"Ten adres jest twoim ostatnim adresem ładowania. Kiedy system otrzyma ładowanie, będzie on automatycznie rejestrowany", + "f1":"Transfer musi by ć potwierdzony przez całą sieć blokową. Po dotarciu do {num} potwierdzenia sieci, Twój {name} zostanie automatycznie zdeponowany na koncie", + "f2":"Kiedy sieć jest potwierdzona, Twój", + "f3":"Proszę tylko wysłać {name} na ten adres. Wysyłanie innej waluty cyfrowej na ten adres spowoduje trwałą utratę", + "f4":"Nagrywanie rekordu" + }, + "auth": { + "a0":"uwierzytelnianie tożsamości", + "a1":"Uwierzytelnianie prawdziwej nazwy", + "a2":"Brak certyfikatu", + "a3":"Poświadczone", + "a4":"Zaawansowana certyfikacja", + "a5":"W trakcie przeglądu", + "a6":"Błąd uwierzytelniania", + "a7":"obywatelstwo", + "a8":"Proszę wybrać narodowość", + "a9":"Prawdziwe nazwisko", + "b0":"Proszę podać swoje prawdziwe imię", + "b1":"Numer identyfikacyjny", + "b2":"Proszę podać numer identyfikacyjny", + "b3":"potwierdzić", + "b4":"Certyfikacja zakończona sukcesem", + "b5":"Proszę przesłać zdjęcie z przodu swojej karty identyfikacyjnej.", + "b6":"Proszę przesłać z powrotem certyfikat", + "b7":"Proszę przesłać swoje zdjęcie ID", + "b8":"Upewnij się, że zdjęcie jest jasne bez znaku wodnego i górne ciało jest nietknięte", + "b9":"Wielkość pliku jest zbyt duża i nie może przekroczyć", + "c0":"Błąd typu pliku", + "c1":"Upload zakończony", + "c2":"Proszę przesłać zdjęcie na odwrocie certyfikatu", + "c3":"Proszę przesłać zdjęcie z przodu swojej karty identyfikacyjnej.", + "c4":"Upload udany, proszę czekać na audyt" + }, + "exchange": { + "a0":"Monety", + "a1":"ubiegać się o zakup", + "a2":"kontrakt", + "a3":"Transakcja", + "a4":"Obecna delegacja", + "a5":"Komisja Historyczna", + "a6":"Dodano pomyślnie", + "a7":"Anuluj pomyślnie", + "a8":"Emisja ogółem", + "a9":"Łączny obrót", + "b0":"Cena emisji", + "b1":"Czas wydania", + "b2":"Adres na papierze białym", + "b3":"Adres strony internetowej", + "b4":"krótkie wprowadzenie", + "b5":"kupić", + "b6":"sprzedaż", + "b7":"Cena Komisji", + "b8":"rodzaj", + "b9":"Ograniczenie cen", + "c0":"Transakcja rynkowa", + "c1":"Zamknięte", + "c2":"ogółem", + "c3":"zakup", + "c4":"wyprzedaż się", + "c5":"liczba", + "c6":"Blisko po najlepszej cenie rynkowej", + "c7":"Cena ogółem", + "c8":"Dostępna ilość", + "c9":"Wartość brutto", + "d0":"Wpisz się", + "d1":"Harmonogram podziału czasu", + "d2":"Cena", + "d3":"Najnowsza umowa", + "d4":"czas", + "d5":"kierunek", + "d6":"stała cena", + "d7":"cena rynkowa", + "d8":"Proszę podać cenę", + "d9":"Proszę podać ilość", + "e0":"Proszę podać całkowitą cenę", + "e1":"Wynik wymeldowania", + "e2":"Średnia cena", + "e3":"najwyższy", + "e4":"minimum", + "e5":"kwota", + "e6":"Porządek", + "e7":"Informacje o walucie", + "e8":"minuta", + "e9":"godzina", + "f0":"dzień", + "f1":"tydzień", + "f2":"miesiąc", + "f3":"Cena zakupu", + "f4":"Cena sprzedaży", + "f5":"Transakcja walutowa", + "f6":"Proszę wpisać słowa kluczowe", + "f7":"Umowa na", + "f8":"Najnowsza cena", + "f9":"W górę i w dół", + "g0":"Opcjonalne", + "g1":"Moja prowizja", + "g2":"Cofnięcie powierzenia", + "g3":"działanie", + "g4":"cofnięcie", + "g5":"Anuluj bieżącą delegację", + "g6":"Anulowanie pomyślnie" + }, + "option": { + "a0":"opcja", + "a1":"Dostawa na odległość", + "a2":"Więcej informacji", + "a3":"bądź niedźwiedzia", + "a4":"Stopa zwrotu", + "a5":"zakup", + "a6":"wiele", + "a7":"pusty", + "a8":"Bieżąca", + "a9":"Następny numer", + "b0":"Patrz płasko", + "b1":"Wybór wzrostu cen", + "b2":"Stopa zwrotu", + "b3":"Ilość zakupu", + "b4":"Proszę podać ilość", + "b5":"bilans", + "b6":"Oczekiwany dochód", + "b7":"Kup teraz", + "b8":"powstanie", + "b9":"płasko", + "c0":"upadek", + "c1":"Udany zakup", + "c2":"szczegóły", + "c3":"numer zamówienia", + "c4":"Cena otwarcia", + "c5":"Cena zamknięcia", + "c6":"Czas zakupu", + "c7":"Ilość zakupu", + "c8":"Rodzaj zakupu", + "c9":"stan", + "d0":"Wynik zamknięcia", + "d1":"Ilość rozliczenia", + "d2":"Czas dostawy", + "d3":"Więcej informacji", + "d4":"Opcja kupna", + "d5":"Czekanie na dostawę", + "d6":"Moja dostawa", + "d7":"Dokument dostawy", + "d8":"minuta", + "d9":"godzina", + "e0":"dzień", + "e1":"tydzień", + "e2":"miesiąc", + "e3":"kierunek", + "e4":"W górę i w dół" + }, + "purchase": { + "a0":"Cena emisji", + "a1":"Waluta subskrypcji", + "a2":"Oczekiwany czas online", + "a3":"Czas rozpoczęcia subskrypcji", + "a4":"Czas zamknięcia", + "a5":"ubiegać się o zakup", + "a6":"Proszę wybrać walutę subskrypcji", + "a7":"Ilość zakupu", + "a8":"Proszę podać ilość", + "a9":"całe", + "b0":"Zastosuj natychmiast", + "b1":"Cykl subskrypcji", + "b2":"Projekt rozgrzewka", + "b3":"Rozpocznij subskrypcję", + "b4":"Zamknij subskrypcję", + "b5":"Publikowanie wyników", + "b6":"Szczegóły projektu", + "b7":"Użyj lub nie", + "b8":"zakup", + "b9":"Udany zakup" + }, + "reg": { + "a0":"Rejestracja komórkowa", + "a1":"Rejestracja e-mail", + "a2":"telefon komórkowy", + "a3":"Proszę podać numer telefonu komórkowego", + "a4":"skrzynka", + "a5":"Proszę podać swój numer e-mail", + "a6":"Kod weryfikacji", + "a7":"Proszę podać kod weryfikacji", + "a8":"hasło", + "a9":"Proszę podać hasło", + "b0":"Potwierdzenie hasła", + "b1":"Proszę potwierdzić hasło", + "b2":"Odesłania", + "b3":"Proszę podać rekomendację", + "b4":"Opcjonalne", + "b5":"Zgodziłeś się.", + "b6":"Umowa użytkownika", + "b7":"I dowiedzieć się o nas", + "b8":"Umowa prywatności", + "b9":"Rejestr", + "c0":"Numer rachunku istniejącego", + "c1":"Proszę się wpisać.", + "c2":"Proszę przeczytać i zgodzić się na umowę", + "c3":"Proszę podać swój numer telefonu komórkowego", + "c4":"Proszę podać numer e-mail", + "c5":"logowanie było udane" + }, + "safe": { + "a0":"Rozdzielenie", + "a1":"wiążące", + "a2":"skrzynka", + "a3":"E-mail nr", + "a4":"Proszę podać swój numer e-mail", + "a5":"Kod weryfikacji e-mail", + "a6":"Proszę podać kod weryfikacji", + "a7":"Kod weryfikacji", + "a8":"Niepowiązanie zakończone", + "a9":"Powiązanie zakończone", + "b0":"Zapomnij hasło do logowania", + "b1":"numer konta", + "b2":"Proszę podać telefon komórkowy", + "b3":"Nowe hasło", + "b4":"Proszę podać nowe hasło", + "b5":"Potwierdzenie hasła", + "b6":"Proszę potwierdzić hasło", + "b7":"Potwierdź modyfikację", + "b8":"Proszę podać prawidłowy numer telefonu komórkowego lub e-mail", + "b9":"Weryfikator Google", + "c0":"Jak to zrobić: Pobierz i otwórz weryfikatora Google, zeskanuj poniżej kod QR lub ręcznie wprowadź tajny klucz, aby dodać token weryfikacji", + "c1":"Kopiuj klucz", + "c2":"Jeśli go zgubię, nie uda mi się go odzyskać.", + "c3":"następny krok", + "c4":"Kod weryfikacji SMS", + "c5":"Google captcha", + "c6":"Potwierdzenie wiązania", + "c7":"Centrum bezpieczeństwa", + "c8":"Hasło do logowania", + "c9":"Modyfikuj", + "d0":"w górę", + "d1":"Kod transakcji", + "d2":"telefon komórkowy", + "d3":"Poprawiona pomyślnie", + "d4":"numer komórki", + "d5":"Proszę podać numer telefonu komórkowego", + "d6":"Proszę wprowadzić kod weryfikacji SMS", + "d7":"blisko", + "d8":"otwarte", + "d9":"weryfikacja", + "e0":"krótka wiadomość", + "e1":"Zakończone pomyślnie", + "e2":"Otwórz pomyślnie", + "e3":"potwierdzić", + "e4":"Ustaw pomyślnie" + }, + "transfer": { + "a0":"Zapis transferu", + "a1":"sukces", + "a2":"liczba", + "a3":"kierunek", + "a4":"Aktywa rachunku", + "a5":"Konto kontraktowe", + "a6":"Rachunek dźwigni", + "a7":"Rachunek finansowy", + "a8":"Transfer", + "a9":"od", + "b0":"do", + "b1":"Waluta transferowa", + "b2":"bilans", + "b3":"całe", + "b4":"Przeniesione" + }, + "notice": { + "a0":"szczegóły", + "a1":"Powiadomienie o wiadomości", + "a2":"Ogłoszenie", + "a3":"wiadomości" + }, + "invite": { + "a0":"Skorzystaj z rabatu handlowego i zaproś przyjaciół", + "a1":"partner", + "a2":"Wykorzystanie rabatu handlowego", + "a3":"Zwykli użytkownicy", + "a4":"Moja tożsamość", + "a5":"Ciesz się swoją tożsamością", + "a6":"Mój kod zaproszenia", + "a7":"Kopiuj zaproszenie kod QR", + "a8":"Kopiuj link zaproszenia", + "a9":"Mój awans.", + "b0":"Łączna liczba awansów", + "b1":"ludzie", + "b2":"Całkowity ekwiwalent dochodów", + "b3":"Rekord promocji", + "b4":"Bezpośrednie zaproszenie", + "b5":"Rejestr zwróconej Komisji", + "b6":"Stopień", + "b7":"Ustawienie poziomu", + "b8":"Warunki promocji", + "b9":"Odsetki od dywidend", + "c0":"Pseudonim?", + "c1":"Liczba promotorów", + "c2":"Zmiana dochodów", + "c3":"Zapis zaproszenia", + "c4":"Rejestr zwróconej Komisji", + "c5":"Opis interesów klasy", + "c6":"Stopień", + "c7":"Prawa i interesy", + "c8":"wyjaśnić", + "c9":"Moje prawa i interesy" + }, + "help": { + "a0":"szczegóły", + "a1":"studia", + "a2":"klasyfikacja" + }, + "login": { + "a0":"Numer telefonu komórkowego lub e-mail", + "a1":"Proszę podać numer telefonu komórkowego lub e-mail", + "a2":"hasło", + "a3":"Proszę podać hasło", + "a4":"Wpisz się", + "a5":"Zapomnij o hasle.", + "a6":"Brak konta", + "a7":"Zarejestruj się", + "a8":"telefon komórkowy", + "a9":"skrzynka", + "b0":"kompletny" + }, + "contract": { + "a0":"otworzyć spichlerz w celu zapewnienia ulgi", + "a1":"Pozycja", + "a2":"powierzyć", + "a3":"Historia", + "a4":"Transakcja kontraktowa", + "a5":"Udane otwarcie", + "a6":"Rodzaj transakcji", + "a7":"Zamknięte", + "a8":"Całkowita kwota powierzona", + "a9":"Średnia cena transakcji", + "b0":"Cena Komisji", + "b1":"obligacja", + "b2":"Opłata za usługę", + "b3":"stan", + "b4":"działanie", + "b5":"Anuluj zamówienie", + "b6":"unieważnione", + "b7":"Niezaspokojony", + "b8":"Częściowa transakcja", + "b9":"Wszystkie zamknięte", + "c0":"Kaiduo.", + "c1":"Pingkong.", + "c2":"Otwarte powietrze", + "c3":"Pinto.", + "c4":"przypomnienie", + "c5":"Anuluj aktualną kolejność", + "c6":"Anulowanie pomyślnie", + "c7":"Zysk i strata", + "c8":"udział", + "c9":"Szczegóły dotyczące powierzenia", + "d0":"Brak dostępnych danych", + "d1":"Cena", + "d2":"liczba", + "d3":"Czas transakcji", + "d4":"Prawa użytkownika", + "d5":"Niezrealizowane zyski i straty", + "d6":"Stawka ryzyka", + "d7":"cena rynkowa", + "d8":"Zhang.", + "d9":"Zawód depozytu", + "e0":"Bydlak", + "e1":"Można otworzyć więcej", + "e2":"Niedźwiedzie", + "e3":"Otwórz puste", + "e4":"dostępne", + "e5":"Transfer", + "e6":"Stopa kapitałowa", + "e7":"Odległość rozliczeniowa", + "e8":"wiele", + "e9":"pusty", + "f0":"Transfer środków", + "f1":"Kalkulator", + "f2":"O umowie", + "f3":"Fundusz ochrony ryzyka", + "f4":"Historia kosztów kapitałowych", + "f5":"Ogólne powierzenie", + "f6":"na rynku", + "f7":"Czy jest oparta na", + "f8":"Cena za", + "f9":"Otwieranie podwójnej dźwigni", + "g0":"Kaiduo.", + "g1":"Otwarte powietrze", + "g2":"Pomyślna Komisja", + "g3":"Pokaż tylko aktualną umowę", + "g4":"Keping", + "g5":"powierzyć", + "g6":"Średnia cena otwarcia", + "g7":"Cena referencyjna rozliczenia", + "g8":"Szacunkowa silna parytet", + "g9":"Dochody rozliczone", + "h0":"Stopa zwrotu", + "h1":"Zatrzymaj zysk", + "h2":"Zatrzymaj stratę.", + "h3":"Zamknij pozycję", + "h4":"Cena rynkowa jest płaska", + "h5":"Zatrzymaj zyski i zatrzymaj straty", + "h6":"płasko", + "h7":"Proszę podać cenę końcową", + "h8":"stała cena", + "h9":"Proszę podać ilość końcową", + "i0":"Keping", + "i1":"Średnia cena otwarcia", + "i2":"Najnowsza cena transakcji", + "i3":"Proszę podać cenę", + "i4":"Przestać zarabiać cenę spustu", + "i5":"Cena rynkowa do", + "i6":"Po zakończeniu transakcji, zysk i strata zostaną oszacowane", + "i7":"Cena progowa straty", + "i8":"Komisja strat zatrzymanych zostanie uruchomiona po zakończeniu transakcji, a zysk i strata są oczekiwane po transakcji", + "i9":"określić", + "j0":"Zakończenie pomyślnie", + "j1":"Czy cena rynkowa jest płaska", + "j2":"Wszystkie płaskie", + "j3":"sukces", + "j4":"Ustaw pomyślnie", + "j5":"Nie ma szans na sprytne obliczenia.", + "j6":"do", + "j7":"blisko stawki", + "j8":"Cyfrowa platforma obrotu aktywami", + "j9":"Kiedy {name1} spotyka {Name2} {name3} na drodze ognistego wznoszenia", + "k0":"Cena otwarcia", + "k1":"Najnowsza cena", + "k2":"Kod skanowania aby dowiedzieć się więcej", + "k3":"Rozliczenie zysków i strat", + "k4":"Scenariusz został zapisany lokalnie", + "k5":"Błąd ekranu", + "k6":"Długi screen prasowy", + "k7":"Jedno kliknięcie", + "k8":"Jedno kliknięcie wsteczne", + "k9":"Czy wszystko jest płaskie", + "l0":"Wszyscy równi, sukces", + "l1":"Jeden klucz wstecz", + "l2":"Odwrotny sukces", + "l3":"Pingkong.", + "l4":"Pinto." + }, + "otc": { + "a0":"Reklama", + "a1":"zamówienie", + "a2":"Waluta transakcji", + "a3":"Mój rozkaz.", + "a4":"Moja reklama", + "a5":"zakup", + "a6":"sprzedaż", + "a7":"ogółem", + "a8":"nadwyżka", + "a9":"Limit", + "b0":"Cena jednostkowa", + "b1":"Metoda płatności", + "b2":"działanie", + "b3":"ogółem", + "b4":"Proszę wybrać metodę płatności", + "b5":"Proszę podać ilość", + "b6":"złożyć zamówienie", + "b7":"Alipay", + "b8":"Comment", + "b9":"karta bankowa", + "c0":"Wynik wymeldowania", + "c1":"stan", + "c2":"Numer reklamy", + "c3":"Cena ogółem", + "c4":"liczba", + "c5":"Czas wydania", + "c6":"Z półki", + "c7":"unieważnione", + "c8":"W handlu", + "c9":"Zakończone", + "d0":"przypomnienie", + "d1":"Czy bieżąca reklama została usunięta", + "d2":"określić", + "d3":"Anuluj", + "d4":"Anulowanie pomyślnie", + "d5":"Rachunek waluty prawnej", + "d6":"zamrożone", + "d7":"Numer rachunku Alipay", + "d8":"Proszę podać numer konta", + "d9":"pełna nazwa", + "e0":"Proszę podać swoje imię", + "e1":"Kod płatności", + "e2":"wiążące", + "e3":"Wechat konto", + "e4":"Nazwa banku", + "e5":"Proszę podać nazwę banku", + "e6":"Branża otwierająca konto", + "e7":"Proszę wpisać oddział otwierający konto", + "e8":"Numer karty bankowej", + "e9":"Proszę podać numer karty bankowej", + "f0":"Z powodzeniem edycja", + "f1":"Dodano pomyślnie", + "f2":"wyprzedaż się", + "f3":"zakup", + "f4":"Szczegóły zamówienia", + "f5":"numer zamówienia", + "f6":"numer konta", + "f7":"Bank depozytu", + "f8":"Pozostały czas", + "f9":"Branża", + "g0":"drugi", + "g1":"Pobierz kupon płatniczy", + "g2":"potwierdzenie płatności", + "g3":"anulowanie zamówienia", + "g4":"Potwierdzenie odbioru", + "g5":"Nie otrzymano", + "g6":"Anuluj aktualną kolejność", + "g7":"Zamówienie anulowane", + "g8":"Potwierdzenie bieżącej płatności", + "g9":"Operacja zakończona sukcesem", + "h0":"Po potwierdzeniu poboru, aktywa zostaną sprzedane i przeniesione automatycznie", + "h1":"Po potwierdzeniu, że płatność nie została otrzymana, zamówienie automatycznie wprowadzi tryb odwołania", + "h2":"Zamówienie sprzedaży", + "h3":"Zamówienie kupna", + "h4":"Zakup reklamy", + "h5":"Reklama sprzedaży", + "h6":"czas", + "h7":"szczegóły", + "h8":"całe", + "h9":"Zamknięte", + "i0":"Do zapłaty", + "i1":"Do potwierdzenia", + "i2":"W skardze", + "i3":"Rodzaje reklam", + "i4":"Proszę wybrać typ transakcji", + "i5":"Proszę wybrać walutę transakcji", + "i6":"Cena", + "i7":"Proszę podać cenę", + "i8":"cena minimalna", + "i9":"Proszę podać najniższą cenę", + "j0":"Najwyższa cena", + "j1":"Proszę podać najwyższą cenę", + "j2":"uwagi", + "j3":"Proszę podać swoje uwagi", + "j4":"zwolnienie", + "j5":"Udało się opublikować", + "j6":"Metoda płatności", + "j7":"Minimalna ilość", + "j8":"Maksymalna ilość", + "j9":"Proszę podać minimalny wolumen transakcji", + "k0":"Proszę podać maksymalną wielkość obrotu" + }, + "first":{ + "a0":"Idź do prawdziwego nazwiska", + "a1":"O nas", + "a2":"Witajcie!", + "a3":"Zatrzymaj ustalanie zysków i strat", + "a4":"Handel po aktualnej ostatniej cenie", + "a5":"Utrzymać pozycję.", + "a6":"Zarządzanie zamówieniami", + "a7":"Wszystkie powierzenia", + "a8":"Historyczne zapisy", + "a9":"wiele", + "b0":"Jesteś pewien, że chcesz się zalogować?", + "b1":"Wpisz się lub zarejestruj", + "b2":"Witam w AMATAK.", + "b3":"kwota", + "b4":"indeks punktowy", + "b5":"Kontrakt indeks", + "b6":"Obsługa wielu metod zakupu", + "b7":"Szybkie kupowanie pieniędzy", + "b8":"zrównoważonego", + "b9":"Obecny obszar nie jest jeszcze otwarty", + "c0":"zakup", + "c1":"wyprzedaż się", + "c2":"czas", + "c3":"Cena ogółem", + "c4":"liczba", + "c5":"Cena Mark", + "c6":"Zobowiązane aktywa", + "c7":"objętość" + }, + "recharge":{ + "a0":"Zmień walutę", + "a1":"*Zmiana adresu może otrzymywać tylko", + "a2":"Jeśli naładujesz swoje aktywa w innych walutach, nie będziesz w stanie ich odzyskać!", + "a3":"Erc20 zaleca się do zbierania", + "a4":"Kopiuj adres", + "a5":"*Przed transferem upewnij się, że adres i informacje są poprawne!Po przeniesieniu jest nieodwołalna!", + "a6":"Proszę zregenerować." + }, + "currency":{ + "a0":"Transakcja w walucie prawnej", + "a1":"Chciałbym go sobie kupić.", + "a2":"Chcę go sprzedać.", + "a3":"Moneta z jednym kliknięciem", + "a4":"Moneta z jednym kliknięciem", + "a5":"Zakup według ilości", + "a6":"Zakup według kwoty", + "a55":"sprzedaż według ilości", + "a66":"sprzedaż według kwoty", + "a7":"Proszę podać ilość zakupu", + "a8":"Proszę podać kwotę zakupu", + "a9":"Proszę podać ilość do sprzedaży", + "b0":"Proszę podać kwotę sprzedaży", + "b1":"Cena jednostkowa", + "b2":"0 zakup opłaty manipulacyjnej", + "b3":"0 sprzedaż prowizji", + "b4":"Niewystarczające dostępne saldo", + "b5":"Proszę najpierw wypełnić zaawansowane certyfikaty", + "b6":"De uwierzytelnianie", + "b7":"Potwierdzenie zakupu", + "b8":"Potwierdzenie sprzedaży" + } +} \ No newline at end of file diff --git a/i18n/lang/pt.json b/i18n/lang/pt.json new file mode 100644 index 0000000..fbc9ac7 --- /dev/null +++ b/i18n/lang/pt.json @@ -0,0 +1,925 @@ +{ + "common": { + "D": "Dia", + "M": "Mês", + "Y": "ANO", + "add": "Adicionar a", + "address": "Endereço", + "all": "Todos.", + "amout": "Número", + "cancel": "Cancelar", + "check": "Para examinar", + "code": "Código de verificação", + "confirm": "Determinar", + "date": "Data", + "detail": "Detalhes", + "email": "Caixa postal", + "enter": "Por favor, insira", + "error": "Falha", + "getCode": "Obter código de verificação", + "h": "Tempo", + "loadMore": "Carregar Mais", + "m": "Ramo", + "money": "Montante do dinheiro", + "more": "Mais", + "notData": "Não existem dados disponíveis", + "notMore": "Não mais.", + "phone": "Telefone celular", + "requestError": "A rede está ocupada. Tente novamente Mais tarde.", + "s": "Segundo", + "save": "Preservação", + "select": "Por favor, seleccione", + "sendSuccess": "Enviado com SUCESSO", + "sms": "Mensagem curta", + "submit": "Enviar", + "success": "SUCESSO", + "tips": "Recordação", + "total": "Total", + "type": "Tipo", + "copy": "Cópia", + "light": "Branco", + "dark": "Preto", + "service": "Serviço Ao cliente", + "toDwon": "Você deseja IR para a página de Download", + "a0": "Por favor, insira o código de compra", + "a1": "Cópia BEM sucedida", + "a2": "Cópia falhou", + "a3": "Registos de Compras", + "a4": "Montante do pagamento", + "a5": "Número de pedidos", + "a6": "Número Da conta", + "a7": "Quantidade de recarga", + "a8": "Autorização de pagamento", + "a9": "Por favor, introduza a quantidade de recarga", + "b0": "Por favor, envie o talão de pagamento.", + "b1": "Compra{amount}Peças{name}Token disponível{rate}%Recompensa", + "b2": "Actividades de subscrição", + "b3": "Gravado com SUCESSO", + "b4": "Gravar falhou", + "b5": "Gerar Poster de Convites", + "b6": "Selecionar Poster", + "b8": "Hora de Abertura", + "b9": "Hora de Fechar", + "c0": "Montante mínimo de recarga: {num}. Recarregamento inferior Ao montante mínimo não será publicado e não Pode ser devolvido", + "c1": "Montante mínimo de retirada", + "c2": "Número de versão", + "c3": "Aberto", + "c4": "Margem estimada", + "c6": "Aumentar proporção", + "c7": "A avaliação atual", + "c5": "Sua ordem de transfer ência FOI enviada com sucesso, por favor aguarde pacientemente, e o Resultado Da transferência será notificado por SMS ou e-mail. Por favor, verifique-o com cuidado. Se você tiver quaisquer perguntas, por favor contacte o serviço de cliente a tempo.", + "GraphicValidation": "Verificação gráfica" + }, + "base": { + "a0": "Título", + "a1": "Retorno", + "a2": "Mais", + "a3": "Cotação", + "a4": "Opção", + "a5": "Nova zona", + "a6": "Membro", + "a7": "Universidade", + "a8": "Negociar para", + "a9": "Preço Mais recente", + "b0": "Pra CIMA e pra baixo", + "b1": "Clicar login", + "b2": "Bem-vindo Ao", + "b3": "Por favor, entre.", + "b4": "Actualização", + "b5": "Cobrir dinheiro", + "b6": "Retirar dinheiro", + "b7": "Extensão", + "b8": "Dedução Da taxa de serviço", + "b9": "Disponível", + "c0": "Compra", + "c1": "Minha comissão", + "c2": "Autenticação Da identidade", + "c3": "Centro de Segurança", + "c4": "Notificação de mensagens", + "c5": "Endereço de retirada", + "c6": "Configurado", + "c7": "Opcional", + "c8": "Adicionado com SUCESSO", + "c9": "Cancelar com SUCESSO", + "d0": "Página inicial", + "d1": "Transacção", + "d2": "Ativos", + "d3": "Digite as palavras-chave de pesquisa", + "d4": "Inteiro", + "d5": "Um tabuleiro principal", + "d6": "Total do equivalente Activo", + "d7": "Conta de moeda", + "d8": "Transfer ência", + "d9": "Moeda de pesquisa", + "e0": "Esconder", + "e1": "Activos de balanço", + "e2": "Congelados", + "e3": "Equivalente", + "e4": "Conta de contrato", + "e5": "Conversão contratual", + "e6": "Classe de mineiros", + "e7": "Mineiro", + "wallet": "Carteira", + "f0": "Comece sua jornada de criptomoedas", + "f1": "comprar moedas", + "f2": "Vá agora", + "f3": "Criptomoedas populares", + "f4": "nome", + "f5": "Funções Comuns", + "f6": "Certificação primária concluída", + "f7": "Certificado de Reserva", + "f8": "Estamos empenhados em alcançar uma elevada transparência do estatuto dos fundos e em manter um rácio de reserva de 1:1 para os activos dos utilizadores.", + "f9": "Bitcoin", + "g0": "retorno médio", + "g1": "Crie infinitas possibilidades", + "g2": "Comece a explorar", + "g3": "disponível para compra", + "g4": "Disponível para venda", + "g5": "preço da contraparte", + "h1": "Conta" + }, + "accountSettings": { + "a0": "Configuração Da Conta", + "a1": "Retrato Da cabeça", + "a2": "Apelido?", + "a3": "Número Da conta principal", + "a4": "Número de telemóvel", + "a5": "Desagregação", + "a6": "Vinculativo", + "a7": "Ligação por correio", + "a8": "Trocando Contas", + "a9": "Cair fora", + "b0": "Alterar apelido", + "b1": "Por favor, Digite um apelido", + "b2": "Língua", + "b3": "Informações de contacto", + "b4": "Consultas de rotina", + "b5": "Serviço ao cliente", + "b6": "Cooperação com os meios de comunicação social", + "b7": "Para qualquer ajuda, entre em contato conosco" + }, + "assets": { + "a0": "Gestão do endereço de retirada", + "a1": "O livro de endereços Pode ser usado para gerenciar seus endereços comuns, e não há necessidade de realizar verificações múltiplas Ao retirar dinheiro DOS endereços Na lista de endereços", + "a2": "A retirada automática Da moeda é suportada. Quando {nome} é usado, apenas OS endereços Na lista de endereços são autorizados a iniciar a retirada Da moeda", + "a3": "Apagar o endereço", + "a4": "Adicionar endereço", + "a5": "Por favor, seleccione o endereço para apagar", + "a6": "Apagar o endereço atualmente selecionado", + "a7": "água Corrente", + "a8": "Total", + "a9": "Disponível", + "b0": "Congelados", + "b1": "Conta de capital", + "b2": "Conta de contrato", + "b3": "Conta de nivelamento", + "b4": "Conta financeira", + "b5": "Digite as palavras-chave de pesquisa", + "b6": "Retirar dinheiro", + "b7": "Seleccione por favor o Tipo de cadeia", + "b8": "Endereço de retirada", + "b9": "Por favor, insira o endereço", + "c0": "Número", + "c1": "Balanço", + "c2": "Por favor, quantidade de Entrada", + "c3": "Inteiro", + "c4": "Taxa de serviço", + "c5": "Por favor, verifique cuidadosamente e insira o endereço correto Da carteira", + "c6": "O envio de moeda digital SEM Paralelo para o endereço Da carteira irá causar perda Permanente", + "c7": "A taxa de movimentação será deduzida do montante do dinheiro retirado", + "c8": "Registo Da retirada", + "c9": "Tempo", + "d0": "Estado", + "d1": "Em revisão", + "d2": "SUCESSO", + "d3": "Falha", + "d4": "Veja Mais", + "d5": "Apresentado com sucesso, sob revisão", + "d6": "Editar", + "d7": "Adicionar a", + "d8": "Endereço", + "d9": "Por favor, Digite Ou Cole o endereço", + "e0": "Observações", + "e1": "Por favor, insira seus comentários", + "e2": "Por favor, preencha o endereço", + "e3": "Por favor, preencha as observações", + "e4": "Operação BEM sucedida", + "e5": "Cobrir dinheiro", + "e6": "Digitalizar o código QR acima para obter o endereço de carregamento", + "e7": "Endereço de envio", + "e8": "Número de moedas cobradas", + "e9": "Por favor, introduza o montante Da moeda cobrada", + "f0": "Este endereço é o SEU último endereço de recarga. Quando o sistema receber a recarga, será automaticamente gravado", + "f1": "A transfer ência Precisa de ser confirmada por toda a rede blockchain. Quando chegar à confirmação Da rede {num} o SEU {nome} será automaticamente depositado Na conta", + "f2": "Quando UMA rede é confirmada, o SEU", + "f3": "Por favor, envie apenas {nome} para este endereço. Enviar outra moeda digital para este endereço irá causar perda Permanente", + "f4": "Registo de carga" + }, + "auth": { + "a0": "Autenticação Da identidade", + "a1": "Autenticação do Nome verdadeiro", + "a2": "Não certificado", + "a3": "Certificado", + "a4": "Certificação avançada", + "a5": "Em revisão", + "a6": "Autenticação falhou", + "a7": "Nacionalidade", + "a8": "Por favor, escolha SUA nacionalidade.", + "a9": "Nome verdadeiro", + "b0": "Por favor, Digite SEU Nome verdadeiro", + "b1": "Número de identificação", + "b2": "Por favor, inserir número de ID", + "b3": "Confirmar", + "b4": "Certificação BEM sucedida", + "b5": "Por favor, envie a foto Da Frente do SEU cartão de identificação", + "b6": "Por favor, carregue a parte de trás do certificado", + "b7": "Por favor, envie a SUA foto de identificação portátil", + "b8": "Certifique-se de que a foto está limpa SEM Marca de água e o Corpo superior está intacto", + "b9": "O tamanho do arquivo é Muito Grande e não Pode exceder", + "c0": "Erro do Tipo de arquivo", + "c1": "Envio BEM sucedido", + "c2": "Por favor, envie a foto Na parte de trás do certificado", + "c3": "Por favor, envie a foto Da Frente do SEU cartão de identificação", + "c4": "Carregar com sucesso, por favor aguarde a auditoria", + "c5": "data de nascimento", + "c6": "tipo de certificado", + "c7": "Endereço residencial", + "c8": "Por favor insira seu endereço residencial", + "c9": "número de telefone", + "d0": "Por favor, digite seu número de telefone", + "d1": "carteira de motorista", + "d2": "Passaporte", + "d3": "carteira de identidade", + "d4": "Selecione a data", + "d5": "por favor escolha" + }, + "exchange": { + "a0": "Moedas", + "a1": "Solicitar a compra", + "a2": "Contrato", + "a3": "Transacção", + "a4": "Delegação actual", + "a5": "Comissão histórica", + "a6": "Adicionado com SUCESSO", + "a7": "Cancelar com SUCESSO", + "a8": "Total Da emissão", + "a9": "Circulação total", + "b0": "Preço de emissão", + "b1": "Tempo de emissão", + "b2": "Endereço de Papel Branco", + "b3": "Endereço Oficial Do site", + "b4": "Breve introdução", + "b5": "Comprar", + "b6": "Vender", + "b7": "Preço Da Comissão", + "b8": "Tipo", + "b9": "Negociação DOS limites de preços", + "c0": "Transacção de Mercado", + "c1": "Fechado", + "c2": "Total", + "c3": "Compra", + "c4": "Vender fora", + "c5": "Número", + "c6": "Fechar Ao Melhor preço de Mercado", + "c7": "Preço total", + "c8": "Quantidade disponível", + "c9": "Valor Bruto", + "d0": "Assine aqui.", + "d1": "Mapa de compartilhamento de tempo", + "d2": "Preço", + "d3": "Último negócio", + "d4": "Tempo", + "d5": "Direcção", + "d6": "Preço FIXO", + "d7": "Preço de Mercado", + "d8": "Por favor, indique o preço.", + "d9": "Por favor, quantidade de Entrada", + "e0": "Por favor, indique o preço total", + "e1": "SUCESSO do checkout", + "e2": "Preço médio", + "e3": "Maior", + "e4": "Mínimo", + "e5": "Montante", + "e6": "Ordem.", + "e7": "Informação monetária", + "e8": "Minuto", + "e9": "Hora", + "f0": "Dia", + "f1": "Semana", + "f2": "Mês", + "f3": "Preço de compra", + "f4": "Preço de Venda", + "f5": "Transacção monetária", + "f6": "Digite as palavras-chave de pesquisa", + "f7": "Negociar para", + "f8": "Preço Mais recente", + "f9": "Pra CIMA e pra baixo", + "g0": "Opcional", + "g1": "Minha comissão", + "g2": "Revogação Da atribuição", + "g3": "Operação", + "g4": "Revogar", + "g5": "Cancelar a delegação actual", + "g6": "Cancelado com SUCESSO" + }, + "option": { + "a0": "Opção", + "a1": "Entrega à distância", + "a2": "Veja Mais", + "a3": "Ser barbudo", + "a4": "Taxa de Retorno", + "a5": "Compra", + "a6": "Muitos", + "a7": "Vazio", + "a8": "Atual", + "a9": "Próxima edição", + "b0": "Ver plana", + "b1": "Escolha do aumento de preços", + "b2": "Taxa de Retorno", + "b3": "Quantidade de compra", + "b4": "Por favor, quantidade de Entrada", + "b5": "Balanço", + "b6": "Lucros e perdas", + "b7": "Compre agora.", + "b8": "Aumento", + "b9": "Plana", + "c0": "Queda", + "c1": "Compra BEM sucedida", + "c2": "Detalhes", + "c3": "Número de ordem", + "c4": "Preço de Abertura", + "c5": "Preço de encerramento", + "c6": "Tempo de compra", + "c7": "Quantidade de compra", + "c8": "Tipo de compra", + "c9": "Estado", + "d0": "Resultado final", + "d1": "Quantidade de liquidação", + "d2": "Tempo de entrega", + "d3": "Veja Mais", + "d4": "Opção de compra", + "d5": "Esperando PELA entrega", + "d6": "Minha entrega.", + "d7": "Registro de entrega", + "d8": "Minuto", + "d9": "Hora", + "e0": "Dia", + "e1": "Semana", + "e2": "Mês", + "e3": "Direcção", + "e4": "Pra CIMA e pra baixo" + }, + "purchase": { + "a0": "Preço de emissão", + "a1": "Moeda de subscrição", + "a2": "Tempo online esperado", + "a3": "Hora de início Da assinatura", + "a4": "Hora de Fechar", + "a5": "Solicitar a compra", + "a6": "Selecione por favor a moeda de assinatura", + "a7": "Quantidade de compra", + "a8": "Por favor, introduza a quantidade", + "a9": "Inteiro", + "b0": "Aplicar imediatamente", + "b1": "Ciclo de subscrição", + "b2": "Projecto a aquecer", + "b3": "Iniciar assinatura", + "b4": "Assinatura fechada", + "b5": "transação listada", + "b6": "Detalhes do projecto", + "b7": "Utilização ou não", + "b8": "Compra", + "b9": "Compra BEM sucedida" + }, + "reg": { + "a0": "Registo móvel", + "a1": "Registo por correio", + "a2": "Telefone celular", + "a3": "Por favor, insira o número de telefone móvel", + "a4": "Caixa postal", + "a5": "Por favor, Digite o SEU número de e-mail", + "a6": "Código de verificação", + "a7": "Digite o código de verificação", + "a8": "Senha", + "a9": "Por favor insira UMA senha", + "b0": "Confirmar senha", + "b1": "Por favor, confirme a senha", + "b2": "Referências", + "b3": "Por favor, indique o recomendado", + "b4": "Opcional", + "b5": "Você concordou.", + "b6": "Contrato de utilizador", + "b7": "E Aprender sobre nós", + "b8": "Acordo de privacidade", + "b9": "Registar", + "c0": "Número de conta existente", + "c1": "Assine agora.", + "c2": "Por favor Leia e Concorde com o acordo.", + "c3": "Por favor, preencha o SEU número de telemóvel", + "c4": "Por favor, preencha o número de e-mail", + "c5": "Login FOI BEM sucedido", + "c6": "Código da Instituição (obrigatório)", + "c7": "Por favor, preencha o código da instituição", + "c8": "Registre-se agora para iniciar sua jornada com criptomoedas" + }, + "safe": { + "a0": "Desagregação", + "a1": "Vinculativo", + "a2": "Caixa postal", + "a3": "Número de e- mail", + "a4": "Por favor, Digite o SEU número de e-mail", + "a5": "Código de verificação por correio", + "a6": "Digite o código de verificação", + "a7": "Código de verificação", + "a8": "Sem SUCESSO", + "a9": "Ligação BEM sucedida", + "b0": "Esqueça a senha de login", + "b1": "Número Da conta", + "b2": "Por favor, introduza o telefone móvel", + "b3": "Nova senha", + "b4": "Por favor, insira UMA Nova senha", + "b5": "Confirmar senha", + "b6": "Por favor, confirme a senha", + "b7": "Confirmar modificação", + "b8": "Por favor, insira o telefone celular correto ou número de e-mail", + "b9": "Verificador do Google", + "c0": "Como fazê-lo: Baixar e abrir o verificador do Google, digitalizar o código QR abaixo ou manualmente introduzir a chave secreta para adicionar o símbolo de verificação", + "c1": "Copiar Tecla", + "c2": "Eu mantive minha chave corretamente. Se EU a perder, ELA não será recuperada", + "c3": "Próximo Passo", + "c4": "Código de verificação SMS", + "c5": "Google captcha", + "c6": "Confirmar ligação", + "c7": "Centro de Segurança", + "c8": "Senha de login", + "c9": "Modificar", + "d0": "Configurado", + "d1": "Código de transação", + "d2": "Telefone celular", + "d3": "Modificado com SUCESSO", + "d4": "Número de telemóvel", + "d5": "Por favor, insira o número de telefone móvel", + "d6": "Por favor introduza o código de verificação SMS", + "d7": "Fechar", + "d8": "Abre", + "d9": "Verificação", + "e0": "Mensagem curta", + "e1": "Fechado com SUCESSO", + "e2": "Abrir com SUCESSO", + "e3": "Confirmar", + "e4": "Definir com SUCESSO", + "Remembered": "Lembrou sua senha?", + "e5": "Recuperar senha" + }, + "transfer": { + "a0": "Registo de transferências", + "a1": "SUCESSO", + "a2": "Número", + "a3": "Direcção", + "a4": "Activos de conta", + "a5": "Conta de contrato", + "a6": "Conta de nivelamento", + "a7": "Conta financeira", + "a8": "Transfer ência", + "a9": "De", + "b0": "A", + "b1": "transferir moeda", + "b2": "Balanço", + "b3": "Tudo", + "b4": "Transferido" + }, + "notice": { + "a0": "Detalhes", + "a1": "Notificação de mensagens", + "a2": "Aviso", + "a3": "Notícias" + }, + "invite": { + "a0": "Desfrutar do desconto comercial e convidar amigos", + "a1": "Parceiro", + "a2": "Desfrutar do desconto comercial", + "a3": "Utilizadores comuns", + "a4": "Minha identidade.", + "a5": "Aproveite a SUA identidade.", + "a6": "Meu código de convite", + "a7": "Copiar código QR do convite", + "a8": "Copiar link de convite", + "a9": "Minha promoção", + "b0": "Número total de promoção", + "b1": "Pessoas", + "b2": "Total do rendimento equivalente", + "b3": "Registo de promoção", + "b4": "Convite Directo", + "b5": "Registo Da Comissão devolvida", + "b6": "Grau", + "b7": "Configuração do nível", + "b8": "Condições de promoção", + "b9": "Interesse de divisão", + "c0": "Apelido?", + "c1": "Número de Promotores", + "c2": "Conversão DOS rendimentos", + "c3": "Registro de convite", + "c4": "Registo Da Comissão devolvida", + "c5": "Descrição DOS interesses de classe", + "c6": "Grau", + "c7": "Direitos e interesses", + "c8": "Explicar", + "c9": "Os MEUS direitos e interesses" + }, + "help": { + "a0": "Detalhes", + "a1": "Universidade", + "a2": "Classificação" + }, + "login": { + "a0": "Caixa de correio", + "a1": "Por favor insira um email", + "a2": "Senha", + "a3": "Por favor insira UMA senha", + "a4": "Assine aqui.", + "a5": "Esqueça a senha.", + "a6": "Sem conta", + "a7": "Registre-se agora.", + "a8": "Telefone celular", + "a9": "Caixa postal", + "b0": "Completo", + "b1": "Conta de login", + "b2": "Faça login agora para iniciar sua jornada com criptomoedas", + "b3": "E-mail", + "b4": "Por favor insira seu e-mail" + }, + "contract": { + "a0": "Abrir um celeiro para fornecer alívio", + "a1": "posição", + "a2": "Confiar", + "a3": "História", + "a4": "Transacção contratual", + "a5": "Abertura BEM sucedida", + "a6": "Tipo de transacção", + "a7": "Fechado", + "a8": "Montante total atribuído", + "a9": "Preço médio de transacção", + "b0": "Preço Da Comissão", + "b1": "Margem", + "b2": "Taxa de serviço", + "b3": "Estado", + "b4": "Operação", + "b5": "Cancelar a ordem", + "b6": "Rescindido", + "b7": "Indefinido", + "b8": "Transacção parcial", + "b9": "Tudo fechado.", + "c0": "Kaiduo.", + "c1": "Ping-kong.", + "c2": "Abrir ar", + "c3": "Pinto.", + "c4": "Recordação", + "c5": "Cancelar a ordem actual", + "c6": "Cancelado com SUCESSO", + "c7": "Resultado e perda", + "c8": "Partilha", + "c9": "Detalhes Da atribuição", + "d0": "Não existem dados disponíveis", + "d1": "Preço", + "d2": "Número", + "d3": "Hora Da transacção", + "d4": "Direitos DOS utilizadores", + "d5": "Lucros e Perdas não realizados", + "d6": "Taxa de Risco", + "d7": "Preço de Mercado", + "d8": "USDT", + "d9": "Profissão do depósito", + "e0": "Bullish.", + "e1": "Pode abrir Mais", + "e2": "Bearish.", + "e3": "Pode abrir vazio", + "e4": "Disponível", + "e5": "Transfer ência", + "e6": "Taxa de capital", + "e7": "Resolução Da distância", + "e8": "Muitos", + "e9": "preço de abertura", + "f0": "Transfer ência de fundos", + "f1": "Calculadora", + "f2": "Sobre o contrato", + "f3": "Fundo de protecção DOS Riscos", + "f4": "História DOS custos de capital", + "f5": "Atribuição geral", + "f6": "Ordem de Mercado", + "f7": "É Baseado em", + "f8": "O preço de", + "f9": "Abertura de alavancagem Dupla", + "g0": "Kaiduo.", + "g1": "Abrir ar", + "g2": "Comissão BEM sucedida", + "g3": "Mostrar apenas o contrato atual", + "g4": "Mantendo", + "g5": "Confiar", + "g6": "preço médio de abertura", + "g7": "Preço de referência de liquidação", + "g8": "Estimativa Da paridade Forte", + "g9": "Rendimentos liquidados", + "h0": "taxa de retorno", + "h1": "Parar o lucro", + "h2": "Parar a perda", + "h3": "fechar a posição", + "h4": "O preço de Mercado é Plano", + "h5": "Take Profit e Stop Loss", + "h6": "Plana", + "h7": "Por favor, Digite o preço final", + "h8": "Preço FIXO", + "h9": "Por favor, indique a quantidade de fecho", + "i0": "Mantendo", + "i1": "Preço médio de Abertura", + "i2": "Preço de transacção Mais recente", + "i3": "Por favor, indique o preço.", + "i4": "Obter lucros", + "i5": "Preço de Mercado", + "i6": "Quando a operação estiver concluída, o lucro e a perda serão estimados", + "i7": "detener la pérdida de", + "i8": "A Comissão de cessação Da perda será desencadeada Quando a operação estiver concluída, e OS resultados são esperados após a transacção", + "i9": "Determinar", + "j0": "Fechamento BEM sucedido", + "j1": "É o preço de Mercado Plano", + "j2": "Tudo Plano", + "j3": "SUCESSO", + "j4": "Definir com SUCESSO", + "j5": "Não há correspondência para cálculo inteligente", + "j6": "Fazer", + "j7": "Taxa de fecho", + "j8": "Plataforma digital de negociação de ativos", + "j9": "Quando {name1} se encontrar {Name2} {name3} Na Estrada Da subida de fogo", + "k0": "Preço de Abertura", + "k1": "Preço Mais recente", + "k2": "Digitalizar o código para Aprender Mais", + "k3": "Liquidação DOS lucros e Perdas", + "k4": "A Imagem FOI Salva localmente", + "k5": "Imagem falhou", + "k6": "Imagem de imprensa longa", + "k7": "Um clique plana", + "k8": "Um clique para trás", + "k9": "É tudo Plano", + "l0": "Todos iguais, SUCESSO", + "l1": "Uma Tecla reversa", + "l2": "Sucesso inverso", + "l3": "Ping-kong.", + "l4": "Pinto." + }, + "otc": { + "a0": "Publicidade", + "a1": "Ordem", + "a2": "Moeda de transacção", + "a3": "Minha ordem.", + "a4": "Meu anúncio", + "a5": "Compra", + "a6": "Vender", + "a7": "Total", + "a8": "Excedente", + "a9": "Limite", + "b0": "Preço unitário", + "b1": "Método de pagamento", + "b2": "Operação", + "b3": "Total", + "b4": "Por favor, escolha o método de pagamento", + "b5": "Por favor, quantidade de Entrada", + "b6": "Fazer UMA encomenda", + "b7": "Alipay.", + "b8": "Conversa-Molhada", + "b9": "Cartão bancário", + "c0": "SUCESSO do checkout", + "c1": "Estado", + "c2": "Número de publicidade", + "c3": "Preço total", + "c4": "Número", + "c5": "Tempo de libertação", + "c6": "Na prateleira.", + "c7": "Rescindido", + "c8": "No comércio", + "c9": "Completo", + "d0": "Recordação", + "d1": "É o anúncio atual removido", + "d2": "Determinar", + "d3": "Cancelar", + "d4": "Cancelado com SUCESSO", + "d5": "Conta de moeda legal", + "d6": "Congelados", + "d7": "Número Da conta paga", + "d8": "Por favor, Digite o número Da conta", + "d9": "Nome completo", + "e0": "Por favor, Digite SEU nome.", + "e1": "Código de pagamento", + "e2": "Vinculativo", + "e3": "Conta de Wechat", + "e4": "Nome do Banco", + "e5": "Indique o Nome do Banco", + "e6": "Filial de Abertura Da conta", + "e7": "Por favor, insira o Ramo de Abertura Da conta", + "e8": "Número do cartão bancário", + "e9": "Por favor, inserir número do cartão bancário", + "f0": "Editado com SUCESSO", + "f1": "Adicionado com SUCESSO", + "f2": "Vender fora", + "f3": "Compra", + "f4": "Detalhes Da ordem", + "f5": "Número de ordem", + "f6": "Número Da conta", + "f7": "Banco de depósito", + "f8": "Tempo restante", + "f9": "Ramo", + "g0": "Segundo", + "g1": "Enviar talão de pagamento", + "g2": "Confirmar o pagamento", + "g3": "Anulação Da encomenda", + "g4": "Confirmar recibo", + "g5": "Não recebido", + "g6": "Cancelar a ordem actual", + "g7": "Ordem anulada", + "g8": "Confirmar pagamento atual", + "g9": "Operação BEM sucedida", + "h0": "Após confirmar a cobrança, OS ativos serão vendidos e transferidos automaticamente", + "h1": "Após confirmar que o pagamento não FOI recebido, a ordem entrará automaticamente no modo de Recurso", + "h2": "Ordem de Venda", + "h3": "Ordem de compra", + "h4": "Ordem de compra publicitária", + "h5": "Ordem de Venda publicitária", + "h6": "Tempo", + "h7": "Detalhes", + "h8": "Inteiro", + "h9": "Fechado", + "i0": "A Pagar", + "i1": "A confirmar", + "i2": "Sob queixa", + "i3": "Tipos de publicidade", + "i4": "Selecione o Tipo de transação", + "i5": "Selecione moeda de transação", + "i6": "Preço", + "i7": "Por favor, indique o preço.", + "i8": "Preço mínimo", + "i9": "Por favor, indique o preço Mais baixo", + "j0": "Preço Mais elevado", + "j1": "Por favor, indique o preço Mais Alto", + "j2": "Observações", + "j3": "Por favor, insira seus comentários", + "j4": "Libertação", + "j5": "Publicado com SUCESSO", + "j6": "Método de pagamento", + "j7": "Quantidade mínima", + "j8": "Quantidade máxima", + "j9": "Por favor, Digite o volume mínimo de transações", + "k0": "Por favor, Digite o volume máximo de negociação" + }, + "first": { + "a0": "Ir para o Nome real", + "a1": "Sobre nós", + "a2": "Bem-vindos.", + "a3": "Parar a determinação do lucro e parar a perda", + "a4": "Comércio a preços Mais Recentes", + "a5": "Manter posição", + "a6": "Gestão Da ordem", + "a7": "Toda a confiança", + "a8": "Registos históricos", + "a9": "Múltiplos", + "b0": "Tem certeza que quer fazer logon?", + "b1": "Assinar ou registar", + "b2": "Olá, bem-vindo Ao Moabcoin.", + "b3": "Montante", + "b4": "índice de Pontos", + "b5": "Índice de contratos", + "b6": "Suportar métodos de compra múltiplos", + "b7": "Compra rápida de dinheiro", + "b8": "Sustentável", + "b9": "A área actual ainda não está aberta.", + "c0": "Compra", + "c1": "Vender fora", + "c2": "Tempo", + "c3": "Preço total", + "c4": "Número", + "c5": "Último preço", + "c6": "Activos fechados", + "c7": "Volume" + }, + "recharge": { + "a0": "Trocar moeda", + "a1": "*Mudança de endereço só Pode receber", + "a2": "Se você recarregar seus ativos EM outras moedas, você não será Capaz de recuperá-los!", + "a3": "O Erc20 é recomendado para recolha", + "a4": "Copiar endereço", + "a5": "*Por favor, certifique-se de que o endereço e informação estão corretos antes Da transfer ência!Uma Vez transferido, é irrevogável!", + "a6": "Por favor regenerar" + }, + "currency": { + "a0": "Transacção monetária legal", + "a1": "Eu gostaria de comprá-lo.", + "a2": "Eu Quero vender.", + "a3": "Um clique para comprar moedas", + "a4": "Um clique para vender moedas", + "a5": "Compra por quantidade", + "a6": "Compra por montante", + "a7": "Por favor, indique a quantidade de compra", + "a8": "Por favor, Digite o montante de compra", + "a9": "Por favor, indique a quantidade para Venda", + "b0": "Por favor, Digite o montante Da Venda", + "b1": "Preço unitário", + "b2": "0 Manutenção Da compra", + "b3": "0 Venda por encomenda", + "b4": "Balanço disponível insuficiente", + "b5": "Por favor, complete primeiro a certificação avançada.", + "b6": "De autenticação", + "b7": "Confirmar compra", + "b8": "Confirmar Venda" + }, + "shou": { + "a0": "Recarregue a conta", + "a1": "Adicione fundos de criptomoeda à sua carteira", + "a2": "E comece a negociar imediatamente", + "a3": "Recarregue agora", + "a4": "Plataforma global de negociação de ativos digitais", + "a5": "Facilite as transações de ativos criptografados", + "a6": "Inscreva-se agora", + "a7": "Mercado de Ativos Digitais Expresso", + "a8": "Tendência de Mercado", + "a9": "Moeda", + "a10": "Último preço (USD)", + "a11": "Aumento de 24h", + "a12": "volume de transações 24h", + "a13": "Top 10", + "a14": "5 milhões+", + "a15": "< 0,10%", + "a16": "200+", + "a17": "Classificação Global", + "a18": "os usuários confiam em nós", + "a19": "Taxas ultrabaixas", + "a20": "Países", + "a21": "Suporte multi-terminal", + "a22": "Negocie ativos digitais a qualquer hora, em qualquer lugar", + "a23": "Suporta uma ampla gama de tipos de ativos, com todas as informações de moeda", + "a24": "Loja de aplicativos", + "a25": "APK para Android", + "a26": "Escaneie o código para baixar o APP", + "a27": "iOS e Android", + "a28": "Por que escolher xuscoin.com?", + "a29": "Esforce-se para fornecer serviços de negociação de ativos digitais para vários países", + "a30": "Negociação simples e conveniente de ativos criptografados", + "a31": "O produto é fácil de entender, o processo de transação é conveniente e a plataforma de serviço de ativos blockchain completa", + "a32": "Com base na experiência do usuário, forneça uma experiência de serviço de criptografia agradável", + "a33": "Servindo regiões multilíngues globais, tornando-se uma porta de entrada para todos os usuários entrarem no mundo criptografado", + "a34": "Segurança e estabilidade com zero acidentes", + "a35": "Múltiplas garantias de estratégia de segurança, garantia de 100% do fundo de reserva, nenhum incidente de segurança ocorreu desde a sua criação", + "a36": "Taxa de taxa de transação ideal", + "a37": "Taxas de transação preferenciais, direitos VIP competitivos, aproveite o serviço da mais alta qualidade", + "a38": "Guia para iniciantes", + "a39": "Entenda rapidamente o processo de transação de ativos digitais", + "a40": "ganhar renda imediatamente", + "a41": "Clique para ir", + "a42": "Plataforma de Negociação de Criptomoedas XUScoin - Projetado para Todos", + "a43": "Comece a jornada de criptografia" + }, + "homeNewText": { + "aa3": "Registre-se agora e comece sua jornada com criptomoedas", + "aa4": "Hemen ticarete başlayın", + "aa7": "Para birimi", + "aa8": "Login/Registro", + "bb1": "Son fiyat (USD)", + "bb2": "24 saatlik artış", + + "bb4": "O futuro do dinheiro está aqui", + "bb5": "Somos o local mais fiável para os investidores comprarem, venderem e gerirem criptomoedas", + "bb6": "Registe-se por e-mail", + "bb7": "Captura fácil", + "bb8": "Oportunidade de negociação", + "bb9": "Conveniente para usar criptomoeda", + "bb10": "Ferramentas", + "bb11": "Trabalhamos regularmente na atualização das funcionalidades existentes e na implementação de novas funcionalidades de serviço.", + "bb12": "Processamento de encriptação comercial", + "bb13": "Fornecer uma forma fiável de aceitar convenientemente pagamentos das criptomoedas mais populares do mundo.", + "bb14": "Troca ilimitada de criptomoedas", + "bb15": "Troque Bitcoin, Tether, Litecoin, Ethereum e mais de 50 outras moedas de forma fácil e segura.", + "bb16": "Otimizar a experiência do utilizador", + "bb17": "Otimize a experiência do utilizador: lance novos produtos de alta qualidade, simplifique as operações e melhore a facilidade de utilização.", + "bb18": "Depósito e levantamento instantâneo", + "bb19": "Os nossos parceiros", + "bb20": "Em todo o mundo", + "bb21": "Os nossos parceiros são líderes de mercado e ajudam-nos a fornecer as melhores soluções de criptomoedas.", + "bb22": "Guia para principiantes", + "bb23": "Criar uma conta {nome}", + "bb24": "Registe-se já e inicie a sua jornada comercial!", + "bb25": "Registar", + "bb26": "Depósito", + "bb27": "Recarga rápida e depósito fácil!", + "bb28": "Recarregar", + "bb29": "Começar a negociar", + "bb30": "Comece a negociar e desfrute de possibilidades ilimitadas!", + "bb31": "Transação moeda a moeda", + "bb32": "Abra transações a qualquer hora, em qualquer lugar", + "bb33": "Digitalizar para descarregar", + "bb34": "Comece já a sua viagem criptográfica!", + "bb35": "Leva apenas 10 segundos para se registar e começar a negociar", + "bb36": "Registo gratuito", + "bb37": "Os depósitos e levantamentos podem ser concluídos em 3 minutos, no máximo.", + "bb38": "Registe-se agora", + "bb39": "Negoceie agora", + "bb40": "{name}, negociar a qualquer hora, em qualquer lugar", + "bb41": "Escanear o código QR para descarregar a APP {nome}", + "bb42": "Digitalize o código QR para descarregar a APP" + } +} \ No newline at end of file diff --git a/i18n/lang/spa.json b/i18n/lang/spa.json new file mode 100644 index 0000000..ece890e --- /dev/null +++ b/i18n/lang/spa.json @@ -0,0 +1,927 @@ +{ + "common": { + "D": "Día", + "M": "Mes", + "Y": "Año", + "add": "Añadir", + "address": "Dirección", + "all": "Todos", + "amout": "Cantidad", + "cancel": "Cancelar", + "check": "Auditoría", + "code": "Código de verificación", + "confirm": "Determinar", + "date": "Fecha", + "detail": "Detalles", + "email": "Buzón de correo", + "enter": "Por favor, introduzca", + "error": "Fracaso", + "getCode": "Obtener Código de verificación", + "h": "Tiempo", + "loadMore": "Cargar más", + "m": "Puntos", + "money": "Importe", + "more": "Más", + "notData": "Datos no disponibles", + "notMore": "No más", + "phone": "Teléfono móvil", + "requestError": "La red está ocupada.", + "s": "Segundos", + "save": "Guardar", + "select": "Por favor, elija", + "sendSuccess": "Enviar con éxito", + "sms": "SMS", + "submit": "Submission", + "success": "éxito", + "tips": "Consejos cálidos", + "total": "Total", + "type": "Tipo", + "copy": "Copiar", + "light": "Blanco", + "dark": "Negro", + "service": "Servicio al cliente", + "toDwon": "Ir a la página de descarga", + "a0": "Por favor, introduzca el Código de suscripción", + "a1": "Copia exitosa", + "a2": "Falló la replicación", + "a3": "Registro de pedidos", + "a4": "Importe pagado", + "a5": "Número de solicitudes", + "a6": "Número de cuenta", + "a7": "Cantidad de recarga", + "a8": "Comprobante de pago", + "a9": "Introduzca el número de recargas", + "b0": "Por favor, suba el certificado de pago", + "b1": "Comprar{amount}Pieza{name}Token disponible{rate}%Recompensa", + "b2": "Actividades de suscripción", + "b3": "Guardar con éxito", + "b4": "Fallo al guardar", + "b5": "Generar póster de invitación", + "b6": "Seleccionar póster", + "b8": "Hora de apertura", + "b9": "Hora de cierre", + "c0": "Cantidad mínima de recarga: {num}. Las recargas inferiores a la cantidad mínima no se cargarán y no se devolverán", + "c1": "Retirada mínima", + "c2": "Número de versión", + "c3": "abierto", + "c4": "margen estimado", + "c6": "Relación de aumento", + "c7": "La valoración actual", + "c5": "su orden de transferencia ha sido enviada con éxito, por favor espere pacientemente, los resultados de la transferencia serán notificados por SMS o correo electrónico. Por favor, preste atención a la recepción, si tiene alguna pregunta por favor póngase en contacto con el servicio al cliente a tiempo.", + "GraphicValidation": "Verificación gráfica" + }, + "base": { + "a0": "Título", + "a1": "Return", + "a2": "Más", + "a3": "Cotización", + "a4": "Opciones", + "a5": "Zona de Daxin", + "a6": "Miembro", + "a7": "College", + "a8": "Par de transacciones", + "a9": "El último precio", + "b0": "Rango de fluctuación", + "b1": "Haga clic en inicio de sesión", + "b2": "Bienvenido a", + "b3": "Por favor, inicie sesión", + "b4": "Actualización", + "b5": "Monetización", + "b6": "Retirada de moneda", + "b7": "Popularización", + "b8": "Comisiones deducibles", + "b9": "Disponible", + "c0": "Comprar", + "c1": "Mi Comisión", + "c2": "Autenticación de la identidad", + "c3": "Centro de Seguridad", + "c4": "Notificación de mensajes", + "c5": "Dirección de la moneda", + "c6": "Configuración", + "c7": "Auto - Elección", + "c8": "Añadir con éxito", + "c9": "Cancelación exitosa", + "d0": "Página principal", + "d1": "Comercio", + "d2": "Activos", + "d3": "Introduzca la palabra clave de búsqueda", + "d4": "Todos", + "d5": "Placa madre", + "d6": "Conversión total de activos", + "d7": "Cuenta corriente", + "d8": "Remar", + "d9": "Buscar moneda", + "e0": "Ocultar", + "e1": "Saldo activo", + "e2": "Congelación", + "e3": "Conversión", + "e4": "Cuentas contractuales", + "e5": "Conversión de contratos", + "e6": "Grado minero", + "e7": "Minero", + "wallet": "Cartera", + "f0": "Abre tu viaje con criptomonedas", + "f1": "comprar monedas", + "f2": "Ve ahora", + "f3": "Criptomonedas populares", + "f4": "nombre", + "f5": "Funciones comunes", + "f6": "Certificación primaria completa", + "f7": "Certificado de reserva", + "f8": "Estamos comprometidos a lograr una alta transparencia del estado de los fondos y a mantener una proporción de reservas de 1:1 para los activos de los usuarios.", + "f9": "bitcóin", + "g0": "retorno promedio", + "g1": "Crea infinitas posibilidades", + "g2": "Empezar a explorar", + "g3": "disponible para compra", + "g4": "Disponible para venta", + "g5": "precio de contraparte", + "h1": "Factura" + }, + "accountSettings": { + "a0": "Configuración de la cuenta", + "a1": "Avatar", + "a2": "Apodo", + "a3": "Número de cuenta principal", + "a4": "Número de teléfono móvil", + "a5": "Desenganche", + "a6": "Binding", + "a7": "Unión del buzón", + "a8": "Cambiar cuenta", + "a9": "Iniciar sesión", + "b0": "Modificar apodos", + "b1": "Por favor, introduzca un apodo", + "b2": "Idioma", + "b3": "Información de contacto", + "b4": "Consulta de rutina", + "b5": "Servicio al cliente", + "b6": "Cooperación con los medios de comunicación", + "b7": "Si necesita ayuda, por favor póngase en contacto con nosotros." + }, + "assets": { + "a0": "Gestión de direcciones de monedas", + "a1": "La libreta de direcciones se puede utilizar para administrar sus direcciones comunes, sin necesidad de múltiples comprobaciones cuando se inicia la recolección de dinero a una dirección existente en la libreta de direcciones", + "a2": "Se admite la acuñación automática de monedas. Cuando se utiliza {name} para la acuñación de monedas, sólo se permite la acuñación de monedas a partir de direcciones existentes en la libreta de direcciones web", + "a3": "Borrar dirección", + "a4": "Añadir dirección", + "a5": "Seleccione la dirección a eliminar", + "a6": "Borrar la dirección seleccionada actualmente", + "a7": "Agua corriente", + "a8": "Total", + "a9": "Disponible", + "b0": "Congelación", + "b1": "Cuenta de fondos", + "b2": "Cuentas contractuales", + "b3": "Cuenta apalancada", + "b4": "Cuenta financiera", + "b5": "Introduzca la palabra clave de búsqueda", + "b6": "Retirada de moneda", + "b7": "Seleccione el tipo de cadena", + "b8": "Dirección de la moneda", + "b9": "Introduzca la dirección", + "c0": "Cantidad", + "c1": "Saldo", + "c2": "Por favor, introduzca la cantidad", + "c3": "Todos", + "c4": "Gastos de tramitación", + "c5": "Por favor, compruebe cuidadosamente e introduzca la dirección correcta de la cartera de monedas", + "c6": "Enviar dinero digital no correspondiente a la dirección de la cartera puede causar pérdidas permanentes", + "c7": "Los gastos de manipulación de la retirada de moneda se deducirán de la cantidad de retirada de moneda.", + "c8": "Registro de monedas", + "c9": "Tiempo", + "d0": "Estado", + "d1": "Auditoría en curso", + "d2": "éxito", + "d3": "Fracaso", + "d4": "Ver más", + "d5": "Submitted successfully, under review", + "d6": "Editar", + "d7": "Añadir", + "d8": "Dirección", + "d9": "Introduzca o pegue la dirección", + "e0": "Observaciones", + "e1": "Por favor, introduzca comentarios", + "e2": "Por favor, rellene la dirección", + "e3": "Por favor, rellene los comentarios", + "e4": "Operación exitosa", + "e5": "Monetización", + "e6": "Escanear el Código QR superior para obtener la dirección de llenado de moneda", + "e7": "Dirección de llenado de moneda", + "e8": "Cantidad de llenado", + "e9": "Introduzca el número de monedas rellenas", + "f0": "Esta dirección es su última dirección de recarga, que se registrará automáticamente cuando el sistema reciba recarga", + "f1": "Las transferencias deben ser confirmadas por toda la red de blockchain, y su {nombre} se depositará automáticamente en la cuenta cuando llegue a {num} Network confirms", + "f2": "Cuando se confirme su red", + "f3": "Por favor, envíe sólo {nombre} a esta dirección. Enviar otra moneda digital a esta dirección causará una pérdida permanente", + "f4": "Registro de llenado de monedas" + }, + "auth": { + "a0": "Autenticación de la identidad", + "a1": "Autenticación del nombre real", + "a2": "No autenticado", + "a3": "Certificado", + "a4": "Certificación avanzada", + "a5": "Auditoría en curso", + "a6": "Fallo de autenticación", + "a7": "Nacionalidad", + "a8": "Por favor, elija la nacionalidad", + "a9": "Nombre real", + "b0": "Introduzca el nombre real", + "b1": "Número de identificación", + "b2": "Por favor, introduzca el número de identificación", + "b3": "Confirmar", + "b4": "Autenticación exitosa", + "b5": "Por favor, suba la foto frontal del documento", + "b6": "Por favor, suba la parte posterior del documento", + "b7": "Por favor, suba su foto de identificación", + "b8": "Asegúrese de que la imagen es clara y sin marcas de agua y que la parte superior del cuerpo está completa.", + "b9": "El tamaño del documento es demasiado grande para exceder", + "c0": "Error de tipo de archivo", + "c1": "Subida exitosa", + "c2": "Por favor, suba la foto de atrás del documento.", + "c3": "Por favor, suba la foto frontal del documento.", + "c4": "Carga exitosa, por favor espere a ser auditada", + "c5": "fecha de nacimiento", + "c6": "tipo de certificado", + "c7": "Dirección residencial", + "c8": "Por favor ingrese su dirección residencial", + "c9": "número de teléfono", + "d0": "Por favor, introduzca su número de teléfono", + "d1": "licencia de conducir", + "d2": "pasaporte", + "d3": "tarjeta de identificación", + "d4": "Seleccione fecha", + "d5": "por favor elige" + }, + "exchange": { + "a0": "Moneda", + "a1": "Suscripción", + "a2": "Contrato", + "a3": "Comercio", + "a4": "Delegación actual", + "a5": "Delegación histórica", + "a6": "Añadir con éxito", + "a7": "Cancelación exitosa", + "a8": "Total de emisiones", + "a9": "Cantidad total de circulación", + "b0": "Precio de emisión", + "b1": "Tiempo de emisión", + "b2": "Dirección del Libro Blanco", + "b3": "Dirección web oficial", + "b4": "Introducción", + "b5": "Comprar", + "b6": "Vender", + "b7": "Precio confiado", + "b8": "Tipo", + "b9": "Comercio limitado", + "c0": "Comercio de mercado", + "c1": "Trato hecho", + "c2": "Total", + "c3": "Comprar", + "c4": "Vender", + "c5": "Cantidad", + "c6": "Negociar a los mejores precios de mercado", + "c7": "Precio total", + "c8": "Cantidad disponible", + "c9": "Valor total", + "d0": "Iniciar sesión", + "d1": "Gráfico de tiempo compartido", + "d2": "Precio", + "d3": "Última transacción", + "d4": "Tiempo", + "d5": "Dirección", + "d6": "Límite de precios", + "d7": "Precio de mercado", + "d8": "Por favor, introduzca el precio", + "d9": "Por favor, introduzca la cantidad", + "e0": "Por favor, introduzca el precio total", + "e1": "Pedido exitoso", + "e2": "Precio medio", + "e3": "Máximo", + "e4": "Mínimo", + "e5": "Cantidad", + "e6": "Oferta", + "e7": "Información monetaria", + "e8": "Minutos", + "e9": "Horas", + "f0": "Días", + "f1": "Semana", + "f2": "Mes", + "f3": "Precio de compra", + "f4": "Precio de venta", + "f5": "Transacciones monetarias", + "f6": "Introduzca la palabra clave de búsqueda", + "f7": "Par de transacciones", + "f8": "El último precio", + "f9": "Rango de fluctuación", + "g0": "Auto - Elección", + "g1": "Mi Comisión", + "g2": "Revocación de la delegación", + "g3": "Operaciones", + "g4": "Revocación", + "g5": "Revocar el delegado actual", + "g6": "Revocación exitosa" + }, + "option": { + "a0": "Opciones", + "a1": "Entrega a distancia", + "a2": "Ver más", + "a3": "Ver vacío", + "a4": "Tasa de rendimiento", + "a5": "Comprar", + "a6": "Muchos", + "a7": "Vacío", + "a8": "Actual", + "a9": "Próximo período", + "b0": "Ver plano", + "b1": "Opciones de aumento", + "b2": "Tasa de rendimiento", + "b3": "Cantidad comprada", + "b4": "Por favor, introduzca la cantidad", + "b5": "Saldo", + "b6": "Ganancia y perdida", + "b7": "Comprar inmediatamente", + "b8": "Subir", + "b9": "Plano", + "c0": "Caer", + "c1": "Compra exitosa", + "c2": "Detalles", + "c3": "Número de orden", + "c4": "Precio de apertura", + "c5": "Precio de cierre", + "c6": "Tiempo de compra", + "c7": "Cantidad comprada", + "c8": "Tipo de compra", + "c9": "Estado", + "d0": "Resultados de la entrega", + "d1": "Cantidad de liquidación", + "d2": "Tiempo de entrega", + "d3": "Ver más", + "d4": "Opciones de compra", + "d5": "Esperando la entrega", + "d6": "Mi entrega", + "d7": "Registros de entrega", + "d8": "Minutos", + "d9": "Horas", + "e0": "Días", + "e1": "Semana", + "e2": "Mes", + "e3": "Dirección", + "e4": "Rango de fluctuación" + }, + "purchase": { + "a0": "Precio de emisión", + "a1": "Moneda de compra", + "a2": "Tiempo estimado en línea", + "a3": "Hora de inicio de la compra", + "a4": "Fin del tiempo de suscripción", + "a5": "Suscripción", + "a6": "Por favor, seleccione la moneda de compra", + "a7": "Cantidad comprada", + "a8": "Por favor, introduzca la cantidad de suscripción", + "a9": "Todos", + "b0": "Compra inmediata", + "b1": "Ciclo de suscripción", + "b2": "Precalentamiento del proyecto", + "b3": "Inicio de la compra", + "b4": "Cierre de la suscripción", + "b5": "Publicación de los resultados", + "b6": "Detalles del proyecto", + "b7": "Usar o no", + "b8": "Comprar", + "b9": "éxito de la compra" + }, + "reg": { + "a0": "Registro de teléfonos móviles", + "a1": "Registro de correo electrónico", + "a2": "Teléfono móvil", + "a3": "Por favor, introduzca el número de teléfono", + "a4": "Buzón de correo", + "a5": "Introduzca el número de buzón de correo", + "a6": "Código de verificación", + "a7": "Introduzca el Código de verificación", + "a8": "Contraseña", + "a9": "Introduzca la contraseña", + "b0": "Confirmar contraseña", + "b1": "Por favor, confirme la contraseña", + "b2": "Recomendador", + "b3": "Por favor, introduzca una referencia", + "b4": "Opcional", + "b5": "Usted está de acuerdo", + "b6": "Protocolo de usuario", + "b7": "Y entender nuestro", + "b8": "Protocolo de privacidad", + "b9": "Registro", + "c0": "Cuenta existente", + "c1": "Iniciar sesión ahora", + "c2": "Por favor, lea y acepte el Acuerdo", + "c3": "Por favor, rellene el número de teléfono móvil", + "c4": "Por favor, rellene el número de correo electrónico", + "c5": "Registro exitoso", + "c6": "Código de Institución (requerido)", + "c7": "Por favor complete el código de la institución", + "c8": "Regístrese ahora para comenzar su viaje hacia las criptomonedas" + }, + "safe": { + "a0": "Desenganche", + "a1": "Binding", + "a2": "Buzón de correo", + "a3": "Número de buzón", + "a4": "Introduzca el número de buzón de correo", + "a5": "Código de verificación del buzón de correo", + "a6": "Introduzca el Código de verificación", + "a7": "Código de verificación", + "a8": "Desenganche exitoso", + "a9": "Unión exitosa", + "b0": "Olvida la contraseña de inicio de sesión", + "b1": "Número de cuenta", + "b2": "Por favor, introduzca el teléfono", + "b3": "Nueva contraseña", + "b4": "Introduzca una nueva contraseña", + "b5": "Confirmar contraseña", + "b6": "Por favor, confirme la contraseña", + "b7": "Confirmar cambios", + "b8": "Introduzca el número correcto de teléfono o correo electrónico", + "b9": "Verificador de Google", + "c0": "Método de operación: descargar y abrir el verificador de Google, escanear el siguiente código QR o introducir manualmente la clave secreta para añadir el token de verificación", + "c1": "Clave de copia", + "c2": "He guardado la clave correctamente y no la recuperaré si la pierdo.", + "c3": "Siguiente paso", + "c4": "Código de verificación SMS", + "c5": "Código de verificación de Google", + "c6": "Confirmar Unión", + "c7": "Centro de Seguridad", + "c8": "Contraseña de inicio de sesión", + "c9": "Modificar", + "d0": "Configuración", + "d1": "Contraseña de transacción", + "d2": "Teléfono móvil", + "d3": "Modificación exitosa", + "d4": "Número de teléfono móvil", + "d5": "Por favor, introduzca el número de teléfono", + "d6": "Introduzca el Código de verificación SMS", + "d7": "Cerrar", + "d8": "Abrir", + "d9": "Verificación", + "e0": "SMS", + "e1": "Cierre exitoso", + "e2": "Apertura exitosa", + "e3": "Confirmar", + "e4": "Configuración exitosa", + "Remembered": "¿Recordaste tu contraseña?", + "e5": "Recuperar contraseña" + }, + "transfer": { + "a0": "Registro de transferencias", + "a1": "éxito", + "a2": "Cantidad", + "a3": "Dirección", + "a4": "Activos de la cuenta", + "a5": "Cuentas contractuales", + "a6": "Cuenta apalancada", + "a7": "Cuenta financiera", + "a8": "Remar", + "a9": "De", + "b0": "A", + "b1": "moneda de transferencia", + "b2": "Saldo", + "b3": "Todos", + "b4": "Tachado" + }, + "notice": { + "a0": "Detalles", + "a1": "Notificación de mensajes", + "a2": "Proclamación", + "a3": "Mensaje" + }, + "invite": { + "a0": "Honra a tu amigo con la invitación de la criada.", + "a1": "Partner", + "a2": "Reembolso de transacciones privilegiadas", + "a3": "Usuarios ordinarios", + "a4": "Mi identidad", + "a5": "Respeto de la identidad", + "a6": "Mi Código de invitación", + "a7": "Copiar Código QR invitado", + "a8": "Copiar enlace de invitación", + "a9": "Mi promoción", + "b0": "Número total de promotores", + "b1": "Persona", + "b2": "Conversión de los ingresos totales", + "b3": "Registro de extensión", + "b4": "Invitación directa", + "b5": "Registro de devolución", + "b6": "Grado", + "b7": "Configuración del nivel", + "b8": "Condiciones de ascenso", + "b9": "Participación en dividendos", + "c0": "Apodo", + "c1": "Número de promotores", + "c2": "Conversión de ingresos", + "c3": "Registro de invitaciones", + "c4": "Registro de devolución", + "c5": "Descripción de los derechos jerárquicos", + "c6": "Grado", + "c7": "Derechos e intereses", + "c8": "Descripción", + "c9": "Mis derechos" + }, + "help": { + "a0": "Detalles", + "a1": "College", + "a2": "Clasificación" + }, + "login": { + "a0": "email", + "a1": "Por favor ingrese su email", + "a2": "Contraseña", + "a3": "Introduzca la contraseña", + "a4": "Iniciar sesión", + "a5": "Olvida la contraseña.", + "a6": "Sin número de cuenta", + "a7": "Regístrese ahora", + "a8": "Teléfono móvil", + "a9": "Buzón de correo", + "b0": "Complete", + "b1": "Iniciar sesión en cuenta", + "b2": "Inicie sesión ahora para comenzar su viaje hacia las criptomonedas", + "b3": "Correo electrónico", + "b4": "Por favor ingresa tu correo electrónico" + }, + "contract": { + "a0": "Apertura", + "a1": "posición", + "a2": "Delegación", + "a3": "Historia", + "a4": "Transacciones contractuales", + "a5": "Apertura exitosa", + "a6": "Tipo de transacción", + "a7": "Trato hecho", + "a8": "Total confiado", + "a9": "Precio medio de transacción", + "b0": "Precio confiado", + "b1": "Margen", + "b2": "Gastos de tramitación", + "b3": "Estado", + "b4": "Operaciones", + "b5": "Retirada", + "b6": "Revocado", + "b7": "No cerrar", + "b8": "Trato parcial", + "b9": "Trato completo", + "c0": "Kaiduo", + "c1": "Plano", + "c2": "Abrir espacio", + "c3": "Pindo", + "c4": "Consejos cálidos", + "c5": "Cancelar el pedido actual", + "c6": "Revocación exitosa", + "c7": "Ganancias y pérdidas", + "c8": "Compartir", + "c9": "Detalles de la delegación", + "d0": "Datos no disponibles", + "d1": "Precio", + "d2": "Cantidad", + "d3": "Tiempo de transacción", + "d4": "Derechos de los usuarios", + "d5": "Ganancias y pérdidas no realizadas", + "d6": "Tasa de riesgo", + "d7": "Precio de mercado", + "d8": "USDT", + "d9": "Depósito de ocupación", + "e0": "Alcista", + "e1": "Apertura múltiple", + "e2": "Bajista", + "e3": "Vacío abierto", + "e4": "Disponible", + "e5": "Remar", + "e6": "Tasa de fondos", + "e7": "Liquidación a distancia", + "e8": "Muchos", + "e9": "precio de apertura", + "f0": "Transferencia de fondos", + "f1": "Calculadora", + "f2": "Sobre el contrato", + "f3": "Fondo de garantía de riesgos", + "f4": "Historial de gastos de capital", + "f5": "Delegación ordinaria", + "f6": "Comisión de mercado", + "f7": "Con o sin", + "f8": "Precio", + "f9": "Doble palanca", + "g0": "Kaiduo", + "g1": "Abrir espacio", + "g2": "Delegación exitosa", + "g3": "Mostrar sólo el contrato actual", + "g4": "Keping", + "g5": "Delegación", + "g6": "precio medio de apertura", + "g7": "Precio de referencia de la liquidación", + "g8": "Estimación de las fuertes paridades", + "g9": "Ingresos liquidados", + "h0": "tasa de retorno", + "h1": "Detener la ganancia", + "h2": "Stop loss", + "h3": "cerrar la posición", + "h4": "Precio de mercado plano", + "h5": "Kar Al ve Zararı Durdur", + "h6": "Plano", + "h7": "Por favor, introduzca el precio de cierre", + "h8": "Límite de precios", + "h9": "Introduzca la cantidad de cierre", + "i0": "Keping", + "i1": "Precio medio de apertura", + "i2": "El último precio de transacción", + "i3": "Por favor, introduzca el precio", + "i4": "Tomar ganancias", + "i5": "Precio de mercado a", + "i6": "Se activará el mandato de detener las ganancias y se espera que las ganancias y pérdidas se produzcan después de la transacción.", + "i7": "detener la pérdida de", + "i8": "La Comisión de STOP - loss se activará en el momento de la transacción, y se espera que las ganancias y pérdidas se produzcan después de la transacción.", + "i9": "Determinar", + "j0": "Cierre exitoso", + "j1": "Si el precio de mercado es plano", + "j2": "Todo plano", + "j3": "éxito", + "j4": "Configuración exitosa", + "j5": "Ingeniosa e incomparable", + "j6": "Hacer", + "j7": "Precio de cierre", + "j8": "Plataforma de negociación de activos digitales", + "j9": "Cuando {name 1} se encuentra con el camino ardiente de {name 2} {name 3}.", + "k0": "Precio de apertura", + "k1": "El último precio", + "k2": "Leer más", + "k3": "Liquidación de pérdidas y ganancias", + "k4": "Captura de pantalla exitosa, guardada localmente", + "k5": "Falló la captura de pantalla", + "k6": "Captura de pantalla de prensa larga", + "k7": "Plano de un botón", + "k8": "Reversión de un botón", + "k9": "Si un botón es plano", + "l0": "éxito total", + "l1": "Si un botón se invierte", + "l2": "éxito inverso", + "l3": "Plano", + "l4": "Pindo" + }, + "otc": { + "a0": "Anunciar", + "a1": "Orden", + "a2": "Moneda de transacción", + "a3": "Mi orden", + "a4": "Mi anuncio", + "a5": "Comprar", + "a6": "Vender", + "a7": "Total", + "a8": "Remanente", + "a9": "Límite", + "b0": "Precio unitario", + "b1": "Método de pago", + "b2": "Operaciones", + "b3": "Total", + "b4": "Por favor, seleccione el método de pago", + "b5": "Por favor, introduzca la cantidad", + "b6": "Ordenar", + "b7": "Alipay", + "b8": "Wechat", + "b9": "Tarjeta bancaria", + "c0": "Pedido exitoso", + "c1": "Estado", + "c2": "Número de anuncio", + "c3": "Precio total", + "c4": "Cantidad", + "c5": "Tiempo de publicación", + "c6": "Marco inferior", + "c7": "Revocado", + "c8": "En el comercio", + "c9": "Completado", + "d0": "Consejos cálidos", + "d1": "Anuncios actuales fuera del estante", + "d2": "Determinar", + "d3": "Cancelar", + "d4": "Revocación exitosa", + "d5": "Cuenta en moneda francesa", + "d6": "Congelación", + "d7": "Alipay Account", + "d8": "Por favor, introduzca el número de cuenta", + "d9": "Nombre", + "e0": "Por favor, introduzca un nombre", + "e1": "Código de pago", + "e2": "Binding", + "e3": "Cuenta Wechat", + "e4": "Nombre del Banco", + "e5": "Introduzca el nombre del Banco", + "e6": "Subdivisión de apertura de cuentas", + "e7": "Por favor, introduzca la sucursal de apertura de cuentas", + "e8": "Número de tarjeta bancaria", + "e9": "Introduzca el número de tarjeta bancaria", + "f0": "Edición exitosa", + "f1": "Añadir con éxito", + "f2": "Vender", + "f3": "Comprar", + "f4": "Detalles del pedido", + "f5": "Número de orden", + "f6": "Número de cuenta", + "f7": "Banco depositario", + "f8": "Tiempo restante", + "f9": "Puntos", + "g0": "Segundos", + "g1": "Cargar documentos de pago", + "g2": "Confirmación del pago", + "g3": "Cancelar orden", + "g4": "Acuse de recibo", + "g5": "Cuentas pendientes", + "g6": "Cancelar el pedido actual", + "g7": "Orden cancelada", + "g8": "Confirmar el pago actual", + "g9": "Operación exitosa", + "h0": "Los activos de venta se transferirán automáticamente después de la confirmación de la recogida", + "h1": "Una vez confirmada la falta de pago, la orden entrará automáticamente en la reclamación", + "h2": "Orden de venta", + "h3": "Orden de compra", + "h4": "Orden de compra publicitaria", + "h5": "Orden de venta publicitaria", + "h6": "Tiempo", + "h7": "Detalles", + "h8": "Todos", + "h9": "Cerrado", + "i0": "Pendiente de pago", + "i1": "Por confirmar", + "i2": "En apelación", + "i3": "Tipos de anuncios", + "i4": "Por favor, seleccione el tipo de transacción", + "i5": "Por favor, seleccione la moneda de transacción", + "i6": "Precio", + "i7": "Por favor, introduzca el precio", + "i8": "Precio más bajo", + "i9": "Por favor, introduzca el precio más bajo", + "j0": "Precio máximo", + "j1": "Por favor, introduzca el precio más alto", + "j2": "Observaciones", + "j3": "Por favor, introduzca comentarios", + "j4": "Publicación", + "j5": "Publicado con éxito", + "j6": "Método de recogida", + "j7": "Cantidad mínima", + "j8": "Cantidad máxima", + "j9": "Introduzca el volumen mínimo de negociación", + "k0": "Introduzca el volumen máximo de negociación" + }, + "first": { + "a0": "Ir al nombre real", + "a1": "Sobre nosotros", + "a2": "¡Bienvenido!", + "a3": "Configuración de la parada de interferencia", + "a4": "Comerciar a los últimos precios", + "a5": "Posición mantenida", + "a6": "Gestión de pedidos", + "a7": "Todos los delegados", + "a8": "Historia", + "a9": "Múltiplo", + "b0": "¿Estás seguro de que quieres desconectarte?", + "b1": "Iniciar sesión o registrarse", + "b2": "Hola, bienvenido a Moabcoin.", + "b3": "Cantidad", + "b4": "Índice al contado", + "b5": "Índice de contratos", + "b6": "Soporte para múltiples compras", + "b7": "Compra rápida de monedas", + "b8": "Perpetuidad", + "b9": "La zona actual no está abierta", + "c0": "Comprar", + "c1": "Vender", + "c2": "Tiempo", + "c3": "Precio total", + "c4": "Cantidad", + "c5": "Último precio", + "c6": "Bienes gravados", + "c7": "Volumen de Negocios" + }, + "recharge": { + "a0": "Cambiar moneda", + "a1": "Cambio de dirección sólo se puede recibir", + "a2": "Si se recargan otras monedas, no se recuperarán los activos.", + "a3": "Se recomienda el uso de erc20 para la recolección", + "a4": "Copiar dirección", + "a5": "Por favor, asegúrese de que la dirección y la información son correctas antes de la transferencia.¡Una vez fuera, irrevocable!", + "a6": "Por favor, reconstruir" + }, + "currency": { + "a0": "Transacciones en moneda francesa", + "a1": "Quiero comprar", + "a2": "Quiero vender", + "a3": "Un botón para comprar dinero", + "a4": "Un botón para vender dinero", + "a5": "Comprar por cantidad", + "a6": "Comprar por cantidad", + "a55": "Vender por quantidade", + "a66": "vender por quantidade", + "a7": "Por favor, introduzca la cantidad de compra", + "a8": "Introduzca la cantidad de compra", + "a9": "Por favor, introduzca la cantidad vendida", + "b0": "Por favor, introduzca el importe de la venta", + "b1": "Precio unitario", + "b2": "0 cargo de compra", + "b3": "0 gastos de venta", + "b4": "Saldo disponible insuficiente", + "b5": "Por favor complete la autenticación avanzada primero", + "b6": "Descertificación", + "b7": "Confirmar la compra", + "b8": "Confirmación de la venta" + }, + "shou": { + "a0": "Recargar la cuenta", + "a1": "Agregue fondos de criptomonedas a su billetera", + "a2": "Y comience a operar de inmediato", + "a3": "Recarga ahora", + "a4": "Plataforma global de comercio de activos digitales", + "a5": "Facilitar las transacciones de activos encriptados", + "a6": "Regístrate ahora", + "a7": "Mercado Express de Activos Digitales", + "a8": "Tendencia del mercado", + "a9": "Moneda", + "a10": "Precio más reciente (USD)", + "a11": "aumento de 24h", + "a12": "Volumen de transacciones de 24 horas", + "a13": "Los 10 mejores", + "a14": "5 millones+", + "a15": "<0.10%", + "a16": "200+", + "a17": "Clasificación mundial", + "a18": "los usuarios confían en nosotros", + "a19": "Tarifas ultrabajas", + "a20": "Países", + "a21": "Soporte multiterminal", + "a22": "Comercio con activos digitales en cualquier momento y en cualquier lugar", + "a23": "Admite una amplia gama de tipos de activos, con toda la información de moneda", + "a24": "Tienda de aplicaciones", + "a25": "Android APK", + "a26": "Escanear código para descargar la APLICACIÓN", + "a27": "iOS y Android", + "a28": "¿Por qué elegir xuscoin.com?", + "a29": "Esforzarse por proporcionar servicios de comercio de activos digitales para múltiples países", + "a30": "Intercambio simple y conveniente de activos encriptados", + "a31": "El producto es fácil de entender, el proceso de transacción es conveniente y la plataforma de servicio de activos de blockchain de ventanilla única", + "a32": "Según la experiencia del usuario, proporcione una experiencia de servicio de encriptación agradable", + "a33": "Serviendo a regiones multilingües globales, convirtiéndose en una puerta de entrada para que todos los usuarios ingresen al mundo encriptado", + "a34": "Seguridad y estabilidad con cero accidentes", + "a35": "Garantías múltiples de estrategia de seguridad, garantía del 100% del fondo de reserva, no se han producido incidentes de seguridad desde su establecimiento", + "a36": "Tarifa de tarifa de transacción óptima", + "a37": "Tarifas de transacción preferenciales, derechos VIP competitivos, disfrute de un servicio de la más alta calidad", + "a38": "Guía para principiantes", + "a39": "Comprenda rápidamente el proceso de transacción de activos digitales", + "a40": "obtener ingresos inmediatamente", + "a41": "Haz clic para ir", + "a42": "Plataforma de negociación de criptomonedas XUScoin: diseñada para todos", + "a43": "Comience el viaje de encriptación" + }, + "homeNewText": { + "aa3": "Regístrese ahora y comience su viaje hacia las criptomonedas", + "aa4": "Comience a operar inmediatamente", + "aa7": "Moneda", + "aa8": "Iniciar sesión/Registrarse", + "bb1": "Último precio (USD)", + "bb2": "aumento de 24h", + + "bb4": "El futuro del dinero está aquí", + "bb5": "Somos el lugar más confiable para que los inversores compren, vendan y administren criptomonedas", + "bb6": "Regístrese por correo electrónico", + "bb7": "Captura fácil", + "bb8": "Oportunidad comercial", + "bb9": "Cómodo para usar criptomonedas", + "bb10": "Herramientas", + "bb11": "Trabajamos periódicamente para actualizar las funciones existentes e implementar nuevas funciones de servicio.", + "bb12": "Procesamiento de cifrado comercial", + "bb13": "Proporciona una forma confiable de aceptar cómodamente pagos de las criptomonedas más populares en todo el mundo.", + "bb14": "Intercambio ilimitado de criptomonedas", + "bb15": "Intercambia Bitcoin, Tether, Litecoin, Ethereum y más de 50 monedas más de forma fácil y segura.", + "bb16": "Optimizar la experiencia del usuario", + "bb17": "Optimiza la experiencia del usuario: lanza nuevos productos de alta calidad, simplifica las operaciones y mejora la facilidad de uso.", + "bb18": "Depósito y retiro flash", + "bb19": "Nuestros socios", + "bb20": "En todo el mundo", + "bb21": "Nuestros socios son líderes del mercado y nos ayudan a ofrecer las mejores soluciones de criptomonedas.", + "bb22": "Guía para principiantes", + "bb23": "Crear una cuenta {nombre}", + "bb24": "¡Regístrese ahora y comience su viaje comercial!", + "bb25": "Registrarse", + "bb26": "Depósito", + "bb27": "¡Recarga rápida y depósito fácil!", + "bb28": "Recargar", + "bb29": "Comenzar a operar", + "bb30": "¡Empiece a operar y disfrute de posibilidades ilimitadas!", + "bb31": "Transacción moneda a moneda", + "bb32": "Abre transacciones en cualquier momento y en cualquier lugar", + "bb33": "Escanear para descargar", + "bb34": "¡Comienza tu viaje criptográfico ahora!", + "bb35": "Solo toma 10 segundos registrarse y comenzar a operar", + "bb36": "Registro gratuito", + "bb37": "Los depósitos y retiros se pueden completar en 3 minutos como máximo.", + "bb38": "Regístrese ahora", + "bb39": "Negociar ahora", + "bb40": "{name}, opera en cualquier momento y en cualquier lugar", + "bb41": "Escanea el código QR para descargar la APLICACIÓN {name}", + "bb42": "Escanea el código QR para descargar la APP" + } +} \ No newline at end of file diff --git a/i18n/lang/swe.json b/i18n/lang/swe.json new file mode 100644 index 0000000..b47ed9c --- /dev/null +++ b/i18n/lang/swe.json @@ -0,0 +1,787 @@ +{ + "common": { + "D":"dag", + "M":"månad", + "Y":"år", + "add":"Lägg till", + "address":"adress", + "all":"Alla", + "amout":"nummer", + "cancel":"Avbryt", + "check":"att undersöka", + "code":"Kontrollkod", + "confirm":"bestämma", + "date":"datum", + "detail":"Uppgifter", + "email":"brevlåda", + "enter":"Mata in", + "error":"misslyckas", + "getCode":"Hämta verifieringskod", + "h":"Tid", + "loadMore":"Ladda mer", + "m":"filial", + "money":"summa pengar", + "more":"mer", + "notData":"Inga data tillgängliga", + "notMore":"Inte mer.", + "phone":"mobil telefon", + "requestError":"Nätverket är upptaget. Försök igen senare.", + "s":"andra", + "save":"Bevarande", + "select":"Välj", + "sendSuccess":"Skickat med lyckat resultat", + "sms":"kort meddelande", + "submit":"Skicka", + "success":"framgång", + "tips":"påminnelse", + "total":"Totalt", + "type":"Typ", + "copy":"kopia", + "light":"vitt", + "dark":"svart", + "service":"kundtjänst (kundtjänst)", + "toDwon":"Vill du gå till nerladdningssidan", + "a0":"Var vänlig och skriv in köpkoden", + "a1":"Kopiering lyckades", + "a2":"Kopiering misslyckades", + "a3":"Lager om inköp", + "a4":"Betalningsbelopp", + "a5":"Mottagen kvantitet", + "a6":"Kontots nummer", + "a7":"Kvantitet för påfyllning", + "a8":"Betalningsintyg", + "a9":"Ange laddningskapacitet", + "b0":"Vänligen ladda upp betalningskupongen", + "b1": "Inköp{amount}Delar{name}Tillgänglig symbol{rate}%Belöning", + "b2":"Verksamhet med prenumeration", + "b3":"Sparad med lyckat resultat", + "b4":"Spara misslyckades", + "b5":"Skapa inbjudan Poste", + "b6":"Välj Poste", + "b8":"Öppnings- tid", + "b9":"Avslutande tid", + "c0":"Minsta laddningsbelopp: {num}. Återladdning som understiger minimibeloppet kommer inte att postas och kan inte returneras", + "c1":"Minsta återköpsbelopp", + "c2":"Versionsnummer", + "c3":"Öppen", + "c4":"Beräknad marginal", + "c5": "Din överföringsorder har lämnats in med lyckat resultat, vänta tålmodigt, och överföringsresultatet kommer att anmälas med SMS eller e-post. Kontrollera det noga. Om du har några frågor, kontakta kundtjänsten i tid." + }, + "base": { + "a0":"Titel", + "a1":"retur", + "a2":"mer", + "a3":"notering", + "a4":"alternativ", + "a5":"Ny zon", + "a6":"medlem", + "a7":"college", + "a8":"Deal för", + "a9":"Senaste pris", + "b0":"Upp och ner", + "b1":"Klicka på inloggning", + "b2":"Välkommen till", + "b3":"Vänligen logga in", + "b4":"uppgradering", + "b5":"Ladda pengar", + "b6":"Dra tillbaka pengar", + "b7":"Förlängning", + "b8":"Avdrag av serviceavgift", + "b9":"tillgängligt", + "c0":"Inköp", + "c1":"Min provision", + "c2":"Identifiering av identitet", + "c3":"Säkerhetscentralen@ info: whatsthis", + "c4":"Meddelande meddelande", + "c5":"Adressen till återkallandet", + "c6":"Upprättad", + "c7":"Valfri", + "c8":"Bifogat med lyckat resultat", + "c9":"Avbryt med lyckat resultat", + "d0":"Hemsida@ info: whatsthis", + "d1":"transaktion", + "d2":"tillgångar", + "d3":"Ange söknyckelord", + "d4":"hela", + "d5":"en huvudbräda", + "d6":"Motsvarande tillgångar totalt", + "d7":"Eget kapital", + "d8":"Överföring", + "d9":"Valuta för sökning", + "e0":"gömma", + "e1":"Balanstillgångar", + "e2":"fryst", + "e3":"Likvärdig", + "e4":"Kontraktskonto", + "e5":"Omräkning av kontrakt", + "e6":"Klassificering av mineraler", + "e7":"gruvarbetare" + }, + "accountSettings": { + "a0":"Inställningar av konto", + "a1":"porträtt av huvudet", + "a2":"Smeknamn?", + "a3":"Huvudkontots nummer", + "a4":"Mobilnummer", + "a5":"Åtskillnad", + "a6":"bindemedel", + "a7":"Bindning till brevlådan", + "a8":"Byta konton", + "a9":"Logga ut", + "b0":"Ändra smeknamn", + "b1":"Ange ett smeknamn", + "b2":"språk" + }, + "assets": { + "a0":"Hantering av återtagandeadress", + "a1":"Adressboken kan användas för att hantera dina gemensamma adresser, och det finns inget behov av att utföra flera kontroller när pengar dras tillbaka från adresserna i adressboken.", + "a2":"Automatiskt penninguttag stöds. När {namn} används, tillåts bara adresser i adressboken att initiera valutauttag", + "a3":"Ta bort adress", + "a4":"Lägg till adress", + "a5":"Välj adressen att ta bort", + "a6":"Ta bort adressen som för närvarande är markerad", + "a7":"rinnande vatten", + "a8":"Totalt", + "a9":"tillgängligt", + "b0":"fryst", + "b1":"Eget kapital", + "b2":"Kontraktskonto", + "b3":"Konto för hävstång", + "b4":"Finansiell redovisning", + "b5":"Ange söknyckelord", + "b6":"Dra tillbaka pengar", + "b7":"Välj kedjetyp", + "b8":"Adressen till återkallandet", + "b9":"Skriv in adressen", + "c0":"nummer", + "c1":"balans", + "c2":"Ange mängd", + "c3":"hela", + "c4":"Laddning av tjänst", + "c5":"Kontrollera noggrant och skriv in rätt adress för plånboken", + "c6":"Att skicka icke avstämd digital valuta till plånboksadressen kommer att orsaka permanent förlust", + "c7":"Avgiften för hantering dras av från det belopp som dragits tillbaka", + "c8":"Registrering om återkallelse", + "c9":"tid", + "d0":"tillstånd", + "d1":"Under översyn", + "d2":"framgång", + "d3":"misslyckas", + "d4":"Se mer", + "d5":"Inlämnat med lyckat resultat, under översyn", + "d6":"redigera", + "d7":"Lägg till", + "d8":"adress", + "d9":"Skriv in eller klistra in adressen", + "e0":"Anmärkningar", + "e1":"Skriv in dina kommentarer", + "e2":"Fyll i adressen", + "e3":"Fyll i anmärkningarna", + "e4":"Operation lyckades", + "e5":"Ladda pengar", + "e6":"Skanna QR- koden ovan för att få laddningsadress", + "e7":"Charging- adress", + "e8":"Antal laddade mynt", + "e9":"Ange beloppet för den debiterade valutan", + "f0":"Den här adressen är din senaste uppladdningsadress. När systemet tar emot uppladdningen, registreras den automatiskt.", + "f1":"Överföringen måste bekräftas av hela blockeringsnätet. När du kommer till {num} nätverksbekräftelse, läggs ditt {namn} automatiskt ner på kontot.", + "f2":"När ett nätverk är bekräftat", + "f3":"Skicka bara {namn} till den här adressen. Att skicka annan digital valuta till den här adressen orsakar permanent förlust", + "f4":"Registrering av avgifter" + }, + "auth": { + "a0":"Identifiering av identitet", + "a1":"autentisering av verkligt namn", + "a2":"Ej certifierat", + "a3":"Certifierad", + "a4":"Avancerad certifiering", + "a5":"Under översyn", + "a6":"Behörighetskontroll misslyckades", + "a7":"Medborgarskap", + "a8":"Välj din nationalitet", + "a9":"Verkligt namn", + "b0":"Ange ditt riktiga namn", + "b1":"Identifieringsnummer@ info: whatsthis", + "b2":"Ange identifikationsnummer", + "b3":"Bekräfta", + "b4":"Certifiering lyckades", + "b5":"Var snäll och ladda upp det främre fotot på ditt ID-kort", + "b6":"Vänligen ladda upp baksidan av certifikatet", + "b7":"Var snäll och ladda upp ditt handhållna ID-foto", + "b8":"Se till att bilden är klar utan vattenstämpel och att överkroppen är intakt.", + "b9":"Filstorleken är för stor och kan inte överstiga", + "c0":"Fel i filtyp", + "c1":"Uppladdning lyckades", + "c2":"Vänligen ladda upp fotot på baksidan av certifikatet", + "c3":"Var snäll och ladda upp det främre fotot på ditt ID-kort", + "c4":"Uppladdning lyckades, vänta på revisionen" + }, + "exchange": { + "a0":"Mynt", + "a1":"Ansökan om köp", + "a2":"kontrakt", + "a3":"transaktion", + "a4":"Nuvarande delegering", + "a5":"Historisk kommission", + "a6":"Bifogat med lyckat resultat", + "a7":"Avbryt med lyckat resultat", + "a8":"Total emission", + "a9":"Total omsättning", + "b0":"Utfärdandepris", + "b1":"Tidpunkt för utfärdande", + "b2":"Adressen till vitpapper", + "b3":"Officiell webbplats", + "b4":"kort inledning", + "b5":"köpa", + "b6":"Sälj", + "b7":"Kommissionens pris", + "b8":"Typ", + "b9":"Handel med prisbegränsningar", + "c0":"Transaktioner på marknaden", + "c1":"Avslutat", + "c2":"Totalt", + "c3":"Inköp", + "c4":"Sälj ut", + "c5":"nummer", + "c6":"Nära till bästa marknadspris", + "c7":"Totalt pris", + "c8":"Tillgänglig kvantitet", + "c9":"bruttovärde", + "d0":"Skriv in dig", + "d1":"Tidsdelningsplan", + "d2":"Pris", + "d3":"Senaste affär", + "d4":"tid", + "d5":"riktning", + "d6":"fast pris", + "d7":"marknadspris (marknadspris)", + "d8":"Skriv in priset.", + "d9":"Ange mängd", + "e0":"Ange det totala priset", + "e1":"Kontroll av framgång", + "e2":"Genomsnittligt pris", + "e3":"högst", + "e4":"Lägst", + "e5":"belopp", + "e6":"Ordning", + "e7":"Information om valuta", + "e8":"minut", + "e9":"timme", + "f0":"dag", + "f1":"vecka", + "f2":"månad", + "f3":"Inköpspris", + "f4":"Försäljningspris (försäljningspris)", + "f5":"Valutatransaktion", + "f6":"Ange söknyckelord", + "f7":"Deal för", + "f8":"Senaste pris", + "f9":"Upp och ner", + "g0":"Valfri", + "g1":"Min provision", + "g2":"Återkallelse av tilldelning", + "g3":"Drift", + "g4":"återkalla", + "g5":"Avbryt nuvarande delegering", + "g6":"Lyckligt inställd" + }, + "option": { + "a0":"alternativ", + "a1":"Leverans från avstånd", + "a2":"Se mer", + "a3":"vara björn", + "a4":"Räntesats i", + "a5":"Inköp", + "a6":"många", + "a7":"tomt", + "a8":"aktuell", + "a9":"Nästa nummer", + "b0":"Se platt", + "b1":"Val av prisökning", + "b2":"Räntesats i", + "b3":"Inköpskvantitet", + "b4":"Ange mängd", + "b5":"balans", + "b6":"Förväntade inkomster", + "b7":"Köp nu", + "b8":"uppgång", + "b9":"platt", + "c0":"Fall", + "c1":"Framgångsrik köp", + "c2":"Uppgifter", + "c3":"ordningsnummer@ info: whatsthis", + "c4":"Inledande pris", + "c5":"Slutligt pris", + "c6":"Tid för köp", + "c7":"Inköpskvantitet", + "c8":"Typ av köp", + "c9":"tillstånd", + "d0":"Avslutande resultat", + "d1":"Kvantitet av avräkning", + "d2":"Leverans tid", + "d3":"Se mer", + "d4":"Köp option", + "d5":"Väntar på leverans", + "d6":"Min leverans.", + "d7":"Rapport om leverans", + "d8":"minut", + "d9":"timme", + "e0":"dag", + "e1":"vecka", + "e2":"månad", + "e3":"riktning", + "e4":"Upp och ner" + }, + "purchase": { + "a0":"Utfärdandepris", + "a1":"Valuta för prenumeration", + "a2":"Förväntad online-tid", + "a3":"Starttid för prenumeration", + "a4":"Avslutande tid", + "a5":"Ansökan om köp", + "a6":"Välj abonnentvaluta@ info: whatsthis", + "a7":"Inköpskvantitet", + "a8":"Ange mängden", + "a9":"hela", + "b0":"Verkställ omedelbart", + "b1":"cykel för prenumeration", + "b2":"Projekt uppvärmning", + "b3":"Starta abonnemang", + "b4":"Stäng abonnemang", + "b5":"Publicera resultat", + "b6":"Uppgifter om projektet", + "b7":"Används eller ej", + "b8":"Inköp", + "b9":"Framgångsrik köp" + }, + "reg": { + "a0":"Mobil registrering", + "a1":"E- postregistrering", + "a2":"mobil telefon", + "a3":"Mata in mobilnummer", + "a4":"brevlåda", + "a5":"Ange ditt e- postnummer", + "a6":"Kontrollkod", + "a7":"Ange kontrollkoden, tack.", + "a8":"lösenord", + "a9":"Ange ett lösenord", + "b0":"Bekräfta lösenord", + "b1":"Bekräfta lösenordet, tack.", + "b2":"Referenser", + "b3":"Ange den rekommenderade", + "b4":"Valfri", + "b5":"Du har gått med på", + "b6":"Användaravtal", + "b7":"Och lära sig om oss", + "b8":"Avtal om integritet", + "b9":"register", + "c0":"Befintligt kontonummer", + "c1":"Skriv in dig nu.", + "c2":"Läs och gå med på avtalet.", + "c3":"Fyll i ditt mobilnummer", + "c4":"Fyll i e- postnumret", + "c5":"inloggning lyckades" + }, + "safe": { + "a0":"Åtskillnad", + "a1":"bindemedel", + "a2":"brevlåda", + "a3":"E- post nr", + "a4":"Ange ditt e- postnummer", + "a5":"Kod för e-post-kontroll", + "a6":"Ange kontrollkoden, tack.", + "a7":"Kontrollkod", + "a8":"Avvecklingen lyckades", + "a9":"Bindningen lyckades", + "b0":"Glöm inloggninglösenord", + "b1":"Kontots nummer", + "b2":"Mata in mobiltelefon", + "b3":"Nytt lösenord", + "b4":"Ange ett nytt lösenord", + "b5":"Bekräfta lösenord", + "b6":"Bekräfta lösenordet, tack.", + "b7":"Bekräfta ändring", + "b8":"Ange rätt mobilnummer eller e- postnummer", + "b9":"Google- kontrollör", + "c0":"Hur man gör det: Ladda ner och öppna Googles kontrollör, skanna QR- koden nedan eller skriv in den hemliga nyckeln för att lägga till verifieringsdokumentet", + "c1":"Kopiera nyckel", + "c2":"Jag har behållit min nyckel och om jag förlorar den, kommer den inte att hämtas.", + "c3":"nästa steg", + "c4":"Kod för SMS-verifiering", + "c5":"Google captcha", + "c6":"Bekräfta bindning", + "c7":"Säkerhetscentralen@ info: whatsthis", + "c8":"Logga in lösenord", + "c9":"ändra", + "d0":"Upprättad", + "d1":"Transaktionskod", + "d2":"mobil telefon", + "d3":"Ändrad med lyckat resultat", + "d4":"Mobilnummer", + "d5":"Mata in mobilnummer", + "d6":"Ange SMS-verifikationskod", + "d7":"Stäng", + "d8":"öppen", + "d9":"Kontroll", + "e0":"kort meddelande", + "e1":"Stängt med lyckat resultat", + "e2":"Öppna med lyckat resultat", + "e3":"Bekräfta", + "e4":"Ställ in med lyckat resultat" + }, + "transfer": { + "a0":"Registret för överföring", + "a1":"framgång", + "a2":"nummer", + "a3":"riktning", + "a4":"Kontots tillgångar", + "a5":"Kontraktskonto", + "a6":"Konto för hävstång", + "a7":"Finansiell redovisning", + "a8":"Överföring", + "a9":"från", + "b0":"till", + "b1":"Valuta för överföring", + "b2":"balans", + "b3":"hela", + "b4":"Överförd" + }, + "notice": { + "a0":"Uppgifter", + "a1":"Meddelande meddelande", + "a2":"Meddelande", + "a3":"Nyheter" + }, + "invite": { + "a0":"Njut av rabatten och bjud vänner.", + "a1":"partner", + "a2":"Njut av rabatten", + "a3":"Vanliga användare", + "a4":"Min identitet", + "a5":"Njut av din identitet.", + "a6":"Min inbjudningskod", + "a7":"Kopiera inbjudan QR- kod", + "a8":"Kopiera inbjudan", + "a9":"Min befordran", + "b0":"Totalt antal säljfrämjande åtgärder", + "b1":"människor", + "b2":"Motsvarande totalinkomst", + "b3":"Journal för säljfrämjande åtgärder", + "b4":"Direkt inbjudan", + "b5":"Register över returnerad kommission", + "b6":"Grad", + "b7":"Fastställande av nivå", + "b8":"Villkor för befordran", + "b9":"Ränta på utdelning", + "c0":"Smeknamn?", + "c1":"Antal initiativtagare", + "c2":"Konvertering av intäkter", + "c3":"Inbjudan registrering", + "c4":"Register över returnerad kommission", + "c5":"Beskrivning av klassintressen", + "c6":"Grad", + "c7":"Rättigheter och intressen", + "c8":"förklara", + "c9":"Mina rättigheter och intressen" + }, + "help": { + "a0":"Uppgifter", + "a1":"college", + "a2":"Klassificering" + }, + "login": { + "a0":"Mobiltelefon- eller e-postnummer", + "a1":"Ange mobilnummer eller e- postnummer", + "a2":"lösenord", + "a3":"Ange ett lösenord", + "a4":"Skriv in dig", + "a5":"Glöm lösenordet.", + "a6":"Inget konto", + "a7":"Registrera nu", + "a8":"mobil telefon", + "a9":"brevlåda", + "b0":"Fullständigt" + }, + "contract": { + "a0":"öppna en Granar för att tillhandahålla lättnader", + "a1":"Position", + "a2":"anförtror", + "a3":"Historia", + "a4":"Kontraktstransaktion", + "a5":"Framgångsrik öppning", + "a6":"Typ av transaktion", + "a7":"Avslutat", + "a8":"Totalt anförtrott belopp", + "a9":"Genomsnittligt transaktionspris", + "b0":"Kommissionens pris", + "b1":"obligation", + "b2":"Laddning av tjänst", + "b3":"tillstånd", + "b4":"Drift", + "b5":"avbeställ ordern", + "b6":"återkallad", + "b7":"Obehandlad", + "b8":"Partiell transaktion", + "b9":"Alla stängda", + "c0":"Kaiduo", + "c1":"PingkongGenericName", + "c2":"Öppen luft", + "c3":"Pinto", + "c4":"påminnelse", + "c5":"Avbryt nuvarande ordning", + "c6":"Lyckligt inställd", + "c7":"Resultat och förluster", + "c8":"Andel", + "c9":"Uppgifter om tilldelning", + "d0":"Inga data tillgängliga", + "d1":"Pris", + "d2":"nummer", + "d3":"Transaktionstid", + "d4":"Användarnas rättigheter", + "d5":"Orealiserade resultat", + "d6":"Risknivå", + "d7":"marknadspris (marknadspris)", + "d8":"Zhang.", + "d9":"Yrke som deposition", + "e0":"Bullisk", + "e1":"Kan öppna mer", + "e2":"Björn", + "e3":"Kan öppnas tomt", + "e4":"tillgängligt", + "e5":"Överföring", + "e6":"Ränta på kapital", + "e7":"Avveckling på avstånd", + "e8":"många", + "e9":"tomt", + "f0":"Överföring av medel", + "f1":"Räknare", + "f2":"Om kontraktet", + "f3":"Riskskyddsfond", + "f4":"Historia för kapitalkostnader", + "f5":"Allmän tilldelning", + "f6":"Marknadens order", + "f7":"Är det baserat på", + "f8":"Priset för", + "f9":"Dubbel hävstångseffekt", + "g0":"Kaiduo", + "g1":"Öppen luft", + "g2":"Framgångsrik kommission", + "g3":"Visa bara aktuellt kontrakt", + "g4":"KeppningName", + "g5":"anförtror", + "g6":"Genomsnittligt öppningspris", + "g7":"Referenspris för avveckling", + "g8":"Beräknad stark paritet", + "g9":"Avvecklade inkomster", + "h0":"Räntesats i", + "h1":"Stoppa vinsten", + "h2":"Stoppa förlust", + "h3":"Stäng en position", + "h4":"Marknadens pris är platt", + "h5":"Stoppa vinsten och stoppa förlusten", + "h6":"platt", + "h7":"Ange slutpris för", + "h8":"fast pris", + "h9":"Ange den sista kvantiteten", + "i0":"KeppningName", + "i1":"Genomsnittligt öppningspris", + "i2":"Senaste transaktionspris", + "i3":"Skriv in priset.", + "i4":"Sluta tjäna trigger price", + "i5":"Marknadspris till", + "i6":"När transaktionen är slutförd kommer resultatet att uppskattas.", + "i7":"Stoppa förlust utlösande pris", + "i8":"Stop-förlust Kommissionen kommer att utlösas när transaktionen är slutförd och resultatet förväntas efter transaktionen", + "i9":"bestämma", + "j0":"Framgångsrik avslutning", + "j1":"Är marknadspriset jämnt", + "j2":"Helt platt", + "j3":"framgång", + "j4":"Ställ in med lyckat resultat", + "j5":"Det finns ingen match för smart beräkning", + "j6":"gör", + "j7":"nära ränta", + "j8":"Digital plattform för handel med tillgångar", + "j9":"När {name1} möter {Name2} {name3} på vägen till brinnande uppstigning", + "k0":"Inledande pris", + "k1":"Senaste pris", + "k2":"Läs kod för att lära sig mer", + "k3":"Avveckling av resultat", + "k4":"Skärmbilden har sparats lokalt", + "k5":"Skärmbild misslyckades", + "k6":"Skärmbild för långpress", + "k7":"Ett klick platt", + "k8":"Ett klick bakåt", + "k9":"Är allt platt?", + "l0":"Alla lika, framgång", + "l1":"En nyckel baklänges", + "l2":"Omvänd framgång", + "l3":"PingkongGenericName", + "l4":"Pinto" + }, + "otc": { + "a0":"Reklam", + "a1":"ordning", + "a2":"Transaktionsvaluta", + "a3":"Min order.", + "a4":"Min annons", + "a5":"Inköp", + "a6":"Sälj", + "a7":"Totalt", + "a8":"överskott", + "a9":"Gräns", + "b0":"Pris per enhet", + "b1":"Betalningsmetod", + "b2":"Drift", + "b3":"Totalt", + "b4":"Välj betalningsmetod för detta", + "b5":"Ange mängd", + "b6":"Placera en order", + "b7":"Alipay", + "b8":"WechatGenericName", + "b9":"bankkort@ info: whatsthis", + "c0":"Kontroll av framgång", + "c1":"tillstånd", + "c2":"Reklamnummer", + "c3":"Totalt pris", + "c4":"nummer", + "c5":"Tid för frisläppande", + "c6":"Från hyllan", + "c7":"återkallad", + "c8":"I handeln", + "c9":"Avslutat", + "d0":"påminnelse", + "d1":"Är den nuvarande annonsen borttagen", + "d2":"bestämma", + "d3":"Avbryt", + "d4":"Lyckligt inställd", + "d5":"Konto för laglig valuta", + "d6":"fryst", + "d7":"Kontantnummer för Alipay", + "d8":"Ange kontots nummer", + "d9":"Fullständigt namn", + "e0":"Ange ditt namn", + "e1":"Betalningskod", + "e2":"bindemedel", + "e3":"Wechat- konto", + "e4":"Bankens namn", + "e5":"Ange namn på banken", + "e6":"Filial som öppnar konto", + "e7":"Ange filialen för att öppna konto", + "e8":"Bankkortsnummer@ info: whatsthis", + "e9":"Mata in bankkortsnummer", + "f0":"Redigerad med lyckat resultat", + "f1":"Bifogat med lyckat resultat", + "f2":"Sälj ut", + "f3":"Inköp", + "f4":"Uppgifter om ordningen", + "f5":"ordningsnummer@ info: whatsthis", + "f6":"Kontots nummer", + "f7":"Banken för insättning", + "f8":"Återstående tid", + "f9":"filial", + "g0":"andra", + "g1":"Ladda upp betalningskupongen", + "g2":"bekräfta betalningen", + "g3":"annullering av order", + "g4":"Bekräfta mottagandet", + "g5":"Ej mottaget", + "g6":"Avbryt nuvarande ordning", + "g7":"Ordning avbruten", + "g8":"Bekräfta löpande betalning", + "g9":"Operation lyckades", + "h0":"Efter det att insamlingen har bekräftats kommer tillgångarna att säljas och överföras automatiskt.", + "h1":"Efter att ha bekräftat att betalningen inte har mottagits kommer beslutet automatiskt att inleda överklagandet", + "h2":"Försäljningsordning", + "h3":"Inköpsorder", + "h4":"Inköp av reklam", + "h5":"Försäljningsorder för annonsering", + "h6":"tid", + "h7":"Uppgifter", + "h8":"hela", + "h9":"Avslutat", + "i0":"Ska betalas", + "i1":"Ska bekräftas", + "i2":"I klagomål", + "i3":"Typ av reklam", + "i4":"Välj transaktionstyp", + "i5":"Välj transaktionsvaluta", + "i6":"Pris", + "i7":"Skriv in priset.", + "i8":"lägsta pris", + "i9":"Ange det lägsta priset", + "j0":"Högsta pris", + "j1":"Ange det högsta priset.", + "j2":"Anmärkningar", + "j3":"Skriv in dina kommentarer", + "j4":"frisläppande", + "j5":"Framgångsrik publicering", + "j6":"Betalningsmetod", + "j7":"Minsta kvantitet", + "j8":"Högsta kvantitet", + "j9":"Skriv in minsta transaktionsvolym", + "k0":"Ange den maximala handelsvolymen" + }, + "first":{ + "a0":"Gå till riktigt namn", + "a1":"Om oss", + "a2":"Välkomna!", + "a3":"Stoppa vinst och stoppa förlustinställning", + "a4":"Handel till aktuellt pris", + "a5":"Håll positionen", + "a6":"Hantering av order", + "a7":"Alla uppdrag", + "a8":"Historiska uppgifter", + "a9":"multipel", + "b0":"Är du säker på att du vill logga ut?", + "b1":"Skriv under eller registrera dig", + "b2":"Hej, välkommen till AMATAK", + "b3":"belopp", + "b4":"Spot index", + "b5":"Index för kontrakt", + "b6":"Stöd till flera inköpsmetoder", + "b7":"Snabbköp av pengar", + "b8":"hållbar", + "b9":"Det nuvarande området är inte öppet ännu", + "c0":"Inköp", + "c1":"Sälj ut", + "c2":"tid", + "c3":"Totalt pris", + "c4":"nummer", + "c5":"Markvärde för", + "c6":"Inlagda tillgångar", + "c7":"volym" + }, + "recharge":{ + "a0":"Byt valuta", + "a1":"*Adressändring kan bara tas emot", + "a2":"Om du laddar dina tillgångar i andra valutor, kommer du inte att kunna hämta dem!", + "a3":"Erc20 rekommenderas för insamling", + "a4":"Kopiera adress", + "a5":"Se till att adressen och informationen är korrekta före överföringen!När det väl har överförts är det oåterkalleligt!", + "a6":"Vänligen regenerera" + }, + "currency":{ + "a0":"Transaktioner i laglig valuta", + "a1":"Jag skulle vilja köpa den.", + "a2":"Jag vill sälja.", + "a3":"Köper mynt med ett klick", + "a4":"Ett klick mynt säljer", + "a5":"Inköp per kvantitet", + "a6":"Inköp per belopp", + "a55": "Försäljning per kvantitet", + "a66": "Sälj per belopp", + "a7":"Ange inköpskvantiteten i fråga", + "a8":"Skriv in inköpsbeloppet", + "a9":"Ange den kvantitet som är till salu", + "b0":"Skriv in försäljningsbeloppet", + "b1":"Pris per enhet", + "b2":"0 inköp av hanteringsavgift", + "b3":"0 Försäljning av provision", + "b4":"Otillräcklig tillgänglig balans", + "b5":"Fyll i avancerad certifiering först.", + "b6":"Verifiering av", + "b7":"Bekräfta köp", + "b8":"Bekräfta försäljning" + } +} \ No newline at end of file diff --git a/i18n/lang/tr.json b/i18n/lang/tr.json new file mode 100644 index 0000000..a449b8b --- /dev/null +++ b/i18n/lang/tr.json @@ -0,0 +1,925 @@ +{ + "common": { + "D": "Gün", + "M": "Ay", + "Y": "Yıl", + "add": "Ekle", + "address": "Adres", + "all": "Hepsi", + "amout": "Tutar", + "cancel": "İptal", + "check": "Kontrol et", + "code": "Doğrulama Kodu", + "confirm": "Onayla", + "date": "Tarih", + "detail": "Ayrıntı", + "email": "Posta Kutusu", + "enter": "Lütfen girin", + "error": "Başarısız", + "getCode": "Doğrulama Kodunu Alın", + "h": "Saat", + "loadMore": "Daha Fazla Yükle", + "m": "dakika", + "money": "Tutar", + "more": "fazla", + "notData": "Geçici olarak veri yok", + "notMore": "Artık Yok", + "phone": " telefonu", + "requestError": "Ağ meşgul, lütfen daha sonra tekrar deneyin", + "s": "ikinci", + "save": "Kaydet", + "select": "Lütfen seçin", + "sendSuccess": "Başarıyla gönder", + "sms": "SMS", + "submit": " Gönder", + "success": "Başarı", + "tips": "Önemli İpuçları", + "total": "Toplam", + "type": "Tür", + "copy": "Kopyala", + "light": "Beyaz", + "dark": "siyah", + "service": "Müşteri servisi", + "toDwon": "İndirme sayfasına gitmek ister misiniz", + "a0": "Lütfen satın kodunu girin", + "a1": "Kopyalama başarılı oldu", + "a2": "kopyalama başarısız oldu", + "a3": "Kayıtlar alın", + "a4": "Ödeme miktarı", + "a5": "Abonelik sayısı", + "a6": "hesap numarası", + "a7": "recharge quantity", + "a8": "ödeme verici", + "a9": "Lütfen yenilenme miktarını girin", + "b0": "Lütfen ödeme verici yükleyin", + "b1": "satın alın{amount}Parçalar{name}Token mevcut{rate}%Ödül", + "b2": "İmzalama etkinlikleri", + "b3": "Başarıyla kaydedildi", + "b4": "Kayıt başarısız", + "b5": "Davetiye posteri oluştur", + "b6": "Bir poster seçin", + "b8": "Açılış zamanı", + "b9": "Kapanış saati", + "c0": "Minimum yeniden yükleme tutarı: {num}, minimum tutardan daha az yükleme hesaba yansıtılmaz ve iade edilemez", + "c1": "Minimal çekilme miktarı", + "c2": "Sürüm numarası", + "c3": "açılabilir", + "c4": "tahmin edilen margin", + "c6": "Oranı artır", + "c7": "Mevcut değerleme", + "c5": "Taşıma emriniz başarıyla teslim edildi, lütfen sabırlı bekleyin ve aktarım sonuçları SMS veya e-posta tarafından bildirilecek. Lütfen dikkatli kontrol edin. Bir sorununuz varsa, lütfen müşteri hizmetine zamanında temas edin.", + "GraphicValidation": "Grafiksel doğrulama" + }, + "base": { + "a0": "Başlık", + "a1": "Geri Dön", + "a2": "Daha Fazla", + "a3": "Alıntılar", + "a4": "Seçenekler", + "a5": "Yeni yap", + "a6": "Üye", + "a7": "Kolej", + "a8": "İşlem Çifti", + "a9": "En Son Fiyat", + "b0": "Yüksel ve al", + "b1": "Giriş yapmak için tıklayın", + "b2": "Hoş Geldiniz", + "b3": "Lütfen giriş yapın", + "b4": "Yükselt", + "b5": "Şarj etmek", + "b6": "Anma", + "b7": "Promosyon", + "b8": "İşlem ücretini düşürün", + "b9": "Kullanılabilir", + "c0": "Satın Al", + "c1": "Komisyonum", + "c2": "Kimlik Doğrulama", + "c3": "Güvenlik Merkezi", + "c4": "Mesaj Bildirimi", + "c5": "Para Çekme Adresi", + "c6": "Ayarlar", + "c7": "İsteğe bağlı", + "c8": "Başarıyla eklendi", + "c9": "Başarıyla iptal edildi", + "d0": "Ana Sayfa", + "d1": "İşlem", + "d2": "Varlıklar", + "d3": "Lütfen arama anahtar kelimelerini girin", + "d4": "Tümü", + "d5": "Anakart", + "d6": "Dönüştürülen toplam varlıklar", + "d7": "Döviz Hesabı", + "d8": "Aktarım", + "d9": "Para birimi ara", + "e0": "Gizle", + "e1": "Bakiye Varlıkları", + "e2": "Dondur", + "e3": "Katlama", + "e4": "Kontrat Hesabı", + "e5": "Sözleşme dönüştürme", + "e6": "Madenci Seviyesi", + "e7": "Madenci", + "wallet": "Cüzdan", + "f0": "Şifreleme yolculuğunu başlat", + "f1": "jeton satın alın", + "f2": "Git şimdi", + "f3": "Popüler kripto para birimleri", + "f4": "nombre", + "f5": "Funciones comunes", + "f6": "Tamamlanmış birincil sertifikasyon", + "f7": "Rezerv Sertifikası", + "f8": "Fon statüsünde yüksek düzeyde şeffaflık sağlamaya ve kullanıcı varlıkları için 1:1 rezerv oranını korumaya kararlıyız.", + "f9": "bitcoin", + "g0": "ortalama getiri", + "g1": "Sonsuz olasılıklar yaratın", + "g2": "Keşfetmeye başlayın", + "g3": "satınalınabilir", + "g4": "Satılık", + "g5": "karşı taraf fiyatı", + "h1": "Bill" + }, + "accountSettings": { + "a0": "Hesap Ayarları", + "a1": "Dikey", + "a2": "Takma ad", + "a3": "Ana Hesap", + "a4": "Cep Numarası", + "a5": "Çöz", + "a6": "Bağlama", + "a7": "Posta kutusu bağlama", + "a8": "Hesabı değiştir", + "a9": "Oturumu Kapat", + "b0": "Takma Adı Değiştir", + "b1": "Lütfen bir takma ad girin", + "b2": "Dil", + "b3": "İletişim bilgileri", + "b4": "Rutin danışma", + "b5": "müşteri servisi", + "b6": "medya işbirliği", + "b7": "Herhangi bir yardıma ihtiyacınız olursa lütfen bizimle iletişime geçin" + }, + "assets": { + "a0": "Para çekme adresi yönetimi", + "a1": "Adres defteri, sık kullandığınız adresleri yönetmek için kullanılabilir. Adres defterinde bulunan adreslerden para çekme işlemi başlatırken birden fazla doğrulama yapmaya gerek yoktur", + "a2": "Otomatik para çekme destekleniyor. Para çekmek için {name} kullanılırken, yalnızca web adres defterindeki adreslerin para çekme işlemini başlatmasına izin verilir", + "a3": "Adresi Sil", + "a4": "Adres Ekle", + "a5": "Lütfen silinecek adresi seçin", + "a6": "Seçili olan adresin silinip silinmeyeceği", + "a7": "Akan Su", + "a8": "Toplam", + "a9": "Kullanılabilir", + "b0": "Dondur", + "b1": "Finansman Hesabı", + "b2": "Kontrat Hesabı", + "b3": "Teminat Hesabı", + "b4": "Varlık Yönetimi Hesabı", + "b5": "Lütfen arama anahtar kelimelerini girin", + "b6": "Geri Çekilme", + "b7": "Lütfen zincir türünü seçin", + "b8": "Para Çekme Adresi", + "b9": "Lütfen adresi girin", + "c0": "Miktar", + "c1": "Bakiye", + "c2": "Lütfen miktarı girin", + "c3": "Tümü", + "c4": "İşlem Ücreti", + "c5": "Lütfen tekrar kontrol edin ve para çekmek için doğru cüzdan adresini girin", + "c6": "M-cüzdan adresine karşılık gelmeyen dijital para biriminin gönderilmesi kalıcı kayba neden olur", + "c7": "Para çekme ücretleri, para çekme tutarından düşülecektir", + "c8": "Para Çekme Kaydı", + "c9": "Zaman", + "d0": "Durum", + "d1": "İnceleniyor", + "d2": "Başarılı", + "d3": "Başarısız", + "d4": "Daha fazlasını görün", + "d5": "Başarıyla gönderildi, inceleniyor", + "d6": "Düzenle", + "d7": "Ekle", + "d8": "Adres", + "d9": "Lütfen adresi girin veya yapıştırın", + "e0": "Açıklamalar", + "e1": "Lütfen bir not girin", + "e2": "Lütfen adresi yazınız", + "e3": "Lütfen açıklamaları doldurun", + "e4": "İşlem başarılı", + "e5": "Yeniden Şarj Et", + "e6": "Para yatırma adresini almak için yukarıdaki QR kodunu tarayın", + "e7": "bozuk para yatırma adresi", + "e8": "Yatırılan Tutar", + "e9": "Lütfen depozito tutarını girin", + "f0": "Bu adres, en son yeniden yükleme adresinizdir. Sistem yeniden yükleme aldığında, otomatik olarak hesaba aktarılacaktır", + "f1": "Transferin tüm blok zinciri ağı tarafından onaylanması gerekiyor. {num} ağ onayına ulaştığında, {name} adınız otomatik olarak hesaba yatırılacaktır", + "f2": "Bir ağ onaylandığında, sizinki", + "f3": "Lütfen bu adrese yalnızca {name} gönderin, bu adrese başka dijital para birimleri göndermek kalıcı kayba neden olur", + "f4": "Token Para Yatırma Kaydı" + }, + "auth": { + "a0": "Kimlik Doğrulama", + "a1": "Gerçek ad kimlik doğrulaması", + "a2": "Onaylanmamış", + "a3": "Kimliği Doğrulanmış", + "a4": "Gelişmiş Sertifikasyon", + "a5": "İnceleniyor", + "a6": "Kimlik doğrulama başarısız oldu", + "a7": "Milliyet", + "a8": "Lütfen uyruğu seçin", + "a9": "Gerçek ad", + "b0": "Lütfen gerçek adınızı girin", + "b1": "Sertifika Numarası", + "b2": "Lütfen kimlik numarasını girin", + "b3": "Onayla", + "b4": "Kimlik doğrulama başarılı", + "b5": "Lütfen kimliğin ön fotoğrafını yükleyin", + "b6": "Lütfen sertifikanın arkasını yükleyin", + "b7": "Lütfen elde tutulan bir kimlik fotoğrafı yükleyin", + "b8": "Fotoğrafın filigran olmadan net ve gövdenin üst kısmının sağlam olduğundan emin olun", + "b9": "Dosya boyutu çok büyük ve aşılmamalıdır", + "c0": "Dosya türü hatası", + "c1": "Başarıyla yüklendi", + "c2": "Lütfen kimliğinizin arka yüzünün bir fotoğrafını yükleyin", + "c3": "Lütfen kimliğinizin ön fotoğrafını yükleyin", + "c4": "Başarıyla yüklendi, lütfen inceleme için bekleyin", + "c5": "doğum tarihi", + "c6": "sertifika türü", + "c7": "Konut adresi", + "c8": "Lütfen ikamet adresinizi giriniz", + "c9": "telefon numarası", + "d0": "Lütfen telefon numaranızı girin", + "d1": "Ehliyet", + "d2": "pasaport", + "d3": "kimlik kartı", + "d4": "Tarih seç", + "d5": "lütfen seç" + }, + "exchange": { + "a0": "Madeni Paralar", + "a1": "Abonelik", + "a2": "Sözleşme", + "a3": "İşlem", + "a4": "Mevcut Sipariş", + "a5": "Tarihi Komisyon", + "a6": "Başarıyla eklendi", + "a7": "Başarıyla iptal edildi", + "a8": "Toplam Verilen", + "a9": "Toplam Dolaşım", + "b0": "Düzenleme Fiyatı", + "b1": "Yayın zamanı", + "b2": "Beyaz Kağıt Adresi", + "b3": "Resmi web sitesi adresi", + "b4": "Giriş", + "b5": "Satın Al", + "b6": "Sat", + "b7": "Sipariş Fiyatı", + "b8": "Tür", + "b9": "Limit Fiyat Ticareti", + "c0": "Piyasa Ticareti", + "c1": "Tamamlandı", + "c2": "Toplam", + "c3": "Satın Al", + "c4": "Sat", + "c5": "Miktar", + "c6": "En iyi piyasa fiyatından sat", + "c7": "Toplam Fiyat", + "c8": "Kullanılabilir Miktar", + "c9": "Toplam Değer", + "d0": "Giriş", + "d1": "Zaman Paylaşımı Grafiği", + "d2": "Fiyat", + "d3": "En Son İşlem", + "d4": "Zaman", + "d5": "Yön", + "d6": "Limit Fiyatı", + "d7": "Piyasa Fiyatı", + "d8": "Lütfen fiyatı girin", + "d9": "Lütfen miktarı girin", + "e0": "Lütfen toplam fiyatı girin", + "e1": "Sipariş başarıyla verildi", + "e2": "Ortalama Fiyat", + "e3": "En Yüksek", + "e4": "En Düşük", + "e5": "Tutar", + "e6": "Sırala", + "e7": "Para Birimi Bilgileri", + "e8": "Dakika", + "e9": "Saat", + "f0": "gün", + "f1": "hafta", + "f2": "Ay", + "f3": "Alış Fiyatı", + "f4": "Satış Fiyatı", + "f5": "Döviz Ticareti", + "f6": "Lütfen arama anahtar kelimelerini girin", + "f7": "İşlem Çifti", + "f8": "En Son Fiyat", + "f9": "Yüksel ve al", + "g0": "İsteğe bağlı", + "g1": "Yetkim", + "g2": "Yetkilendirmeyi iptal et", + "g3": "İşlem", + "g4": "İptal", + "g5": "Mevcut siparişin iptal edilip edilmeyeceği", + "g6": "Başarıyla geri al" + }, + "option": { + "a0": "Seçenekler", + "a1": "Mesafeli teslimat", + "a2": "Daha fazlasını görün", + "a3": "boş görün", + "a4": "Verim", + "a5": "Satın Al", + "a6": "Çoklu", + "a7": "Boş", + "a8": "Güncel", + "a9": "Sonraki Sayı", + "b0": "Ping Görme", + "b1": "Seçimi artır", + "b2": "Verim", + "b3": "Satın Alma Miktarı", + "b4": "Lütfen miktarı girin", + "b5": "Bakiye", + "b6": "Kar ve zarar", + "b7": "Şimdi Satın Alın", + "b8": "Arttır", + "b9": "Qiping", + "c0": "Güz", + "c1": "Başarılı satın alma", + "c2": "Ayrıntılar", + "c3": "Sipariş Numarası", + "c4": "Açılış Fiyatı", + "c5": "Kapanış Fiyatı", + "c6": "Satın Alma Süresi", + "c7": "Satın Alma Miktarı", + "c8": "Satın Alma Türü", + "c9": "Durum", + "d0": "Teslimat Sonucu", + "d1": "Yerleşim Miktarı", + "d2": "Teslim Süresi", + "d3": "Daha fazlasını görüntüle", + "d4": "Satın Alma Seçeneği", + "d5": "Teslimat bekleniyor", + "d6": "Teslimatım", + "d7": "Teslimat Kaydı", + "d8": "Dakika", + "d9": "Saat", + "e0": "gün", + "e1": "hafta", + "e2": "Ay", + "e3": "Yön", + "e4": "Yüksel ve al" + }, + "purchase": { + "a0": "Düzenleme Fiyatı", + "a1": "Abonelik Para Birimi", + "a2": "Çevrimiçi olma için tahmini süre", + "a3": "Satın alma için başlangıç ​​zamanı", + "a4": "Abonelik Süresinin Sonu", + "a5": "Abonelik", + "a6": "Lütfen satın alma para birimini seçin", + "a7": "Satın Alma Miktarı", + "a8": "Lütfen satın alma miktarını girin", + "a9": "Tümü", + "b0": "Şimdi abone olun", + "b1": "Abonelik Süresi", + "b2": "Proje ısınması", + "b3": "Satın almaya başlayın", + "b4": "Aboneliğin Sonu", + "b5": "listelenen işlem", + "b6": "Proje Ayrıntıları", + "b7": "Kullanılıp kullanılmayacağı", + "b8": "Satın Al", + "b9": "Abonelik başarılı" + }, + "reg": { + "a0": "Mobil kayıt", + "a1": "Posta Kutusu Kaydı", + "a2": "Mobil", + "a3": "Lütfen telefon numaranızı girin", + "a4": "Posta Kutusu", + "a5": "Lütfen posta kutusu numarasını girin", + "a6": "Doğrulama Kodu", + "a7": "Lütfen doğrulama kodunu girin", + "a8": "Şifre", + "a9": "Lütfen bir şifre girin", + "b0": "Parolayı Onayla", + "b1": "Lütfen şifrenizi onaylayın", + "b2": "Önerilen kişi", + "b3": "Lütfen tavsiye edeni girin", + "b4": "İsteğe bağlı", + "b5": "Kabul ettiniz", + "b6": "Kullanıcı Sözleşmesi", + "b7": "ve bizimkini anlayın", + "b8": "Gizlilik Sözleşmesi", + "b9": "Kaydol", + "c0": "Zaten bir hesabınız var", + "c1": "Şimdi giriş yapın", + "c2": "Lütfen sözleşmeyi okuyup kabul edin", + "c3": "Lütfen telefon numarasını girin", + "c4": "Lütfen posta kutusu numarasını girin", + "c5": "Başarıyla kaydettirildi", + "c6": "Kurum Kodu (gerekli)", + "c7": "Lütfen kurum kodunu doldurunuz", + "c8": "Kripto para birimi yolculuğunuza başlamak için şimdi kaydolun" + }, + "safe": { + "a0": "Çöz", + "a1": "Bağlama", + "a2": "Posta Kutusu", + "a3": "Posta Kutusu Numarası", + "a4": "Lütfen posta kutusu numarasını girin", + "a5": "E-posta Doğrulama Kodu", + "a6": "Lütfen doğrulama kodunu girin", + "a7": "Doğrulama Kodu", + "a8": "Bağlantıyı başarıyla kaldır", + "a9": "Bağlama başarılı", + "b0": "Giriş şifrenizi unuttum", + "b1": "Hesap", + "b2": "Lütfen telefonunuzu girin", + "b3": "Yeni Parola", + "b4": "Lütfen yeni bir şifre girin", + "b5": "Parolayı Onayla", + "b6": "Lütfen şifrenizi onaylayın", + "b7": "Değişikliği Onayla", + "b8": "Lütfen doğru telefon veya e-posta numarasını girin", + "b9": "Google Authenticator", + "c0": "Nasıl yapılır: Google Authenticator'ı indirip açın, aşağıdaki QR kodunu tarayın veya bir doğrulama jetonu eklemek için gizli anahtarı manuel olarak girin", + "c1": "Anahtarı kopyala", + "c2": "Anahtarı düzgün bir şekilde depoladım ve kaybolursa geri alınmayacaktır", + "c3": "Sonraki", + "c4": "SMS doğrulama kodu", + "c5": "Google Doğrulama Kodu", + "c6": "Bağlamayı onayla", + "c7": "Güvenlik Merkezi", + "c8": "Giriş şifresini değiştir", + "c9": "Değiştir", + "d0": "Ayarlar", + "d1": "İşlem Şifresi", + "d2": "Mobil", + "d3": "Başarıyla değiştirildi", + "d4": "Cep Numarası", + "d5": "Lütfen telefon numaranızı girin", + "d6": "Lütfen SMS doğrulama kodunu girin", + "d7": "Kapat", + "d8": "Aç", + "d9": "Doğrula", + "e0": "SMS", + "e1": "Başarıyla kapatıldı", + "e2": "Başarıyla aç", + "e3": "Onayla", + "e4": "Başarıyla kurun", + "Remembered": "Şifrenizi hatırladınız mı?", + "e5": "Şifreyi al" + }, + "transfer": { + "a0": "Kaydı Aktar", + "a1": "Başarılı", + "a2": "Miktar", + "a3": "Yön", + "a4": "Finansman Hesabı", + "a5": "Sözleşmeli Hesap", + "a6": "Teminat Hesabı", + "a7": "Varlık Yönetimi Hesabı", + "a8": "Aktarım", + "a9": "Kimden", + "b0": "Kime", + "b1": "transfer para birimi", + "b2": "Bakiye", + "b3": "Tüm", + "b4": "Transferred" + }, + "notice": { + "a0": "Ayrıntılar", + "a1": "Mesaj Bildirimi", + "a2": "Duyuru", + "a3": "Mesaj" + }, + "invite": { + "a0": "Arkadaşlarını Davet Et", + "a1": "Ortak", + "a2": "Özel ticaret indirimi", + "a3": "Sıradan kullanıcı", + "a4": "Kimliğim", + "a5": "Özel Kimlik", + "a6": "Davet kodum", + "a7": "Davet QR kodunu kopyalayın", + "a8": "Davet bağlantısını kopyala", + "a9": "Promosyonum", + "b0": "Terfi edecek toplam kişi sayısı", + "b1": "Kişiler", + "b2": "Toplam gelir eşdeğeri", + "b3": "Promosyon Kaydı", + "b4": "Doğrudan davet", + "b5": "İndirim Kaydı", + "b6": "Seviye", + "b7": "Seviye Ayarı", + "b8": "Promosyon Koşulları", + "b9": "Temettü Hakları", + "c0": "takma", + "c1": "Promosyon Sayısı", + "c2": "Kazanç eşdeğeri", + "c3": "Davet Kaydı", + "c4": "İndirim Kaydı", + "c5": "Sınıf hakları açıklaması", + "c6": "Seviye", + "c7": "Eşitlik", + "c8": "Açıklama", + "c9": "Benim haklarım" + }, + "help": { + "a0": "Ayrıntılar", + "a1": "Kolej", + "a2": "Sınıflandırma" + }, + "login": { + "a0": "posta kutusu", + "a1": "Lütfen e-posta adresinizi girin", + "a2": "Şifre", + "a3": "Lütfen bir şifre girin", + "a4": "Giriş", + "a5": "Şifremi Unuttum", + "a6": "Hesap yok", + "a7": "Şimdi Kaydolun", + "a8": "Mobil", + "a9": "posta kutusu", + "b0": "Bitti", + "b1": "Hesaba giriş yapın", + "b2": "Kripto para birimi yolculuğunuza başlamak için şimdi giriş yapın", + "b3": "E-posta", + "b4": "Lütfen e-posta adresinizi girin" + }, + "contract": { + "a0": "Açık Pozisyon", + "a1": "durum", + "a2": "Yetki", + "a3": "Geçmiş", + "a4": "Sözleşmeli İşlem", + "a5": "Başarıyla açıldı", + "a6": "İşlem Türü", + "a7": "Kapalı", + "a8": "Sipariş Toplamı", + "a9": "Ortalama İşlem Fiyatı", + "b0": "Sipariş Fiyatı", + "b1": "marj", + "b2": "İşlem Ücreti", + "b3": "Durum", + "b4": "İşlem", + "b5": "Siparişi iptal et", + "b6": "İptal edildi", + "b7": "Satılmadı", + "b8": "Kısmi İşlem", + "b9": "Tam anlaşma", + "c0": "Uzun süre satın al", + "c1": "Kısa satın al", + "c2": "Açığa sat", + "c3": "Düz ve uzun sat", + "c4": "Sıcak Hatırlatma", + "c5": "Mevcut siparişin iptal edilip edilmeyeceği", + "c6": "Başarıyla geri al", + "c7": "Kar ve Zarar", + "c8": "Paylaş", + "c9": "Yetki Ayrıntıları", + "d0": "Henüz veri yok", + "d1": "Fiyat", + "d2": "Miktar", + "d3": "Anlaşma zamanı", + "d4": "Kullanıcı Hakları", + "d5": "Gerçekleşmemiş kar ve zarar", + "d6": "Risk Oranı", + "d7": "Piyasa Fiyatı", + "d8": "USDT", + "d9": "Occupy Margin", + "e0": "yükseliş", + "e1": "Daha fazla açabilir", + "e2": "Ayı", + "e3": "Boş açılabilir", + "e4": "Kullanılabilir", + "e5": "Transfer", + "e6": "Para Oranı", + "e7": "Mesafe yerleşimi", + "e8": "Çoklu", + "e9": "açılış fiyatı", + "f0": "Para Transferi", + "f1": "Hesap Makinesi", + "f2": "Sözleşme hakkında", + "f3": "Risk Koruma Fonu", + "f4": "Fon Gider Geçmişi", + "f5": "Olağan Komisyon", + "f6": "Piyasa Emri", + "f7": "Kullanılıp kullanılmayacağı", + "f8": "Fiyat", + "f9": "Çift kaldıraçla açık pozisyon", + "g0": "Çoklu Aç", + "g1": "Boş aç", + "g2": "Yetki başarılı", + "g3": "Yalnızca mevcut sözleşmeyi göster", + "g4": "Düzleştirilebilir", + "g5": "Yetkilendirilmiş Dondurma", + "g6": "ortalama açılış fiyatı", + "g7": "Uzlaşma Taban Fiyatı", + "g8": "Tahmini Güçlü Parite", + "g9": "Yerleşik gelir", + "h0": "getiri oranı", + "h1": "Kârı Durdur", + "h2": "Kaybı Durdur", + "h3": "pozisyonu kapat", + "h4": "Piyasa fiyatı sabit", + "h5": "Kar Al ve Zararı Durdur", + "h6": "Seviye", + "h7": "Lütfen kapanış fiyatını girin", + "h8": "Limit Fiyatı", + "h9": "Lütfen kapanış miktarını girin", + "i0": "Keping", + "i1": "Ortalama açılış fiyatı", + "i2": "En Son İşlem Fiyatı", + "i3": "Lütfen fiyatı girin", + "i4": "Kar almak", + "i5": "Piyasa fiyatı", + "i6": "Kâr al emri o anda tetiklenecek ve işlemden sonra kar ve zarar bekleniyor", + "i7": "kaybı durdurmak", + "i8": "Bir zarar durdurma emri o anda tetiklenecek ve işlemden sonra kar ve zarar bekleniyor", + "i9": "Tamam", + "j0": "Başarıyla kapatılan pozisyon", + "j1": "Piyasa fiyatının sabit olup olmadığı", + "j2": "Quan Ping", + "j3": "Başarılı", + "j4": "Kurulum başarılı", + "j5": "Sihirli hesaplama, eşsiz", + "j6": "Yap", + "j7": "Fiyatı kapat", + "j8": "Dijital varlık ticaret platformu", + "j9": "{name1}, {name2} ve {name3}'ü yükselişe giden ateşli yolla karşılaştığında", + "k0": "Açılış fiyatı", + "k1": "En Son Fiyat", + "k2": "Daha fazla bilgi edinmek için kodu tarayın", + "k3": "Yerleşim kar ve zararı", + "k4": "Ekran görüntüsü başarılı ve yerel olarak kaydedildi", + "k5": "Ekran görüntüsü başarısız oldu", + "k6": "Ekran görüntüsü almak için uzun basın", + "k7": "Tek tuşla tam tesviye", + "k8": "Tek tuşla ters", + "k9": "Tek tuşla tam seviyelendirme olsun", + "l0": "Tamamen başarılı", + "l1": "Tek tuşla tersine çevirmek", + "l2": "Ters başarı" + }, + "otc": { + "a0": "Bir reklam yayınlayın", + "a1": "Sipariş", + "a2": "Ticaret para birimi", + "a3": "Siparişim", + "a4": "Reklamlarım", + "a5": "Satın Al", + "a6": "İndirim", + "a7": "Toplam", + "a8": "Kalan", + "a9": "Sınırlı", + "b0": "Birim Fiyat", + "b1": "Ödeme Yöntemi", + "b2": "İşlem", + "b3": "Toplam", + "b4": "Lütfen bir ödeme yöntemi seçin", + "b5": "Lütfen miktarı girin", + "b6": "Sipariş verin", + "b7": "Alipay", + "b8": "WeChat", + "b9": "Banka Kartı", + "c0": "Sipariş başarıyla verildi", + "c1": "Durum", + "c2": "Reklam Numarası", + "c3": "Toplam Fiyat", + "c4": "Miktar", + "c5": "Yayın zamanı", + "c6": "Kaldır", + "c7": "İptal edildi", + "c8": "İşlemde", + "c9": "Tamamlandı", + "d0": "Sıcak Hatırlatma", + "d1": "Mevcut reklamın kaldırılıp kaldırılmayacağı", + "d2": "Tamam", + "d3": "İptal", + "d4": "Başarıyla geri al", + "d5": "Fiat para birimi hesabı", + "d6": "Dondur", + "d7": "Alipay Hesabı", + "d8": "Lütfen hesap numarasını girin", + "d9": "Ad", + "e0": "Lütfen adınızı girin", + "e1": "Ödeme Kodu", + "e2": "Bağlama", + "e3": "WeChat Hesabı", + "e4": "Banka Adı", + "e5": "Lütfen banka adını girin", + "e6": "Hesap Açma Şubesi", + "e7": "Lütfen hesap açma şubesini girin", + "e8": "Banka Kartı Numarası", + "e9": "Lütfen banka kartı numarasını girin", + "f0": "Başarıyla düzenlendi", + "f1": "Başarıyla eklendi", + "f2": "Sat", + "f3": "Satın Al", + "f4": "Sipariş Ayrıntıları", + "f5": "Sipariş Numarası", + "f6": "Hesap", + "f7": "Hesap Bankası", + "f8": "Kalan süre", + "f9": "Dakika", + "g0": "İkinci", + "g1": "Ödeme kuponu yükle", + "g2": "Ödemeyi onayla", + "g3": "Siparişi iptal et", + "g4": "Ödemeyi Onayla", + "g5": "Ödenmemiş hesap", + "g6": "Mevcut siparişin iptal edilip edilmeyeceği", + "g7": "Sipariş iptal edildi", + "g8": "Mevcut ödemeyi onaylayın", + "g9": "İşlem başarılı", + "h0": "Ödeme onaylandıktan sonra, listelenen varlıklar otomatik olarak aktarılacaktır", + "h1": "Ödemenin alınmadığını onayladıktan sonra, bu sipariş otomatik olarak itiraza girecektir", + "h2": "Satış Emri", + "h3": "Satın Alma Siparişi", + "h4": "Reklam Satın Alma Siparişi", + "h5": "Reklam Satış Siparişi", + "h6": "Zaman", + "h7": "Ayrıntılar", + "h8": "Tümü", + "h9": "Kapalı", + "i0": "Bekleyen Ödeme", + "i1": "Onaylanacak", + "i2": "Çekici", + "i3": "Reklam Türü", + "i4": "Lütfen işlem türünü seçin", + "i5": "Lütfen işlem para birimini seçin", + "i6": "Fiyat", + "i7": "Lütfen fiyatı girin", + "i8": "En Düşük Fiyat", + "i9": "Lütfen en düşük fiyatı girin", + "j0": "En yüksek fiyat", + "j1": "Lütfen en yüksek fiyatı girin", + "j2": "Açıklamalar", + "j3": "Lütfen bir not girin", + "j4": "Yayın", + "j5": "Başarıyla gönderildi", + "j6": "Ödeme yöntemi", + "j7": "Minimum Miktar", + "j8": "Maksimum miktar", + "j9": "Lütfen minimum işlem hacmini girin", + "k0": "Lütfen en yüksek işlem hacmini girin" + }, + "first": { + "a0": "gerçek isme git", + "a1": "Hakkımızda", + "a2": "Hoş geldin!", + "a3": "Kar durdurma ve zarar durdurma ayarları", + "a4": "Güncel en son fiyatla işlem yapın", + "a5": "Pozisyonu tut", + "a6": "Sipariş yönetimi", + "a7": "Hepsi görevlendirildi", + "a8": "tarih kaydı", + "a9": "çoklu", + "b0": "Oturumu kapatmak istediğinizden emin misiniz?", + "b1": "Giriş yap veya kayıt ol", + "b2": "Merhaba, Moabcoin'e hoş geldiniz", + "b3": "miktar", + "b4": "nokta indeksi", + "b5": "Sözleşme endeksi", + "b6": "Satın almanın birden çok yolunu destekleyin", + "b7": "Hızlı bir şekilde para satın alın", + "b8": "Sürdürülebilir", + "b9": "Mevcut alan henüz açık değil", + "c0": "Satın almak", + "c1": "Satmak", + "c2": "zaman", + "c3": "Toplam fiyat", + "c4": "miktar", + "c5": "Son fiyat", + "c6": "ipotekli varlıklar", + "c7": "Ses" + }, + "recharge": { + "a0": "AKIMI degistir", + "a1": "* Değiştirilen adres sadece alabilir", + "a2": "Diğer para birimlerini şarj ederseniz, geri alamazsınız!", + "a3": "Toplama için ERC20 kullanılması tavsiye edilir.", + "a4": "Adresi kopyala", + "a5": "*Para transferi yapmadan önce adres ve bilgileri doğruladığınızdan emin olun! ", + "a6": "Lütfen yeniden oluşturun" + }, + "currency": { + "a0": "yasal para transaksyon", + "a1": "I want to buy", + "a2": "Satmak istiyorum", + "a3": "bir klik para satın alması", + "a4": "bir tıklamayla para satmak", + "a5": "miktarla satın alın", + "a6": "miktarla alış", + "a55": "miktarla satın", + "a66": "miktarla satın", + "a7": "Lütfen satın miktarını girin", + "a8": "lütfen alış miktarını girin", + "a9": "Lütfen satış miktarına girin", + "b0": "Lütfen satış miktarını girin", + "b1": "birim fiyatı", + "b2": "0 hizmet satın satın", + "b3": "0 yük satışı", + "b4": "yeterli alan yok", + "b5": "lütfen önce gelişmiş doğrulamayı tamamlayın", + "b6": "de authentication", + "b7": "alışveri onaylayın", + "b8": "satış doğrulaması" + }, + "shou": { + "a0": "Hesabı yeniden şarj et", + "a1": "Cüzdanınıza kripto para fonları ekleyin", + "a2": "Ve hemen işlem yapmaya başlayın", + "a3": "Şimdi şarj edin", + "a4": "Küresel dijital varlık ticaret platformu", + "a5": "Şifreli varlık işlemlerini kolaylaştırın", + "a6": "Şimdi kaydolun", + "a7": "Dijital Varlık Piyasası Ekspresi", + "a8": "Pazar Trendi", + "a9": "Para Birimi", + "a10": "Son Fiyat (USD)", + "a11": "24 saatlik artış", + "a12": "24 saatlik işlem hacmi", + "a13": "İlk 10", + "a14": "5 milyon+", + "a15": "< %0,10", + "a16": "200+", + "a17": "Küresel Sıralama", + "a18": "kullanıcılar bize güveniyor", + "a19": "Ultra Düşük Ücretler", + "a20": "Ülkeler", + "a21": "Çoklu terminal desteği", + "a22": "Dijital varlıklarla her zaman, her yerde ticaret yapın", + "a23": "Tüm para birimi bilgileriyle birlikte çok çeşitli varlık türlerini destekler", + "a24": "APP Mağazası", + "a25": "Android APK", + "a26": "APP'yi indirmek için kodu tarayın", + "a27": "iOS ve Android", + "a28": "Neden xuscoin.com'u seçmelisiniz?", + "a29": "Birden çok ülke için dijital varlık ticareti hizmetleri sunmaya çalışın", + "a30": "Şifrelenmiş varlıkların basit ve kullanışlı ticareti", + "a31": "Ürünün anlaşılması kolaydır, işlem süreci uygundur ve tek noktadan blok zincir varlık hizmet platformu", + "a32": "Kullanıcı deneyimine dayalı olarak, hoş bir şifreleme hizmeti deneyimi sağlayın", + "a33": "Global çok dilli bölgelere hizmet vermek, tüm kullanıcıların şifreli dünyaya girmesi için bir ağ geçidi olmak", + "a34": "Sıfır kaza ile güvenlik ve denge", + "a35": "Birden çok güvenlik stratejisi garantisi, %100 yedek akçe garantisi, kuruluşundan bu yana hiçbir güvenlik olayı meydana gelmemiştir", + "a36": "Optimal işlem ücreti oranı", + "a37": "Tercihli işlem oranları, rekabetçi VIP hakları, en yüksek kalitede hizmetin keyfini çıkarın", + "a38": "Başlangıç ​​Kılavuzu", + "a39": "Dijital varlık işlem sürecini hızlıca anlayın", + "a40": "hemen gelir elde et", + "a41": "Gitmek için tıklayın", + "a42": "XUScoin Kripto Para Ticaret Platformu - Herkes İçin Tasarlandı", + "a43": "Şifreleme yolculuğuna başlayın" + }, + "homeNewText": { + "aa3": "Hemen kaydolun ve kripto para birimi yolculuğunuza başlayın", + "aa4": "Comece a negociar imediatamente", + "aa7": "Moeda", + "aa8": "Giriş Yap/Kayıt Ol", + "bb1": "Último preço (USD)", + "bb2": "aumento de 24h", + + "bb4": "Paranın geleceği burada", + "bb5": "Yatırımcıların kripto para birimini satın alması, satması ve yönetmesi için en güvenilir yer biziz", + "bb6": "E-posta yoluyla kayıt olun", + "bb7": "Kolay yakalama", + "bb8": "Ticaret Fırsatı", + "bb9": "Kripto para birimini kullanmak uygun", + "bb10": "Araçlar", + "bb11": "Mevcut özellikleri güncellemek ve yeni hizmet özelliklerini uygulamak için düzenli olarak çalışıyoruz.", + "bb12": "Ticari şifreleme işleme", + "bb13": "Dünya çapındaki en popüler kripto para birimlerinden gelen ödemeleri rahatlıkla kabul etmenin güvenilir bir yolunu sağlıyoruz.", + "bb14": "Sınırsız kripto para birimi değişimi", + "bb15": "Bitcoin, Tether, Litecoin, Ethereum ve diğer 50'den fazla parayı kolay ve güvenli bir şekilde takas edin.", + "bb16": "Kullanıcı deneyimini optimize edin", + "bb17": "Kullanıcı deneyimini optimize edin: yüksek kaliteli yeni ürünler başlatın, işlemleri basitleştirin ve kullanım kolaylığını artırın.", + "bb18": "Flash para yatırma ve çekme", + "bb19": "Ortaklarımız", + "bb20": "Tüm dünyada", + "bb21": "Ortaklarımız pazar liderleridir ve en iyi kripto para birimi çözümlerini sunmamıza yardımcı olurlar.", + "bb22": "Başlangıç ​​Kılavuzu", + "bb23": "Bir {name} hesabı oluşturun", + "bb24": "Hemen kaydolun ve ticaret yolculuğunuza başlayın!", + "bb25": "Kayıt Ol", + "bb26": "Para Yatırma", + "bb27": "Hızlı yükleme ve kolay para yatırma!", + "bb28": "Şarj Et", + "bb29": "İşlem yapmaya başla", + "bb30": "İşlem yapmaya başlayın ve sınırsız olanakların tadını çıkarın!", + "bb31": "Coin'den coin'e işlem", + "bb32": "İşlemleri her zaman, her yerde aç", + "bb33": "İndirmek için tarayın", + "bb34": "Kripto yolculuğunuza hemen başlayın!", + "bb35": "Kayıt olmak ve işlem yapmaya başlamak yalnızca 10 saniye sürer", + "bb36": "Ücretsiz kayıt", + "bb37": "Para yatırma ve çekme işlemleri en hızlı şekilde 3 dakikada tamamlanabilir.", + "bb38": "Şimdi kaydolun", + "bb39": "Şimdi işlem yap", + "bb40": "{name}, her zaman, her yerde işlem yapın", + "bb41": "{name} uygulamasını indirmek için QR kodunu tarayın", + "bb42": "Uygulamayı indirmek için QR kodunu tarayın" + } +} \ No newline at end of file diff --git a/i18n/lang/ukr.json b/i18n/lang/ukr.json new file mode 100644 index 0000000..29fd34a --- /dev/null +++ b/i18n/lang/ukr.json @@ -0,0 +1,787 @@ +{ + "common": { + "D":"день", + "M":"місяць", + "Y":"рік", + "add":"Додати до", + "address":"адресу", + "all":"всі", + "amout": "Кількість", + "cancel": "скасувати", + "check": "Огляд", + "code": "Код підтвердження", + "confirm": "визначити", + "date": "дата", + "detail": "Деталі", + "email": "поштової скриньки", + "enter": "будь ласка введіть", + "error": "невдача", + "getCode": "отримати код підтвердження", + "h": "Час", + "loadMore": "завантажити ще", + "m": "Хвилина", + "money": "Сума", + "more": "Більше", + "notData": "Немає даних", + "notMore": "Більше немає", + "phone": "Мобільний телефон", + "requestError": "Мережа зайнята. Повторіть спробу пізніше", + "s": "друге", + "save": "Зберегти", + "select": "будь-ласка оберіть", + "sendSuccess": "Надіслано успішно", + "sms": "СМС", + "submit": "подати", + "success": "успіху", + "tips": "Поради", + "total": "одноразова сума", + "type": "Типи", + "copy": "копіювати", + "light": "Білий", + "dark": "чорний", + "service": "Обслуговування клієнтів", + "toDwon": "Чи переходити на сторінку завантаження", + "a0":"Будь ласка, введіть код купу", + "a1":"Копіювання успішно", + "a2":"не вдалося копіювати", + "a3":"Записи купу", + "a4":"Сума заплати", + "a5":"Кількість отриманих", + "a6":"номер рахунку", + "a7":"кількість перезавантаження", + "a8":"платний каучер", + "a9":"будь ласка, введіть кількість перезавантаження", + "b0":"будь ласка, вивантажте каучер плати", + "b1": "купувати{amount}Частки{name}Знак доступний{rate}%нагорода", + "b2":"Дії підписування", + "b3":"Збережено", + "b4":"Не вдалося зберегти", + "b5":"Створення запрошення плакат", + "b6":"Виберіть плакат", + "b8":"Час відкриття", + "b9":"Час закриття", + "c0":"Мінімальна сума поповнення: {num}, поповнення менше мінімальної суми не буде зараховано на рахунок і не може бути повернуто", + "c1":"Мінімальна сума вилучення", + "c2":"Номер версії", + "c3":"відкритий", + "c4":"оцінений меж", + "c5": "Ваш наказ перенесення було успішно надіслано, будь ласка, чекайте терпливо, і результат перенесення буде повідомлено SMS або електронною поштою. Будь ласка, перевірте його уважно. Якщо у вас є питання, будь ласка, зв’ яжіться з службою клієнт" + }, + "base": { + "a0": "заголовок", + "a1": "повернення", + "a2": "Більше", + "a3": "Цитати", + "a4": "Варіант", + "a5": "Потрапити в нову зону", + "a6": "член", + "a7": "Академія", + "a8": "Торгова пара", + "a9": "Остання ціна", + "b0": "Зміна ціни", + "b1": "Клацніть для входу", + "b2": "Ласкаво просимо до", + "b3": "будь ласка, увійдіть", + "b4": "оновлення", + "b5": "Підзарядка", + "b6": "Зняти", + "b7": "Просувайте", + "b8": "Відрахування плати за обробку", + "b9": "Доступні", + "c0": "купити", + "c1": "Моя комісія", + "c2": "Аутентифікація", + "c3": "Центр безпеки", + "c4": "повідомлення", + "c5": "Адреса вилучення", + "c6": "Налаштування", + "c7": "Необов’язково", + "c8": "Додано успішно", + "c9": "Скасувати успіх", + "d0": "Домашня сторінка", + "d1": "транзакція", + "d2": "активів", + "d3": "Введіть ключові слова для пошуку", + "d4": "Всі", + "d5": "Материнська плата", + "d6": "Загальна кількість конвертованих активів", + "d7": "Рахунок фонду", + "d8": "Передача", + "d9": "Пошук валюти", + "e0": "сховати", + "e1": "Балансові активи", + "e2": "заморозити", + "e3": "Перетворити", + "e4": "Контрактний рахунок", + "e5": "Конвертація договору", + "e6": "Майнерський рівень", + "e7": "шахтар" + }, + "accountSettings": { + "a0": "Налаштування аккаунта", + "a1": "Аватар", + "a2": "прізвисько", + "a3": "основний рахунок", + "a4": "номер телефону", + "a5": "Розв’язати", + "a6": "Зв’язати", + "a7": "Прив'язка поштової скриньки", + "a8": "Змінити обліковий запис", + "a9": "вийти з аккаунта", + "b0": "змінити ім'я користувача", + "b1": "Введіть псевдонім", + "b2": "Мову" +}, + "assets": { + "a0": "Управління адресою вилучення", + "a1": "Адресна книга може використовуватися для керування вашими часто використовуваними адресами. Немає необхідності проводити багаторазові перевірки при ініціюванні зняття з адрес в адресній книзі", + "a2": "Підтримується автоматичне зняття коштів. Якщо для зняття використовується {name}, лише адреси веб-адресної книги можуть ініціювати зняття коштів.", + "a3": "Видалити адресу", + "a4": "Додати адресу", + "a5": "Виберіть адресу для видалення", + "a6": "Чи потрібно видаляти поточно вибрану адресу", + "a7": "Протічна вода", + "a8": "одноразова сума", + "a9": "Доступні", + "b0": "заморозити", + "b1": "Рахунок фонду", + "b2": "Контрактний рахунок", + "b3": "Маржинальний рахунок", + "b4": "Фінансовий рахунок", + "b5": "Введіть ключові слова для пошуку", + "b6": "Зняти", + "b7": "Виберіть тип ланцюжка", + "b8": "Адреса вилучення", + "b9": "Введіть адресу", + "c0": "Кількість", + "c1": "Баланс", + "c2": "Введіть кількість", + "c3": "Всі", + "c4": "Мито за обробку", + "c5": "Перевірте ще раз і введіть правильну адресу гаманця", + "c6": "Надсилання невідповідної цифрової валюти на адресу гаманця спричинить постійні втрати", + "c7": "Плата за зняття коштів буде вираховуватися з кількості знятих коштів", + "c8": "Запис про вилучення", + "c9": "час", + "d0": "статус", + "d1": "переглядається", + "d2": "успіху", + "d3": "невдача", + "d4": "побачити більше", + "d5": "Подано успішно, переглядається", + "d6": "редагувати", + "d7": "Додати до", + "d8": "адресу", + "d9": "Введіть або вставте адресу", + "e0": "Зауваження", + "e1": "Введіть примітку", + "e2": "Будь ласка, введіть адресу", + "e3": "Будь ласка, заповніть зауваження", + "e4": "Успішна операція", + "e5": "Підзарядка", + "e6": "Відскануйте QR-код вище, щоб отримати адресу депозиту", + "e7": "Адреса депозиту", + "e8": "Кількість депозитів", + "e9": "Введіть кількість монет, які потрібно поповнити", + "f0": "Ця адреса є вашою останньою адресою поповнення, коли система отримає поповнення, вона буде автоматично зарахована на рахунок", + "f1": "Переказ повинен бути підтверджений усією мережею блокчейнів. Коли він отримає підтвердження мережі {num}, ваше ім’я {name} буде автоматично внесено на рахунок", + "f2": "Коли мережа підтверджена, ваш", + "f3": "Будь ласка, надішліть {name} лише на цю адресу, надсилання інших цифрових валют на цю адресу призведе до постійної втрати", + "f4": "Депозитний запис" + }, + "auth": { + "a0": "Аутентифікація", + "a1": "Перевірено", + "a2": "не сертифікований", + "a3": "перевірено", + "a4": "Розширена сертифікація", + "a5": "переглядається", + "a6": "Помилка автентифікації", + "a7": "Громадянство", + "a8": "Будь ласка, виберіть національність", + "a9": "фактична назва", + "b0": "будь ласка, введіть своє справжнє ім'я", + "b1": "ідентифікаційний номер", + "b2": "Введіть ідентифікаційний номер", + "b3": "підтвердити", + "b4": "Аутентифікація успішна", + "b5": "Завантажте передню фотографію посвідчення особи", + "b6": "Будь ласка, завантажте зворотний бік сертифіката", + "b7": "Завантажте ручне посвідчення особи", + "b8": "Переконайтеся, що фотографія чітка без водяних знаків, а верхня частина тіла ціла", + "b9": "Розмір файлу завеликий, щоб його перевищити", + "c0": "Помилка типу файлу", + "c1": "Завантажено успішно", + "c2": "Будь ласка, завантажте фотографію задньої частини вашого посвідчення особи", + "c3": "Будь ласка, завантажте передню фотографію свого посвідчення особи", + "c4": "Завантаження успішно, зачекайте на перевірку" + }, + "exchange": { + "a0": "Монети", + "a1": "Підпишіться", + "a2": "контракт", + "a3": "транзакція", + "a4": "Поточна комісія", + "a5": "Історична комісія", + "a6": "Додано успішно", + "a7": "Скасувати успіх", + "a8": "Загальний випуск", + "a9": "Загальний тираж", + "b0": "Ціна випуску", + "b1": "час публікації", + "b2": "Електронна книга", + "b3": "Адреса офіційного веб-сайту", + "b4": "Вступ", + "b5": "купити", + "b6": "Продавати", + "b7": "Комісійна ціна", + "b8": "Типи", + "b9": "Лімітна транзакція", + "c0": "Ринкова операція", + "c1": "Угода зроблена", + "c2": "усього", + "c3": "Купувати в", + "c4": "Продавати", + "c5": "Кількість", + "c6": "Угода за найкращою ринковою ціною", + "c7": "Загальна сума", + "c8": "Доступна кількість", + "c9": "Загальна вартість", + "d0": "увійдіть", + "d1": "Діаграма розподілу часу", + "d2": "ціна", + "d3": "Остання операція", + "d4": "час", + "d5": "напрямку", + "d6": "Лімітна ціна", + "d7": "ринкова ціна", + "d8": "Введіть ціну", + "d9": "Введіть кількість", + "e0": "Введіть загальну ціну", + "e1": "успішно замовлено", + "e2": "середня ціна", + "e3": "найвищий", + "e4": "найнижчий", + "e5": "кількість", + "e6": "Замовлення купівлі та продажу", + "e7": "Інформація про валюту", + "e8": "хвилини", + "e9": "год", + "f0": "день", + "f1": "тиждень", + "f2": "місяць", + "f3": "Ціна покупки", + "f4": "Відпускна ціна", + "f5": "Валютна операція", + "f6": "Введіть ключові слова для пошуку", + "f7": "Торгова пара", + "f8": "Остання ціна", + "f9": "Зміна ціни", + "g0": "Необов’язково", + "g1": "Моя комісія", + "g2": "Відкликання делегування", + "g3": "діючий", + "g4": "Відкликати", + "g5": "Чи слід скасувати поточне замовлення", + "g6": "Відкликання успішне" + }, + "option": { + "a0": "Варіант", + "a1": "Відстань до доставки", + "a2": "Побачити більше", + "a3": "Ведмежий", + "a4": "норма прибутку", + "a5": "купити", + "a6": "багато", + "a7": "повітря", + "a8": "струм", + "a9": "Друга половина", + "b0": "Ярмарок", + "b1": "Збільшити вибір", + "b2": "норма прибутку", + "b3": "Кількість закупівлі", + "b4": "Введіть кількість", + "b5": "Баланс", + "b6": "Орієнтовний дохід", + "b7": "Придбайте зараз", + "b8": "підйом", + "b9": "рівень", + "c0": "падіння", + "c1": "Вдала покупка", + "c2": "Деталі", + "c3": "номер замовлення", + "c4": "Ціна відкриття", + "c5": "Ціна закриття", + "c6": "Придбайте час", + "c7": "Кількість для покупки", + "c8": "Тип покупки", + "c9": "статус", + "d0": "Результат доставки", + "d1": "Кількість розрахунків", + "d2": "Час доставки", + "d3": "побачити більше", + "d4": "Купити варіант", + "d5": "Чекаємо доставки", + "d6": "Моя доставка", + "d7": "Запис доставки", + "d8": "хвилини", + "d9": "год", + "e0": "день", + "e1": "тиждень", + "e2": "місяць", + "e3": "напрямку", + "e4": "Зміна ціни" + }, + "purchase": { + "a0": "Ціна випуску", + "a1": "Валюта підписки", + "a2": "Приблизний час виходу в Інтернет", + "a3": "Час початку покупки", + "a4": "Кінець часу передплати", + "a5": "Підпишіться", + "a6": "Виберіть валюту придбання", + "a7": "Кількість закупівлі", + "a8": "Введіть кількість покупки", + "a9": "Всі", + "b0": "Підпишись зараз", + "b1": "Передплатний цикл", + "b2": "Розминка проекту", + "b3": "Почніть купувати", + "b4": "Кінець передплати", + "b5": "Оголосіть результати", + "b6": "Деталі проекту", + "b7": "використовувати чи ні", + "b8": "купити", + "b9": "Успішна підписка" + }, + "reg": { + "a0": "Зареєструйте свій телефон", + "a1": "реєстрація електронною поштою", + "a2": "Мобільний телефон", + "a3": "Введіть номер телефону", + "a4": "поштової скриньки", + "a5": "Введіть номер поштової скриньки", + "a6": "Код підтвердження", + "a7": "введіть код підтвердження", + "a8": "пароль", + "a9": "Введіть пароль", + "b0": "підтвердити пароль", + "b1": "Будь ласка, підтвердьте свій пароль", + "b2": "Реферал", + "b3": "Введіть рекомендатор", + "b4": "Необов’язково", + "b5": "Ви погодились", + "b6": "Угода користувача", + "b7": "І зрозумійте наш", + "b8": "Угода про конфіденційність", + "b9": "зареєстрований", + "c0": "Вже є аккаунт", + "c1": "увійдіть негайно", + "c2": "Будь ласка, прочитайте та погодьтеся з угодою", + "c3": "Будь ласка, введіть свій номер телефону", + "c4": "Будь ласка, введіть номер поштової скриньки", + "c5": "успішної реєстрації" +}, + "safe": { + "a0": "Розв’язати", + "a1": "Зв’язати", + "a2": "поштової скриньки", + "a3": "Номер поштової скриньки", + "a4": "Введіть номер поштової скриньки", + "a5": "Код підтвердження електронної пошти", + "a6": "введіть код підтвердження", + "a7": "Код підтвердження", + "a8": "Скасувати успішно", + "a9": "Пов’язати успішно", + "b0": "Забули свій пароль", + "b1": "номер рахунку", + "b2": "Будь ласка, введіть свій телефон", + "b3": "новий пароль", + "b4": "Введіть новий пароль", + "b5": "підтвердити пароль", + "b6": "Будь ласка, підтвердьте свій пароль", + "b7": "Підтвердьте зміни", + "b8": "Введіть правильний номер телефону або електронної пошти", + "b9": "Google Authenticator", + "c0": "Метод роботи: завантажте та відкрийте Google Authenticator, відскануйте QR-код нижче або введіть секретний ключ вручну, щоб додати маркер підтвердження", + "c1": "Копіювати ключ", + "c2": "Я правильно зберег ключ, і його не відновити, якщо його загубити", + "c3": "Наступний крок", + "c4": "Код підтвердження SMS", + "c5": "Код підтвердження Google", + "c6": "Підтвердьте прив'язку", + "c7": "Центр безпеки", + "c8": "пароль для входу", + "c9": "модифікувати", + "d0": "Налаштування", + "d1": "пароль транзакції", + "d2": "Мобільний телефон", + "d3": "Успішно змінено", + "d4": "номер телефону", + "d5": "Введіть номер телефону", + "d6": "Введіть код підтвердження SMS", + "d7": "закрити", + "d8": "Ввімкнути", + "d9": "перевірка", + "e0": "СМС", + "e1": "Закрито успішно", + "e2": "Успішно відкрито", + "e3": "підтвердити", + "e4": "Встановлено успішно" + }, + "transfer": { + "a0": "Передати запис", + "a1": "успіху", + "a2": "Кількість", + "a3": "напрямку", + "a4": "Активи рахунку", + "a5": "Контрактний рахунок", + "a6": "Маржинальний рахунок", + "a7": "Фінансовий рахунок", + "a8": "Передача", + "a9": "Від", + "b0": "до", + "b1": "Переказ валюти", + "b2": "Баланс", + "b3": "Всі", + "b4": "Передача успішна" + }, + "notice": { + "a0": "Деталі", + "a1": "повідомлення", + "a2": "оголошення", + "a3": "новини" + }, + "invite": { + "a0": "Запросіть друзів з ексклюзивними торговими знижками", + "a1": "партнер", + "a2": "Ексклюзивна торгова знижка", + "a3": "загальний користувач", + "a4": "Моя особа", + "a5": "Ексклюзивний статус", + "a6": "Мій код запрошення", + "a7": "Скопіюйте QR-код запрошення", + "a8": "Скопіювати посилання на запрошення", + "a9": "Моє підвищення", + "b0": "Загальна кількість просування по службі", + "b1": "Люди", + "b2": "Загальний еквівалент доходу", + "b3": "Запис просування", + "b4": "Пряме запрошення", + "b5": "Знижка записів", + "b6": "сорт", + "b7": "Налаштування рівня", + "b8": "Умови просування", + "b9": "Права на дивіденди", + "c0": "прізвисько", + "c1": "Номер підвищення", + "c2": "Еквівалент доходу", + "c3": "Запис запрошень", + "c4": "Знижка записів", + "c5": "Опис прав рівня", + "c6": "сорт", + "c7": "права та інтереси", + "c8": "Опис", + "c9": "Мої права" + }, + "help": { + "a0": "Деталі", + "a1": "Академія", + "a2": "класифікація" + }, + "login": { + "a0": "Номер мобільного телефону або електронної пошти", + "a1": "Введіть номер телефону або електронної пошти", + "a2": "пароль", + "a3": "Введіть пароль", + "a4": "увійдіть", + "a5": "Забули пароль", + "a6": "Немає облікового запису", + "a7": "Зареєструйся зараз", + "a8": "Мобільний телефон", + "a9": "поштової скриньки", + "b0": "здійснювати" + }, + "contract": { + "a0": "Відкрийте позицію", + "a1": "Позиція", + "a2": "Комісія", + "a3": "історії", + "a4": "Контрактна операція", + "a5": "Успішно відкрито", + "a6": "Тип транзакції", + "a7": "Угода зроблена", + "a8": "Загальна комісія", + "a9": "Середня ціна транзакції", + "b0": "Комісійна ціна", + "b1": "Запас", + "b2": "Мито за обробку", + "b3": "статус", + "b4": "діючий", + "b5": "Відмінити замовлення", + "b6": "Відкликаний", + "b7": "Непроданий", + "b8": "Часткова операція", + "b9": "Усі операції", + "c0": "Відкрийте більше", + "c1": "Плоске повітря", + "c2": "Відкритий простір", + "c3": "Піндо", + "c4": "Поради", + "c5": "Чи слід скасувати поточне замовлення", + "c6": "Відкликання успішне", + "c7": "Прибутки та збитки", + "c8": "поділіться цим", + "c9": "Деталі комісії", + "d0": "Немає даних", + "d1": "ціна", + "d2": "Кількість", + "d3": "Час транзакції", + "d4": "Права користувача", + "d5": "Нереалізовані прибутки та збитки", + "d6": "Рівень ризику", + "d7": "ринкова ціна", + "d8": "Чжан", + "d9": "Займіть запас", + "e0": "Бичачий", + "e1": "Можна відкрити більше", + "e2": "Ведмежий", + "e3": "Відкривається", + "e4": "Доступні", + "e5": "Передача", + "e6": "Ставка фінансування", + "e7": "Відстань поселення", + "e8": "багато", + "e9": "повітря", + "f0": "Переказ коштів", + "f1": "Калькулятор", + "f2": "Про контракт", + "f3": "Фонд захисту від ризиків", + "f4": "Історія фінансових витрат", + "f5": "Звичайна комісія", + "f6": "Ринковий порядок", + "f7": "Чи потрібно", + "f8": "s ціна", + "f9": "Відкрийте позицію з кількома важелями", + "g0": "Відкрийте більше", + "g1": "Відкритий простір", + "g2": "Введено в експлуатацію успішно", + "g3": "Показати лише поточний контракт", + "g4": "Keping", + "g5": "Комісія", + "g6": "Середня ціна відкриття", + "g7": "Базова ціна розрахунку", + "g8": "Розрахунковий сильний паритет", + "g9": "Розрахунковий дохід", + "h0": "норма прибутку", + "h1": "Стій", + "h2": "Стоп-лосс", + "h3": "Ліквідація", + "h4": "Рівна ринкова ціна", + "h5": "Стоп-прибуток і стоп-лосс", + "h6": "рівень", + "h7": "Введіть ціну закриття", + "h8": "Лімітна ціна", + "h9": "Введіть кінцеву кількість", + "i0": "Keping", + "i1": "Середня ціна відкриття", + "i2": "Остання ціна транзакції", + "i3": "Введіть ціну", + "i4": "Взяти прибуток Trigger Price", + "i5": "Ринкова ціна до", + "i6": "Замовлення на прийняття прибутку буде активовано в той час, а прибуток та збитки будуть оцінені після транзакції", + "i7": "Стоп-ціна тривоги зупинки", + "i8": "Замовлення стоп-лосс буде спрацьовано вчасно, і прибуток та збитки будуть оцінені", + "i9": "визначити", + "j0": "Закрито успішно", + "j1": "Чи є ринкова ціна рівною", + "j2": "Zenpei", + "j3": "успіху", + "j4": "Встановлено успішно", + "j5": "Магічні розрахунки, неперевершені", + "j6": "робити", + "j7": "Ціна закриття", + "j8": "Цифрова платформа для торгівлі активами", + "j9": "Коли {name1} зустрічає {name2} {name3} вогненну дорогу до сходження", + "k0": "Ціна відкриття", + "k1": "остання ціна", + "k2": "Відскануйте код, щоб дізнатися більше", + "k3": "Прибутки та збитки від розрахунків", + "k4": "Знімок екрана вдалий і його було збережено локально", + "k5": "Помилка знімка екрана", + "k6": "Довго натискайте, щоб зробити знімок екрана", + "k7": "Повне вирівнювання в один клік", + "k8": "Зворотне натискання одним клацанням миші", + "k9": "Будь то одноклавішне повне вирівнювання", + "l0": "Повний успіх", + "l1": "Чи одна клавіша зворотна", + "l2": "Зворотний успіх", + "l3": "Плоске повітря", + "l4": "Піндо" + }, + "otc": { + "a0": "Розмістіть оголошення", + "a1": "Порядок", + "a2": "Валюта операції", + "a3": "Моє замовлення", + "a4": "Моє оголошення", + "a5": "купити", + "a6": "продати", + "a7": "усього", + "a8": "Залишився", + "a9": "Обмежений", + "b0": "ціна за одиницю", + "b1": "спосіб оплати", + "b2": "діючий", + "b3": "Усього", + "b4": "Виберіть спосіб оплати", + "b5": "Введіть кількість", + "b6": "Замовлення", + "b7": "Alipay", + "b8": "Wechat", + "b9": "Банківська картка", + "c0": "успішно замовлено", + "c1": "статус", + "c2": "Ідентифікатор реклами", + "c3": "Загальна сума", + "c4": "Кількість", + "c5": "час випуску", + "c6": "Без полиці", + "c7": "Відкликаний", + "c8": "в угоді", + "c9": "завершено", + "d0": "Поради", + "d1": "Чи потрібно видаляти поточне оголошення", + "d2": "визначити", + "d3": "скасувати", + "d4": "Відкликання успішне", + "d5": "Фіат-рахунок", + "d6": "заморозити", + "d7": "Рахунок Alipay", + "d8": "будь ласка, введіть рахунок", + "d9": "Ім'я", + "e0": "Введіть своє ім’я", + "e1": "Код платежу", + "e2": "Зв’язати", + "e3": "Обліковий запис WeChat", + "e4": "назва банку", + "e5": "Введіть назву банку", + "e6": "Відділення відкриття рахунку", + "e7": "Будь ласка, введіть відділення відкриття рахунку", + "e8": "Номер банківської картки", + "e9": "Введіть номер банківської картки", + "f0": "Редагувати успішно", + "f1": "Додано успішно", + "f2": "Продавати", + "f3": "Купувати в", + "f4": "деталі замовлення", + "f5": "номер замовлення", + "f6": "номер рахунку", + "f7": "банківський рахунок", + "f8": "залишився час", + "f9": "Хвилина", + "g0": "друге", + "g1": "Завантажте ваучер на оплату", + "g2": "підтвердити оплату", + "g3": "відмінити замовлення", + "g4": "Підтвердити оплату", + "g5": "Не прибув", + "g6": "Чи слід скасувати поточне замовлення", + "g7": "Замовлення скасовано", + "g8": "Підтвердьте поточний платіж", + "g9": "Успішна операція", + "h0": "Після підтвердження платежу активи будуть автоматично передані", + "h1": "Після підтвердження того, що платіж не отримано, це замовлення автоматично надійде до апеляції", + "h2": "Замовлення на продаж", + "h3": "Замовлення на придбання", + "h4": "Замовлення на придбання реклами", + "h5": "Рекламне замовлення на продаж", + "h6": "час", + "h7": "Деталі", + "h8": "Всі", + "h9": "зачинено", + "i0": "Підлягає оплаті", + "i1": "бути підтвердженим", + "i2": "Привабливий", + "i3": "тип реклами", + "i4": "Виберіть тип транзакції", + "i5": "Виберіть валюту транзакції", + "i6": "ціна", + "i7": "Введіть ціну", + "i8": "Найнижча ціна", + "i9": "Введіть найнижчу ціну", + "j0": "Найвища ціна", + "j1": "Введіть найвищу ціну", + "j2": "Зауваження", + "j3": "Введіть примітку", + "j4": "звільнення", + "j5": "Успішні", + "j6": "спосіб оплати", + "j7": "Мінімальна сума", + "j8": "Максимальна сума", + "j9": "Введіть мінімальний обсяг транзакції", + "k0": "Введіть максимальний обсяг транзакції" + }, + "first":{ + "a0":"Перейдіть до справжнього імені", + "a1":"про нас", + "a2":"Ласкаво просимо!", + "a3":"Налаштування стоп-прибутку та стоп-лоссу", + "a4":"Торгуйте за найновішою ціною", + "a5":"Утримуйте положення", + "a6":"Управління замовленнями", + "a7":"Все введено в експлуатацію", + "a8":"запис історії", + "a9":"множинні", + "b0":"Ви впевнені, що хочете вийти?", + "b1":"Увійдіть або зареєструйтесь", + "b2":"Привіт, ласкаво просимо до AMATAK", + "b3":"кількість", + "b4":"Плямистий індекс", + "b5":"Індекс контракту", + "b6":"Підтримуйте кілька способів покупки", + "b7":"Швидко купуйте монети", + "b8":"Стійкий", + "b9":"Поточна площа ще не відкрита", + "c0":"Купити в", + "c1":"Продам", + "c2":"час", + "c3":"Загальна сума", + "c4":"кількість", + "c5":"Позначте ціну", + "c6":"Обтяжені активи", + "c7":"Обсяг" + }, + "recharge":{ + "a0":"Змінити валюту", + "a1":"*Змінену адресу можна отримувати лише", + "a2":"Якщо ви поповнюєте інші валюти, ви не зможете отримати їх!", + "a3":"Рекомендується використовувати ERC20 для збору", + "a4":"Скопіювати адресу", + "a5":"*Обов’язково підтвердьте адресу та інформацію перед переказом грошей! ", + "a6":"Будь ласка, відновіть" + }, + "currency":{ + "a0": "операції в правній валюті", + "a1": "Я хочу купити", + "a2": "Я хочу продати", + "a3": "куп монет одного клацання", + "a4": "продавання грошей одним клацанням", + "a5": "purchase by quantity", + "a6": "купування за сумою", + "a55": "продавати за кількістю", + "a66": "продавати за сумою", + "a7": "будь ласка, введіть кількість купу", + "a8": "будь ласка, введіть суму купу", + "a9": "будь ласка, введіть кількість продажів", + "b0": "будь ласка, введіть суму продажу", + "b1": "ціна одиниці", + "b2": "0 купування оплат за службу", + "b3": "0 продаж заряду", + "b4": "недостатнього доступного балансу", + "b5": "будь ласка, спочатку завершите розширену автентифікацію", + "b6": "de authentication", + "b7": "підтвердити купу", + "b8": "підтвердження продажу" + } +} diff --git a/i18n/lang/zh-CN.json b/i18n/lang/zh-CN.json new file mode 100644 index 0000000..649ee0a --- /dev/null +++ b/i18n/lang/zh-CN.json @@ -0,0 +1,823 @@ +{ + "common": { + "D": "日", + "M": "月", + "Y": "年", + "add": "添加", + "address": "地址", + "all": "所有", + "amout": "数量", + "cancel": "取消", + "check": "审核", + "code": "验证码", + "confirm": "确定", + "date": "日期", + "detail": "详情", + "email": "邮箱", + "enter": "请输入", + "error": "失败", + "getCode": "获取验证码", + "h": "时", + "loadMore": "加载更多", + "m": "分", + "money": "金额", + "more": "更多", + "notData": "暂无数据", + "notMore": "没有更多了", + "phone": "手机", + "requestError": "网络繁忙,请稍后再试", + "s": "秒", + "save": "保存", + "select": "请选择", + "sendSuccess": "发送成功", + "sms": "短信", + "submit": "提交", + "success": "成功", + "tips": "温馨提示", + "total": "总额", + "type": "类型", + "copy": "复制", + "light": "白", + "dark": "黑", + "service": "客服", + "toDwon": "是否前往下载页", + "a0":"请输入申购码", + "a1":"复制成功", + "a2":"复制失败", + "a3":"申购记录", + "a4":"支付金额", + "a5":"申购数量", + "a6":"账号", + "a7":"充值数量", + "a8":"支付凭证", + "a9":"请输入充值数量", + "b0":"请上传支付凭证", + "b1": "购买{amount}枚{name}代币可获{rate}%奖励", + "b2":"申购活动", + "b3":"保存成功", + "b4":"保存失败", + "b5":"生成邀请海报", + "b6":"选择海报", + "b8":"开盘时间", + "b9":"收盘时间", + "c0":"最小充值金额:{num},小于最小金额的充值将不会上账且无法返回", + "c1":"最小提币额", + "c2":"版本号", + "c3": "可开", + "c4": "预估保证金", + "c5": "您的划转订单已提交成功,请耐心等待,划转结果会以短信或邮件的方式通知。请注意查收,如有疑问请及时联系客服", + "c6":"涨幅比例", + "c7":"当前估值" + }, + "base": { + "a0": "标题", + "a1": "返回", + "a2": "更多", + "a3": "行情", + "a4": "期权", + "a5": "打新专区", + "a6": "会员", + "a7": "学院", + "a8": "交易对", + "a9": "最新价", + "b0": "涨跌幅", + "b1": "点击登录", + "b2": "欢迎来到", + "b3": "请登录", + "b4": "升级", + "b5": "充币", + "b6": "提币", + "b7": "推广", + "b8": "抵扣手续费", + "b9": "可用", + "c0": "购买", + "c1": "我的委托", + "c2": "身份认证", + "c3": "安全中心", + "c4": "消息通知", + "c5": "提币地址", + "c6": "设置", + "c7": "自选", + "c8": "添加成功", + "c9": "取消成功", + "d0": "首页", + "d1": "交易", + "d2": "资产", + "d3": "请输入搜索关键词", + "d4": "全部", + "d5": "主板", + "d6": "总资产折合", + "d7": "资金账户", + "d8": "划转", + "d9": "搜索币种", + "e0": "隐藏", + "e1": "余额资产", + "e2": "冻结", + "e3": "折合", + "e4": "合约账户", + "e5": "合约折合", + "e6": "矿工等级", + "e7": "矿工", + "f0":"开启您的加密货币之旅", + "f1":"买币", + "f2":"立即前往", + "f3":"流行的加密货币", + "f4":"名称", + "f5":"常用功能", + "f6":"已完成初级认证", + "f7":"储备金证明", + "f8":"我们致力于实现资金状况高透明度,对用户资产保持 1:1 的储备金率", + "f9":"比特币", + "g0":"平均回报率", + "g1":"创造无限可能", + "g2":"开始探索", + "g3":"可买", + "g4":"可卖", + "g5":"对手价" + }, + "accountSettings": { + "a0": "账号设置", + "a1": "头像", + "a2": "昵称", + "a3": "主账号", + "a4": "手机号", + "a5": "解绑", + "a6": "绑定", + "a7": "邮箱绑定", + "a8": "切换账户", + "a9": "退出登录", + "b0": "修改昵称", + "b1": "请输入昵称", + "b2": "语言", + "b3": "联系信息", + "b4": "常规咨询", + "b5": "客户服务", + "b6": "媒体合作", + "b7": "需要任何帮助请联系我們" + }, + "assets": { + "a0": "提币地址管理", + "a1": "地址簿可以用来管理您的常用地址,往地址簿中存在的地址发起提币时,无需进行多重校验", + "a2": "已支持自动提币,使用{name}提币时,只允许网地址簿中存在的地址发起提币", + "a3": "删除地址", + "a4": "添加地址", + "a5": "请选择要删除的地址", + "a6": "是否删除当前选中地址", + "a7": "流水", + "a8": "总额", + "a9": "可用", + "b0": "冻结", + "b1": "资金账户", + "b2": "合约账户", + "b3": "杠杆账户", + "b4": "理财账户", + "b5": "请输入搜索关键词", + "b6": "提币", + "b7": "请选择链类型", + "b8": "提币地址", + "b9": "请输入地址", + "c0": "数量", + "c1": "余额", + "c2": "请输入数量", + "c3": "全部", + "c4": "手续费", + "c5": "请仔细检查并输入正确的提币钱包地址", + "c6": "发送不对应的数字货币到钱包地址会造成永久性的损失", + "c7": "提币手续费将从提币数量中扣除", + "c8": "提币记录", + "c9": "时间", + "d0": "状态", + "d1": "审核中", + "d2": "成功", + "d3": "失败", + "d4": "查看更多", + "d5": "提交成功,正在审核", + "d6": "编辑", + "d7": "添加", + "d8": "地址", + "d9": "请输入或粘贴地址", + "e0": "备注", + "e1": "请输入备注", + "e2": "请填写地址", + "e3": "请填写备注", + "e4": "操作成功", + "e5": "充币", + "e6": "扫描上方二维码获取充币地址", + "e7": "充币地址", + "e8": "充币数量", + "e9": "请输入充币数量", + "f0": "此地址是您最新的充值地址,当系统收到充值时,将进行自动入账", + "f1": "转账需要由整个区块链网络进行确认,到达{num}个网络确认时,您的{name}将被自动存入账户中", + "f2": "个网络确认时,您的", + "f3": "请只发送{name}到此地址,发送其他数字货币到此地址会造成永久性的损失", + "f4": "充币记录" + }, + "auth": { + "a0": "身份认证", + "a1": "实名认证", + "a2": "未认证", + "a3": "已认证", + "a4": "高级认证", + "a5": "审核中", + "a6": "认证失败", + "a7": "国籍", + "a8": "请选择国籍", + "a9": "真实姓名", + "b0": "请输入真实姓名", + "b1": "证件号码", + "b2": "请输入证件号码", + "b3": "确认", + "b4": "认证成功", + "b5": "请上传证件正面照片", + "b6": "请上传证件背面", + "b7": "请上传手持证件照", + "b8": "确保照片清晰无水印,且上半身完整", + "b9": "文件尺寸过大,不得超过", + "c0": "文件类型错误", + "c1": "上传成功", + "c2": "请上传证件背面照", + "c3": "请上传证件正面照", + "c4": "上传成功,请等待审核", + "c5": "出生日期", + "c6": "证件类型", + "c7": "居住地址", + "c8": "请输入居住地址", + "c9": "电话号码", + "d0": "请输入电话号码", + "d1": "驾驶证", + "d2": "护照", + "d3": "身份证", + "d4": "选择日期", + "d5": "请选择" + }, + "exchange": { + "a0": "币币", + "a1": "申购", + "a2": "合约", + "a3": "交易", + "a4": "当前委托", + "a5": "历史委托", + "a6": "添加成功", + "a7": "取消成功", + "a8": "发行总量", + "a9": "流通总量", + "b0": "发行价格", + "b1": "发行时间", + "b2": "白皮书地址", + "b3": "官网地址", + "b4": "简介", + "b5": "买", + "b6": "卖", + "b7": "委托价", + "b8": "类型", + "b9": "限价交易", + "c0": "市价交易", + "c1": "已成交", + "c2": "总计", + "c3": "买入", + "c4": "卖出", + "c5": "数量", + "c6": "在最佳市场价格成交", + "c7": "总价", + "c8": "可用数量", + "c9": "总值", + "d0": "登录", + "d1": "分时图", + "d2": "价格", + "d3": "最新成交", + "d4": "时间", + "d5": "方向", + "d6": "限价", + "d7": "市价", + "d8": "请输入价格", + "d9": "请输入数量", + "e0": "请输入总价", + "e1": "下单成功", + "e2": "平均价格", + "e3": "最高", + "e4": "最低", + "e5": "量", + "e6": "买卖盘", + "e7": "币种信息", + "e8": "分钟", + "e9": "小时", + "f0": "天", + "f1": "周", + "f2": "月", + "f3": "买价", + "f4": "卖价", + "f5": "币币交易", + "f6": "请输入搜索关键词", + "f7": "交易对", + "f8": "最新价", + "f9": "涨跌幅", + "g0": "自选", + "g1": "我的委托", + "g2": "撤销委托", + "g3": "操作", + "g4": "撤销", + "g5": "是否撤销当前委托", + "g6": "撤销成功" + }, + "option": { + "a0": "期权", + "a1": "距离交割", + "a2": "看多", + "a3": "看空", + "a4": "收益率", + "a5": "购买", + "a6": "多", + "a7": "空", + "a8": "当前", + "a9": "下期", + "b0": "看平", + "b1": "涨幅选择", + "b2": "收益率", + "b3": "购买数量", + "b4": "请输入数量", + "b5": "余额", + "b6": "预计收益", + "b7": "立即购买", + "b8": "涨", + "b9": "平", + "c0": "跌", + "c1": "购买成功", + "c2": "详情", + "c3": "订单号", + "c4": "开盘价", + "c5": "收盘价", + "c6": "买入时间", + "c7": "买入数量", + "c8": "购买类型", + "c9": "状态", + "d0": "交割结果", + "d1": "结算数量", + "d2": "交割时间", + "d3": "查看更多", + "d4": "购买期权", + "d5": "等待交割", + "d6": "我的交割", + "d7": "交割记录", + "d8": "分钟", + "d9": "小时", + "e0": "天", + "e1": "周", + "e2": "月", + "e3": "方向", + "e4": "涨跌幅" + }, + "purchase": { + "a0": "发行价", + "a1": "申购币种", + "a2": "预计上线时间", + "a3": "开始申购时间", + "a4": "结束申购时间", + "a5": "申购", + "a6": "请选择申购币种", + "a7": "购买数量", + "a8": "请输入申购数量", + "a9": "全部", + "b0": "立即申购", + "b1": "申购周期", + "b2": "项目预热", + "b3": "开始申购", + "b4": "结束申购", + "b5": "公布结果", + "b6": "项目详情", + "b7": "是否使用", + "b8": "购买", + "b9": "申购成功" + }, + "reg": { + "a0": "手机注册", + "a1": "邮箱注册", + "a2": "手机", + "a3": "请输入手机号", + "a4": "邮箱", + "a5": "请输入邮箱号", + "a6": "验证码", + "a7": "请输入验证码", + "a8": "密码", + "a9": "请输入密码", + "b0": "确认密码", + "b1": "请确认密码", + "b2": "推荐人", + "b3": "请输入推荐人", + "b4": "选填", + "b5": "您已同意", + "b6": "用户协议", + "b7": "并了解我们的", + "b8": "隐私协议", + "b9": "注册", + "c0": "已有账号", + "c1": "立即登录", + "c2": "请阅读并同意协议", + "c3": "请填写手机号", + "c4": "请填写邮箱号", + "c5": "注册成功", + "c6":"机构码(必填)", + "c7":"请填写机构码" + }, + "safe": { + "a0": "解绑", + "a1": "绑定", + "a2": "邮箱", + "a3": "邮箱号", + "a4": "请输入邮箱号", + "a5": "邮箱验证码", + "a6": "请输入验证码", + "a7": "验证码", + "a8": "解绑成功", + "a9": "绑定成功", + "b0": "忘记登录密码", + "b1": "账号", + "b2": "请输入手机", + "b3": "新密码", + "b4": "请输入新密码", + "b5": "确认密码", + "b6": "请确认密码", + "b7": "确认修改", + "b8": "请输入正确的手机或邮箱号", + "b9": "谷歌验证器", + "c0": "操作方法:下载并打开谷歌验证器,扫描下方二维码或手动输入秘钥添加验证令牌", + "c1": "复制密钥", + "c2": "我已经妥善保存密钥,丢失后将不可找回", + "c3": "下一步", + "c4": "短信验证码", + "c5": "谷歌验证码", + "c6": "确认绑定", + "c7": "安全中心", + "c8": "登录密码", + "c9": "修改", + "d0": "设置", + "d1": "交易密码", + "d2": "手机", + "d3": "修改成功", + "d4": "手机号", + "d5": "请输入手机号", + "d6": "请输入短信验证码", + "d7": "关闭", + "d8": "开启", + "d9": "验证", + "e0": "短信", + "e1": "关闭成功", + "e2": "开启成功", + "e3": "确认", + "e4": "设置成功" + }, + "transfer": { + "a0": "划转记录", + "a1": "成功", + "a2": "数量", + "a3": "方向", + "a4": "账户资产", + "a5": "合约账户", + "a6": "杠杆账户", + "a7": "理财账户", + "a8": "划转", + "a9": "从", + "b0": "至", + "b1": "划转币种", + "b2": "余额", + "b3": "全部", + "b4": "已划转" + }, + "notice": { + "a0": "详情", + "a1": "消息通知", + "a2": "公告", + "a3": "消息" + }, + "invite": { + "a0": "申购", + "a1": "合伙人", + "a2": "尊享交易返佣", + "a3": "普通用户", + "a4": "我的身份", + "a5": "尊享身份", + "a6": "我的邀请码", + "a7": "复制邀请二维码", + "a8": "复制邀请链接", + "a9": "我的推广", + "b0": "推广总人数", + "b1": "人", + "b2": "总收益折合", + "b3": "推广记录", + "b4": "直接邀请", + "b5": "返佣记录", + "b6": "等级", + "b7": "级别设定", + "b8": "晋升条件", + "b9": "分红权益", + "c0": "昵称", + "c1": "推广人数", + "c2": "收益折合", + "c3": "邀请记录", + "c4": "返佣记录", + "c5": "等级权益说明", + "c6": "等级", + "c7": "权益", + "c8": "说明", + "c9": "我的权益" + }, + "help": { + "a0": "详情", + "a1": "学院", + "a2": "分类" + }, + "login": { + "a0": "邮箱号", + "a1": "请输入邮箱号", + "a2": "密码", + "a3": "请输入密码", + "a4": "登录", + "a5": "忘记密码", + "a6": "没有账号", + "a7": "立即注册", + "a8": "手机", + "a9": "邮箱", + "b0": "完成" + }, + "contract": { + "a0": "开仓", + "a1": "持仓", + "a2": "委托", + "a3": "历史", + "a4": "合约交易", + "a5": "开通成功", + "a6": "交易类型", + "a7": "已成交", + "a8": "委托总量", + "a9": "成交均价", + "b0": "委托价格", + "b1": "保证金", + "b2": "手续费", + "b3": "状态", + "b4": "操作", + "b5": "撤单", + "b6": "已撤销", + "b7": "未成交", + "b8": "部分成交", + "b9": "全部成交", + "c0": "开多", + "c1": "平空", + "c2": "开空", + "c3": "平多", + "c4": "温馨提示", + "c5": "是否撤销当前订单", + "c6": "撤销成功", + "c7": "盈亏", + "c8": "分享", + "c9": "委托详情", + "d0": "暂无数据", + "d1": "价格", + "d2": "数量", + "d3": "成交时间", + "d4": "用户权益", + "d5": "未实现盈亏", + "d6": "风险率", + "d7": "市价", + "d8": "USDT", + "d9": "占用保证金", + "e0": "看涨", + "e1": "可开多", + "e2": "看跌", + "e3": "可开空", + "e4": "可用", + "e5": "划转", + "e6": "资金费率", + "e7": "距离结算", + "e8": "多", + "e9": "开仓价", + "f0": "资金划转", + "f1": "计算器", + "f2": "关于合约", + "f3": "风险保障基金", + "f4": "资金费用历史", + "f5": "普通委托", + "f6": "市价委托", + "f7": "是否以", + "f8": "的价格", + "f9": "倍杠杆开仓", + "g0": "开多", + "g1": "开空", + "g2": "委托成功", + "g3": "仅显示当前合约", + "g4": "可平", + "g5": "委托", + "g6": "开仓平均价", + "g7": "结算基准价", + "g8": "预估强平价", + "g9": "已结算收益", + "h0": "收益率", + "h1": "止盈", + "h2": "止损", + "h3": "平仓", + "h4": "市价全平", + "h5": "止盈止损", + "h6": "平", + "h7": "请输入平仓价格", + "h8": "限价", + "h9": "请输入平仓数量", + "i0": "可平", + "i1": "开仓均价", + "i2": "最新成交价", + "i3": "请输入价格", + "i4": "止盈触发价", + "i5": "市价至", + "i6": "时将触发止盈委托,成交后预计盈亏", + "i7": "止损触发价", + "i8": "时将触发止损委托,成交后预计盈亏", + "i9": "确定", + "j0": "平仓成功", + "j1": "是否市价全平", + "j2": "全平", + "j3": "成功", + "j4": "设置成功", + "j5": "神机妙算,无可匹敌", + "j6": "做", + "j7": "平仓价格", + "j8": "数字资产交易平台", + "j9": "当{name1}遇上{name2} {name3}的火热飞升之路", + "k0": "开仓价格", + "k1": "最新价格", + "k2": "扫码了解更多", + "k3": "结算盈亏", + "k4": "截图成功,已保存到本地", + "k5": "截图失败", + "k6": "长按截图", + "k7": "一键全平", + "k8": "一键反向", + "k9": "是否一键全平", + "l0": "全平成功", + "l1": "是否一键反向", + "l2": "反向成功", + "l3": "平空", + "l4": "平多" + }, + "otc": { + "a0": "发布广告", + "a1": "订单", + "a2": "交易币种", + "a3": "我的订单", + "a4": "我的广告", + "a5": "购买", + "a6": "出售", + "a7": "总数", + "a8": "剩余", + "a9": "限量", + "b0": "单价", + "b1": "支付方式", + "b2": "操作", + "b3": "总量", + "b4": "请选择支付方式", + "b5": "请输入数量", + "b6": "下单", + "b7": "支付宝", + "b8": "微信", + "b9": "银行卡", + "c0": "下单成功", + "c1": "状态", + "c2": "广告编号", + "c3": "总价", + "c4": "数量", + "c5": "发布时间", + "c6": "下架", + "c7": "已撤销", + "c8": "交易中", + "c9": "已完成", + "d0": "温馨提示", + "d1": "是否下架当前广告", + "d2": "确定", + "d3": "取消", + "d4": "撤销成功", + "d5": "法币账户", + "d6": "冻结", + "d7": "支付宝账号", + "d8": "请输入账号", + "d9": "姓名", + "e0": "请输入姓名", + "e1": "付款码", + "e2": "绑定", + "e3": "微信账号", + "e4": "银行名称", + "e5": "请输入银行名称", + "e6": "开户支行", + "e7": "请输入开户支行", + "e8": "银行卡号", + "e9": "请输入银行卡号", + "f0": "编辑成功", + "f1": "添加成功", + "f2": "卖出", + "f3": "买入", + "f4": "订单详情", + "f5": "订单号", + "f6": "账号", + "f7": "开户银行", + "f8": "剩余时间", + "f9": "分", + "g0": "秒", + "g1": "上传支付凭证", + "g2": "确认付款", + "g3": "取消订单", + "g4": "确认收款", + "g5": "未到账", + "g6": "是否取消当前订单", + "g7": "订单已取消", + "g8": "确认当前已付款", + "g9": "操作成功", + "h0": "确认收款后将挂卖资产将自动划转", + "h1": "确认未收到款项后,此订单将自动进入申诉", + "h2": "出售订单", + "h3": "购买订单", + "h4": "广告购买订单", + "h5": "广告出售订单", + "h6": "时间", + "h7": "详情", + "h8": "全部", + "h9": "已关闭", + "i0": "待支付", + "i1": "待确认", + "i2": "申诉中", + "i3": "广告类型", + "i4": "请选择交易类型", + "i5": "请选择交易币种", + "i6": "价格", + "i7": "请输入价格", + "i8": "最低价", + "i9": "请输入最低价", + "j0": "最高价", + "j1": "请输入最高价", + "j2": "备注", + "j3": "请输入备注", + "j4": "发布", + "j5": "发布成功", + "j6": "收款方式", + "j7": "最低量", + "j8": "最高量", + "j9": "请输入最低交易量", + "k0": "请输入最高交易量" + }, + "first":{ + "a0": "去实名", + "a1": "关于我们", + "a2": "欢迎您!", + "a3": "止盈止损设置", + "a4": "以当前最新价交易", + "a5": "持有仓位", + "a6": "订单管理", + "a7": "全部委托", + "a8": "历史记录", + "a9": "倍数", + "b0": "确定要退出登录吗?", + "b1": "登录或注册", + "b2": "Hi,欢迎使用JEDcoin", + "b3": "量", + "b4": "现货指数", + "b5": "合约指数", + "b6": "支持多种方式购买", + "b7": "快捷买币", + "b8": "永续", + "b9": "当前地区暂未开放", + "c0": "买入", + "c1": "卖出", + "c2": "时间", + "c3": "总价", + "c4": "数量", + "c5": "标记价", + "c6": "担保资产", + "c7": "成交量" + }, + "recharge":{ + "a0": "切换币种", + "a1": "*改地址只能接收", + "a2": "的资产,如果充值其他币种,将无法找回!", + "a3": "推荐使用ERC20进行收款", + "a4": "复制地址", + "a5": "*转账前请务必确认地址及信息无误!一旦转出,不可撤回!", + "a6":"请重新生成" + }, + "currency":{ + "a0": "法币交易", + "a1": "我要买", + "a2": "我要卖", + "a3": "一键买币", + "a4": "一键卖币", + "a5": "按数量购买", + "a6": "按金额购买", + "a55": "按数量出售", + "a66": "按金额出售", + "a7": "请输入购买数量", + "a8": "请输入购买金额", + "a9": "请输入出售数量", + "b0": "请输入出售金额", + "b1": "单价", + "b2": "0手续费购买", + "b3": "0手续费出售", + "b4": "可用余额不足", + "b5": "请先完成高级认证", + "b6": "去认证", + "b7": "确认购买", + "b8": "确认出售" + } +} diff --git a/i18n/lang/zh-TW.json b/i18n/lang/zh-TW.json new file mode 100644 index 0000000..6e25823 --- /dev/null +++ b/i18n/lang/zh-TW.json @@ -0,0 +1,968 @@ +{ + "common": { + "user": "用戶信任我們", + "trading": "交易", + "transactions": "交易", + "payments": "以本地支付", + "currency": "貨幣", + "using": "支付使用", + "crypto": "加密", + "Why": "你為什麼選擇購買", + "digital": "Moabcoin的數字貨幣", + "believe": "我們相信加密貨幣將一直存在--是一个值得建立的未來同時是一個敞開著并邀請每個人都加入的大門", + "help": "我們幫助你理解貨幣、條款、密集的圖表和市場變化", + "Clarity": "清晰度", + "safety": "安全", + "double": "安全雙重風險控制,智能風險控制系統加人工雙重風險控制", + "convenient": "方便", + "key": "一鍵交易,操作更方便", + "technology": "我們的技術", + "CoinsExpound": "Moabcoin採用GSLB、分佈式存儲、多機高速內存交易引擎、冷錢包、離線私鑰熱錢包等先進技術,通過網絡、移動和台式終端等多個終端為客戶提供安全、穩定和可靠的數字資產交易服務", + "guide": "初學者指南", + "Wear": "記下來", + "Get": "注册交易帳戶", + "deposit": "存款", + "Invest": "投資你的賬戶,開始你的旅程。支持多種付款方式", + "Complete": "完整的身份驗證", + "become": "完成身份驗證並成為一個兼容的賬戶", + "Start": "開始交易", + "Sell": "銷售,購買或複製交易,以探索更多", + "Create": "創造無限的可能,掃碼下載交易軟件,用於手機APP交易", + "Rights": "©2022 BingX Exchange保留所有權利", + "million": "幾百萬", + "Beginners Guide": "初學者指南", + "Trading Strategy": "交易策略", + "Industry Research": "行業研究", + "Market News": "市場消息", + "User protocol": "用戶協議", + "Privacy policy": "隱私政策", + "Legal declaration": "法律聲明", + "About us": "關於我們", + "Android": "安卓", + "ios": "ios", + "D": "日", + "M": "月", + "Y": "年", + "add": "添加", + "address": "地址", + "all": "所有", + "amout": "數量", + "cancel": "取消", + "check": "審核", + "code": "驗證碼", + "confirm": "確定", + "date": "日期", + "detail": "詳情", + "email": "郵箱", + "enter": "請輸入", + "error": "失敗", + "getCode": "獲取驗證碼", + "h": "時", + "loadMore": "加載更多", + "m": "分", + "money": "金額", + "more": "更多", + "notData": "暫無數據", + "notMore": "沒有更多了", + "phone": "手機", + "requestError": "網絡繁忙,請稍後再試", + "s": "秒", + "save": "保存", + "select": "請選擇", + "sendSuccess": "發送成功", + "sms": "短信", + "submit": "提交", + "success": "成功", + "tips": "溫馨提示", + "total": "總額", + "type": "類型", + "copy": "複製", + "light": "白", + "dark": "黑", + "service": "客服", + "toDwon": "是否前往下載頁", + "toDwon1": "是否前往認證頁", + "a0": "請輸入申購碼", + "a1": "複製成功", + "a2": "複製失敗", + "a3": "申購記錄", + "a4": "支付金額", + "a5": "申購數量", + "a6": "帳號", + "a7": "充值數量", + "a8": "支付憑證", + "a9": "請輸入充值數量", + "b0": "請上傳支付憑證", + "b1": "購買{amount}枚{name}代幣可獲{rate}%獎勵", + "b2": "申購活動", + "b3": "保存成功", + "b4": "保存失敗", + "b5": "生成邀請海報", + "b6": "選擇海報", + "b8": "開盤時間", + "b9": "收盤時間", + "c0": "最小充值金額:{num},小於最小金額的充值將不會上帳且無法返回", + "c1": "最小提幣額", + "c2": "版本號", + "c3": "可開", + "c4": "數量", + "c5": "您的劃轉訂單已提交成功,請耐心等待,劃轉結果會以簡訊或郵件的管道通知。請注意查收,如有疑問請及時聯系客服", + "c6": "漲幅比例", + "c7": "當前估值", + "GraphicValidation": "圖形驗證" + }, + "base": { + "a0": "標題", + "a1": "返回", + "a2": "更多", + "a3": "行情", + "a4": "期權", + "a5": "打新專區", + "a6": "會員", + "a7": "學院", + "a8": "交易對", + "a9": "最新價", + "b0": "漲跌幅", + "b1": "點擊登錄", + "b2": "歡迎來到", + "b3": "請登錄", + "b4": "升級", + "b5": "充幣", + "b6": "提幣", + "b7": "推廣", + "b8": "抵扣手續費", + "b9": "可用", + "c0": "購買", + "c1": "我的委託", + "c2": "身份認證", + "c3": "安全中心", + "c4": "消息通知", + "c5": "提幣地址", + "c6": "設置", + "c7": "自選", + "c8": "添加成功", + "c9": "取消成功", + "d0": "首頁", + "d1": "交易", + "d2": "資產", + "d3": "請輸入搜索關鍵詞", + "d4": "全部", + "d5": "主板", + "d6": "總資產折合", + "d7": "幣幣賬戶", + "d8": "劃轉", + "d9": "搜索幣種", + "e0": "隱藏", + "e1": "餘額資產", + "e2": "凍結", + "e3": "折合", + "e4": "合約賬戶", + "e5": "合約折合", + "e6": "礦工等級", + "e7": "礦工", + "wallet": "錢包", + "f0": "開啟您的加密貨幣之旅", + "f1": "買幣", + "f2": "立即前往", + "f3": "流行的加密貨幣", + "f4": "名稱", + "f5": "常用功能", + "f6": "已完成初始級認證", + "f7": "儲備金證明", + "f8": "我們致力于實現資金狀況高透明度,對用戶資產保持 1:1 的儲備金率", + "f9": "比特幣", + "g0": "平均回報率", + "g1": "創造無限可能", + "g2": "開始探索", + "g3": "可買", + "g4": "可賣", + "g5": "對手價", + "h1": "賬單" + }, + "accountSettings": { + "a0": "賬號設置", + "a1": "頭像", + "a2": "暱稱", + "a3": "主賬號", + "a4": "手機號", + "a5": "解綁", + "a6": "綁定", + "a7": "郵箱綁定", + "a8": "切換賬戶", + "a9": "退出登錄", + "b0": "修改暱稱", + "b1": "請輸入暱稱", + "b2": "語言", + "b3": "聯系資訊", + "b4": "常規諮詢", + "b5": "客戶服務", + "b6": "媒體合作", + "b7": "需要任何幫助請聯繫我們" + }, + "assets": { + "a0": "提幣地址管理", + "a1": "地址簿可以用來管理您的常用地址,往地址簿中存在的地址發起提幣時,無需進行多重校驗", + "a2": "已支持自動提幣,使用{name}提幣時,只允許網地址簿中存在的地址發起提幣", + "a3": "刪除地址", + "a4": "添加地址", + "a5": "請選擇要刪除的地址", + "a6": "是否刪除當前選中地址", + "a7": "流水", + "a8": "總額", + "a9": "可用", + "b0": "凍結", + "b1": "資金賬戶", + "b2": "合約賬戶", + "b3": "槓桿賬戶", + "b4": "理財賬戶", + "b5": "請輸入搜索關鍵詞", + "b6": "提幣", + "b7": "請選擇鏈類型", + "b8": "提幣地址", + "b9": "請輸入地址", + "c0": "數量", + "c1": "餘額", + "c2": "請輸入數量", + "c3": "全部", + "c4": "手續費", + "c5": "請仔細檢查並輸入正確的提幣錢包地址", + "c6": "發送不對應的數字貨幣到錢包地址會造成永久性的損失", + "c7": "提幣手續費將從提幣數量中扣除", + "c8": "提幣記錄", + "c9": "時間", + "d0": "狀態", + "d1": "審核中", + "d2": "成功", + "d3": "失敗", + "d4": "查看更多", + "d5": "提交成功,正在審核", + "d6": "編輯", + "d7": "添加", + "d8": "地址", + "d9": "請輸入或粘貼地址", + "e0": "備註", + "e1": "請輸入備註", + "e2": "請填寫地址", + "e3": "請填寫備註", + "e4": "操作成功", + "e5": "充幣", + "e6": "掃描上方二維碼獲取充幣地址", + "e7": "充幣地址", + "e8": "充幣數量", + "e9": "請輸入充幣數量", + "f0": "此地址是您最新的充值地址,當系統收到充值時,將進行自動入賬", + "f1": "轉賬需要由整個區塊鍊網絡進行確認,到達{num}個網絡確認時,您的{name}將被自動存入賬戶中", + "f2": "個網絡確認時,您的", + "f3": "請只發送{name}到此地址,發送其他數字貨幣到此地址會造成永久性的損失", + "f4": "充幣記錄" + }, + "auth": { + "a0": "身份認證", + "a1": "實名認證", + "a2": "未認證", + "a3": "已認證", + "a4": "高級認證", + "a5": "審核中", + "a6": "認證失敗", + "a7": "國籍", + "a8": "請選擇國籍", + "a9": "真實姓名", + "b0": "請輸入真實姓名", + "b1": "證件號碼", + "b2": "請輸入證件號碼", + "b3": "確認", + "b4": "認證成功", + "b5": "請上傳證件正面照片", + "b6": "請上傳證件背面", + "b7": "請上傳手持證件照", + "b8": "確保照片清晰無水印,且上半身完整", + "b9": "文件尺寸過大,不得超過", + "c0": "文件類型錯誤", + "c1": "上傳成功", + "c2": "請上傳證件背面照", + "c3": "請上傳證件正面照", + "c4": "上傳成功,請等待審核", + "c5": "出生日期", + "c6": "證件類型", + "c7": "居住地址", + "c8": "請輸入居住地址", + "c9": "電話號碼", + "d0": "請輸入電話號碼", + "d1": "駕駛證", + "d2": "護照", + "d3": "身份證", + "d4": "選擇日期", + "d5": "請選擇" + }, + "exchange": { + "a0": "幣幣", + "a1": "申購", + "a2": "合約", + "a3": "交易", + "a4": "當前委託", + "a5": "歷史委託", + "a6": "添加成功", + "a7": "取消成功", + "a8": "發行總量", + "a9": "流通總量", + "b0": "發行價格", + "b1": "發行時間", + "b2": "白皮書地址", + "b3": "官網地址", + "b4": "簡介", + "b5": "買", + "b6": "賣", + "b7": "委託價", + "b8": "類型", + "b9": "限價交易", + "c0": "市價交易", + "c1": "已成交", + "c2": "總計", + "c3": "買入", + "c4": "賣出", + "c5": "數量", + "c6": "在最佳市場價格成交", + "c7": "總價", + "c8": "可用數量", + "c9": "總值", + "d0": "登錄", + "d1": "分時圖", + "d2": "價格", + "d3": "最新成交", + "d4": "時間", + "d5": "方向", + "d6": "限價", + "d7": "市價", + "d8": "請輸入價格", + "d9": "請輸入數量", + "e0": "請輸入總價", + "e1": "下單成功", + "e2": "平均價格", + "e3": "最高", + "e4": "最低", + "e5": "量", + "e6": "買賣盤", + "e7": "幣種信息", + "e8": "分鐘", + "e9": "小時", + "f0": "天", + "f1": "週", + "f2": "月", + "f3": "買價", + "f4": "賣價", + "f5": "幣幣交易", + "f6": "請輸入搜索關鍵詞", + "f7": "交易對", + "f8": "最新價", + "f9": "漲跌幅", + "g0": "自選", + "g1": "我的委託", + "g2": "撤銷委託", + "g3": "操作", + "g4": "撤銷", + "g5": "是否撤銷當前委託", + "g6": "撤銷成功" + }, + "option": { + "a0": "期權", + "a1": "距離交割", + "a2": "看多", + "a3": "看空", + "a4": "收益率", + "a5": "購買", + "a6": "多", + "a7": "空", + "a8": "當前", + "a9": "下期", + "b0": "看平", + "b1": "漲幅選擇", + "b2": "收益率", + "b3": "購買數量", + "b4": "請輸入數量", + "b5": "餘額", + "b6": "盈虧", + "b7": "立即購買", + "b8": "漲", + "b9": "平", + "c0": "跌", + "c1": "購買成功", + "c2": "詳情", + "c3": "訂單號", + "c4": "開盤價", + "c5": "收盤價", + "c6": "買入時間", + "c7": "買入數量", + "c8": "購買類型", + "c9": "狀態", + "d0": "交割結果", + "d1": "結算數量", + "d2": "交割時間", + "d3": "查看更多", + "d4": "購買期權", + "d5": "等待交割", + "d6": "我的交割", + "d7": "交割記錄", + "d8": "分鐘", + "d9": "小時", + "e0": "天", + "e1": "週", + "e2": "月", + "e3": "方向", + "e4": "漲跌幅" + }, + "purchase": { + "a0": "發行價", + "a1": "申購幣種", + "a2": "預計上線時間", + "a3": "開始申購時間", + "a4": "結束申購時間", + "a5": "申購", + "a6": "請選擇申購幣種", + "a7": "購買數量", + "a8": "請輸入申購數量", + "a9": "全部", + "b0": "立即申購", + "b1": "申購週期", + "b2": "項目預熱", + "b3": "開始申購", + "b4": "結束申購", + "b5": "上市交易", + "b6": "項目詳情", + "b7": "是否使用", + "b8": "購買", + "b9": "申購成功" + }, + "reg": { + "a0": "手機註冊", + "a1": "郵箱註冊", + "a2": "手機", + "a3": "請輸入手機號", + "a4": "郵箱", + "a5": "請輸入郵箱號", + "a6": "驗證碼", + "a7": "請輸入驗證碼", + "a8": "密碼", + "a9": "請輸入密碼", + "b0": "確認密碼", + "b1": "請確認密碼", + "b2": "推薦人", + "b3": "請輸入推薦人", + "b4": "選填", + "b5": "您已同意", + "b6": "用戶協議", + "b7": "並了解我們的", + "b8": "隱私協議", + "b9": "註冊", + "c0": "已有賬號", + "c1": "立即登錄", + "c2": "請閱讀並同意協議", + "c3": "請填寫手機號", + "c4": "請填寫郵箱號", + "c5": "註冊成功", + "c6": "機構碼(必填)", + "c7": "請填寫機構碼", + "c8": "立即注册,开启您的加密货币之旅" + }, + "safe": { + "a0": "解綁", + "a1": "綁定", + "a2": "郵箱", + "a3": "郵箱號", + "a4": "請輸入郵箱號", + "a5": "郵箱驗證碼", + "a6": "請輸入驗證碼", + "a7": "驗證碼", + "a8": "解綁成功", + "a9": "綁定成功", + "b0": "忘記登錄密碼", + "b1": "賬號", + "b2": "請輸入手機", + "b3": "新密碼", + "b4": "請輸入新密碼", + "b5": "確認密碼", + "b6": "請確認密碼", + "b7": "確認修改", + "b8": "請輸入正確的手機或郵箱號", + "b9": "谷歌驗證器", + "c0": "操作方法:下載並打開谷歌驗證器,掃描下方二維碼或手動輸入秘鑰添加驗證令牌", + "c1": "複製密鑰", + "c2": "我已經妥善保存密鑰,丟失後將不可找回", + "c3": "下一步", + "c4": "短信驗證碼", + "c5": "谷歌驗證碼", + "c6": "確認綁定", + "c7": "安全中心", + "c8": "登錄密碼", + "c9": "修改", + "d0": "設置", + "d1": "交易密碼", + "d2": "手機", + "d3": "修改成功", + "d4": "手機號", + "d5": "請輸入手機號", + "d6": "請輸入短信驗證碼", + "d7": "關閉", + "d8": "開啟", + "d9": "驗證", + "e0": "短信", + "e1": "關閉成功", + "e2": "開啟成功", + "e3": "確認", + "e4": "設置成功", + "Remembered": "記住您的密碼?", + "e5": "找回密碼" + }, + "transfer": { + "a0": "劃轉記錄", + "a1": "成功", + "a2": "數量", + "a3": "方向", + "a4": "資金賬戶", + "a5": "合約賬戶", + "a6": "槓桿賬戶", + "a7": "理財賬戶", + "a8": "劃轉", + "a9": "從", + "b0": "至", + "b1": "劃轉幣種", + "b2": "餘額", + "b3": "全部", + "b4": "已劃轉" + }, + "notice": { + "a0": "詳情", + "a1": "消息通知", + "a2": "公告", + "a3": "消息" + }, + "invite": { + "a0": "邀請好友", + "a1": "合夥人", + "a2": "尊享交易返佣", + "a3": "普通用戶", + "a4": "我的身份", + "a5": "尊享身份", + "a6": "我的邀請碼", + "a7": "複製邀請二維碼", + "a8": "複製邀請鏈接", + "a9": "我的推廣", + "b0": "推廣總人數", + "b1": "人", + "b2": "總收益折合", + "b3": "推廣記錄", + "b4": "直接邀請", + "b5": "返佣記錄", + "b6": "等級", + "b7": "級別設定", + "b8": "晉升條件", + "b9": "分紅權益", + "c0": "暱稱", + "c1": "推廣人數", + "c2": "收益折合", + "c3": "邀請記錄", + "c4": "返佣記錄", + "c5": "等級權益說明", + "c6": "等級", + "c7": "權益", + "c8": "說明", + "c9": "我的權益" + }, + "help": { + "a0": "詳情", + "a1": "學院", + "a2": "分類", + "a3": "學院" + }, + "login": { + "a0": "郵箱號", + "a1": "請輸入郵箱號", + "a2": "密碼", + "a3": "請輸入密碼", + "a4": "登錄", + "a5": "忘記密碼", + "a6": "沒有賬號", + "a7": "立即註冊", + "a8": "手機", + "a9": "郵箱", + "b0": "完成", + "b1": "登陸賬號", + "b2": "立即登陸,開啟您的加密貨幣之旅", + "b3": "電子郵件", + "b4": "請輸入電子郵件" + }, + "contract": { + "a0": "開倉", + "a1": "持倉", + "a2": "委託", + "a3": "歷史", + "a4": "合約交易", + "a5": "開通成功", + "a6": "交易類型", + "a7": "已成交", + "a8": "委託總量", + "a9": "成交均價", + "b0": "委託價格", + "b1": "保證金", + "b2": "手續費", + "b3": "狀態", + "b4": "操作", + "b5": "撤單", + "b6": "已撤銷", + "b7": "未成交", + "b8": "部分成交", + "b9": "全部成交", + "c0": "開多", + "c1": "平空", + "c2": "開空", + "c3": "平多", + "c4": "溫馨提示", + "c5": "是否撤銷當前訂單", + "c6": "撤銷成功", + "c7": "盈虧", + "c8": "分享", + "c9": "委託詳情", + "d0": "暫無數據", + "d1": "價格", + "d2": "保證金", + "d3": "成交時間", + "d4": "用戶權益", + "d5": "未實現盈虧", + "d6": "風險率", + "d7": "市價", + "d8": "USDT", + "d9": "佔用保證金", + "e0": "看漲", + "e1": "可開多", + "e2": "看跌", + "e3": "可開空", + "e4": "可用", + "e5": "劃轉", + "e6": "資金費率", + "e7": "距離結算", + "e8": "多", + "e9": "開倉價", + "f0": "資金劃轉", + "f1": "計算器", + "f2": "關於合約", + "f3": "風險保障基金", + "f4": "資金費用歷史", + "f5": "普通委託", + "f6": "市價委託", + "f7": "是否以", + "f8": "的價格", + "f9": "倍槓桿開倉", + "g0": "開多", + "g1": "開空", + "g2": "委託成功", + "g3": "僅顯示當前合約", + "g4": "可平量", + "g5": "委託凍結", + "g6": "開倉平均價", + "g7": "結算基準價", + "g8": "預估強平價", + "g9": "已結算收益", + "h0": "收益率", + "h1": "止盈", + "h2": "止損", + "h3": "平倉", + "h4": "市價全平", + "h5": "止盈止損", + "h6": "平", + "h7": "請輸入平倉價格", + "h8": "限價", + "h9": "請輸入平倉數量", + "i0": "可平", + "i1": "開倉均價", + "i2": "最新成交價", + "i3": "請輸入價格", + "i4": "止盈", + "i5": "市價至", + "i6": "時將觸發止盈委託,成交後預計盈虧", + "i7": "止損", + "i8": "時將觸發止損委託,成交後預計盈虧", + "i9": "確定", + "j0": "平倉成功", + "j1": "是否市價全平", + "j2": "全平", + "j3": "成功", + "j4": "設置成功", + "j5": "神機妙算,無可匹敵", + "j6": "做", + "j7": "平倉價格", + "j8": "數字資產交易平台", + "j9": "當1遇上2 3的火熱飛升之路", + "k0": "開倉價格", + "k1": "最新價格", + "k2": "掃碼了解更多", + "k3": "結算盈虧", + "k4": "截圖成功,已保存到本地", + "k5": "截圖失敗", + "k6": "長按截圖", + "k7": "一鍵全平", + "k8": "一鍵反向", + "k9": "是否一鍵全平", + "l0": "全平成功", + "l1": "是否一鍵反向", + "l2": "反向成功", + "l3": "平空" + }, + "otc": { + "a0": "發布廣告", + "a1": "訂單", + "a2": "交易幣種", + "a3": "我的訂單", + "a4": "我的廣告", + "a5": "購買", + "a6": "出售", + "a7": "總數", + "a8": "剩餘", + "a9": "限量", + "b0": "單價", + "b1": "支付方式", + "b2": "操作", + "b3": "總量", + "b4": "請選擇支付方式", + "b5": "請輸入數量", + "b6": "下單", + "b7": "支付寶", + "b8": "微信", + "b9": "銀行卡", + "c0": "下單成功", + "c1": "狀態", + "c2": "廣告編號", + "c3": "總價", + "c4": "數量", + "c5": "發佈時間", + "c6": "下架", + "c7": "已撤銷", + "c8": "交易中", + "c9": "已完成", + "d0": "溫馨提示", + "d1": "是否下架當前廣告", + "d2": "確定", + "d3": "取消", + "d4": "撤銷成功", + "d5": "法幣賬戶", + "d6": "凍結", + "d7": "支付寶賬號", + "d8": "請輸入賬號", + "d9": "姓名", + "e0": "請輸入姓名", + "e1": "付款碼", + "e2": "綁定", + "e3": "微信賬號", + "e4": "銀行名稱", + "e5": "請輸入銀行名稱", + "e6": "開戶支行", + "e7": "請輸入開戶支行", + "e8": "銀行卡號", + "e9": "請輸入銀行卡號", + "f0": "編輯成功", + "f1": "添加成功", + "f2": "賣出", + "f3": "買入", + "f4": "訂單詳情", + "f5": "訂單號", + "f6": "賬號", + "f7": "開戶銀行", + "f8": "剩餘時間", + "f9": "分", + "g0": "秒", + "g1": "上傳支付憑證", + "g2": "確認付款", + "g3": "取消訂單", + "g4": "確認收款", + "g5": "未到賬", + "g6": "是否取消當前訂單", + "g7": "訂單已取消", + "g8": "確認當前已付款", + "g9": "操作成功", + "h0": "確認收款後將掛賣資產將自動劃轉", + "h1": "確認未收到款項後,此訂單將自動進入申訴", + "h2": "出售訂單", + "h3": "購買訂單", + "h4": "廣告購買訂單", + "h5": "廣告出售訂單", + "h6": "時間", + "h7": "詳情", + "h8": "全部", + "h9": "已關閉", + "i0": "待支付", + "i1": "待確認", + "i2": "申訴中", + "i3": "廣告類型", + "i4": "請選擇交易類型", + "i5": "請選擇交易幣種", + "i6": "價格", + "i7": "請輸入價格", + "i8": "最低價", + "i9": "請輸入最低價", + "j0": "最高價", + "j1": "請輸入最高價", + "j2": "備註", + "j3": "請輸入備註", + "j4": "發布", + "j5": "發布成功", + "j6": "收款管道", + "j7": "最低量", + "j8": "最高量", + "j9": "請輸入最低交易量", + "k0": "請輸入最高交易量" + }, + "first": { + "a0": "去實名", + "a1": "關於我們", + "a2": "歡迎您!", + "a3": "止盈止損設定", + "a4": "以當前最新價交易", + "a5": "持有倉位", + "a6": "訂單管理", + "a7": "全部委託", + "a8": "歷史記錄", + "a9": "倍數", + "b0": "確定要登出嗎?", + "b1": "登入或注册", + "b2": "Hi,歡迎使用Moabcoin", + "b3": "量", + "b4": "現貨指數", + "b5": "合約指數", + "b6": "支持多種方式購買", + "b7": "快捷買幣", + "b8": "永續", + "b9": "當前地區暫未開放", + "c0": "買入", + "c1": "賣出", + "c2": "時間", + "c3": "總價", + "c4": "數量", + "c5": "最新價", + "c6": "擔保資產", + "c7": "成交量" + }, + "recharge": { + "a0": "切換幣種", + "a1": "*改地址只能接收", + "a2": "的資產,如果充值其他幣種,將無法找回!", + "a3": "推薦使用ERC20進行收款", + "a4": "複製地址", + "a5": "*轉帳前請務必確認地址及資訊無誤!一旦轉出,不可撤回!", + "a6": "請重新生成" + }, + "currency": { + "a0": "法幣交易", + "a1": "我要買", + "a2": "我要賣", + "a3": "一鍵買幣", + "a4": "一鍵賣幣", + "a5": "按數量購買", + "a6": "按金額購買", + "a55": "按數量出售", + "a66": "按金額出售", + "a7": "請輸入購買數量", + "a8": "請輸入購買金額", + "a9": "請輸入出售數量", + "b0": "請輸入出售金額", + "b1": "單價", + "b2": "0手續費購買", + "b3": "0手續費出售", + "b4": "可用餘額不足", + "b5": "請先完成高級認證", + "b6": "去認證", + "b7": "確認購買", + "b8": "確認出售" + }, + "shou": { + "a0": "向賬戶充值", + "a1": "將加密貨幣資金添加到您的錢包", + "a2": "並立即開始交易", + "a3": "立即充值", + "a4": "全球數字資產交易平臺", + "a5": "讓加密資產交易更簡單", + "a6": "立即注冊", + "a7": "數字資產行情速遞", + "a8": "市場趨勢", + "a9": "幣種", + "a10": "最新價(USD)", + "a11": "24h漲幅", + "a12": "24h成交量", + "a13": "Top 10", + "a14": "5 million+", + "a15": "< 0.10%", + "a16": "200+", + "a17": "Global Ranking", + "a18": "users trust us", + "a19": "Ultra-Low Fees", + "a20": "Countries", + "a21": "多終端支持", + "a22": "隨時隨地交易數字資產", + "a23": "支持豐富的資產種類,幣種信息一應俱全", + "a24": "APP Store", + "a25": "Android APK", + "a26": "掃碼下載APP", + "a27": "iOS & Android", + "a28": "為何選擇xuscoin.com?", + "a29": "竭力為多個國家提供數字資產交易服務", + "a30": "簡單便捷交易加密資產", + "a31": "產品簡單易懂、交易流程便捷,一站式區塊鏈資產服務平臺", + "a32": "以用戶體驗為本,提供愉悅的加密服務體驗", + "a33": "服務全球多語言地區,成爲所有用戶進入加密世界的網關", + "a34": "安全穩定零事故", + "a35": "多重安全策略保障、100%備用金保證,成立至今未發生安全事故", + "a36": "最優的交易費率", + "a37": "優惠的交易費率,富有競爭力的VIP權益,享受最有品質的服務", + "a38": "新手指引", + "a39": "快速瞭解數字資產交易流程", + "a40": "立即賺取收益", + "a41": "點擊前往", + "a42": "XUScoin 加密貨幣交易平台 - 為每個人而設計", + "a43": "開啟加密之旅" + }, + "homeNewText": { + "aa3": "立即註冊,開啟加密貨幣之旅", + "aa4": "立即開始交易", + "aa7": "幣種", + "aa8": "登陸/註冊", + "bb1": "最新價(USD)", + "bb2": "24h漲幅", + + "bb4": "金錢的未來就在這裡", + "bb5": "我們是投資者購買、銷售和管理加密貨幣最值得信賴的地方", + "bb6": "通過電子郵件註冊", + "bb7": "輕鬆捕捉", + "bb8": "交易機會", + "bb9": "方便使用加密貨幣的", + "bb10": "工具", + "bb11": "我們定期致力於更新現有功能並實現新的服務功能。", + "bb12": "商業加密處理", + "bb13": "提供一種可靠的方式來方便地接受來自世界各地最流行的加密貨幣的付款。", + "bb14": "無限制的加密貨幣兌換", + "bb15": "以簡單、安全的方式兌換比特幣、泰達幣、萊特幣、以太坊以及 50 多種其他幣。", + "bb16": "優化使用者體驗", + "bb17": "優化使用者體驗:推出高品質的新產品,簡化操作並提升易用性。", + "bb18": "閃充閃提", + "bb19": "我們的合作夥伴", + "bb20": "遍佈全球", + "bb21": "我們的合作夥伴是市場領導者,他們幫助我們提供最好的加密貨幣解決方案。", + "bb22": "新手指南", + "bb23": "建立一個{name}帳號", + "bb24": "立即註冊,開啟您的交易旅程!", + "bb25": "註冊", + "bb26": "存款", + "bb27": "快速儲值,輕鬆入帳!", + "bb28": "儲值", + "bb29": "開始交易", + "bb30": "開始交易,享受無限可能!", + "bb31": "幣幣交易", + "bb32": "隨時隨地 開啟交易", + "bb33": "掃描下載", + "bb34": "立即開始您的加密之旅!", + "bb35": "只需10秒,即可註冊開啟交易", + "bb36": "免費註冊", + "bb37": "儲值提現最快3分鐘完成。", + "bb38": "立即註冊", + "bb39": "立即交易", + "bb40": "{name},隨時隨地交易", + "bb41": "掃碼下載 {name} APP", + "bb42": "掃碼下載APP" + } +} \ No newline at end of file diff --git a/js_sdk/Sansnn-uQRCode/uqrcode.js b/js_sdk/Sansnn-uQRCode/uqrcode.js new file mode 100644 index 0000000..22a947d --- /dev/null +++ b/js_sdk/Sansnn-uQRCode/uqrcode.js @@ -0,0 +1,1382 @@ +//--------------------------------------------------------------------- +// github https://github.com/Sansnn/uQRCode +//--------------------------------------------------------------------- + +let uQRCode = {}; + +(function() { + //--------------------------------------------------------------------- + // QRCode for JavaScript + // + // Copyright (c) 2009 Kazuhiko Arase + // + // URL: http://www.d-project.com/ + // + // Licensed under the MIT license: + // http://www.opensource.org/licenses/mit-license.php + // + // The word "QR Code" is registered trademark of + // DENSO WAVE INCORPORATED + // http://www.denso-wave.com/qrcode/faqpatent-e.html + // + //--------------------------------------------------------------------- + + //--------------------------------------------------------------------- + // QR8bitByte + //--------------------------------------------------------------------- + + function QR8bitByte(data) { + this.mode = QRMode.MODE_8BIT_BYTE; + this.data = data; + } + + QR8bitByte.prototype = { + + getLength: function(buffer) { + return this.data.length; + }, + + write: function(buffer) { + for (var i = 0; i < this.data.length; i++) { + // not JIS ... + buffer.put(this.data.charCodeAt(i), 8); + } + } + }; + + //--------------------------------------------------------------------- + // QRCode + //--------------------------------------------------------------------- + + function QRCode(typeNumber, errorCorrectLevel) { + this.typeNumber = typeNumber; + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; + this.moduleCount = 0; + this.dataCache = null; + this.dataList = new Array(); + } + + QRCode.prototype = { + + addData: function(data) { + var newData = new QR8bitByte(data); + this.dataList.push(newData); + this.dataCache = null; + }, + + isDark: function(row, col) { + if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) { + throw new Error(row + "," + col); + } + return this.modules[row][col]; + }, + + getModuleCount: function() { + return this.moduleCount; + }, + + make: function() { + // Calculate automatically typeNumber if provided is < 1 + if (this.typeNumber < 1) { + var typeNumber = 1; + for (typeNumber = 1; typeNumber < 40; typeNumber++) { + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel); + + var buffer = new QRBitBuffer(); + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + + for (var i = 0; i < this.dataList.length; i++) { + var data = this.dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber)); + data.write(buffer); + } + if (buffer.getLengthInBits() <= totalDataCount * 8) + break; + } + this.typeNumber = typeNumber; + } + this.makeImpl(false, this.getBestMaskPattern()); + }, + + makeImpl: function(test, maskPattern) { + + this.moduleCount = this.typeNumber * 4 + 17; + this.modules = new Array(this.moduleCount); + + for (var row = 0; row < this.moduleCount; row++) { + + this.modules[row] = new Array(this.moduleCount); + + for (var col = 0; col < this.moduleCount; col++) { + this.modules[row][col] = null; //(col + row) % 3; + } + } + + this.setupPositionProbePattern(0, 0); + this.setupPositionProbePattern(this.moduleCount - 7, 0); + this.setupPositionProbePattern(0, this.moduleCount - 7); + this.setupPositionAdjustPattern(); + this.setupTimingPattern(); + this.setupTypeInfo(test, maskPattern); + + if (this.typeNumber >= 7) { + this.setupTypeNumber(test); + } + + if (this.dataCache == null) { + this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList); + } + + this.mapData(this.dataCache, maskPattern); + }, + + setupPositionProbePattern: function(row, col) { + + for (var r = -1; r <= 7; r++) { + + if (row + r <= -1 || this.moduleCount <= row + r) continue; + + for (var c = -1; c <= 7; c++) { + + if (col + c <= -1 || this.moduleCount <= col + c) continue; + + if ((0 <= r && r <= 6 && (c == 0 || c == 6)) || + (0 <= c && c <= 6 && (r == 0 || r == 6)) || + (2 <= r && r <= 4 && 2 <= c && c <= 4)) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + }, + + getBestMaskPattern: function() { + + var minLostPoint = 0; + var pattern = 0; + + for (var i = 0; i < 8; i++) { + + this.makeImpl(true, i); + + var lostPoint = QRUtil.getLostPoint(this); + + if (i == 0 || minLostPoint > lostPoint) { + minLostPoint = lostPoint; + pattern = i; + } + } + + return pattern; + }, + + createMovieClip: function(target_mc, instance_name, depth) { + + var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth); + var cs = 1; + + this.make(); + + for (var row = 0; row < this.modules.length; row++) { + + var y = row * cs; + + for (var col = 0; col < this.modules[row].length; col++) { + + var x = col * cs; + var dark = this.modules[row][col]; + + if (dark) { + qr_mc.beginFill(0, 100); + qr_mc.moveTo(x, y); + qr_mc.lineTo(x + cs, y); + qr_mc.lineTo(x + cs, y + cs); + qr_mc.lineTo(x, y + cs); + qr_mc.endFill(); + } + } + } + + return qr_mc; + }, + + setupTimingPattern: function() { + + for (var r = 8; r < this.moduleCount - 8; r++) { + if (this.modules[r][6] != null) { + continue; + } + this.modules[r][6] = (r % 2 == 0); + } + + for (var c = 8; c < this.moduleCount - 8; c++) { + if (this.modules[6][c] != null) { + continue; + } + this.modules[6][c] = (c % 2 == 0); + } + }, + + setupPositionAdjustPattern: function() { + + var pos = QRUtil.getPatternPosition(this.typeNumber); + + for (var i = 0; i < pos.length; i++) { + + for (var j = 0; j < pos.length; j++) { + + var row = pos[i]; + var col = pos[j]; + + if (this.modules[row][col] != null) { + continue; + } + + for (var r = -2; r <= 2; r++) { + + for (var c = -2; c <= 2; c++) { + + if (r == -2 || r == 2 || c == -2 || c == 2 || + (r == 0 && c == 0)) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + } + } + }, + + setupTypeNumber: function(test) { + + var bits = QRUtil.getBCHTypeNumber(this.typeNumber); + + for (var i = 0; i < 18; i++) { + var mod = (!test && ((bits >> i) & 1) == 1); + this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod; + } + + for (var i = 0; i < 18; i++) { + var mod = (!test && ((bits >> i) & 1) == 1); + this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod; + } + }, + + setupTypeInfo: function(test, maskPattern) { + + var data = (this.errorCorrectLevel << 3) | maskPattern; + var bits = QRUtil.getBCHTypeInfo(data); + + // vertical + for (var i = 0; i < 15; i++) { + + var mod = (!test && ((bits >> i) & 1) == 1); + + if (i < 6) { + this.modules[i][8] = mod; + } else if (i < 8) { + this.modules[i + 1][8] = mod; + } else { + this.modules[this.moduleCount - 15 + i][8] = mod; + } + } + + // horizontal + for (var i = 0; i < 15; i++) { + + var mod = (!test && ((bits >> i) & 1) == 1); + + if (i < 8) { + this.modules[8][this.moduleCount - i - 1] = mod; + } else if (i < 9) { + this.modules[8][15 - i - 1 + 1] = mod; + } else { + this.modules[8][15 - i - 1] = mod; + } + } + + // fixed module + this.modules[this.moduleCount - 8][8] = (!test); + + }, + + mapData: function(data, maskPattern) { + + var inc = -1; + var row = this.moduleCount - 1; + var bitIndex = 7; + var byteIndex = 0; + + for (var col = this.moduleCount - 1; col > 0; col -= 2) { + + if (col == 6) col--; + + while (true) { + + for (var c = 0; c < 2; c++) { + + if (this.modules[row][col - c] == null) { + + var dark = false; + + if (byteIndex < data.length) { + dark = (((data[byteIndex] >>> bitIndex) & 1) == 1); + } + + var mask = QRUtil.getMask(maskPattern, row, col - c); + + if (mask) { + dark = !dark; + } + + this.modules[row][col - c] = dark; + bitIndex--; + + if (bitIndex == -1) { + byteIndex++; + bitIndex = 7; + } + } + } + + row += inc; + + if (row < 0 || this.moduleCount <= row) { + row -= inc; + inc = -inc; + break; + } + } + } + + } + + }; + + QRCode.PAD0 = 0xEC; + QRCode.PAD1 = 0x11; + + QRCode.createData = function(typeNumber, errorCorrectLevel, dataList) { + + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); + + var buffer = new QRBitBuffer(); + + for (var i = 0; i < dataList.length; i++) { + var data = dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber)); + data.write(buffer); + } + + // calc num max data. + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + + if (buffer.getLengthInBits() > totalDataCount * 8) { + throw new Error("code length overflow. (" + + buffer.getLengthInBits() + + ">" + + totalDataCount * 8 + + ")"); + } + + // end code + if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { + buffer.put(0, 4); + } + + // padding + while (buffer.getLengthInBits() % 8 != 0) { + buffer.putBit(false); + } + + // padding + while (true) { + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCode.PAD0, 8); + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCode.PAD1, 8); + } + + return QRCode.createBytes(buffer, rsBlocks); + } + + QRCode.createBytes = function(buffer, rsBlocks) { + + var offset = 0; + + var maxDcCount = 0; + var maxEcCount = 0; + + var dcdata = new Array(rsBlocks.length); + var ecdata = new Array(rsBlocks.length); + + for (var r = 0; r < rsBlocks.length; r++) { + + var dcCount = rsBlocks[r].dataCount; + var ecCount = rsBlocks[r].totalCount - dcCount; + + maxDcCount = Math.max(maxDcCount, dcCount); + maxEcCount = Math.max(maxEcCount, ecCount); + + dcdata[r] = new Array(dcCount); + + for (var i = 0; i < dcdata[r].length; i++) { + dcdata[r][i] = 0xff & buffer.buffer[i + offset]; + } + offset += dcCount; + + var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); + var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1); + + var modPoly = rawPoly.mod(rsPoly); + ecdata[r] = new Array(rsPoly.getLength() - 1); + for (var i = 0; i < ecdata[r].length; i++) { + var modIndex = i + modPoly.getLength() - ecdata[r].length; + ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0; + } + + } + + var totalCodeCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalCodeCount += rsBlocks[i].totalCount; + } + + var data = new Array(totalCodeCount); + var index = 0; + + for (var i = 0; i < maxDcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < dcdata[r].length) { + data[index++] = dcdata[r][i]; + } + } + } + + for (var i = 0; i < maxEcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < ecdata[r].length) { + data[index++] = ecdata[r][i]; + } + } + } + + return data; + + } + + //--------------------------------------------------------------------- + // QRMode + //--------------------------------------------------------------------- + + var QRMode = { + MODE_NUMBER: 1 << 0, + MODE_ALPHA_NUM: 1 << 1, + MODE_8BIT_BYTE: 1 << 2, + MODE_KANJI: 1 << 3 + }; + + //--------------------------------------------------------------------- + // QRErrorCorrectLevel + //--------------------------------------------------------------------- + + var QRErrorCorrectLevel = { + L: 1, + M: 0, + Q: 3, + H: 2 + }; + + //--------------------------------------------------------------------- + // QRMaskPattern + //--------------------------------------------------------------------- + + var QRMaskPattern = { + PATTERN000: 0, + PATTERN001: 1, + PATTERN010: 2, + PATTERN011: 3, + PATTERN100: 4, + PATTERN101: 5, + PATTERN110: 6, + PATTERN111: 7 + }; + + //--------------------------------------------------------------------- + // QRUtil + //--------------------------------------------------------------------- + + var QRUtil = { + + PATTERN_POSITION_TABLE: [ + [], + [6, 18], + [6, 22], + [6, 26], + [6, 30], + [6, 34], + [6, 22, 38], + [6, 24, 42], + [6, 26, 46], + [6, 28, 50], + [6, 30, 54], + [6, 32, 58], + [6, 34, 62], + [6, 26, 46, 66], + [6, 26, 48, 70], + [6, 26, 50, 74], + [6, 30, 54, 78], + [6, 30, 56, 82], + [6, 30, 58, 86], + [6, 34, 62, 90], + [6, 28, 50, 72, 94], + [6, 26, 50, 74, 98], + [6, 30, 54, 78, 102], + [6, 28, 54, 80, 106], + [6, 32, 58, 84, 110], + [6, 30, 58, 86, 114], + [6, 34, 62, 90, 118], + [6, 26, 50, 74, 98, 122], + [6, 30, 54, 78, 102, 126], + [6, 26, 52, 78, 104, 130], + [6, 30, 56, 82, 108, 134], + [6, 34, 60, 86, 112, 138], + [6, 30, 58, 86, 114, 142], + [6, 34, 62, 90, 118, 146], + [6, 30, 54, 78, 102, 126, 150], + [6, 24, 50, 76, 102, 128, 154], + [6, 28, 54, 80, 106, 132, 158], + [6, 32, 58, 84, 110, 136, 162], + [6, 26, 54, 82, 110, 138, 166], + [6, 30, 58, 86, 114, 142, 170] + ], + + G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0), + G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0), + G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1), + + getBCHTypeInfo: function(data) { + var d = data << 10; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) { + d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15))); + } + return ((data << 10) | d) ^ QRUtil.G15_MASK; + }, + + getBCHTypeNumber: function(data) { + var d = data << 12; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) { + d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18))); + } + return (data << 12) | d; + }, + + getBCHDigit: function(data) { + + var digit = 0; + + while (data != 0) { + digit++; + data >>>= 1; + } + + return digit; + }, + + getPatternPosition: function(typeNumber) { + return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]; + }, + + getMask: function(maskPattern, i, j) { + + switch (maskPattern) { + + case QRMaskPattern.PATTERN000: + return (i + j) % 2 == 0; + case QRMaskPattern.PATTERN001: + return i % 2 == 0; + case QRMaskPattern.PATTERN010: + return j % 3 == 0; + case QRMaskPattern.PATTERN011: + return (i + j) % 3 == 0; + case QRMaskPattern.PATTERN100: + return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0; + case QRMaskPattern.PATTERN101: + return (i * j) % 2 + (i * j) % 3 == 0; + case QRMaskPattern.PATTERN110: + return ((i * j) % 2 + (i * j) % 3) % 2 == 0; + case QRMaskPattern.PATTERN111: + return ((i * j) % 3 + (i + j) % 2) % 2 == 0; + + default: + throw new Error("bad maskPattern:" + maskPattern); + } + }, + + getErrorCorrectPolynomial: function(errorCorrectLength) { + + var a = new QRPolynomial([1], 0); + + for (var i = 0; i < errorCorrectLength; i++) { + a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0)); + } + + return a; + }, + + getLengthInBits: function(mode, type) { + + if (1 <= type && type < 10) { + + // 1 - 9 + + switch (mode) { + case QRMode.MODE_NUMBER: + return 10; + case QRMode.MODE_ALPHA_NUM: + return 9; + case QRMode.MODE_8BIT_BYTE: + return 8; + case QRMode.MODE_KANJI: + return 8; + default: + throw new Error("mode:" + mode); + } + + } else if (type < 27) { + + // 10 - 26 + + switch (mode) { + case QRMode.MODE_NUMBER: + return 12; + case QRMode.MODE_ALPHA_NUM: + return 11; + case QRMode.MODE_8BIT_BYTE: + return 16; + case QRMode.MODE_KANJI: + return 10; + default: + throw new Error("mode:" + mode); + } + + } else if (type < 41) { + + // 27 - 40 + + switch (mode) { + case QRMode.MODE_NUMBER: + return 14; + case QRMode.MODE_ALPHA_NUM: + return 13; + case QRMode.MODE_8BIT_BYTE: + return 16; + case QRMode.MODE_KANJI: + return 12; + default: + throw new Error("mode:" + mode); + } + + } else { + throw new Error("type:" + type); + } + }, + + getLostPoint: function(qrCode) { + + var moduleCount = qrCode.getModuleCount(); + + var lostPoint = 0; + + // LEVEL1 + + for (var row = 0; row < moduleCount; row++) { + + for (var col = 0; col < moduleCount; col++) { + + var sameCount = 0; + var dark = qrCode.isDark(row, col); + + for (var r = -1; r <= 1; r++) { + + if (row + r < 0 || moduleCount <= row + r) { + continue; + } + + for (var c = -1; c <= 1; c++) { + + if (col + c < 0 || moduleCount <= col + c) { + continue; + } + + if (r == 0 && c == 0) { + continue; + } + + if (dark == qrCode.isDark(row + r, col + c)) { + sameCount++; + } + } + } + + if (sameCount > 5) { + lostPoint += (3 + sameCount - 5); + } + } + } + + // LEVEL2 + + for (var row = 0; row < moduleCount - 1; row++) { + for (var col = 0; col < moduleCount - 1; col++) { + var count = 0; + if (qrCode.isDark(row, col)) count++; + if (qrCode.isDark(row + 1, col)) count++; + if (qrCode.isDark(row, col + 1)) count++; + if (qrCode.isDark(row + 1, col + 1)) count++; + if (count == 0 || count == 4) { + lostPoint += 3; + } + } + } + + // LEVEL3 + + for (var row = 0; row < moduleCount; row++) { + for (var col = 0; col < moduleCount - 6; col++) { + if (qrCode.isDark(row, col) && + !qrCode.isDark(row, col + 1) && + qrCode.isDark(row, col + 2) && + qrCode.isDark(row, col + 3) && + qrCode.isDark(row, col + 4) && + !qrCode.isDark(row, col + 5) && + qrCode.isDark(row, col + 6)) { + lostPoint += 40; + } + } + } + + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount - 6; row++) { + if (qrCode.isDark(row, col) && + !qrCode.isDark(row + 1, col) && + qrCode.isDark(row + 2, col) && + qrCode.isDark(row + 3, col) && + qrCode.isDark(row + 4, col) && + !qrCode.isDark(row + 5, col) && + qrCode.isDark(row + 6, col)) { + lostPoint += 40; + } + } + } + + // LEVEL4 + + var darkCount = 0; + + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount; row++) { + if (qrCode.isDark(row, col)) { + darkCount++; + } + } + } + + var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; + lostPoint += ratio * 10; + + return lostPoint; + } + + }; + + + //--------------------------------------------------------------------- + // QRMath + //--------------------------------------------------------------------- + + var QRMath = { + + glog: function(n) { + + if (n < 1) { + throw new Error("glog(" + n + ")"); + } + + return QRMath.LOG_TABLE[n]; + }, + + gexp: function(n) { + + while (n < 0) { + n += 255; + } + + while (n >= 256) { + n -= 255; + } + + return QRMath.EXP_TABLE[n]; + }, + + EXP_TABLE: new Array(256), + + LOG_TABLE: new Array(256) + + }; + + for (var i = 0; i < 8; i++) { + QRMath.EXP_TABLE[i] = 1 << i; + } + for (var i = 8; i < 256; i++) { + QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ + QRMath.EXP_TABLE[i - 5] ^ + QRMath.EXP_TABLE[i - 6] ^ + QRMath.EXP_TABLE[i - 8]; + } + for (var i = 0; i < 255; i++) { + QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i; + } + + //--------------------------------------------------------------------- + // QRPolynomial + //--------------------------------------------------------------------- + + function QRPolynomial(num, shift) { + + if (num.length == undefined) { + throw new Error(num.length + "/" + shift); + } + + var offset = 0; + + while (offset < num.length && num[offset] == 0) { + offset++; + } + + this.num = new Array(num.length - offset + shift); + for (var i = 0; i < num.length - offset; i++) { + this.num[i] = num[i + offset]; + } + } + + QRPolynomial.prototype = { + + get: function(index) { + return this.num[index]; + }, + + getLength: function() { + return this.num.length; + }, + + multiply: function(e) { + + var num = new Array(this.getLength() + e.getLength() - 1); + + for (var i = 0; i < this.getLength(); i++) { + for (var j = 0; j < e.getLength(); j++) { + num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j))); + } + } + + return new QRPolynomial(num, 0); + }, + + mod: function(e) { + + if (this.getLength() - e.getLength() < 0) { + return this; + } + + var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0)); + + var num = new Array(this.getLength()); + + for (var i = 0; i < this.getLength(); i++) { + num[i] = this.get(i); + } + + for (var i = 0; i < e.getLength(); i++) { + num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio); + } + + // recursive call + return new QRPolynomial(num, 0).mod(e); + } + }; + + //--------------------------------------------------------------------- + // QRRSBlock + //--------------------------------------------------------------------- + + function QRRSBlock(totalCount, dataCount) { + this.totalCount = totalCount; + this.dataCount = dataCount; + } + + QRRSBlock.RS_BLOCK_TABLE = [ + + // L + // M + // Q + // H + + // 1 + [1, 26, 19], + [1, 26, 16], + [1, 26, 13], + [1, 26, 9], + + // 2 + [1, 44, 34], + [1, 44, 28], + [1, 44, 22], + [1, 44, 16], + + // 3 + [1, 70, 55], + [1, 70, 44], + [2, 35, 17], + [2, 35, 13], + + // 4 + [1, 100, 80], + [2, 50, 32], + [2, 50, 24], + [4, 25, 9], + + // 5 + [1, 134, 108], + [2, 67, 43], + [2, 33, 15, 2, 34, 16], + [2, 33, 11, 2, 34, 12], + + // 6 + [2, 86, 68], + [4, 43, 27], + [4, 43, 19], + [4, 43, 15], + + // 7 + [2, 98, 78], + [4, 49, 31], + [2, 32, 14, 4, 33, 15], + [4, 39, 13, 1, 40, 14], + + // 8 + [2, 121, 97], + [2, 60, 38, 2, 61, 39], + [4, 40, 18, 2, 41, 19], + [4, 40, 14, 2, 41, 15], + + // 9 + [2, 146, 116], + [3, 58, 36, 2, 59, 37], + [4, 36, 16, 4, 37, 17], + [4, 36, 12, 4, 37, 13], + + // 10 + [2, 86, 68, 2, 87, 69], + [4, 69, 43, 1, 70, 44], + [6, 43, 19, 2, 44, 20], + [6, 43, 15, 2, 44, 16], + + // 11 + [4, 101, 81], + [1, 80, 50, 4, 81, 51], + [4, 50, 22, 4, 51, 23], + [3, 36, 12, 8, 37, 13], + + // 12 + [2, 116, 92, 2, 117, 93], + [6, 58, 36, 2, 59, 37], + [4, 46, 20, 6, 47, 21], + [7, 42, 14, 4, 43, 15], + + // 13 + [4, 133, 107], + [8, 59, 37, 1, 60, 38], + [8, 44, 20, 4, 45, 21], + [12, 33, 11, 4, 34, 12], + + // 14 + [3, 145, 115, 1, 146, 116], + [4, 64, 40, 5, 65, 41], + [11, 36, 16, 5, 37, 17], + [11, 36, 12, 5, 37, 13], + + // 15 + [5, 109, 87, 1, 110, 88], + [5, 65, 41, 5, 66, 42], + [5, 54, 24, 7, 55, 25], + [11, 36, 12], + + // 16 + [5, 122, 98, 1, 123, 99], + [7, 73, 45, 3, 74, 46], + [15, 43, 19, 2, 44, 20], + [3, 45, 15, 13, 46, 16], + + // 17 + [1, 135, 107, 5, 136, 108], + [10, 74, 46, 1, 75, 47], + [1, 50, 22, 15, 51, 23], + [2, 42, 14, 17, 43, 15], + + // 18 + [5, 150, 120, 1, 151, 121], + [9, 69, 43, 4, 70, 44], + [17, 50, 22, 1, 51, 23], + [2, 42, 14, 19, 43, 15], + + // 19 + [3, 141, 113, 4, 142, 114], + [3, 70, 44, 11, 71, 45], + [17, 47, 21, 4, 48, 22], + [9, 39, 13, 16, 40, 14], + + // 20 + [3, 135, 107, 5, 136, 108], + [3, 67, 41, 13, 68, 42], + [15, 54, 24, 5, 55, 25], + [15, 43, 15, 10, 44, 16], + + // 21 + [4, 144, 116, 4, 145, 117], + [17, 68, 42], + [17, 50, 22, 6, 51, 23], + [19, 46, 16, 6, 47, 17], + + // 22 + [2, 139, 111, 7, 140, 112], + [17, 74, 46], + [7, 54, 24, 16, 55, 25], + [34, 37, 13], + + // 23 + [4, 151, 121, 5, 152, 122], + [4, 75, 47, 14, 76, 48], + [11, 54, 24, 14, 55, 25], + [16, 45, 15, 14, 46, 16], + + // 24 + [6, 147, 117, 4, 148, 118], + [6, 73, 45, 14, 74, 46], + [11, 54, 24, 16, 55, 25], + [30, 46, 16, 2, 47, 17], + + // 25 + [8, 132, 106, 4, 133, 107], + [8, 75, 47, 13, 76, 48], + [7, 54, 24, 22, 55, 25], + [22, 45, 15, 13, 46, 16], + + // 26 + [10, 142, 114, 2, 143, 115], + [19, 74, 46, 4, 75, 47], + [28, 50, 22, 6, 51, 23], + [33, 46, 16, 4, 47, 17], + + // 27 + [8, 152, 122, 4, 153, 123], + [22, 73, 45, 3, 74, 46], + [8, 53, 23, 26, 54, 24], + [12, 45, 15, 28, 46, 16], + + // 28 + [3, 147, 117, 10, 148, 118], + [3, 73, 45, 23, 74, 46], + [4, 54, 24, 31, 55, 25], + [11, 45, 15, 31, 46, 16], + + // 29 + [7, 146, 116, 7, 147, 117], + [21, 73, 45, 7, 74, 46], + [1, 53, 23, 37, 54, 24], + [19, 45, 15, 26, 46, 16], + + // 30 + [5, 145, 115, 10, 146, 116], + [19, 75, 47, 10, 76, 48], + [15, 54, 24, 25, 55, 25], + [23, 45, 15, 25, 46, 16], + + // 31 + [13, 145, 115, 3, 146, 116], + [2, 74, 46, 29, 75, 47], + [42, 54, 24, 1, 55, 25], + [23, 45, 15, 28, 46, 16], + + // 32 + [17, 145, 115], + [10, 74, 46, 23, 75, 47], + [10, 54, 24, 35, 55, 25], + [19, 45, 15, 35, 46, 16], + + // 33 + [17, 145, 115, 1, 146, 116], + [14, 74, 46, 21, 75, 47], + [29, 54, 24, 19, 55, 25], + [11, 45, 15, 46, 46, 16], + + // 34 + [13, 145, 115, 6, 146, 116], + [14, 74, 46, 23, 75, 47], + [44, 54, 24, 7, 55, 25], + [59, 46, 16, 1, 47, 17], + + // 35 + [12, 151, 121, 7, 152, 122], + [12, 75, 47, 26, 76, 48], + [39, 54, 24, 14, 55, 25], + [22, 45, 15, 41, 46, 16], + + // 36 + [6, 151, 121, 14, 152, 122], + [6, 75, 47, 34, 76, 48], + [46, 54, 24, 10, 55, 25], + [2, 45, 15, 64, 46, 16], + + // 37 + [17, 152, 122, 4, 153, 123], + [29, 74, 46, 14, 75, 47], + [49, 54, 24, 10, 55, 25], + [24, 45, 15, 46, 46, 16], + + // 38 + [4, 152, 122, 18, 153, 123], + [13, 74, 46, 32, 75, 47], + [48, 54, 24, 14, 55, 25], + [42, 45, 15, 32, 46, 16], + + // 39 + [20, 147, 117, 4, 148, 118], + [40, 75, 47, 7, 76, 48], + [43, 54, 24, 22, 55, 25], + [10, 45, 15, 67, 46, 16], + + // 40 + [19, 148, 118, 6, 149, 119], + [18, 75, 47, 31, 76, 48], + [34, 54, 24, 34, 55, 25], + [20, 45, 15, 61, 46, 16] + ]; + + QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) { + + var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel); + + if (rsBlock == undefined) { + throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel); + } + + var length = rsBlock.length / 3; + + var list = new Array(); + + for (var i = 0; i < length; i++) { + + var count = rsBlock[i * 3 + 0]; + var totalCount = rsBlock[i * 3 + 1]; + var dataCount = rsBlock[i * 3 + 2]; + + for (var j = 0; j < count; j++) { + list.push(new QRRSBlock(totalCount, dataCount)); + } + } + + return list; + } + + QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) { + + switch (errorCorrectLevel) { + case QRErrorCorrectLevel.L: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; + case QRErrorCorrectLevel.M: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; + case QRErrorCorrectLevel.Q: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; + case QRErrorCorrectLevel.H: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; + default: + return undefined; + } + } + + //--------------------------------------------------------------------- + // QRBitBuffer + //--------------------------------------------------------------------- + + function QRBitBuffer() { + this.buffer = new Array(); + this.length = 0; + } + + QRBitBuffer.prototype = { + + get: function(index) { + var bufIndex = Math.floor(index / 8); + return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1; + }, + + put: function(num, length) { + for (var i = 0; i < length; i++) { + this.putBit(((num >>> (length - i - 1)) & 1) == 1); + } + }, + + getLengthInBits: function() { + return this.length; + }, + + putBit: function(bit) { + + var bufIndex = Math.floor(this.length / 8); + if (this.buffer.length <= bufIndex) { + this.buffer.push(0); + } + + if (bit) { + this.buffer[bufIndex] |= (0x80 >>> (this.length % 8)); + } + + this.length++; + } + }; + + //--------------------------------------------------------------------- + // Support Chinese + //--------------------------------------------------------------------- + function utf16To8(text) { + var result = ''; + var c; + for (var i = 0; i < text.length; i++) { + c = text.charCodeAt(i); + if (c >= 0x0001 && c <= 0x007F) { + result += text.charAt(i); + } else if (c > 0x07FF) { + result += String.fromCharCode(0xE0 | c >> 12 & 0x0F); + result += String.fromCharCode(0x80 | c >> 6 & 0x3F); + result += String.fromCharCode(0x80 | c >> 0 & 0x3F); + } else { + result += String.fromCharCode(0xC0 | c >> 6 & 0x1F); + result += String.fromCharCode(0x80 | c >> 0 & 0x3F); + } + } + return result; + } + + uQRCode = { + + errorCorrectLevel: QRErrorCorrectLevel, + + defaults: { + size: 354, + margin: 0, + backgroundColor: '#ffffff', + foregroundColor: '#000000', + fileType: 'png', // 'jpg', 'png' + errorCorrectLevel: QRErrorCorrectLevel.H, + typeNumber: -1 + }, + + make: function(options) { + var defaultOptions = { + canvasId: options.canvasId, + componentInstance: options.componentInstance, + text: options.text, + size: this.defaults.size, + margin: this.defaults.margin, + backgroundColor: this.defaults.backgroundColor, + foregroundColor: this.defaults.foregroundColor, + fileType: this.defaults.fileType, + errorCorrectLevel: this.defaults.errorCorrectLevel, + typeNumber: this.defaults.typeNumber + }; + if (options) { + for (var i in options) { + defaultOptions[i] = options[i]; + } + } + options = defaultOptions; + if (!options.canvasId) { + console.error('uQRCode: Please set canvasId!'); + return; + } + + function createCanvas() { + var qrcode = new QRCode(options.typeNumber, options.errorCorrectLevel); + qrcode.addData(utf16To8(options.text)); + qrcode.make(); + + var ctx = uni.createCanvasContext(options.canvasId, options.componentInstance); + ctx.setFillStyle(options.backgroundColor); + ctx.fillRect(0, 0, options.size, options.size); + + var tileW = (options.size - options.margin * 2) / qrcode.getModuleCount(); + var tileH = tileW; + + for (var row = 0; row < qrcode.getModuleCount(); row++) { + for (var col = 0; col < qrcode.getModuleCount(); col++) { + var style = qrcode.isDark(row, col) ? options.foregroundColor : options.backgroundColor; + ctx.setFillStyle(style); + var x = Math.round(col * tileW) + options.margin; + var y = Math.round(row * tileH) + options.margin; + var w = Math.ceil((col + 1) * tileW) - Math.floor(col * tileW); + var h = Math.ceil((row + 1) * tileW) - Math.floor(row * tileW); + ctx.fillRect(x, y, w, h); + } + } + + setTimeout(function() { + ctx.draw(false, (function() { + setTimeout(function() { + uni.canvasToTempFilePath({ + canvasId: options.canvasId, + fileType: options.fileType, + width: options.size, + height: options.size, + destWidth: options.size, + destHeight: options.size, + success: function(res) { + options.success && options.success(res.tempFilePath); + }, + fail: function(error) { + options.fail && options.fail(error); + }, + complete: function(res) { + options.complete && options.complete(res); + } + }, options.componentInstance); + }, options.text.length + 100); + })()); + }, 150); + } + + createCanvas(); + } + + } + +})() + +export default uQRCode diff --git a/layout/notData.vue b/layout/notData.vue new file mode 100644 index 0000000..0191dcc --- /dev/null +++ b/layout/notData.vue @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/layout/specialBanner.vue b/layout/specialBanner.vue new file mode 100644 index 0000000..592159b --- /dev/null +++ b/layout/specialBanner.vue @@ -0,0 +1,220 @@ + + + diff --git a/layout/tvChart.vue b/layout/tvChart.vue new file mode 100644 index 0000000..f210114 --- /dev/null +++ b/layout/tvChart.vue @@ -0,0 +1,454 @@ + + + diff --git a/layout/vButton.vue b/layout/vButton.vue new file mode 100644 index 0000000..6313eef --- /dev/null +++ b/layout/vButton.vue @@ -0,0 +1,221 @@ + + + \ No newline at end of file diff --git a/layout/vCode.vue b/layout/vCode.vue new file mode 100644 index 0000000..f905206 --- /dev/null +++ b/layout/vCode.vue @@ -0,0 +1,110 @@ + + \ No newline at end of file diff --git a/layout/vCountry.vue b/layout/vCountry.vue new file mode 100644 index 0000000..890bce9 --- /dev/null +++ b/layout/vCountry.vue @@ -0,0 +1,77 @@ + + \ No newline at end of file diff --git a/layout/vCurve.vue b/layout/vCurve.vue new file mode 100644 index 0000000..860b108 --- /dev/null +++ b/layout/vCurve.vue @@ -0,0 +1,124 @@ + + + + + + + diff --git a/layout/vDropdwon.vue b/layout/vDropdwon.vue new file mode 100644 index 0000000..13ec849 --- /dev/null +++ b/layout/vDropdwon.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/layout/vHeader.vue b/layout/vHeader.vue new file mode 100644 index 0000000..1975b5e --- /dev/null +++ b/layout/vHeader.vue @@ -0,0 +1,53 @@ + + + \ No newline at end of file diff --git a/layout/vInput.vue b/layout/vInput.vue new file mode 100644 index 0000000..e59752c --- /dev/null +++ b/layout/vInput.vue @@ -0,0 +1,61 @@ + + + \ No newline at end of file diff --git a/layout/vLang.vue b/layout/vLang.vue new file mode 100644 index 0000000..ccd0dab --- /dev/null +++ b/layout/vLang.vue @@ -0,0 +1,42 @@ + + \ No newline at end of file diff --git a/layout/vLink.vue b/layout/vLink.vue new file mode 100644 index 0000000..26aaf9e --- /dev/null +++ b/layout/vLink.vue @@ -0,0 +1,96 @@ + + + diff --git a/layout/vNoticeBar.vue b/layout/vNoticeBar.vue new file mode 100644 index 0000000..a1c9a8e --- /dev/null +++ b/layout/vNoticeBar.vue @@ -0,0 +1,17 @@ + + \ No newline at end of file diff --git a/layout/vPage.vue b/layout/vPage.vue new file mode 100644 index 0000000..77e1309 --- /dev/null +++ b/layout/vPage.vue @@ -0,0 +1,38 @@ + + \ No newline at end of file diff --git a/layout/vPaging.vue b/layout/vPaging.vue new file mode 100644 index 0000000..9316002 --- /dev/null +++ b/layout/vPaging.vue @@ -0,0 +1,70 @@ + + \ No newline at end of file diff --git a/layout/vPicker.vue b/layout/vPicker.vue new file mode 100644 index 0000000..94faf00 --- /dev/null +++ b/layout/vPicker.vue @@ -0,0 +1,68 @@ + + diff --git a/layout/vPlaceImg.vue b/layout/vPlaceImg.vue new file mode 100644 index 0000000..fb4f6ab --- /dev/null +++ b/layout/vPlaceImg.vue @@ -0,0 +1,9 @@ + + \ No newline at end of file diff --git a/layout/vQr.vue b/layout/vQr.vue new file mode 100644 index 0000000..922adef --- /dev/null +++ b/layout/vQr.vue @@ -0,0 +1,64 @@ + + \ No newline at end of file diff --git a/layout/vScroll.vue b/layout/vScroll.vue new file mode 100644 index 0000000..5436b9e --- /dev/null +++ b/layout/vScroll.vue @@ -0,0 +1,85 @@ + + \ No newline at end of file diff --git a/layout/vUpgrade.vue b/layout/vUpgrade.vue new file mode 100644 index 0000000..521cb06 --- /dev/null +++ b/layout/vUpgrade.vue @@ -0,0 +1,173 @@ + + + \ No newline at end of file diff --git a/main.html b/main.html new file mode 100644 index 0000000..849db20 --- /dev/null +++ b/main.html @@ -0,0 +1,28 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + + + + + + + + +
+ + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..55810f9 --- /dev/null +++ b/main.js @@ -0,0 +1,23 @@ +import Vue from 'vue' +import App from './App.vue' +import '@/plugins' +import i18n from "./i18n"; +import store from './store' +import 'element-ui/lib/theme-chalk/index.css' +import element from './element/index' +Vue.use(element) +//把vuex定义成全局组件 +Vue.prototype.$store = store +Vue.prototype._i18n = i18n; + +Vue.config.productionTip = false + +App.mpType = 'app' + +const app = new Vue({ + ...App, + i18n, + store +}) +app.$mount() + diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..8e88f27 --- /dev/null +++ b/manifest.json @@ -0,0 +1,119 @@ +{ + "name" : "Moabcoin", + "appid" : "__UNI__88A589F", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : 100, + "transformPx" : false, + "app-plus" : { + "compatible" : { + "ignoreVersion" : true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持 + }, + "nvueCompiler" : "uni-app", + "compilerVersion" : 3, + "modules" : {}, + "distribute" : { + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "autoSdkPermissions" : true, + "abiFilters" : [ "armeabi-v7a", "x86" ] + }, + "ios" : {}, + "sdkConfigs" : { + "ad" : {} + }, + "splashscreen" : { + "androidStyle" : "common", + "android" : { + "hdpi" : "qidongye/android/bark.png", + "xhdpi" : "qidongye/android/bark.png", + "xxhdpi" : "qidongye/android/bark.png" + }, + "iosStyle" : "common", + "ios" : { + "iphone" : { + "portrait-896h@3x" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "landscape-896h@3x" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "portrait-896h@2x" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "landscape-896h@2x" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "iphonex" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "iphonexl" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "retina55" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "retina55l" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "retina47" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "retina47l" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "retina40" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "retina40l" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png", + "retina35" : "C:/Users/Administrator/Desktop/bc371c0f89d2e942730a9939cad190c.png" + } + } + }, + "icons" : { + "android" : { + "hdpi" : "unpackage/res/icons/72x72.png", + "xhdpi" : "unpackage/res/icons/96x96.png", + "xxhdpi" : "unpackage/res/icons/144x144.png", + "xxxhdpi" : "unpackage/res/icons/192x192.png" + }, + "ios" : { + "appstore" : "unpackage/res/icons/1024x1024.png", + "ipad" : { + "app" : "unpackage/res/icons/76x76.png", + "app@2x" : "unpackage/res/icons/152x152.png", + "notification" : "unpackage/res/icons/20x20.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "proapp@2x" : "unpackage/res/icons/167x167.png", + "settings" : "unpackage/res/icons/29x29.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "spotlight" : "unpackage/res/icons/40x40.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png" + }, + "iphone" : { + "app@2x" : "unpackage/res/icons/120x120.png", + "app@3x" : "unpackage/res/icons/180x180.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "notification@3x" : "unpackage/res/icons/60x60.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "settings@3x" : "unpackage/res/icons/87x87.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png", + "spotlight@3x" : "unpackage/res/icons/120x120.png" + } + } + } + }, + "splashscreen" : { + "waiting" : false + }, + "nativePlugins" : {} + }, + "quickapp" : {}, + "mp-weixin" : { + "appid" : "", + "setting" : { + "urlCheck" : true + } + }, + "h5" : { + "devServer" : { + "https" : false + }, + "router" : { + "base" : "./" + }, + "domain" : "https://app.moabcoin.com", + "title" : "Moabcoin", + "template" : "main.html" + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5b0d893 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,193 @@ +{ + "name": "exchange", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.0.0-beta.35", + "resolved": "https://registry.nlark.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.0.0-beta.35.tgz?cache=0&sync_timestamp=1623280362184&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.0.0-beta.35.tgz", + "integrity": "sha1-MI41DnMXUs200PBY3x1wSSXGTgo=", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.35", + "lodash": "^4.2.0" + } + }, + "@babel/types": { + "version": "7.0.0-beta.35", + "resolved": "https://registry.nlark.com/@babel/types/download/@babel/types-7.0.0-beta.35.tgz?cache=0&sync_timestamp=1626804454589&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.0.0-beta.35.tgz", + "integrity": "sha1-z5M6mpo4SEynJLM1uI2Dcm1auWA=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" + } + }, + "async-validator": { + "version": "1.11.5", + "resolved": "https://registry.nlark.com/async-validator/download/async-validator-1.11.5.tgz", + "integrity": "sha1-nUPPSe9rt2vlRCOI0Z+5puR1l+o=" + }, + "axios": { + "version": "0.20.0", + "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.20.0.tgz?cache=0&sync_timestamp=1597979633356&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.20.0.tgz", + "integrity": "sha1-BXujDwSIRpSZOozQf6OUz/EcUL0=", + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY=" + }, + "babel-plugin-component": { + "version": "1.1.1", + "resolved": "https://registry.npm.taobao.org/babel-plugin-component/download/babel-plugin-component-1.1.1.tgz", + "integrity": "sha1-mwI6I/9cmq4P1WxaGLnKuMTUXuo=", + "dev": true, + "requires": { + "@babel/helper-module-imports": "7.0.0-beta.35" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.nlark.com/babel-runtime/download/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "clipboard": { + "version": "2.0.8", + "resolved": "https://registry.npm.taobao.org/clipboard/download/clipboard-2.0.8.tgz?cache=0&sync_timestamp=1615409953598&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipboard%2Fdownload%2Fclipboard-2.0.8.tgz", + "integrity": "sha1-/8bBA90pZ6gwBfP2GXaqRlWkzbo=", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.nlark.com/core-js/download/core-js-2.6.12.tgz", + "integrity": "sha1-2TM9+nsGXjR8xWgiGdb2kIWcwuw=" + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz", + "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=" + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npm.taobao.org/delegate/download/delegate-3.2.0.tgz", + "integrity": "sha1-tmtxwxWFIuirV0T3INjKDCr1kWY=" + }, + "element-ui": { + "version": "2.15.3", + "resolved": "https://registry.nlark.com/element-ui/download/element-ui-2.15.3.tgz", + "integrity": "sha1-VRCKuCo7zGRuewVwhxxIupYwBlI=", + "requires": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + }, + "dependencies": { + "async-validator": { + "version": "1.8.5", + "resolved": "https://registry.nlark.com/async-validator/download/async-validator-1.8.5.tgz", + "integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=", + "requires": { + "babel-runtime": "6.x" + } + } + } + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.nlark.com/esutils/download/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", + "dev": true + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz?cache=0&sync_timestamp=1597057976909&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.0.tgz", + "integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=" + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npm.taobao.org/good-listener/download/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "requires": { + "delegate": "^3.1.2" + } + }, + "highcharts": { + "version": "8.2.0", + "resolved": "https://registry.npm.taobao.org/highcharts/download/highcharts-8.2.0.tgz?cache=0&sync_timestamp=1597919354751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhighcharts%2Fdownload%2Fhighcharts-8.2.0.tgz", + "integrity": "sha1-PUiTAVyvGnye2FKE2YORHoRGSfM=" + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597335994883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz", + "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=" + }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" + }, + "qs": { + "version": "6.9.4", + "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.9.4.tgz", + "integrity": "sha1-kJCykNH5FyjTwi5UhDykSupatoc=" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1626993001371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz", + "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.nlark.com/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ=" + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npm.taobao.org/select/download/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=" + }, + "throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz?cache=0&sync_timestamp=1604313832516&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthrottle-debounce%2Fdownload%2Fthrottle-debounce-1.1.0.tgz", + "integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0=" + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npm.taobao.org/tiny-emitter/download/tiny-emitter-2.1.0.tgz", + "integrity": "sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.nlark.com/to-fast-properties/download/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "vue-i18n": { + "version": "8.21.0", + "resolved": "https://registry.npm.taobao.org/vue-i18n/download/vue-i18n-8.21.0.tgz?cache=0&sync_timestamp=1597336528269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-i18n%2Fdownload%2Fvue-i18n-8.21.0.tgz", + "integrity": "sha1-UmRQUl/buch3aFtbpsuVc7c9OUA=" + }, + "vuex": { + "version": "3.5.1", + "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.5.1.tgz", + "integrity": "sha1-8bjc6mSbwlJUz09DWAgdv12hiz0=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..7cdcf0d --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "exchange", + "version": "1.0.0", + "description": "", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "async-validator": "^1.11.5", + "axios": "^0.20.0", + "clipboard": "^2.0.8", + "element-ui": "^2.15.3", + "highcharts": "^8.2.0", + "lodash": "^4.17.20", + "qs": "^6.9.4", + "vue-i18n": "^8.21.0", + "vuex": "^3.5.1" + }, + "devDependencies": { + "babel-plugin-component": "^1.1.1" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..c913f5c --- /dev/null +++ b/pages.json @@ -0,0 +1,250 @@ +{ + "pages": [ + { + "path": "pages/startPage/index" + }, + { + "path": "pages/base/index", + "style": { + "app-plus": { + "bounce": "none" + } + } + }, + { + "path": "pages/index/index" + }, + { + "path": "pages/currency/index" + }, + { + "path": "pages/currency/list" + }, + { + "path": "pages/exchange/exchangeHis" + }, + { + "path": "pages/exchange/contractHis" + }, + { + "path": "pages/exchange/his" + }, + { + "path": "pages/login/index" + }, + { + "path": "pages/purchase/index" + }, + { + "path": "pages/purchase/bill" + }, + { + "path": "pages/reg/index" + }, + { + "path": "pages/safe/forget-password" + }, + { + "path": "pages/notice/detail" + }, + { + "path": "pages/accountSettings/accountSettings" + }, + { + "path": "pages/assets/recharge" + }, + { + "path": "pages/assets/paypal" + }, + { + "path": "pages/assets/draw" + }, + { + "path": "pages/assets/address-list" + }, + { + "path": "pages/assets/edit-address" + }, + { + "path": "pages/invite/index" + }, + { + "path": "pages/invite/level" + }, + { + "path": "pages/commission/index" + }, + { + "path": "pages/commission/revoke" + }, + { + "path": "pages/auth/index" + }, + { + "path": "pages/auth/primary" + }, + { + "path": "pages/auth/senior" + }, + { + "path": "pages/safe/index" + }, + { + "path": "pages/safe/login-password" + }, + { + "path": "pages/safe/phone" + }, + { + "path": "pages/safe/google" + }, + { + "path": "pages/safe/transaction-password" + }, + { + "path": "pages/safe/email" + }, + { + "path": "pages/notice/index" + }, + { + "path": "pages/notice/msg-detail" + }, + { + "path": "pages/option/index" + }, + { + "path": "pages/transfer/index" + }, + { + "path": "pages/transfer/bill" + }, + { + "path": "pages/assets/bill" + }, + { + "path": "pages/exchange/index" + }, + { + "path": "pages/assets/account-bill" + }, + { + "path": "pages/assets/currency-bill" + }, + { + "path": "pages/help/index" + }, + { + "path": "pages/help/detail" + }, + { + "path": "pages/help/sort" + }, + { + "path": "pages/list/list" + }, + { + "path": "pages/option/delivery-detail" + }, + { + "path": "pages/income/index" + }, + { + "path": "pages/otc/send-ad" + }, + { + "path": "pages/otc/order" + }, + { + "path": "pages/otc/ad" + }, + { + "path": "pages/otc/detail" + }, + { + "path": "pages/otc/pays" + }, + { + "path": "pages/otc/bind-pay" + }, + { + "path": "pages/otc/bill" + }, + { + "path": "pages/service/service" + }, + { + "path": "pages/service/index", + "style": { + "navigationBarTitleText": "咨询客服", + "navigationStyle": "default", + "app-plus": { + "titleNView": { + } + } + } + }, + { + "path": "pages/service/otc", + "style": { + "navigationBarTitleText": "otc", + "navigationStyle": "default", + "app-plus": { + "titleNView": { + } + } + } + }, + { + "path": "pages/upgrade/index", + "style": { + "navigationStyle": "custom", + "app-plus": { + "animationType": "fade-in", + "background": "transparent", + "backgroundColor": "rgba(0,0,0,0)", + "popGesture": "none" + } + } + }, + { + "path": "pages/assets/records", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + } + ], + "globalStyle": { + "app-plus": { + "titleNView": false + }, + "navigationBarTextStyle": "black", + "navigationBarTitleText": "Moabcoin", + "navigationBarBackgroundColor": "#007AFF", + "backgroundColor": "#FFFFFF" + }, + "easycom": { + "autoscan": true, + "custom": { + "^van-(.*)": "@/wxcomponents/vant/$1/index.vue", + "v-button": "@/layout/vButton.vue", + "v-input": "@/layout/vInput.vue", + "v-header": "@/layout/vHeader.vue", + "v-code": "@/layout/vCode.vue", + "v-country": "@/layout/vCountry.vue", + "v-link": "@/layout/vLink.vue", + "v-notice-bar": "@/layout/vNoticeBar.vue", + "v-lang": "@/layout/vLang.vue", + "v-qr": "@/layout/vQr.vue", + "v-scroll": "@/layout/vScroll.vue", + "v-paging": "@/layout/vPaging.vue", + "v-curve": "@/layout/vCurve.vue", + "v-dropdwon": "@/layout/vDropdwon.vue", + "v-picker": "@/layout/vPicker.vue", + "v-page": "@/layout/vPage.vue", + "not-data": "@/layout/notData.vue", + "special-Banner": "@/layout/specialBanner.vue" + } + } +} diff --git a/pages/accountSettings/accountSettings.vue b/pages/accountSettings/accountSettings.vue new file mode 100644 index 0000000..1797e84 --- /dev/null +++ b/pages/accountSettings/accountSettings.vue @@ -0,0 +1,210 @@ + + + + + diff --git a/pages/accountSettings/changeNickname.vue b/pages/accountSettings/changeNickname.vue new file mode 100644 index 0000000..3232f6f --- /dev/null +++ b/pages/accountSettings/changeNickname.vue @@ -0,0 +1,30 @@ + + + \ No newline at end of file diff --git a/pages/assets/account-bill.vue b/pages/assets/account-bill.vue new file mode 100644 index 0000000..ed6424a --- /dev/null +++ b/pages/assets/account-bill.vue @@ -0,0 +1,79 @@ + + + \ No newline at end of file diff --git a/pages/assets/address-list.vue b/pages/assets/address-list.vue new file mode 100644 index 0000000..2a8f0f1 --- /dev/null +++ b/pages/assets/address-list.vue @@ -0,0 +1,193 @@ + + + \ No newline at end of file diff --git a/pages/assets/bill.vue b/pages/assets/bill.vue new file mode 100644 index 0000000..0aa2138 --- /dev/null +++ b/pages/assets/bill.vue @@ -0,0 +1,99 @@ + + + \ No newline at end of file diff --git a/pages/assets/coin-list.vue b/pages/assets/coin-list.vue new file mode 100644 index 0000000..b132f6b --- /dev/null +++ b/pages/assets/coin-list.vue @@ -0,0 +1,110 @@ + + + \ No newline at end of file diff --git a/pages/assets/currency-bill.vue b/pages/assets/currency-bill.vue new file mode 100644 index 0000000..6d9056b --- /dev/null +++ b/pages/assets/currency-bill.vue @@ -0,0 +1,62 @@ + + + \ No newline at end of file diff --git a/pages/assets/draw.vue b/pages/assets/draw.vue new file mode 100644 index 0000000..5d58115 --- /dev/null +++ b/pages/assets/draw.vue @@ -0,0 +1,565 @@ + + + diff --git a/pages/assets/edit-address.vue b/pages/assets/edit-address.vue new file mode 100644 index 0000000..bb453fb --- /dev/null +++ b/pages/assets/edit-address.vue @@ -0,0 +1,102 @@ + + + \ No newline at end of file diff --git a/pages/assets/paypal.vue b/pages/assets/paypal.vue new file mode 100644 index 0000000..56ef15d --- /dev/null +++ b/pages/assets/paypal.vue @@ -0,0 +1,206 @@ + + + + diff --git a/pages/assets/recharge.vue b/pages/assets/recharge.vue new file mode 100644 index 0000000..04f0410 --- /dev/null +++ b/pages/assets/recharge.vue @@ -0,0 +1,328 @@ + + + \ No newline at end of file diff --git a/pages/assets/records.vue b/pages/assets/records.vue new file mode 100644 index 0000000..a0ce4d5 --- /dev/null +++ b/pages/assets/records.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/pages/auth/index.vue b/pages/auth/index.vue new file mode 100644 index 0000000..4863c79 --- /dev/null +++ b/pages/auth/index.vue @@ -0,0 +1,102 @@ + + + diff --git a/pages/auth/primary.vue b/pages/auth/primary.vue new file mode 100644 index 0000000..98f0c7a --- /dev/null +++ b/pages/auth/primary.vue @@ -0,0 +1,279 @@ + + + \ No newline at end of file diff --git a/pages/auth/primary.vue_bak b/pages/auth/primary.vue_bak new file mode 100644 index 0000000..7cc577c --- /dev/null +++ b/pages/auth/primary.vue_bak @@ -0,0 +1,102 @@ + + + \ No newline at end of file diff --git a/pages/auth/senior.vue b/pages/auth/senior.vue new file mode 100644 index 0000000..340bd14 --- /dev/null +++ b/pages/auth/senior.vue @@ -0,0 +1,236 @@ + + + diff --git a/pages/base/contract.vue b/pages/base/contract.vue new file mode 100644 index 0000000..6533e83 --- /dev/null +++ b/pages/base/contract.vue @@ -0,0 +1,282 @@ + + + \ No newline at end of file diff --git a/pages/base/exchange-operation.vue b/pages/base/exchange-operation.vue new file mode 100644 index 0000000..db3e85d --- /dev/null +++ b/pages/base/exchange-operation.vue @@ -0,0 +1,242 @@ + + + \ No newline at end of file diff --git a/pages/base/home.vue b/pages/base/home.vue new file mode 100644 index 0000000..73cbd14 --- /dev/null +++ b/pages/base/home.vue @@ -0,0 +1,2266 @@ + + + + \ No newline at end of file diff --git a/pages/base/index.vue b/pages/base/index.vue new file mode 100644 index 0000000..5f1e3e8 --- /dev/null +++ b/pages/base/index.vue @@ -0,0 +1,192 @@ + + + + diff --git a/pages/base/mine.vue b/pages/base/mine.vue new file mode 100644 index 0000000..c2dc0ed --- /dev/null +++ b/pages/base/mine.vue @@ -0,0 +1,633 @@ + + + + diff --git a/pages/base/option-list.vue b/pages/base/option-list.vue new file mode 100644 index 0000000..912d08e --- /dev/null +++ b/pages/base/option-list.vue @@ -0,0 +1,430 @@ + + + diff --git a/pages/base/otc.vue b/pages/base/otc.vue new file mode 100644 index 0000000..76f2d4f --- /dev/null +++ b/pages/base/otc.vue @@ -0,0 +1,290 @@ + + + \ No newline at end of file diff --git a/pages/commission/index.vue b/pages/commission/index.vue new file mode 100644 index 0000000..3a15de4 --- /dev/null +++ b/pages/commission/index.vue @@ -0,0 +1,165 @@ + + + \ No newline at end of file diff --git a/pages/commission/revoke.vue b/pages/commission/revoke.vue new file mode 100644 index 0000000..784b360 --- /dev/null +++ b/pages/commission/revoke.vue @@ -0,0 +1,94 @@ + + \ No newline at end of file diff --git a/pages/currency/index.vue b/pages/currency/index.vue new file mode 100644 index 0000000..4d17a69 --- /dev/null +++ b/pages/currency/index.vue @@ -0,0 +1,239 @@ + + + + diff --git a/pages/currency/list.vue b/pages/currency/list.vue new file mode 100644 index 0000000..4f3c41d --- /dev/null +++ b/pages/currency/list.vue @@ -0,0 +1,92 @@ + + + \ No newline at end of file diff --git a/pages/exchange/coin-info.vue b/pages/exchange/coin-info.vue new file mode 100644 index 0000000..9e05d23 --- /dev/null +++ b/pages/exchange/coin-info.vue @@ -0,0 +1,96 @@ + + + diff --git a/pages/exchange/contract-bill.vue b/pages/exchange/contract-bill.vue new file mode 100644 index 0000000..2173114 --- /dev/null +++ b/pages/exchange/contract-bill.vue @@ -0,0 +1,42 @@ + + \ No newline at end of file diff --git a/pages/exchange/contract-entrustment.vue b/pages/exchange/contract-entrustment.vue new file mode 100644 index 0000000..f70793d --- /dev/null +++ b/pages/exchange/contract-entrustment.vue @@ -0,0 +1,114 @@ + + diff --git a/pages/exchange/contract-history.vue b/pages/exchange/contract-history.vue new file mode 100644 index 0000000..1387b0b --- /dev/null +++ b/pages/exchange/contract-history.vue @@ -0,0 +1,424 @@ + + + diff --git a/pages/exchange/contractHis.vue b/pages/exchange/contractHis.vue new file mode 100644 index 0000000..caaf618 --- /dev/null +++ b/pages/exchange/contractHis.vue @@ -0,0 +1,485 @@ + + + \ No newline at end of file diff --git a/pages/exchange/current-commission.vue b/pages/exchange/current-commission.vue new file mode 100644 index 0000000..14ef54a --- /dev/null +++ b/pages/exchange/current-commission.vue @@ -0,0 +1,90 @@ + + \ No newline at end of file diff --git a/pages/exchange/depth-map.vue b/pages/exchange/depth-map.vue new file mode 100644 index 0000000..ca04bb1 --- /dev/null +++ b/pages/exchange/depth-map.vue @@ -0,0 +1,202 @@ + + + + + + \ No newline at end of file diff --git a/pages/exchange/exchange-transaction.vue b/pages/exchange/exchange-transaction.vue new file mode 100644 index 0000000..9e6806c --- /dev/null +++ b/pages/exchange/exchange-transaction.vue @@ -0,0 +1,1171 @@ + + + diff --git a/pages/exchange/exchangeHis.vue b/pages/exchange/exchangeHis.vue new file mode 100644 index 0000000..cad0305 --- /dev/null +++ b/pages/exchange/exchangeHis.vue @@ -0,0 +1,177 @@ + + + \ No newline at end of file diff --git a/pages/exchange/his.vue b/pages/exchange/his.vue new file mode 100644 index 0000000..62f3eec --- /dev/null +++ b/pages/exchange/his.vue @@ -0,0 +1,246 @@ + + diff --git a/pages/exchange/history-commisson.vue b/pages/exchange/history-commisson.vue new file mode 100644 index 0000000..e06b417 --- /dev/null +++ b/pages/exchange/history-commisson.vue @@ -0,0 +1,60 @@ + + diff --git a/pages/exchange/index.vue b/pages/exchange/index.vue new file mode 100644 index 0000000..ea07f49 --- /dev/null +++ b/pages/exchange/index.vue @@ -0,0 +1,563 @@ + + + diff --git a/pages/exchange/latest-transaction.vue b/pages/exchange/latest-transaction.vue new file mode 100644 index 0000000..5c8ad89 --- /dev/null +++ b/pages/exchange/latest-transaction.vue @@ -0,0 +1,46 @@ + + \ No newline at end of file diff --git a/pages/exchange/open-position.vue b/pages/exchange/open-position.vue new file mode 100644 index 0000000..9140c0e --- /dev/null +++ b/pages/exchange/open-position.vue @@ -0,0 +1,2157 @@ + + + diff --git a/pages/exchange/position.vue b/pages/exchange/position.vue new file mode 100644 index 0000000..43491c8 --- /dev/null +++ b/pages/exchange/position.vue @@ -0,0 +1,454 @@ + + + \ No newline at end of file diff --git a/pages/exchange/sale.vue b/pages/exchange/sale.vue new file mode 100644 index 0000000..13d05e7 --- /dev/null +++ b/pages/exchange/sale.vue @@ -0,0 +1,92 @@ + + + \ No newline at end of file diff --git a/pages/exchange/sell-and-buy.vue b/pages/exchange/sell-and-buy.vue new file mode 100644 index 0000000..6063964 --- /dev/null +++ b/pages/exchange/sell-and-buy.vue @@ -0,0 +1,137 @@ + + + \ No newline at end of file diff --git a/pages/exchange/symbol-list copy.vue b/pages/exchange/symbol-list copy.vue new file mode 100644 index 0000000..6dbea95 --- /dev/null +++ b/pages/exchange/symbol-list copy.vue @@ -0,0 +1,105 @@ + + + \ No newline at end of file diff --git a/pages/exchange/symbol-list.vue b/pages/exchange/symbol-list.vue new file mode 100644 index 0000000..8198cb3 --- /dev/null +++ b/pages/exchange/symbol-list.vue @@ -0,0 +1,177 @@ + + + \ No newline at end of file diff --git a/pages/exchange/time-sharing.vue b/pages/exchange/time-sharing.vue new file mode 100644 index 0000000..14f6bc6 --- /dev/null +++ b/pages/exchange/time-sharing.vue @@ -0,0 +1,305 @@ + + + + \ No newline at end of file diff --git a/pages/exchange/trade-list.vue b/pages/exchange/trade-list.vue new file mode 100644 index 0000000..50bcc97 --- /dev/null +++ b/pages/exchange/trade-list.vue @@ -0,0 +1,978 @@ + + + diff --git a/pages/help/detail.vue b/pages/help/detail.vue new file mode 100644 index 0000000..9cc6097 --- /dev/null +++ b/pages/help/detail.vue @@ -0,0 +1,42 @@ + + \ No newline at end of file diff --git a/pages/help/index.vue b/pages/help/index.vue new file mode 100644 index 0000000..b6a4a75 --- /dev/null +++ b/pages/help/index.vue @@ -0,0 +1,70 @@ + + diff --git a/pages/help/sort.vue b/pages/help/sort.vue new file mode 100644 index 0000000..d114c2e --- /dev/null +++ b/pages/help/sort.vue @@ -0,0 +1,56 @@ + + + \ No newline at end of file diff --git a/pages/income/index.vue b/pages/income/index.vue new file mode 100644 index 0000000..76aaeec --- /dev/null +++ b/pages/income/index.vue @@ -0,0 +1,377 @@ + + + + + diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..096fd40 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/pages/invite/index.vue b/pages/invite/index.vue new file mode 100644 index 0000000..1d32545 --- /dev/null +++ b/pages/invite/index.vue @@ -0,0 +1,394 @@ + + + \ No newline at end of file diff --git a/pages/invite/level.vue b/pages/invite/level.vue new file mode 100644 index 0000000..bfe0e8e --- /dev/null +++ b/pages/invite/level.vue @@ -0,0 +1,207 @@ + + + \ No newline at end of file diff --git a/pages/list/list.vue b/pages/list/list.vue new file mode 100644 index 0000000..b8d76e1 --- /dev/null +++ b/pages/list/list.vue @@ -0,0 +1,245 @@ + + + + \ No newline at end of file diff --git a/pages/login/index.vue b/pages/login/index.vue new file mode 100644 index 0000000..67a6beb --- /dev/null +++ b/pages/login/index.vue @@ -0,0 +1,235 @@ + + + \ No newline at end of file diff --git a/pages/notice/detail.vue b/pages/notice/detail.vue new file mode 100644 index 0000000..9c0cc93 --- /dev/null +++ b/pages/notice/detail.vue @@ -0,0 +1,40 @@ + + + \ No newline at end of file diff --git a/pages/notice/index.vue b/pages/notice/index.vue new file mode 100644 index 0000000..b14a325 --- /dev/null +++ b/pages/notice/index.vue @@ -0,0 +1,70 @@ + + + \ No newline at end of file diff --git a/pages/notice/msg-detail.vue b/pages/notice/msg-detail.vue new file mode 100644 index 0000000..8ad311a --- /dev/null +++ b/pages/notice/msg-detail.vue @@ -0,0 +1,49 @@ + + + \ No newline at end of file diff --git a/pages/option/buy-option-form copy.vue b/pages/option/buy-option-form copy.vue new file mode 100644 index 0000000..b422455 --- /dev/null +++ b/pages/option/buy-option-form copy.vue @@ -0,0 +1,267 @@ + + + \ No newline at end of file diff --git a/pages/option/buy-option-form.vue b/pages/option/buy-option-form.vue new file mode 100644 index 0000000..4e9af3d --- /dev/null +++ b/pages/option/buy-option-form.vue @@ -0,0 +1,276 @@ + + + diff --git a/pages/option/buy-option.vue b/pages/option/buy-option.vue new file mode 100644 index 0000000..d5ff921 --- /dev/null +++ b/pages/option/buy-option.vue @@ -0,0 +1,97 @@ + + + \ No newline at end of file diff --git a/pages/option/delivery-detail.vue b/pages/option/delivery-detail.vue new file mode 100644 index 0000000..0928dd0 --- /dev/null +++ b/pages/option/delivery-detail.vue @@ -0,0 +1,106 @@ + + diff --git a/pages/option/delivery-record.vue b/pages/option/delivery-record.vue new file mode 100644 index 0000000..6b55dea --- /dev/null +++ b/pages/option/delivery-record.vue @@ -0,0 +1,103 @@ + + + \ No newline at end of file diff --git a/pages/option/highchart.vue b/pages/option/highchart.vue new file mode 100644 index 0000000..7eebe76 --- /dev/null +++ b/pages/option/highchart.vue @@ -0,0 +1,355 @@ + + + + + + + diff --git a/pages/option/index.vue b/pages/option/index.vue new file mode 100644 index 0000000..b104600 --- /dev/null +++ b/pages/option/index.vue @@ -0,0 +1,397 @@ + + + \ No newline at end of file diff --git a/pages/option/my-delivery.vue b/pages/option/my-delivery.vue new file mode 100644 index 0000000..1901dd1 --- /dev/null +++ b/pages/option/my-delivery.vue @@ -0,0 +1,104 @@ + + + \ No newline at end of file diff --git a/pages/option/option-nav-list.vue b/pages/option/option-nav-list.vue new file mode 100644 index 0000000..5ffbc7f --- /dev/null +++ b/pages/option/option-nav-list.vue @@ -0,0 +1,79 @@ + + \ No newline at end of file diff --git a/pages/option/waiting-delivery.vue b/pages/option/waiting-delivery.vue new file mode 100644 index 0000000..362b1ff --- /dev/null +++ b/pages/option/waiting-delivery.vue @@ -0,0 +1,101 @@ + + + \ No newline at end of file diff --git a/pages/otc/ad.vue b/pages/otc/ad.vue new file mode 100644 index 0000000..9da36ab --- /dev/null +++ b/pages/otc/ad.vue @@ -0,0 +1,185 @@ + + \ No newline at end of file diff --git a/pages/otc/bill.vue b/pages/otc/bill.vue new file mode 100644 index 0000000..6c94332 --- /dev/null +++ b/pages/otc/bill.vue @@ -0,0 +1,82 @@ + + + \ No newline at end of file diff --git a/pages/otc/bind-pay.vue b/pages/otc/bind-pay.vue new file mode 100644 index 0000000..020bf8a --- /dev/null +++ b/pages/otc/bind-pay.vue @@ -0,0 +1,199 @@ + + \ No newline at end of file diff --git a/pages/otc/detail.vue b/pages/otc/detail.vue new file mode 100644 index 0000000..3230e99 --- /dev/null +++ b/pages/otc/detail.vue @@ -0,0 +1,315 @@ + + + \ No newline at end of file diff --git a/pages/otc/order.vue b/pages/otc/order.vue new file mode 100644 index 0000000..8d5ad15 --- /dev/null +++ b/pages/otc/order.vue @@ -0,0 +1,136 @@ + + \ No newline at end of file diff --git a/pages/otc/pays.vue b/pages/otc/pays.vue new file mode 100644 index 0000000..b8730af --- /dev/null +++ b/pages/otc/pays.vue @@ -0,0 +1,25 @@ + \ No newline at end of file diff --git a/pages/otc/send-ad.vue b/pages/otc/send-ad.vue new file mode 100644 index 0000000..65fc391 --- /dev/null +++ b/pages/otc/send-ad.vue @@ -0,0 +1,203 @@ + + \ No newline at end of file diff --git a/pages/purchase/bill.vue b/pages/purchase/bill.vue new file mode 100644 index 0000000..404a72b --- /dev/null +++ b/pages/purchase/bill.vue @@ -0,0 +1,92 @@ + + diff --git a/pages/purchase/index.vue b/pages/purchase/index.vue new file mode 100644 index 0000000..c365934 --- /dev/null +++ b/pages/purchase/index.vue @@ -0,0 +1,389 @@ + + + diff --git a/pages/reg/index.vue b/pages/reg/index.vue new file mode 100644 index 0000000..434fdf7 --- /dev/null +++ b/pages/reg/index.vue @@ -0,0 +1,337 @@ + + + diff --git a/pages/safe/email.vue b/pages/safe/email.vue new file mode 100644 index 0000000..e3c24a7 --- /dev/null +++ b/pages/safe/email.vue @@ -0,0 +1,86 @@ + + + \ No newline at end of file diff --git a/pages/safe/forget-password.vue b/pages/safe/forget-password.vue new file mode 100644 index 0000000..239fe7e --- /dev/null +++ b/pages/safe/forget-password.vue @@ -0,0 +1,197 @@ + + + \ No newline at end of file diff --git a/pages/safe/google.vue b/pages/safe/google.vue new file mode 100644 index 0000000..d8874f4 --- /dev/null +++ b/pages/safe/google.vue @@ -0,0 +1,146 @@ + + + \ No newline at end of file diff --git a/pages/safe/index.vue b/pages/safe/index.vue new file mode 100644 index 0000000..462c81a --- /dev/null +++ b/pages/safe/index.vue @@ -0,0 +1,120 @@ + + + \ No newline at end of file diff --git a/pages/safe/login-password.vue b/pages/safe/login-password.vue new file mode 100644 index 0000000..4b07f87 --- /dev/null +++ b/pages/safe/login-password.vue @@ -0,0 +1,148 @@ + + + \ No newline at end of file diff --git a/pages/safe/phone.vue b/pages/safe/phone.vue new file mode 100644 index 0000000..5440bfd --- /dev/null +++ b/pages/safe/phone.vue @@ -0,0 +1,111 @@ + + + \ No newline at end of file diff --git a/pages/safe/switch.vue b/pages/safe/switch.vue new file mode 100644 index 0000000..2541032 --- /dev/null +++ b/pages/safe/switch.vue @@ -0,0 +1,111 @@ + + \ No newline at end of file diff --git a/pages/safe/transaction-password.vue b/pages/safe/transaction-password.vue new file mode 100644 index 0000000..aa0b0cf --- /dev/null +++ b/pages/safe/transaction-password.vue @@ -0,0 +1,85 @@ + + + \ No newline at end of file diff --git a/pages/service/index.vue b/pages/service/index.vue new file mode 100644 index 0000000..d87236e --- /dev/null +++ b/pages/service/index.vue @@ -0,0 +1,72 @@ + + + diff --git a/pages/service/otc.vue b/pages/service/otc.vue new file mode 100644 index 0000000..c64590c --- /dev/null +++ b/pages/service/otc.vue @@ -0,0 +1,76 @@ + + + diff --git a/pages/service/service.vue b/pages/service/service.vue new file mode 100644 index 0000000..e100557 --- /dev/null +++ b/pages/service/service.vue @@ -0,0 +1,83 @@ + + + \ No newline at end of file diff --git a/pages/startPage/index.vue b/pages/startPage/index.vue new file mode 100644 index 0000000..3fde059 --- /dev/null +++ b/pages/startPage/index.vue @@ -0,0 +1,66 @@ + + + \ No newline at end of file diff --git a/pages/transfer/bill.vue b/pages/transfer/bill.vue new file mode 100644 index 0000000..6c212d1 --- /dev/null +++ b/pages/transfer/bill.vue @@ -0,0 +1,105 @@ + + \ No newline at end of file diff --git a/pages/transfer/index.vue b/pages/transfer/index.vue new file mode 100644 index 0000000..f4bfd22 --- /dev/null +++ b/pages/transfer/index.vue @@ -0,0 +1,332 @@ + + + diff --git a/pages/upgrade/index.vue b/pages/upgrade/index.vue new file mode 100644 index 0000000..cd487af --- /dev/null +++ b/pages/upgrade/index.vue @@ -0,0 +1,109 @@ + + + \ No newline at end of file diff --git a/pages/wallets/mine.vue b/pages/wallets/mine.vue new file mode 100644 index 0000000..969625d --- /dev/null +++ b/pages/wallets/mine.vue @@ -0,0 +1,517 @@ + + + + \ No newline at end of file diff --git a/plugins/createWS.js b/plugins/createWS.js new file mode 100644 index 0000000..9dc8902 --- /dev/null +++ b/plugins/createWS.js @@ -0,0 +1,20 @@ +let createWS = (url, callbackObj) =>{ + var ws = new WebSocket(url) + WebSocket.prototype.sendJson = function (obj) { + this.send(JSON.stringify(obj)) + } + ws.onopen = function () { + callbackObj.open && callbackObj.open(ws) + setInterval(function () { + ws.send(JSON.stringify({ + type: "heartbeat" + })) + }, 10000); + } + ws.onclose = function () { + callbackObj.onclose && callbackObj.onclose(ws) + } + return ws +} + +export default createWS; \ No newline at end of file diff --git a/plugins/datafeed.js b/plugins/datafeed.js new file mode 100644 index 0000000..4b7e345 --- /dev/null +++ b/plugins/datafeed.js @@ -0,0 +1,103 @@ +class Datafeed { + constructor(vm) { + this.self = vm; + } + onReady(callback) { + // console.log('onReady') + var _this = this; + return new Promise(function (resolve) { + var configuration = _this.defaultConfiguration(); + if (_this.self.getConfig) { + configuration = Object.assign( + _this.defaultConfiguration(), + _this.self.getConfig() + ); + } + resolve(configuration); + }).then(function (data) { + if (_this.self.onReady) { + _this.self.onReady() + } + return callback(data); + }); + } + resolveSymbol(symbolName, onSymbolResolvedCallback, onResolveErrorCallback) { + var _this2 = this + return new Promise(function (resolve) { + var symbolInfo = _this2.defaultSymbol(); + if (_this2.self.getSymbol) { + symbolInfo = Object.assign(_this2.defaultSymbol(), _this2.self.getSymbol()); + } + + resolve(symbolInfo); + }).then(function (data) { + return onSymbolResolvedCallback(data); + }).catch(function (err) { + return onResolveErrorCallback(err); + }); + + } + getBars(symbolInfo, resolution, rangeStartDate, rangeEndDate, onDataCallback, onErrorCallback) { + + var onLoadedCallback = function onLoadedCallback(data) { + if (data && data.length) { + onDataCallback(data, { noData: false }); + } else { + onDataCallback([], { noData: true }); + } + }; + + this.self.getBars(symbolInfo, resolution, rangeStartDate, rangeEndDate, onLoadedCallback, onErrorCallback); + } + subscribeBars(symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback) { + this.self.onRealtimeCallback = onRealtimeCallback + if (this.self.subscribeBars) { + this.self.subscribeBars(symbolInfo, resolution, onRealtimeCallback, subscriberUID, onResetCacheNeededCallback) + } + } + unsubscribeBars(subscriberUID) { + if (this.self.unsubscribeBars) { + this.self.unsubscribeBars(subscriberUID) + } + } + defaultConfiguration() { + return { + supports_search: false, + supports_group_request: false, + supported_resolutions: this.self.resolutions, + supports_marks: true, + supports_timescale_marks: true, + supports_time: true + }; + } + defaultSymbol() { + return { + 'name': this.self.symbol.toLocaleUpperCase(), + // 'timezone': 'Asia/Shanghai', + 'timezone': 'America/Toronto', + 'minmov': 1, + 'minmov2': 0, + 'fractional': false, + //设置周期 + 'session': '24x7', + 'has_intraday': true, + 'has_no_volume': false, + //设置是否支持周月线 + "has_daily": true, + //设置是否支持周月线 + "has_weekly_and_monthly": true, + 'description': this.self.symbol.toLocaleUpperCase(), + //设置精度 100表示保留两位小数 1000三位 10000四位 + 'pricescale': 10000, + 'ticker': this.self.symbol.toLocaleUpperCase(), + + // intraday_multipliers: ["1","5", + // "15", + // "30", + // "60", + // "240",], + 'supported_resolutions': this.self.resolutions + }; + } +} +export default Datafeed; diff --git a/plugins/index.js b/plugins/index.js new file mode 100644 index 0000000..e7f0ee5 --- /dev/null +++ b/plugins/index.js @@ -0,0 +1,5 @@ +import './method'; +import './vant'; + + + diff --git a/plugins/method.js b/plugins/method.js new file mode 100644 index 0000000..93d8dd0 --- /dev/null +++ b/plugins/method.js @@ -0,0 +1,144 @@ +import vue from 'vue'; +import qs from 'qs' +import app from '@/app' + +// 过去本地文件 +let getFile = function (config) { + return new Promise((ress, recs) => { + // uni.showActionSheet({ + // itemList: uni.getStorageSync('language')=='zh-CN'?['拍照', '从相册中选择']:['Camera', 'Album'], + // success(res) { + // console.log(res.tapIndex,) + // let sourceType ='camera' + // if (res.tapIndex == 0) { + // sourceType = 'camera' + // } else if (res.tapIndex == 1) { + // sourceType = 'album' + // } + // uni.chooseImage({ + // count: config.config || 9, + // sourceType: [sourceType], + // success: (chooseImageRes) => { + // ress(chooseImageRes) + // }, + // fail: () => { + // recs() + // } + // }); + // } + // }) + uni.chooseImage({ + count: config.config || 9, + success: (chooseImageRes) => { + ress(chooseImageRes) + }, + fail: () => { + recc() + } + }); + }) +} +// 复制文本 +function copy(txt) { + uni.setClipboardData({ + data: txt, + success: function () { + uni.showToast({ + title: uni.getStorageSync('language')=='zh-CN'?'复制成功':'success', + duration: 2000 + }); + } + }); +} + +// 页面后退方法 +vue.prototype.$back = (num = 1) => { + uni.navigateBack(num) + navFontColor() +} + +// 标签过滤 +function filterCode(str) { + return str.replace(/<[^<>]+>/g, '').replace(/ /ig, '') +} + +// 解决uni-app slot 数组传递bug +vue.prototype.$list = function (obj) { + return Object.entries(obj).filter(item => item[0] != '_i').map(item => item[1]) +} + +// 替换路由 +vue.prototype._router = { + push(path) { + var url = '', query, animationType, animationDuration; + if (typeof path == 'string') { + url = path + } else { + url = path.path; + query = qs.stringify(path.query); + animationType = path.animationType + animationDuration = path.animationDuration + } + uni.navigateTo({ + url: `${url}${url.includes('?') ? '&' : '?'}${query || ''}`, + animationType, + animationDuration + }); + navFontColor() + }, + replace(path) { + var url = '', query, animationType, animationDuration; + if (typeof path == 'string') { + url = path + } else { + url = path.path || ''; + query = qs.stringify(path.query); + animationType = path.animationType + animationDuration = path.animationDuration + } + uni.redirectTo({ + url: `${url}${url.includes('?') ? '&' : '?'}${query || ''}`, + animationType, + animationDuration + }); + navFontColor() + } +} +function defaultTheme() { + return `dark` + // 获取当前时间 + let timeNow = new Date(); + // 获取当前小时 + let hours = timeNow.getHours(); + // 设置默认文字 + let state = ``; + // 判断当前时间段 + if (hours >= 19 || hours <= 7) { + state = `dark`; + } else { + state = `light`; + } + return state; +} +function navFontColor() { + let theme = uni.getStorageSync('theme') || defaultTheme() + setTimeout(() => { + uni.setNavigationBarColor({ + frontColor: theme == 'light' ? '#000000' : '#ffffff', + backgroundColor: '#cccccc', + }) + }, 300) +} +function localImgUrl(name) { + let theme = uni.getStorageSync('theme') || defaultTheme() + let str = theme == 'light' ? 'static/img/light/' : 'static/img/' + return str + name +} +vue.prototype.$imgUrl = app.imgUrl +vue.prototype.$baseUrl = app.baseUrl +vue.prototype.$getFile = getFile +vue.prototype.$copy = copy +vue.prototype.$filterCode = filterCode +vue.prototype.$navFontColor = navFontColor +vue.prototype.$localImgUrl = localImgUrl + diff --git a/plugins/theme-style.js b/plugins/theme-style.js new file mode 100644 index 0000000..7419eb5 --- /dev/null +++ b/plugins/theme-style.js @@ -0,0 +1,50 @@ +let light =` + --light: #333; + --plain:#fff; + --text-color: #666; + --panel: #f7efe5; + --panel-1: fff; + --panel-2: #ebedf0; + --panel-3: #fff; + --form-panel-3: #f7f7f7; + --panel-4: #fff; + --form-panel-4: #F1F1F6; + --border-color: #dcdee0; + --mimicry-shadow:3px 3px 7px #d9d9d9, -5px -5px 10px #ffffff; + --nei-shadow:inset 5px 5px 10px #d9d9d9; + --nei-shadow-5:inset 2px 2px 5px #d9d9d9; + --shadow: 0px 0px 26px 0px rgba(34, 34, 44, 0.06); + --picker-mask:linear-gradient(180deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),linear-gradient(0deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)); + --bg-top:#fff; + --bg-bottom:#f9f9f9; + --tab-nav:#fff; + --tab-nav-shadow:0px -9px 14px 0px rgba(0, 0, 0, 0.06); + --nav-tab-active:#ceb359; +` +let dark = ` + --light:#fff; + --plain:#fff; + --text-color: #9FA6B5; + --panel: #22222d; + --panel-1: #2A2A38; + --panel-2: #343445; + --panel-3: #22222d; + --panel-4: #484859; + --form-panel-4: #484859; + --border-color:#49495F; + --mimicry-shadow:3px 3px 7px #1a1a1a, -5px -5px 10px #242424; + --nei-shadow:inset 5px 5px 10px #1a1a1a; + --nei-shadow-5:inset 2px 2px 5px #1a1a1a; + --shadow: 0px 0px 33px 0px rgba(34, 34, 44, 0.25); + --picker-mask:linear-gradient(180deg,#1f1f1f,rgba(70, 70, 70, 0.6)),linear-gradient(0deg,#1f1f1f,rgba(70, 70, 70, 0.6)); + --bg-top:#292d39; + --bg-bottom:#292d39; + --tab-nav:#292d39; + --tab-nav-shadow:0px -7px 20px 0px rgba(37, 37, 48, 0.83); + --nav-tab-active:#ffffff; +` + +export default { + light, + dark +} \ No newline at end of file diff --git a/plugins/tvStyle.js b/plugins/tvStyle.js new file mode 100644 index 0000000..159cdc6 --- /dev/null +++ b/plugins/tvStyle.js @@ -0,0 +1,28 @@ +let light = { + "paneProperties.background": "#ffffff", + "paneProperties.vertGridProperties.color": "#dcdee0", + "paneProperties.horzGridProperties.color": "#dcdee0", + "scalesProperties.backgroundColor": "#ffffff", + "scalesProperties.lineColor" : "#dcdee0", + "scalesProperties.textColor": "#333", + "scalesProperties.fontSize":9, + "mainSeriesProperties.style": 8, +} + +let dark = { + "paneProperties.background": "#2b2b37", + "paneProperties.vertGridProperties.color": "#49495F", + "paneProperties.horzGridProperties.color": "#49495F", + "scalesProperties.backgroundColor": "#2b2b37", + "scalesProperties.textColor": "#fff", + "scalesProperties.lineColor" : "#49495F", + "scalesProperties.fontSize":9, + "mainSeriesProperties.style": 8, + "paneProperties.legendProperties.showSeriesOHLC": false +} + + +export default { + light, + dark +} \ No newline at end of file diff --git a/plugins/upgrade.js b/plugins/upgrade.js new file mode 100644 index 0000000..4f5ad03 --- /dev/null +++ b/plugins/upgrade.js @@ -0,0 +1,112 @@ +import Member from "../api/member.js" +import vue from 'vue' +// 缓存数据避免重复请求 +let localVersion, onlineVersionObj +// import router from '@/router' +/* eslint-disable */ +let upgrade = { + // 检测是否需要升级并返回升级信息 + async isUpdate(call, notCall) { + // #ifdef H5 + notCall && notCall() + // #endif + // #ifdef APP-PLUS + let currentVersion = await this.getAppVersion(); + let { data } = await this.getNewestVersion() + // data.android.version data.ios.version + if (plus.os.name == "Android") { + if (this.getNum(data.android.version) > this.getNum(currentVersion)) { + call && call(data) + } else { + notCall && notCall() + } + } else if (plus.os.name == "iOS") { + if (this.getNum(data.ios.version) > this.getNum(currentVersion)) { + call && call(data) + } else { + notCall && notCall() + } + } + // #endif + }, + // 获取本地app版本 + getAppVersion() { + return new Promise((success, error) => { + if (localVersion) { + success(localVersion) + } else { + plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => { + success(widgetInfo.version); + localVersion = widgetInfo.version + }); + } + }); + }, + // 获取平台名称 + osName() { + return plus.os.name + }, + // 获取线上版本 + getNewestVersion() { + if (onlineVersionObj) { + return onlineVersionObj + } + onlineVersionObj = Member.getNewestVersion() + return onlineVersionObj + }, + // 获取纯数字(无小数点) + getNum(str) { + str += ""; + return str.replace(/[^0-9]/gi, "") * 1; + }, + // 提示升级 + toUpgrade() { + console.log('去升级') + }, + // 下载文件 + downloadFile({ url, update, before, after }) { + return new Promise((success, error) => { + before && before() + let downloadTask = plus.downloader.createDownload(url, {}, (res, status) => { + if (status == 200) { + success(res.filename) + } + after && after() + }) + let onStateChanged = (e) => { + update && update(parseInt(e.downloadedSize / e.totalSize * 100) || 0) + } + downloadTask.addEventListener("statechanged", onStateChanged, false); + downloadTask.start(); + }); + }, + // 打开文件(安装) + install(path) { + if (plus.os.name == 'Android') { + plus.runtime.install( + path, + { + force: false, + }, + () => { + plus.runtime.restart(); + vue.prototype.$toast("下载成功,正在安装。。。"); + }, + (e) => { + vue.prototype.$toast("安装失败,请尝试重新下载"); + } + ); + } else if (plus.os.name == "iOS") { + plus.runtime.openURL(path) + } + }, + ready(call) { + if (window.plus) { + call(); + } else { + document.addEventListener('plusready', call, false); + } + } +} +/* eslint-disable */ +export default upgrade \ No newline at end of file diff --git a/plugins/vant.js b/plugins/vant.js new file mode 100644 index 0000000..93fc38d --- /dev/null +++ b/plugins/vant.js @@ -0,0 +1,17 @@ +import Vue from 'vue'; +// import Toast from '../wxcomponents/vant/toast/toast'; +import Dialog from '../wxcomponents/vant/dialog/dialog'; +// Vue.prototype.$toast = Toast +Vue.prototype.$toast = (msg) => { + uni.showToast({ + title: msg, + icon: "none" + }); +} +Vue.prototype.$toast.success=(msg)=>{ + uni.showToast({ + title: msg, + icon: "success" + }); +} +Vue.prototype.$dialog = Dialog \ No newline at end of file diff --git a/plugins/vue-modules/index.js b/plugins/vue-modules/index.js new file mode 100644 index 0000000..10c8f5a --- /dev/null +++ b/plugins/vue-modules/index.js @@ -0,0 +1,65 @@ +import Vue from "vue"; +import picker from "./picker"; + +let BoxConstructor = Vue.extend(picker) +let $picker = function (columns, config) { + let defaultConfig = Object.assign({ + title: this.$t('common.select') + }, config) + return new Promise((res, err) => { + let instance = new BoxConstructor({ + el: document.createElement('div'), + data() { + return { + show: false, + columns: [ + { + values: columns.map(item => item.label), + defaultIndex: columns.findIndex(item => item.value == defaultConfig.value) || 0 + } + ], + title: defaultConfig.title + } + }, + methods: { + close() { + this.show = false + let $el = instance.$el + setTimeout(() => { + instance.$destroy() + if ($el.parentNode) { + $el.parentNode.removeChild($el) + } + }, 600) + }, + input(boo) { + if (boo) { + this.show = boo + } else { + this.close() + } + }, + onConfirm(value, index) { + this.close() + res(columns[index].value, value) + }, + onCancel() { + this.close() + err() + }, + onChange() { } + }, + mounted() { + this.$nextTick(() => { + this.show = true + }) + }, + }) + document.body.appendChild(instance.$el); + }) + + +} +export { + $picker +} \ No newline at end of file diff --git a/plugins/vue-modules/picker.vue b/plugins/vue-modules/picker.vue new file mode 100644 index 0000000..fae1d2f --- /dev/null +++ b/plugins/vue-modules/picker.vue @@ -0,0 +1,33 @@ + + + \ No newline at end of file diff --git a/qidongye/android/1080.png b/qidongye/android/1080.png new file mode 100644 index 0000000..bbb3b62 Binary files /dev/null and b/qidongye/android/1080.png differ diff --git a/qidongye/android/480.png b/qidongye/android/480.png new file mode 100644 index 0000000..4bded3a Binary files /dev/null and b/qidongye/android/480.png differ diff --git a/qidongye/android/720.png b/qidongye/android/720.png new file mode 100644 index 0000000..ebf67e2 Binary files /dev/null and b/qidongye/android/720.png differ diff --git a/qidongye/android/bark.png b/qidongye/android/bark.png new file mode 100644 index 0000000..378964f Binary files /dev/null and b/qidongye/android/bark.png differ diff --git a/static/Moabcoin.ico b/static/Moabcoin.ico new file mode 100644 index 0000000..1634097 Binary files /dev/null and b/static/Moabcoin.ico differ diff --git a/static/chart_main/aaa.js b/static/chart_main/aaa.js new file mode 100644 index 0000000..8823f97 --- /dev/null +++ b/static/chart_main/aaa.js @@ -0,0 +1,510 @@ +Datafeeds = {}, Datafeeds.UDFCompatibleDatafeed = function () { + "use strict"; + this._configuration = void 0, this._symbolSearch = null, this._symbolsStorage = null, this._enableLogging = !1, this._initializationFinished = !1, this._callbacks = {}, this._binary_websockets = new BinaryWebsockets, this._symbolRequestResponseHandler = new SymbolReqRespHandler(this._binary_websockets), this._historicalOHLCReqResHandler = new HistoricalOHLCReqRespHandler(this._binary_websockets), this._ohlcStreamingReqResHandler = new OHLCStreamingReqResHandler(this._binary_websockets, this._symbolRequestResponseHandler), this._supported_resolutions = [], this._supported_resolutions.push("1"), this._supported_resolutions.push("2"), this._supported_resolutions.push("3"), this._supported_resolutions.push("5"), this._supported_resolutions.push("10"), this._supported_resolutions.push("15"), this._supported_resolutions.push("30"), this._supported_resolutions.push("60"), this._supported_resolutions.push("120"), this._supported_resolutions.push("240"), this._supported_resolutions.push("480"), this._supported_resolutions.push("D"), this.globalNotifier = GlobalNotifier.getInstance(), this._initialize() +}, Datafeeds.UDFCompatibleDatafeed.prototype.defaultConfiguration = function () { + "use strict"; + return { + supports_search: !0, + supports_group_request: !1, + supported_resolutions: this._supported_resolutions, + supports_marks: !0, + exchanges: [], + symbolsTypes: [{name: "Forex", value: "Forex"}, {name: "Indices", value: "Indices"}, { + name: "OTC Stocks", + value: "OTC Stocks" + }, {name: "Commodities", value: "Commodities"}, {name: "Volatility Indices", value: "Volatility Indices"}] + } +}, Datafeeds.UDFCompatibleDatafeed.prototype.on = function (a, b) { + "use strict"; + return this._callbacks.hasOwnProperty(a) || (this._callbacks[a] = []), this._callbacks[a].push(b), this +}, Datafeeds.UDFCompatibleDatafeed.prototype._fireEvent = function (a, b) { + "use strict"; + if (this._callbacks.hasOwnProperty(a)) { + for (var c = this._callbacks[a], d = 0; d < c.length; ++d) c[d](b); + this._callbacks[a] = [] + } +}, Datafeeds.UDFCompatibleDatafeed.prototype.onInitialized = function () { + "use strict"; + this._initializationFinished = !0, this._fireEvent("initialized") +}, Datafeeds.UDFCompatibleDatafeed.prototype._logMessage = function (a) { + "use strict"; + if (this._enableLogging) { + new Date + } +}, Datafeeds.UDFCompatibleDatafeed.prototype._initialize = function () { + "use strict"; + var a = this; + this._binary_websockets.init().then(function (b) { + b && a._symbolRequestResponseHandler.init().then(function (b, c) { + var d = a.defaultConfiguration(); + d.symbolsTypes = []; + var e = b; + e.forEach(function (a) { + d.symbolsTypes.push({name: a, value: a}) + }), a._setupWithConfiguration(d) + }) + }) +}, Datafeeds.UDFCompatibleDatafeed.prototype.onReady = function (a) { + "use strict"; + var b = this; + setTimeout(function () { + b._configuration ? a(b._configuration) : b.on("configuration_ready", function () { + a(b._configuration) + }) + }, 0) +}, Datafeeds.UDFCompatibleDatafeed.prototype._setupWithConfiguration = function (a) { + "use strict"; + this._configuration = a, a.exchanges || (a.exchanges = []); + var b = a.supported_resolutions || a.supportedResolutions; + a.supported_resolutions = b; + var c = a.symbols_types || a.symbolsTypes; + if (a.symbols_types = c, !a.supports_search && !a.supports_group_request) throw"Unsupported datafeed configuration. Must either support search, or support group request"; + a.supports_search || (this._symbolSearch = new Datafeeds.SymbolSearchComponent(this)), a.supports_group_request ? this._symbolsStorage = new Datafeeds.SymbolsStorage(this) : this.onInitialized(), this._fireEvent("configuration_ready"), this._logMessage("Initialized with " + JSON.stringify(a)) +}, Datafeeds.UDFCompatibleDatafeed.prototype._symbolMetadata = function (a) { + "use strict"; + var b = {}, c = function () { + return "Indices" === a + }, d = function () { + return "OTC Stocks" === a + }, e = function () { + return "Commodities" === a + }, f = function () { + return "Volatility Indices" === a + }, g = function () { + return "Forex" === a + }; + if (a) { + var h = 1e4, i = "2200-2159:123456"; + g() && (h = 1e5), (d() || c() || e()) && (h = 100), f() && (h = 1e4, i = "24x7"), b = { + pricescale: h, + minmov: 1, + session: i + } + } + return b +}, Datafeeds.UDFCompatibleDatafeed.prototype.searchSymbolsByName = function (a, b, c, d) { + "use strict"; + if (!this._configuration) return void d([]); + if (this._configuration.supports_search) { + var e = this, f = function (a) { + var b = []; + return $.each(e._symbolRequestResponseHandler._markets, function (d, f) { + f.name === c && $.each(f.submarkets, function (d, g) { + $.each(g.symbols, function (d, g) { + f.name.indexOf(c) !== -1 && (g.symbol.indexOf(a) === -1 && g.symbol_display.toUpperCase().indexOf(a) === -1 || b.push({ + symbol: g.symbol, + description: g.symbol_display, + type: f.name, + exchange: "", + full_name: g.symbol, + supported_resolutions: e._supported_resolutions + })) + }) + }) + }), b + }; + d(f(a)) + } +}, Datafeeds.UDFCompatibleDatafeed.prototype.searchSymbolsByNameOnly = function (a) { + "use strict"; + if (!this._configuration) return []; + if (this._configuration.supports_search) { + var b = this, c = []; + return $.each(b._symbolRequestResponseHandler._markets, function (d, e) { + $.each(e.submarkets, function (d, f) { + $.each(f.symbols, function (d, f) { + f.symbol.indexOf(a) === -1 && f.symbol_display.toUpperCase().indexOf(a) === -1 || c.push({ + symbol: f.symbol, + description: f.symbol_display, + type: e.name, + exchange: "", + full_name: f.symbol, + supported_resolutions: b._supported_resolutions + }) + }) + }) + }), c + } +}, Datafeeds.UDFCompatibleDatafeed.prototype.resolveSymbol = function (a, b, c) { + "use strict"; + var d = this; + setTimeout(function () { + function e(a) { + var c = a; + d.postProcessSymbolInfo && (c = d.postProcessSymbolInfo(c)), b(c) + } + + if (!d._initializationFinished) return void d.on("initialized", function () { + d.resolveSymbol(a, b, c) + }); + if (d._configuration.supports_group_request) d._initializationFinished ? d._symbolsStorage.resolveSymbol(a, e, c) : d.on("initialized", function () { + d._symbolsStorage.resolveSymbol(a, e, c) + }); else { + var f = !1; + $.each(d._symbolRequestResponseHandler._markets, function (b, c) { + return $.each(c.submarkets, function (b, g) { + return $.each(g.symbols, function (b, g) { + if (g.symbol.indexOf(a) !== -1) { + var h = d._symbolMetadata(c.name), i = h.pricescale, j = h.minmov, k = h.session; + return e({ + name: g.symbol, + timezone: "UTC", + has_intraday: !0, + has_no_volume: !0, + ticker: g.symbol, + description: g.symbol_display, + type: c.name, + minmov: j, + pricescale: i, + supported_resolutions: d._supported_resolutions, + session: k + }), f = !0, !1 + } + }), !f + }), !f + }), f || c("unknown_symbol") + } + }, 0) +}, Datafeeds.UDFCompatibleDatafeed.prototype.getBars = function (a, b, c, d, e, f) { + "use strict"; + this.globalNotifier.loadingNotification(), this._historicalOHLCReqResHandler.getBars(a, e, f) +}, Datafeeds.UDFCompatibleDatafeed.prototype.subscribeBars = function (a, b, c, d) { + "use strict"; + this._ohlcStreamingReqResHandler.subscribeBars(a, c, d) +}, Datafeeds.UDFCompatibleDatafeed.prototype.unsubscribeBars = function (a) { + "use strict"; + this._ohlcStreamingReqResHandler.unsubscribeBars(a) +}, Datafeeds.UDFCompatibleDatafeed.prototype.getMarks = function (a, b, c, d, e) { + "use strict" +}, Datafeeds.UDFCompatibleDatafeed.prototype.calculateHistoryDepth = function (a, b, c) { + "use strict" +}, Datafeeds.UDFCompatibleDatafeed.prototype.getQuotes = function (a, b, c) { + "use strict" +}, Datafeeds.UDFCompatibleDatafeed.prototype.subscribeQuotes = function (a, b, c, d) { + "use strict" +}, Datafeeds.UDFCompatibleDatafeed.prototype.unsubscribeQuotes = function (a) { + "use strict" +}, Datafeeds.SymbolsStorage = function (a) { + "use strict"; + this._datafeed = a, this._symbolsInfo = {}, this._symbolsList = [], this._requestFullSymbolsList() +}, Datafeeds.SymbolsStorage.prototype._requestFullSymbolsList = function () { + "use strict"; + var a = this, b = this._datafeed; + $.each(a._symbolRequestResponseHandler._markets, function (c, d) { + $.each(d.submarkets, function (c, e) { + $.each(e.symbols, function (c, e) { + var f = b._symbolMetadata(d.symbol), g = f.pricescale, h = f.minmov, i = f.session, j = { + name: e.symbol, + base_name: e.symbol, + description: e.symbol_display, + full_name: e.symbol, + legs: [e.symbol], + has_intraday: !0, + has_no_volume: !0, + listed_exchange: [], + exchange: [""], + minmov: h, + pricescale: g, + type: d.name, + session: i, + ticker: e.symbol, + timezone: "UTC", + supported_resolutions: a._supported_resolutions, + has_daily: !0, + has_fractional_volume: !1, + has_weekly_and_monthly: !0, + has_empty_bars: !1, + volume_precision: 0 + }; + a._symbolsInfo[e.symbol] = a._symbolsInfo[e.display_name] = j, a._symbolsList.push(e.symbol) + }) + }) + }), this._symbolsList.sort(), this._datafeed.onInitialized() +}, Datafeeds.SymbolsStorage.prototype.resolveSymbol = function (a, b, c) { + "use strict"; + this._symbolsInfo.hasOwnProperty(a) ? b(this._symbolsInfo[a]) : c("invalid symbol") +}, Datafeeds.SymbolSearchComponent = function (a) { + "use strict"; + this._datafeed = a +}, Datafeeds.SymbolSearchComponent.prototype.searchSymbolsByName = function (a, b) { + "use strict"; + if (!this._datafeed._symbolsStorage) throw"Cannot use local symbol search when no groups information is available"; + for (var c = this._datafeed._symbolsStorage, d = [], e = !a.ticker || 0 === a.ticker.length, f = 0; f < c._symbolsList.length; ++f) { + var g = c._symbolsList[f], h = c._symbolsInfo[g]; + if (!(a.type && a.type.length > 0 && h.type !== a.type) && ((e || 0 === h.name.toUpperCase().indexOf(a.ticker)) && d.push({ + symbol: h.name, + full_name: h.full_name, + description: h.description, + exchange: h.exchange, + params: [], + type: h.type, + ticker: h.name, + supported_resolutions: this._datafeed._supported_resolutions + }), d.length >= b)) break + } + a.onResultReadyCallback(d) +}, BinaryWebsockets = function () { + "use strict"; + this.unresolved_promises = [], this.callbacks = [], this.ws = null, this._commonUtils = CommonUtils.getInstance(), this.globalNotifier = GlobalNotifier.getInstance(), this.reqIdCounter = 0 +}, BinaryWebsockets.prototype.init = function () { + var a = this; + return this.ws = new WebSocket("wss://frontend.binaryws.com/websockets/v3?l=en&app_id=2742"), this.ws.onopen = function (b) { + (a.unresolved_promises.connectionOpenEvent || []).forEach(function (a) { + a.resolve(!0) + }), delete a.unresolved_promises.connectionOpenEvent + }, this.ws.onclose = function (b) { + setTimeout(function () { + a.init().then(function (b) { + b && (a.callbacks.ohlc || []).forEach(function (b) { + if (b.requestObject) { + var c = b.requestObject.req_id && Object.keys(b.requestObject).length > 1, + d = !b.requestObject.req_id && Object.keys(b.requestObject).length > 0; + (c || d) && a.ws.send(JSON.stringify(b.requestObject)) + } + }) + }) + }, 1e3) + }, this.ws.onerror = function (b) { + a.globalNotifier.noConnectionNotification(), $.growl.error({message: "Connection error. Refresh page!"}), a.unresolved_promises = [], a.callbacks = [] + }, this.ws.onmessage = function (b) { + var c = JSON.parse(b.data); + (a.callbacks[c.msg_type] || []).forEach(function (a) { + a._callback(c) + }); + var d = c.req_id, e = a.unresolved_promises[d]; + e && (c.error ? (c.error.echo_req = c.echo_req, e.reject(c.error)) : e.resolve(c), delete a.unresolved_promises[d]) + }, new Promise(function (b, c) { + a.unresolved_promises.connectionOpenEvent = a.unresolved_promises.connectionOpenEvent || [], a.unresolved_promises.connectionOpenEvent.push({ + resolve: b, + reject: c + }) + }) +}, BinaryWebsockets.prototype.send_request = function (a) { + a.req_id = ++this.reqIdCounter; + var b = this, c = a.req_id && Object.keys(a).length > 1; + return c ? new Promise(function (c, d) { + b.unresolved_promises[a.req_id] = {resolve: c, reject: d}, b.ws.send(JSON.stringify(a)) + }) : Promise.reject({code: "EmptyRequest", message: "Empty Request", echo_req: a}) +}, BinaryWebsockets.prototype.on = function (a, b) { + (this.callbacks[a] = this.callbacks[a] || []).push(b) +}, BinaryWebsockets.prototype.request_trading_times = function () { + "use strict"; + return this.send_request({trading_times: "" + (new Date).toISOString().slice(0, 10)}) +}, BinaryWebsockets.prototype.request_stop_ohlc_streaming = function (a, b) { + "use strict"; + var c = this; + return this.callbacks.ohlc = this.callbacks.ohlc || [], this.callbacks.ohlc.forEach(function (a, d) { + if (a.listenerID === b) return c.callbacks.ohlc.splice(d, 1), !1 + }), this.send_request({forget: a}) +}, BinaryWebsockets.prototype.request_ohlc_streaming = function (a, b, c) { + "use strict"; + var d = {ticks_history: a, end: "latest", count: 1, style: "candles", granularity: b, subscribe: 1}; + this.ws.send(JSON.stringify(d)), c && (c.requestObject = d, this.on("ohlc", c)) +}, BinaryWebsockets.prototype.request_candles = function (a) { + "use strict"; + var b = a.count || 5e3, c = a.granularity, d = null; + if (a.startTime) d = moment.utc(a.startTime); else { + d = moment.utc(); + var e = this._commonUtils.parseSuffixAndIntValue(); + d = d.subtract(b * this._commonUtils.totalSecondsInABar(e.suffix, e.intVal), "seconds") + } + var f = moment.utc(); + f = f.subtract(3, "years"), f = f.add(2, "days"), d.isBefore(f) && (d = f); + var g = {ticks_history: a.symbol, end: "latest", style: "candles", start: d.unix(), count: b, granularity: c}; + return void 0 !== a.adjust_start_time && null !== a.adjust_start_time || (g.adjust_start_time = 1), this.send_request(g) +}; +var CommonUtils = function () { + function a() { + } + + a.prototype.parseSuffixAndIntValue = function () { + "use strict"; + var a = TradingView.actualResolution.toUpperCase().replace("D", "").replace("M", "").replace("W", ""), + b = "" === a ? 1 : parseInt(a), c = TradingView.actualResolution.replace("" + b, ""); + switch (c) { + case"": + b < 60 ? c = "M" : (b /= 60, c = "H"); + break; + case"W": + b *= 7, c = "D"; + break; + case"M": + b *= 30, c = "D" + } + return {suffix: c, intVal: b} + }, a.prototype.totalSecondsInABar = function (a, b) { + "use strict"; + var c = 0; + switch (a) { + case"M": + c = 60 * b; + break; + case"H": + c = 60 * b * 60; + break; + case"D": + c = 24 * b * 60 * 60 + } + return c + }; + var b = null; + return { + getInstance: function () { + return null === b && (b = new a, b.constructor = null), b + } + } +}(), GlobalNotifier = function () { + function a() { + this.handleEvent = function (a) { + var b = $(document).find("iframe").contents().find(".chart-status-picture"); + b.removeClass(b.attr("class")).addClass("chart-status-picture " + a) + } + } + + a.prototype.delayedNotification = function () { + this.handleEvent("delayed-feed") + }, a.prototype.realtimeNotification = function () { + this.handleEvent("realtime-feed") + }, a.prototype.loadingNotification = function () { + this.handleEvent("loading") + }, a.prototype.noConnectionNotification = function () { + this.handleEvent("no-connection") + }; + var b = null; + return { + getInstance: function () { + return null === b && (b = new a, b.constructor = null), b + } + } +}(); +HistoricalOHLCReqRespHandler = function (a) { + this._binary_websockets = a, this._commonUtils = CommonUtils.getInstance() +}, HistoricalOHLCReqRespHandler.prototype.getBars = function (a, b, c) { + "use strict"; + var d = this._commonUtils.parseSuffixAndIntValue(), e = d.suffix, f = d.intVal, + g = this._commonUtils.totalSecondsInABar(e, f); + this._binary_websockets.request_candles({symbol: a.ticker, granularity: g}).catch(function () { + c() + }).then(function (a) { + if (a.candles) { + var c = []; + a.candles.forEach(function (a) { + var b = 1e3 * parseInt(a.epoch), d = parseFloat(a.open), e = parseFloat(a.high), f = parseFloat(a.low), + g = parseFloat(a.close); + c.push({time: b, open: d, high: e, low: f, close: g}) + }), b(c) + } + }) +}, OHLCStreamingReqResHandler = function (a, b) { + this._binary_websockets = a, this._streamingMap = {}, this._commonUtils = CommonUtils.getInstance(), this._symbolRequestResponseHandler = b, this.globalNotifier = GlobalNotifier.getInstance() +}, OHLCStreamingReqResHandler.prototype.subscribeBars = function (a, b, c) { + var d = this, e = this._commonUtils.parseSuffixAndIntValue(), + f = this._commonUtils.totalSecondsInABar(e.suffix, e.intVal); + this._streamingMap[c] = { + symbol: a.ticker, + resolution: TradingView.actualResolution, + timerHandler: null, + granularity: f, + lastBar: null, + timerCallback: function () { + d.globalNotifier.delayedNotification(); + var a = this; + d._binary_websockets.request_candles({ + symbol: a.symbol, + granularity: a.granularity, + startTime: a.lastBar ? a.lastBar.time : null, + count: a.lastBar ? null : 1, + adjust_start_time: a.lastBar ? 0 : null + }).catch(function (a) { + }).then(function (c) { + c && c.candles && c.candles.forEach(function (c) { + var d = 1e3 * parseInt(c.epoch), e = parseFloat(c.open), f = parseFloat(c.high), g = parseFloat(c.low), + h = parseFloat(c.close), i = {time: d, open: e, high: f, low: g, close: h}; + (!a.lastBar || i.time > a.lastBar.time) && (a.lastBar = i), b(i) + }) + }) + }, + streamingCallback: function (a) { + d.globalNotifier.realtimeNotification(); + var e = d._streamingMap[c]; + if (e && a.ohlc.symbol === e.symbol && a.ohlc.granularity === e.granularity) { + e.server_request_id = a.ohlc.id; + var f = 1e3 * parseInt(a.ohlc.open_time), g = parseFloat(a.ohlc.open), h = parseFloat(a.ohlc.high), + i = parseFloat(a.ohlc.low), j = parseFloat(a.ohlc.close); + f && g && h && i && j && (this.lastBar = {time: f, open: g, high: h, low: i, close: j}, b(this.lastBar)) + } + } + }; + var g = this._symbolRequestResponseHandler.findInstrumentObjectBySymbol(a.ticker); + if (g) if (g.delay_amount > 0) { + var h = this._streamingMap[c]; + h.timerHandler = setInterval(function () { + h.timerCallback.call(h) + }, 6e4) + } else this._binary_websockets.request_ohlc_streaming(a.ticker, f, { + listenerID: c, + _callback: this._streamingMap[c].streamingCallback + }) +}, OHLCStreamingReqResHandler.prototype.unsubscribeBars = function (a) { + var b = this._streamingMap[a]; + b.timerHandler ? clearInterval(b.timerHandler) : this._binary_websockets.request_stop_ohlc_streaming(b.server_request_id, a).then(function () { + }).catch(function () { + }), delete this._streamingMap[a] +}, SymbolReqRespHandler = function (a) { + this._binary_websockets = a +}, SymbolReqRespHandler.prototype.init = function () { + "use strict"; + this._markets = null, this._symbolTypes = null; + var a = this; + return new Promise(function (b, c) { + a._binary_websockets.request_trading_times().then(function (c) { + a.process(c), b(a._symbolTypes, a._markets) + }).catch(function (a) { + "undefined" != typeof trackJs && trackJs.track("Unexpected response from server, [request_trading_times] Response error " + JSON.stringify(a)) + }) + }) +}, SymbolReqRespHandler.prototype.process = function (a) { + "use strict"; + this._markets = [], this._symbolTypes = []; + for (var b = 0; b < a.trading_times.markets.length; b++) { + var c = a.trading_times.markets[b]; + this._symbolTypes.push(c.name); + for (var d = {name: c.name, submarkets: []}, e = 0; e < c.submarkets.length; ++e) { + for (var f = c.submarkets[e], g = {name: f.name, symbols: []}, h = 0; h < f.symbols.length; h++) { + var i = f.symbols[h]; + i.feed_license && "chartonly" === i.feed_license || g.symbols.push({ + symbol: i.symbol, + symbol_display: i.name, + feed_license: i.feed_license || "realtime", + delay_amount: i.delay_amount || 0 + }) + } + d.submarkets.push(g) + } + this._markets.push(d) + } +}, SymbolReqRespHandler.prototype.findInstrumentObjectBySymbol = function (a) { + var b = null, c = !0; + return this._markets.forEach(function (d) { + return d.submarkets.forEach(function (d) { + return d.symbols.forEach(function (d) { + return d.symbol === a && (b = $.extend(!0, {}, d), c = !1), c + }), c + }), c + }), b +}, function (a) { + a.fn.bindFirst = function (b, c, d) { + var e = b.indexOf("."), f = e > 0 ? b.substring(e) : ""; + return b = e > 0 ? b.substring(0, e) : b, d = void 0 === d ? c : d, c = "function" == typeof c ? {} : c, this.each(function () { + var e = a(this), g = this["on" + b]; + g && (e.bind(b, function (a) { + return g(a.originalEvent) + }), this["on" + b] = null), e.bind(b + f, c, d); + var h = e.data("events") || a._data(e[0], "events"), i = h[b], j = i.pop(); + i.unshift(j) + }) + }, a.isEnterKeyPressed = function (a) { + var b = a.keyCode ? a.keyCode : a.which; + return "13" == b + } +}(jQuery); diff --git a/static/chart_main/binance.js b/static/chart_main/binance.js new file mode 100644 index 0000000..611effb --- /dev/null +++ b/static/chart_main/binance.js @@ -0,0 +1,15577 @@ +function isArray(e) { + return "[object Array]" === Object.prototype.toString.call(e) +} + +function isBoolean(e) { + return "boolean" == typeof e +} + +function isDate(e) { + return "[object Date]" === Object.prototype.toString.call(e) +} + +function isDefined(e) { + return void 0 !== e +} + +function isFunction(e) { + return "function" == typeof e +} + +function isNull(e) { + return null === e +} + +function isNumber(e) { + return "number" == typeof e +} + +function isObject(e) { + return null !== e && "object" == typeof e +} + +function isString(e) { + return "string" == typeof e +} + +function isUndefined(e) { + return void 0 === e +} + +function convertToBoolean(e) { + return isBoolean(e) ? e : null !== e && "" !== e && "false" !== e +} + +function hasProperty(e, t) { + return e.hasOwnProperty(t) +} + +function isStringEmpty(e) { + return isNull(e) || isUndefined(e) || isString(e) && 0 == e.length +} + +function isStringNonempty(e) { + return isString(e) && e.length > 0 +} + +function upperCaseFirstLetter(e) { + return e.charAt(0).toUpperCase() + e.slice(1) +} + +function areEqual(e, t) { + return angular.equals(e, t) +} + +function min(e, t) { + return e < t ? e : t +} + +function max(e, t) { + return e > t ? e : t +} + +function beginsWith(e, t) { + return isString(e) && 0 == e.lastIndexOf(t, 0) +} + +function endsWith(e, t) { + return isString(e) && -1 !== e.indexOf(t, e.length - t.length) +} + +function copy(e, t) { + return angular.copy(e, t) +} + +function removeProperty(e, t) { + delete e[t] +} + +function removeProperties(e, t) { + for (var n = 0; n < t.length; ++n) delete e[t[n]] +} + +function forEach(e, t, n) { + return angular.forEach(e, t, n) +} + +function defineScalyrJsLibrary(e, t) { + var n = []; + if (t instanceof Array) for (var r = 0; r < t.length - 1; ++r) n.push(t[r]); + return angular.module(e, n).factory(e, t) +} + +function defineScalyrAngularModule(e, t) { + return angular.module(e, t) +} + +function isArray(e) { + return "[object Array]" === Object.prototype.toString.call(e) +} + +function isBoolean(e) { + return "boolean" == typeof e +} + +function isDate(e) { + return "[object Date]" === Object.prototype.toString.call(e) +} + +function isDefined(e) { + return void 0 !== e +} + +function isFunction(e) { + return "function" == typeof e +} + +function isNull(e) { + return null === e +} + +function isNumber(e) { + return "number" == typeof e +} + +function isObject(e) { + return null !== e && "object" == typeof e +} + +function isString(e) { + return "string" == typeof e +} + +function isUndefined(e) { + return void 0 === e +} + +function convertToBoolean(e) { + return isBoolean(e) ? e : null !== e && "" !== e && "false" !== e +} + +function hasProperty(e, t) { + return e.hasOwnProperty(t) +} + +function isStringEmpty(e) { + return isNull(e) || isUndefined(e) || isString(e) && 0 == e.length +} + +function isStringNonempty(e) { + return isString(e) && e.length > 0 +} + +function upperCaseFirstLetter(e) { + return e.charAt(0).toUpperCase() + e.slice(1) +} + +function areEqual(e, t) { + return angular.equals(e, t) +} + +function min(e, t) { + return e < t ? e : t +} + +function max(e, t) { + return e > t ? e : t +} + +function beginsWith(e, t) { + return isString(e) && 0 == e.lastIndexOf(t, 0) +} + +function endsWith(e, t) { + return isString(e) && -1 !== e.indexOf(t, e.length - t.length) +} + +function copy(e, t) { + return angular.copy(e, t) +} + +function removeProperty(e, t) { + delete e[t] +} + +function removeProperties(e, t) { + for (var n = 0; n < t.length; ++n) delete e[t[n]] +} + +function forEach(e, t, n) { + return angular.forEach(e, t, n) +} + +function defineScalyrJsLibrary(e, t) { + var n = []; + if (t instanceof Array) for (var r = 0; r < t.length - 1; ++r) n.push(t[r]); + return angular.module(e, n).factory(e, t) +} + +function defineScalyrAngularModule(e, t) { + return angular.module(e, t) +} + +function getLang() { + var e = localStorage.lang || "en"; + return Langs[e] || Langs.en +} + +function log10(e) { + return Math.log(e) / Math.LN10 +} + +function millitime() { + return (new Date).getTime() / 1e3 +} + +function hms_from_epoch_ms(e, t) { + var n, r, o, i = "", a = null; + try { + a = new Date(e), t ? (n = a.getHours(), r = a.getMinutes(), o = a.getSeconds()) : (n = a.getUTCHours(), r = a.getUTCMinutes(), o = a.getUTCSeconds()), i += (n < 10 ? "0" + n : n) + ":", i += (r < 10 ? "0" + r : r) + ":", i += o < 10 ? "0" + o : o + } catch (e) { + i = "00:00:00" + } + return i +} + +function formatted_date(e, t, n) { + var r = new Date(1e3 * e), o = ""; + return !0 === n ? (t && (o = r.getFullYear() + "-"), o += r.getMonth() + 1 < 10 ? "0" : "", o += r.getMonth() + 1 + "-", o += r.getDate() < 10 ? "0" : "", o += r.getDate()) : (t && (o = r.getUTCFullYear() + "-"), o += r.getUTCMonth() + 1 < 10 ? "0" : "", o += r.getUTCMonth() + 1 + "-", o += r.getUTCDate() < 10 ? "0" : "", o += r.getUTCDate()), o +} + +function timestamp(e) { + null != e && void 0 !== e || (e = !0); + var t, n, r, o = new Date, i = ""; + return e ? (t = o.getHours(), n = o.getMinutes(), r = o.getSeconds()) : (t = o.getUTCHours(), n = o.getUTCMinutes(), r = o.getUTCSeconds()), i += (t < 10 ? "0" + t : t) + ":", i += (n < 10 ? "0" + n : n) + ":", i += r < 10 ? "0" + r : r +} + +function hms_from_sec(e) { + var t = "", n = e % 60, r = (e - n) / 60 % 60, o = (e - 60 * r - n) / 3600 % 3600; + return t += (o < 10 ? "0" + o : o) + ":", t += (r < 10 ? "0" + r : r) + ":", t += n < 10 ? "0" + n : n +} + +function dhms_from_sec(e) { + var t, n, r, o, i = "", a = e; + return t = Math.floor(a / 86400), a -= 86400 * t, n = Math.floor(a / 3600), a -= 3600 * n, r = Math.floor(a / 60), o = a - 60 * r, i += t > 0 ? t + ":" : "", i += (n < 10 ? "0" + n : n) + ":", i += (r < 10 ? "0" + r : r) + ":", i += o < 10 ? "0" + o : o +} + +function time_delta_print(e) { + var t = "", n = 0, r = 0, o = 0, i = 0, a = e; + return a |= 0, n = Math.floor(a / 86400), a -= 86400 * n, r = Math.floor(a / 3600), a -= 3600 * r, o = Math.floor(a / 60), i = a - 60 * o, n >= 2 ? t = n + " days" : n >= 1 ? (t = n + " day, " + r + " hour", r > 1 && (t += "s")) : r >= 1 ? (t = r + " hour", r > 1 && (t += "s")) : t = o >= 1 ? o + " min" : i + " sec", t + " ago" +} + +function numberWithCommas(e) { + var t = e.toString().split("."); + return t[0] = t[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","), t.join(".") +} + +function delayClass(e, t, n) { + window.setTimeout(function () { + $(e).removeClass(t) + }, n) +} + +function deepCopy(e) { + return $.extend(!0, {}, e) +} + +function AssertException(e) { + this.message = e +} + +function assert(e, t) { + if (!e) throw new AssertException(t) +} + +function stopEvent(e) { + try { + e.preventDefault(), e.stopPropagation() + } catch (e) { + } +} + +function NoBreak(e) { + return e.replace(/ /g, " ") +} + +function HTMLEncode(e) { + return $("
").text(e).html() +} + +function HTMLDecode(e) { + return $("
").html(e).text() +} + +function clearingSpan() { + return $("").addClass("clear").html(" ") +} + +function clearingSpanHTML() { + return ' ' +} + +function uniqueID() { + return "id" + lastUniqueID++ +} + +function randInt(e) { + return Math.floor(Math.random() * e) +} + +function randRange(e, t) { + return Math.floor(Math.random() * (t - e)) + e +} + +function randomString(e) { + "number" != typeof e && (e = 10); + var t = 0, n = ""; + for (t = 0; t < e; t++) n += alphabet[randInt(alphalen)]; + return n +} + +function storageSupport() { + try { + return "localStorage" in window && null !== window.localStorage + } catch (e) { + return !1 + } +} + +function wsSupport() { + try { + return !!window.WebSocket + } catch (e) { + return !1 + } +} + +function locationOf(e, t, n, r, o) { + null == n && (n = 0), null == r && (r = t.length - 1), "string" == typeof o && ("gt" == o ? o = function (e, t) { + return e > t + } : "lt" == o && (o = function (e, t) { + return e < t + })); + var i = parseInt(n + (r - n) / 2); + return t[i] == e ? {index: i, exact: !0} : r - n <= 1 ? { + index: i + 1, + exact: !1 + } : o(t[i], e) ? locationOf(e, t, i, r, o) : locationOf(e, t, n, i, o) +} + +function has_worker() { + return !!window.Worker +} + +function pixel_ratio() { + return window.hasOwnProperty("devicePixelRatio") ? window.devicePixelRatio : 1 +} + +function _(e, t) { + return e +} + +function PtInPolygon(e, t) { + for (var n = 0, r = 0; r < t.length; r++) p1 = t[r], p2 = t[(r + 1) % t.length], p1[1] != p2[1] && (e[1] < Math.min(p1[1], p2[1]) || e[1] >= Math.max(p1[1], p2[1]) || (e[1] - p1[1]) * (p2[0] - p1[0]) / (p2[1] - p1[1]) + p1[0] > e[0] && n++); + return n % 2 == 1 +} + +function chackRate() { + var e = 0; + for (timesList.length >= times && timesList.pop(), timesList.splice(0, 0, (new Date).getTime()), e = 0; e < timesList.length && !(timesList[e] + timeLimit < (new Date).getTime()); e++) ; + return !(e >= times) || (console.log("@@@@@@按钮点击频率太快"), !1) +} + +function Graph(e) { + this.vertices = e, this.edges = 0, this.adj = [], this.edgeTo = []; + for (var t = 0; t < this.vertices; t++) ; + this.marked = {}, this.addEdge = function (e, t) { + this.adj[e] || (this.adj[e] = []), this.adj[t] || (this.adj[t] = []), this.adj[e].push(t), this.adj[t].push(e), this.edges++ + }, this.bfs = function (e) { + this.source = e; + for (var t in this.marked) this.marked[t] = !1; + var n = []; + for (this.marked[e] = !0, n.push(e); n.length > 0;) { + var r = n.shift(); + if (this.adj[r]) for (var o = 0; o < this.adj[r].length; o++) for (var i = this.adj[r], a = 0; a < i.length; a++) this.marked[i[a]] || (this.edgeTo[i[a]] = r, this.marked[i[a]] = !0, n.push(i[a])) + } + }, this.pathTo = function (e) { + var t = this.source, n = 0, r = []; + if (!this.edgeTo[e]) return 0; + for (var o = e; o != t; o = this.edgeTo[o]) { + if (!this.edgeTo[o]) return 0; + if (r.push([this.edgeTo[o], o]), ++n > 100) break + } + return r + } +} + +!function (e) { + var t = function (e) { + var t = e.backingStorePixelRatio || e.mozBackingStorePixelRatio || e.msBackingStorePixelRatio || e.oBackingStorePixelRatio || e.backingStorePixelRatio || 1; + return (window.devicePixelRatio || 1) / t + }(e); + 1 !== t && (!function (e, t) { + for (var n in e) e.hasOwnProperty(n) && t(e[n], n) + }({ + fillRect: "all", + clearRect: "all", + strokeRect: "all", + moveTo: "all", + lineTo: "all", + arc: [0, 1, 2], + arcTo: "all", + bezierCurveTo: "all", + isPointinPath: "all", + isPointinStroke: "all", + quadraticCurveTo: "all", + rect: "all", + translate: "all", + createRadialGradient: "all", + createLinearGradient: "all" + }, function (n, r) { + e[r] = function (e) { + return function () { + var r, o, i = Array.prototype.slice.call(arguments); + if ("all" === n) i = i.map(function (e) { + return e * t + }); else if (Array.isArray(n)) for (r = 0, o = n.length; r < o; r++) i[n[r]] *= t; + return e.apply(this, i) + } + }(e[r]) + }), e.stroke = function (e) { + return function () { + this.lineWidth *= t, e.apply(this, arguments), this.lineWidth /= t + } + }(e.stroke), e.fillText = function (e) { + return function () { + var n = Array.prototype.slice.call(arguments); + n[1] *= t, n[2] *= t, this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g, function (e, n, r) { + return n * t + r + }), n.length >= 4 && t > 1 && (n[3] *= t), e.apply(this, n), this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g, function (e, n, r) { + return n / t + r + }) + } + }(e.fillText), e.strokeText = function (e) { + return function () { + var n = Array.prototype.slice.call(arguments); + n[1] *= t, n[2] *= t, this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g, function (e, n, r) { + return n * t + r + }), e.apply(this, n), this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g, function (e, n, r) { + return n / t + r + }) + } + }(e.strokeText)) +}(CanvasRenderingContext2D.prototype), function (e) { + e.getContext = function (e) { + return function (t) { + var n, r, o = e.call(this, t); + return "2d" === t && (n = o.backingStorePixelRatio || o.mozBackingStorePixelRatio || o.msBackingStorePixelRatio || o.oBackingStorePixelRatio || o.backingStorePixelRatio || 1, (r = (window.devicePixelRatio || 1) / n) > 1 && "true" != $(this).attr("val") && !($(this).attr("class") || "").match("geetest_absolute") && ("" != this.style.height && Number(this.style.height.replace("px", "")) * r == this.height || (this.style.height = this.height + "px", this.style.width = this.width + "px", this.width *= r, this.height *= r, $(this).attr("val", !0)))), o + } + }(e.getContext) +}(HTMLCanvasElement.prototype), function (e, t) { + function n(e) { + var t = e.length, n = ce.type(e); + return !ce.isWindow(e) && (!(1 !== e.nodeType || !t) || ("array" === n || "function" !== n && (0 === t || "number" == typeof t && t > 0 && t - 1 in e))) + } + + function r(e) { + var t = Te[e] = {}; + return ce.each(e.match(fe) || [], function (e, n) { + t[n] = !0 + }), t + } + + function o(e, n, r, o) { + if (ce.acceptData(e)) { + var i, a, s = ce.expando, l = e.nodeType, c = l ? ce.cache : e, u = l ? e[s] : e[s] && s; + if (u && c[u] && (o || c[u].data) || r !== t || "string" != typeof n) return u || (u = l ? e[s] = ee.pop() || ce.guid++ : s), c[u] || (c[u] = l ? {} : {toJSON: ce.noop}), ("object" == typeof n || "function" == typeof n) && (o ? c[u] = ce.extend(c[u], n) : c[u].data = ce.extend(c[u].data, n)), a = c[u], o || (a.data || (a.data = {}), a = a.data), r !== t && (a[ce.camelCase(n)] = r), "string" == typeof n ? null == (i = a[n]) && (i = a[ce.camelCase(n)]) : i = a, i + } + } + + function i(e, t, n) { + if (ce.acceptData(e)) { + var r, o, i = e.nodeType, a = i ? ce.cache : e, l = i ? e[ce.expando] : ce.expando; + if (a[l]) { + if (t && (r = n ? a[l] : a[l].data)) { + ce.isArray(t) ? t = t.concat(ce.map(t, ce.camelCase)) : t in r ? t = [t] : (t = ce.camelCase(t), t = t in r ? [t] : t.split(" ")), o = t.length; + for (; o--;) delete r[t[o]]; + if (n ? !s(r) : !ce.isEmptyObject(r)) return + } + (n || (delete a[l].data, s(a[l]))) && (i ? ce.cleanData([e], !0) : ce.support.deleteExpando || a != a.window ? delete a[l] : a[l] = null) + } + } + } + + function a(e, n, r) { + if (r === t && 1 === e.nodeType) { + var o = "data-" + n.replace(Ce, "-$1").toLowerCase(); + if ("string" == typeof(r = e.getAttribute(o))) { + try { + r = "true" === r || "false" !== r && ("null" === r ? null : +r + "" === r ? +r : Se.test(r) ? ce.parseJSON(r) : r) + } catch (e) { + } + ce.data(e, n, r) + } else r = t + } + return r + } + + function s(e) { + var t; + for (t in e) if (("data" !== t || !ce.isEmptyObject(e[t])) && "toJSON" !== t) return !1; + return !0 + } + + function l() { + return !0 + } + + function c() { + return !1 + } + + function u() { + try { + return X.activeElement + } catch (e) { + } + } + + function f(e, t) { + do { + e = e[t] + } while (e && 1 !== e.nodeType); + return e + } + + function d(e, t, n) { + if (ce.isFunction(t)) return ce.grep(e, function (e, r) { + return !!t.call(e, r, e) !== n + }); + if (t.nodeType) return ce.grep(e, function (e) { + return e === t !== n + }); + if ("string" == typeof t) { + if (qe.test(t)) return ce.filter(t, e, n); + t = ce.filter(t, e) + } + return ce.grep(e, function (e) { + return ce.inArray(e, t) >= 0 !== n + }) + } + + function p(e) { + var t = ze.split("|"), n = e.createDocumentFragment(); + if (n.createElement) for (; t.length;) n.createElement(t.pop()); + return n + } + + function h(e, t) { + return ce.nodeName(e, "table") && ce.nodeName(1 === t.nodeType ? t : t.firstChild, "tr") ? e.getElementsByTagName("tbody")[0] || e.appendChild(e.ownerDocument.createElement("tbody")) : e + } + + function g(e) { + return e.type = (null !== ce.find.attr(e, "type")) + "/" + e.type, e + } + + function m(e) { + var t = rt.exec(e.type); + return t ? e.type = t[1] : e.removeAttribute("type"), e + } + + function v(e, t) { + for (var n, r = 0; null != (n = e[r]); r++) ce._data(n, "globalEval", !t || ce._data(t[r], "globalEval")) + } + + function b(e, t) { + if (1 === t.nodeType && ce.hasData(e)) { + var n, r, o, i = ce._data(e), a = ce._data(t, i), s = i.events; + if (s) { + delete a.handle, a.events = {}; + for (n in s) for (r = 0, o = s[n].length; o > r; r++) ce.event.add(t, n, s[n][r]) + } + a.data && (a.data = ce.extend({}, a.data)) + } + } + + function y(e, t) { + var n, r, o; + if (1 === t.nodeType) { + if (n = t.nodeName.toLowerCase(), !ce.support.noCloneEvent && t[ce.expando]) { + o = ce._data(t); + for (r in o.events) ce.removeEvent(t, r, o.handle); + t.removeAttribute(ce.expando) + } + "script" === n && t.text !== e.text ? (g(t).text = e.text, m(t)) : "object" === n ? (t.parentNode && (t.outerHTML = e.outerHTML), ce.support.html5Clone && e.innerHTML && !ce.trim(t.innerHTML) && (t.innerHTML = e.innerHTML)) : "input" === n && et.test(e.type) ? (t.defaultChecked = t.checked = e.checked, t.value !== e.value && (t.value = e.value)) : "option" === n ? t.defaultSelected = t.selected = e.defaultSelected : ("input" === n || "textarea" === n) && (t.defaultValue = e.defaultValue) + } + } + + function x(e, n) { + var r, o, i = 0, + a = typeof e.getElementsByTagName !== G ? e.getElementsByTagName(n || "*") : typeof e.querySelectorAll !== G ? e.querySelectorAll(n || "*") : t; + if (!a) for (a = [], r = e.childNodes || e; null != (o = r[i]); i++) !n || ce.nodeName(o, n) ? a.push(o) : ce.merge(a, x(o, n)); + return n === t || n && ce.nodeName(e, n) ? ce.merge([e], a) : a + } + + function w(e) { + et.test(e.type) && (e.defaultChecked = e.checked) + } + + function $(e, t) { + if (t in e) return t; + for (var n = t.charAt(0).toUpperCase() + t.slice(1), r = t, o = $t.length; o--;) if ((t = $t[o] + n) in e) return t; + return r + } + + function k(e, t) { + return e = t || e, "none" === ce.css(e, "display") || !ce.contains(e.ownerDocument, e) + } + + function T(e, t) { + for (var n, r, o, i = [], a = 0, s = e.length; s > a; a++) (r = e[a]).style && (i[a] = ce._data(r, "olddisplay"), n = r.style.display, t ? (i[a] || "none" !== n || (r.style.display = ""), "" === r.style.display && k(r) && (i[a] = ce._data(r, "olddisplay", A(r.nodeName)))) : i[a] || (o = k(r), (n && "none" !== n || !o) && ce._data(r, "olddisplay", o ? n : ce.css(r, "display")))); + for (a = 0; s > a; a++) (r = e[a]).style && (t && "none" !== r.style.display && "" !== r.style.display || (r.style.display = t ? i[a] || "" : "none")); + return e + } + + function S(e, t, n) { + var r = gt.exec(t); + return r ? Math.max(0, r[1] - (n || 0)) + (r[2] || "px") : t + } + + function C(e, t, n, r, o) { + for (var i = n === (r ? "border" : "content") ? 4 : "width" === t ? 1 : 0, a = 0; 4 > i; i += 2) "margin" === n && (a += ce.css(e, n + wt[i], !0, o)), r ? ("content" === n && (a -= ce.css(e, "padding" + wt[i], !0, o)), "margin" !== n && (a -= ce.css(e, "border" + wt[i] + "Width", !0, o))) : (a += ce.css(e, "padding" + wt[i], !0, o), "padding" !== n && (a += ce.css(e, "border" + wt[i] + "Width", !0, o))); + return a + } + + function E(e, t, n) { + var r = !0, o = "width" === t ? e.offsetWidth : e.offsetHeight, i = lt(e), + a = ce.support.boxSizing && "border-box" === ce.css(e, "boxSizing", !1, i); + if (0 >= o || null == o) { + if ((0 > (o = ct(e, t, i)) || null == o) && (o = e.style[t]), mt.test(o)) return o; + r = a && (ce.support.boxSizingReliable || o === e.style[t]), o = parseFloat(o) || 0 + } + return o + C(e, t, n || (a ? "border" : "content"), r, i) + "px" + } + + function A(e) { + var t = X, n = bt[e]; + return n || ("none" !== (n = N(e, t)) && n || (st = (st || ce("'},t}(),d=a;window.TradingView=window.TradingView||{},window.TradingView.version=o,t.version=o,t.onready=i,t.widget=d,Object.defineProperty(t,"__esModule",{value:!0})}); diff --git a/static/chart_main/chart_main/datafeed-api.d.ts b/static/chart_main/chart_main/datafeed-api.d.ts new file mode 100644 index 0000000..072cc76 --- /dev/null +++ b/static/chart_main/chart_main/datafeed-api.d.ts @@ -0,0 +1,220 @@ +export declare type ResolutionString = string; +export interface Exchange { + value: string; + name: string; + desc: string; +} +export interface DatafeedSymbolType { + name: string; + value: string; +} +export interface DatafeedConfiguration { + exchanges?: Exchange[]; + supported_resolutions?: ResolutionString[]; + supports_marks?: boolean; + supports_time?: boolean; + supports_timescale_marks?: boolean; + symbols_types?: DatafeedSymbolType[]; +} +export declare type OnReadyCallback = (configuration: DatafeedConfiguration) => void; +export interface IExternalDatafeed { + onReady(callback: OnReadyCallback): void; +} +export interface DatafeedQuoteValues { + ch?: number; + chp?: number; + short_name?: string; + exchange?: string; + description?: string; + lp?: number; + ask?: number; + bid?: number; + spread?: number; + open_price?: number; + high_price?: number; + low_price?: number; + prev_close_price?: number; + volume?: number; + original_name?: string; + [valueName: string]: string | number | undefined; +} +export interface QuoteOkData { + s: 'ok'; + n: string; + v: DatafeedQuoteValues; +} +export interface QuoteErrorData { + s: 'error'; + n: string; + v: object; +} +export declare type QuoteData = QuoteOkData | QuoteErrorData; +export declare type QuotesCallback = (data: QuoteData[]) => void; +export interface IDatafeedQuotesApi { + getQuotes(symbols: string[], onDataCallback: QuotesCallback, onErrorCallback: (msg: string) => void): void; + subscribeQuotes(symbols: string[], fastSymbols: string[], onRealtimeCallback: QuotesCallback, listenerGUID: string): void; + unsubscribeQuotes(listenerGUID: string): void; +} +export declare type CustomTimezones = 'America/New_York' | 'America/Los_Angeles' | 'America/Chicago' | 'America/Phoenix' | 'America/Toronto' | 'America/Vancouver' | 'America/Argentina/Buenos_Aires' | 'America/El_Salvador' | 'America/Sao_Paulo' | 'America/Bogota' | 'America/Caracas' | 'Europe/Moscow' | 'Europe/Athens' | 'Europe/Belgrade' | 'Europe/Berlin' | 'Europe/London' | 'Europe/Luxembourg' | 'Europe/Madrid' | 'Europe/Paris' | 'Europe/Rome' | 'Europe/Warsaw' | 'Europe/Istanbul' | 'Europe/Zurich' | 'Australia/Sydney' | 'Australia/Brisbane' | 'Australia/Adelaide' | 'Australia/ACT' | 'Asia/Almaty' | 'Asia/Ashkhabad' | 'Asia/Tokyo' | 'Asia/Taipei' | 'Asia/Singapore' | 'Asia/Shanghai' | 'Asia/Seoul' | 'Asia/Tehran' | 'Asia/Dubai' | 'Asia/Kolkata' | 'Asia/Hong_Kong' | 'Asia/Bangkok' | 'Asia/Chongqing' | 'Asia/Jerusalem' | 'Asia/Kuwait' | 'Asia/Muscat' | 'Asia/Qatar' | 'Asia/Riyadh' | 'Pacific/Auckland' | 'Pacific/Chatham' | 'Pacific/Fakaofo' | 'Pacific/Honolulu' | 'America/Mexico_City' | 'Africa/Cairo' | 'Africa/Johannesburg' | 'Asia/Kathmandu' | 'US/Mountain'; +export declare type Timezone = 'Etc/UTC' | CustomTimezones; +export interface LibrarySymbolInfo { + /** + * Symbol Name + */ + name: string; + full_name: string; + base_name?: [string]; + /** + * Unique symbol id + */ + ticker?: string; + description: string; + type: string; + /** + * @example "1700-0200" + */ + session: string; + /** + * Traded exchange + * @example "NYSE" + */ + exchange: string; + listed_exchange: string; + timezone: Timezone; + /** + * Code (Tick) + * @example 8/16/.../256 (1/8/100 1/16/100 ... 1/256/100) or 1/10/.../10000000 (1 0.1 ... 0.0000001) + */ + pricescale: number; + /** + * The number of units that make up one tick. + * @example For example, U.S. equities are quotes in decimals, and tick in decimals, and can go up +/- .01. So the tick increment is 1. But the e-mini S&P futures contract, though quoted in decimals, goes up in .25 increments, so the tick increment is 25. (see also Tick Size) + */ + minmov: number; + fractional?: boolean; + /** + * @example Quarters of 1/32: pricescale=128, minmovement=1, minmovement2=4 + */ + minmove2?: number; + /** + * false if DWM only + */ + has_intraday?: boolean; + /** + * An array of resolutions which should be enabled in resolutions picker for this symbol. + */ + supported_resolutions: ResolutionString[]; + /** + * @example (for ex.: "1,5,60") - only these resolutions will be requested, all others will be built using them if possible + */ + intraday_multipliers?: string[]; + has_seconds?: boolean; + /** + * It is an array containing seconds resolutions (in seconds without a postfix) the datafeed builds by itself. + */ + seconds_multipliers?: string[]; + has_daily?: boolean; + has_weekly_and_monthly?: boolean; + has_empty_bars?: boolean; + force_session_rebuild?: boolean; + has_no_volume?: boolean; + /** + * Integer showing typical volume value decimal places for this symbol + */ + volume_precision?: number; + data_status?: 'streaming' | 'endofday' | 'pulsed' | 'delayed_streaming'; + /** + * Boolean showing whether this symbol is expired futures contract or not. + */ + expired?: boolean; + /** + * Unix timestamp of expiration date. + */ + expiration_date?: number; + sector?: string; + industry?: string; + currency_code?: string; +} +export interface DOMLevel { + price: number; + volume: number; +} +export interface DOMData { + snapshot: boolean; + asks: DOMLevel[]; + bids: DOMLevel[]; +} +export interface Bar { + time: number; + open: number; + high: number; + low: number; + close: number; + volume?: number; +} +export interface SearchSymbolResultItem { + symbol: string; + full_name: string; + description: string; + exchange: string; + ticker: string; + type: string; +} +export interface HistoryMetadata { + noData: boolean; + nextTime?: number | null; +} +export interface MarkCustomColor { + color: string; + background: string; +} +export declare type MarkConstColors = 'red' | 'green' | 'blue' | 'yellow'; +export interface Mark { + id: string | number; + time: number; + color: MarkConstColors | MarkCustomColor; + text: string; + label: string; + labelFontColor: string; + minSize: number; +} +export interface TimescaleMark { + id: string | number; + time: number; + color: MarkConstColors | string; + label: string; + tooltip: string[]; +} +export declare type ResolutionBackValues = 'D' | 'M'; +export interface HistoryDepth { + resolutionBack: ResolutionBackValues; + intervalBack: number; +} +export declare type SearchSymbolsCallback = (items: SearchSymbolResultItem[]) => void; +export declare type ResolveCallback = (symbolInfo: LibrarySymbolInfo) => void; +export declare type HistoryCallback = (bars: Bar[], meta: HistoryMetadata) => void; +export declare type SubscribeBarsCallback = (bar: Bar) => void; +export declare type GetMarksCallback = (marks: T[]) => void; +export declare type ServerTimeCallback = (serverTime: number) => void; +export declare type DomeCallback = (data: DOMData) => void; +export declare type ErrorCallback = (reason: string) => void; +export interface IDatafeedChartApi { + calculateHistoryDepth?(resolution: ResolutionString, resolutionBack: ResolutionBackValues, intervalBack: number): HistoryDepth | undefined; + getMarks?(symbolInfo: LibrarySymbolInfo, from: number, to: number, onDataCallback: GetMarksCallback, resolution: ResolutionString): void; + getTimescaleMarks?(symbolInfo: LibrarySymbolInfo, from: number, to: number, onDataCallback: GetMarksCallback, resolution: ResolutionString): void; + /** + * This function is called if configuration flag supports_time is set to true when chart needs to know the server time. + * The charting library expects callback to be called once. + * The time is provided without milliseconds. Example: 1445324591. It is used to display Countdown on the price scale. + */ + getServerTime?(callback: ServerTimeCallback): void; + searchSymbols(userInput: string, exchange: string, symbolType: string, onResult: SearchSymbolsCallback): void; + resolveSymbol(symbolName: string, onResolve: ResolveCallback, onError: ErrorCallback): void; + getBars(symbolInfo: LibrarySymbolInfo, resolution: ResolutionString, rangeStartDate: number, rangeEndDate: number, onResult: HistoryCallback, onError: ErrorCallback, isFirstCall: boolean): void; + subscribeBars(symbolInfo: LibrarySymbolInfo, resolution: ResolutionString, onTick: SubscribeBarsCallback, listenerGuid: string, onResetCacheNeededCallback: () => void): void; + unsubscribeBars(listenerGuid: string): void; + subscribeDepth?(symbolInfo: LibrarySymbolInfo, callback: DomeCallback): string; + unsubscribeDepth?(subscriberUID: string): void; +} + +export as namespace TradingView; diff --git a/static/chart_main/chart_main/huobi.js b/static/chart_main/chart_main/huobi.js new file mode 100644 index 0000000..ada6e7b --- /dev/null +++ b/static/chart_main/chart_main/huobi.js @@ -0,0 +1,19553 @@ +!function (t) { + function e(n) { + if (r[n]) return r[n].exports; + var i = r[n] = {i: n, l: !1, exports: {}}; + return t[n].call(i.exports, i, i.exports, e), i.l = !0, i.exports + } + + var n = window.webpackJsonp; + window.webpackJsonp = function (r, a, o) { + for (var s, l, u, c = 0, f = []; c < r.length; c++) l = r[c], i[l] && f.push(i[l][0]), i[l] = 0; + for (s in a) Object.prototype.hasOwnProperty.call(a, s) && (t[s] = a[s]); + for (n && n(r, a, o); f.length;) f.shift()(); + if (o) for (c = 0; c < o.length; c++) u = e(e.s = o[c]); + return u + }; + var r = {}, i = {76: 0}; + e.e = function (t) { + function n() { + s.onerror = s.onload = null, clearTimeout(l); + var e = i[t]; + 0 !== e && (e && e[1](new Error("Loading chunk " + t + " failed.")), i[t] = void 0) + } + + var r = i[t]; + if (0 === r) return new Promise(function (t) { + t() + }); + if (r) return r[2]; + var a = new Promise(function (e, n) { + r = i[t] = [e, n] + }); + r[2] = a; + var o = document.getElementsByTagName("head")[0], s = document.createElement("script"); + s.type = "text/javascript", s.charset = "utf-8", s.async = !0, s.timeout = 12e4, e.nc && s.setAttribute("nonce", e.nc), s.src = e.p + "assets/scripts/" + t + "_" + { + 0: "997bbf9f", + 1: "34a46847", + 2: "298900da", + 3: "452813bb", + 4: "2828ea33", + 5: "1de5df60", + 6: "ee164123", + 7: "7bdc835f", + 8: "92ef6b32", + 9: "b7986e82", + 10: "1f94aca6", + 11: "8888d94e", + 12: "0a7dbedb", + 13: "c235f57d", + 14: "8c05e09d", + 15: "d5ec3e9e", + 16: "7290b915", + 17: "ec0dbd0b", + 18: "3e0d36cd", + 19: "8a21ec78", + 20: "9acd1d24", + 21: "6ddf4f8b", + 22: "f661b36b", + 23: "e7f9dab5", + 24: "8e6f24eb", + 25: "8b320d59", + 26: "7aedda47", + 27: "e77726f9", + 28: "a36e2569", + 29: "6a3de57f", + 30: "6931692c", + 31: "af5713b6", + 32: "6a037020", + 33: "fb614388", + 34: "d0961311", + 35: "95959014", + 36: "f8531011", + 37: "f55d7ba0", + 38: "41450df7", + 39: "9e90aba5", + 40: "c2bb5087", + 41: "50b00f7e", + 42: "f7855b14", + 43: "4d1e8251", + 44: "e9c81872", + 45: "2fabe9a8", + 46: "9cf2941e", + 47: "53d25c99", + 48: "4bdbe16f", + 49: "c8e23fce", + 50: "4b1b6d1a", + 51: "776782cb", + 52: "ee81a843", + 53: "740c6940", + 54: "02c9b4a6", + 55: "a6b97ab6", + 56: "deec9f6a", + 57: "d206f93e", + 58: "54cde00e", + 59: "f04f64fc", + 60: "32a88d54", + 61: "4a88622a", + 62: "50372790", + 63: "438c9548", + 64: "78fa0dbd", + 65: "1369163f", + 66: "221a5002", + 67: "3ecd6ca8", + 68: "85d72229", + 69: "3d48baf4", + 70: "6421babe", + 71: "733aa5f6", + 72: "f5b61b34", + 73: "a0b74537", + 74: "58f0c200", + 75: "61a755e9" + }[t] + ".js"; + var l = setTimeout(n, 12e4); + return s.onerror = s.onload = n, o.appendChild(s), a + }, e.m = t, e.c = r, e.i = function (t) { + return t + }, e.d = function (t, n, r) { + e.o(t, n) || Object.defineProperty(t, n, {configurable: !1, enumerable: !0, get: r}) + }, e.n = function (t) { + var n = t && t.__esModule ? function () { + return t.default + } : function () { + return t + }; + return e.d(n, "a", n), n + }, e.o = function (t, e) { + return Object.prototype.hasOwnProperty.call(t, e) + }, e.p = "/", e.oe = function (t) { + throw console.error(t), t + } +}([, , , , , , , function (t, e, n) { + "use strict"; + e.__esModule = !0; + var r = n(74), i = function (t) { + return t && t.__esModule ? t : {default: t} + }(r); + e.default = function (t) { + return function () { + var e = t.apply(this, arguments); + return new i.default(function (t, n) { + function r(a, o) { + try { + var s = e[a](o), l = s.value + } catch (t) { + return void n(t) + } + if (!s.done) return i.default.resolve(l).then(function (t) { + r("next", t) + }, function (t) { + r("throw", t) + }); + t(l) + } + + return r("next") + }) + } + } +}, function (t, e, n) { + t.exports = n(483) +}, , , , , , function (t, e, n) { + t.exports = {default: n(500), __esModule: !0} +}, , , , function (t, e, n) { + "use strict"; + + function r(t) { + return t && t.__esModule ? t : {default: t} + } + + e.__esModule = !0; + var i = n(479), a = r(i), o = n(478), s = r(o), + l = "function" == typeof s.default && "symbol" == typeof a.default ? function (t) { + return typeof t + } : function (t) { + return t && "function" == typeof s.default && t.constructor === s.default && t !== s.default.prototype ? "symbol" : typeof t + }; + e.default = "function" == typeof s.default && "symbol" === l(a.default) ? function (t) { + return void 0 === t ? "undefined" : l(t) + } : function (t) { + return t && "function" == typeof s.default && t.constructor === s.default && t !== s.default.prototype ? "symbol" : void 0 === t ? "undefined" : l(t) + } +}, , , , , function (t, e, n) { + t.exports = n(435) +}, , , , function (t, e, n) { + "use strict"; + e.__esModule = !0; + var r = n(73), i = function (t) { + return t && t.__esModule ? t : {default: t} + }(r); + e.default = i.default || function (t) { + for (var e = 1; e < arguments.length; e++) { + var n = arguments[e]; + for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (t[r] = n[r]) + } + return t + } +}, function (t, e, n) { + t.exports = {default: n(507), __esModule: !0} +}, , , , , , , , function (t, e, n) { + var r = n(79), i = n(113), a = n(99), o = n(100), s = n(107), l = function (t, e, n) { + var u, c, f, h, d = t & l.F, p = t & l.G, v = t & l.S, g = t & l.P, m = t & l.B, + _ = p ? r : v ? r[e] || (r[e] = {}) : (r[e] || {}).prototype, y = p ? i : i[e] || (i[e] = {}), + b = y.prototype || (y.prototype = {}); + p && (n = e); + for (u in n) c = !d && _ && void 0 !== _[u], f = (c ? _ : n)[u], h = m && c ? s(f, r) : g && "function" == typeof f ? s(Function.call, f) : f, _ && o(_, u, f, t & l.U), y[u] != f && a(y, u, h), g && b[u] != f && (b[u] = f) + }; + r.core = i, l.F = 1, l.G = 2, l.S = 4, l.P = 8, l.B = 16, l.W = 32, l.U = 64, l.R = 128, t.exports = l +}, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (t, e, n) { + !function () { + var e = n(756), r = n(296).utf8, i = n(346), a = n(296).bin, o = function (t, n) { + t.constructor == String ? t = n && "binary" === n.encoding ? a.stringToBytes(t) : r.stringToBytes(t) : i(t) ? t = Array.prototype.slice.call(t, 0) : Array.isArray(t) || (t = t.toString()); + for (var s = e.bytesToWords(t), l = 8 * t.length, u = 1732584193, c = -271733879, f = -1732584194, h = 271733878, d = 0; d < s.length; d++) s[d] = 16711935 & (s[d] << 8 | s[d] >>> 24) | 4278255360 & (s[d] << 24 | s[d] >>> 8); + s[l >>> 5] |= 128 << l % 32, s[14 + (l + 64 >>> 9 << 4)] = l; + for (var p = o._ff, v = o._gg, g = o._hh, m = o._ii, d = 0; d < s.length; d += 16) { + var _ = u, y = c, b = f, w = h; + u = p(u, c, f, h, s[d + 0], 7, -680876936), h = p(h, u, c, f, s[d + 1], 12, -389564586), f = p(f, h, u, c, s[d + 2], 17, 606105819), c = p(c, f, h, u, s[d + 3], 22, -1044525330), u = p(u, c, f, h, s[d + 4], 7, -176418897), h = p(h, u, c, f, s[d + 5], 12, 1200080426), f = p(f, h, u, c, s[d + 6], 17, -1473231341), c = p(c, f, h, u, s[d + 7], 22, -45705983), u = p(u, c, f, h, s[d + 8], 7, 1770035416), h = p(h, u, c, f, s[d + 9], 12, -1958414417), f = p(f, h, u, c, s[d + 10], 17, -42063), c = p(c, f, h, u, s[d + 11], 22, -1990404162), u = p(u, c, f, h, s[d + 12], 7, 1804603682), h = p(h, u, c, f, s[d + 13], 12, -40341101), f = p(f, h, u, c, s[d + 14], 17, -1502002290), c = p(c, f, h, u, s[d + 15], 22, 1236535329), u = v(u, c, f, h, s[d + 1], 5, -165796510), h = v(h, u, c, f, s[d + 6], 9, -1069501632), f = v(f, h, u, c, s[d + 11], 14, 643717713), c = v(c, f, h, u, s[d + 0], 20, -373897302), u = v(u, c, f, h, s[d + 5], 5, -701558691), h = v(h, u, c, f, s[d + 10], 9, 38016083), f = v(f, h, u, c, s[d + 15], 14, -660478335), c = v(c, f, h, u, s[d + 4], 20, -405537848), u = v(u, c, f, h, s[d + 9], 5, 568446438), h = v(h, u, c, f, s[d + 14], 9, -1019803690), f = v(f, h, u, c, s[d + 3], 14, -187363961), c = v(c, f, h, u, s[d + 8], 20, 1163531501), u = v(u, c, f, h, s[d + 13], 5, -1444681467), h = v(h, u, c, f, s[d + 2], 9, -51403784), f = v(f, h, u, c, s[d + 7], 14, 1735328473), c = v(c, f, h, u, s[d + 12], 20, -1926607734), u = g(u, c, f, h, s[d + 5], 4, -378558), h = g(h, u, c, f, s[d + 8], 11, -2022574463), f = g(f, h, u, c, s[d + 11], 16, 1839030562), c = g(c, f, h, u, s[d + 14], 23, -35309556), u = g(u, c, f, h, s[d + 1], 4, -1530992060), h = g(h, u, c, f, s[d + 4], 11, 1272893353), f = g(f, h, u, c, s[d + 7], 16, -155497632), c = g(c, f, h, u, s[d + 10], 23, -1094730640), u = g(u, c, f, h, s[d + 13], 4, 681279174), h = g(h, u, c, f, s[d + 0], 11, -358537222), f = g(f, h, u, c, s[d + 3], 16, -722521979), c = g(c, f, h, u, s[d + 6], 23, 76029189), u = g(u, c, f, h, s[d + 9], 4, -640364487), h = g(h, u, c, f, s[d + 12], 11, -421815835), f = g(f, h, u, c, s[d + 15], 16, 530742520), c = g(c, f, h, u, s[d + 2], 23, -995338651), u = m(u, c, f, h, s[d + 0], 6, -198630844), h = m(h, u, c, f, s[d + 7], 10, 1126891415), f = m(f, h, u, c, s[d + 14], 15, -1416354905), c = m(c, f, h, u, s[d + 5], 21, -57434055), u = m(u, c, f, h, s[d + 12], 6, 1700485571), h = m(h, u, c, f, s[d + 3], 10, -1894986606), f = m(f, h, u, c, s[d + 10], 15, -1051523), c = m(c, f, h, u, s[d + 1], 21, -2054922799), u = m(u, c, f, h, s[d + 8], 6, 1873313359), h = m(h, u, c, f, s[d + 15], 10, -30611744), f = m(f, h, u, c, s[d + 6], 15, -1560198380), c = m(c, f, h, u, s[d + 13], 21, 1309151649), u = m(u, c, f, h, s[d + 4], 6, -145523070), h = m(h, u, c, f, s[d + 11], 10, -1120210379), f = m(f, h, u, c, s[d + 2], 15, 718787259), c = m(c, f, h, u, s[d + 9], 21, -343485551), u = u + _ >>> 0, c = c + y >>> 0, f = f + b >>> 0, h = h + w >>> 0 + } + return e.endian([u, c, f, h]) + }; + o._ff = function (t, e, n, r, i, a, o) { + var s = t + (e & n | ~e & r) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + e + }, o._gg = function (t, e, n, r, i, a, o) { + var s = t + (e & r | n & ~r) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + e + }, o._hh = function (t, e, n, r, i, a, o) { + var s = t + (e ^ n ^ r) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + e + }, o._ii = function (t, e, n, r, i, a, o) { + var s = t + (n ^ (e | ~r)) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + e + }, o._blocksize = 16, o._digestsize = 16, t.exports = function (t, n) { + if (void 0 === t || null === t) throw new Error("Illegal argument " + t); + var r = e.wordsToBytes(o(t, n)); + return n && n.asBytes ? r : n && n.asString ? a.bytesToString(r) : e.bytesToHex(r) + } + }() +}, function (t, e, n) { + t.exports = {default: n(502), __esModule: !0} +}, function (t, e, n) { + t.exports = {default: n(510), __esModule: !0} +}, function (t, e, n) { + t.exports = {default: n(509), __esModule: !0} +}, function (t, e, n) { + "use strict"; + (function (t) { + function e(t, e, n) { + t[e] || Object[r](t, e, {writable: !0, configurable: !0, value: n}) + } + + if (n(755), n(830), n(496), t._babelPolyfill) throw new Error("only one instance of babel-polyfill is allowed"); + t._babelPolyfill = !0; + var r = "defineProperty"; + e(String.prototype, "padLeft", "".padStart), e(String.prototype, "padRight", "".padEnd), "pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (t) { + [][t] && e(Array, t, Function.call.bind([][t])) + }) + }).call(e, n(124)) +}, function (t, e, n) { + t.exports = {default: n(501), __esModule: !0} +}, function (t, e, n) { + var r = n(82); + t.exports = function (t) { + if (!r(t)) throw TypeError(t + " is not an object!"); + return t + } +}, function (t, e) { + var n = t.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")(); + "number" == typeof __g && (__g = n) +}, , function (t, e) { + t.exports = function (t) { + try { + return !!t() + } catch (t) { + return !0 + } + } +}, function (t, e) { + t.exports = function (t) { + return "object" == typeof t ? null !== t : "function" == typeof t + } +}, , function (t, e, n) { + var r = n(211)("wks"), i = n(151), a = n(79).Symbol, o = "function" == typeof a; + (t.exports = function (t) { + return r[t] || (r[t] = o && a[t] || (o ? a : i)("Symbol." + t)) + }).store = r +}, function (t, e) { + var n = t.exports = {version: "2.5.0"}; + "number" == typeof __e && (__e = n) +}, function (t, e, n) { + t.exports = !n(81)(function () { + return 7 != Object.defineProperty({}, "a", { + get: function () { + return 7 + } + }).a + }) +}, function (t, e, n) { + var r = n(78), i = n(322), a = n(117), o = Object.defineProperty; + e.f = n(86) ? Object.defineProperty : function (t, e, n) { + if (r(t), e = a(e, !0), r(n), i) try { + return o(t, e, n) + } catch (t) { + } + if ("get" in n || "set" in n) throw TypeError("Accessors not supported!"); + return "value" in n && (t[e] = n.value), t + } +}, function (t, e, n) { + var r = n(116), i = Math.min; + t.exports = function (t) { + return t > 0 ? i(r(t), 9007199254740991) : 0 + } +}, function (t, e, n) { + var r = n(114); + t.exports = function (t) { + return Object(r(t)) + } +}, function (t, e) { + t.exports = function (t) { + if ("function" != typeof t) throw TypeError(t + " is not a function!"); + return t + } +}, , , , function (t, e, n) { + var r = n(236)("wks"), i = n(197), a = n(97).Symbol, o = "function" == typeof a; + (t.exports = function (t) { + return r[t] || (r[t] = o && a[t] || (o ? a : i)("Symbol." + t)) + }).store = r +}, function (t, e, n) { + "use strict"; + (function (t) { + function r() { + return a.TYPED_ARRAY_SUPPORT ? 2147483647 : 1073741823 + } + + function i(t, e) { + if (r() < e) throw new RangeError("Invalid typed array length"); + return a.TYPED_ARRAY_SUPPORT ? (t = new Uint8Array(e), t.__proto__ = a.prototype) : (null === t && (t = new a(e)), t.length = e), t + } + + function a(t, e, n) { + if (!(a.TYPED_ARRAY_SUPPORT || this instanceof a)) return new a(t, e, n); + if ("number" == typeof t) { + if ("string" == typeof e) throw new Error("If encoding is specified then the first argument must be a string"); + return u(this, t) + } + return o(this, t, e, n) + } + + function o(t, e, n, r) { + if ("number" == typeof e) throw new TypeError('"value" argument must not be a number'); + return "undefined" != typeof ArrayBuffer && e instanceof ArrayBuffer ? h(t, e, n, r) : "string" == typeof e ? c(t, e, n) : d(t, e) + } + + function s(t) { + if ("number" != typeof t) throw new TypeError('"size" argument must be a number'); + if (t < 0) throw new RangeError('"size" argument must not be negative') + } + + function l(t, e, n, r) { + return s(e), e <= 0 ? i(t, e) : void 0 !== n ? "string" == typeof r ? i(t, e).fill(n, r) : i(t, e).fill(n) : i(t, e) + } + + function u(t, e) { + if (s(e), t = i(t, e < 0 ? 0 : 0 | p(e)), !a.TYPED_ARRAY_SUPPORT) for (var n = 0; n < e; ++n) t[n] = 0; + return t + } + + function c(t, e, n) { + if ("string" == typeof n && "" !== n || (n = "utf8"), !a.isEncoding(n)) throw new TypeError('"encoding" must be a valid string encoding'); + var r = 0 | g(e, n); + t = i(t, r); + var o = t.write(e, n); + return o !== r && (t = t.slice(0, o)), t + } + + function f(t, e) { + var n = e.length < 0 ? 0 : 0 | p(e.length); + t = i(t, n); + for (var r = 0; r < n; r += 1) t[r] = 255 & e[r]; + return t + } + + function h(t, e, n, r) { + if (e.byteLength, n < 0 || e.byteLength < n) throw new RangeError("'offset' is out of bounds"); + if (e.byteLength < n + (r || 0)) throw new RangeError("'length' is out of bounds"); + return e = void 0 === n && void 0 === r ? new Uint8Array(e) : void 0 === r ? new Uint8Array(e, n) : new Uint8Array(e, n, r), a.TYPED_ARRAY_SUPPORT ? (t = e, t.__proto__ = a.prototype) : t = f(t, e), t + } + + function d(t, e) { + if (a.isBuffer(e)) { + var n = 0 | p(e.length); + return t = i(t, n), 0 === t.length ? t : (e.copy(t, 0, 0, n), t) + } + if (e) { + if ("undefined" != typeof ArrayBuffer && e.buffer instanceof ArrayBuffer || "length" in e) return "number" != typeof e.length || Y(e.length) ? i(t, 0) : f(t, e); + if ("Buffer" === e.type && J(e.data)) return f(t, e.data) + } + throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.") + } + + function p(t) { + if (t >= r()) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + r().toString(16) + " bytes"); + return 0 | t + } + + function v(t) { + return +t != t && (t = 0), a.alloc(+t) + } + + function g(t, e) { + if (a.isBuffer(t)) return t.length; + if ("undefined" != typeof ArrayBuffer && "function" == typeof ArrayBuffer.isView && (ArrayBuffer.isView(t) || t instanceof ArrayBuffer)) return t.byteLength; + "string" != typeof t && (t = "" + t); + var n = t.length; + if (0 === n) return 0; + for (var r = !1; ;) switch (e) { + case"ascii": + case"latin1": + case"binary": + return n; + case"utf8": + case"utf-8": + case void 0: + return W(t).length; + case"ucs2": + case"ucs-2": + case"utf16le": + case"utf-16le": + return 2 * n; + case"hex": + return n >>> 1; + case"base64": + return $(t).length; + default: + if (r) return W(t).length; + e = ("" + e).toLowerCase(), r = !0 + } + } + + function m(t, e, n) { + var r = !1; + if ((void 0 === e || e < 0) && (e = 0), e > this.length) return ""; + if ((void 0 === n || n > this.length) && (n = this.length), n <= 0) return ""; + if (n >>>= 0, e >>>= 0, n <= e) return ""; + for (t || (t = "utf8"); ;) switch (t) { + case"hex": + return O(this, e, n); + case"utf8": + case"utf-8": + return M(this, e, n); + case"ascii": + return P(this, e, n); + case"latin1": + case"binary": + return L(this, e, n); + case"base64": + return C(this, e, n); + case"ucs2": + case"ucs-2": + case"utf16le": + case"utf-16le": + return R(this, e, n); + default: + if (r) throw new TypeError("Unknown encoding: " + t); + t = (t + "").toLowerCase(), r = !0 + } + } + + function _(t, e, n) { + var r = t[e]; + t[e] = t[n], t[n] = r + } + + function y(t, e, n, r, i) { + if (0 === t.length) return -1; + if ("string" == typeof n ? (r = n, n = 0) : n > 2147483647 ? n = 2147483647 : n < -2147483648 && (n = -2147483648), n = +n, isNaN(n) && (n = i ? 0 : t.length - 1), n < 0 && (n = t.length + n), n >= t.length) { + if (i) return -1; + n = t.length - 1 + } else if (n < 0) { + if (!i) return -1; + n = 0 + } + if ("string" == typeof e && (e = a.from(e, r)), a.isBuffer(e)) return 0 === e.length ? -1 : b(t, e, n, r, i); + if ("number" == typeof e) return e &= 255, a.TYPED_ARRAY_SUPPORT && "function" == typeof Uint8Array.prototype.indexOf ? i ? Uint8Array.prototype.indexOf.call(t, e, n) : Uint8Array.prototype.lastIndexOf.call(t, e, n) : b(t, [e], n, r, i); + throw new TypeError("val must be string, number or Buffer") + } + + function b(t, e, n, r, i) { + function a(t, e) { + return 1 === o ? t[e] : t.readUInt16BE(e * o) + } + + var o = 1, s = t.length, l = e.length; + if (void 0 !== r && ("ucs2" === (r = String(r).toLowerCase()) || "ucs-2" === r || "utf16le" === r || "utf-16le" === r)) { + if (t.length < 2 || e.length < 2) return -1; + o = 2, s /= 2, l /= 2, n /= 2 + } + var u; + if (i) { + var c = -1; + for (u = n; u < s; u++) if (a(t, u) === a(e, -1 === c ? 0 : u - c)) { + if (-1 === c && (c = u), u - c + 1 === l) return c * o + } else -1 !== c && (u -= u - c), c = -1 + } else for (n + l > s && (n = s - l), u = n; u >= 0; u--) { + for (var f = !0, h = 0; h < l; h++) if (a(t, u + h) !== a(e, h)) { + f = !1; + break + } + if (f) return u + } + return -1 + } + + function w(t, e, n, r) { + n = Number(n) || 0; + var i = t.length - n; + r ? (r = Number(r)) > i && (r = i) : r = i; + var a = e.length; + if (a % 2 != 0) throw new TypeError("Invalid hex string"); + r > a / 2 && (r = a / 2); + for (var o = 0; o < r; ++o) { + var s = parseInt(e.substr(2 * o, 2), 16); + if (isNaN(s)) return o; + t[n + o] = s + } + return o + } + + function x(t, e, n, r) { + return X(W(e, t.length - n), t, n, r) + } + + function S(t, e, n, r) { + return X(V(e), t, n, r) + } + + function E(t, e, n, r) { + return S(t, e, n, r) + } + + function k(t, e, n, r) { + return X($(e), t, n, r) + } + + function T(t, e, n, r) { + return X(Z(e, t.length - n), t, n, r) + } + + function C(t, e, n) { + return 0 === e && n === t.length ? K.fromByteArray(t) : K.fromByteArray(t.slice(e, n)) + } + + function M(t, e, n) { + n = Math.min(t.length, n); + for (var r = [], i = e; i < n;) { + var a = t[i], o = null, s = a > 239 ? 4 : a > 223 ? 3 : a > 191 ? 2 : 1; + if (i + s <= n) { + var l, u, c, f; + switch (s) { + case 1: + a < 128 && (o = a); + break; + case 2: + l = t[i + 1], 128 == (192 & l) && (f = (31 & a) << 6 | 63 & l) > 127 && (o = f); + break; + case 3: + l = t[i + 1], u = t[i + 2], 128 == (192 & l) && 128 == (192 & u) && (f = (15 & a) << 12 | (63 & l) << 6 | 63 & u) > 2047 && (f < 55296 || f > 57343) && (o = f); + break; + case 4: + l = t[i + 1], u = t[i + 2], c = t[i + 3], 128 == (192 & l) && 128 == (192 & u) && 128 == (192 & c) && (f = (15 & a) << 18 | (63 & l) << 12 | (63 & u) << 6 | 63 & c) > 65535 && f < 1114112 && (o = f) + } + } + null === o ? (o = 65533, s = 1) : o > 65535 && (o -= 65536, r.push(o >>> 10 & 1023 | 55296), o = 56320 | 1023 & o), r.push(o), i += s + } + return A(r) + } + + function A(t) { + var e = t.length; + if (e <= Q) return String.fromCharCode.apply(String, t); + for (var n = "", r = 0; r < e;) n += String.fromCharCode.apply(String, t.slice(r, r += Q)); + return n + } + + function P(t, e, n) { + var r = ""; + n = Math.min(t.length, n); + for (var i = e; i < n; ++i) r += String.fromCharCode(127 & t[i]); + return r + } + + function L(t, e, n) { + var r = ""; + n = Math.min(t.length, n); + for (var i = e; i < n; ++i) r += String.fromCharCode(t[i]); + return r + } + + function O(t, e, n) { + var r = t.length; + (!e || e < 0) && (e = 0), (!n || n < 0 || n > r) && (n = r); + for (var i = "", a = e; a < n; ++a) i += G(t[a]); + return i + } + + function R(t, e, n) { + for (var r = t.slice(e, n), i = "", a = 0; a < r.length; a += 2) i += String.fromCharCode(r[a] + 256 * r[a + 1]); + return i + } + + function I(t, e, n) { + if (t % 1 != 0 || t < 0) throw new RangeError("offset is not uint"); + if (t + e > n) throw new RangeError("Trying to access beyond buffer length") + } + + function B(t, e, n, r, i, o) { + if (!a.isBuffer(t)) throw new TypeError('"buffer" argument must be a Buffer instance'); + if (e > i || e < o) throw new RangeError('"value" argument is out of bounds'); + if (n + r > t.length) throw new RangeError("Index out of range") + } + + function z(t, e, n, r) { + e < 0 && (e = 65535 + e + 1); + for (var i = 0, a = Math.min(t.length - n, 2); i < a; ++i) t[n + i] = (e & 255 << 8 * (r ? i : 1 - i)) >>> 8 * (r ? i : 1 - i) + } + + function F(t, e, n, r) { + e < 0 && (e = 4294967295 + e + 1); + for (var i = 0, a = Math.min(t.length - n, 4); i < a; ++i) t[n + i] = e >>> 8 * (r ? i : 3 - i) & 255 + } + + function N(t, e, n, r, i, a) { + if (n + r > t.length) throw new RangeError("Index out of range"); + if (n < 0) throw new RangeError("Index out of range") + } + + function D(t, e, n, r, i) { + return i || N(t, e, n, 4, 3.4028234663852886e38, -3.4028234663852886e38), q.write(t, e, n, r, 23, 4), n + 4 + } + + function j(t, e, n, r, i) { + return i || N(t, e, n, 8, 1.7976931348623157e308, -1.7976931348623157e308), q.write(t, e, n, r, 52, 8), n + 8 + } + + function U(t) { + if (t = H(t).replace(tt, ""), t.length < 2) return ""; + for (; t.length % 4 != 0;) t += "="; + return t + } + + function H(t) { + return t.trim ? t.trim() : t.replace(/^\s+|\s+$/g, "") + } + + function G(t) { + return t < 16 ? "0" + t.toString(16) : t.toString(16) + } + + function W(t, e) { + e = e || 1 / 0; + for (var n, r = t.length, i = null, a = [], o = 0; o < r; ++o) { + if ((n = t.charCodeAt(o)) > 55295 && n < 57344) { + if (!i) { + if (n > 56319) { + (e -= 3) > -1 && a.push(239, 191, 189); + continue + } + if (o + 1 === r) { + (e -= 3) > -1 && a.push(239, 191, 189); + continue + } + i = n; + continue + } + if (n < 56320) { + (e -= 3) > -1 && a.push(239, 191, 189), i = n; + continue + } + n = 65536 + (i - 55296 << 10 | n - 56320) + } else i && (e -= 3) > -1 && a.push(239, 191, 189); + if (i = null, n < 128) { + if ((e -= 1) < 0) break; + a.push(n) + } else if (n < 2048) { + if ((e -= 2) < 0) break; + a.push(n >> 6 | 192, 63 & n | 128) + } else if (n < 65536) { + if ((e -= 3) < 0) break; + a.push(n >> 12 | 224, n >> 6 & 63 | 128, 63 & n | 128) + } else { + if (!(n < 1114112)) throw new Error("Invalid code point"); + if ((e -= 4) < 0) break; + a.push(n >> 18 | 240, n >> 12 & 63 | 128, n >> 6 & 63 | 128, 63 & n | 128) + } + } + return a + } + + function V(t) { + for (var e = [], n = 0; n < t.length; ++n) e.push(255 & t.charCodeAt(n)); + return e + } + + function Z(t, e) { + for (var n, r, i, a = [], o = 0; o < t.length && !((e -= 2) < 0); ++o) n = t.charCodeAt(o), r = n >> 8, i = n % 256, a.push(i), a.push(r); + return a + } + + function $(t) { + return K.toByteArray(U(t)) + } + + function X(t, e, n, r) { + for (var i = 0; i < r && !(i + n >= e.length || i >= t.length); ++i) e[i + n] = t[i]; + return i + } + + function Y(t) { + return t !== t + } + + /*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + var K = n(485), q = n(808), J = n(347); + e.Buffer = a, e.SlowBuffer = v, e.INSPECT_MAX_BYTES = 50, a.TYPED_ARRAY_SUPPORT = void 0 !== t.TYPED_ARRAY_SUPPORT ? t.TYPED_ARRAY_SUPPORT : function () { + try { + var t = new Uint8Array(1); + return t.__proto__ = { + __proto__: Uint8Array.prototype, foo: function () { + return 42 + } + }, 42 === t.foo() && "function" == typeof t.subarray && 0 === t.subarray(1, 1).byteLength + } catch (t) { + return !1 + } + }(), e.kMaxLength = r(), a.poolSize = 8192, a._augment = function (t) { + return t.__proto__ = a.prototype, t + }, a.from = function (t, e, n) { + return o(null, t, e, n) + }, a.TYPED_ARRAY_SUPPORT && (a.prototype.__proto__ = Uint8Array.prototype, a.__proto__ = Uint8Array, "undefined" != typeof Symbol && Symbol.species && a[Symbol.species] === a && Object.defineProperty(a, Symbol.species, { + value: null, + configurable: !0 + })), a.alloc = function (t, e, n) { + return l(null, t, e, n) + }, a.allocUnsafe = function (t) { + return u(null, t) + }, a.allocUnsafeSlow = function (t) { + return u(null, t) + }, a.isBuffer = function (t) { + return !(null == t || !t._isBuffer) + }, a.compare = function (t, e) { + if (!a.isBuffer(t) || !a.isBuffer(e)) throw new TypeError("Arguments must be Buffers"); + if (t === e) return 0; + for (var n = t.length, r = e.length, i = 0, o = Math.min(n, r); i < o; ++i) if (t[i] !== e[i]) { + n = t[i], r = e[i]; + break + } + return n < r ? -1 : r < n ? 1 : 0 + }, a.isEncoding = function (t) { + switch (String(t).toLowerCase()) { + case"hex": + case"utf8": + case"utf-8": + case"ascii": + case"latin1": + case"binary": + case"base64": + case"ucs2": + case"ucs-2": + case"utf16le": + case"utf-16le": + return !0; + default: + return !1 + } + }, a.concat = function (t, e) { + if (!J(t)) throw new TypeError('"list" argument must be an Array of Buffers'); + if (0 === t.length) return a.alloc(0); + var n; + if (void 0 === e) for (e = 0, n = 0; n < t.length; ++n) e += t[n].length; + var r = a.allocUnsafe(e), i = 0; + for (n = 0; n < t.length; ++n) { + var o = t[n]; + if (!a.isBuffer(o)) throw new TypeError('"list" argument must be an Array of Buffers'); + o.copy(r, i), i += o.length + } + return r + }, a.byteLength = g, a.prototype._isBuffer = !0, a.prototype.swap16 = function () { + var t = this.length; + if (t % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits"); + for (var e = 0; e < t; e += 2) _(this, e, e + 1); + return this + }, a.prototype.swap32 = function () { + var t = this.length; + if (t % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits"); + for (var e = 0; e < t; e += 4) _(this, e, e + 3), _(this, e + 1, e + 2); + return this + }, a.prototype.swap64 = function () { + var t = this.length; + if (t % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits"); + for (var e = 0; e < t; e += 8) _(this, e, e + 7), _(this, e + 1, e + 6), _(this, e + 2, e + 5), _(this, e + 3, e + 4); + return this + }, a.prototype.toString = function () { + var t = 0 | this.length; + return 0 === t ? "" : 0 === arguments.length ? M(this, 0, t) : m.apply(this, arguments) + }, a.prototype.equals = function (t) { + if (!a.isBuffer(t)) throw new TypeError("Argument must be a Buffer"); + return this === t || 0 === a.compare(this, t) + }, a.prototype.inspect = function () { + var t = "", n = e.INSPECT_MAX_BYTES; + return this.length > 0 && (t = this.toString("hex", 0, n).match(/.{2}/g).join(" "), this.length > n && (t += " ... ")), "" + }, a.prototype.compare = function (t, e, n, r, i) { + if (!a.isBuffer(t)) throw new TypeError("Argument must be a Buffer"); + if (void 0 === e && (e = 0), void 0 === n && (n = t ? t.length : 0), void 0 === r && (r = 0), void 0 === i && (i = this.length), e < 0 || n > t.length || r < 0 || i > this.length) throw new RangeError("out of range index"); + if (r >= i && e >= n) return 0; + if (r >= i) return -1; + if (e >= n) return 1; + if (e >>>= 0, n >>>= 0, r >>>= 0, i >>>= 0, this === t) return 0; + for (var o = i - r, s = n - e, l = Math.min(o, s), u = this.slice(r, i), c = t.slice(e, n), f = 0; f < l; ++f) if (u[f] !== c[f]) { + o = u[f], s = c[f]; + break + } + return o < s ? -1 : s < o ? 1 : 0 + }, a.prototype.includes = function (t, e, n) { + return -1 !== this.indexOf(t, e, n) + }, a.prototype.indexOf = function (t, e, n) { + return y(this, t, e, n, !0) + }, a.prototype.lastIndexOf = function (t, e, n) { + return y(this, t, e, n, !1) + }, a.prototype.write = function (t, e, n, r) { + if (void 0 === e) r = "utf8", n = this.length, e = 0; else if (void 0 === n && "string" == typeof e) r = e, n = this.length, e = 0; else { + if (!isFinite(e)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported"); + e |= 0, isFinite(n) ? (n |= 0, void 0 === r && (r = "utf8")) : (r = n, n = void 0) + } + var i = this.length - e; + if ((void 0 === n || n > i) && (n = i), t.length > 0 && (n < 0 || e < 0) || e > this.length) throw new RangeError("Attempt to write outside buffer bounds"); + r || (r = "utf8"); + for (var a = !1; ;) switch (r) { + case"hex": + return w(this, t, e, n); + case"utf8": + case"utf-8": + return x(this, t, e, n); + case"ascii": + return S(this, t, e, n); + case"latin1": + case"binary": + return E(this, t, e, n); + case"base64": + return k(this, t, e, n); + case"ucs2": + case"ucs-2": + case"utf16le": + case"utf-16le": + return T(this, t, e, n); + default: + if (a) throw new TypeError("Unknown encoding: " + r); + r = ("" + r).toLowerCase(), a = !0 + } + }, a.prototype.toJSON = function () { + return {type: "Buffer", data: Array.prototype.slice.call(this._arr || this, 0)} + }; + var Q = 4096; + a.prototype.slice = function (t, e) { + var n = this.length; + t = ~~t, e = void 0 === e ? n : ~~e, t < 0 ? (t += n) < 0 && (t = 0) : t > n && (t = n), e < 0 ? (e += n) < 0 && (e = 0) : e > n && (e = n), e < t && (e = t); + var r; + if (a.TYPED_ARRAY_SUPPORT) r = this.subarray(t, e), r.__proto__ = a.prototype; else { + var i = e - t; + r = new a(i, void 0); + for (var o = 0; o < i; ++o) r[o] = this[o + t] + } + return r + }, a.prototype.readUIntLE = function (t, e, n) { + t |= 0, e |= 0, n || I(t, e, this.length); + for (var r = this[t], i = 1, a = 0; ++a < e && (i *= 256);) r += this[t + a] * i; + return r + }, a.prototype.readUIntBE = function (t, e, n) { + t |= 0, e |= 0, n || I(t, e, this.length); + for (var r = this[t + --e], i = 1; e > 0 && (i *= 256);) r += this[t + --e] * i; + return r + }, a.prototype.readUInt8 = function (t, e) { + return e || I(t, 1, this.length), this[t] + }, a.prototype.readUInt16LE = function (t, e) { + return e || I(t, 2, this.length), this[t] | this[t + 1] << 8 + }, a.prototype.readUInt16BE = function (t, e) { + return e || I(t, 2, this.length), this[t] << 8 | this[t + 1] + }, a.prototype.readUInt32LE = function (t, e) { + return e || I(t, 4, this.length), (this[t] | this[t + 1] << 8 | this[t + 2] << 16) + 16777216 * this[t + 3] + }, a.prototype.readUInt32BE = function (t, e) { + return e || I(t, 4, this.length), 16777216 * this[t] + (this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3]) + }, a.prototype.readIntLE = function (t, e, n) { + t |= 0, e |= 0, n || I(t, e, this.length); + for (var r = this[t], i = 1, a = 0; ++a < e && (i *= 256);) r += this[t + a] * i; + return i *= 128, r >= i && (r -= Math.pow(2, 8 * e)), r + }, a.prototype.readIntBE = function (t, e, n) { + t |= 0, e |= 0, n || I(t, e, this.length); + for (var r = e, i = 1, a = this[t + --r]; r > 0 && (i *= 256);) a += this[t + --r] * i; + return i *= 128, a >= i && (a -= Math.pow(2, 8 * e)), a + }, a.prototype.readInt8 = function (t, e) { + return e || I(t, 1, this.length), 128 & this[t] ? -1 * (255 - this[t] + 1) : this[t] + }, a.prototype.readInt16LE = function (t, e) { + e || I(t, 2, this.length); + var n = this[t] | this[t + 1] << 8; + return 32768 & n ? 4294901760 | n : n + }, a.prototype.readInt16BE = function (t, e) { + e || I(t, 2, this.length); + var n = this[t + 1] | this[t] << 8; + return 32768 & n ? 4294901760 | n : n + }, a.prototype.readInt32LE = function (t, e) { + return e || I(t, 4, this.length), this[t] | this[t + 1] << 8 | this[t + 2] << 16 | this[t + 3] << 24 + }, a.prototype.readInt32BE = function (t, e) { + return e || I(t, 4, this.length), this[t] << 24 | this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3] + }, a.prototype.readFloatLE = function (t, e) { + return e || I(t, 4, this.length), q.read(this, t, !0, 23, 4) + }, a.prototype.readFloatBE = function (t, e) { + return e || I(t, 4, this.length), q.read(this, t, !1, 23, 4) + }, a.prototype.readDoubleLE = function (t, e) { + return e || I(t, 8, this.length), q.read(this, t, !0, 52, 8) + }, a.prototype.readDoubleBE = function (t, e) { + return e || I(t, 8, this.length), q.read(this, t, !1, 52, 8) + }, a.prototype.writeUIntLE = function (t, e, n, r) { + if (t = +t, e |= 0, n |= 0, !r) { + B(this, t, e, n, Math.pow(2, 8 * n) - 1, 0) + } + var i = 1, a = 0; + for (this[e] = 255 & t; ++a < n && (i *= 256);) this[e + a] = t / i & 255; + return e + n + }, a.prototype.writeUIntBE = function (t, e, n, r) { + if (t = +t, e |= 0, n |= 0, !r) { + B(this, t, e, n, Math.pow(2, 8 * n) - 1, 0) + } + var i = n - 1, a = 1; + for (this[e + i] = 255 & t; --i >= 0 && (a *= 256);) this[e + i] = t / a & 255; + return e + n + }, a.prototype.writeUInt8 = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 1, 255, 0), a.TYPED_ARRAY_SUPPORT || (t = Math.floor(t)), this[e] = 255 & t, e + 1 + }, a.prototype.writeUInt16LE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 2, 65535, 0), a.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8) : z(this, t, e, !0), e + 2 + }, a.prototype.writeUInt16BE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 2, 65535, 0), a.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 8, this[e + 1] = 255 & t) : z(this, t, e, !1), e + 2 + }, a.prototype.writeUInt32LE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 4, 4294967295, 0), a.TYPED_ARRAY_SUPPORT ? (this[e + 3] = t >>> 24, this[e + 2] = t >>> 16, this[e + 1] = t >>> 8, this[e] = 255 & t) : F(this, t, e, !0), e + 4 + }, a.prototype.writeUInt32BE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 4, 4294967295, 0), a.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t) : F(this, t, e, !1), e + 4 + }, a.prototype.writeIntLE = function (t, e, n, r) { + if (t = +t, e |= 0, !r) { + var i = Math.pow(2, 8 * n - 1); + B(this, t, e, n, i - 1, -i) + } + var a = 0, o = 1, s = 0; + for (this[e] = 255 & t; ++a < n && (o *= 256);) t < 0 && 0 === s && 0 !== this[e + a - 1] && (s = 1), this[e + a] = (t / o >> 0) - s & 255; + return e + n + }, a.prototype.writeIntBE = function (t, e, n, r) { + if (t = +t, e |= 0, !r) { + var i = Math.pow(2, 8 * n - 1); + B(this, t, e, n, i - 1, -i) + } + var a = n - 1, o = 1, s = 0; + for (this[e + a] = 255 & t; --a >= 0 && (o *= 256);) t < 0 && 0 === s && 0 !== this[e + a + 1] && (s = 1), this[e + a] = (t / o >> 0) - s & 255; + return e + n + }, a.prototype.writeInt8 = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 1, 127, -128), a.TYPED_ARRAY_SUPPORT || (t = Math.floor(t)), t < 0 && (t = 255 + t + 1), this[e] = 255 & t, e + 1 + }, a.prototype.writeInt16LE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 2, 32767, -32768), a.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8) : z(this, t, e, !0), e + 2 + }, a.prototype.writeInt16BE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 2, 32767, -32768), a.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 8, this[e + 1] = 255 & t) : z(this, t, e, !1), e + 2 + }, a.prototype.writeInt32LE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 4, 2147483647, -2147483648), a.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8, this[e + 2] = t >>> 16, this[e + 3] = t >>> 24) : F(this, t, e, !0), e + 4 + }, a.prototype.writeInt32BE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 4, 2147483647, -2147483648), t < 0 && (t = 4294967295 + t + 1), a.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t) : F(this, t, e, !1), e + 4 + }, a.prototype.writeFloatLE = function (t, e, n) { + return D(this, t, e, !0, n) + }, a.prototype.writeFloatBE = function (t, e, n) { + return D(this, t, e, !1, n) + }, a.prototype.writeDoubleLE = function (t, e, n) { + return j(this, t, e, !0, n) + }, a.prototype.writeDoubleBE = function (t, e, n) { + return j(this, t, e, !1, n) + }, a.prototype.copy = function (t, e, n, r) { + if (n || (n = 0), r || 0 === r || (r = this.length), e >= t.length && (e = t.length), e || (e = 0), r > 0 && r < n && (r = n), r === n) return 0; + if (0 === t.length || 0 === this.length) return 0; + if (e < 0) throw new RangeError("targetStart out of bounds"); + if (n < 0 || n >= this.length) throw new RangeError("sourceStart out of bounds"); + if (r < 0) throw new RangeError("sourceEnd out of bounds"); + r > this.length && (r = this.length), t.length - e < r - n && (r = t.length - e + n); + var i, o = r - n; + if (this === t && n < e && e < r) for (i = o - 1; i >= 0; --i) t[i + e] = this[i + n]; else if (o < 1e3 || !a.TYPED_ARRAY_SUPPORT) for (i = 0; i < o; ++i) t[i + e] = this[i + n]; else Uint8Array.prototype.set.call(t, this.subarray(n, n + o), e); + return o + }, a.prototype.fill = function (t, e, n, r) { + if ("string" == typeof t) { + if ("string" == typeof e ? (r = e, e = 0, n = this.length) : "string" == typeof n && (r = n, n = this.length), 1 === t.length) { + var i = t.charCodeAt(0); + i < 256 && (t = i) + } + if (void 0 !== r && "string" != typeof r) throw new TypeError("encoding must be a string"); + if ("string" == typeof r && !a.isEncoding(r)) throw new TypeError("Unknown encoding: " + r) + } else "number" == typeof t && (t &= 255); + if (e < 0 || this.length < e || this.length < n) throw new RangeError("Out of range index"); + if (n <= e) return this; + e >>>= 0, n = void 0 === n ? this.length : n >>> 0, t || (t = 0); + var o; + if ("number" == typeof t) for (o = e; o < n; ++o) this[o] = t; else { + var s = a.isBuffer(t) ? t : W(new a(t, r).toString()), l = s.length; + for (o = 0; o < n - e; ++o) this[o + e] = s[o % l] + } + return this + }; + var tt = /[^+\/0-9A-Za-z-_]/g + }).call(e, n(124)) +}, function (t, e, n) { + var r = n(97), i = n(85), a = n(163), o = n(140), s = function (t, e, n) { + var l, u, c, f = t & s.F, h = t & s.G, d = t & s.S, p = t & s.P, v = t & s.B, g = t & s.W, + m = h ? i : i[e] || (i[e] = {}), _ = m.prototype, y = h ? r : d ? r[e] : (r[e] || {}).prototype; + h && (n = e); + for (l in n) (u = !f && y && void 0 !== y[l]) && l in m || (c = u ? y[l] : n[l], m[l] = h && "function" != typeof y[l] ? n[l] : v && u ? a(c, r) : g && y[l] == c ? function (t) { + var e = function (e, n, r) { + if (this instanceof t) { + switch (arguments.length) { + case 0: + return new t; + case 1: + return new t(e); + case 2: + return new t(e, n) + } + return new t(e, n, r) + } + return t.apply(this, arguments) + }; + return e.prototype = t.prototype, e + }(c) : p && "function" == typeof c ? a(Function.call, c) : c, p && ((m.virtual || (m.virtual = {}))[l] = c, t & s.R && _ && !_[l] && o(_, l, c))) + }; + s.F = 1, s.G = 2, s.S = 4, s.P = 8, s.B = 16, s.W = 32, s.U = 64, s.R = 128, t.exports = s +}, function (t, e) { + var n = t.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")(); + "number" == typeof __g && (__g = n) +}, function (t, e) { + var n = {}.hasOwnProperty; + t.exports = function (t, e) { + return n.call(t, e) + } +}, function (t, e, n) { + var r = n(87), i = n(147); + t.exports = n(86) ? function (t, e, n) { + return r.f(t, e, i(1, n)) + } : function (t, e, n) { + return t[e] = n, t + } +}, function (t, e, n) { + var r = n(79), i = n(99), a = n(98), o = n(151)("src"), s = Function.toString, l = ("" + s).split("toString"); + n(113).inspectSource = function (t) { + return s.call(t) + }, (t.exports = function (t, e, n, s) { + var u = "function" == typeof n; + u && (a(n, "name") || i(n, "name", e)), t[e] !== n && (u && (a(n, o) || i(n, o, t[e] ? "" + t[e] : l.join(String(e)))), t === r ? t[e] = n : s ? t[e] ? t[e] = n : i(t, e, n) : (delete t[e], i(t, e, n))) + })(Function.prototype, "toString", function () { + return "function" == typeof this && this[o] || s.call(this) + }) +}, function (t, e, n) { + var r = n(36), i = n(81), a = n(114), o = /"/g, s = function (t, e, n, r) { + var i = String(a(t)), s = "<" + e; + return "" !== n && (s += " " + n + '="' + String(r).replace(o, """) + '"'), s + ">" + i + "" + }; + t.exports = function (t, e) { + var n = {}; + n[t] = e(s), r(r.P + r.F * i(function () { + var e = ""[t]('"'); + return e !== e.toLowerCase() || e.split('"').length > 3 + }), "String", n) + } +}, function (t, e, n) { + var r = n(183), i = n(114); + t.exports = function (t) { + return r(i(t)) + } +}, function (t, e, n) { + "use strict"; + + function r(t) { + return "[object Array]" === E.call(t) + } + + function i(t) { + return "[object ArrayBuffer]" === E.call(t) + } + + function a(t) { + return "undefined" != typeof FormData && t instanceof FormData + } + + function o(t) { + return "undefined" != typeof ArrayBuffer && ArrayBuffer.isView ? ArrayBuffer.isView(t) : t && t.buffer && t.buffer instanceof ArrayBuffer + } + + function s(t) { + return "string" == typeof t + } + + function l(t) { + return "number" == typeof t + } + + function u(t) { + return void 0 === t + } + + function c(t) { + return null !== t && "object" == typeof t + } + + function f(t) { + return "[object Date]" === E.call(t) + } + + function h(t) { + return "[object File]" === E.call(t) + } + + function d(t) { + return "[object Blob]" === E.call(t) + } + + function p(t) { + return "[object Function]" === E.call(t) + } + + function v(t) { + return c(t) && p(t.pipe) + } + + function g(t) { + return "undefined" != typeof URLSearchParams && t instanceof URLSearchParams + } + + function m(t) { + return t.replace(/^\s*/, "").replace(/\s*$/, "") + } + + function _() { + return ("undefined" == typeof navigator || "ReactNative" !== navigator.product) && ("undefined" != typeof window && "undefined" != typeof document) + } + + function y(t, e) { + if (null !== t && void 0 !== t) if ("object" == typeof t || r(t) || (t = [t]), r(t)) for (var n = 0, i = t.length; n < i; n++) e.call(null, t[n], n, t); else for (var a in t) Object.prototype.hasOwnProperty.call(t, a) && e.call(null, t[a], a, t) + } + + function b() { + function t(t, n) { + "object" == typeof e[n] && "object" == typeof t ? e[n] = b(e[n], t) : e[n] = t + } + + for (var e = {}, n = 0, r = arguments.length; n < r; n++) y(arguments[n], t); + return e + } + + function w(t, e, n) { + return y(e, function (e, r) { + t[r] = n && "function" == typeof e ? x(e, n) : e + }), t + } + + var x = n(289), S = n(346), E = Object.prototype.toString; + t.exports = { + isArray: r, + isArrayBuffer: i, + isBuffer: S, + isFormData: a, + isArrayBufferView: o, + isString: s, + isNumber: l, + isObject: c, + isUndefined: u, + isDate: f, + isFile: h, + isBlob: d, + isFunction: p, + isStream: v, + isURLSearchParams: g, + isStandardBrowserEnv: _, + forEach: y, + merge: b, + extend: w, + trim: m + } +}, function (t, e, n) { + var r = n(184), i = n(147), a = n(102), o = n(117), s = n(98), l = n(322), u = Object.getOwnPropertyDescriptor; + e.f = n(86) ? u : function (t, e) { + if (t = a(t), e = o(e, !0), l) try { + return u(t, e) + } catch (t) { + } + if (s(t, e)) return i(!r.f.call(t, e), t[e]) + } +}, function (t, e, n) { + var r = n(98), i = n(89), a = n(259)("IE_PROTO"), o = Object.prototype; + t.exports = Object.getPrototypeOf || function (t) { + return t = i(t), r(t, a) ? t[a] : "function" == typeof t.constructor && t instanceof t.constructor ? t.constructor.prototype : t instanceof Object ? o : null + } +}, function (t, e) { + var n = {}.toString; + t.exports = function (t) { + return n.call(t).slice(8, -1) + } +}, function (t, e, n) { + var r = n(90); + t.exports = function (t, e, n) { + if (r(t), void 0 === e) return t; + switch (n) { + case 1: + return function (n) { + return t.call(e, n) + }; + case 2: + return function (n, r) { + return t.call(e, n, r) + }; + case 3: + return function (n, r, i) { + return t.call(e, n, r, i) + } + } + return function () { + return t.apply(e, arguments) + } + } +}, function (t, e, n) { + "use strict"; + var r = n(81); + t.exports = function (t, e) { + return !!t && r(function () { + e ? t.call(null, function () { + }, 1) : t.call(null) + }) + } +}, , function (t, e) { + function n() { + throw new Error("setTimeout has not been defined") + } + + function r() { + throw new Error("clearTimeout has not been defined") + } + + function i(t) { + if (c === setTimeout) return setTimeout(t, 0); + if ((c === n || !c) && setTimeout) return c = setTimeout, setTimeout(t, 0); + try { + return c(t, 0) + } catch (e) { + try { + return c.call(null, t, 0) + } catch (e) { + return c.call(this, t, 0) + } + } + } + + function a(t) { + if (f === clearTimeout) return clearTimeout(t); + if ((f === r || !f) && clearTimeout) return f = clearTimeout, clearTimeout(t); + try { + return f(t) + } catch (e) { + try { + return f.call(null, t) + } catch (e) { + return f.call(this, t) + } + } + } + + function o() { + v && d && (v = !1, d.length ? p = d.concat(p) : g = -1, p.length && s()) + } + + function s() { + if (!v) { + var t = i(o); + v = !0; + for (var e = p.length; e;) { + for (d = p, p = []; ++g < e;) d && d[g].run(); + g = -1, e = p.length + } + d = null, v = !1, a(t) + } + } + + function l(t, e) { + this.fun = t, this.array = e + } + + function u() { + } + + var c, f, h = t.exports = {}; + !function () { + try { + c = "function" == typeof setTimeout ? setTimeout : n + } catch (t) { + c = n + } + try { + f = "function" == typeof clearTimeout ? clearTimeout : r + } catch (t) { + f = r + } + }(); + var d, p = [], v = !1, g = -1; + h.nextTick = function (t) { + var e = new Array(arguments.length - 1); + if (arguments.length > 1) for (var n = 1; n < arguments.length; n++) e[n - 1] = arguments[n]; + p.push(new l(t, e)), 1 !== p.length || v || i(s) + }, l.prototype.run = function () { + this.fun.apply(null, this.array) + }, h.title = "browser", h.browser = !0, h.env = {}, h.argv = [], h.version = "", h.versions = {}, h.on = u, h.addListener = u, h.once = u, h.off = u, h.removeListener = u, h.removeAllListeners = u, h.emit = u, h.prependListener = u, h.prependOnceListener = u, h.listeners = function (t) { + return [] + }, h.binding = function (t) { + throw new Error("process.binding is not supported") + }, h.cwd = function () { + return "/" + }, h.chdir = function (t) { + throw new Error("process.chdir is not supported") + }, h.umask = function () { + return 0 + } +}, function (t, e, n) { + var r, i, a; + !function (o, s) { + i = [t, n(495), n(836), n(801)], r = s, void 0 !== (a = "function" == typeof r ? r.apply(e, i) : r) && (t.exports = a) + }(0, function (t, e, n, r) { + "use strict"; + + function i(t) { + return t && t.__esModule ? t : {default: t} + } + + function a(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + } + + function o(t, e) { + if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return !e || "object" != typeof e && "function" != typeof e ? t : e + } + + function s(t, e) { + if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); + t.prototype = Object.create(e && e.prototype, { + constructor: { + value: t, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) + } + + function l(t, e) { + var n = "data-clipboard-" + t; + if (e.hasAttribute(n)) return e.getAttribute(n) + } + + var u = i(e), c = i(n), f = i(r), + h = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) { + return typeof t + } : function (t) { + return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t + }, d = function () { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var r = e[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) + } + } + + return function (e, n, r) { + return n && t(e.prototype, n), r && t(e, r), e + } + }(), p = function (t) { + function e(t, n) { + a(this, e); + var r = o(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this)); + return r.resolveOptions(n), r.listenClick(t), r + } + + return s(e, t), d(e, [{ + key: "resolveOptions", value: function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + this.action = "function" == typeof t.action ? t.action : this.defaultAction, this.target = "function" == typeof t.target ? t.target : this.defaultTarget, this.text = "function" == typeof t.text ? t.text : this.defaultText, this.container = "object" === h(t.container) ? t.container : document.body + } + }, { + key: "listenClick", value: function (t) { + var e = this; + this.listener = (0, f.default)(t, "click", function (t) { + return e.onClick(t) + }) + } + }, { + key: "onClick", value: function (t) { + var e = t.delegateTarget || t.currentTarget; + this.clipboardAction && (this.clipboardAction = null), this.clipboardAction = new u.default({ + action: this.action(e), + target: this.target(e), + text: this.text(e), + container: this.container, + trigger: e, + emitter: this + }) + } + }, { + key: "defaultAction", value: function (t) { + return l("action", t) + } + }, { + key: "defaultTarget", value: function (t) { + var e = l("target", t); + if (e) return document.querySelector(e) + } + }, { + key: "defaultText", value: function (t) { + return l("text", t) + } + }, { + key: "destroy", value: function () { + this.listener.destroy(), this.clipboardAction && (this.clipboardAction.destroy(), this.clipboardAction = null) + } + }], [{ + key: "isSupported", value: function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : ["copy", "cut"], + e = "string" == typeof t ? [t] : t, n = !!document.queryCommandSupported; + return e.forEach(function (t) { + n = n && !!document.queryCommandSupported(t) + }), n + } + }]), e + }(c.default); + t.exports = p + }) +}, function (t, e, n) { + var r = n(107), i = n(183), a = n(89), o = n(88), s = n(244); + t.exports = function (t, e) { + var n = 1 == t, l = 2 == t, u = 3 == t, c = 4 == t, f = 6 == t, h = 5 == t || f, d = e || s; + return function (e, s, p) { + for (var v, g, m = a(e), _ = i(m), y = r(s, p, 3), b = o(_.length), w = 0, x = n ? d(e, b) : l ? d(e, 0) : void 0; b > w; w++) if ((h || w in _) && (v = _[w], g = y(v, w, m), t)) if (n) x[w] = g; else if (g) switch (t) { + case 3: + return !0; + case 5: + return v; + case 6: + return w; + case 2: + x.push(v) + } else if (c) return !1; + return f ? -1 : u || c ? c : x + } + } +}, function (t, e) { + var n = t.exports = {version: "2.5.0"}; + "number" == typeof __e && (__e = n) +}, function (t, e) { + t.exports = function (t) { + if (void 0 == t) throw TypeError("Can't call method on " + t); + return t + } +}, function (t, e, n) { + var r = n(36), i = n(113), a = n(81); + t.exports = function (t, e) { + var n = (i.Object || {})[t] || Object[t], o = {}; + o[t] = e(n), r(r.S + r.F * a(function () { + n(1) + }), "Object", o) + } +}, function (t, e) { + var n = Math.ceil, r = Math.floor; + t.exports = function (t) { + return isNaN(t = +t) ? 0 : (t > 0 ? r : n)(t) + } +}, function (t, e, n) { + var r = n(82); + t.exports = function (t, e) { + if (!r(t)) return t; + var n, i; + if (e && "function" == typeof(n = t.toString) && !r(i = n.call(t))) return i; + if ("function" == typeof(n = t.valueOf) && !r(i = n.call(t))) return i; + if (!e && "function" == typeof(n = t.toString) && !r(i = n.call(t))) return i; + throw TypeError("Can't convert object to primitive value") + } +}, function (t, e, n) { + var r = n(165); + t.exports = function (t) { + if (!r(t)) throw TypeError(t + " is not an object!"); + return t + } +}, function (t, e, n) { + var r = n(118), i = n(298), a = n(239), o = Object.defineProperty; + e.f = n(126) ? Object.defineProperty : function (t, e, n) { + if (r(t), e = a(e, !0), r(n), i) try { + return o(t, e, n) + } catch (t) { + } + if ("get" in n || "set" in n) throw TypeError("Accessors not supported!"); + return "value" in n && (t[e] = n.value), t + } +}, function (t, e, n) { + var r = n(299), i = n(227); + t.exports = function (t) { + return r(i(t)) + } +}, function (t, e, n) { + var r = n(342), i = n(36), a = n(211)("metadata"), o = a.store || (a.store = new (n(345))), s = function (t, e, n) { + var i = o.get(t); + if (!i) { + if (!n) return; + o.set(t, i = new r) + } + var a = i.get(e); + if (!a) { + if (!n) return; + i.set(e, a = new r) + } + return a + }, l = function (t, e, n) { + var r = s(e, n, !1); + return void 0 !== r && r.has(t) + }, u = function (t, e, n) { + var r = s(e, n, !1); + return void 0 === r ? void 0 : r.get(t) + }, c = function (t, e, n, r) { + s(n, r, !0).set(t, e) + }, f = function (t, e) { + var n = s(t, e, !1), r = []; + return n && n.forEach(function (t, e) { + r.push(e) + }), r + }, h = function (t) { + return void 0 === t || "symbol" == typeof t ? t : String(t) + }, d = function (t) { + i(i.S, "Reflect", t) + }; + t.exports = {store: o, map: s, has: l, get: u, set: c, keys: f, key: h, exp: d} +}, function (t, e, n) { + "use strict"; + if (n(86)) { + var r = n(144), i = n(79), a = n(81), o = n(36), s = n(213), l = n(265), u = n(107), c = n(142), f = n(147), + h = n(99), d = n(148), p = n(116), v = n(88), g = n(340), m = n(150), _ = n(117), y = n(98), b = n(182), + w = n(82), x = n(89), S = n(251), E = n(145), k = n(105), T = n(146).f, C = n(267), M = n(151), A = n(84), + P = n(112), L = n(199), O = n(212), R = n(268), I = n(167), B = n(206), z = n(149), F = n(243), N = n(314), + D = n(87), j = n(104), U = D.f, H = j.f, G = i.RangeError, W = i.TypeError, V = i.Uint8Array, Z = Array.prototype, + $ = l.ArrayBuffer, X = l.DataView, Y = P(0), K = P(2), q = P(3), J = P(4), Q = P(5), tt = P(6), et = L(!0), + nt = L(!1), rt = R.values, it = R.keys, at = R.entries, ot = Z.lastIndexOf, st = Z.reduce, lt = Z.reduceRight, + ut = Z.join, ct = Z.sort, ft = Z.slice, ht = Z.toString, dt = Z.toLocaleString, pt = A("iterator"), + vt = A("toStringTag"), gt = M("typed_constructor"), mt = M("def_constructor"), _t = s.CONSTR, yt = s.TYPED, + bt = s.VIEW, wt = P(1, function (t, e) { + return Tt(O(t, t[mt]), e) + }), xt = a(function () { + return 1 === new V(new Uint16Array([1]).buffer)[0] + }), St = !!V && !!V.prototype.set && a(function () { + new V(1).set({}) + }), Et = function (t, e) { + var n = p(t); + if (n < 0 || n % e) throw G("Wrong offset!"); + return n + }, kt = function (t) { + if (w(t) && yt in t) return t; + throw W(t + " is not a typed array!") + }, Tt = function (t, e) { + if (!(w(t) && gt in t)) throw W("It is not a typed array constructor!"); + return new t(e) + }, Ct = function (t, e) { + return Mt(O(t, t[mt]), e) + }, Mt = function (t, e) { + for (var n = 0, r = e.length, i = Tt(t, r); r > n;) i[n] = e[n++]; + return i + }, At = function (t, e, n) { + U(t, e, { + get: function () { + return this._d[n] + } + }) + }, Pt = function (t) { + var e, n, r, i, a, o, s = x(t), l = arguments.length, c = l > 1 ? arguments[1] : void 0, f = void 0 !== c, + h = C(s); + if (void 0 != h && !S(h)) { + for (o = h.call(s), r = [], e = 0; !(a = o.next()).done; e++) r.push(a.value); + s = r + } + for (f && l > 2 && (c = u(c, arguments[2], 2)), e = 0, n = v(s.length), i = Tt(this, n); n > e; e++) i[e] = f ? c(s[e], e) : s[e]; + return i + }, Lt = function () { + for (var t = 0, e = arguments.length, n = Tt(this, e); e > t;) n[t] = arguments[t++]; + return n + }, Ot = !!V && a(function () { + dt.call(new V(1)) + }), Rt = function () { + return dt.apply(Ot ? ft.call(kt(this)) : kt(this), arguments) + }, It = { + copyWithin: function (t, e) { + return N.call(kt(this), t, e, arguments.length > 2 ? arguments[2] : void 0) + }, every: function (t) { + return J(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, fill: function (t) { + return F.apply(kt(this), arguments) + }, filter: function (t) { + return Ct(this, K(kt(this), t, arguments.length > 1 ? arguments[1] : void 0)) + }, find: function (t) { + return Q(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, findIndex: function (t) { + return tt(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, forEach: function (t) { + Y(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, indexOf: function (t) { + return nt(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, includes: function (t) { + return et(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, join: function (t) { + return ut.apply(kt(this), arguments) + }, lastIndexOf: function (t) { + return ot.apply(kt(this), arguments) + }, map: function (t) { + return wt(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, reduce: function (t) { + return st.apply(kt(this), arguments) + }, reduceRight: function (t) { + return lt.apply(kt(this), arguments) + }, reverse: function () { + for (var t, e = this, n = kt(e).length, r = Math.floor(n / 2), i = 0; i < r;) t = e[i], e[i++] = e[--n], e[n] = t; + return e + }, some: function (t) { + return q(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, sort: function (t) { + return ct.call(kt(this), t) + }, subarray: function (t, e) { + var n = kt(this), r = n.length, i = m(t, r); + return new (O(n, n[mt]))(n.buffer, n.byteOffset + i * n.BYTES_PER_ELEMENT, v((void 0 === e ? r : m(e, r)) - i)) + } + }, Bt = function (t, e) { + return Ct(this, ft.call(kt(this), t, e)) + }, zt = function (t) { + kt(this); + var e = Et(arguments[1], 1), n = this.length, r = x(t), i = v(r.length), a = 0; + if (i + e > n) throw G("Wrong length!"); + for (; a < i;) this[e + a] = r[a++] + }, Ft = { + entries: function () { + return at.call(kt(this)) + }, keys: function () { + return it.call(kt(this)) + }, values: function () { + return rt.call(kt(this)) + } + }, Nt = function (t, e) { + return w(t) && t[yt] && "symbol" != typeof e && e in t && String(+e) == String(e) + }, Dt = function (t, e) { + return Nt(t, e = _(e, !0)) ? f(2, t[e]) : H(t, e) + }, jt = function (t, e, n) { + return !(Nt(t, e = _(e, !0)) && w(n) && y(n, "value")) || y(n, "get") || y(n, "set") || n.configurable || y(n, "writable") && !n.writable || y(n, "enumerable") && !n.enumerable ? U(t, e, n) : (t[e] = n.value, t) + }; + _t || (j.f = Dt, D.f = jt), o(o.S + o.F * !_t, "Object", { + getOwnPropertyDescriptor: Dt, + defineProperty: jt + }), a(function () { + ht.call({}) + }) && (ht = dt = function () { + return ut.call(this) + }); + var Ut = d({}, It); + d(Ut, Ft), h(Ut, pt, Ft.values), d(Ut, { + slice: Bt, set: zt, constructor: function () { + }, toString: ht, toLocaleString: Rt + }), At(Ut, "buffer", "b"), At(Ut, "byteOffset", "o"), At(Ut, "byteLength", "l"), At(Ut, "length", "e"), U(Ut, vt, { + get: function () { + return this[yt] + } + }), t.exports = function (t, e, n, l) { + l = !!l; + var u = t + (l ? "Clamped" : "") + "Array", f = "get" + t, d = "set" + t, p = i[u], m = p || {}, _ = p && k(p), + y = !p || !s.ABV, x = {}, S = p && p.prototype, C = function (t, n) { + var r = t._d; + return r.v[f](n * e + r.o, xt) + }, M = function (t, n, r) { + var i = t._d; + l && (r = (r = Math.round(r)) < 0 ? 0 : r > 255 ? 255 : 255 & r), i.v[d](n * e + i.o, r, xt) + }, A = function (t, e) { + U(t, e, { + get: function () { + return C(this, e) + }, set: function (t) { + return M(this, e, t) + }, enumerable: !0 + }) + }; + y ? (p = n(function (t, n, r, i) { + c(t, p, u, "_d"); + var a, o, s, l, f = 0, d = 0; + if (w(n)) { + if (!(n instanceof $ || "ArrayBuffer" == (l = b(n)) || "SharedArrayBuffer" == l)) return yt in n ? Mt(p, n) : Pt.call(p, n); + a = n, d = Et(r, e); + var m = n.byteLength; + if (void 0 === i) { + if (m % e) throw G("Wrong length!"); + if ((o = m - d) < 0) throw G("Wrong length!") + } else if ((o = v(i) * e) + d > m) throw G("Wrong length!"); + s = o / e + } else s = g(n), o = s * e, a = new $(o); + for (h(t, "_d", {b: a, o: d, l: o, e: s, v: new X(a)}); f < s;) A(t, f++) + }), S = p.prototype = E(Ut), h(S, "constructor", p)) : a(function () { + p(1) + }) && a(function () { + new p(-1) + }) && B(function (t) { + new p, new p(null), new p(1.5), new p(t) + }, !0) || (p = n(function (t, n, r, i) { + c(t, p, u); + var a; + return w(n) ? n instanceof $ || "ArrayBuffer" == (a = b(n)) || "SharedArrayBuffer" == a ? void 0 !== i ? new m(n, Et(r, e), i) : void 0 !== r ? new m(n, Et(r, e)) : new m(n) : yt in n ? Mt(p, n) : Pt.call(p, n) : new m(g(n)) + }), Y(_ !== Function.prototype ? T(m).concat(T(_)) : T(m), function (t) { + t in p || h(p, t, m[t]) + }), p.prototype = S, r || (S.constructor = p)); + var P = S[pt], L = !!P && ("values" == P.name || void 0 == P.name), O = Ft.values; + h(p, gt, !0), h(S, yt, u), h(S, bt, !0), h(S, mt, p), (l ? new p(1)[vt] == u : vt in S) || U(S, vt, { + get: function () { + return u + } + }), x[u] = p, o(o.G + o.W + o.F * (p != m), x), o(o.S, u, {BYTES_PER_ELEMENT: e}), o(o.S + o.F * a(function () { + m.of.call(p, 1) + }), u, { + from: Pt, + of: Lt + }), "BYTES_PER_ELEMENT" in S || h(S, "BYTES_PER_ELEMENT", e), o(o.P, u, It), z(u), o(o.P + o.F * St, u, {set: zt}), o(o.P + o.F * !L, u, Ft), r || S.toString == ht || (S.toString = ht), o(o.P + o.F * a(function () { + new p(1).slice() + }), u, {slice: Bt}), o(o.P + o.F * (a(function () { + return [1, 2].toLocaleString() != new p([1, 2]).toLocaleString() + }) || !a(function () { + S.toLocaleString.call([1, 2]) + })), u, {toLocaleString: Rt}), I[u] = L ? P : O, r || L || h(S, pt, O) + } + } else t.exports = function () { + } +}, function (t, e, n) { + "use strict"; + (function (e, r) { + function i(t, e) { + t = "string" == typeof t ? {ec_level: t} : t || {}; + var n = {type: String(e || t.type || "png").toLowerCase()}, r = "png" == n.type ? d : p; + for (var i in r) n[i] = i in t ? t[i] : r[i]; + return n + } + + function a(t, n) { + n = i(n); + var r = u(t, n.ec_level, n.parse_url), a = new l; + switch (a._read = h, n.type) { + case"svg": + case"pdf": + case"eps": + e.nextTick(function () { + f[n.type](r, a, n.margin, n.size) + }); + break; + case"svgpath": + e.nextTick(function () { + var t = f.svg_object(r, n.margin, n.size); + a.push(t.path), a.push(null) + }); + break; + case"png": + default: + e.nextTick(function () { + var t = c.bitmap(r, n.size, n.margin); + n.customize && n.customize(t), c.png(t, a) + }) + } + return a + } + + function o(t, e) { + e = i(e); + var n, a = u(t, e.ec_level, e.parse_url), o = []; + switch (e.type) { + case"svg": + case"pdf": + case"eps": + f[e.type](a, o, e.margin, e.size), n = o.filter(Boolean).join(""); + break; + case"png": + default: + var s = c.bitmap(a, e.size, e.margin); + e.customize && e.customize(s), c.png(s, o), n = r.concat(o.filter(Boolean)) + } + return n + } + + function s(t, e) { + e = i(e, "svg"); + var n = u(t, e.ec_level); + return f.svg_object(n, e.margin) + } + + var l = n(833).Readable, u = n(823).QR, c = n(822), f = n(824), h = function () { + }, d = {parse_url: !1, ec_level: "M", size: 5, margin: 4, customize: null}, + p = {parse_url: !1, ec_level: "M", margin: 1, size: 0}; + t.exports = {matrix: u, image: a, imageSync: o, svgObject: s} + }).call(e, n(110), n(95).Buffer) +}, function (t, e) { + var n; + n = function () { + return this + }(); + try { + n = n || Function("return this")() || (0, eval)("this") + } catch (t) { + "object" == typeof window && (n = window) + } + t.exports = n +}, , function (t, e, n) { + t.exports = !n(164)(function () { + return 7 != Object.defineProperty({}, "a", { + get: function () { + return 7 + } + }).a + }) +}, function (t, e, n) { + var r = n(84)("unscopables"), i = Array.prototype; + void 0 == i[r] && n(99)(i, r, {}), t.exports = function (t) { + i[r][t] = !0 + } +}, function (t, e, n) { + var r = n(151)("meta"), i = n(82), a = n(98), o = n(87).f, s = 0, l = Object.isExtensible || function () { + return !0 + }, u = !n(81)(function () { + return l(Object.preventExtensions({})) + }), c = function (t) { + o(t, r, {value: {i: "O" + ++s, w: {}}}) + }, f = function (t, e) { + if (!i(t)) return "symbol" == typeof t ? t : ("string" == typeof t ? "S" : "P") + t; + if (!a(t, r)) { + if (!l(t)) return "F"; + if (!e) return "E"; + c(t) + } + return t[r].i + }, h = function (t, e) { + if (!a(t, r)) { + if (!l(t)) return !0; + if (!e) return !1; + c(t) + } + return t[r].w + }, d = function (t) { + return u && p.NEED && l(t) && !a(t, r) && c(t), t + }, p = t.exports = {KEY: r, NEED: !1, fastKey: f, getWeak: h, onFreeze: d} +}, function (t, e, n) { + var r = n(332), i = n(247); + t.exports = Object.keys || function (t) { + return r(t, i) + } +}, function (t, e, n) { + "use strict"; + + function r(t, e) { + return Object.prototype.hasOwnProperty.call(t, e) + } + + var i = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Int32Array; + e.assign = function (t) { + for (var e = Array.prototype.slice.call(arguments, 1); e.length;) { + var n = e.shift(); + if (n) { + if ("object" != typeof n) throw new TypeError(n + "must be non-object"); + for (var i in n) r(n, i) && (t[i] = n[i]) + } + } + return t + }, e.shrinkBuf = function (t, e) { + return t.length === e ? t : t.subarray ? t.subarray(0, e) : (t.length = e, t) + }; + var a = { + arraySet: function (t, e, n, r, i) { + if (e.subarray && t.subarray) return void t.set(e.subarray(n, n + r), i); + for (var a = 0; a < r; a++) t[i + a] = e[n + a] + }, flattenChunks: function (t) { + var e, n, r, i, a, o; + for (r = 0, e = 0, n = t.length; e < n; e++) r += t[e].length; + for (o = new Uint8Array(r), i = 0, e = 0, n = t.length; e < n; e++) a = t[e], o.set(a, i), i += a.length; + return o + } + }, o = { + arraySet: function (t, e, n, r, i) { + for (var a = 0; a < r; a++) t[i + a] = e[n + a] + }, flattenChunks: function (t) { + return [].concat.apply([], t) + } + }; + e.setTyped = function (t) { + t ? (e.Buf8 = Uint8Array, e.Buf16 = Uint16Array, e.Buf32 = Int32Array, e.assign(e, a)) : (e.Buf8 = Array, e.Buf16 = Array, e.Buf32 = Array, e.assign(e, o)) + }, e.setTyped(i) +}, , , , , , , , , function (t, e) { + var n = {}.hasOwnProperty; + t.exports = function (t, e) { + return n.call(t, e) + } +}, function (t, e, n) { + var r = n(119), i = n(179); + t.exports = n(126) ? function (t, e, n) { + return r.f(t, e, i(1, n)) + } : function (t, e, n) { + return t[e] = n, t + } +}, function (t, e, n) { + var r = n(306), i = n(229); + t.exports = Object.keys || function (t) { + return r(t, i) + } +}, function (t, e) { + t.exports = function (t, e, n, r) { + if (!(t instanceof e) || void 0 !== r && r in t) throw TypeError(n + ": incorrect invocation!"); + return t + } +}, function (t, e, n) { + var r = n(107), i = n(324), a = n(251), o = n(78), s = n(88), l = n(267), u = {}, c = {}, + e = t.exports = function (t, e, n, f, h) { + var d, p, v, g, m = h ? function () { + return t + } : l(t), _ = r(n, f, e ? 2 : 1), y = 0; + if ("function" != typeof m) throw TypeError(t + " is not iterable!"); + if (a(m)) { + for (d = s(t.length); d > y; y++) if ((g = e ? _(o(p = t[y])[0], p[1]) : _(t[y])) === u || g === c) return g + } else for (v = m.call(t); !(p = v.next()).done;) if ((g = i(v, _, p.value, e)) === u || g === c) return g + }; + e.BREAK = u, e.RETURN = c +}, function (t, e) { + t.exports = !1 +}, function (t, e, n) { + var r = n(78), i = n(330), a = n(247), o = n(259)("IE_PROTO"), s = function () { + }, l = function () { + var t, e = n(246)("iframe"), r = a.length; + for (e.style.display = "none", n(249).appendChild(e), e.src = "javascript:", t = e.contentWindow.document, t.open(), t.write(" \ No newline at end of file diff --git a/static/chart_main/chart_main/static/tv-chart.82ee311dc10bb182c736.html b/static/chart_main/chart_main/static/tv-chart.82ee311dc10bb182c736.html new file mode 100644 index 0000000..9ce6b9f --- /dev/null +++ b/static/chart_main/chart_main/static/tv-chart.82ee311dc10bb182c736.html @@ -0,0 +1,126 @@ + + + + + + + + + + + +
+
+
+
时间
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
成交量
+
+
+
+ + + + + + + + diff --git a/static/chart_main/chart_main/ws.js b/static/chart_main/chart_main/ws.js new file mode 100644 index 0000000..7cc2381 --- /dev/null +++ b/static/chart_main/chart_main/ws.js @@ -0,0 +1,230 @@ +"use strict"; + + +function _instanceof(left, right) { if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) { return !!right[Symbol.hasInstance](left); } else { return left instanceof right; } } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _classCallCheck(instance, Constructor) { if (!_instanceof(instance, Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var Ws = /*#__PURE__*/function () { + function Ws(ws, data) { + var _this = this; + + _classCallCheck(this, Ws); + + // [{url, data, method...},,,,] + this._ws = ws; + this._data = data; // 待发送的消息列 + + this._msgs = []; + this.socket = this.doLink(); + this.doOpen(); // 订阅/发布模型 + + this._events = {}; // 是否保持连接 + + this._isLink = true; // 循环检查 + + setInterval(function () { + if (_this._isLink) { + if (_this.socket.readyState == 2 || _this.socket.readyState == 3) { + _this.resetLink(); + } + } + }, 3000); + } // 重连 + + + _createClass(Ws, [{ + key: "resetLink", + value: function resetLink() { + this.socket = this.doLink(); + this.doOpen(); + } // 连接 + + }, { + key: "doLink", + value: function doLink() { + var ws = new WebSocket( this._ws); + return ws; + } + }, { + key: "doOpen", + value: function doOpen() { + var _this2 = this; + + this.socket.addEventListener('open',function (ev) { + _this2.onOpen(ev); + }); + this.socket.addEventListener('message',function (ev) { + _this2.onMessage(ev); + }); + this.socket.addEventListener('close',function (ev) { + _this2.onClose(ev); + }); + this.socket.addEventListener('error',function (ev) { + _this2.onError(ev); + }); + } // 打开 + + }, { + key: "onOpen", + value: function onOpen() { + var _this3 = this; + + // 打开时重发未发出的消息 + var list = Object.assign([], this._msgs); + list.forEach(function (item) { + if (_this3.send(item)) { + var idx = _this3._msgs.indexOf(item); + + if (idx != -1) { + _this3._msgs.splice(idx, 1); + } + } + }); + } // 手动关闭 + + }, { + key: "doClose", + value: function doClose() { + this._isLink = false; + this._events = {}; + this._msgs = []; + this.socket.close({ + success: function success() { + console.log('socket close success'); + } + }); + } // 添加监听 + + }, { + key: "on", + value: function on(name, handler) { + this.subscribe(name, handler); + } // 取消监听 + + }, { + key: "off", + value: function off(name, handler) { + this.unsubscribe(name, handler); + } // 关闭事件 + + }, { + key: "onClose", + value: function onClose() { + var _this4 = this; + + // 是否重新连接 + if (this._isLink) { + setTimeout(function () { + _this4.resetLink(); + }, 3000); + } + } // 错误 + + }, { + key: "onError", + value: function onError(evt) { + this.Notify({ + Event: 'error', + Data: evt + }); + } // 接受数据 + + }, { + key: "onMessage", + value: function onMessage(evt) { + try { + // 解析推送的数据 + var data = JSON.parse(evt.data); // 通知订阅者 + + this.Notify({ + Event: 'message', + Data: data + }); + } catch (err) { + console.error(' >> Data parsing error:', err); // 通知订阅者 + + this.Notify({ + Event: 'error', + Data: err + }); + } + } // 订阅事件的方法 + + }, { + key: "subscribe", + value: function subscribe(name, handler) { + if (this._events.hasOwnProperty(name)) { + this._events[name].push(handler); // 追加事件 + + } else { + this._events[name] = [handler]; // 添加事件 + } + } // 取消订阅事件 + + }, { + key: "unsubscribe", + value: function unsubscribe(name, handler) { + var start = this._events[name].findIndex(function (item) { + return item === handler; + }); // 删除该事件 + + + this._events[name].splice(start, 1); + } // 发布后通知订阅者 + + }, { + key: "Notify", + value: function Notify(entry) { + // 检查是否有订阅者 返回队列 + var cbQueue = this._events[entry.Event]; + + if (cbQueue && cbQueue.length) { + var _iterator = _createForOfIteratorHelper(cbQueue), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var callback = _step.value; + if (_instanceof(callback, Function)) callback(entry.Data); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + } // 发送消息 + + }, { + key: "send", + value: function send(data) { + if (this.socket.readyState == 1) { + this.socket.send(JSON.stringify(data)); + return true; + } else { + // 保存到待发送信息 + if (!this._msgs.includes(data)) { + this._msgs.push(data); + } + + ; + return false; + } + } + }]); + + return Ws; +}(); + +window.Ws = Ws; \ No newline at end of file diff --git a/static/chart_main/charting_library.min.d.ts b/static/chart_main/charting_library.min.d.ts new file mode 100644 index 0000000..9091789 --- /dev/null +++ b/static/chart_main/charting_library.min.d.ts @@ -0,0 +1,1334 @@ +/// + +export declare type LanguageCode = 'ar' | 'zh' | 'cs' | 'da_DK' | 'nl_NL' | 'en' | 'et_EE' | 'fr' | 'de' | 'el' | 'he_IL' | 'hu_HU' | 'id_ID' | 'it' | 'ja' | 'ko' | 'fa' | 'pl' | 'pt' | 'ro' | 'ru' | 'sk_SK' | 'es' | 'sv' | 'th' | 'tr' | 'vi'; +export interface ISubscription { + subscribe(obj: object | null, member: TFunc, singleshot?: boolean): void; + unsubscribe(obj: object | null, member: TFunc): void; + unsubscribeAll(obj: object | null): void; +} +export interface IDelegate extends ISubscription { + fire: TFunc; +} +export interface IDestroyable { + destroy(): void; +} +/** + * This is the generic type useful for declaring a nominal type, + * which does not structurally matches with the base type and + * the other types declared over the same base type + * + * Usage: + * @example + * type Index = Nominal; + * // let i: Index = 42; // this fails to compile + * let i: Index = 42 as Index; // OK + * @example + * type TagName = Nominal; + */ +export declare type Nominal = T & { + [Symbol.species]: Name; +}; +export interface FormatterParseResult { + res: boolean; +} +export interface ErrorFormatterParseResult extends FormatterParseResult { + error?: string; + res: false; +} +export interface SuccessFormatterParseResult extends FormatterParseResult { + res: true; + suggest?: string; +} +export interface IFormatter { + format(value: any): string; + parse?(value: string): ErrorFormatterParseResult | SuccessFormatterParseResult; +} +export declare type StudyInputValueType = string | number | boolean; +export declare type StudyOverrideValueType = string | number | boolean; +export interface StudyOverrides { + [key: string]: StudyOverrideValueType; +} +export interface WatchedValueSubscribeOptions { + once?: boolean; + callWithLast?: boolean; +} +export interface IWatchedValueReadonly { + value(): T; + subscribe(callback: (value: T) => void, options?: WatchedValueSubscribeOptions): void; + unsubscribe(callback?: ((value: T) => void) | null): void; + spawn(): IWatchedValueReadonlySpawn; +} +export interface IWatchedValueReadonlySpawn extends IWatchedValueReadonly, IDestroyable { +} +export declare type WatchedValueCallback = (value: T) => void; +export interface IWatchedValue extends IWatchedValueReadonly { + value(): T; + setValue(value: T, forceUpdate?: boolean): void; + subscribe(callback: WatchedValueCallback, options?: WatchedValueSubscribeOptions): void; + unsubscribe(callback?: WatchedValueCallback | null): void; + readonly(): IWatchedValueReadonly; + spawn(): IWatchedValueSpawn; +} +export interface IWatchedValueSpawn extends IWatchedValueReadonlySpawn, IWatchedValue { + spawn(): IWatchedValueSpawn; +} +export declare const enum ConnectionStatus { + Connected = 1, + Connecting = 2, + Disconnected = 3, + Error = 4, +} +export declare const enum OrderType { + Limit = 1, + Market = 2, + Stop = 3, + StopLimit = 4, +} +export declare const enum Side { + Buy = 1, + Sell = -1, +} +export declare const enum OrderStatus { + Canceled = 1, + Filled = 2, + Inactive = 3, + Placing = 4, + Rejected = 5, + Working = 6, +} +export declare const enum ParentType { + Order = 1, + Position = 2, + Trade = 3, +} +export declare const enum OrderTicketFocusControl { + StopLoss = 1, + StopPrice = 2, + TakeProfit = 3, +} +export declare const enum NotificationType { + Error = 0, + Success = 1, +} +export interface TableRow { + priceFormatter?: IFormatter; + [name: string]: any; +} +export interface TableFormatterInputs { + value: number | string | Side | OrderType | OrderStatus; + prevValue?: number | undefined; + row: TableRow; + $container: JQuery; + priceFormatter?: IFormatter; +} +export declare type TableElementFormatFunction = (inputs: TableFormatterInputs) => string | JQuery; +export interface TableElementFormatter { + name: string; + format: TableElementFormatFunction; +} +export declare type StandardFormatterName = 'date' | 'default' | 'fixed' | 'formatPrice' | 'formatPriceForexSup' | 'integerSeparated' | 'localDate' | 'percentage' | 'pips' | 'profit' | 'side' | 'status' | 'symbol' | 'type'; +export interface DOMLevel { + price: number; + volume: number; +} +export interface DOMData { + snapshot: boolean; + asks: DOMLevel[]; + bids: DOMLevel[]; +} +export interface QuantityMetainfo { + min: number; + max: number; + step: number; + default?: number; +} +export interface InstrumentInfo { + qty: QuantityMetainfo; + pipValue: number; + pipSize: number; + minTick: number; + description: string; + domVolumePrecision?: number; +} +export interface CustomFields { + [key: string]: any; +} +export interface PreOrder { + symbol: string; + brokerSymbol?: string; + type?: OrderType; + side?: Side; + qty: number; + status?: OrderStatus; + stopPrice?: number; + limitPrice?: number; + stopLoss?: number; + takeProfit?: number; + duration?: OrderDuration; +} +export interface PlacedOrder extends PreOrder, CustomFields { + id: string; + filledQty?: number; + avgPrice?: number; + updateTime?: number; + takeProfit?: number; + stopLoss?: number; + type: OrderType; + side: Side; + status: OrderStatus; +} +export interface OrderWithParent extends PlacedOrder { + parentId: string; + parentType: ParentType; +} +export declare type Order = OrderWithParent | PlacedOrder; +export interface Position { + id: string; + symbol: string; + brokerSymbol?: string; + qty: number; + side: Side; + avgPrice: number; + [key: string]: any; +} +export interface Trade extends CustomFields { + id: string; + date: number; + symbol: string; + brokerSymbol?: string; + qty: number; + side: Side; + price: number; +} +export interface Execution extends CustomFields { + symbol: string; + brokerSymbol?: string; + price: number; + qty: number; + side: Side; + time: number; +} +export interface AccountInfo { + id: string; + name: string; + currency?: string; + currencySign?: string; +} +export interface AccountManagerColumn { + id?: string; + label: string; + className?: string; + formatter?: StandardFormatterName | 'orderSettings' | 'posSettings' | string; + property?: string; + sortProp?: string; + modificationProperty?: string; + notSortable?: boolean; + help?: string; + highlightDiff?: boolean; + fixedWidth?: boolean; + notHideable?: boolean; + hideByDefault?: boolean; +} +export interface SortingParameters { + columnId: string; + asc?: boolean; +} +export interface AccountManagerTable { + id: string; + title?: string; + columns: AccountManagerColumn[]; + initialSorting?: SortingParameters; + changeDelegate: ISubscription<(data: {}) => void>; + getData(): Promise<{}[]>; +} +export interface AccountManagerPage { + id: string; + title: string; + tables: AccountManagerTable[]; +} +export interface AccountManagerInfo { + accountTitle: string; + accountsList?: AccountInfo[]; + account?: IWatchedValue; + summary: AccountManagerSummaryField[]; + customFormatters?: TableElementFormatter[]; + orderColumns: AccountManagerColumn[]; + historyColumns?: AccountManagerColumn[]; + positionColumns: AccountManagerColumn[]; + tradeColumns?: AccountManagerColumn[]; + pages: AccountManagerPage[]; + possibleOrderStatuses?: OrderStatus[]; + contextMenuActions?(contextMenuEvent: JQueryEventObject, activePageActions: ActionMetaInfo[]): Promise; +} +export interface TradingQuotes { + trade?: number; + size?: number; + bid?: number; + bid_size?: number; + ask?: number; + ask_size?: number; + spread?: number; +} +export interface ActionDescription { + text?: '-' | string; + separator?: boolean; + shortcut?: string; + tooltip?: string; + checked?: boolean; + checkable?: boolean; + enabled?: boolean; + externalLink?: boolean; +} +export interface MenuSeparator extends ActionDescription { + separator: boolean; +} +export interface ActionDescriptionWithCallback extends ActionDescription { + action: (a: ActionDescription) => void; +} +export declare type ActionMetaInfo = ActionDescriptionWithCallback | MenuSeparator; +export interface AccountManagerSummaryField { + text: string; + wValue: IWatchedValueReadonly; + formatter?: string; +} +export interface OrderDurationMetaInfo { + hasDatePicker?: boolean; + hasTimePicker?: boolean; + name: string; + value: string; +} +export interface OrderDuration { + /** + * type is OrderDurationMetaInfo.value + */ + type: string; + datetime?: number; +} +export interface BrokerConfigFlags { + showQuantityInsteadOfAmount?: boolean; + supportOrderBrackets?: boolean; + supportPositionBrackets?: boolean; + supportTradeBrackets?: boolean; + supportTrades?: boolean; + supportClosePosition?: boolean; + supportCloseTrade?: boolean; + supportEditAmount?: boolean; + supportLevel2Data?: boolean; + supportMultiposition?: boolean; + supportPLUpdate?: boolean; + supportReducePosition?: boolean; + supportReversePosition?: boolean; + supportStopLimitOrders?: boolean; + supportDemoLiveSwitcher?: boolean; + supportCustomPlaceOrderTradableCheck?: boolean; + supportMarketBrackets?: boolean; + supportSymbolSearch?: boolean; + supportModifyDuration?: boolean; + supportModifyOrder?: boolean; + calculatePLUsingLast?: boolean; + requiresFIFOCloseTrades?: boolean; + supportBottomWidget?: boolean; + /** + * @deprecated + */ + supportBrackets?: boolean; +} +export interface SingleBrokerMetaInfo { + configFlags: BrokerConfigFlags; + customNotificationFields?: string[]; + durations?: OrderDurationMetaInfo[]; +} +export interface Brackets { + stopLoss?: number; + takeProfit?: number; +} +export interface DefaultContextMenuActionsParams { +} +export interface DefaultDropdownActionsParams { + showFloatingToolbar?: boolean; + showDOM?: boolean; + tradingProperties?: boolean; + selectAnotherBroker?: boolean; + disconnect?: boolean; + showHowToUse?: boolean; +} +export interface ITradeContext { + symbol: string; + displaySymbol: string; + value: number | null; + formattedValue: string; + last: number; +} +export interface QuotesBase { + change: number; + change_percent: number; + last_price: number; + fractional: number; + minmov: number; + minmove2: number; + pricescale: number; + description: string; +} +export interface OrderDialogOptions { + customFields?: (TextWithCheckboxFieldMetaInfo | CustomInputFieldMetaInfo)[]; +} +export interface BaseInputFieldValidatorResult { + valid: boolean; +} +export interface PositiveBaseInputFieldValidatorResult extends BaseInputFieldValidatorResult { + valid: true; +} +export interface NegativeBaseInputFieldValidatorResult extends BaseInputFieldValidatorResult { + valid: false; + errorMessage: string; +} +export declare type InputFieldValidatorResult = PositiveBaseInputFieldValidatorResult | NegativeBaseInputFieldValidatorResult; +export declare type InputFieldValidator = (value: any) => InputFieldValidatorResult; +export interface CustomInputFieldMetaInfo { + id: string; + title: string; + placeHolder: string; + value: any; + validator?: InputFieldValidator; + customInfo?: any; +} +export interface TextWithCheckboxValue { + text: string; + checked: boolean; +} +export interface TextWithCheckboxFieldCustomInfo { + checkboxTitle: string; + asterix?: boolean; +} +export declare type TextInputFieldValidator = (value: string) => InputFieldValidatorResult; +export interface TextWithCheckboxFieldMetaInfo extends CustomInputFieldMetaInfo { + value: TextWithCheckboxValue; + customInfo: TextWithCheckboxFieldCustomInfo; + validator?: TextInputFieldValidator; +} +export interface CustomInputFieldsValues { + [fieldId: string]: TextWithCheckboxValue | any; +} +export interface IBrokerCommon { + chartContextMenuActions(context: ITradeContext, options?: DefaultContextMenuActionsParams): Promise; + isTradable(symbol: string): Promise; + connectionStatus(): ConnectionStatus; + placeOrder(order: PreOrder, silently?: boolean): Promise; + modifyOrder(order: Order, silently?: boolean, focus?: OrderTicketFocusControl): Promise; + orders(): Promise; + positions(): Promise; + trades?(): Promise; + executions(symbol: string): Promise; + symbolInfo(symbol: string): Promise; + accountInfo(): Promise; + editPositionBrackets?(positionId: string, focus?: OrderTicketFocusControl, brackets?: Brackets, silently?: boolean): Promise; + editTradeBrackets?(tradeId: string, focus?: OrderTicketFocusControl, brackets?: Brackets, silently?: boolean): Promise; + accountManagerInfo(): AccountManagerInfo; + formatter?(symbol: string): Promise; + spreadFormatter?(symbol: string): Promise; +} +export interface SuggestedQuantity { + changed: IDelegate<(symbol: string) => void>; + value(symbol: string): Promise; + setValue(symbol: string, value: number): void; +} +export interface IBrokerConnectionAdapterFactory { + createDelegate(): IDelegate; + createWatchedValue(value?: T): IWatchedValue; +} +export interface IBrokerConnectionAdapterHost { + factory: IBrokerConnectionAdapterFactory; + connectionStatusUpdate(status: ConnectionStatus, message?: string): void; + defaultFormatter(symbol: string): Promise; + numericFormatter(decimalPlaces: number): Promise; + defaultContextMenuActions(context: ITradeContext, params?: DefaultContextMenuActionsParams): Promise; + defaultDropdownMenuActions(options?: Partial): ActionMetaInfo[]; + floatingTradingPanelVisibility(): IWatchedValue; + domVisibility(): IWatchedValue; + silentOrdersPlacement(): IWatchedValue; + patchConfig(config: Partial): void; + setDurations(durations: OrderDurationMetaInfo[]): void; + orderUpdate(order: Order, isHistoryUpdate?: boolean): void; + orderPartialUpdate(id: string, orderChanges: Partial): void; + positionUpdate(position: Position, isHistoryUpdate?: boolean): void; + positionPartialUpdate(id: string, positionChanges: Partial): void; + tradeUpdate(trade: Trade, isHistoryUpdate?: boolean): void; + tradePartialUpdate(id: string, tradeChanges: Partial): void; + executionUpdate(execution: Execution, isHistoryUpdate?: boolean): void; + fullUpdate(): void; + realtimeUpdate(symbol: string, data: TradingQuotes): void; + plUpdate(positionId: string, pl: number): void; + tradePLUpdate(tradeId: string, pl: number): void; + equityUpdate(equity: number): void; + domeUpdate(symbol: string, equity: DOMData): void; + showOrderDialog(order: T, handler: (order: T, customFieldsResult?: CustomInputFieldsValues) => Promise, focus?: OrderTicketFocusControl, options?: OrderDialogOptions): Promise; + showCancelOrderDialog(orderId: string, handler: () => void): Promise; + showCancelMultipleOrdersDialog(symbol: string, side: Side | undefined, qty: number, handler: () => void): Promise; + showCancelBracketsDialog(orderId: string, handler: () => void): Promise; + showCancelMultipleBracketsDialog(orderId: string, handler: () => void): Promise; + showClosePositionDialog(positionId: string, handler: () => void): Promise; + showReversePositionDialog(position: Position, handler: () => void): Promise; + showPositionBracketsDialog(position: Position | Trade, brackets: Brackets, focus: OrderTicketFocusControl | null, handler: (brackets: Brackets) => void): Promise; + showNotification(title: string, text: string, notificationType?: NotificationType): void; + setButtonDropdownActions(descriptions: ActionMetaInfo[]): void; + activateBottomWidget(): Promise; + showTradingProperties(): void; + suggestedQty(): SuggestedQuantity; + symbolSnapshot(symbol: string): Promise; +} +export interface IBrokerWithoutRealtime extends IBrokerCommon { + subscribeDOME?(symbol: string): void; + unsubscribeDOME?(symbol: string): void; + cancelOrder(orderId: string, silently: boolean): Promise; + cancelOrders(symbol: string, side: Side | undefined, ordersIds: string[], silently: boolean): Promise; + reversePosition?(positionId: string, silently?: boolean): Promise; + closePosition(positionId: string, silently: boolean): Promise; + closeTrade?(tradeId: string, silently: boolean): Promise; + /** + * @deprecated Brokers should always send PL and equity updates + */ + subscribePL?(positionId: string): void; + subscribeEquity?(): void; + /** + * @deprecated + */ + unsubscribePL?(positionId: string): void; + unsubscribeEquity?(): void; +} +export interface IBrokerTerminal extends IBrokerWithoutRealtime { + subscribeRealtime(symbol: string): void; + unsubscribeRealtime(symbol: string): void; +} +export declare type ResolutionString = string; +export interface Exchange { + value: string; + name: string; + desc: string; +} +export interface DatafeedSymbolType { + name: string; + value: string; +} +export interface DatafeedConfiguration { + exchanges?: Exchange[]; + supported_resolutions?: ResolutionString[]; + supports_marks?: boolean; + supports_time?: boolean; + supports_timescale_marks?: boolean; + symbols_types?: DatafeedSymbolType[]; +} +export declare type OnReadyCallback = (configuration: DatafeedConfiguration) => void; +export interface IExternalDatafeed { + onReady(callback: OnReadyCallback): void; +} +export interface DatafeedQuoteValues { + ch?: number; + chp?: number; + short_name?: string; + exchange?: string; + description?: string; + lp?: number; + ask?: number; + bid?: number; + spread?: number; + open_price?: number; + high_price?: number; + low_price?: number; + prev_close_price?: number; + volume?: number; + original_name?: string; + [valueName: string]: string | number | undefined; +} +export interface QuoteOkData { + s: 'ok'; + n: string; + v: DatafeedQuoteValues; +} +export interface QuoteErrorData { + s: 'error'; + n: string; + v: object; +} +export declare type QuoteData = QuoteOkData | QuoteErrorData; +export declare type QuotesCallback = (data: QuoteData[]) => void; +export interface IDatafeedQuotesApi { + getQuotes(symbols: string[], onDataCallback: QuotesCallback, onErrorCallback: (msg: string) => void): void; + subscribeQuotes(symbols: string[], fastSymbols: string[], onRealtimeCallback: QuotesCallback, listenerGUID: string): void; + unsubscribeQuotes(listenerGUID: string): void; +} +export declare type CustomTimezones = 'America/New_York' | 'America/Los_Angeles' | 'America/Chicago' | 'America/Phoenix' | 'America/Toronto' | 'America/Vancouver' | 'America/Argentina/Buenos_Aires' | 'America/El_Salvador' | 'America/Sao_Paulo' | 'America/Bogota' | 'America/Caracas' | 'Europe/Moscow' | 'Europe/Athens' | 'Europe/Belgrade' | 'Europe/Berlin' | 'Europe/London' | 'Europe/Luxembourg' | 'Europe/Madrid' | 'Europe/Paris' | 'Europe/Rome' | 'Europe/Warsaw' | 'Europe/Istanbul' | 'Europe/Zurich' | 'Australia/Sydney' | 'Australia/Brisbane' | 'Australia/Adelaide' | 'Australia/ACT' | 'Asia/Almaty' | 'Asia/Ashkhabad' | 'Asia/Tokyo' | 'Asia/Taipei' | 'Asia/Singapore' | 'Asia/Shanghai' | 'Asia/Seoul' | 'Asia/Tehran' | 'Asia/Dubai' | 'Asia/Kolkata' | 'Asia/Hong_Kong' | 'Asia/Bangkok' | 'Asia/Chongqing' | 'Asia/Jerusalem' | 'Asia/Kuwait' | 'Asia/Muscat' | 'Asia/Qatar' | 'Asia/Riyadh' | 'Pacific/Auckland' | 'Pacific/Chatham' | 'Pacific/Fakaofo' | 'Pacific/Honolulu' | 'America/Mexico_City' | 'Africa/Cairo' | 'Africa/Johannesburg' | 'Asia/Kathmandu' | 'US/Mountain'; +export declare type Timezone = 'Etc/UTC' | CustomTimezones; +export interface LibrarySymbolInfo { + /** + * Symbol Name + */ + name: string; + full_name: string; + base_name?: [string]; + /** + * Unique symbol id + */ + ticker?: string; + description: string; + type: string; + /** + * @example "1700-0200" + */ + session: string; + /** + * Traded exchange + * @example "NYSE" + */ + exchange: string; + listed_exchange: string; + timezone: Timezone; + /** + * Code (Tick) + * @example 8/16/.../256 (1/8/100 1/16/100 ... 1/256/100) or 1/10/.../10000000 (1 0.1 ... 0.0000001) + */ + pricescale: number; + /** + * The number of units that make up one tick. + * @example For example, U.S. equities are quotes in decimals, and tick in decimals, and can go up +/- .01. So the tick increment is 1. But the e-mini S&P futures contract, though quoted in decimals, goes up in .25 increments, so the tick increment is 25. (see also Tick Size) + */ + minmov: number; + fractional?: boolean; + /** + * @example Quarters of 1/32: pricescale=128, minmovement=1, minmovement2=4 + */ + minmove2?: number; + /** + * false if DWM only + */ + has_intraday?: boolean; + /** + * An array of resolutions which should be enabled in resolutions picker for this symbol. + */ + supported_resolutions: ResolutionString[]; + /** + * @example (for ex.: "1,5,60") - only these resolutions will be requested, all others will be built using them if possible + */ + intraday_multipliers?: string[]; + has_seconds?: boolean; + /** + * It is an array containing seconds resolutions (in seconds without a postfix) the datafeed builds by itself. + */ + seconds_multipliers?: string[]; + has_daily?: boolean; + has_weekly_and_monthly?: boolean; + has_empty_bars?: boolean; + force_session_rebuild?: boolean; + has_no_volume?: boolean; + /** + * Integer showing typical volume value decimal places for this symbol + */ + volume_precision?: number; + data_status?: 'streaming' | 'endofday' | 'pulsed' | 'delayed_streaming'; + /** + * Boolean showing whether this symbol is expired futures contract or not. + */ + expired?: boolean; + /** + * Unix timestamp of expiration date. + */ + expiration_date?: number; + sector?: string; + industry?: string; + currency_code?: string; +} +export interface Bar { + time: number; + open: number; + high: number; + low: number; + close: number; + volume?: number; +} +export interface SearchSymbolResultItem { + symbol: string; + full_name: string; + description: string; + exchange: string; + ticker: string; + type: string; +} +export interface HistoryMetadata { + noData: boolean; + nextTime?: number | null; +} +export interface MarkCustomColor { + color: string; + background: string; +} +export declare type MarkConstColors = 'red' | 'green' | 'blue' | 'yellow'; +export interface Mark { + id: string | number; + time: number; + color: MarkConstColors | MarkCustomColor; + text: string; + label: string; + labelFontColor: string; + minSize: number; +} +export interface TimescaleMark { + id: string | number; + time: number; + color: MarkConstColors | string; + label: string; + tooltip: string[]; +} +export declare type ResolutionBackValues = 'D' | 'M'; +export interface HistoryDepth { + resolutionBack: ResolutionBackValues; + intervalBack: number; +} +export declare type SearchSymbolsCallback = (items: SearchSymbolResultItem[]) => void; +export declare type ResolveCallback = (symbolInfo: LibrarySymbolInfo) => void; +export declare type HistoryCallback = (bars: Bar[], meta: HistoryMetadata) => void; +export declare type SubscribeBarsCallback = (bar: Bar) => void; +export declare type GetMarksCallback = (marks: T[]) => void; +export declare type ServerTimeCallback = (serverTime: number) => void; +export declare type DomeCallback = (data: DOMData) => void; +export declare type ErrorCallback = (reason: string) => void; +export interface IDatafeedChartApi { + calculateHistoryDepth?(resolution: ResolutionString, resolutionBack: ResolutionBackValues, intervalBack: number): HistoryDepth | undefined; + getMarks?(symbolInfo: LibrarySymbolInfo, from: number, to: number, onDataCallback: GetMarksCallback, resolution: ResolutionString): void; + getTimescaleMarks?(symbolInfo: LibrarySymbolInfo, from: number, to: number, onDataCallback: GetMarksCallback, resolution: ResolutionString): void; + /** + * This function is called if configuration flag supports_time is set to true when chart needs to know the server time. + * The charting library expects callback to be called once. + * The time is provided without milliseconds. Example: 1445324591. It is used to display Countdown on the price scale. + */ + getServerTime?(callback: ServerTimeCallback): void; + searchSymbols(userInput: string, exchange: string, symbolType: string, onResult: SearchSymbolsCallback): void; + resolveSymbol(symbolName: string, onResolve: ResolveCallback, onError: ErrorCallback): void; + getBars(symbolInfo: LibrarySymbolInfo, resolution: ResolutionString, rangeStartDate: number, rangeEndDate: number, onResult: HistoryCallback, onError: ErrorCallback, isFirstCall: boolean): void; + subscribeBars(symbolInfo: LibrarySymbolInfo, resolution: ResolutionString, onTick: SubscribeBarsCallback, listenerGuid: string, onResetCacheNeededCallback: () => void): void; + unsubscribeBars(listenerGuid: string): void; + subscribeDepth?(symbolInfo: LibrarySymbolInfo, callback: DomeCallback): string; + unsubscribeDepth?(subscriberUID: string): void; +} +export interface ChartMetaInfo { + id: string; + name: string; + symbol: string; + resolution: ResolutionString; + timestamp: number; +} +export interface ChartData { + id: string; + name: string; + symbol: string; + resolution: ResolutionString; + content: string; +} +export interface StudyTemplateMetaInfo { + name: string; +} +export interface StudyTemplateData { + name: string; + content: string; +} +export interface IExternalSaveLoadAdapter { + getAllCharts(): Promise; + removeChart(chartId: string): Promise; + saveChart(chartData: ChartData): Promise; + getChartContent(chartId: string): Promise; + getAllStudyTemplates(): Promise; + removeStudyTemplate(studyTemplateInfo: StudyTemplateMetaInfo): Promise; + saveStudyTemplate(studyTemplateData: StudyTemplateData): Promise; + getStudyTemplateContent(studyTemplateInfo: StudyTemplateMetaInfo): Promise; +} +export interface RestBrokerMetaInfo { + url: string; + access_token: string; +} +export interface AccessListItem { + name: string; + grayed?: boolean; +} +export interface AccessList { + type: 'black' | 'white'; + tools: AccessListItem[]; +} +export interface NumericFormattingParams { + decimal_sign: string; +} +export declare type AvailableSaveloadVersions = '1.0' | '1.1'; +export interface Overrides { + [key: string]: string | number | boolean; +} +export interface WidgetBarParams { + details?: boolean; + watchlist?: boolean; + news?: boolean; + watchlist_settings?: { + default_symbols: string[]; + readonly?: boolean; + }; +} +export interface RssNewsFeedInfo { + url: string; + name: string; +} +export declare type RssNewsFeedItem = RssNewsFeedInfo | RssNewsFeedInfo[]; +export interface RssNewsFeedParams { + default: RssNewsFeedItem; + [symbolType: string]: RssNewsFeedItem; +} +export interface NewsProvider { + is_news_generic?: boolean; + get_news(symbol: string, callback: (items: NewsItem[]) => void): void; +} +export interface CustomFormatter { + format(date: Date): string; + formatLocal(date: Date): string; +} +export interface CustomFormatters { + timeFormatter: CustomFormatter; + dateFormatter: CustomFormatter; +} +export interface TimeFrameItem { + text: string; + resolution: ResolutionString; + description?: string; + title?: string; +} +export interface Favorites { + intervals: ResolutionString[]; + chartTypes: string[]; +} +export interface NewsItem { + fullDescription: string; + link?: string; + published: number; + shortDescription?: string; + source: string; + title: string; +} +export interface LoadingScreenOptions { + foregroundColor?: string; + backgroundColor?: string; +} +export interface InitialSettingsMap { + [key: string]: string; +} +export interface ISettingsAdapter { + initialSettings?: InitialSettingsMap; + setValue(key: string, value: string): void; + removeValue(key: string): void; +} +export declare type IBasicDataFeed = IDatafeedChartApi & IExternalDatafeed; +export declare type ThemeName = 'Light' | 'Dark'; +export interface ChartingLibraryWidgetOptions { + container_id: string; + datafeed: IBasicDataFeed | (IBasicDataFeed & IDatafeedQuotesApi); + interval: ResolutionString; + symbol: string; + auto_save_delay?: number; + autosize?: boolean; + debug?: boolean; + disabled_features?: string[]; + drawings_access?: AccessList; + enabled_features?: string[]; + fullscreen?: boolean; + height?: number; + library_path?: string; + locale: LanguageCode; + numeric_formatting?: NumericFormattingParams; + saved_data?: object; + studies_access?: AccessList; + study_count_limit?: number; + symbol_search_request_delay?: number; + timeframe?: string; + timezone?: 'exchange' | Timezone; + toolbar_bg?: string; + width?: number; + charts_storage_url?: string; + charts_storage_api_version?: AvailableSaveloadVersions; + client_id?: string; + user_id?: string; + load_last_chart?: boolean; + studies_overrides?: StudyOverrides; + customFormatters?: CustomFormatters; + overrides?: Overrides; + snapshot_url?: string; + indicators_file_name?: string; + preset?: 'mobile'; + time_frames?: TimeFrameItem[]; + custom_css_url?: string; + favorites?: Favorites; + save_load_adapter?: IExternalSaveLoadAdapter; + loading_screen?: LoadingScreenOptions; + settings_adapter?: ISettingsAdapter; + theme?: ThemeName; +} +export interface TradingTerminalWidgetOptions extends ChartingLibraryWidgetOptions { + brokerConfig?: SingleBrokerMetaInfo; + restConfig?: RestBrokerMetaInfo; + widgetbar?: WidgetBarParams; + rss_news_feed?: RssNewsFeedParams; + news_provider?: NewsProvider; + brokerFactory?(host: IBrokerConnectionAdapterHost): IBrokerWithoutRealtime | IBrokerTerminal; +} +export declare type LayoutType = 's' | '2h' | '2-1' | '2v' | '3h' | '3v' | '3s' | '4' | '6' | '8'; +export declare type SupportedLineTools = 'text' | 'anchored_text' | 'note' | 'anchored_note' | 'double_curve' | 'arc' | 'icon' | 'arrow_up' | 'arrow_down' | 'arrow_left' | 'arrow_right' | 'price_label' | 'flag' | 'vertical_line' | 'horizontal_line' | 'horizontal_ray' | 'trend_line' | 'trend_angle' | 'arrow' | 'ray' | 'extended' | 'parallel_channel' | 'disjoint_angle' | 'flat_bottom' | 'pitchfork' | 'schiff_pitchfork_modified' | 'schiff_pitchfork' | 'balloon' | 'inside_pitchfork' | 'pitchfan' | 'gannbox' | 'gannbox_square' | 'gannbox_fixed' | 'gannbox_fan' | 'fib_retracement' | 'fib_trend_ext' | 'fib_speed_resist_fan' | 'fib_timezone' | 'fib_trend_time' | 'fib_circles' | 'fib_spiral' | 'fib_speed_resist_arcs' | 'fib_channel' | 'xabcd_pattern' | 'cypher_pattern' | 'abcd_pattern' | 'callout' | 'triangle_pattern' | '3divers_pattern' | 'head_and_shoulders' | 'fib_wedge' | 'elliott_impulse_wave' | 'elliott_triangle_wave' | 'elliott_triple_combo' | 'elliott_correction' | 'elliott_double_combo' | 'cyclic_lines' | 'time_cycles' | 'sine_line' | 'long_position' | 'short_position' | 'forecast' | 'date_range' | 'price_range' | 'date_and_price_range' | 'bars_pattern' | 'ghost_feed' | 'projection' | 'rectangle' | 'rotated_rectangle' | 'ellipse' | 'triangle' | 'polyline' | 'curve' | 'regression_trend' | 'cursor' | 'dot' | 'arrow_cursor' | 'eraser' | 'measure' | 'zoom' | 'brush'; +export interface IOrderLineAdapter { + remove(): void; + onModify(callback: () => void): this; + onModify(data: T, callback: (data: T) => void): this; + onMove(callback: () => void): this; + onMove(data: T, callback: (data: T) => void): this; + getPrice(): number; + setPrice(value: number): this; + getText(): string; + setText(value: string): this; + getTooltip(): string; + setTooltip(value: string): this; + getQuantity(): string; + setQuantity(value: string): this; + getEditable(): boolean; + setEditable(value: boolean): this; + getExtendLeft(): boolean; + setExtendLeft(value: boolean): this; + getLineLength(): number; + setLineLength(value: number): this; + getLineStyle(): number; + setLineStyle(value: number): this; + getLineWidth(): number; + setLineWidth(value: number): this; + getBodyFont(): string; + setBodyFont(value: string): this; + getQuantityFont(): string; + setQuantityFont(value: string): this; + getLineColor(): string; + setLineColor(value: string): this; + getBodyBorderColor(): string; + setBodyBorderColor(value: string): this; + getBodyBackgroundColor(): string; + setBodyBackgroundColor(value: string): this; + getBodyTextColor(): string; + setBodyTextColor(value: string): this; + getQuantityBorderColor(): string; + setQuantityBorderColor(value: string): this; + getQuantityBackgroundColor(): string; + setQuantityBackgroundColor(value: string): this; + getQuantityTextColor(): string; + setQuantityTextColor(value: string): this; + getCancelButtonBorderColor(): string; + setCancelButtonBorderColor(value: string): this; + getCancelButtonBackgroundColor(): string; + setCancelButtonBackgroundColor(value: string): this; + getCancelButtonIconColor(): string; + setCancelButtonIconColor(value: string): this; +} +export interface IPositionLineAdapter { + remove(): void; + onClose(callback: () => void): this; + onClose(data: T, callback: (data: T) => void): this; + onModify(callback: () => void): this; + onModify(data: T, callback: (data: T) => void): this; + onReverse(callback: () => void): this; + onReverse(data: T, callback: (data: T) => void): this; + getPrice(): number; + setPrice(value: number): this; + getText(): string; + setText(value: string): this; + getTooltip(): string; + setTooltip(value: string): this; + getQuantity(): string; + setQuantity(value: string): this; + getExtendLeft(): boolean; + setExtendLeft(value: boolean): this; + getLineLength(): number; + setLineLength(value: number): this; + getLineStyle(): number; + setLineStyle(value: number): this; + getLineWidth(): number; + setLineWidth(value: number): this; + getBodyFont(): string; + setBodyFont(value: string): this; + getQuantityFont(): string; + setQuantityFont(value: string): this; + getLineColor(): string; + setLineColor(value: string): this; + getBodyBorderColor(): string; + setBodyBorderColor(value: string): this; + getBodyBackgroundColor(): string; + setBodyBackgroundColor(value: string): this; + getBodyTextColor(): string; + setBodyTextColor(value: string): this; + getQuantityBorderColor(): string; + setQuantityBorderColor(value: string): this; + getQuantityBackgroundColor(): string; + setQuantityBackgroundColor(value: string): this; + getQuantityTextColor(): string; + setQuantityTextColor(value: string): this; + getReverseButtonBorderColor(): string; + setReverseButtonBorderColor(value: string): this; + getReverseButtonBackgroundColor(): string; + setReverseButtonBackgroundColor(value: string): this; + getReverseButtonIconColor(): string; + setReverseButtonIconColor(value: string): this; + getCloseButtonBorderColor(): string; + setCloseButtonBorderColor(value: string): this; + getCloseButtonBackgroundColor(): string; + setCloseButtonBackgroundColor(value: string): this; + getCloseButtonIconColor(): string; + setCloseButtonIconColor(value: string): this; +} +export declare type Direction = 'buy' | 'sell'; +export interface IExecutionLineAdapter { + remove(): void; + getPrice(): number; + setPrice(value: number): this; + getTime(): number; + setTime(value: number): this; + getDirection(): Direction; + setDirection(value: Direction): this; + getText(): string; + setText(value: string): this; + getTooltip(): string; + setTooltip(value: string): this; + getArrowHeight(): number; + setArrowHeight(value: number): this; + getArrowSpacing(): number; + setArrowSpacing(value: number): this; + getFont(): string; + setFont(value: string): this; + getTextColor(): string; + setTextColor(value: string): this; + getArrowColor(): string; + setArrowColor(value: string): this; +} +export declare type StudyInputId = Nominal; +export interface StudyInputInfo { + id: StudyInputId; + name: string; + type: string; + localizedName: string; +} +export interface StudyInputValueItem { + id: StudyInputId; + value: StudyInputValueType; +} +export declare type StudyPriceScale = 'left' | 'right' | 'no-scale' | 'as-series'; +export interface IStudyApi { + isUserEditEnabled(): boolean; + setUserEditEnabled(enabled: boolean): void; + getInputsInfo(): StudyInputInfo[]; + getInputValues(): StudyInputValueItem[]; + setInputValues(values: StudyInputValueItem[]): void; + mergeUp(): void; + mergeDown(): void; + unmergeUp(): void; + unmergeDown(): void; + changePriceScale(newPriceScale: StudyPriceScale): void; + isVisible(): boolean; + setVisible(visible: boolean): void; + bringToFront(): void; + sendToBack(): void; + applyOverrides(overrides: TOverrides): void; +} +export interface TimePoint { + time: number; +} +export interface StickedPoint extends TimePoint { + channel: 'open' | 'high' | 'low' | 'close'; +} +export interface PricedPoint extends TimePoint { + price: number; +} +export declare type ShapePoint = StickedPoint | PricedPoint | TimePoint; +export interface ILineDataSourceApi { + isSelectionEnabled(): boolean; + setSelectionEnabled(enable: boolean): void; + isSavingEnabled(): boolean; + setSavingEnabled(enable: boolean): void; + isShowInObjectsTreeEnabled(): boolean; + setShowInObjectsTreeEnabled(enabled: boolean): void; + isUserEditEnabled(): boolean; + setUserEditEnabled(enabled: boolean): void; + bringToFront(): void; + sendToBack(): void; + getProperties(): object; + setProperties(newProperties: object): void; + getPoints(): PricedPoint[]; + setPoints(points: ShapePoint[]): void; +} +export declare const enum PriceScaleMode { + Normal = 0, + Log = 1, + Percentage = 2, +} +export interface IPriceScaleApi { + getMode(): PriceScaleMode; + setMode(newMode: PriceScaleMode): void; +} +export interface IPaneApi { + hasMainSeries(): boolean; + getLeftPriceScale(): IPriceScaleApi; + getRightPriceScale(): IPriceScaleApi; + getMainSourcePriceScale(): IPriceScaleApi | null; +} +export interface CrossHairMovedEventParams { + time: number; + price: number; +} +export interface VisibleTimeRange { + from: number; + to: number; +} +export interface VisiblePriceRange { + from: number; + to: number; +} +export declare type ChartActionId = 'chartProperties' | 'compareOrAdd' | 'scalesProperties' | 'tmzProperties' | 'paneObjectTree' | 'insertIndicator' | 'symbolSearch' | 'changeInterval' | 'timeScaleReset' | 'chartReset' | 'seriesHide' | 'studyHide' | 'lineToggleLock' | 'lineHide' | 'showLeftAxis' | 'showRightAxis' | 'scaleSeriesOnly' | 'drawingToolbarAction' | 'magnetAction' | 'stayInDrawingModeAction' | 'hideAllDrawingsAction' | 'hideAllMarks' | 'showCountdown' | 'showSeriesLastValue' | 'showSymbolLabelsAction' | 'showStudyLastValue' | 'showStudyPlotNamesAction' | 'undo' | 'redo' | 'paneRemoveAllStudiesDrawingTools'; +export declare const enum SeriesStyle { + Bars = 0, + Candles = 1, + Line = 2, + Area = 3, + HeikenAshi = 8, + HollowCandles = 9, + Renko = 4, + Kagi = 5, + PointAndFigure = 6, + LineBreak = 7, +} +export declare type EntityId = Nominal; +export interface EntityInfo { + id: EntityId; + name: string; +} +export interface CreateStudyOptions { + checkLimit?: boolean; + priceScale?: StudyPriceScale; +} +export interface CreateShapeOptions { + shape?: 'arrow_up' | 'arrow_down' | 'flag' | 'vertical_line' | 'horizontal_line'; + text?: string; + lock?: boolean; + disableSelection?: boolean; + disableSave?: boolean; + disableUndo?: boolean; + overrides?: TOverrides; + zOrder?: 'top' | 'bottom'; + showInObjectsTree?: boolean; +} +export interface CreateStudyTemplateOptions { + saveInterval?: boolean; +} +export interface SymbolExt { + symbol: string; + full_name: string; + exchange: string; + description: string; + type: string; +} +export interface CreateTradingPrimitiveOptions { + disableUndo?: boolean; +} +export interface IChartWidgetApi { + onDataLoaded(): ISubscription<() => void>; + onSymbolChanged(): ISubscription<() => void>; + onIntervalChanged(): ISubscription<(interval: ResolutionString, timeFrameParameters: { + timeframe?: string; + }) => void>; + onVisibleRangeChanged(): ISubscription<() => void>; + dataReady(callback: () => void): boolean; + crossHairMoved(callback: (params: CrossHairMovedEventParams) => void): void; + setVisibleRange(range: VisibleTimeRange, callback: () => void): void; + setSymbol(symbol: string, callback: () => void): void; + setResolution(resolution: ResolutionString, callback: () => void): void; + resetData(): void; + executeActionById(actionId: ChartActionId): void; + getCheckableActionState(actionId: ChartActionId): boolean; + refreshMarks(): void; + clearMarks(): void; + setChartType(type: SeriesStyle): void; + getAllShapes(): EntityInfo[]; + getAllStudies(): EntityInfo[]; + /** + * @deprecated Use shape/study API instead ([getStudyById] / [getShapeById]) + */ + setEntityVisibility(entityId: EntityId, isVisible: boolean): void; + createStudy(name: string, forceOverlay: boolean, lock?: boolean, inputs?: TStudyInputs[], callback?: (entityId: EntityId) => void, overrides?: TOverrides, options?: CreateStudyOptions): EntityId | null; + getStudyById(entityId: EntityId): IStudyApi; + createShape(point: ShapePoint, options: CreateShapeOptions): EntityId | null; + createMultipointShape(points: ShapePoint[], options: CreateShapeOptions): EntityId | null; + getShapeById(entityId: EntityId): ILineDataSourceApi; + removeEntity(entityId: EntityId): void; + removeAllShapes(): void; + removeAllStudies(): void; + createStudyTemplate(options: CreateStudyTemplateOptions): object; + applyStudyTemplate(template: object): void; + createOrderLine(options: CreateTradingPrimitiveOptions): IOrderLineAdapter; + createPositionLine(options: CreateTradingPrimitiveOptions): IPositionLineAdapter; + createExecutionShape(options: CreateTradingPrimitiveOptions): IExecutionLineAdapter; + symbol(): string; + symbolExt(): SymbolExt; + resolution(): ResolutionString; + getVisibleRange(): VisibleTimeRange; + getVisiblePriceRange(): VisiblePriceRange; + priceFormatter(): IFormatter; + chartType(): SeriesStyle; + setTimezone(timezone: 'exchange' | Timezone): void; + getPanes(): IPaneApi[]; +} +export interface WatchListSymbolList extends WatchListSymbolListData { + id: string; +} +export interface WatchListSymbolListData { + symbols: string[]; + title: string; +} +export interface WatchListSymbolListMap { + [listId: string]: WatchListSymbolList; +} +export declare type WatchListSymbolListAddedCallback = (listId: string, symbols: string[]) => void; +export declare type WatchListSymbolListRemovedCallback = (listId: string) => void; +export declare type WatchListSymbolListRenamedCallback = (listId: string, oldName: string, newName: string) => void; +export declare type EditObjectDialogObjectType = 'mainSeries' | 'drawing' | 'study' | 'other'; +export interface EditObjectDialogEventParams { + objectType: EditObjectDialogObjectType; + scriptTitle: string; +} +export interface MouseEventParams { + clientX: number; + clientY: number; + pageX: number; + pageY: number; + screenX: number; + screenY: number; +} +export interface StudyOrDrawingAddedToChartEventParams { + value: string; +} +export declare type EmptyCallback = () => void; +export interface SubscribeEventsMap { + toggle_sidebar: (isHidden: boolean) => void; + indicators_dialog: EmptyCallback; + toggle_header: (isHidden: boolean) => void; + edit_object_dialog: (params: EditObjectDialogEventParams) => void; + chart_load_requested: (savedData: object) => void; + chart_loaded: EmptyCallback; + mouse_down: (params: MouseEventParams) => void; + mouse_up: (params: MouseEventParams) => void; + drawing: (params: StudyOrDrawingAddedToChartEventParams) => void; + study: (params: StudyOrDrawingAddedToChartEventParams) => void; + undo: EmptyCallback; + redo: EmptyCallback; + reset_scales: EmptyCallback; + compare_add: EmptyCallback; + add_compare: EmptyCallback; + 'load_study template': EmptyCallback; + onTick: (tick: Bar) => void; + onAutoSaveNeeded: EmptyCallback; + onScreenshotReady: (url: string) => void; + onMarkClick: (markId: Mark['id']) => void; + onTimescaleMarkClick: (markId: TimescaleMark['id']) => void; + onSelectedLineToolChanged: EmptyCallback; + layout_about_to_be_changed: (newLayoutType: LayoutType) => void; + layout_changed: EmptyCallback; + activeChartChanged: (chartIndex: number) => void; +} +export interface SaveChartToServerOptions { + chartName?: string; + defaultChartName?: string; +} +export interface WatchListApi { + defaultList(): string[]; + getList(id?: string): string[] | null; + getAllLists(): WatchListSymbolListMap | null; + getActiveListId(): string | null; + setList(symbols: string[]): void; + updateList(listId: string, symbols: string[]): void; + renameList(listId: string, newName: string): void; + createList(listName?: string, symbols?: string[]): WatchListSymbolList | null; + saveList(list: WatchListSymbolList): boolean; + deleteList(listId: string): void; + onListChanged(): ISubscription; + onActiveListChanged(): ISubscription; + onListAdded(): ISubscription; + onListRemoved(): ISubscription; + onListRenamed(): ISubscription; +} +export interface GrayedObject { + type: 'drawing' | 'study'; + name: string; +} +export interface ContextMenuItem { + position: 'top' | 'bottom'; + text: string; + click: EmptyCallback; +} +export interface DialogParams { + title: string; + body: string; + callback: CallbackType; +} +export interface SymbolIntervalResult { + symbol: string; + interval: ResolutionString; +} +export interface SaveLoadChartRecord { + id: string; + name: string; + image_url: string; + modified_iso: number; + short_symbol: string; + interval: ResolutionString; +} +export interface CreateButtonOptions { + align: 'right' | 'left'; +} +export interface IChartingLibraryWidget { + onChartReady(callback: EmptyCallback): void; + onGrayedObjectClicked(callback: (obj: GrayedObject) => void): void; + onShortcut(shortCut: string, callback: EmptyCallback): void; + subscribe(event: EventName, callback: SubscribeEventsMap[EventName]): void; + unsubscribe(event: EventName, callback: SubscribeEventsMap[EventName]): void; + chart(index?: number): IChartWidgetApi; + setLanguage(lang: LanguageCode): void; + setSymbol(symbol: string, interval: ResolutionString, callback: EmptyCallback): void; + remove(): void; + closePopupsAndDialogs(): void; + selectLineTool(linetool: SupportedLineTools): void; + selectedLineTool(): SupportedLineTools; + save(callback: (state: object) => void): void; + load(state: object): void; + getSavedCharts(callback: (chartRecords: SaveLoadChartRecord[]) => void): void; + loadChartFromServer(chartRecord: SaveLoadChartRecord): void; + saveChartToServer(onComplete?: EmptyCallback, onFail?: EmptyCallback, saveAsSnapshot?: false, options?: SaveChartToServerOptions): void; + removeChartFromServer(chartId: string, onCompleteCallback: EmptyCallback): void; + onContextMenu(callback: (unixTime: number, price: number) => ContextMenuItem[]): void; + createButton(options?: CreateButtonOptions): JQuery; + showNoticeDialog(params: DialogParams<() => void>): void; + showConfirmDialog(params: DialogParams<(confirmed: boolean) => void>): void; + showLoadChartDialog(): void; + showSaveAsChartDialog(): void; + symbolInterval(): SymbolIntervalResult; + mainSeriesPriceFormatter(): IFormatter; + getIntervals(): string[]; + getStudiesList(): string[]; + addCustomCSSFile(url: string): void; + applyOverrides(overrides: TOverrides): void; + applyStudiesOverrides(overrides: object): void; + watchList(): WatchListApi; + activeChart(): IChartWidgetApi; + chartsCount(): number; + layout(): LayoutType; + setLayout(layout: LayoutType): void; + changeTheme(themeName: ThemeName): void; + takeScreenshot(): void; + lockAllDrawingTools(): IWatchedValue; +} +export interface ChartingLibraryWidgetConstructor { + new (options: ChartingLibraryWidgetOptions | TradingTerminalWidgetOptions): IChartingLibraryWidget; +} +export declare function version(): string; +export declare function onready(callback: () => void): void; +export declare const widget: ChartingLibraryWidgetConstructor; + +export as namespace TradingView; diff --git a/static/chart_main/charting_library.min.js b/static/chart_main/charting_library.min.js new file mode 100644 index 0000000..e29e82f --- /dev/null +++ b/static/chart_main/charting_library.min.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.TradingView=t.TradingView||{})}(this,function(t){"use strict";function e(t,o){var i=n({},t);for(var s in o)"object"!=typeof t[s]||null===t[s]||Array.isArray(t[s])?void 0!==o[s]&&(i[s]=o[s]):i[s]=e(t[s],o[s]);return i}function o(){return"1.12 (internal id 82ee311d @ 2018-03-01 03:55:41.951080)"}function i(t){window.addEventListener("DOMContentLoaded",t,!1)}var n=Object.assign||function(t){for(var e,o=arguments,i=1,n=arguments.length;i'},t}(),d=a;window.TradingView=window.TradingView||{},window.TradingView.version=o,t.version=o,t.onready=i,t.widget=d,Object.defineProperty(t,"__esModule",{value:!0})}); diff --git a/static/chart_main/datafeed-api.d.ts b/static/chart_main/datafeed-api.d.ts new file mode 100644 index 0000000..072cc76 --- /dev/null +++ b/static/chart_main/datafeed-api.d.ts @@ -0,0 +1,220 @@ +export declare type ResolutionString = string; +export interface Exchange { + value: string; + name: string; + desc: string; +} +export interface DatafeedSymbolType { + name: string; + value: string; +} +export interface DatafeedConfiguration { + exchanges?: Exchange[]; + supported_resolutions?: ResolutionString[]; + supports_marks?: boolean; + supports_time?: boolean; + supports_timescale_marks?: boolean; + symbols_types?: DatafeedSymbolType[]; +} +export declare type OnReadyCallback = (configuration: DatafeedConfiguration) => void; +export interface IExternalDatafeed { + onReady(callback: OnReadyCallback): void; +} +export interface DatafeedQuoteValues { + ch?: number; + chp?: number; + short_name?: string; + exchange?: string; + description?: string; + lp?: number; + ask?: number; + bid?: number; + spread?: number; + open_price?: number; + high_price?: number; + low_price?: number; + prev_close_price?: number; + volume?: number; + original_name?: string; + [valueName: string]: string | number | undefined; +} +export interface QuoteOkData { + s: 'ok'; + n: string; + v: DatafeedQuoteValues; +} +export interface QuoteErrorData { + s: 'error'; + n: string; + v: object; +} +export declare type QuoteData = QuoteOkData | QuoteErrorData; +export declare type QuotesCallback = (data: QuoteData[]) => void; +export interface IDatafeedQuotesApi { + getQuotes(symbols: string[], onDataCallback: QuotesCallback, onErrorCallback: (msg: string) => void): void; + subscribeQuotes(symbols: string[], fastSymbols: string[], onRealtimeCallback: QuotesCallback, listenerGUID: string): void; + unsubscribeQuotes(listenerGUID: string): void; +} +export declare type CustomTimezones = 'America/New_York' | 'America/Los_Angeles' | 'America/Chicago' | 'America/Phoenix' | 'America/Toronto' | 'America/Vancouver' | 'America/Argentina/Buenos_Aires' | 'America/El_Salvador' | 'America/Sao_Paulo' | 'America/Bogota' | 'America/Caracas' | 'Europe/Moscow' | 'Europe/Athens' | 'Europe/Belgrade' | 'Europe/Berlin' | 'Europe/London' | 'Europe/Luxembourg' | 'Europe/Madrid' | 'Europe/Paris' | 'Europe/Rome' | 'Europe/Warsaw' | 'Europe/Istanbul' | 'Europe/Zurich' | 'Australia/Sydney' | 'Australia/Brisbane' | 'Australia/Adelaide' | 'Australia/ACT' | 'Asia/Almaty' | 'Asia/Ashkhabad' | 'Asia/Tokyo' | 'Asia/Taipei' | 'Asia/Singapore' | 'Asia/Shanghai' | 'Asia/Seoul' | 'Asia/Tehran' | 'Asia/Dubai' | 'Asia/Kolkata' | 'Asia/Hong_Kong' | 'Asia/Bangkok' | 'Asia/Chongqing' | 'Asia/Jerusalem' | 'Asia/Kuwait' | 'Asia/Muscat' | 'Asia/Qatar' | 'Asia/Riyadh' | 'Pacific/Auckland' | 'Pacific/Chatham' | 'Pacific/Fakaofo' | 'Pacific/Honolulu' | 'America/Mexico_City' | 'Africa/Cairo' | 'Africa/Johannesburg' | 'Asia/Kathmandu' | 'US/Mountain'; +export declare type Timezone = 'Etc/UTC' | CustomTimezones; +export interface LibrarySymbolInfo { + /** + * Symbol Name + */ + name: string; + full_name: string; + base_name?: [string]; + /** + * Unique symbol id + */ + ticker?: string; + description: string; + type: string; + /** + * @example "1700-0200" + */ + session: string; + /** + * Traded exchange + * @example "NYSE" + */ + exchange: string; + listed_exchange: string; + timezone: Timezone; + /** + * Code (Tick) + * @example 8/16/.../256 (1/8/100 1/16/100 ... 1/256/100) or 1/10/.../10000000 (1 0.1 ... 0.0000001) + */ + pricescale: number; + /** + * The number of units that make up one tick. + * @example For example, U.S. equities are quotes in decimals, and tick in decimals, and can go up +/- .01. So the tick increment is 1. But the e-mini S&P futures contract, though quoted in decimals, goes up in .25 increments, so the tick increment is 25. (see also Tick Size) + */ + minmov: number; + fractional?: boolean; + /** + * @example Quarters of 1/32: pricescale=128, minmovement=1, minmovement2=4 + */ + minmove2?: number; + /** + * false if DWM only + */ + has_intraday?: boolean; + /** + * An array of resolutions which should be enabled in resolutions picker for this symbol. + */ + supported_resolutions: ResolutionString[]; + /** + * @example (for ex.: "1,5,60") - only these resolutions will be requested, all others will be built using them if possible + */ + intraday_multipliers?: string[]; + has_seconds?: boolean; + /** + * It is an array containing seconds resolutions (in seconds without a postfix) the datafeed builds by itself. + */ + seconds_multipliers?: string[]; + has_daily?: boolean; + has_weekly_and_monthly?: boolean; + has_empty_bars?: boolean; + force_session_rebuild?: boolean; + has_no_volume?: boolean; + /** + * Integer showing typical volume value decimal places for this symbol + */ + volume_precision?: number; + data_status?: 'streaming' | 'endofday' | 'pulsed' | 'delayed_streaming'; + /** + * Boolean showing whether this symbol is expired futures contract or not. + */ + expired?: boolean; + /** + * Unix timestamp of expiration date. + */ + expiration_date?: number; + sector?: string; + industry?: string; + currency_code?: string; +} +export interface DOMLevel { + price: number; + volume: number; +} +export interface DOMData { + snapshot: boolean; + asks: DOMLevel[]; + bids: DOMLevel[]; +} +export interface Bar { + time: number; + open: number; + high: number; + low: number; + close: number; + volume?: number; +} +export interface SearchSymbolResultItem { + symbol: string; + full_name: string; + description: string; + exchange: string; + ticker: string; + type: string; +} +export interface HistoryMetadata { + noData: boolean; + nextTime?: number | null; +} +export interface MarkCustomColor { + color: string; + background: string; +} +export declare type MarkConstColors = 'red' | 'green' | 'blue' | 'yellow'; +export interface Mark { + id: string | number; + time: number; + color: MarkConstColors | MarkCustomColor; + text: string; + label: string; + labelFontColor: string; + minSize: number; +} +export interface TimescaleMark { + id: string | number; + time: number; + color: MarkConstColors | string; + label: string; + tooltip: string[]; +} +export declare type ResolutionBackValues = 'D' | 'M'; +export interface HistoryDepth { + resolutionBack: ResolutionBackValues; + intervalBack: number; +} +export declare type SearchSymbolsCallback = (items: SearchSymbolResultItem[]) => void; +export declare type ResolveCallback = (symbolInfo: LibrarySymbolInfo) => void; +export declare type HistoryCallback = (bars: Bar[], meta: HistoryMetadata) => void; +export declare type SubscribeBarsCallback = (bar: Bar) => void; +export declare type GetMarksCallback = (marks: T[]) => void; +export declare type ServerTimeCallback = (serverTime: number) => void; +export declare type DomeCallback = (data: DOMData) => void; +export declare type ErrorCallback = (reason: string) => void; +export interface IDatafeedChartApi { + calculateHistoryDepth?(resolution: ResolutionString, resolutionBack: ResolutionBackValues, intervalBack: number): HistoryDepth | undefined; + getMarks?(symbolInfo: LibrarySymbolInfo, from: number, to: number, onDataCallback: GetMarksCallback, resolution: ResolutionString): void; + getTimescaleMarks?(symbolInfo: LibrarySymbolInfo, from: number, to: number, onDataCallback: GetMarksCallback, resolution: ResolutionString): void; + /** + * This function is called if configuration flag supports_time is set to true when chart needs to know the server time. + * The charting library expects callback to be called once. + * The time is provided without milliseconds. Example: 1445324591. It is used to display Countdown on the price scale. + */ + getServerTime?(callback: ServerTimeCallback): void; + searchSymbols(userInput: string, exchange: string, symbolType: string, onResult: SearchSymbolsCallback): void; + resolveSymbol(symbolName: string, onResolve: ResolveCallback, onError: ErrorCallback): void; + getBars(symbolInfo: LibrarySymbolInfo, resolution: ResolutionString, rangeStartDate: number, rangeEndDate: number, onResult: HistoryCallback, onError: ErrorCallback, isFirstCall: boolean): void; + subscribeBars(symbolInfo: LibrarySymbolInfo, resolution: ResolutionString, onTick: SubscribeBarsCallback, listenerGuid: string, onResetCacheNeededCallback: () => void): void; + unsubscribeBars(listenerGuid: string): void; + subscribeDepth?(symbolInfo: LibrarySymbolInfo, callback: DomeCallback): string; + unsubscribeDepth?(subscriberUID: string): void; +} + +export as namespace TradingView; diff --git a/static/chart_main/huobi.js b/static/chart_main/huobi.js new file mode 100644 index 0000000..8a2a4f7 --- /dev/null +++ b/static/chart_main/huobi.js @@ -0,0 +1,19553 @@ +!function (t) { + function e(n) { + if (r[n]) return r[n].exports; + var i = r[n] = {i: n, l: !1, exports: {}}; + return t[n].call(i.exports, i, i.exports, e), i.l = !0, i.exports + } + + var n = window.webpackJsonp; + window.webpackJsonp = function (r, a, o) { + for (var s, l, u, c = 0, f = []; c < r.length; c++) l = r[c], i[l] && f.push(i[l][0]), i[l] = 0; + for (s in a) Object.prototype.hasOwnProperty.call(a, s) && (t[s] = a[s]); + for (n && n(r, a, o); f.length;) f.shift()(); + if (o) for (c = 0; c < o.length; c++) u = e(e.s = o[c]); + return u + }; + var r = {}, i = {76: 0}; + e.e = function (t) { + function n() { + s.onerror = s.onload = null, clearTimeout(l); + var e = i[t]; + 0 !== e && (e && e[1](new Error("Loading chunk " + t + " failed.")), i[t] = void 0) + } + + var r = i[t]; + if (0 === r) return new Promise(function (t) { + t() + }); + if (r) return r[2]; + var a = new Promise(function (e, n) { + r = i[t] = [e, n] + }); + r[2] = a; + var o = document.getElementsByTagName("head")[0], s = document.createElement("script"); + s.type = "text/javascript", s.charset = "utf-8", s.async = !0, s.timeout = 12e4, e.nc && s.setAttribute("nonce", e.nc), s.src = e.p + "assets/scripts/" + t + "_" + { + 0: "997bbf9f", + 1: "34a46847", + 2: "298900da", + 3: "452813bb", + 4: "2828ea33", + 5: "1de5df60", + 6: "ee164123", + 7: "7bdc835f", + 8: "92ef6b32", + 9: "b7986e82", + 10: "1f94aca6", + 11: "8888d94e", + 12: "0a7dbedb", + 13: "c235f57d", + 14: "8c05e09d", + 15: "d5ec3e9e", + 16: "7290b915", + 17: "ec0dbd0b", + 18: "3e0d36cd", + 19: "8a21ec78", + 20: "9acd1d24", + 21: "6ddf4f8b", + 22: "f661b36b", + 23: "e7f9dab5", + 24: "8e6f24eb", + 25: "8b320d59", + 26: "7aedda47", + 27: "e77726f9", + 28: "a36e2569", + 29: "6a3de57f", + 30: "6931692c", + 31: "af5713b6", + 32: "6a037020", + 33: "fb614388", + 34: "d0961311", + 35: "95959014", + 36: "f8531011", + 37: "f55d7ba0", + 38: "41450df7", + 39: "9e90aba5", + 40: "c2bb5087", + 41: "50b00f7e", + 42: "f7855b14", + 43: "4d1e8251", + 44: "e9c81872", + 45: "2fabe9a8", + 46: "9cf2941e", + 47: "53d25c99", + 48: "4bdbe16f", + 49: "c8e23fce", + 50: "4b1b6d1a", + 51: "776782cb", + 52: "ee81a843", + 53: "740c6940", + 54: "02c9b4a6", + 55: "a6b97ab6", + 56: "deec9f6a", + 57: "d206f93e", + 58: "54cde00e", + 59: "f04f64fc", + 60: "32a88d54", + 61: "4a88622a", + 62: "50372790", + 63: "438c9548", + 64: "78fa0dbd", + 65: "1369163f", + 66: "221a5002", + 67: "3ecd6ca8", + 68: "85d72229", + 69: "3d48baf4", + 70: "6421babe", + 71: "733aa5f6", + 72: "f5b61b34", + 73: "a0b74537", + 74: "58f0c200", + 75: "61a755e9" + }[t] + ".js"; + var l = setTimeout(n, 12e4); + return s.onerror = s.onload = n, o.appendChild(s), a + }, e.m = t, e.c = r, e.i = function (t) { + return t + }, e.d = function (t, n, r) { + e.o(t, n) || Object.defineProperty(t, n, {configurable: !1, enumerable: !0, get: r}) + }, e.n = function (t) { + var n = t && t.__esModule ? function () { + return t.default + } : function () { + return t + }; + return e.d(n, "a", n), n + }, e.o = function (t, e) { + return Object.prototype.hasOwnProperty.call(t, e) + }, e.p = "/", e.oe = function (t) { + throw console.error(t), t + } +}([, , , , , , , function (t, e, n) { + "use strict"; + e.__esModule = !0; + var r = n(74), i = function (t) { + return t && t.__esModule ? t : {default: t} + }(r); + e.default = function (t) { + return function () { + var e = t.apply(this, arguments); + return new i.default(function (t, n) { + function r(a, o) { + try { + var s = e[a](o), l = s.value + } catch (t) { + return void n(t) + } + if (!s.done) return i.default.resolve(l).then(function (t) { + r("next", t) + }, function (t) { + r("throw", t) + }); + t(l) + } + + return r("next") + }) + } + } +}, function (t, e, n) { + t.exports = n(483) +}, , , , , , function (t, e, n) { + t.exports = {default: n(500), __esModule: !0} +}, , , , function (t, e, n) { + "use strict"; + + function r(t) { + return t && t.__esModule ? t : {default: t} + } + + e.__esModule = !0; + var i = n(479), a = r(i), o = n(478), s = r(o), + l = "function" == typeof s.default && "symbol" == typeof a.default ? function (t) { + return typeof t + } : function (t) { + return t && "function" == typeof s.default && t.constructor === s.default && t !== s.default.prototype ? "symbol" : typeof t + }; + e.default = "function" == typeof s.default && "symbol" === l(a.default) ? function (t) { + return void 0 === t ? "undefined" : l(t) + } : function (t) { + return t && "function" == typeof s.default && t.constructor === s.default && t !== s.default.prototype ? "symbol" : void 0 === t ? "undefined" : l(t) + } +}, , , , , function (t, e, n) { + t.exports = n(435) +}, , , , function (t, e, n) { + "use strict"; + e.__esModule = !0; + var r = n(73), i = function (t) { + return t && t.__esModule ? t : {default: t} + }(r); + e.default = i.default || function (t) { + for (var e = 1; e < arguments.length; e++) { + var n = arguments[e]; + for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (t[r] = n[r]) + } + return t + } +}, function (t, e, n) { + t.exports = {default: n(507), __esModule: !0} +}, , , , , , , , function (t, e, n) { + var r = n(79), i = n(113), a = n(99), o = n(100), s = n(107), l = function (t, e, n) { + var u, c, f, h, d = t & l.F, p = t & l.G, v = t & l.S, g = t & l.P, m = t & l.B, + _ = p ? r : v ? r[e] || (r[e] = {}) : (r[e] || {}).prototype, y = p ? i : i[e] || (i[e] = {}), + b = y.prototype || (y.prototype = {}); + p && (n = e); + for (u in n) c = !d && _ && void 0 !== _[u], f = (c ? _ : n)[u], h = m && c ? s(f, r) : g && "function" == typeof f ? s(Function.call, f) : f, _ && o(_, u, f, t & l.U), y[u] != f && a(y, u, h), g && b[u] != f && (b[u] = f) + }; + r.core = i, l.F = 1, l.G = 2, l.S = 4, l.P = 8, l.B = 16, l.W = 32, l.U = 64, l.R = 128, t.exports = l +}, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , function (t, e, n) { + !function () { + var e = n(756), r = n(296).utf8, i = n(346), a = n(296).bin, o = function (t, n) { + t.constructor == String ? t = n && "binary" === n.encoding ? a.stringToBytes(t) : r.stringToBytes(t) : i(t) ? t = Array.prototype.slice.call(t, 0) : Array.isArray(t) || (t = t.toString()); + for (var s = e.bytesToWords(t), l = 8 * t.length, u = 1732584193, c = -271733879, f = -1732584194, h = 271733878, d = 0; d < s.length; d++) s[d] = 16711935 & (s[d] << 8 | s[d] >>> 24) | 4278255360 & (s[d] << 24 | s[d] >>> 8); + s[l >>> 5] |= 128 << l % 32, s[14 + (l + 64 >>> 9 << 4)] = l; + for (var p = o._ff, v = o._gg, g = o._hh, m = o._ii, d = 0; d < s.length; d += 16) { + var _ = u, y = c, b = f, w = h; + u = p(u, c, f, h, s[d + 0], 7, -680876936), h = p(h, u, c, f, s[d + 1], 12, -389564586), f = p(f, h, u, c, s[d + 2], 17, 606105819), c = p(c, f, h, u, s[d + 3], 22, -1044525330), u = p(u, c, f, h, s[d + 4], 7, -176418897), h = p(h, u, c, f, s[d + 5], 12, 1200080426), f = p(f, h, u, c, s[d + 6], 17, -1473231341), c = p(c, f, h, u, s[d + 7], 22, -45705983), u = p(u, c, f, h, s[d + 8], 7, 1770035416), h = p(h, u, c, f, s[d + 9], 12, -1958414417), f = p(f, h, u, c, s[d + 10], 17, -42063), c = p(c, f, h, u, s[d + 11], 22, -1990404162), u = p(u, c, f, h, s[d + 12], 7, 1804603682), h = p(h, u, c, f, s[d + 13], 12, -40341101), f = p(f, h, u, c, s[d + 14], 17, -1502002290), c = p(c, f, h, u, s[d + 15], 22, 1236535329), u = v(u, c, f, h, s[d + 1], 5, -165796510), h = v(h, u, c, f, s[d + 6], 9, -1069501632), f = v(f, h, u, c, s[d + 11], 14, 643717713), c = v(c, f, h, u, s[d + 0], 20, -373897302), u = v(u, c, f, h, s[d + 5], 5, -701558691), h = v(h, u, c, f, s[d + 10], 9, 38016083), f = v(f, h, u, c, s[d + 15], 14, -660478335), c = v(c, f, h, u, s[d + 4], 20, -405537848), u = v(u, c, f, h, s[d + 9], 5, 568446438), h = v(h, u, c, f, s[d + 14], 9, -1019803690), f = v(f, h, u, c, s[d + 3], 14, -187363961), c = v(c, f, h, u, s[d + 8], 20, 1163531501), u = v(u, c, f, h, s[d + 13], 5, -1444681467), h = v(h, u, c, f, s[d + 2], 9, -51403784), f = v(f, h, u, c, s[d + 7], 14, 1735328473), c = v(c, f, h, u, s[d + 12], 20, -1926607734), u = g(u, c, f, h, s[d + 5], 4, -378558), h = g(h, u, c, f, s[d + 8], 11, -2022574463), f = g(f, h, u, c, s[d + 11], 16, 1839030562), c = g(c, f, h, u, s[d + 14], 23, -35309556), u = g(u, c, f, h, s[d + 1], 4, -1530992060), h = g(h, u, c, f, s[d + 4], 11, 1272893353), f = g(f, h, u, c, s[d + 7], 16, -155497632), c = g(c, f, h, u, s[d + 10], 23, -1094730640), u = g(u, c, f, h, s[d + 13], 4, 681279174), h = g(h, u, c, f, s[d + 0], 11, -358537222), f = g(f, h, u, c, s[d + 3], 16, -722521979), c = g(c, f, h, u, s[d + 6], 23, 76029189), u = g(u, c, f, h, s[d + 9], 4, -640364487), h = g(h, u, c, f, s[d + 12], 11, -421815835), f = g(f, h, u, c, s[d + 15], 16, 530742520), c = g(c, f, h, u, s[d + 2], 23, -995338651), u = m(u, c, f, h, s[d + 0], 6, -198630844), h = m(h, u, c, f, s[d + 7], 10, 1126891415), f = m(f, h, u, c, s[d + 14], 15, -1416354905), c = m(c, f, h, u, s[d + 5], 21, -57434055), u = m(u, c, f, h, s[d + 12], 6, 1700485571), h = m(h, u, c, f, s[d + 3], 10, -1894986606), f = m(f, h, u, c, s[d + 10], 15, -1051523), c = m(c, f, h, u, s[d + 1], 21, -2054922799), u = m(u, c, f, h, s[d + 8], 6, 1873313359), h = m(h, u, c, f, s[d + 15], 10, -30611744), f = m(f, h, u, c, s[d + 6], 15, -1560198380), c = m(c, f, h, u, s[d + 13], 21, 1309151649), u = m(u, c, f, h, s[d + 4], 6, -145523070), h = m(h, u, c, f, s[d + 11], 10, -1120210379), f = m(f, h, u, c, s[d + 2], 15, 718787259), c = m(c, f, h, u, s[d + 9], 21, -343485551), u = u + _ >>> 0, c = c + y >>> 0, f = f + b >>> 0, h = h + w >>> 0 + } + return e.endian([u, c, f, h]) + }; + o._ff = function (t, e, n, r, i, a, o) { + var s = t + (e & n | ~e & r) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + e + }, o._gg = function (t, e, n, r, i, a, o) { + var s = t + (e & r | n & ~r) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + e + }, o._hh = function (t, e, n, r, i, a, o) { + var s = t + (e ^ n ^ r) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + e + }, o._ii = function (t, e, n, r, i, a, o) { + var s = t + (n ^ (e | ~r)) + (i >>> 0) + o; + return (s << a | s >>> 32 - a) + e + }, o._blocksize = 16, o._digestsize = 16, t.exports = function (t, n) { + if (void 0 === t || null === t) throw new Error("Illegal argument " + t); + var r = e.wordsToBytes(o(t, n)); + return n && n.asBytes ? r : n && n.asString ? a.bytesToString(r) : e.bytesToHex(r) + } + }() +}, function (t, e, n) { + t.exports = {default: n(502), __esModule: !0} +}, function (t, e, n) { + t.exports = {default: n(510), __esModule: !0} +}, function (t, e, n) { + t.exports = {default: n(509), __esModule: !0} +}, function (t, e, n) { + "use strict"; + (function (t) { + function e(t, e, n) { + t[e] || Object[r](t, e, {writable: !0, configurable: !0, value: n}) + } + + if (n(755), n(830), n(496), t._babelPolyfill) throw new Error("only one instance of babel-polyfill is allowed"); + t._babelPolyfill = !0; + var r = "defineProperty"; + e(String.prototype, "padLeft", "".padStart), e(String.prototype, "padRight", "".padEnd), "pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (t) { + [][t] && e(Array, t, Function.call.bind([][t])) + }) + }).call(e, n(124)) +}, function (t, e, n) { + t.exports = {default: n(501), __esModule: !0} +}, function (t, e, n) { + var r = n(82); + t.exports = function (t) { + if (!r(t)) throw TypeError(t + " is not an object!"); + return t + } +}, function (t, e) { + var n = t.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")(); + "number" == typeof __g && (__g = n) +}, , function (t, e) { + t.exports = function (t) { + try { + return !!t() + } catch (t) { + return !0 + } + } +}, function (t, e) { + t.exports = function (t) { + return "object" == typeof t ? null !== t : "function" == typeof t + } +}, , function (t, e, n) { + var r = n(211)("wks"), i = n(151), a = n(79).Symbol, o = "function" == typeof a; + (t.exports = function (t) { + return r[t] || (r[t] = o && a[t] || (o ? a : i)("Symbol." + t)) + }).store = r +}, function (t, e) { + var n = t.exports = {version: "2.5.0"}; + "number" == typeof __e && (__e = n) +}, function (t, e, n) { + t.exports = !n(81)(function () { + return 7 != Object.defineProperty({}, "a", { + get: function () { + return 7 + } + }).a + }) +}, function (t, e, n) { + var r = n(78), i = n(322), a = n(117), o = Object.defineProperty; + e.f = n(86) ? Object.defineProperty : function (t, e, n) { + if (r(t), e = a(e, !0), r(n), i) try { + return o(t, e, n) + } catch (t) { + } + if ("get" in n || "set" in n) throw TypeError("Accessors not supported!"); + return "value" in n && (t[e] = n.value), t + } +}, function (t, e, n) { + var r = n(116), i = Math.min; + t.exports = function (t) { + return t > 0 ? i(r(t), 9007199254740991) : 0 + } +}, function (t, e, n) { + var r = n(114); + t.exports = function (t) { + return Object(r(t)) + } +}, function (t, e) { + t.exports = function (t) { + if ("function" != typeof t) throw TypeError(t + " is not a function!"); + return t + } +}, , , , function (t, e, n) { + var r = n(236)("wks"), i = n(197), a = n(97).Symbol, o = "function" == typeof a; + (t.exports = function (t) { + return r[t] || (r[t] = o && a[t] || (o ? a : i)("Symbol." + t)) + }).store = r +}, function (t, e, n) { + "use strict"; + (function (t) { + function r() { + return a.TYPED_ARRAY_SUPPORT ? 2147483647 : 1073741823 + } + + function i(t, e) { + if (r() < e) throw new RangeError("Invalid typed array length"); + return a.TYPED_ARRAY_SUPPORT ? (t = new Uint8Array(e), t.__proto__ = a.prototype) : (null === t && (t = new a(e)), t.length = e), t + } + + function a(t, e, n) { + if (!(a.TYPED_ARRAY_SUPPORT || this instanceof a)) return new a(t, e, n); + if ("number" == typeof t) { + if ("string" == typeof e) throw new Error("If encoding is specified then the first argument must be a string"); + return u(this, t) + } + return o(this, t, e, n) + } + + function o(t, e, n, r) { + if ("number" == typeof e) throw new TypeError('"value" argument must not be a number'); + return "undefined" != typeof ArrayBuffer && e instanceof ArrayBuffer ? h(t, e, n, r) : "string" == typeof e ? c(t, e, n) : d(t, e) + } + + function s(t) { + if ("number" != typeof t) throw new TypeError('"size" argument must be a number'); + if (t < 0) throw new RangeError('"size" argument must not be negative') + } + + function l(t, e, n, r) { + return s(e), e <= 0 ? i(t, e) : void 0 !== n ? "string" == typeof r ? i(t, e).fill(n, r) : i(t, e).fill(n) : i(t, e) + } + + function u(t, e) { + if (s(e), t = i(t, e < 0 ? 0 : 0 | p(e)), !a.TYPED_ARRAY_SUPPORT) for (var n = 0; n < e; ++n) t[n] = 0; + return t + } + + function c(t, e, n) { + if ("string" == typeof n && "" !== n || (n = "utf8"), !a.isEncoding(n)) throw new TypeError('"encoding" must be a valid string encoding'); + var r = 0 | g(e, n); + t = i(t, r); + var o = t.write(e, n); + return o !== r && (t = t.slice(0, o)), t + } + + function f(t, e) { + var n = e.length < 0 ? 0 : 0 | p(e.length); + t = i(t, n); + for (var r = 0; r < n; r += 1) t[r] = 255 & e[r]; + return t + } + + function h(t, e, n, r) { + if (e.byteLength, n < 0 || e.byteLength < n) throw new RangeError("'offset' is out of bounds"); + if (e.byteLength < n + (r || 0)) throw new RangeError("'length' is out of bounds"); + return e = void 0 === n && void 0 === r ? new Uint8Array(e) : void 0 === r ? new Uint8Array(e, n) : new Uint8Array(e, n, r), a.TYPED_ARRAY_SUPPORT ? (t = e, t.__proto__ = a.prototype) : t = f(t, e), t + } + + function d(t, e) { + if (a.isBuffer(e)) { + var n = 0 | p(e.length); + return t = i(t, n), 0 === t.length ? t : (e.copy(t, 0, 0, n), t) + } + if (e) { + if ("undefined" != typeof ArrayBuffer && e.buffer instanceof ArrayBuffer || "length" in e) return "number" != typeof e.length || Y(e.length) ? i(t, 0) : f(t, e); + if ("Buffer" === e.type && J(e.data)) return f(t, e.data) + } + throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.") + } + + function p(t) { + if (t >= r()) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + r().toString(16) + " bytes"); + return 0 | t + } + + function v(t) { + return +t != t && (t = 0), a.alloc(+t) + } + + function g(t, e) { + if (a.isBuffer(t)) return t.length; + if ("undefined" != typeof ArrayBuffer && "function" == typeof ArrayBuffer.isView && (ArrayBuffer.isView(t) || t instanceof ArrayBuffer)) return t.byteLength; + "string" != typeof t && (t = "" + t); + var n = t.length; + if (0 === n) return 0; + for (var r = !1; ;) switch (e) { + case"ascii": + case"latin1": + case"binary": + return n; + case"utf8": + case"utf-8": + case void 0: + return W(t).length; + case"ucs2": + case"ucs-2": + case"utf16le": + case"utf-16le": + return 2 * n; + case"hex": + return n >>> 1; + case"base64": + return $(t).length; + default: + if (r) return W(t).length; + e = ("" + e).toLowerCase(), r = !0 + } + } + + function m(t, e, n) { + var r = !1; + if ((void 0 === e || e < 0) && (e = 0), e > this.length) return ""; + if ((void 0 === n || n > this.length) && (n = this.length), n <= 0) return ""; + if (n >>>= 0, e >>>= 0, n <= e) return ""; + for (t || (t = "utf8"); ;) switch (t) { + case"hex": + return O(this, e, n); + case"utf8": + case"utf-8": + return M(this, e, n); + case"ascii": + return P(this, e, n); + case"latin1": + case"binary": + return L(this, e, n); + case"base64": + return C(this, e, n); + case"ucs2": + case"ucs-2": + case"utf16le": + case"utf-16le": + return R(this, e, n); + default: + if (r) throw new TypeError("Unknown encoding: " + t); + t = (t + "").toLowerCase(), r = !0 + } + } + + function _(t, e, n) { + var r = t[e]; + t[e] = t[n], t[n] = r + } + + function y(t, e, n, r, i) { + if (0 === t.length) return -1; + if ("string" == typeof n ? (r = n, n = 0) : n > 2147483647 ? n = 2147483647 : n < -2147483648 && (n = -2147483648), n = +n, isNaN(n) && (n = i ? 0 : t.length - 1), n < 0 && (n = t.length + n), n >= t.length) { + if (i) return -1; + n = t.length - 1 + } else if (n < 0) { + if (!i) return -1; + n = 0 + } + if ("string" == typeof e && (e = a.from(e, r)), a.isBuffer(e)) return 0 === e.length ? -1 : b(t, e, n, r, i); + if ("number" == typeof e) return e &= 255, a.TYPED_ARRAY_SUPPORT && "function" == typeof Uint8Array.prototype.indexOf ? i ? Uint8Array.prototype.indexOf.call(t, e, n) : Uint8Array.prototype.lastIndexOf.call(t, e, n) : b(t, [e], n, r, i); + throw new TypeError("val must be string, number or Buffer") + } + + function b(t, e, n, r, i) { + function a(t, e) { + return 1 === o ? t[e] : t.readUInt16BE(e * o) + } + + var o = 1, s = t.length, l = e.length; + if (void 0 !== r && ("ucs2" === (r = String(r).toLowerCase()) || "ucs-2" === r || "utf16le" === r || "utf-16le" === r)) { + if (t.length < 2 || e.length < 2) return -1; + o = 2, s /= 2, l /= 2, n /= 2 + } + var u; + if (i) { + var c = -1; + for (u = n; u < s; u++) if (a(t, u) === a(e, -1 === c ? 0 : u - c)) { + if (-1 === c && (c = u), u - c + 1 === l) return c * o + } else -1 !== c && (u -= u - c), c = -1 + } else for (n + l > s && (n = s - l), u = n; u >= 0; u--) { + for (var f = !0, h = 0; h < l; h++) if (a(t, u + h) !== a(e, h)) { + f = !1; + break + } + if (f) return u + } + return -1 + } + + function w(t, e, n, r) { + n = Number(n) || 0; + var i = t.length - n; + r ? (r = Number(r)) > i && (r = i) : r = i; + var a = e.length; + if (a % 2 != 0) throw new TypeError("Invalid hex string"); + r > a / 2 && (r = a / 2); + for (var o = 0; o < r; ++o) { + var s = parseInt(e.substr(2 * o, 2), 16); + if (isNaN(s)) return o; + t[n + o] = s + } + return o + } + + function x(t, e, n, r) { + return X(W(e, t.length - n), t, n, r) + } + + function S(t, e, n, r) { + return X(V(e), t, n, r) + } + + function E(t, e, n, r) { + return S(t, e, n, r) + } + + function k(t, e, n, r) { + return X($(e), t, n, r) + } + + function T(t, e, n, r) { + return X(Z(e, t.length - n), t, n, r) + } + + function C(t, e, n) { + return 0 === e && n === t.length ? K.fromByteArray(t) : K.fromByteArray(t.slice(e, n)) + } + + function M(t, e, n) { + n = Math.min(t.length, n); + for (var r = [], i = e; i < n;) { + var a = t[i], o = null, s = a > 239 ? 4 : a > 223 ? 3 : a > 191 ? 2 : 1; + if (i + s <= n) { + var l, u, c, f; + switch (s) { + case 1: + a < 128 && (o = a); + break; + case 2: + l = t[i + 1], 128 == (192 & l) && (f = (31 & a) << 6 | 63 & l) > 127 && (o = f); + break; + case 3: + l = t[i + 1], u = t[i + 2], 128 == (192 & l) && 128 == (192 & u) && (f = (15 & a) << 12 | (63 & l) << 6 | 63 & u) > 2047 && (f < 55296 || f > 57343) && (o = f); + break; + case 4: + l = t[i + 1], u = t[i + 2], c = t[i + 3], 128 == (192 & l) && 128 == (192 & u) && 128 == (192 & c) && (f = (15 & a) << 18 | (63 & l) << 12 | (63 & u) << 6 | 63 & c) > 65535 && f < 1114112 && (o = f) + } + } + null === o ? (o = 65533, s = 1) : o > 65535 && (o -= 65536, r.push(o >>> 10 & 1023 | 55296), o = 56320 | 1023 & o), r.push(o), i += s + } + return A(r) + } + + function A(t) { + var e = t.length; + if (e <= Q) return String.fromCharCode.apply(String, t); + for (var n = "", r = 0; r < e;) n += String.fromCharCode.apply(String, t.slice(r, r += Q)); + return n + } + + function P(t, e, n) { + var r = ""; + n = Math.min(t.length, n); + for (var i = e; i < n; ++i) r += String.fromCharCode(127 & t[i]); + return r + } + + function L(t, e, n) { + var r = ""; + n = Math.min(t.length, n); + for (var i = e; i < n; ++i) r += String.fromCharCode(t[i]); + return r + } + + function O(t, e, n) { + var r = t.length; + (!e || e < 0) && (e = 0), (!n || n < 0 || n > r) && (n = r); + for (var i = "", a = e; a < n; ++a) i += G(t[a]); + return i + } + + function R(t, e, n) { + for (var r = t.slice(e, n), i = "", a = 0; a < r.length; a += 2) i += String.fromCharCode(r[a] + 256 * r[a + 1]); + return i + } + + function I(t, e, n) { + if (t % 1 != 0 || t < 0) throw new RangeError("offset is not uint"); + if (t + e > n) throw new RangeError("Trying to access beyond buffer length") + } + + function B(t, e, n, r, i, o) { + if (!a.isBuffer(t)) throw new TypeError('"buffer" argument must be a Buffer instance'); + if (e > i || e < o) throw new RangeError('"value" argument is out of bounds'); + if (n + r > t.length) throw new RangeError("Index out of range") + } + + function z(t, e, n, r) { + e < 0 && (e = 65535 + e + 1); + for (var i = 0, a = Math.min(t.length - n, 2); i < a; ++i) t[n + i] = (e & 255 << 8 * (r ? i : 1 - i)) >>> 8 * (r ? i : 1 - i) + } + + function F(t, e, n, r) { + e < 0 && (e = 4294967295 + e + 1); + for (var i = 0, a = Math.min(t.length - n, 4); i < a; ++i) t[n + i] = e >>> 8 * (r ? i : 3 - i) & 255 + } + + function N(t, e, n, r, i, a) { + if (n + r > t.length) throw new RangeError("Index out of range"); + if (n < 0) throw new RangeError("Index out of range") + } + + function D(t, e, n, r, i) { + return i || N(t, e, n, 4, 3.4028234663852886e38, -3.4028234663852886e38), q.write(t, e, n, r, 23, 4), n + 4 + } + + function j(t, e, n, r, i) { + return i || N(t, e, n, 8, 1.7976931348623157e308, -1.7976931348623157e308), q.write(t, e, n, r, 52, 8), n + 8 + } + + function U(t) { + if (t = H(t).replace(tt, ""), t.length < 2) return ""; + for (; t.length % 4 != 0;) t += "="; + return t + } + + function H(t) { + return t.trim ? t.trim() : t.replace(/^\s+|\s+$/g, "") + } + + function G(t) { + return t < 16 ? "0" + t.toString(16) : t.toString(16) + } + + function W(t, e) { + e = e || 1 / 0; + for (var n, r = t.length, i = null, a = [], o = 0; o < r; ++o) { + if ((n = t.charCodeAt(o)) > 55295 && n < 57344) { + if (!i) { + if (n > 56319) { + (e -= 3) > -1 && a.push(239, 191, 189); + continue + } + if (o + 1 === r) { + (e -= 3) > -1 && a.push(239, 191, 189); + continue + } + i = n; + continue + } + if (n < 56320) { + (e -= 3) > -1 && a.push(239, 191, 189), i = n; + continue + } + n = 65536 + (i - 55296 << 10 | n - 56320) + } else i && (e -= 3) > -1 && a.push(239, 191, 189); + if (i = null, n < 128) { + if ((e -= 1) < 0) break; + a.push(n) + } else if (n < 2048) { + if ((e -= 2) < 0) break; + a.push(n >> 6 | 192, 63 & n | 128) + } else if (n < 65536) { + if ((e -= 3) < 0) break; + a.push(n >> 12 | 224, n >> 6 & 63 | 128, 63 & n | 128) + } else { + if (!(n < 1114112)) throw new Error("Invalid code point"); + if ((e -= 4) < 0) break; + a.push(n >> 18 | 240, n >> 12 & 63 | 128, n >> 6 & 63 | 128, 63 & n | 128) + } + } + return a + } + + function V(t) { + for (var e = [], n = 0; n < t.length; ++n) e.push(255 & t.charCodeAt(n)); + return e + } + + function Z(t, e) { + for (var n, r, i, a = [], o = 0; o < t.length && !((e -= 2) < 0); ++o) n = t.charCodeAt(o), r = n >> 8, i = n % 256, a.push(i), a.push(r); + return a + } + + function $(t) { + return K.toByteArray(U(t)) + } + + function X(t, e, n, r) { + for (var i = 0; i < r && !(i + n >= e.length || i >= t.length); ++i) e[i + n] = t[i]; + return i + } + + function Y(t) { + return t !== t + } + + /*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ + var K = n(485), q = n(808), J = n(347); + e.Buffer = a, e.SlowBuffer = v, e.INSPECT_MAX_BYTES = 50, a.TYPED_ARRAY_SUPPORT = void 0 !== t.TYPED_ARRAY_SUPPORT ? t.TYPED_ARRAY_SUPPORT : function () { + try { + var t = new Uint8Array(1); + return t.__proto__ = { + __proto__: Uint8Array.prototype, foo: function () { + return 42 + } + }, 42 === t.foo() && "function" == typeof t.subarray && 0 === t.subarray(1, 1).byteLength + } catch (t) { + return !1 + } + }(), e.kMaxLength = r(), a.poolSize = 8192, a._augment = function (t) { + return t.__proto__ = a.prototype, t + }, a.from = function (t, e, n) { + return o(null, t, e, n) + }, a.TYPED_ARRAY_SUPPORT && (a.prototype.__proto__ = Uint8Array.prototype, a.__proto__ = Uint8Array, "undefined" != typeof Symbol && Symbol.species && a[Symbol.species] === a && Object.defineProperty(a, Symbol.species, { + value: null, + configurable: !0 + })), a.alloc = function (t, e, n) { + return l(null, t, e, n) + }, a.allocUnsafe = function (t) { + return u(null, t) + }, a.allocUnsafeSlow = function (t) { + return u(null, t) + }, a.isBuffer = function (t) { + return !(null == t || !t._isBuffer) + }, a.compare = function (t, e) { + if (!a.isBuffer(t) || !a.isBuffer(e)) throw new TypeError("Arguments must be Buffers"); + if (t === e) return 0; + for (var n = t.length, r = e.length, i = 0, o = Math.min(n, r); i < o; ++i) if (t[i] !== e[i]) { + n = t[i], r = e[i]; + break + } + return n < r ? -1 : r < n ? 1 : 0 + }, a.isEncoding = function (t) { + switch (String(t).toLowerCase()) { + case"hex": + case"utf8": + case"utf-8": + case"ascii": + case"latin1": + case"binary": + case"base64": + case"ucs2": + case"ucs-2": + case"utf16le": + case"utf-16le": + return !0; + default: + return !1 + } + }, a.concat = function (t, e) { + if (!J(t)) throw new TypeError('"list" argument must be an Array of Buffers'); + if (0 === t.length) return a.alloc(0); + var n; + if (void 0 === e) for (e = 0, n = 0; n < t.length; ++n) e += t[n].length; + var r = a.allocUnsafe(e), i = 0; + for (n = 0; n < t.length; ++n) { + var o = t[n]; + if (!a.isBuffer(o)) throw new TypeError('"list" argument must be an Array of Buffers'); + o.copy(r, i), i += o.length + } + return r + }, a.byteLength = g, a.prototype._isBuffer = !0, a.prototype.swap16 = function () { + var t = this.length; + if (t % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits"); + for (var e = 0; e < t; e += 2) _(this, e, e + 1); + return this + }, a.prototype.swap32 = function () { + var t = this.length; + if (t % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits"); + for (var e = 0; e < t; e += 4) _(this, e, e + 3), _(this, e + 1, e + 2); + return this + }, a.prototype.swap64 = function () { + var t = this.length; + if (t % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits"); + for (var e = 0; e < t; e += 8) _(this, e, e + 7), _(this, e + 1, e + 6), _(this, e + 2, e + 5), _(this, e + 3, e + 4); + return this + }, a.prototype.toString = function () { + var t = 0 | this.length; + return 0 === t ? "" : 0 === arguments.length ? M(this, 0, t) : m.apply(this, arguments) + }, a.prototype.equals = function (t) { + if (!a.isBuffer(t)) throw new TypeError("Argument must be a Buffer"); + return this === t || 0 === a.compare(this, t) + }, a.prototype.inspect = function () { + var t = "", n = e.INSPECT_MAX_BYTES; + return this.length > 0 && (t = this.toString("hex", 0, n).match(/.{2}/g).join(" "), this.length > n && (t += " ... ")), "" + }, a.prototype.compare = function (t, e, n, r, i) { + if (!a.isBuffer(t)) throw new TypeError("Argument must be a Buffer"); + if (void 0 === e && (e = 0), void 0 === n && (n = t ? t.length : 0), void 0 === r && (r = 0), void 0 === i && (i = this.length), e < 0 || n > t.length || r < 0 || i > this.length) throw new RangeError("out of range index"); + if (r >= i && e >= n) return 0; + if (r >= i) return -1; + if (e >= n) return 1; + if (e >>>= 0, n >>>= 0, r >>>= 0, i >>>= 0, this === t) return 0; + for (var o = i - r, s = n - e, l = Math.min(o, s), u = this.slice(r, i), c = t.slice(e, n), f = 0; f < l; ++f) if (u[f] !== c[f]) { + o = u[f], s = c[f]; + break + } + return o < s ? -1 : s < o ? 1 : 0 + }, a.prototype.includes = function (t, e, n) { + return -1 !== this.indexOf(t, e, n) + }, a.prototype.indexOf = function (t, e, n) { + return y(this, t, e, n, !0) + }, a.prototype.lastIndexOf = function (t, e, n) { + return y(this, t, e, n, !1) + }, a.prototype.write = function (t, e, n, r) { + if (void 0 === e) r = "utf8", n = this.length, e = 0; else if (void 0 === n && "string" == typeof e) r = e, n = this.length, e = 0; else { + if (!isFinite(e)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported"); + e |= 0, isFinite(n) ? (n |= 0, void 0 === r && (r = "utf8")) : (r = n, n = void 0) + } + var i = this.length - e; + if ((void 0 === n || n > i) && (n = i), t.length > 0 && (n < 0 || e < 0) || e > this.length) throw new RangeError("Attempt to write outside buffer bounds"); + r || (r = "utf8"); + for (var a = !1; ;) switch (r) { + case"hex": + return w(this, t, e, n); + case"utf8": + case"utf-8": + return x(this, t, e, n); + case"ascii": + return S(this, t, e, n); + case"latin1": + case"binary": + return E(this, t, e, n); + case"base64": + return k(this, t, e, n); + case"ucs2": + case"ucs-2": + case"utf16le": + case"utf-16le": + return T(this, t, e, n); + default: + if (a) throw new TypeError("Unknown encoding: " + r); + r = ("" + r).toLowerCase(), a = !0 + } + }, a.prototype.toJSON = function () { + return {type: "Buffer", data: Array.prototype.slice.call(this._arr || this, 0)} + }; + var Q = 4096; + a.prototype.slice = function (t, e) { + var n = this.length; + t = ~~t, e = void 0 === e ? n : ~~e, t < 0 ? (t += n) < 0 && (t = 0) : t > n && (t = n), e < 0 ? (e += n) < 0 && (e = 0) : e > n && (e = n), e < t && (e = t); + var r; + if (a.TYPED_ARRAY_SUPPORT) r = this.subarray(t, e), r.__proto__ = a.prototype; else { + var i = e - t; + r = new a(i, void 0); + for (var o = 0; o < i; ++o) r[o] = this[o + t] + } + return r + }, a.prototype.readUIntLE = function (t, e, n) { + t |= 0, e |= 0, n || I(t, e, this.length); + for (var r = this[t], i = 1, a = 0; ++a < e && (i *= 256);) r += this[t + a] * i; + return r + }, a.prototype.readUIntBE = function (t, e, n) { + t |= 0, e |= 0, n || I(t, e, this.length); + for (var r = this[t + --e], i = 1; e > 0 && (i *= 256);) r += this[t + --e] * i; + return r + }, a.prototype.readUInt8 = function (t, e) { + return e || I(t, 1, this.length), this[t] + }, a.prototype.readUInt16LE = function (t, e) { + return e || I(t, 2, this.length), this[t] | this[t + 1] << 8 + }, a.prototype.readUInt16BE = function (t, e) { + return e || I(t, 2, this.length), this[t] << 8 | this[t + 1] + }, a.prototype.readUInt32LE = function (t, e) { + return e || I(t, 4, this.length), (this[t] | this[t + 1] << 8 | this[t + 2] << 16) + 16777216 * this[t + 3] + }, a.prototype.readUInt32BE = function (t, e) { + return e || I(t, 4, this.length), 16777216 * this[t] + (this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3]) + }, a.prototype.readIntLE = function (t, e, n) { + t |= 0, e |= 0, n || I(t, e, this.length); + for (var r = this[t], i = 1, a = 0; ++a < e && (i *= 256);) r += this[t + a] * i; + return i *= 128, r >= i && (r -= Math.pow(2, 8 * e)), r + }, a.prototype.readIntBE = function (t, e, n) { + t |= 0, e |= 0, n || I(t, e, this.length); + for (var r = e, i = 1, a = this[t + --r]; r > 0 && (i *= 256);) a += this[t + --r] * i; + return i *= 128, a >= i && (a -= Math.pow(2, 8 * e)), a + }, a.prototype.readInt8 = function (t, e) { + return e || I(t, 1, this.length), 128 & this[t] ? -1 * (255 - this[t] + 1) : this[t] + }, a.prototype.readInt16LE = function (t, e) { + e || I(t, 2, this.length); + var n = this[t] | this[t + 1] << 8; + return 32768 & n ? 4294901760 | n : n + }, a.prototype.readInt16BE = function (t, e) { + e || I(t, 2, this.length); + var n = this[t + 1] | this[t] << 8; + return 32768 & n ? 4294901760 | n : n + }, a.prototype.readInt32LE = function (t, e) { + return e || I(t, 4, this.length), this[t] | this[t + 1] << 8 | this[t + 2] << 16 | this[t + 3] << 24 + }, a.prototype.readInt32BE = function (t, e) { + return e || I(t, 4, this.length), this[t] << 24 | this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3] + }, a.prototype.readFloatLE = function (t, e) { + return e || I(t, 4, this.length), q.read(this, t, !0, 23, 4) + }, a.prototype.readFloatBE = function (t, e) { + return e || I(t, 4, this.length), q.read(this, t, !1, 23, 4) + }, a.prototype.readDoubleLE = function (t, e) { + return e || I(t, 8, this.length), q.read(this, t, !0, 52, 8) + }, a.prototype.readDoubleBE = function (t, e) { + return e || I(t, 8, this.length), q.read(this, t, !1, 52, 8) + }, a.prototype.writeUIntLE = function (t, e, n, r) { + if (t = +t, e |= 0, n |= 0, !r) { + B(this, t, e, n, Math.pow(2, 8 * n) - 1, 0) + } + var i = 1, a = 0; + for (this[e] = 255 & t; ++a < n && (i *= 256);) this[e + a] = t / i & 255; + return e + n + }, a.prototype.writeUIntBE = function (t, e, n, r) { + if (t = +t, e |= 0, n |= 0, !r) { + B(this, t, e, n, Math.pow(2, 8 * n) - 1, 0) + } + var i = n - 1, a = 1; + for (this[e + i] = 255 & t; --i >= 0 && (a *= 256);) this[e + i] = t / a & 255; + return e + n + }, a.prototype.writeUInt8 = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 1, 255, 0), a.TYPED_ARRAY_SUPPORT || (t = Math.floor(t)), this[e] = 255 & t, e + 1 + }, a.prototype.writeUInt16LE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 2, 65535, 0), a.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8) : z(this, t, e, !0), e + 2 + }, a.prototype.writeUInt16BE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 2, 65535, 0), a.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 8, this[e + 1] = 255 & t) : z(this, t, e, !1), e + 2 + }, a.prototype.writeUInt32LE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 4, 4294967295, 0), a.TYPED_ARRAY_SUPPORT ? (this[e + 3] = t >>> 24, this[e + 2] = t >>> 16, this[e + 1] = t >>> 8, this[e] = 255 & t) : F(this, t, e, !0), e + 4 + }, a.prototype.writeUInt32BE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 4, 4294967295, 0), a.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t) : F(this, t, e, !1), e + 4 + }, a.prototype.writeIntLE = function (t, e, n, r) { + if (t = +t, e |= 0, !r) { + var i = Math.pow(2, 8 * n - 1); + B(this, t, e, n, i - 1, -i) + } + var a = 0, o = 1, s = 0; + for (this[e] = 255 & t; ++a < n && (o *= 256);) t < 0 && 0 === s && 0 !== this[e + a - 1] && (s = 1), this[e + a] = (t / o >> 0) - s & 255; + return e + n + }, a.prototype.writeIntBE = function (t, e, n, r) { + if (t = +t, e |= 0, !r) { + var i = Math.pow(2, 8 * n - 1); + B(this, t, e, n, i - 1, -i) + } + var a = n - 1, o = 1, s = 0; + for (this[e + a] = 255 & t; --a >= 0 && (o *= 256);) t < 0 && 0 === s && 0 !== this[e + a + 1] && (s = 1), this[e + a] = (t / o >> 0) - s & 255; + return e + n + }, a.prototype.writeInt8 = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 1, 127, -128), a.TYPED_ARRAY_SUPPORT || (t = Math.floor(t)), t < 0 && (t = 255 + t + 1), this[e] = 255 & t, e + 1 + }, a.prototype.writeInt16LE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 2, 32767, -32768), a.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8) : z(this, t, e, !0), e + 2 + }, a.prototype.writeInt16BE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 2, 32767, -32768), a.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 8, this[e + 1] = 255 & t) : z(this, t, e, !1), e + 2 + }, a.prototype.writeInt32LE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 4, 2147483647, -2147483648), a.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8, this[e + 2] = t >>> 16, this[e + 3] = t >>> 24) : F(this, t, e, !0), e + 4 + }, a.prototype.writeInt32BE = function (t, e, n) { + return t = +t, e |= 0, n || B(this, t, e, 4, 2147483647, -2147483648), t < 0 && (t = 4294967295 + t + 1), a.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t) : F(this, t, e, !1), e + 4 + }, a.prototype.writeFloatLE = function (t, e, n) { + return D(this, t, e, !0, n) + }, a.prototype.writeFloatBE = function (t, e, n) { + return D(this, t, e, !1, n) + }, a.prototype.writeDoubleLE = function (t, e, n) { + return j(this, t, e, !0, n) + }, a.prototype.writeDoubleBE = function (t, e, n) { + return j(this, t, e, !1, n) + }, a.prototype.copy = function (t, e, n, r) { + if (n || (n = 0), r || 0 === r || (r = this.length), e >= t.length && (e = t.length), e || (e = 0), r > 0 && r < n && (r = n), r === n) return 0; + if (0 === t.length || 0 === this.length) return 0; + if (e < 0) throw new RangeError("targetStart out of bounds"); + if (n < 0 || n >= this.length) throw new RangeError("sourceStart out of bounds"); + if (r < 0) throw new RangeError("sourceEnd out of bounds"); + r > this.length && (r = this.length), t.length - e < r - n && (r = t.length - e + n); + var i, o = r - n; + if (this === t && n < e && e < r) for (i = o - 1; i >= 0; --i) t[i + e] = this[i + n]; else if (o < 1e3 || !a.TYPED_ARRAY_SUPPORT) for (i = 0; i < o; ++i) t[i + e] = this[i + n]; else Uint8Array.prototype.set.call(t, this.subarray(n, n + o), e); + return o + }, a.prototype.fill = function (t, e, n, r) { + if ("string" == typeof t) { + if ("string" == typeof e ? (r = e, e = 0, n = this.length) : "string" == typeof n && (r = n, n = this.length), 1 === t.length) { + var i = t.charCodeAt(0); + i < 256 && (t = i) + } + if (void 0 !== r && "string" != typeof r) throw new TypeError("encoding must be a string"); + if ("string" == typeof r && !a.isEncoding(r)) throw new TypeError("Unknown encoding: " + r) + } else "number" == typeof t && (t &= 255); + if (e < 0 || this.length < e || this.length < n) throw new RangeError("Out of range index"); + if (n <= e) return this; + e >>>= 0, n = void 0 === n ? this.length : n >>> 0, t || (t = 0); + var o; + if ("number" == typeof t) for (o = e; o < n; ++o) this[o] = t; else { + var s = a.isBuffer(t) ? t : W(new a(t, r).toString()), l = s.length; + for (o = 0; o < n - e; ++o) this[o + e] = s[o % l] + } + return this + }; + var tt = /[^+\/0-9A-Za-z-_]/g + }).call(e, n(124)) +}, function (t, e, n) { + var r = n(97), i = n(85), a = n(163), o = n(140), s = function (t, e, n) { + var l, u, c, f = t & s.F, h = t & s.G, d = t & s.S, p = t & s.P, v = t & s.B, g = t & s.W, + m = h ? i : i[e] || (i[e] = {}), _ = m.prototype, y = h ? r : d ? r[e] : (r[e] || {}).prototype; + h && (n = e); + for (l in n) (u = !f && y && void 0 !== y[l]) && l in m || (c = u ? y[l] : n[l], m[l] = h && "function" != typeof y[l] ? n[l] : v && u ? a(c, r) : g && y[l] == c ? function (t) { + var e = function (e, n, r) { + if (this instanceof t) { + switch (arguments.length) { + case 0: + return new t; + case 1: + return new t(e); + case 2: + return new t(e, n) + } + return new t(e, n, r) + } + return t.apply(this, arguments) + }; + return e.prototype = t.prototype, e + }(c) : p && "function" == typeof c ? a(Function.call, c) : c, p && ((m.virtual || (m.virtual = {}))[l] = c, t & s.R && _ && !_[l] && o(_, l, c))) + }; + s.F = 1, s.G = 2, s.S = 4, s.P = 8, s.B = 16, s.W = 32, s.U = 64, s.R = 128, t.exports = s +}, function (t, e) { + var n = t.exports = "undefined" != typeof window && window.Math == Math ? window : "undefined" != typeof self && self.Math == Math ? self : Function("return this")(); + "number" == typeof __g && (__g = n) +}, function (t, e) { + var n = {}.hasOwnProperty; + t.exports = function (t, e) { + return n.call(t, e) + } +}, function (t, e, n) { + var r = n(87), i = n(147); + t.exports = n(86) ? function (t, e, n) { + return r.f(t, e, i(1, n)) + } : function (t, e, n) { + return t[e] = n, t + } +}, function (t, e, n) { + var r = n(79), i = n(99), a = n(98), o = n(151)("src"), s = Function.toString, l = ("" + s).split("toString"); + n(113).inspectSource = function (t) { + return s.call(t) + }, (t.exports = function (t, e, n, s) { + var u = "function" == typeof n; + u && (a(n, "name") || i(n, "name", e)), t[e] !== n && (u && (a(n, o) || i(n, o, t[e] ? "" + t[e] : l.join(String(e)))), t === r ? t[e] = n : s ? t[e] ? t[e] = n : i(t, e, n) : (delete t[e], i(t, e, n))) + })(Function.prototype, "toString", function () { + return "function" == typeof this && this[o] || s.call(this) + }) +}, function (t, e, n) { + var r = n(36), i = n(81), a = n(114), o = /"/g, s = function (t, e, n, r) { + var i = String(a(t)), s = "<" + e; + return "" !== n && (s += " " + n + '="' + String(r).replace(o, """) + '"'), s + ">" + i + "" + }; + t.exports = function (t, e) { + var n = {}; + n[t] = e(s), r(r.P + r.F * i(function () { + var e = ""[t]('"'); + return e !== e.toLowerCase() || e.split('"').length > 3 + }), "String", n) + } +}, function (t, e, n) { + var r = n(183), i = n(114); + t.exports = function (t) { + return r(i(t)) + } +}, function (t, e, n) { + "use strict"; + + function r(t) { + return "[object Array]" === E.call(t) + } + + function i(t) { + return "[object ArrayBuffer]" === E.call(t) + } + + function a(t) { + return "undefined" != typeof FormData && t instanceof FormData + } + + function o(t) { + return "undefined" != typeof ArrayBuffer && ArrayBuffer.isView ? ArrayBuffer.isView(t) : t && t.buffer && t.buffer instanceof ArrayBuffer + } + + function s(t) { + return "string" == typeof t + } + + function l(t) { + return "number" == typeof t + } + + function u(t) { + return void 0 === t + } + + function c(t) { + return null !== t && "object" == typeof t + } + + function f(t) { + return "[object Date]" === E.call(t) + } + + function h(t) { + return "[object File]" === E.call(t) + } + + function d(t) { + return "[object Blob]" === E.call(t) + } + + function p(t) { + return "[object Function]" === E.call(t) + } + + function v(t) { + return c(t) && p(t.pipe) + } + + function g(t) { + return "undefined" != typeof URLSearchParams && t instanceof URLSearchParams + } + + function m(t) { + return t.replace(/^\s*/, "").replace(/\s*$/, "") + } + + function _() { + return ("undefined" == typeof navigator || "ReactNative" !== navigator.product) && ("undefined" != typeof window && "undefined" != typeof document) + } + + function y(t, e) { + if (null !== t && void 0 !== t) if ("object" == typeof t || r(t) || (t = [t]), r(t)) for (var n = 0, i = t.length; n < i; n++) e.call(null, t[n], n, t); else for (var a in t) Object.prototype.hasOwnProperty.call(t, a) && e.call(null, t[a], a, t) + } + + function b() { + function t(t, n) { + "object" == typeof e[n] && "object" == typeof t ? e[n] = b(e[n], t) : e[n] = t + } + + for (var e = {}, n = 0, r = arguments.length; n < r; n++) y(arguments[n], t); + return e + } + + function w(t, e, n) { + return y(e, function (e, r) { + t[r] = n && "function" == typeof e ? x(e, n) : e + }), t + } + + var x = n(289), S = n(346), E = Object.prototype.toString; + t.exports = { + isArray: r, + isArrayBuffer: i, + isBuffer: S, + isFormData: a, + isArrayBufferView: o, + isString: s, + isNumber: l, + isObject: c, + isUndefined: u, + isDate: f, + isFile: h, + isBlob: d, + isFunction: p, + isStream: v, + isURLSearchParams: g, + isStandardBrowserEnv: _, + forEach: y, + merge: b, + extend: w, + trim: m + } +}, function (t, e, n) { + var r = n(184), i = n(147), a = n(102), o = n(117), s = n(98), l = n(322), u = Object.getOwnPropertyDescriptor; + e.f = n(86) ? u : function (t, e) { + if (t = a(t), e = o(e, !0), l) try { + return u(t, e) + } catch (t) { + } + if (s(t, e)) return i(!r.f.call(t, e), t[e]) + } +}, function (t, e, n) { + var r = n(98), i = n(89), a = n(259)("IE_PROTO"), o = Object.prototype; + t.exports = Object.getPrototypeOf || function (t) { + return t = i(t), r(t, a) ? t[a] : "function" == typeof t.constructor && t instanceof t.constructor ? t.constructor.prototype : t instanceof Object ? o : null + } +}, function (t, e) { + var n = {}.toString; + t.exports = function (t) { + return n.call(t).slice(8, -1) + } +}, function (t, e, n) { + var r = n(90); + t.exports = function (t, e, n) { + if (r(t), void 0 === e) return t; + switch (n) { + case 1: + return function (n) { + return t.call(e, n) + }; + case 2: + return function (n, r) { + return t.call(e, n, r) + }; + case 3: + return function (n, r, i) { + return t.call(e, n, r, i) + } + } + return function () { + return t.apply(e, arguments) + } + } +}, function (t, e, n) { + "use strict"; + var r = n(81); + t.exports = function (t, e) { + return !!t && r(function () { + e ? t.call(null, function () { + }, 1) : t.call(null) + }) + } +}, , function (t, e) { + function n() { + throw new Error("setTimeout has not been defined") + } + + function r() { + throw new Error("clearTimeout has not been defined") + } + + function i(t) { + if (c === setTimeout) return setTimeout(t, 0); + if ((c === n || !c) && setTimeout) return c = setTimeout, setTimeout(t, 0); + try { + return c(t, 0) + } catch (e) { + try { + return c.call(null, t, 0) + } catch (e) { + return c.call(this, t, 0) + } + } + } + + function a(t) { + if (f === clearTimeout) return clearTimeout(t); + if ((f === r || !f) && clearTimeout) return f = clearTimeout, clearTimeout(t); + try { + return f(t) + } catch (e) { + try { + return f.call(null, t) + } catch (e) { + return f.call(this, t) + } + } + } + + function o() { + v && d && (v = !1, d.length ? p = d.concat(p) : g = -1, p.length && s()) + } + + function s() { + if (!v) { + var t = i(o); + v = !0; + for (var e = p.length; e;) { + for (d = p, p = []; ++g < e;) d && d[g].run(); + g = -1, e = p.length + } + d = null, v = !1, a(t) + } + } + + function l(t, e) { + this.fun = t, this.array = e + } + + function u() { + } + + var c, f, h = t.exports = {}; + !function () { + try { + c = "function" == typeof setTimeout ? setTimeout : n + } catch (t) { + c = n + } + try { + f = "function" == typeof clearTimeout ? clearTimeout : r + } catch (t) { + f = r + } + }(); + var d, p = [], v = !1, g = -1; + h.nextTick = function (t) { + var e = new Array(arguments.length - 1); + if (arguments.length > 1) for (var n = 1; n < arguments.length; n++) e[n - 1] = arguments[n]; + p.push(new l(t, e)), 1 !== p.length || v || i(s) + }, l.prototype.run = function () { + this.fun.apply(null, this.array) + }, h.title = "browser", h.browser = !0, h.env = {}, h.argv = [], h.version = "", h.versions = {}, h.on = u, h.addListener = u, h.once = u, h.off = u, h.removeListener = u, h.removeAllListeners = u, h.emit = u, h.prependListener = u, h.prependOnceListener = u, h.listeners = function (t) { + return [] + }, h.binding = function (t) { + throw new Error("process.binding is not supported") + }, h.cwd = function () { + return "/" + }, h.chdir = function (t) { + throw new Error("process.chdir is not supported") + }, h.umask = function () { + return 0 + } +}, function (t, e, n) { + var r, i, a; + !function (o, s) { + i = [t, n(495), n(836), n(801)], r = s, void 0 !== (a = "function" == typeof r ? r.apply(e, i) : r) && (t.exports = a) + }(0, function (t, e, n, r) { + "use strict"; + + function i(t) { + return t && t.__esModule ? t : {default: t} + } + + function a(t, e) { + if (!(t instanceof e)) throw new TypeError("Cannot call a class as a function") + } + + function o(t, e) { + if (!t) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return !e || "object" != typeof e && "function" != typeof e ? t : e + } + + function s(t, e) { + if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function, not " + typeof e); + t.prototype = Object.create(e && e.prototype, { + constructor: { + value: t, + enumerable: !1, + writable: !0, + configurable: !0 + } + }), e && (Object.setPrototypeOf ? Object.setPrototypeOf(t, e) : t.__proto__ = e) + } + + function l(t, e) { + var n = "data-clipboard-" + t; + if (e.hasAttribute(n)) return e.getAttribute(n) + } + + var u = i(e), c = i(n), f = i(r), + h = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) { + return typeof t + } : function (t) { + return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t + }, d = function () { + function t(t, e) { + for (var n = 0; n < e.length; n++) { + var r = e[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(t, r.key, r) + } + } + + return function (e, n, r) { + return n && t(e.prototype, n), r && t(e, r), e + } + }(), p = function (t) { + function e(t, n) { + a(this, e); + var r = o(this, (e.__proto__ || Object.getPrototypeOf(e)).call(this)); + return r.resolveOptions(n), r.listenClick(t), r + } + + return s(e, t), d(e, [{ + key: "resolveOptions", value: function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; + this.action = "function" == typeof t.action ? t.action : this.defaultAction, this.target = "function" == typeof t.target ? t.target : this.defaultTarget, this.text = "function" == typeof t.text ? t.text : this.defaultText, this.container = "object" === h(t.container) ? t.container : document.body + } + }, { + key: "listenClick", value: function (t) { + var e = this; + this.listener = (0, f.default)(t, "click", function (t) { + return e.onClick(t) + }) + } + }, { + key: "onClick", value: function (t) { + var e = t.delegateTarget || t.currentTarget; + this.clipboardAction && (this.clipboardAction = null), this.clipboardAction = new u.default({ + action: this.action(e), + target: this.target(e), + text: this.text(e), + container: this.container, + trigger: e, + emitter: this + }) + } + }, { + key: "defaultAction", value: function (t) { + return l("action", t) + } + }, { + key: "defaultTarget", value: function (t) { + var e = l("target", t); + if (e) return document.querySelector(e) + } + }, { + key: "defaultText", value: function (t) { + return l("text", t) + } + }, { + key: "destroy", value: function () { + this.listener.destroy(), this.clipboardAction && (this.clipboardAction.destroy(), this.clipboardAction = null) + } + }], [{ + key: "isSupported", value: function () { + var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : ["copy", "cut"], + e = "string" == typeof t ? [t] : t, n = !!document.queryCommandSupported; + return e.forEach(function (t) { + n = n && !!document.queryCommandSupported(t) + }), n + } + }]), e + }(c.default); + t.exports = p + }) +}, function (t, e, n) { + var r = n(107), i = n(183), a = n(89), o = n(88), s = n(244); + t.exports = function (t, e) { + var n = 1 == t, l = 2 == t, u = 3 == t, c = 4 == t, f = 6 == t, h = 5 == t || f, d = e || s; + return function (e, s, p) { + for (var v, g, m = a(e), _ = i(m), y = r(s, p, 3), b = o(_.length), w = 0, x = n ? d(e, b) : l ? d(e, 0) : void 0; b > w; w++) if ((h || w in _) && (v = _[w], g = y(v, w, m), t)) if (n) x[w] = g; else if (g) switch (t) { + case 3: + return !0; + case 5: + return v; + case 6: + return w; + case 2: + x.push(v) + } else if (c) return !1; + return f ? -1 : u || c ? c : x + } + } +}, function (t, e) { + var n = t.exports = {version: "2.5.0"}; + "number" == typeof __e && (__e = n) +}, function (t, e) { + t.exports = function (t) { + if (void 0 == t) throw TypeError("Can't call method on " + t); + return t + } +}, function (t, e, n) { + var r = n(36), i = n(113), a = n(81); + t.exports = function (t, e) { + var n = (i.Object || {})[t] || Object[t], o = {}; + o[t] = e(n), r(r.S + r.F * a(function () { + n(1) + }), "Object", o) + } +}, function (t, e) { + var n = Math.ceil, r = Math.floor; + t.exports = function (t) { + return isNaN(t = +t) ? 0 : (t > 0 ? r : n)(t) + } +}, function (t, e, n) { + var r = n(82); + t.exports = function (t, e) { + if (!r(t)) return t; + var n, i; + if (e && "function" == typeof(n = t.toString) && !r(i = n.call(t))) return i; + if ("function" == typeof(n = t.valueOf) && !r(i = n.call(t))) return i; + if (!e && "function" == typeof(n = t.toString) && !r(i = n.call(t))) return i; + throw TypeError("Can't convert object to primitive value") + } +}, function (t, e, n) { + var r = n(165); + t.exports = function (t) { + if (!r(t)) throw TypeError(t + " is not an object!"); + return t + } +}, function (t, e, n) { + var r = n(118), i = n(298), a = n(239), o = Object.defineProperty; + e.f = n(126) ? Object.defineProperty : function (t, e, n) { + if (r(t), e = a(e, !0), r(n), i) try { + return o(t, e, n) + } catch (t) { + } + if ("get" in n || "set" in n) throw TypeError("Accessors not supported!"); + return "value" in n && (t[e] = n.value), t + } +}, function (t, e, n) { + var r = n(299), i = n(227); + t.exports = function (t) { + return r(i(t)) + } +}, function (t, e, n) { + var r = n(342), i = n(36), a = n(211)("metadata"), o = a.store || (a.store = new (n(345))), s = function (t, e, n) { + var i = o.get(t); + if (!i) { + if (!n) return; + o.set(t, i = new r) + } + var a = i.get(e); + if (!a) { + if (!n) return; + i.set(e, a = new r) + } + return a + }, l = function (t, e, n) { + var r = s(e, n, !1); + return void 0 !== r && r.has(t) + }, u = function (t, e, n) { + var r = s(e, n, !1); + return void 0 === r ? void 0 : r.get(t) + }, c = function (t, e, n, r) { + s(n, r, !0).set(t, e) + }, f = function (t, e) { + var n = s(t, e, !1), r = []; + return n && n.forEach(function (t, e) { + r.push(e) + }), r + }, h = function (t) { + return void 0 === t || "symbol" == typeof t ? t : String(t) + }, d = function (t) { + i(i.S, "Reflect", t) + }; + t.exports = {store: o, map: s, has: l, get: u, set: c, keys: f, key: h, exp: d} +}, function (t, e, n) { + "use strict"; + if (n(86)) { + var r = n(144), i = n(79), a = n(81), o = n(36), s = n(213), l = n(265), u = n(107), c = n(142), f = n(147), + h = n(99), d = n(148), p = n(116), v = n(88), g = n(340), m = n(150), _ = n(117), y = n(98), b = n(182), + w = n(82), x = n(89), S = n(251), E = n(145), k = n(105), T = n(146).f, C = n(267), M = n(151), A = n(84), + P = n(112), L = n(199), O = n(212), R = n(268), I = n(167), B = n(206), z = n(149), F = n(243), N = n(314), + D = n(87), j = n(104), U = D.f, H = j.f, G = i.RangeError, W = i.TypeError, V = i.Uint8Array, Z = Array.prototype, + $ = l.ArrayBuffer, X = l.DataView, Y = P(0), K = P(2), q = P(3), J = P(4), Q = P(5), tt = P(6), et = L(!0), + nt = L(!1), rt = R.values, it = R.keys, at = R.entries, ot = Z.lastIndexOf, st = Z.reduce, lt = Z.reduceRight, + ut = Z.join, ct = Z.sort, ft = Z.slice, ht = Z.toString, dt = Z.toLocaleString, pt = A("iterator"), + vt = A("toStringTag"), gt = M("typed_constructor"), mt = M("def_constructor"), _t = s.CONSTR, yt = s.TYPED, + bt = s.VIEW, wt = P(1, function (t, e) { + return Tt(O(t, t[mt]), e) + }), xt = a(function () { + return 1 === new V(new Uint16Array([1]).buffer)[0] + }), St = !!V && !!V.prototype.set && a(function () { + new V(1).set({}) + }), Et = function (t, e) { + var n = p(t); + if (n < 0 || n % e) throw G("Wrong offset!"); + return n + }, kt = function (t) { + if (w(t) && yt in t) return t; + throw W(t + " is not a typed array!") + }, Tt = function (t, e) { + if (!(w(t) && gt in t)) throw W("It is not a typed array constructor!"); + return new t(e) + }, Ct = function (t, e) { + return Mt(O(t, t[mt]), e) + }, Mt = function (t, e) { + for (var n = 0, r = e.length, i = Tt(t, r); r > n;) i[n] = e[n++]; + return i + }, At = function (t, e, n) { + U(t, e, { + get: function () { + return this._d[n] + } + }) + }, Pt = function (t) { + var e, n, r, i, a, o, s = x(t), l = arguments.length, c = l > 1 ? arguments[1] : void 0, f = void 0 !== c, + h = C(s); + if (void 0 != h && !S(h)) { + for (o = h.call(s), r = [], e = 0; !(a = o.next()).done; e++) r.push(a.value); + s = r + } + for (f && l > 2 && (c = u(c, arguments[2], 2)), e = 0, n = v(s.length), i = Tt(this, n); n > e; e++) i[e] = f ? c(s[e], e) : s[e]; + return i + }, Lt = function () { + for (var t = 0, e = arguments.length, n = Tt(this, e); e > t;) n[t] = arguments[t++]; + return n + }, Ot = !!V && a(function () { + dt.call(new V(1)) + }), Rt = function () { + return dt.apply(Ot ? ft.call(kt(this)) : kt(this), arguments) + }, It = { + copyWithin: function (t, e) { + return N.call(kt(this), t, e, arguments.length > 2 ? arguments[2] : void 0) + }, every: function (t) { + return J(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, fill: function (t) { + return F.apply(kt(this), arguments) + }, filter: function (t) { + return Ct(this, K(kt(this), t, arguments.length > 1 ? arguments[1] : void 0)) + }, find: function (t) { + return Q(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, findIndex: function (t) { + return tt(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, forEach: function (t) { + Y(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, indexOf: function (t) { + return nt(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, includes: function (t) { + return et(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, join: function (t) { + return ut.apply(kt(this), arguments) + }, lastIndexOf: function (t) { + return ot.apply(kt(this), arguments) + }, map: function (t) { + return wt(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, reduce: function (t) { + return st.apply(kt(this), arguments) + }, reduceRight: function (t) { + return lt.apply(kt(this), arguments) + }, reverse: function () { + for (var t, e = this, n = kt(e).length, r = Math.floor(n / 2), i = 0; i < r;) t = e[i], e[i++] = e[--n], e[n] = t; + return e + }, some: function (t) { + return q(kt(this), t, arguments.length > 1 ? arguments[1] : void 0) + }, sort: function (t) { + return ct.call(kt(this), t) + }, subarray: function (t, e) { + var n = kt(this), r = n.length, i = m(t, r); + return new (O(n, n[mt]))(n.buffer, n.byteOffset + i * n.BYTES_PER_ELEMENT, v((void 0 === e ? r : m(e, r)) - i)) + } + }, Bt = function (t, e) { + return Ct(this, ft.call(kt(this), t, e)) + }, zt = function (t) { + kt(this); + var e = Et(arguments[1], 1), n = this.length, r = x(t), i = v(r.length), a = 0; + if (i + e > n) throw G("Wrong length!"); + for (; a < i;) this[e + a] = r[a++] + }, Ft = { + entries: function () { + return at.call(kt(this)) + }, keys: function () { + return it.call(kt(this)) + }, values: function () { + return rt.call(kt(this)) + } + }, Nt = function (t, e) { + return w(t) && t[yt] && "symbol" != typeof e && e in t && String(+e) == String(e) + }, Dt = function (t, e) { + return Nt(t, e = _(e, !0)) ? f(2, t[e]) : H(t, e) + }, jt = function (t, e, n) { + return !(Nt(t, e = _(e, !0)) && w(n) && y(n, "value")) || y(n, "get") || y(n, "set") || n.configurable || y(n, "writable") && !n.writable || y(n, "enumerable") && !n.enumerable ? U(t, e, n) : (t[e] = n.value, t) + }; + _t || (j.f = Dt, D.f = jt), o(o.S + o.F * !_t, "Object", { + getOwnPropertyDescriptor: Dt, + defineProperty: jt + }), a(function () { + ht.call({}) + }) && (ht = dt = function () { + return ut.call(this) + }); + var Ut = d({}, It); + d(Ut, Ft), h(Ut, pt, Ft.values), d(Ut, { + slice: Bt, set: zt, constructor: function () { + }, toString: ht, toLocaleString: Rt + }), At(Ut, "buffer", "b"), At(Ut, "byteOffset", "o"), At(Ut, "byteLength", "l"), At(Ut, "length", "e"), U(Ut, vt, { + get: function () { + return this[yt] + } + }), t.exports = function (t, e, n, l) { + l = !!l; + var u = t + (l ? "Clamped" : "") + "Array", f = "get" + t, d = "set" + t, p = i[u], m = p || {}, _ = p && k(p), + y = !p || !s.ABV, x = {}, S = p && p.prototype, C = function (t, n) { + var r = t._d; + return r.v[f](n * e + r.o, xt) + }, M = function (t, n, r) { + var i = t._d; + l && (r = (r = Math.round(r)) < 0 ? 0 : r > 255 ? 255 : 255 & r), i.v[d](n * e + i.o, r, xt) + }, A = function (t, e) { + U(t, e, { + get: function () { + return C(this, e) + }, set: function (t) { + return M(this, e, t) + }, enumerable: !0 + }) + }; + y ? (p = n(function (t, n, r, i) { + c(t, p, u, "_d"); + var a, o, s, l, f = 0, d = 0; + if (w(n)) { + if (!(n instanceof $ || "ArrayBuffer" == (l = b(n)) || "SharedArrayBuffer" == l)) return yt in n ? Mt(p, n) : Pt.call(p, n); + a = n, d = Et(r, e); + var m = n.byteLength; + if (void 0 === i) { + if (m % e) throw G("Wrong length!"); + if ((o = m - d) < 0) throw G("Wrong length!") + } else if ((o = v(i) * e) + d > m) throw G("Wrong length!"); + s = o / e + } else s = g(n), o = s * e, a = new $(o); + for (h(t, "_d", {b: a, o: d, l: o, e: s, v: new X(a)}); f < s;) A(t, f++) + }), S = p.prototype = E(Ut), h(S, "constructor", p)) : a(function () { + p(1) + }) && a(function () { + new p(-1) + }) && B(function (t) { + new p, new p(null), new p(1.5), new p(t) + }, !0) || (p = n(function (t, n, r, i) { + c(t, p, u); + var a; + return w(n) ? n instanceof $ || "ArrayBuffer" == (a = b(n)) || "SharedArrayBuffer" == a ? void 0 !== i ? new m(n, Et(r, e), i) : void 0 !== r ? new m(n, Et(r, e)) : new m(n) : yt in n ? Mt(p, n) : Pt.call(p, n) : new m(g(n)) + }), Y(_ !== Function.prototype ? T(m).concat(T(_)) : T(m), function (t) { + t in p || h(p, t, m[t]) + }), p.prototype = S, r || (S.constructor = p)); + var P = S[pt], L = !!P && ("values" == P.name || void 0 == P.name), O = Ft.values; + h(p, gt, !0), h(S, yt, u), h(S, bt, !0), h(S, mt, p), (l ? new p(1)[vt] == u : vt in S) || U(S, vt, { + get: function () { + return u + } + }), x[u] = p, o(o.G + o.W + o.F * (p != m), x), o(o.S, u, {BYTES_PER_ELEMENT: e}), o(o.S + o.F * a(function () { + m.of.call(p, 1) + }), u, { + from: Pt, + of: Lt + }), "BYTES_PER_ELEMENT" in S || h(S, "BYTES_PER_ELEMENT", e), o(o.P, u, It), z(u), o(o.P + o.F * St, u, {set: zt}), o(o.P + o.F * !L, u, Ft), r || S.toString == ht || (S.toString = ht), o(o.P + o.F * a(function () { + new p(1).slice() + }), u, {slice: Bt}), o(o.P + o.F * (a(function () { + return [1, 2].toLocaleString() != new p([1, 2]).toLocaleString() + }) || !a(function () { + S.toLocaleString.call([1, 2]) + })), u, {toLocaleString: Rt}), I[u] = L ? P : O, r || L || h(S, pt, O) + } + } else t.exports = function () { + } +}, function (t, e, n) { + "use strict"; + (function (e, r) { + function i(t, e) { + t = "string" == typeof t ? {ec_level: t} : t || {}; + var n = {type: String(e || t.type || "png").toLowerCase()}, r = "png" == n.type ? d : p; + for (var i in r) n[i] = i in t ? t[i] : r[i]; + return n + } + + function a(t, n) { + n = i(n); + var r = u(t, n.ec_level, n.parse_url), a = new l; + switch (a._read = h, n.type) { + case"svg": + case"pdf": + case"eps": + e.nextTick(function () { + f[n.type](r, a, n.margin, n.size) + }); + break; + case"svgpath": + e.nextTick(function () { + var t = f.svg_object(r, n.margin, n.size); + a.push(t.path), a.push(null) + }); + break; + case"png": + default: + e.nextTick(function () { + var t = c.bitmap(r, n.size, n.margin); + n.customize && n.customize(t), c.png(t, a) + }) + } + return a + } + + function o(t, e) { + e = i(e); + var n, a = u(t, e.ec_level, e.parse_url), o = []; + switch (e.type) { + case"svg": + case"pdf": + case"eps": + f[e.type](a, o, e.margin, e.size), n = o.filter(Boolean).join(""); + break; + case"png": + default: + var s = c.bitmap(a, e.size, e.margin); + e.customize && e.customize(s), c.png(s, o), n = r.concat(o.filter(Boolean)) + } + return n + } + + function s(t, e) { + e = i(e, "svg"); + var n = u(t, e.ec_level); + return f.svg_object(n, e.margin) + } + + var l = n(833).Readable, u = n(823).QR, c = n(822), f = n(824), h = function () { + }, d = {parse_url: !1, ec_level: "M", size: 5, margin: 4, customize: null}, + p = {parse_url: !1, ec_level: "M", margin: 1, size: 0}; + t.exports = {matrix: u, image: a, imageSync: o, svgObject: s} + }).call(e, n(110), n(95).Buffer) +}, function (t, e) { + var n; + n = function () { + return this + }(); + try { + n = n || Function("return this")() || (0, eval)("this") + } catch (t) { + "object" == typeof window && (n = window) + } + t.exports = n +}, , function (t, e, n) { + t.exports = !n(164)(function () { + return 7 != Object.defineProperty({}, "a", { + get: function () { + return 7 + } + }).a + }) +}, function (t, e, n) { + var r = n(84)("unscopables"), i = Array.prototype; + void 0 == i[r] && n(99)(i, r, {}), t.exports = function (t) { + i[r][t] = !0 + } +}, function (t, e, n) { + var r = n(151)("meta"), i = n(82), a = n(98), o = n(87).f, s = 0, l = Object.isExtensible || function () { + return !0 + }, u = !n(81)(function () { + return l(Object.preventExtensions({})) + }), c = function (t) { + o(t, r, {value: {i: "O" + ++s, w: {}}}) + }, f = function (t, e) { + if (!i(t)) return "symbol" == typeof t ? t : ("string" == typeof t ? "S" : "P") + t; + if (!a(t, r)) { + if (!l(t)) return "F"; + if (!e) return "E"; + c(t) + } + return t[r].i + }, h = function (t, e) { + if (!a(t, r)) { + if (!l(t)) return !0; + if (!e) return !1; + c(t) + } + return t[r].w + }, d = function (t) { + return u && p.NEED && l(t) && !a(t, r) && c(t), t + }, p = t.exports = {KEY: r, NEED: !1, fastKey: f, getWeak: h, onFreeze: d} +}, function (t, e, n) { + var r = n(332), i = n(247); + t.exports = Object.keys || function (t) { + return r(t, i) + } +}, function (t, e, n) { + "use strict"; + + function r(t, e) { + return Object.prototype.hasOwnProperty.call(t, e) + } + + var i = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Int32Array; + e.assign = function (t) { + for (var e = Array.prototype.slice.call(arguments, 1); e.length;) { + var n = e.shift(); + if (n) { + if ("object" != typeof n) throw new TypeError(n + "must be non-object"); + for (var i in n) r(n, i) && (t[i] = n[i]) + } + } + return t + }, e.shrinkBuf = function (t, e) { + return t.length === e ? t : t.subarray ? t.subarray(0, e) : (t.length = e, t) + }; + var a = { + arraySet: function (t, e, n, r, i) { + if (e.subarray && t.subarray) return void t.set(e.subarray(n, n + r), i); + for (var a = 0; a < r; a++) t[i + a] = e[n + a] + }, flattenChunks: function (t) { + var e, n, r, i, a, o; + for (r = 0, e = 0, n = t.length; e < n; e++) r += t[e].length; + for (o = new Uint8Array(r), i = 0, e = 0, n = t.length; e < n; e++) a = t[e], o.set(a, i), i += a.length; + return o + } + }, o = { + arraySet: function (t, e, n, r, i) { + for (var a = 0; a < r; a++) t[i + a] = e[n + a] + }, flattenChunks: function (t) { + return [].concat.apply([], t) + } + }; + e.setTyped = function (t) { + t ? (e.Buf8 = Uint8Array, e.Buf16 = Uint16Array, e.Buf32 = Int32Array, e.assign(e, a)) : (e.Buf8 = Array, e.Buf16 = Array, e.Buf32 = Array, e.assign(e, o)) + }, e.setTyped(i) +}, , , , , , , , , function (t, e) { + var n = {}.hasOwnProperty; + t.exports = function (t, e) { + return n.call(t, e) + } +}, function (t, e, n) { + var r = n(119), i = n(179); + t.exports = n(126) ? function (t, e, n) { + return r.f(t, e, i(1, n)) + } : function (t, e, n) { + return t[e] = n, t + } +}, function (t, e, n) { + var r = n(306), i = n(229); + t.exports = Object.keys || function (t) { + return r(t, i) + } +}, function (t, e) { + t.exports = function (t, e, n, r) { + if (!(t instanceof e) || void 0 !== r && r in t) throw TypeError(n + ": incorrect invocation!"); + return t + } +}, function (t, e, n) { + var r = n(107), i = n(324), a = n(251), o = n(78), s = n(88), l = n(267), u = {}, c = {}, + e = t.exports = function (t, e, n, f, h) { + var d, p, v, g, m = h ? function () { + return t + } : l(t), _ = r(n, f, e ? 2 : 1), y = 0; + if ("function" != typeof m) throw TypeError(t + " is not iterable!"); + if (a(m)) { + for (d = s(t.length); d > y; y++) if ((g = e ? _(o(p = t[y])[0], p[1]) : _(t[y])) === u || g === c) return g + } else for (v = m.call(t); !(p = v.next()).done;) if ((g = i(v, _, p.value, e)) === u || g === c) return g + }; + e.BREAK = u, e.RETURN = c +}, function (t, e) { + t.exports = !1 +}, function (t, e, n) { + var r = n(78), i = n(330), a = n(247), o = n(259)("IE_PROTO"), s = function () { + }, l = function () { + var t, e = n(246)("iframe"), r = a.length; + for (e.style.display = "none", n(249).appendChild(e), e.src = "javascript:", t = e.contentWindow.document, t.open(), t.write(" \ No newline at end of file diff --git a/static/chart_main/static/tv-chart.82ee311dc10bb182c736.html b/static/chart_main/static/tv-chart.82ee311dc10bb182c736.html new file mode 100644 index 0000000..60c94a3 --- /dev/null +++ b/static/chart_main/static/tv-chart.82ee311dc10bb182c736.html @@ -0,0 +1,135 @@ + + + + + + + + + + + +
+
+
+
时间
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
涨跌额
+
+
+
+
涨跌幅
+
+
+
+
成交量
+
+
+ +
+ + + + + + + + diff --git a/static/chart_main/ws.js b/static/chart_main/ws.js new file mode 100644 index 0000000..7cc2381 --- /dev/null +++ b/static/chart_main/ws.js @@ -0,0 +1,230 @@ +"use strict"; + + +function _instanceof(left, right) { if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) { return !!right[Symbol.hasInstance](left); } else { return left instanceof right; } } + +function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } + +function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } + +function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } + +function _classCallCheck(instance, Constructor) { if (!_instanceof(instance, Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } + +function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } + +var Ws = /*#__PURE__*/function () { + function Ws(ws, data) { + var _this = this; + + _classCallCheck(this, Ws); + + // [{url, data, method...},,,,] + this._ws = ws; + this._data = data; // 待发送的消息列 + + this._msgs = []; + this.socket = this.doLink(); + this.doOpen(); // 订阅/发布模型 + + this._events = {}; // 是否保持连接 + + this._isLink = true; // 循环检查 + + setInterval(function () { + if (_this._isLink) { + if (_this.socket.readyState == 2 || _this.socket.readyState == 3) { + _this.resetLink(); + } + } + }, 3000); + } // 重连 + + + _createClass(Ws, [{ + key: "resetLink", + value: function resetLink() { + this.socket = this.doLink(); + this.doOpen(); + } // 连接 + + }, { + key: "doLink", + value: function doLink() { + var ws = new WebSocket( this._ws); + return ws; + } + }, { + key: "doOpen", + value: function doOpen() { + var _this2 = this; + + this.socket.addEventListener('open',function (ev) { + _this2.onOpen(ev); + }); + this.socket.addEventListener('message',function (ev) { + _this2.onMessage(ev); + }); + this.socket.addEventListener('close',function (ev) { + _this2.onClose(ev); + }); + this.socket.addEventListener('error',function (ev) { + _this2.onError(ev); + }); + } // 打开 + + }, { + key: "onOpen", + value: function onOpen() { + var _this3 = this; + + // 打开时重发未发出的消息 + var list = Object.assign([], this._msgs); + list.forEach(function (item) { + if (_this3.send(item)) { + var idx = _this3._msgs.indexOf(item); + + if (idx != -1) { + _this3._msgs.splice(idx, 1); + } + } + }); + } // 手动关闭 + + }, { + key: "doClose", + value: function doClose() { + this._isLink = false; + this._events = {}; + this._msgs = []; + this.socket.close({ + success: function success() { + console.log('socket close success'); + } + }); + } // 添加监听 + + }, { + key: "on", + value: function on(name, handler) { + this.subscribe(name, handler); + } // 取消监听 + + }, { + key: "off", + value: function off(name, handler) { + this.unsubscribe(name, handler); + } // 关闭事件 + + }, { + key: "onClose", + value: function onClose() { + var _this4 = this; + + // 是否重新连接 + if (this._isLink) { + setTimeout(function () { + _this4.resetLink(); + }, 3000); + } + } // 错误 + + }, { + key: "onError", + value: function onError(evt) { + this.Notify({ + Event: 'error', + Data: evt + }); + } // 接受数据 + + }, { + key: "onMessage", + value: function onMessage(evt) { + try { + // 解析推送的数据 + var data = JSON.parse(evt.data); // 通知订阅者 + + this.Notify({ + Event: 'message', + Data: data + }); + } catch (err) { + console.error(' >> Data parsing error:', err); // 通知订阅者 + + this.Notify({ + Event: 'error', + Data: err + }); + } + } // 订阅事件的方法 + + }, { + key: "subscribe", + value: function subscribe(name, handler) { + if (this._events.hasOwnProperty(name)) { + this._events[name].push(handler); // 追加事件 + + } else { + this._events[name] = [handler]; // 添加事件 + } + } // 取消订阅事件 + + }, { + key: "unsubscribe", + value: function unsubscribe(name, handler) { + var start = this._events[name].findIndex(function (item) { + return item === handler; + }); // 删除该事件 + + + this._events[name].splice(start, 1); + } // 发布后通知订阅者 + + }, { + key: "Notify", + value: function Notify(entry) { + // 检查是否有订阅者 返回队列 + var cbQueue = this._events[entry.Event]; + + if (cbQueue && cbQueue.length) { + var _iterator = _createForOfIteratorHelper(cbQueue), + _step; + + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var callback = _step.value; + if (_instanceof(callback, Function)) callback(entry.Data); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + } + } // 发送消息 + + }, { + key: "send", + value: function send(data) { + if (this.socket.readyState == 1) { + this.socket.send(JSON.stringify(data)); + return true; + } else { + // 保存到待发送信息 + if (!this._msgs.includes(data)) { + this._msgs.push(data); + } + + ; + return false; + } + } + }]); + + return Ws; +}(); + +window.Ws = Ws; \ No newline at end of file diff --git a/static/img/13.png b/static/img/13.png new file mode 100644 index 0000000..1ecf716 Binary files /dev/null and b/static/img/13.png differ diff --git a/static/img/13@2x.png b/static/img/13@2x.png new file mode 100644 index 0000000..5d139c1 Binary files /dev/null and b/static/img/13@2x.png differ diff --git a/static/img/4.png b/static/img/4.png new file mode 100644 index 0000000..b3114b5 Binary files /dev/null and b/static/img/4.png differ diff --git a/static/img/4@2x.png b/static/img/4@2x.png new file mode 100644 index 0000000..2557297 Binary files /dev/null and b/static/img/4@2x.png differ diff --git a/static/img/5.png b/static/img/5.png new file mode 100644 index 0000000..4689bc5 Binary files /dev/null and b/static/img/5.png differ diff --git a/static/img/6.png b/static/img/6.png new file mode 100644 index 0000000..a4389ea Binary files /dev/null and b/static/img/6.png differ diff --git a/static/img/8.png b/static/img/8.png new file mode 100644 index 0000000..e6d5cfd Binary files /dev/null and b/static/img/8.png differ diff --git a/static/img/8@2x.png b/static/img/8@2x.png new file mode 100644 index 0000000..bc34b0d Binary files /dev/null and b/static/img/8@2x.png differ diff --git a/static/img/Page1.png b/static/img/Page1.png new file mode 100644 index 0000000..a30ef6e Binary files /dev/null and b/static/img/Page1.png differ diff --git a/static/img/Page10.png b/static/img/Page10.png new file mode 100644 index 0000000..00a607b Binary files /dev/null and b/static/img/Page10.png differ diff --git a/static/img/Page2.png b/static/img/Page2.png new file mode 100644 index 0000000..d941a54 Binary files /dev/null and b/static/img/Page2.png differ diff --git a/static/img/Page3.png b/static/img/Page3.png new file mode 100644 index 0000000..a49f756 Binary files /dev/null and b/static/img/Page3.png differ diff --git a/static/img/Page4.png b/static/img/Page4.png new file mode 100644 index 0000000..564ee44 Binary files /dev/null and b/static/img/Page4.png differ diff --git a/static/img/Page5.png b/static/img/Page5.png new file mode 100644 index 0000000..cb8fbe3 Binary files /dev/null and b/static/img/Page5.png differ diff --git a/static/img/Page6 b/static/img/Page6 new file mode 100644 index 0000000..0ca3690 Binary files /dev/null and b/static/img/Page6 differ diff --git a/static/img/Page6.png b/static/img/Page6.png new file mode 100644 index 0000000..060b10b Binary files /dev/null and b/static/img/Page6.png differ diff --git a/static/img/Page7.png b/static/img/Page7.png new file mode 100644 index 0000000..1847976 Binary files /dev/null and b/static/img/Page7.png differ diff --git a/static/img/Page8.png b/static/img/Page8.png new file mode 100644 index 0000000..48a1cad Binary files /dev/null and b/static/img/Page8.png differ diff --git a/static/img/Page9.png b/static/img/Page9.png new file mode 100644 index 0000000..56636fb Binary files /dev/null and b/static/img/Page9.png differ diff --git a/static/img/Turn.png b/static/img/Turn.png new file mode 100644 index 0000000..ae5c6d2 Binary files /dev/null and b/static/img/Turn.png differ diff --git a/static/img/active_tips.png b/static/img/active_tips.png new file mode 100644 index 0000000..fa9f152 Binary files /dev/null and b/static/img/active_tips.png differ diff --git a/static/img/antOutline.png b/static/img/antOutline.png new file mode 100644 index 0000000..501360a Binary files /dev/null and b/static/img/antOutline.png differ diff --git a/static/img/auth_fanmian.png b/static/img/auth_fanmian.png new file mode 100644 index 0000000..a10a4da Binary files /dev/null and b/static/img/auth_fanmian.png differ diff --git a/static/img/auth_shouchi.png b/static/img/auth_shouchi.png new file mode 100644 index 0000000..fd36b97 Binary files /dev/null and b/static/img/auth_shouchi.png differ diff --git a/static/img/auth_zhengmain.png b/static/img/auth_zhengmain.png new file mode 100644 index 0000000..e082cd8 Binary files /dev/null and b/static/img/auth_zhengmain.png differ diff --git a/static/img/b.png b/static/img/b.png new file mode 100644 index 0000000..1c7a4a1 Binary files /dev/null and b/static/img/b.png differ diff --git a/static/img/base_assets_0.png b/static/img/base_assets_0.png new file mode 100644 index 0000000..a18bd2e Binary files /dev/null and b/static/img/base_assets_0.png differ diff --git a/static/img/base_assets_1.png b/static/img/base_assets_1.png new file mode 100644 index 0000000..db86b3e Binary files /dev/null and b/static/img/base_assets_1.png differ diff --git a/static/img/base_caidan_0.png b/static/img/base_caidan_0.png new file mode 100644 index 0000000..5e38fd4 Binary files /dev/null and b/static/img/base_caidan_0.png differ diff --git a/static/img/base_caidan_1.png b/static/img/base_caidan_1.png new file mode 100644 index 0000000..c1c9bcf Binary files /dev/null and b/static/img/base_caidan_1.png differ diff --git a/static/img/base_home_0.png b/static/img/base_home_0.png new file mode 100644 index 0000000..16762bc Binary files /dev/null and b/static/img/base_home_0.png differ diff --git a/static/img/base_home_1.png b/static/img/base_home_1.png new file mode 100644 index 0000000..d300183 Binary files /dev/null and b/static/img/base_home_1.png differ diff --git a/static/img/base_link_0.png b/static/img/base_link_0.png new file mode 100644 index 0000000..e5b9166 Binary files /dev/null and b/static/img/base_link_0.png differ diff --git a/static/img/base_link_1.png b/static/img/base_link_1.png new file mode 100644 index 0000000..9d27922 Binary files /dev/null and b/static/img/base_link_1.png differ diff --git a/static/img/base_otc_0.png b/static/img/base_otc_0.png new file mode 100644 index 0000000..ad3b78f Binary files /dev/null and b/static/img/base_otc_0.png differ diff --git a/static/img/base_otc_1.png b/static/img/base_otc_1.png new file mode 100644 index 0000000..883af2c Binary files /dev/null and b/static/img/base_otc_1.png differ diff --git a/static/img/base_qukuai_0.png b/static/img/base_qukuai_0.png new file mode 100644 index 0000000..7d728fa Binary files /dev/null and b/static/img/base_qukuai_0.png differ diff --git a/static/img/base_qukuai_1.png b/static/img/base_qukuai_1.png new file mode 100644 index 0000000..0d92ce9 Binary files /dev/null and b/static/img/base_qukuai_1.png differ diff --git a/static/img/bgb.png b/static/img/bgb.png new file mode 100644 index 0000000..ee4514e Binary files /dev/null and b/static/img/bgb.png differ diff --git a/static/img/bgb2.png b/static/img/bgb2.png new file mode 100644 index 0000000..fc9db20 Binary files /dev/null and b/static/img/bgb2.png differ diff --git a/static/img/bgb3.png b/static/img/bgb3.png new file mode 100644 index 0000000..4982d5e Binary files /dev/null and b/static/img/bgb3.png differ diff --git a/static/img/bgb33.png b/static/img/bgb33.png new file mode 100644 index 0000000..54a004b Binary files /dev/null and b/static/img/bgb33.png differ diff --git a/static/img/bgb4.png b/static/img/bgb4.png new file mode 100644 index 0000000..d6744a2 Binary files /dev/null and b/static/img/bgb4.png differ diff --git a/static/img/bgb5.png b/static/img/bgb5.png new file mode 100644 index 0000000..c3bc176 Binary files /dev/null and b/static/img/bgb5.png differ diff --git a/static/img/bgshare.png b/static/img/bgshare.png new file mode 100644 index 0000000..4bdd953 Binary files /dev/null and b/static/img/bgshare.png differ diff --git a/static/img/border_bottom.png b/static/img/border_bottom.png new file mode 100644 index 0000000..727a514 Binary files /dev/null and b/static/img/border_bottom.png differ diff --git a/static/img/border_bottom_g.png b/static/img/border_bottom_g.png new file mode 100644 index 0000000..0dc75d7 Binary files /dev/null and b/static/img/border_bottom_g.png differ diff --git a/static/img/che.png b/static/img/che.png new file mode 100644 index 0000000..c578336 Binary files /dev/null and b/static/img/che.png differ diff --git a/static/img/down.png b/static/img/down.png new file mode 100644 index 0000000..9daf3af Binary files /dev/null and b/static/img/down.png differ diff --git a/static/img/fill1.png b/static/img/fill1.png new file mode 100644 index 0000000..1d9033f Binary files /dev/null and b/static/img/fill1.png differ diff --git a/static/img/fill2.png b/static/img/fill2.png new file mode 100644 index 0000000..2848838 Binary files /dev/null and b/static/img/fill2.png differ diff --git a/static/img/fill3.png b/static/img/fill3.png new file mode 100644 index 0000000..0ba04ea Binary files /dev/null and b/static/img/fill3.png differ diff --git a/static/img/fill4.png b/static/img/fill4.png new file mode 100644 index 0000000..8485ac1 Binary files /dev/null and b/static/img/fill4.png differ diff --git a/static/img/fill5.png b/static/img/fill5.png new file mode 100644 index 0000000..f4dd80a Binary files /dev/null and b/static/img/fill5.png differ diff --git a/static/img/fill6.png b/static/img/fill6.png new file mode 100644 index 0000000..440af26 Binary files /dev/null and b/static/img/fill6.png differ diff --git a/static/img/fill7.png b/static/img/fill7.png new file mode 100644 index 0000000..95c13bd Binary files /dev/null and b/static/img/fill7.png differ diff --git a/static/img/homehuiyuan.png b/static/img/homehuiyuan.png new file mode 100644 index 0000000..a6cf261 Binary files /dev/null and b/static/img/homehuiyuan.png differ diff --git a/static/img/homekuanggong.png b/static/img/homekuanggong.png new file mode 100644 index 0000000..96d666f Binary files /dev/null and b/static/img/homekuanggong.png differ diff --git a/static/img/homeqiquanicon.png b/static/img/homeqiquanicon.png new file mode 100644 index 0000000..d014e05 Binary files /dev/null and b/static/img/homeqiquanicon.png differ diff --git a/static/img/homexueyuan.png b/static/img/homexueyuan.png new file mode 100644 index 0000000..c9abd6c Binary files /dev/null and b/static/img/homexueyuan.png differ diff --git a/static/img/hua.png b/static/img/hua.png new file mode 100644 index 0000000..c617f66 Binary files /dev/null and b/static/img/hua.png differ diff --git a/static/img/index/base_assets_0.png b/static/img/index/base_assets_0.png new file mode 100644 index 0000000..a6f9070 Binary files /dev/null and b/static/img/index/base_assets_0.png differ diff --git a/static/img/index/base_assets_1.png b/static/img/index/base_assets_1.png new file mode 100644 index 0000000..71f6cbf Binary files /dev/null and b/static/img/index/base_assets_1.png differ diff --git a/static/img/index/base_caidan_0.png b/static/img/index/base_caidan_0.png new file mode 100644 index 0000000..2bf3446 Binary files /dev/null and b/static/img/index/base_caidan_0.png differ diff --git a/static/img/index/base_caidan_1.png b/static/img/index/base_caidan_1.png new file mode 100644 index 0000000..c780234 Binary files /dev/null and b/static/img/index/base_caidan_1.png differ diff --git a/static/img/index/base_home_0.png b/static/img/index/base_home_0.png new file mode 100644 index 0000000..db329de Binary files /dev/null and b/static/img/index/base_home_0.png differ diff --git a/static/img/index/base_home_1.png b/static/img/index/base_home_1.png new file mode 100644 index 0000000..1134535 Binary files /dev/null and b/static/img/index/base_home_1.png differ diff --git a/static/img/index/base_link_0.png b/static/img/index/base_link_0.png new file mode 100644 index 0000000..92248fa Binary files /dev/null and b/static/img/index/base_link_0.png differ diff --git a/static/img/index/base_link_1.png b/static/img/index/base_link_1.png new file mode 100644 index 0000000..b461852 Binary files /dev/null and b/static/img/index/base_link_1.png differ diff --git a/static/img/initve.png b/static/img/initve.png new file mode 100644 index 0000000..3ad6f35 Binary files /dev/null and b/static/img/initve.png differ diff --git a/static/img/invite-1.png b/static/img/invite-1.png new file mode 100644 index 0000000..76152ad Binary files /dev/null and b/static/img/invite-1.png differ diff --git a/static/img/invite-2.png b/static/img/invite-2.png new file mode 100644 index 0000000..ec4a300 Binary files /dev/null and b/static/img/invite-2.png differ diff --git a/static/img/invite-3.png b/static/img/invite-3.png new file mode 100644 index 0000000..757b82f Binary files /dev/null and b/static/img/invite-3.png differ diff --git a/static/img/invite-4.png b/static/img/invite-4.png new file mode 100644 index 0000000..0653bb9 Binary files /dev/null and b/static/img/invite-4.png differ diff --git a/static/img/invite-5.png b/static/img/invite-5.png new file mode 100644 index 0000000..fd89b98 Binary files /dev/null and b/static/img/invite-5.png differ diff --git a/static/img/invite-6.png b/static/img/invite-6.png new file mode 100644 index 0000000..4f21cf3 Binary files /dev/null and b/static/img/invite-6.png differ diff --git a/static/img/invite-bg.png b/static/img/invite-bg.png new file mode 100644 index 0000000..023d99d Binary files /dev/null and b/static/img/invite-bg.png differ diff --git a/static/img/invite-bg1.png b/static/img/invite-bg1.png new file mode 100644 index 0000000..c3ebcf9 Binary files /dev/null and b/static/img/invite-bg1.png differ diff --git a/static/img/invite-fy.png b/static/img/invite-fy.png new file mode 100644 index 0000000..5c1dc9c Binary files /dev/null and b/static/img/invite-fy.png differ diff --git a/static/img/invite-sy.png b/static/img/invite-sy.png new file mode 100644 index 0000000..21c1834 Binary files /dev/null and b/static/img/invite-sy.png differ diff --git a/static/img/invite-tg.png b/static/img/invite-tg.png new file mode 100644 index 0000000..658733d Binary files /dev/null and b/static/img/invite-tg.png differ diff --git a/static/img/invite-yq.png b/static/img/invite-yq.png new file mode 100644 index 0000000..18df6d1 Binary files /dev/null and b/static/img/invite-yq.png differ diff --git a/static/img/ke.png b/static/img/ke.png new file mode 100644 index 0000000..b6aef95 Binary files /dev/null and b/static/img/ke.png differ diff --git a/static/img/light/Page1.png b/static/img/light/Page1.png new file mode 100644 index 0000000..a30ef6e Binary files /dev/null and b/static/img/light/Page1.png differ diff --git a/static/img/light/Page10.png b/static/img/light/Page10.png new file mode 100644 index 0000000..00a607b Binary files /dev/null and b/static/img/light/Page10.png differ diff --git a/static/img/light/Page2.png b/static/img/light/Page2.png new file mode 100644 index 0000000..d941a54 Binary files /dev/null and b/static/img/light/Page2.png differ diff --git a/static/img/light/Page3.png b/static/img/light/Page3.png new file mode 100644 index 0000000..a49f756 Binary files /dev/null and b/static/img/light/Page3.png differ diff --git a/static/img/light/Page4.png b/static/img/light/Page4.png new file mode 100644 index 0000000..564ee44 Binary files /dev/null and b/static/img/light/Page4.png differ diff --git a/static/img/light/Page5.png b/static/img/light/Page5.png new file mode 100644 index 0000000..cb8fbe3 Binary files /dev/null and b/static/img/light/Page5.png differ diff --git a/static/img/light/Page6.png b/static/img/light/Page6.png new file mode 100644 index 0000000..060b10b Binary files /dev/null and b/static/img/light/Page6.png differ diff --git a/static/img/light/Page7.png b/static/img/light/Page7.png new file mode 100644 index 0000000..1847976 Binary files /dev/null and b/static/img/light/Page7.png differ diff --git a/static/img/light/Page8.png b/static/img/light/Page8.png new file mode 100644 index 0000000..ae8bfba Binary files /dev/null and b/static/img/light/Page8.png differ diff --git a/static/img/light/Page9.png b/static/img/light/Page9.png new file mode 100644 index 0000000..5266282 Binary files /dev/null and b/static/img/light/Page9.png differ diff --git a/static/img/light/Turn.png b/static/img/light/Turn.png new file mode 100644 index 0000000..ae5c6d2 Binary files /dev/null and b/static/img/light/Turn.png differ diff --git a/static/img/light/bgb3.png b/static/img/light/bgb3.png new file mode 100644 index 0000000..a0e5306 Binary files /dev/null and b/static/img/light/bgb3.png differ diff --git a/static/img/light/fill3.png b/static/img/light/fill3.png new file mode 100644 index 0000000..4186c5d Binary files /dev/null and b/static/img/light/fill3.png differ diff --git a/static/img/light/fill4.png b/static/img/light/fill4.png new file mode 100644 index 0000000..54840a3 Binary files /dev/null and b/static/img/light/fill4.png differ diff --git a/static/img/light/fill5.png b/static/img/light/fill5.png new file mode 100644 index 0000000..cc62080 Binary files /dev/null and b/static/img/light/fill5.png differ diff --git a/static/img/logo.png b/static/img/logo.png new file mode 100644 index 0000000..effcc12 Binary files /dev/null and b/static/img/logo.png differ diff --git a/static/img/moon.png b/static/img/moon.png new file mode 100644 index 0000000..cfd84b4 Binary files /dev/null and b/static/img/moon.png differ diff --git a/static/img/notData.png b/static/img/notData.png new file mode 100644 index 0000000..92f99ce Binary files /dev/null and b/static/img/notData.png differ diff --git a/static/img/pages1.png b/static/img/pages1.png new file mode 100644 index 0000000..2f7a995 Binary files /dev/null and b/static/img/pages1.png differ diff --git a/static/img/pages2.png b/static/img/pages2.png new file mode 100644 index 0000000..36c75e4 Binary files /dev/null and b/static/img/pages2.png differ diff --git a/static/img/pages3.png b/static/img/pages3.png new file mode 100644 index 0000000..0c3396e Binary files /dev/null and b/static/img/pages3.png differ diff --git a/static/img/pages4.png b/static/img/pages4.png new file mode 100644 index 0000000..6164a1d Binary files /dev/null and b/static/img/pages4.png differ diff --git a/static/img/pages5.png b/static/img/pages5.png new file mode 100644 index 0000000..9fd3f8e Binary files /dev/null and b/static/img/pages5.png differ diff --git a/static/img/pages6.png b/static/img/pages6.png new file mode 100644 index 0000000..ef80adc Binary files /dev/null and b/static/img/pages6.png differ diff --git a/static/img/rbox.png b/static/img/rbox.png new file mode 100644 index 0000000..b82bea9 Binary files /dev/null and b/static/img/rbox.png differ diff --git a/static/img/right.png b/static/img/right.png new file mode 100644 index 0000000..cff634d Binary files /dev/null and b/static/img/right.png differ diff --git a/static/img/share.png b/static/img/share.png new file mode 100644 index 0000000..1666ff5 Binary files /dev/null and b/static/img/share.png differ diff --git a/static/img/sun.png b/static/img/sun.png new file mode 100644 index 0000000..2060cec Binary files /dev/null and b/static/img/sun.png differ diff --git a/static/img/tt.png b/static/img/tt.png new file mode 100644 index 0000000..110cd2d Binary files /dev/null and b/static/img/tt.png differ diff --git a/static/img/vs.png b/static/img/vs.png new file mode 100644 index 0000000..a175536 Binary files /dev/null and b/static/img/vs.png differ diff --git a/static/service.html b/static/service.html new file mode 100644 index 0000000..a2f281f --- /dev/null +++ b/static/service.html @@ -0,0 +1,20 @@ + + + + + + + 在线客服 + + + + + + + + \ No newline at end of file diff --git a/static/tradingview.html b/static/tradingview.html new file mode 100644 index 0000000..4efdcc4 --- /dev/null +++ b/static/tradingview.html @@ -0,0 +1,31 @@ + + + + + + tradingview + + + +
+ + + + + + + + diff --git a/static/uni.ttf b/static/uni.ttf new file mode 100644 index 0000000..60a1968 Binary files /dev/null and b/static/uni.ttf differ diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..bd91baf --- /dev/null +++ b/store/index.js @@ -0,0 +1,245 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import Setting from "@/api/setting"; +import i18n from "@/i18n"; +import Socket from '@/api/serve/market-socket' +import themeStyle from '@/plugins/theme-style' +import app from '@/app' + +let socket = new Socket(app.socketUrl) +socket.on('message', (evt) => { + if (evt.type == 'ping') { + socket.send({cmd: 'pong'}) + } +}) +let socket1 = new Socket(app.socketUrl1) +socket1.on('message', (evt) => { + if (evt.cmd == 'ping') { + socket1.send({cmd: 'pong'}) + } +}) +Vue.use(Vuex) + +if (uni.getStorageSync('language') == 'cn') { + uni.setStorageSync('language', 'zh-CN') +} + +function defaultTheme() { + // return `dark` + // // 获取当前时间 + // let timeNow = new Date(); + // // 获取当前小时 + // let hours = timeNow.getHours(); + // // 设置默认文字 + // let state = ``; + // // 判断当前时间段 + + // if (hours >= 19 || hours <= 7) { + // state = `dark`; + // } else { + // state = `light`; + // } + uni.setStorageSync('theme', 'dark'); + let state = `dark` + return state; +} + +// #ifdef APP-PLUS +plus.runtime.getProperty(plus.runtime.appid, function (wgtinfo) { + uni.setStorageSync('version', wgtinfo.version) +}); +// #endif +let store = new Vuex.Store({ + state: { + // 切换动画 + fade: '', + // 区号列表 + countryList: [], + token: uni.getStorageSync('token'), + user: (() => { + if (!uni.getStorageSync('user')) return {}; + return JSON.parse(uni.getStorageSync('user')) + })(), + ws: socket, + ws1: socket1, + wsState: false, + hideMoney: uni.getStorageSync('hideMoney') == 'true', + // logo + logoMap: (() => { + if (!uni.getStorageSync('logoMap')) return {}; + return JSON.parse(uni.getStorageSync('logoMap')) + })(), + lang: uni.getStorageSync('language') || 'en', + // lang:'en', + version: uni.getStorageSync('version'), + langList: [ + + { + value: 'en', + label: 'English' + }, + // { + // value: 'zh-CN', + // label: '简体中文' + // }, + { + value: 'kor', + label: '한국어' + }, + { + value: 'de', + label: 'Deutsch' + }, + { + value: 'fra', + label: 'Français' + }, + { + value: 'spa', + label: 'Español' + }, + { + value: 'it', + label: 'Italiano' + }, + { + value: 'jp', + label: '日本語' + }, + { + value: 'pt', + label: 'Português' + }, + { + value: 'tr', + label: 'Türk' + }, + // { + // value: 'ukr', + // label: 'УкраїнськаName' + // }, + // { + // value: 'swe', + // label: 'Svenska' + // }, + // { + // value: 'fin', + // label: 'Suomi' + // }, + // { + // value: 'pl', + // label: 'Polski' + // }, + + { + value: 'zh-TW', + label: '繁體中文' + }, + ], + // 主题 + theme: uni.getStorageSync('theme') || defaultTheme(), + // 自定义页面下标 + pageIdx: 0 + }, + getters: { + themeStyle(state) { + return themeStyle[state.theme] + } + }, + mutations: { + FADE(state, data) { + state.fade = data + }, + COUNTRYLIST(state, data) { + state.countryList = data + }, + TOKEN(state, data) { + uni.setStorageSync('token', data) + state.token = data + }, + USER(state, data) { + uni.setStorageSync('user', JSON.stringify(data)) + state.user = data + }, + HIDEMONEY(state, data) { + uni.setStorageSync('hideMoney', data) + state.hideMoney = data + }, + LOGOMAP(state, data) { + uni.setStorageSync('logoMap', JSON.stringify(data)) + state.logoMap = data + }, + LANG(state, data) { + uni.setStorageSync('language', data) + i18n.locale = data + state.lang = data + }, + VANTLANG(state, data) { + let name = 'zh-CN' + }, + THEME(state, data) { + state.theme = data + uni.setStorageSync('theme', data) + }, + PAGEIDX(state, data) { + state.pageIdx++ + } + }, + actions: { + // 页面返回事件 + fadeOut({commit}) { + commit('FADE', 'fade-out') + setTimeout(() => { + commit('FADE', 'fade-in') + }, 300); + }, + // 设置区号 + countryList({commit}, data) { + commit('COUNTRYLIST', data) + }, + + token({commit}, data) { + commit('TOKEN', data) + }, + // 设置用户信息 (登录处) + user({commit}, data) { + commit('USER', data) + }, + // 过滤资金显示 + hideMoney({commit}, data) { + commit('HIDEMONEY', data) + }, + // 设置用户信息 + setUserInfo({commit}) { + Setting.getUserInfo().then(res => { + commit('USER', res.data) + }).catch(() => { + }) + }, + // 设置logo + logoMap({commit}, data) { + commit('LOGOMAP', data) + }, + // 设置当前语言 + setLang({commit}, data) { + commit('LANG', data) + commit('VANTLANG', data) + }, + // 设置主题 + setTheme({commit}, data) { + commit('THEME', data) + uni.setNavigationBarColor({ + frontColor: data == 'dark' ? '#ffffff' : '#000000', + backgroundColor: '#666666', + }) + }, + // 页面栈++ + setPageIdx({commit}, data) { + commit('PAGEIDX', data) + } + }, + modules: {} +}) + +export default store + diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..b0fc8f4 --- /dev/null +++ b/uni.scss @@ -0,0 +1,73 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#e5e5e5; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:24rpx; +$uni-font-size-base:28rpx; +$uni-font-size-lg:32rpx; + +/* 图片尺寸 */ +$uni-img-size-sm:40rpx; +$uni-img-size-base:52rpx; +$uni-img-size-lg:80rpx; + +/* Border Radius */ +$uni-border-radius-sm: 4rpx; +$uni-border-radius-base: 6rpx; +$uni-border-radius-lg: 12rpx; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 10px; +$uni-spacing-row-base: 20rpx; +$uni-spacing-row-lg: 30rpx; + +/* 垂直间距 */ +$uni-spacing-col-sm: 8rpx; +$uni-spacing-col-base: 16rpx; +$uni-spacing-col-lg: 24rpx; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:40rpx; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:36rpx; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:30rpx; + +@import './assets/scss/base.scss' + diff --git a/uni_modules/uni-data-select/changelog.md b/uni_modules/uni-data-select/changelog.md new file mode 100644 index 0000000..dd87dbb --- /dev/null +++ b/uni_modules/uni-data-select/changelog.md @@ -0,0 +1,33 @@ +## 1.0.5(2023-02-03) +- 修复 禁用时会显示清空按钮 +## 1.0.4(2023-02-02) +- 优化 查询条件短期内多次变更只查询最后一次变更后的结果 +- 调整 内部缓存键名调整为 uni-data-select-lastSelectedValue +## 1.0.3(2023-01-16) +- 修复 不关联服务空间报错的问题 +## 1.0.2(2023-01-14) +- 新增 属性 `format` 可用于格式化显示选项内容 +## 1.0.1(2022-12-06) +- 修复 当where变化时,数据不会自动更新的问题 +## 0.1.9(2022-09-05) +- 修复 微信小程序下拉框出现后选择会点击到蒙板后面的输入框 +## 0.1.8(2022-08-29) +- 修复 点击的位置不准确 +## 0.1.7(2022-08-12) +- 新增 支持 disabled 属性 +## 0.1.6(2022-07-06) +- 修复 pc端宽度异常的bug +## 0.1.5 +- 修复 pc端宽度异常的bug +## 0.1.4(2022-07-05) +- 优化 显示样式 +## 0.1.3(2022-06-02) +- 修复 localdata 赋值不生效的 bug +- 新增 支持 uni.scss 修改颜色 +- 新增 支持选项禁用(数据选项设置 disabled: true 即禁用) +## 0.1.2(2022-05-08) +- 修复 当 value 为 0 时选择不生效的 bug +## 0.1.1(2022-05-07) +- 新增 记住上次的选项(仅 collection 存在时有效) +## 0.1.0(2022-04-22) +- 初始化 diff --git a/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue new file mode 100644 index 0000000..f9456e5 --- /dev/null +++ b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue @@ -0,0 +1,502 @@ + + + + + diff --git a/uni_modules/uni-data-select/package.json b/uni_modules/uni-data-select/package.json new file mode 100644 index 0000000..e66999d --- /dev/null +++ b/uni_modules/uni-data-select/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-data-select", + "displayName": "uni-data-select 下拉框选择器", + "version": "1.0.5", + "description": "通过数据驱动的下拉框选择器", + "keywords": [ + "uni-ui", + "select", + "uni-data-select", + "下拉框", + "下拉选" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.1" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-load-more"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "u", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-data-select/readme.md b/uni_modules/uni-data-select/readme.md new file mode 100644 index 0000000..eb58de3 --- /dev/null +++ b/uni_modules/uni-data-select/readme.md @@ -0,0 +1,8 @@ +## DataSelect 下拉框选择器 +> **组件名:uni-data-select** +> 代码块: `uDataSelect` + +当选项过多时,使用下拉菜单展示并选择内容 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-select) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-datetime-picker/changelog.md b/uni_modules/uni-datetime-picker/changelog.md new file mode 100644 index 0000000..d737c8f --- /dev/null +++ b/uni_modules/uni-datetime-picker/changelog.md @@ -0,0 +1,130 @@ +## 2.2.21(2023-02-20) +- 修复 firefox 浏览器显示区域点击无法拉起日历弹框的Bug [详情](https://ask.dcloud.net.cn/question/163362) +## 2.2.20(2023-02-17) +- 优化 值为空依然选中当天问题 +- 优化 提供 default-value 属性支持配置选择器打开时默认显示的时间 +- 优化 非范围选择未选择日期时间,点击确认按钮选中当前日期时间 +- 优化 字节小程序日期时间范围选择,底部日期换行问题 +## 2.2.19(2023-02-09) +- 修复 2.2.18 引起范围选择配置 end 选择无效的Bug [详情](https://github.com/dcloudio/uni-ui/issues/686) +## 2.2.18(2023-02-08) +- 修复 移动端范围选择change事件触发异常的Bug [详情](https://github.com/dcloudio/uni-ui/issues/684) +- 优化 PC端输入日期格式错误时返回当前日期时间 +- 优化 PC端输入日期时间超出 start、end 限制的Bug +- 优化 移动端日期时间范围用法时间展示不完整问题 +## 2.2.17(2023-02-04) +- 修复 小程序端绑定 Date 类型报错的Bug [详情](https://github.com/dcloudio/uni-ui/issues/679) +- 修复 vue3 time-picker 无法显示绑定时分秒的Bug +## 2.2.16(2023-02-02) +- 修复 字节小程序报错的Bug +## 2.2.15(2023-02-02) +- 修复 某些情况切换月份错误的Bug +## 2.2.14(2023-01-30) +- 修复 某些情况切换月份错误的Bug [详情](https://ask.dcloud.net.cn/question/162033) +## 2.2.13(2023-01-10) +- 修复 多次加载组件造成内存占用的Bug +## 2.2.12(2022-12-01) +- 修复 vue3 下 i18n 国际化初始值不正确的Bug +## 2.2.11(2022-09-19) +- 修复 支付宝小程序样式错乱的Bug [详情](https://github.com/dcloudio/uni-app/issues/3861) +## 2.2.10(2022-09-19) +- 修复 反向选择日期范围,日期显示异常的Bug [详情](https://ask.dcloud.net.cn/question/153401?item_id=212892&rf=false) +## 2.2.9(2022-09-16) +- 可以使用 uni-scss 控制主题色 +## 2.2.8(2022-09-08) +- 修复 close事件无效的Bug +## 2.2.7(2022-09-05) +- 修复 移动端 maskClick 无效的Bug [详情](https://ask.dcloud.net.cn/question/140824) +## 2.2.6(2022-06-30) +- 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致 +## 2.2.5(2022-06-24) +- 修复 日历顶部年月及底部确认未国际化的Bug +## 2.2.4(2022-03-31) +- 修复 Vue3 下动态赋值,单选类型未响应的Bug +## 2.2.3(2022-03-28) +- 修复 Vue3 下动态赋值未响应的Bug +## 2.2.2(2021-12-10) +- 修复 clear-icon 属性在小程序平台不生效的Bug +## 2.2.1(2021-12-10) +- 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的Bug +## 2.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源 [详情](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移 [https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +## 2.1.5(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 2.1.4(2021-09-10) +- 修复 hide-second 在移动端的Bug +- 修复 单选赋默认值时,赋值日期未高亮的Bug +- 修复 赋默认值时,移动端未正确显示时间的Bug +## 2.1.3(2021-09-09) +- 新增 hide-second 属性,支持只使用时分,隐藏秒 +## 2.1.2(2021-09-03) +- 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次 +- 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法 +- 优化 调整字号大小,美化日历界面 +- 修复 因国际化导致的 placeholder 失效的Bug +## 2.1.1(2021-08-24) +- 新增 支持国际化 +- 优化 范围选择器在 pc 端过宽的问题 +## 2.1.0(2021-08-09) +- 新增 适配 vue3 +## 2.0.19(2021-08-09) +- 新增 支持作为 uni-forms 子组件相关功能 +- 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的Bug +## 2.0.18(2021-08-05) +- 修复 type 属性动态赋值无效的Bug +- 修复 ‘确认’按钮被 tabbar 遮盖 bug +- 修复 组件未赋值时范围选左、右日历相同的Bug +## 2.0.17(2021-08-04) +- 修复 范围选未正确显示当前值的Bug +- 修复 h5 平台(移动端)报错 'cale' of undefined 的Bug +## 2.0.16(2021-07-21) +- 新增 return-type 属性支持返回 date 日期对象 +## 2.0.15(2021-07-14) +- 修复 单选日期类型,初始赋值后不在当前日历的Bug +- 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效) +- 优化 移动端移除显示框的清空按钮,无实际用途 +## 2.0.14(2021-07-14) +- 修复 组件赋值为空,界面未更新的Bug +- 修复 start 和 end 不能动态赋值的Bug +- 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的Bug +## 2.0.13(2021-07-08) +- 修复 范围选择不能动态赋值的Bug +## 2.0.12(2021-07-08) +- 修复 范围选择的初始时间在一个月内时,造成无法选择的bug +## 2.0.11(2021-07-08) +- 优化 弹出层在超出视窗边缘定位不准确的问题 +## 2.0.10(2021-07-08) +- 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的Bug +- 优化 弹出层在超出视窗边缘被遮盖的问题 +## 2.0.9(2021-07-07) +- 新增 maskClick 事件 +- 修复 特殊情况日历 rpx 布局错误的Bug,rpx -> px +- 修复 范围选择时清空返回值不合理的bug,['', ''] -> [] +## 2.0.8(2021-07-07) +- 新增 日期时间显示框支持插槽 +## 2.0.7(2021-07-01) +- 优化 添加 uni-icons 依赖 +## 2.0.6(2021-05-22) +- 修复 图标在小程序上不显示的Bug +- 优化 重命名引用组件,避免潜在组件命名冲突 +## 2.0.5(2021-05-20) +- 优化 代码目录扁平化 +## 2.0.4(2021-05-12) +- 新增 组件示例地址 +## 2.0.3(2021-05-10) +- 修复 ios 下不识别 '-' 日期格式的Bug +- 优化 pc 下弹出层添加边框和阴影 +## 2.0.2(2021-05-08) +- 修复 在 admin 中获取弹出层定位错误的bug +## 2.0.1(2021-05-08) +- 修复 type 属性向下兼容,默认值从 date 变更为 datetime +## 2.0.0(2021-04-30) +- 支持日历形式的日期+时间的范围选择 + > 注意:此版本不向后兼容,不再支持单独时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker) +## 1.0.6(2021-03-18) +- 新增 hide-second 属性,时间支持仅选择时、分 +- 修复 选择跟显示的日期不一样的Bug +- 修复 chang事件触发2次的Bug +- 修复 分、秒 end 范围错误的Bug +- 优化 更好的 nvue 适配 diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue new file mode 100644 index 0000000..1b1a2eb --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue new file mode 100644 index 0000000..560acc1 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue @@ -0,0 +1,944 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json new file mode 100644 index 0000000..9acf1ab --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "select date", + "uni-datetime-picker.selectTime": "select time", + "uni-datetime-picker.selectDateTime": "select datetime", + "uni-datetime-picker.startDate": "start date", + "uni-datetime-picker.endDate": "end date", + "uni-datetime-picker.startTime": "start time", + "uni-datetime-picker.endTime": "end time", + "uni-datetime-picker.ok": "ok", + "uni-datetime-picker.clear": "clear", + "uni-datetime-picker.cancel": "cancel", + "uni-datetime-picker.year": "-", + "uni-datetime-picker.month": "", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN", + "uni-calender.confirm": "confirm" +} diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json new file mode 100644 index 0000000..d2df5e7 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "选择日期", + "uni-datetime-picker.selectTime": "选择时间", + "uni-datetime-picker.selectDateTime": "选择日期时间", + "uni-datetime-picker.startDate": "开始日期", + "uni-datetime-picker.endDate": "结束日期", + "uni-datetime-picker.startTime": "开始时间", + "uni-datetime-picker.endTime": "结束时间", + "uni-datetime-picker.ok": "确定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-datetime-picker.year": "年", + "uni-datetime-picker.month": "月", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六", + "uni-calender.confirm": "确认" +} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json new file mode 100644 index 0000000..d23fa3c --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "選擇日期", + "uni-datetime-picker.selectTime": "選擇時間", + "uni-datetime-picker.selectDateTime": "選擇日期時間", + "uni-datetime-picker.startDate": "開始日期", + "uni-datetime-picker.endDate": "結束日期", + "uni-datetime-picker.startTime": "開始时间", + "uni-datetime-picker.endTime": "結束时间", + "uni-datetime-picker.ok": "確定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-datetime-picker.year": "年", + "uni-datetime-picker.month": "月", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六", + "uni-calender.confirm": "確認" +} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue new file mode 100644 index 0000000..04113ac --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue @@ -0,0 +1,933 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue new file mode 100644 index 0000000..c6d93f2 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue @@ -0,0 +1,1026 @@ + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js new file mode 100644 index 0000000..98e6b79 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js @@ -0,0 +1,464 @@ +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range, + // multipleStatus + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + // this.multipleStatus = multipleStatus + this.lastHover = false + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + + } + + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31 && AddDayCount>0) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + const preMonth = dd.getMonth() + dd.setMonth(preMonth + AddDayCount) // 获取AddDayCount天后的日期 + const nextMonth = dd.getMonth() + // 处理 pre 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if(AddDayCount<0 && preMonth!==0 && nextMonth-preMonth>AddDayCount){ + dd.setMonth(nextMonth+(nextMonth-preMonth+AddDayCount)) + } + // 处理 next 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if(AddDayCount>0 && nextMonth-preMonth>AddDayCount){ + dd.setMonth(nextMonth-(nextMonth-preMonth-AddDayCount)) + } + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let isinfo = false + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.isLogicBefore(nowDate, this.multipleStatus.before, this.multipleStatus.after), + afterMultiple: this.isLogicAfter(nowDate, this.multipleStatus.before, this.multipleStatus.after), + month: full.month, + disable: !(disableBefore && disableAfter), + isDay, + userChecked: false + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + disable: true + }) + } + return dateArr + } + + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + /** + * 比较真实起始日期 + */ + + isLogicBefore(currentDay, before, after) { + let logicBefore = before + if (before && after) { + logicBefore = this.dateCompare(before, after) ? before : after + } + return this.dateEqual(logicBefore, currentDay) + } + + isLogicAfter(currentDay, before, after) { + let logicAfter = after + if (before && after) { + logicAfter = this.dateCompare(before, after) ? after : before + } + return this.dateEqual(logicAfter, currentDay) + } + + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + if (!this.range) return + if (before && after) { + if (!this.lastHover) { + this.lastHover = true + return + } + this.multipleStatus.before = fullDate + this.multipleStatus.after = '' + this.multipleStatus.data = [] + this.multipleStatus.fulldate = '' + this.lastHover = false + } else { + if (!before) { + this.multipleStatus.before = fullDate + this.lastHover = false + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus + .after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus + .before); + } + this.lastHover = true + } + } + this._getWeek(fullDate) + } + + /** + * 鼠标 hover 更新多选状态 + */ + setHoverMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (this.lastHover) return + + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + this._getWeek(fullDate) + } + + /** + * 更新默认值多选状态 + */ + setDefaultMultiple(before, after) { + this.multipleStatus.before = before + this.multipleStatus.after = after + if (before && after) { + if (this.dateCompare(before, after)) { + this.multipleStatus.data = this.geDateAll(before, after); + this._getWeek(after) + } else { + this.multipleStatus.data = this.geDateAll(after, before); + this._getWeek(before) + } + } + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + fullDate, + year, + month, + date, + day + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } +} + +function getDateTime(date, hideSecond){ + return `${getDate(date)} ${getTime(date, hideSecond)}` +} + +function getDate(date) { + date = fixIosDateFormat(date) + date = new Date(date) + const year = date.getFullYear() + const month = date.getMonth()+1 + const day = date.getDate() + return `${year}-${addZero(month)}-${addZero(day)}` +} + +function getTime(date, hideSecond){ + date = fixIosDateFormat(date) + date = new Date(date) + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + return hideSecond ? `${addZero(hour)}:${addZero(minute)}` : `${addZero(hour)}:${addZero(minute)}:${addZero(second)}` +} + +function addZero(num) { + if(num < 10){ + num = `0${num}` + } + return num +} + +function getDefaultSecond(hideSecond) { + return hideSecond ? '00:00' : '00:00:00' +} + +function dateCompare(startDate, endDate) { + startDate = new Date(startDate.replace(/-/g, '/')) + endDate = new Date(endDate.replace(/-/g, '/')) + return startDate <= endDate +} + +function checkDate(date){ + const dateReg = /((19|20)\d{2})(-|\/)\d{1,2}(-|\/)\d{1,2}/g + return date.match(dateReg) +} + +function fixIosDateFormat(value) { + // #ifndef MP + if (typeof value === 'string') { + value = value.replace(/-/g, '/') + } + // #endif + return value +} + +export {Calendar, getDateTime, getDate, getTime, addZero, getDefaultSecond, dateCompare, checkDate, fixIosDateFormat} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/package.json b/uni_modules/uni-datetime-picker/package.json new file mode 100644 index 0000000..25fbb6c --- /dev/null +++ b/uni_modules/uni-datetime-picker/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-datetime-picker", + "displayName": "uni-datetime-picker 日期选择器", + "version": "2.2.21", + "description": "uni-datetime-picker 日期时间选择器,支持日历,支持范围选择", + "keywords": [ + "uni-datetime-picker", + "uni-ui", + "uniui", + "日期时间选择器", + "日期时间" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-datetime-picker/readme.md b/uni_modules/uni-datetime-picker/readme.md new file mode 100644 index 0000000..162fbef --- /dev/null +++ b/uni_modules/uni-datetime-picker/readme.md @@ -0,0 +1,21 @@ + + +> `重要通知:组件升级更新 2.0.0 后,支持日期+时间范围选择,组件 ui 将使用日历选择日期,ui 变化较大,同时支持 PC 和 移动端。此版本不向后兼容,不再支持单独的时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker)。若仍需使用旧版本,可在插件市场下载*非uni_modules版本*,旧版本将不再维护` + +## DatetimePicker 时间选择器 + +> **组件名:uni-datetime-picker** +> 代码块: `uDatetimePicker` + + +该组件的优势是,支持**时间戳**输入和输出(起始时间、终止时间也支持时间戳),可**同时选择**日期和时间。 + +若只是需要单独选择日期和时间,不需要时间戳输入和输出,可使用原生的 picker 组件。 + +**_点击 picker 默认值规则:_** + +- 若设置初始值 value, 会显示在 picker 显示框中 +- 若无初始值 value,则初始值 value 为当前本地时间 Date.now(), 但不会显示在 picker 显示框中 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/utils/class/array.js b/utils/class/array.js new file mode 100644 index 0000000..3e9334e --- /dev/null +++ b/utils/class/array.js @@ -0,0 +1,46 @@ +/** + * 数组模块方法的扩展 + * + * @author lautin + * @created 2019-11-22 15:32:05 + */ + +/** + * 计算数组差值,非变异方法 + * @param {array} a + * @param {array} b + */ +function differ(a, b) { + // 拷贝原数组,避免变异 + const _a = a.slice(); + for (let i = 0; i < b.length; i++) { + for (let j = 0; j < _a.length; j++) { + if (_a[j] === b[i]) { + _a.splice(j, 1) + j = j - 1 + } + } + } + return _a; +} + + +// 利用set集合的特性实现数组去重 +function unique(arr) { + return [...new Set(arr)] +} + + +Array.prototype.differ = function (arr) { + return differ(this, arr); +} + +Array.prototype.unique = function () { + return unique(this); +} + +// 他们都是在webpack初始时加载 默认使用node模块系统,不加default +export default { + differ, + unique, +} diff --git a/utils/class/config-ucharts.js b/utils/class/config-ucharts.js new file mode 100644 index 0000000..68667eb --- /dev/null +++ b/utils/class/config-ucharts.js @@ -0,0 +1,120 @@ +"area":{ + "type": "area", + "canvasId": "", + "canvas2d": false, + "background": "none", + "animation": true, + "timing": "easeOut", + "duration": 1000, + "color": [ + "#1890FF", + "#91CB74", + "#FAC858", + "#EE6666", + "#73C0DE", + "#3CA272", + "#FC8452", + "#9A60B4", + "#ea7ccc" + ], + "padding": [ + 15, + 15, + 0, + 15 + ], + "rotate": false, + "errorReload": true, + "fontSize": 13, + "fontColor": "#666666", + "enableScroll": false, + "touchMoveLimit": 60, + "enableMarkLine": false, + "dataLabel": false, + "dataPointShape": true, + "dataPointShapeType": "solid", + "tapLegend": true, + "xAxis": { + "disabled": true, + "axisLine": true, + "axisLineColor": "#CCCCCC", + "calibration": false, + "fontColor": "#666666", + "fontSize": 13, + "rotateLabel": false, + "itemCount": 5, + "boundaryGap": "center", + "disableGrid": true, + "gridColor": "#CCCCCC", + "gridType": "solid", + "dashLength": 4, + "gridEval": 1, + "scrollShow": false, + "scrollAlign": "left", + "scrollColor": "#A6A6A6", + "scrollBackgroundColor": "#EFEBEF", + "format": "" + }, + "yAxis": { + "disabled": false, + "disableGrid": false, + "splitNumber": 5, + "gridType": "dash", + "dashLength": 2, + "gridColor": "#CCCCCC", + "padding": 10, + "showTitle": false, + "data": [] + }, + "legend": { + "show": true, + "position": "bottom", + "float": "center", + "padding": 5, + "margin": 5, + "backgroundColor": "rgba(0,0,0,0)", + "borderColor": "rgba(0,0,0,0)", + "borderWidth": 0, + "fontSize": 13, + "fontColor": "#666666", + "lineHeight": 11, + "hiddenColor": "#CECECE", + "itemGap": 10 + }, + "extra": { + "area": { + "type": "straight", + "opacity": 0.2, + "addLine": true, + "width": 2, + "gradient": false + }, + "tooltip": { + "showBox": true, + "showArrow": true, + "showCategory": false, + "borderWidth": 0, + "borderRadius": 0, + "borderColor": "#000000", + "borderOpacity": 0.7, + "bgColor": "#000000", + "bgOpacity": 0.7, + "gridType": "solid", + "dashLength": 4, + "gridColor": "#CCCCCC", + "fontColor": "#FFFFFF", + "splitLine": true, + "horizentalLine": false, + "xAxisLabel": false, + "yAxisLabel": false, + "labelBgColor": "#FFFFFF", + "labelBgOpacity": 0.7, + "labelFontColor": "#666666" + }, + "markLine": { + "type": "solid", + "dashLength": 4, + "data": [] + } + } +} \ No newline at end of file diff --git a/utils/class/copy.js b/utils/class/copy.js new file mode 100644 index 0000000..8c1d880 --- /dev/null +++ b/utils/class/copy.js @@ -0,0 +1,22 @@ + +import Clipboard from 'clipboard' + +export function handleClipboard (text, event, onSuccess, onError) { + event = event || {} + const clipboard = new Clipboard(event.target, { + text: () => text + }) + clipboard.on('success', () => { + onSuccess() + clipboard.off('error') + clipboard.off('success') + clipboard.destroy() + }) + clipboard.on('error', () => { + onError() + clipboard.off('error') + clipboard.off('success') + clipboard.destroy() + }) + clipboard.onClick(event) +} \ No newline at end of file diff --git a/utils/class/date.js b/utils/class/date.js new file mode 100644 index 0000000..3ae9a7a --- /dev/null +++ b/utils/class/date.js @@ -0,0 +1,162 @@ +/** + * 日期时间处理的工具库 + * + * @author lautin + * @created 2019-11-19 11:36:02 + */ +function getTimeZoneOffset(time) { + const date = new Date(time); + // 获取时区偏移值,返回分钟数 + // let offset = date.getTimezoneOffset(); + let offset = 0; + return time + offset * 60 * 1000; +} + +/** + * 将时间戳转化成时间对象的方法 + * @param {mixed} time 传入一个时间戳或者时间对象 + */ +function time2Date(time, isOffset = false) { + + let date; + + if (time.constructor == Date) { // 传入一个时间对象 + date = time; + + } else { // 传入一个时间戳 + // 检测时间戳的长度,确保为ms + if (time.toString().length <= 10) { + time = Number(time) * 1000; + } + // 是否对时差进行转化 + if (isOffset) { + // time = getTimeZoneOffset(time); + } + + // 转化成日期时间对象 + date = new Date(time); + } + + return date; +} + + +/** + * 将指定日期格式化输出, + * @param string|object time 输入日期,为一个Date.now()或者Date.UTC返回的时间戳 + * @param string format 输出的格式 + * @param boolean isOffset 是否考虑时区 + */ +function parseTime(time, isOffset = false, cformat = null) { + + // 设置默认格式 + // let format = cformat || '{y}-{m}-{d} {h}:{i}:{s}'; + // time = time + 8 * 3600; + // const date = time2Date(time, isOffset); + + // // 将日期时间值存入对象中 + // const dataObj = { + // y: date.getFullYear(), + // m: date.getMonth() + 1, // 显示月份值需要+1 + // d: date.getDate(), + // h: date.getHours(), + // i: date.getMinutes(), + // s: date.getSeconds(), + // a: date.getDay() + // }; + // // console.log(date); + // // 星期值需要转化为中文 + // dataObj.a = '星期' + ['日', '一', '二', '三', '四', '五', '六'][dataObj.a]; + + // // 匹配{}中的y|m|d...部分,分别替换不同的值 + // // const result = format.replace(/{(y|m|d|h|i|s|a)+}/g, (segment, key) => { + // // // 由索引提取值 + // // let value = dataObj[key]; + // // // 给值添加前导0 + // // if (segment.length > 0 && value < 10) value = '0' + value; + // // return value || 0; + // // }); + // // time = time + 8 * 3600 * 1000; // 增加8小时 + // const result = date.toJSON().substr(0, 19).replace('T', ' '); + // // console.log(result); + // return result; + + + // 设置默认格式 + // let format = cformat || '{y}-{m}-{d} {h}:{i}:{s}'; + let format = cformat || '{m}/{d}/{y} {h}:{i}:{s}'; + + const date = time2Date(time, isOffset); + + // 将日期时间值存入对象中 + const dataObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, // 显示月份值需要+1 + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + }; + + // 星期值需要转化为中文 + dataObj.a = '星期' + ['日', '一', '二', '三', '四', '五', '六'][dataObj.a]; + + // 匹配{}中的y|m|d...部分,分别替换不同的值 + const result = format.replace(/{(y|m|d|h|i|s|a)+}/g, (segment, key) => { + // 由索引提取值 + let value = dataObj[key]; + // 给值添加前导0 + if (segment.length > 0 && value < 10) value = '0' + value; + return value || 0; + }); + return result; +} + + + +/** + * 发布日期的特定显示方式, + * @param {string|number} time 显示日期的时间戳 + * @param {string} option 可选参数显示日期 + */ +function pubTime(time, isOffset = false, format = null) { + + const date = time2Date(time, isOffset); + + const current = isOffset ? getTimeZoneOffset(Date.now()) : Date.now(); + + // 计算时间的差值,返回s为单位的值 + let diff = (current - date.valueOf()) / 1000; + + // 2天以内显示距今时间 + if (diff < 30) { // 30s- + return '刚刚'; + + } else if (diff < 3600) { // 1h- + return Math.ceil(diff / 60) + '分钟前'; + + } else if (diff < 3600 * 24) { // 1d- + return Math.ceil(diff / 3600) + '小时前'; + + } else if (diff < 3600 * 24 * 2) { // 2d- + return '1天前'; + + } else { // 超过2天显示发布日期 + if (!format) format = '{y}年{m}月{d}日 {h}:{i}'; + return parseTime(time, isOffset, format); + } +} + +// 将方法写入构造函数 便于全局使用 +Object.assign(Date, { + time2Date, + parseTime, + pubTime, +}); + +export default{ + time2Date, + parseTime, + pubTime +} diff --git a/utils/class/math.js b/utils/class/math.js new file mode 100644 index 0000000..4615de1 --- /dev/null +++ b/utils/class/math.js @@ -0,0 +1,258 @@ +/** + * 数学模块,主要针对浮点型数据,在运算时的精度问题: + * 1| 两个小数相加 0.1 + 0.2 = 0.30000000000000004 + * 2| 两个小数相乘 2.12 * 3.14 = 6.6568000000000005; + * 3| ... + * 4| ... + * 5| 数值长度大于13位时 显示科学计数法 + * @author lautin + * @created 2019-11-19 17:15:04 + */ + +/** + * 检测小数点精度 + * @param {number} num 传入的数值 + */ +function countDecimals(num) { + let precision; + try { + precision = num.toString().split(".")[1].length; + } catch (e) { + precision = 0; + } + return precision; +} + +/** + * js在以下情景会自动将数值转换为科学计数法: + * 小数点前的数字个数大于等于22位; + * 小数点前边是0,小数点后十分位(包含十分位)之后连续0的个数>=6时 + * @param {number} 科学计数法显示的数值 1.2e-8 + * @return {number} 返回实际的数值 1.00000002 + */ +function scientific2No(val) { //-7.50375e-8 + + // 正则匹配科学计数法的数字 + if (/\d+\.?\d*e[+-]*\d+/i.test(val)) { + + let zero = '0', + parts = String(val).toLowerCase().split('e'), // ['-7.50375', '-8'] + e = parts.pop(), // 存储指数 -8 + l = Math.abs(e), // 0的个数 8 + sign = e / l, // 判断正负 - + // 将系数按照小数点拆分 + coeff_array = parts[0].split('.'); // [-7, 50375] 去除中间的. + // 如果恰好为8位 那么第二个数默认为undefined 需要重置为'' + if (!coeff_array[1]) coeff_array[1] = ''; + if (sign === -1) { // 小数 + // debugger; + // 正数或者负数 + if (coeff_array[0] < 0) { + val = '-' + zero + '.' + zero.repeat(l - 1) + coeff_array[0].slice(1) + coeff_array[1]; + } else { + val = zero + '.' + zero.repeat(l - 1) + coeff_array.join(''); //拼接字符串,如果是小数,拼接0和小数点 + } + + } else { + + let dec = coeff_array[1]; + + // 如果是整数,将整数除第一位之外的非零数字计入位数,相应的减少0的个数 + if (dec) l = l - dec.length; + + // 拼接字符串,如果是整数,不需要拼接小数点 + val = coeff_array.join('') + new Array(l + 1).join(zero); + + } + } + + + try { + return val.toString(); + } catch (e) { + return ''; + } +} + +/** + * 截取小数点后n位 + * @param {number} val 截取的数值 + * @param {number} scale 保留的小数点位数 + */ +function omitTo(val, scale) { + + // 转化科学计数法 + val = scientific2No(val); + + let ret; + // 检测浮点数 + if (val.toString().indexOf(".") > -1) { + // 提取实体集和精度值 + let [entity, precisionVal] = val.toString().split("."); + + if (precisionVal.length > scale) { + // trunc() 方法会将数字的小数部分去掉,只保留整数部分。 + let tmp = scientific2No(Math.trunc(val * Math.pow(10, scale))); + // 处理零值 + if (tmp == 0) ret = scientific2No('0.' + '0'.repeat(scale)); + else { + // ret = tmp / ; + ret = division(tmp, Math.pow(10, scale)); + try { // 小数 + + let [a, b] = ret.toString().split("."); + a = scientific2No(a), + b = scientific2No(b); + + if (b.length < scale) { + ret = a + '.' + b.padEnd(scale, '0'); + } + } catch (e) { // 整数 + ret = ret + '.' + '0'.padEnd(scale, '0'); + } + } + + } else if (precisionVal.length == scale) { // 精度 + + ret = val; + + } else { + // 补全小数点 + ret = entity + '.' + precisionVal.padEnd(scale, '0'); + } + + // 检测整型值 + } else ret = val + '.' + '0'.repeat(scale); + + // 去除末尾可能产生的多余的. + if (ret.toString().endsWith('.')) ret = ret.slice(0, -1); + + return ret; +} + +/** + * 计算两个数的和 + * @param {number} num1 + * @param {number} num2 + */ +function add(num1, num2, scale = null) { + + num1 = scientific2No(num1); + num2 = scientific2No(num2); + + let amplification, // 放大率 + precision1 = countDecimals(num1), // 精度1 + precision2 = countDecimals(num2); // 精度2 + amplification = Math.pow(10, Math.max(precision1, precision2)); + + // 先放大再相加,然后除以放大率 + let val = (num1 * amplification + num2 * amplification) / amplification; + + // 转化科学计数法 + let result = scientific2No(val); + + // 控制显示长度 + if (scale) result = omitTo(result, scale); + + return result; +} + + +/** + * 计算两个数的差值 + * @param {number} num1 + * @param {number} num2 + */ +function subtr(num1, num2, scale = null) { + num1 = scientific2No(num1); + num2 = scientific2No(num2); + + let amplification, // 放大率 + precision1 = countDecimals(num1), // 精度1 + precision2 = countDecimals(num2); // 精度2 + + let precision = Math.max(precision1, precision2) + amplification = Math.pow(10, precision); + + // 动态控制精度长度 + let val = ((num1 * amplification - num2 * amplification) / amplification).toFixed(precision); + + // 转化科学计数法 + let result = scientific2No(val); + + // 控制显示长度 + if (scale) result = omitTo(result, scale); + + return result; +} + +/** + * 计算两个数的乘积 + * @param {number} num1 + * @param {number} num2 + */ +function multiple(num1, num2, scale = null) { + num1 = scientific2No(num1); + num2 = scientific2No(num2); + + let precision = 0; + precision += countDecimals(num1); + precision += countDecimals(num2); + + let val = Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, precision); + + + let result = scientific2No(val); + + if (scale) result = omitTo(result, scale); + + return result; +} + + +/** + * 两个数相除 + * @param {number} num1 + * @param {number} num2 + * @param {optional} d + */ +function division(num1, num2, scale = null) { + num1 = scientific2No(num1); + num2 = scientific2No(num2); + + let precision1 = countDecimals(num1), + precision2 = countDecimals(num2), + m = precision1 > precision2 ? precision1 : precision2; + + // 两个整数相除 无需计算精度 + if (m <= 1) m = 1; + + let val = multiple(num1, m) / multiple(num2, m); + + let result = scientific2No(val); + + if (scale) result = omitTo(result, scale); + + return result; +} + + +Object.assign(Math, { + countDecimals, + add, + subtr, + multiple, + division, + scientific2No, + omitTo +}) + +export default { + countDecimals, + add, + subtr, + multiple, + division, + scientific2No, + omitTo +} \ No newline at end of file diff --git a/utils/class/object.js b/utils/class/object.js new file mode 100644 index 0000000..81c9805 --- /dev/null +++ b/utils/class/object.js @@ -0,0 +1,38 @@ + +function clone(target, source, isDeep = true) { + // 浅拷贝使用内置方法 + if (!isDeep) { + return Object.assign(target, source); + } + + // 递归遍历拷贝成员 + for (let item in source) { + if (source[item] instanceof Object) { + // 检测对象还是数组 + target[item] = + Object.prototype.toString.call(source[item]) === '[object Array]' ? [] : {}; + clone(target[item], source[item], isDeep); + } else { + target[item] = source[item]; + } + } + + return target; +} + +function cloneWithSelf(target, source, isDeep = true) { + // 先拷贝target自身 + const o = Object.clone({}, target, isDeep); + return Object.clone(o, source, isDeep) +} + +// 给原型对象扩展方法 +Object.assign(Object, { + clone, + cloneWithSelf +}) + +export default { + clone, + cloneWithSelf +} diff --git a/utils/class/string.js b/utils/class/string.js new file mode 100644 index 0000000..9e0172c --- /dev/null +++ b/utils/class/string.js @@ -0,0 +1,59 @@ +/** + * 字符串方法的扩展 + * + * @author lautin + * @created 2019-11-22 15:24:20 + */ + +/** + * 生成一组随机值的方法,用于上传文件名等场景 + * @param {number} len + */ +function random(count = null) { + let len = count || 32, + $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678', + ret = '', + time = new Date().getTime().toString(); + + if (len / 2 > time.length) { + // 控制总长度不超出 + len = len - time.length + } else { + len = len / 2 + } + for (let i = 0; i < len; i++) { + ret += $chars.charAt(Math.floor(Math.random() * $chars.length)) + if (time[i]) { + ret += time[time.length - i - 1] + } + } + return ret; +} +/** + * 截取字符串之前之后 + * @param {string} str + * @param {string} targe + * @param {number} index + */ +function getCaptionLength(str, targe, index) { + if (!index) { + return str.substring(0, str.indexOf(targe)) + } else { + return str.substring(str.lastIndexOf(targe) + 1) + } + +} + +// 绑定为静态方法 +Object.assign(String, { + random, + getCaptionLength +}); + +// fontcolor设置别名 +String.prototype.color = Object.prototype.fontcolor; + +export default { + random, + getCaptionLength +} diff --git a/utils/funcs/debounce.js b/utils/funcs/debounce.js new file mode 100644 index 0000000..f726bf0 --- /dev/null +++ b/utils/funcs/debounce.js @@ -0,0 +1,58 @@ +/** + * 函数防抖模块封装 + * @author lautin + * @created 2019-11-20 18:44:32 + */ + + +/** + * 防抖函数,在一个时段内反复触发时 更新定时器为最后一次延迟执行 + * 该操作欠缺的地方在于 延迟执行,响应比较慢 最好是先执行 + * @param {function} func 事件回调函数 + * @param {number} wait 延迟等待时间,建议100-300ms左右 + */ +function debounceA(func, wait) { + // 初始化定时器为空 + let timer = null; + // 返回一个防抖的闭包函数,使用闭包来持久存储定时器 + return function () { + const context = this, // this为事件源DOM + args = arguments; // arguments包含event + // 如果已有定时器 则取消上次的任务 + if (timer) clearTimeout(timer); + // 更新定时器,本次(最后)任务n毫秒后触发 + timer = setTimeout(() => { + // 还原事件回调函数触发时的环境 + func.apply(context, args); + }, wait); + } +} + +/** + * 防抖函数,在一个时段内反复触发时 更新定时器为最后一次延迟执行 + * 该方法 先执行 后延迟 响应灵敏更高 + * @param {function} func 事件回调函数 + * @param {number} wait 延迟等待时间,建议100-300ms左右 + */ +function debounceB(func, wait) { + let timer = null; + return function () { + const context = this, + args = arguments; + + // 首先取消中间的定时器,重新开始计时 + if (timer) clearTimeout(timer); + + //先加载本次任务, + if (!timer) func.apply(context, args); + + // 再进行定时器控制 + timer = setTimeout(() => { + timer = null; + }, wait); + } +} + +export default function debounce(func, wait, immediate = false) { + return immediate ? debounceB(func, wait) : debounceA(func, wait); +} \ No newline at end of file diff --git a/utils/funcs/throttle.js b/utils/funcs/throttle.js new file mode 100644 index 0000000..2e7010b --- /dev/null +++ b/utils/funcs/throttle.js @@ -0,0 +1,62 @@ +/** + * 函数节流模块封装 + * + * @author lautin + * @created 2019-11-20 18:46:01 + */ + + +/** + * 节流方法,在指定时间内只执行一次,使用时间戳控制时间 + * @param {function} func 事件回调函数 + * @param {number} wait 限定输出的时间,建议100-300ms + */ +function throttleA(func, wait) { + // 上次执行时间 + let previous = 0; + return function () { + // 本次执行时间 + let now = Date.now(), + context = this, + args = arguments; + // 定时器以外执行 + if (now - previous > wait) { + func.apply(context, args); + // 更新上次时间 + previous = now; + } + } +} + +/** + * 节流方法,在指定时间内只执行一次,使用定时器控制时间 + * @param {function} func 事件回调函数 + * @param {number} wait 限定输出的时间,建议100-300ms + */ +function throttleB(func, wait) { + // 记录上个定时器 + let timer; + + return function () { + const context = this, + args = arguments; + // 如果没有定时器则执行 + if (!timer) { + func.apply(context, args); + // 更新定时器 + timer = setTimeout(() => { + timer = null; + }, wait); + } + } +} + +/** + * 兼容执行 + * @param {function} func 事件处理函数 + * @param {number} wait 节流时间 + * @param {mixed} flag 标识符 选择类型 + */ +export default function throttle(func, wait, flag = null) { + return flag ? throttleB(func, wait) : throttleA(func, wait); +} diff --git a/utils/index.js b/utils/index.js new file mode 100644 index 0000000..31a53c9 --- /dev/null +++ b/utils/index.js @@ -0,0 +1,38 @@ +// 系统类的方法扩展 +import math from './class/math'; + +import date from './class/date'; + +import array from './class/array'; + +import clone from './class/object'; + +import random from './class/string'; + +// 载入防抖和节流的方法 +import debounce from './funcs/debounce'; +import throttle from './funcs/throttle'; + + +import validate from './vendor/validate'; + +// 文件上传处理方法 +import upload from './vendor/upload'; + +// 通用的一些方法 +import common from './vendor/common'; + +// webpack 全局加载的模块 以`export`而非`export default`导出, +// 她类似于module.exports或者exports的规则 +export default { + ...math, // omit, ,,, + ...date, + ...array, + ...clone, + ...random, + debounce, + throttle, + validate, + upload, + ...common +} \ No newline at end of file diff --git a/utils/rules.js b/utils/rules.js new file mode 100644 index 0000000..db1a0be --- /dev/null +++ b/utils/rules.js @@ -0,0 +1,51 @@ +/** + * 常用正则库,用于快速匹配 + * + * @author lautin + * @created 2019-11-21 02:02:39 + */ + +// url地址 + +const isUrl = /^(https?:\/\/)?([0-9a-zA-Z\.]+)\.([a-z\.]{2,6})([\/\w\.-]*)?$/ + +// 小写字母 +const isLower = /^[a-z]+$/ + +// 大写字母 +const isUpper = /^[A-Z]+$/ + + +// 大小写字母 +const isAlpha = /^[A-Za-z]+$/ + +// 邮箱 +const isEmail = /^(?:[\w\-\.]+)@(?:[\w\.\-]+).(?:[a-z\.]{2,6})$/ + +// 手机号 +const isPhone = /^\d{9,17}$/ + +// 32位的加密token +const isToken = /^[a-z0-9]{32}$/ + +// 固话 - 国内的格式 +const isTel = /^0\d{2,3}\-?\d{7,8}$/ + +// html标签 +const isTag = /<\/?\w+[\w\s='"]\/?>/g + +// 一段html +const isHtml = /<([^\s]+)[\w\s='"]*>[\d\D]*?<\/\1>/g + +export default { + isAlpha, + isEmail, + isHtml, + isLower, + isPhone, + isToken, + isTag, + isTel, + isUpper, + isUrl +} diff --git a/utils/vendor/common.js b/utils/vendor/common.js new file mode 100644 index 0000000..00af20b --- /dev/null +++ b/utils/vendor/common.js @@ -0,0 +1,118 @@ + +// commons在DOM操作完毕后插入 + +// 获取可视窗宽高 +function getViewPortWH() { + return { + clientW: document.documentElement.clientWidth || document.body.clientWidth, + clientH: document.documentElement.clientHeight || document.body.clientHeight + } +} + +function isMobile() { + const regex_match = /(nokia|iphone|android|motorola|^mot-|softbank|foma|docomo|kddi|up.browser|up.link|htc|dopod|blazer|netfront|helio|hosin|huawei|novarra|CoolPad|webos|techfaith|palmsource|blackberry|alcatel|amoi|ktouch|nexian|samsung|^sam-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|maui|symbian|smartphone|midp|wap|phone|windows ce|iemobile|^spice|^bird|^zte-|longcos|pantech|gionee|^sie-|portalmmm|jigs browser|hiptop|^benq|haier|^lct|operas*mobi|opera*mini|320x320|240x320|176x220)/i; + const u = navigator.userAgent; + + if (null == u) { + return true; + } + + let result = regex_match.exec(u); + + return null == result ? false : true; + +} + +/** + * css属性的动画设置 + * @param {object} settings 动画效果配置参数 + */ +function cssAnimate(settings) { + // 使用解构赋值 提取参数值到变量中 + let { + ele, + transform, + duration, + whendone = null + } = settings + + if (ele.timer) return // 如果已有定时器 则点击无效 + + let frames = 0, + numFrames = duration / 100 + + const beginAt = {}, + increment = {} + + /* + * 1| 计算初始样式和动画增量 + */ + const cssProps = getComputedStyle(ele) + for (let item in transform) { + beginAt[item] = parseInt(cssProps[item]) + increment[item] = (transform[item] - beginAt[item]) / numFrames + } + + /* + * 2| 设置定时任务执行动画 + */ + ele.timer = setInterval(function () { + frames++; + // 判断临界条件 + if (frames > numFrames) { + // 取消定时器 + clearInterval(ele.timer) + delete ele.timer; + if (whendone instanceof Function) whendone.call(ele); + return false; + } + + for (let item in transform) { + ele.style[item] = (beginAt[item] + increment[item] * frames) + 'px'; + } + }, 100); +} + +function timeTD(resolve, reject, seconds = null) { + let total = seconds || 60; + resolve(total); + let timer = setInterval(function () { + if (--total < 1) { + clearInterval(timer); + reject(); + } else { + resolve(total); + } + + }, 1000); + +} + +function curryTimeTD(resolve, seconds = null) { + return function (reject) { + let total = seconds || 60; + resolve(total); + let timer = setInterval(function () { + if (--total < 1) { + clearInterval(timer); + reject(); + } else { + resolve(total); + } + + }, 1000); + return timer; + } +} + + + + + +export default { + getViewPortWH, + cssAnimate, + timeTD, + curryTimeTD, + isMobile +} diff --git a/utils/vendor/upload.js b/utils/vendor/upload.js new file mode 100644 index 0000000..ecf8238 --- /dev/null +++ b/utils/vendor/upload.js @@ -0,0 +1,129 @@ + +/** + * 上传文件处理,验证文件类型和大小 验证通过返回数据 + * { + * errCode : 0为通过,1为类型错误,2为大小超出, + * url : base64位的文件数据 + * } + * @author lautin + * @created 2019-11-22 17:20:32 + */ + +// 将buffer转化成utf-8格式 +function iconvToUtf8(bufferArr, encoding) { + let x = new Uint8Array(bufferArr); + let ret = new TextDecoder(encoding).decode(x); + return ret; +} + +class Upload { + + constructor(conf) { + // 获取文件DOM对象 + if (!conf.ele.nodeType) conf.ele = document.querySelector(conf.ele); + + // 将配置信息写入实例对象中 + Object.assign(this, { + file: conf.ele.files[0], // 文件对象 + name: conf.ele.files[0].name, // 文件名称 + + error: '', // 错误代号 + data: '', // 存储数据 + + // 类型检测 + isIMG: null, + isTXT: null, + }, conf); + + } + + checkType() { + // 验证文件类型,allowType需要设置['images/jpg', 'image/png'...] + if (this.allowType) { + if (!this.allowType.includes(this.file.type)) { + this.error = `${this.file.type}类型文件不合法`; + this.errno = 101; + } + } + this.isIMG = this.file.type.startsWith("image"); + this.isTXT = this.file.type.startsWith("text"); + } + + checkSize() { + // 验证文件类型,allowSize传入的值以M为单位 + if (this.allowSize) { + const maxByte = this.allowSize * 1024 * 1024; + if (this.file.size > maxByte) { + this.error = `文件大小不能超出${this.allowSize}M`; + this.errno = 102; + } + } + } + + readFile() { + + return new Promise((resolve, reject) => { + + const fr = new FileReader; + + fr.onloadend = function () { + + // 如果为文本 返回文件内容 + let data; + + switch (true) { + case this.isIMG : + data = fr.result; + break; + case this.isTXT : + data = iconvToUtf8(fr.result, "gbk"); + break; + default : + data = null; + break; + } + + resolve(data); + + }.bind(this); + + + fr.onabort = function () { + // 上传意外被中断 + reject(new Error(103)); + } + + fr.onerror = function () { + // 上传过程发生错误 + reject(new Error(104)); + } + + // 如果是图片的话 则返回base64 URL格式数据 否则返回ArrayBuffer + this.isIMG ? fr.readAsDataURL(this.file) : fr.readAsArrayBuffer(this.file); + + }); + + } + + static async start(settings) { + // 创建实例 + const ins = new Upload(settings); + // 验证类型 + ins.checkType(); + // 验证大小 + ins.checkSize(); + + // console.log(ins.errno); + // 验证不通过 则直接触发reject + console.log() + if (ins.error) throw new Error(ins.errno); + + else { + // 读取文件的操作 发生错误会进入catch 成功则返回data数据 + ins.data = await ins.readFile(); + return ins; + } + } +} + +export default Upload.start; diff --git a/utils/vendor/validate.js b/utils/vendor/validate.js new file mode 100644 index 0000000..fb389af --- /dev/null +++ b/utils/vendor/validate.js @@ -0,0 +1,204 @@ +/** + * H5表单验证 适用所有,当同时存在多个逻辑时 有先后顺序 + * 注意:凡是设置了正则表达式验证的 需在后面指出具体规则以告知用户 + * @author lautin + * @created 2019-11-22 14:14:20 + */ + +class Validate { + + // 初始化验证元素 + constructor(root) { + // 提取表单中的输入控件 + if (!root.nodeType) root = document.querySelector(root); + + // 将nodeList以及标识符 写入全局对象中 + Object.assign(this, { + flag: true, + }, { + fields: this.extractInputs(root), + }); + } + + /** + * 遍历节点 提取输入控件 + * @param {dom}} node + * @param {nodeList} result 返回DOM集合对象 + */ + extractInputs(node, result = null) { + let fields = result || []; + const types = ["text", "password", "file", "number", "range", "search", "email", "url"]; + + for (let x = node.firstChild; x != null; x = x.nextSibling) { + // 如果是元素节点 则检测节点名称并递归 + if (x.nodeType == node.ELEMENT_NODE) { + switch (x.nodeName.toLowerCase()) { + case "input": + if (types.includes(x.type)) { + if (getComputedStyle(x, false).display != "none") { + fields.push(x); //放入该节点 + } + + } + break; + case "select": + case "textarea": + fields.push(x); //放入该节点 + break; + } + // 继续递归 + this.extractInputs(x, fields); + } + } + return fields; + } + + /** + * text验证maxLength和minLength + * @param {object} state + * @param {dom} item + */ + textTask(state, item) { + let result = ''; + switch (true) { + case state.tooLong: + result = `${item.name} 不能超过${item.maxLength}位`; + break; + + case state.tooShort: + result = `${item.name} 不能少于${item.minLength}位`; + break; + + case state.patternMismatch: + result = item.dataset.message || item.placeholder || `输入不符合要求`; + break; + } + return result; + } + + /** + * password验证pattern + * @param {object} state + */ + pwdTask(state, item) { + let result = ''; + if (state.patternMismatch) { + result = item.dataset.message || `输入不符合规则要求` + } + return result; + } + + /** + * number和range类型 先验证min和max,再验证step + * @param {object} state + * @param {dom} item + */ + numberTask(state, item) { + let result = ''; + switch (true) { + case state.rangeOverflow: + result = `不能超出${item.max}的上限`; + break; + + case state.rangeUnderflow: + result = `不能低于${item.min}的下限`; + break; + + case state.stepMismatch: + result = item.dataset.message || `${item.value} 不是合法值,需要以${item.step}递增`; + break; + } + return result; + } + + /** + * email和url类型 先验证type 再验证pattern + * @param {object} state + * @param {dom} item + */ + emailAndUrl(state, item) { + let result = ''; + switch (true) { + case state.typeMismatch: // 适合number、email、url + result = item.dataset.message || item.placeholder || `${item.name} 格式不正确`; + break; + + case state.patternMismatch: + result = item.dataset.message || item.placeholder || `输入不符合规则要求`; + break; + } + return result; + } + + /** + * 执行验证的方法 + */ + validate() { + [...this.fields].reverse().forEach((item) => { + // 验证通过 则跳过本次循环 + if (item.checkValidity()) return; + // 返回validityState对象 + let state = item.validity, + message = ''; + + // 首先检测值是否为空 + if (state.valueMissing) { + message = item.dataset.has || item.placeholder || `${item.name} 不能为空`; + } else { + // 根据类型执行不同验证 + switch (item.type) { + case "text": + case "search": + message = this.textTask(state, item); + break; + case "password": + message = this.pwdTask(state, item); + break; + case "number": + case "range": + message = this.numberTask(state, item); + break; + case "email": + case "url": + message = this.emailAndUrl(state, item); + break; + } + } + + // 未知的类型验证 + if (state.badInput) { + message = `输入了的值无效`; + } + + //设置验证提示信息 + item.setCustomValidity(message); + + if (message) { + + // 手动报告验证的结果 触发元素的focus事件 等待用户输入 + item.reportValidity(); + // 如果用户有输入 则清除提示信息,最好监听change 避免破坏原有的v-model + item.addEventListener("change", function () { + + this.blur(); + }) + + this.flag = false; + } + + }); + + return this.flag; + } + + /** + * 调用执行的静态方法 + * @param {dom} root + */ + static start(root) { + const obj = new Validate(root); + return obj.validate(); + } +} + +export default Validate.start; \ No newline at end of file diff --git a/wxcomponents/vant/action-sheet/index.d.ts b/wxcomponents/vant/action-sheet/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/action-sheet/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/action-sheet/index.js b/wxcomponents/vant/action-sheet/index.js new file mode 100644 index 0000000..f3f6d0f --- /dev/null +++ b/wxcomponents/vant/action-sheet/index.js @@ -0,0 +1,62 @@ +import { VantComponent } from '../common/component'; +import { button } from '../mixins/button'; +import { openType } from '../mixins/open-type'; +VantComponent({ + mixins: [button, openType], + props: { + show: Boolean, + title: String, + cancelText: String, + description: String, + round: { + type: Boolean, + value: true, + }, + zIndex: { + type: Number, + value: 100, + }, + actions: { + type: Array, + value: [], + }, + overlay: { + type: Boolean, + value: true, + }, + closeOnClickOverlay: { + type: Boolean, + value: true, + }, + closeOnClickAction: { + type: Boolean, + value: true, + }, + safeAreaInsetBottom: { + type: Boolean, + value: true, + }, + }, + methods: { + onSelect(event) { + const { index } = event.currentTarget.dataset; + const item = this.data.actions[index]; + if (item && !item.disabled && !item.loading) { + this.$emit('select', item); + if (this.data.closeOnClickAction) { + this.onClose(); + } + } + }, + onCancel() { + this.$emit('cancel'); + }, + onClose() { + this.$emit('close'); + }, + onClickOverlay() { + this.$emit('click-overlay'); + this.onClose(); + }, + }, +}); diff --git a/wxcomponents/vant/action-sheet/index.json b/wxcomponents/vant/action-sheet/index.json new file mode 100644 index 0000000..19bf989 --- /dev/null +++ b/wxcomponents/vant/action-sheet/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "van-icon": "../icon/index", + "van-popup": "../popup/index", + "van-loading": "../loading/index" + } +} diff --git a/wxcomponents/vant/action-sheet/index.vue b/wxcomponents/vant/action-sheet/index.vue new file mode 100644 index 0000000..68e1474 --- /dev/null +++ b/wxcomponents/vant/action-sheet/index.vue @@ -0,0 +1,100 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/action-sheet/index.wxml b/wxcomponents/vant/action-sheet/index.wxml new file mode 100644 index 0000000..7ed2819 --- /dev/null +++ b/wxcomponents/vant/action-sheet/index.wxml @@ -0,0 +1,67 @@ + + + + + {{ title }} + + + + {{ description }} + + + + + + + + {{ cancelText }} + + diff --git a/wxcomponents/vant/action-sheet/index.wxss b/wxcomponents/vant/action-sheet/index.wxss new file mode 100644 index 0000000..dc54840 --- /dev/null +++ b/wxcomponents/vant/action-sheet/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-action-sheet{max-height:90%!important;max-height:var(--action-sheet-max-height,90%)!important;color:#323233;color:var(--action-sheet-item-text-color,#323233)}.van-action-sheet__cancel,.van-action-sheet__item{text-align:center;font-size:16px;font-size:var(--action-sheet-item-font-size,16px);line-height:50px;line-height:var(--action-sheet-item-height,50px);background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__cancel--hover,.van-action-sheet__item--hover{background-color:#f2f3f5;background-color:var(--active-color,#f2f3f5)}.van-action-sheet__cancel:before{display:block;content:" ";height:8px;height:var(--action-sheet-cancel-padding-top,8px);background-color:#f7f8fa;background-color:var(--action-sheet-cancel-padding-color,#f7f8fa)}.van-action-sheet__item--disabled{color:#c8c9cc;color:var(--action-sheet-item-disabled-text-color,#c8c9cc)}.van-action-sheet__item--disabled.van-action-sheet__item--hover{background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__subname{margin-left:4px;margin-left:var(--padding-base,4px);font-size:12px;font-size:var(--action-sheet-subname-font-size,12px);color:#646566;color:var(--action-sheet-subname-color,#646566)}.van-action-sheet__header{text-align:center;font-weight:500;font-weight:var(--font-weight-bold,500);font-size:16px;font-size:var(--action-sheet-header-font-size,16px);line-height:44px;line-height:var(--action-sheet-header-height,44px)}.van-action-sheet__description{text-align:center;padding:16px;padding:var(--padding-md,16px);color:#646566;color:var(--action-sheet-description-color,#646566);font-size:14px;font-size:var(--action-sheet-description-font-size,14px);line-height:20px;line-height:var(--action-sheet-description-line-height,20px)}.van-action-sheet__close{position:absolute!important;top:0;right:0;line-height:inherit!important;padding:0 12px;padding:var(--action-sheet-close-icon-padding,0 12px);font-size:18px!important;font-size:var(--action-sheet-close-icon-size,18px)!important;color:#969799;color:var(--action-sheet-close-icon-color,#969799)}.van-action-sheet__loading{display:-webkit-flex!important;display:flex!important;height:50px;height:var(--action-sheet-item-height,50px)} \ No newline at end of file diff --git a/wxcomponents/vant/area/index.d.ts b/wxcomponents/vant/area/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/area/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/area/index.js b/wxcomponents/vant/area/index.js new file mode 100644 index 0000000..c621682 --- /dev/null +++ b/wxcomponents/vant/area/index.js @@ -0,0 +1,229 @@ +import { VantComponent } from '../common/component'; +import { pickerProps } from '../picker/shared'; +const COLUMNSPLACEHOLDERCODE = '000000'; +VantComponent({ + classes: ['active-class', 'toolbar-class', 'column-class'], + props: Object.assign(Object.assign({}, pickerProps), { + value: { + type: String, + observer(value) { + this.code = value; + this.setValues(); + }, + }, + areaList: { + type: Object, + value: {}, + observer: 'setValues', + }, + columnsNum: { + type: null, + value: 3, + observer(value) { + this.setData({ + displayColumns: this.data.columns.slice(0, +value), + }); + }, + }, + columnsPlaceholder: { + type: Array, + observer(val) { + this.setData({ + typeToColumnsPlaceholder: { + province: val[0] || '', + city: val[1] || '', + county: val[2] || '', + }, + }); + }, + }, + }), + data: { + columns: [{ values: [] }, { values: [] }, { values: [] }], + displayColumns: [{ values: [] }, { values: [] }, { values: [] }], + typeToColumnsPlaceholder: {}, + }, + mounted() { + setTimeout(() => { + this.setValues(); + }, 0); + }, + methods: { + getPicker() { + if (this.picker == null) { + this.picker = this.selectComponent('.van-area__picker'); + } + return this.picker; + }, + onCancel(event) { + this.emit('cancel', event.detail); + }, + onConfirm(event) { + const { index } = event.detail; + let { value } = event.detail; + value = this.parseOutputValues(value); + this.emit('confirm', { value, index }); + }, + emit(type, detail) { + detail.values = detail.value; + delete detail.value; + this.$emit(type, detail); + }, + // parse output columns data + parseOutputValues(values) { + const { columnsPlaceholder } = this.data; + return values.map((value, index) => { + // save undefined value + if (!value) return value; + value = JSON.parse(JSON.stringify(value)); + if (!value.code || value.name === columnsPlaceholder[index]) { + value.code = ''; + value.name = ''; + } + return value; + }); + }, + onChange(event) { + const { index, picker, value } = event.detail; + this.code = value[index].code; + this.setValues().then(() => { + this.$emit('change', { + picker, + values: this.parseOutputValues(picker.getValues()), + index, + }); + }); + }, + getConfig(type) { + const { areaList } = this.data; + return (areaList && areaList[`${type}_list`]) || {}; + }, + getList(type, code) { + const { typeToColumnsPlaceholder } = this.data; + let result = []; + if (type !== 'province' && !code) { + return result; + } + const list = this.getConfig(type); + result = Object.keys(list).map((code) => ({ + code, + name: list[code], + })); + if (code) { + // oversea code + if (code[0] === '9' && type === 'city') { + code = '9'; + } + result = result.filter((item) => item.code.indexOf(code) === 0); + } + if (typeToColumnsPlaceholder[type] && result.length) { + // set columns placeholder + const codeFill = + type === 'province' + ? '' + : type === 'city' + ? COLUMNSPLACEHOLDERCODE.slice(2, 4) + : COLUMNSPLACEHOLDERCODE.slice(4, 6); + result.unshift({ + code: `${code}${codeFill}`, + name: typeToColumnsPlaceholder[type], + }); + } + return result; + }, + getIndex(type, code) { + let compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6; + const list = this.getList(type, code.slice(0, compareNum - 2)); + // oversea code + if (code[0] === '9' && type === 'province') { + compareNum = 1; + } + code = code.slice(0, compareNum); + for (let i = 0; i < list.length; i++) { + if (list[i].code.slice(0, compareNum) === code) { + return i; + } + } + return 0; + }, + setValues() { + const county = this.getConfig('county'); + let { code } = this; + if (!code) { + if (this.data.columnsPlaceholder.length) { + code = COLUMNSPLACEHOLDERCODE; + } else if (Object.keys(county)[0]) { + code = Object.keys(county)[0]; + } else { + code = ''; + } + } + const province = this.getList('province'); + const city = this.getList('city', code.slice(0, 2)); + const picker = this.getPicker(); + if (!picker) { + return; + } + const stack = []; + const indexes = []; + const { columnsNum } = this.data; + if (columnsNum >= 1) { + stack.push(picker.setColumnValues(0, province, false)); + indexes.push(this.getIndex('province', code)); + } + if (columnsNum >= 2) { + stack.push(picker.setColumnValues(1, city, false)); + indexes.push(this.getIndex('city', code)); + if (city.length && code.slice(2, 4) === '00') { + [{ code }] = city; + } + } + if (columnsNum === 3) { + stack.push( + picker.setColumnValues( + 2, + this.getList('county', code.slice(0, 4)), + false + ) + ); + indexes.push(this.getIndex('county', code)); + } + return Promise.all(stack) + .catch(() => {}) + .then(() => picker.setIndexes(indexes)) + .catch(() => {}); + }, + getValues() { + const picker = this.getPicker(); + return picker ? picker.getValues().filter((value) => !!value) : []; + }, + getDetail() { + const values = this.getValues(); + const area = { + code: '', + country: '', + province: '', + city: '', + county: '', + }; + if (!values.length) { + return area; + } + const names = values.map((item) => item.name); + area.code = values[values.length - 1].code; + if (area.code[0] === '9') { + area.country = names[1] || ''; + area.province = names[2] || ''; + } else { + area.province = names[0] || ''; + area.city = names[1] || ''; + area.county = names[2] || ''; + } + return area; + }, + reset(code) { + this.code = code || ''; + return this.setValues(); + }, + }, +}); diff --git a/wxcomponents/vant/area/index.json b/wxcomponents/vant/area/index.json new file mode 100644 index 0000000..a778e91 --- /dev/null +++ b/wxcomponents/vant/area/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-picker": "../picker/index" + } +} diff --git a/wxcomponents/vant/area/index.vue b/wxcomponents/vant/area/index.vue new file mode 100644 index 0000000..048dedd --- /dev/null +++ b/wxcomponents/vant/area/index.vue @@ -0,0 +1,243 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/area/index.wxml b/wxcomponents/vant/area/index.wxml new file mode 100644 index 0000000..6075794 --- /dev/null +++ b/wxcomponents/vant/area/index.wxml @@ -0,0 +1,18 @@ + diff --git a/wxcomponents/vant/area/index.wxss b/wxcomponents/vant/area/index.wxss new file mode 100644 index 0000000..99694d6 --- /dev/null +++ b/wxcomponents/vant/area/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss'; \ No newline at end of file diff --git a/wxcomponents/vant/button/index-loadingColor.wxs b/wxcomponents/vant/button/index-loadingColor.wxs new file mode 100644 index 0000000..be28f00 --- /dev/null +++ b/wxcomponents/vant/button/index-loadingColor.wxs @@ -0,0 +1,13 @@ + +function get(type, color,plain) { + if(plain) { + return color ? color: '#c9c9c9'; + } + + if(type === 'default') { + return '#c9c9c9'; + } + return 'white'; +} + +module.exports = get; diff --git a/wxcomponents/vant/button/index.d.ts b/wxcomponents/vant/button/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/button/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/button/index.js b/wxcomponents/vant/button/index.js new file mode 100644 index 0000000..1c42f46 --- /dev/null +++ b/wxcomponents/vant/button/index.js @@ -0,0 +1,80 @@ +import { VantComponent } from '../common/component'; +import { button } from '../mixins/button'; +import { openType } from '../mixins/open-type'; +import { canIUseFormFieldButton } from '../common/version'; +const mixins = [button, openType]; +if (canIUseFormFieldButton()) { + mixins.push('wx://form-field-button'); +} + +VantComponent({ + mixins, + classes: ['hover-class', 'loading-class'], + data: { + baseStyle: '', + }, + props: { + formType: String, + icon: String, + classPrefix: { + type: String, + value: 'van-icon', + }, + plain: Boolean, + block: Boolean, + round: Boolean, + square: Boolean, + loading: Boolean, + hairline: Boolean, + disabled: Boolean, + loadingText: String, + customStyle: String, + loadingType: { + type: String, + value: 'circular', + }, + type: { + type: String, + value: 'default', + }, + dataset: null, + size: { + type: String, + value: 'normal', + }, + loadingSize: { + type: String, + value: '20px', + }, + color: { + type: String, + observer(color) { + let style = ''; + if (color) { + style += `color: ${this.data.plain ? color : 'white'};`; + if (!this.data.plain) { + // Use background instead of backgroundColor to make linear-gradient work + style += `background: ${color};`; + } + // hide border when color is linear-gradient + if (color.indexOf('gradient') !== -1) { + style += 'border: 0;'; + } else { + style += `border-color: ${color};`; + } + } + if (style !== this.data.baseStyle) { + this.setData({ baseStyle: style }); + } + }, + }, + }, + methods: { + onClick() { + if (!this.data.loading) { + this.$emit('click'); + } + }, + noop() {}, + }, +}); diff --git a/wxcomponents/vant/button/index.json b/wxcomponents/vant/button/index.json new file mode 100644 index 0000000..e00a588 --- /dev/null +++ b/wxcomponents/vant/button/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "van-icon": "../icon/index", + "van-loading": "../loading/index" + } +} diff --git a/wxcomponents/vant/button/index.vue b/wxcomponents/vant/button/index.vue new file mode 100644 index 0000000..6b89d9c --- /dev/null +++ b/wxcomponents/vant/button/index.vue @@ -0,0 +1,108 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/button/index.wxml b/wxcomponents/vant/button/index.wxml new file mode 100644 index 0000000..ab393e8 --- /dev/null +++ b/wxcomponents/vant/button/index.wxml @@ -0,0 +1,68 @@ + + + + + + +function get(type, color,plain) { + if(plain) { + return color ? color: '#c9c9c9'; + } + + if(type === 'default') { + return '#c9c9c9'; + } + return 'white'; +} + +module.exports = get; + diff --git a/wxcomponents/vant/button/index.wxss b/wxcomponents/vant/button/index.wxss new file mode 100644 index 0000000..2c2cfe0 --- /dev/null +++ b/wxcomponents/vant/button/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-button{position:relative;display:-webkit-inline-flex;display:inline-flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;box-sizing:border-box;padding:0;text-align:center;vertical-align:middle;-webkit-appearance:none;-webkit-text-size-adjust:100%;height:44px;height:var(--button-default-height,44px);line-height:20px;line-height:var(--button-line-height,20px);font-size:16px;font-size:var(--button-default-font-size,16px);transition:opacity .2s;transition:opacity var(--animation-duration-fast,.2s);border-radius:2px;border-radius:var(--button-border-radius,2px)}.van-button:before{position:absolute;top:50%;left:50%;width:100%;height:100%;border:inherit;border-radius:inherit;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);opacity:0;content:" ";background-color:#000;background-color:var(--black,#000);border-color:#000;border-color:var(--black,#000)}.van-button:after{border-width:0}.van-button--active:before{opacity:.15}.van-button--unclickable:after{display:none}.van-button--default{color:#323233;color:var(--button-default-color,#323233);background:#fff;background:var(--button-default-background-color,#fff);border:1px solid #ebedf0;border:var(--button-border-width,1px) solid var(--button-default-border-color,#ebedf0)}.van-button--primary{color:#fff;color:var(--button-primary-color,#fff);background:#07c160;background:var(--button-primary-background-color,#07c160);border:1px solid #07c160;border:var(--button-border-width,1px) solid var(--button-primary-border-color,#07c160)}.van-button--info{color:#fff;color:var(--button-info-color,#fff);background:#1989fa;background:var(--button-info-background-color,#1989fa);border:1px solid #1989fa;border:var(--button-border-width,1px) solid var(--button-info-border-color,#1989fa)}.van-button--danger{color:#fff;color:var(--button-danger-color,#fff);background:#ce5b67;background:var(--button-danger-background-color,#ce5b67);border:1px solid #ce5b67;border:var(--button-border-width,1px) solid var(--button-danger-border-color,#ce5b67)}.van-button--warning{color:#fff;color:var(--button-warning-color,#fff);background:#ff976a;background:var(--button-warning-background-color,#ff976a);border:1px solid #ff976a;border:var(--button-border-width,1px) solid var(--button-warning-border-color,#ff976a)}.van-button--plain{background:#fff;background:var(--button-plain-background-color,#fff)}.van-button--plain.van-button--primary{color:#07c160;color:var(--button-primary-background-color,#07c160)}.van-button--plain.van-button--info{color:#1989fa;color:var(--button-info-background-color,#1989fa)}.van-button--plain.van-button--danger{color:#ce5b67;color:var(--button-danger-background-color,#ce5b67)}.van-button--plain.van-button--warning{color:#ff976a;color:var(--button-warning-background-color,#ff976a)}.van-button--large{width:100%;height:50px;height:var(--button-large-height,50px)}.van-button--normal{padding:0 15px;font-size:14px;font-size:var(--button-normal-font-size,14px)}.van-button--small{min-width:60px;min-width:var(--button-small-min-width,60px);height:30px;height:var(--button-small-height,30px);padding:0 8px;padding:0 var(--padding-xs,8px);font-size:12px;font-size:var(--button-small-font-size,12px)}.van-button--mini{display:inline-block;min-width:50px;min-width:var(--button-mini-min-width,50px);height:22px;height:var(--button-mini-height,22px);font-size:10px;font-size:var(--button-mini-font-size,10px)}.van-button--mini+.van-button--mini{margin-left:5px}.van-button--block{display:-webkit-flex;display:flex;width:100%}.van-button--round{border-radius:999px;border-radius:var(--button-round-border-radius,999px)}.van-button--square{border-radius:0}.van-button--disabled{opacity:.5;opacity:var(--button-disabled-opacity,.5)}.van-button__text{display:inline}.van-button__icon+.van-button__text:not(:empty),.van-button__loading-text{margin-left:4px}.van-button__icon{min-width:1em;line-height:inherit!important;vertical-align:top}.van-button--hairline{padding-top:1px;border-width:0}.van-button--hairline:after{border-color:inherit;border-width:1px;border-radius:4px;border-radius:calc(var(--button-border-radius, 2px)*2)}.van-button--hairline.van-button--round:after{border-radius:999px;border-radius:var(--button-round-border-radius,999px)}.van-button--hairline.van-button--square:after{border-radius:0} \ No newline at end of file diff --git a/wxcomponents/vant/calendar/calendar.vue b/wxcomponents/vant/calendar/calendar.vue new file mode 100644 index 0000000..ae5b251 --- /dev/null +++ b/wxcomponents/vant/calendar/calendar.vue @@ -0,0 +1,35 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/calendar/calendar.wxml b/wxcomponents/vant/calendar/calendar.wxml new file mode 100644 index 0000000..09a60b3 --- /dev/null +++ b/wxcomponents/vant/calendar/calendar.wxml @@ -0,0 +1,57 @@ + + + diff --git a/wxcomponents/vant/calendar/components/header/index.d.ts b/wxcomponents/vant/calendar/components/header/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/calendar/components/header/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/calendar/components/header/index.js b/wxcomponents/vant/calendar/components/header/index.js new file mode 100644 index 0000000..bf9243f --- /dev/null +++ b/wxcomponents/vant/calendar/components/header/index.js @@ -0,0 +1,16 @@ +import { VantComponent } from '../../../common/component'; +VantComponent({ + props: { + title: { + type: String, + value: '日期选择', + }, + subtitle: String, + showTitle: Boolean, + showSubtitle: Boolean, + }, + data: { + weekdays: ['日', '一', '二', '三', '四', '五', '六'], + }, + methods: {}, +}); diff --git a/wxcomponents/vant/calendar/components/header/index.json b/wxcomponents/vant/calendar/components/header/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/calendar/components/header/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/calendar/components/header/index.vue b/wxcomponents/vant/calendar/components/header/index.vue new file mode 100644 index 0000000..e92d1bc --- /dev/null +++ b/wxcomponents/vant/calendar/components/header/index.vue @@ -0,0 +1,43 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/calendar/components/header/index.wxml b/wxcomponents/vant/calendar/components/header/index.wxml new file mode 100644 index 0000000..eb8e4b4 --- /dev/null +++ b/wxcomponents/vant/calendar/components/header/index.wxml @@ -0,0 +1,16 @@ + + + + {{ title }} + + + + {{ subtitle }} + + + + + {{ item }} + + + diff --git a/wxcomponents/vant/calendar/components/header/index.wxss b/wxcomponents/vant/calendar/components/header/index.wxss new file mode 100644 index 0000000..4075e48 --- /dev/null +++ b/wxcomponents/vant/calendar/components/header/index.wxss @@ -0,0 +1 @@ +@import '../../../common/index.wxss';.van-calendar__header{-webkit-flex-shrink:0;flex-shrink:0;box-shadow:0 2px 10px rgba(125,126,128,.16);box-shadow:var(--calendar-header-box-shadow,0 2px 10px rgba(125,126,128,.16))}.van-calendar__header-subtitle,.van-calendar__header-title{text-align:center;height:44px;height:var(--calendar-header-title-height,44px);font-weight:500;font-weight:var(--font-weight-bold,500);line-height:44px;line-height:var(--calendar-header-title-height,44px)}.van-calendar__header-title+.van-calendar__header-title,.van-calendar__header-title:empty{display:none}.van-calendar__header-title:empty+.van-calendar__header-title{display:block!important}.van-calendar__weekdays{display:-webkit-flex;display:flex}.van-calendar__weekday{-webkit-flex:1;flex:1;text-align:center;font-size:12px;font-size:var(--calendar-weekdays-font-size,12px);line-height:30px;line-height:var(--calendar-weekdays-height,30px)} \ No newline at end of file diff --git a/wxcomponents/vant/calendar/components/month/index.d.ts b/wxcomponents/vant/calendar/components/month/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/calendar/components/month/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/calendar/components/month/index.js b/wxcomponents/vant/calendar/components/month/index.js new file mode 100644 index 0000000..90f5957 --- /dev/null +++ b/wxcomponents/vant/calendar/components/month/index.js @@ -0,0 +1,157 @@ +import { VantComponent } from '../../../common/component'; +import { + getMonthEndDay, + compareDay, + getPrevDay, + getNextDay, +} from '../../utils'; +VantComponent({ + props: { + date: { + type: null, + observer: 'setDays', + }, + type: { + type: String, + observer: 'setDays', + }, + color: String, + minDate: { + type: null, + observer: 'setDays', + }, + maxDate: { + type: null, + observer: 'setDays', + }, + showMark: Boolean, + rowHeight: [Number, String], + formatter: { + type: null, + observer: 'setDays', + }, + currentDate: { + type: [null, Array], + observer: 'setDays', + }, + allowSameDay: Boolean, + showSubtitle: Boolean, + showMonthTitle: Boolean, + }, + data: { + visible: true, + days: [], + }, + methods: { + onClick(event) { + const { index } = event.currentTarget.dataset; + const item = this.data.days[index]; + if (item.type !== 'disabled') { + this.$emit('click', item); + } + }, + setDays() { + const days = []; + const startDate = new Date(this.data.date); + const year = startDate.getFullYear(); + const month = startDate.getMonth(); + const totalDay = getMonthEndDay( + startDate.getFullYear(), + startDate.getMonth() + 1 + ); + for (let day = 1; day <= totalDay; day++) { + const date = new Date(year, month, day); + const type = this.getDayType(date); + let config = { + date, + type, + text: day, + bottomInfo: this.getBottomInfo(type), + }; + if (this.data.formatter) { + config = this.data.formatter(config); + } + days.push(config); + } + this.setData({ days }); + }, + getMultipleDayType(day) { + const { currentDate } = this.data; + if (!Array.isArray(currentDate)) { + return ''; + } + const isSelected = (date) => + currentDate.some((item) => compareDay(item, date) === 0); + if (isSelected(day)) { + const prevDay = getPrevDay(day); + const nextDay = getNextDay(day); + const prevSelected = isSelected(prevDay); + const nextSelected = isSelected(nextDay); + if (prevSelected && nextSelected) { + return 'multiple-middle'; + } + if (prevSelected) { + return 'end'; + } + return nextSelected ? 'start' : 'multiple-selected'; + } + return ''; + }, + getRangeDayType(day) { + const { currentDate, allowSameDay } = this.data; + if (!Array.isArray(currentDate)) { + return; + } + const [startDay, endDay] = currentDate; + if (!startDay) { + return; + } + const compareToStart = compareDay(day, startDay); + if (!endDay) { + return compareToStart === 0 ? 'start' : ''; + } + const compareToEnd = compareDay(day, endDay); + if (compareToStart === 0 && compareToEnd === 0 && allowSameDay) { + return 'start-end'; + } + if (compareToStart === 0) { + return 'start'; + } + if (compareToEnd === 0) { + return 'end'; + } + if (compareToStart > 0 && compareToEnd < 0) { + return 'middle'; + } + }, + getDayType(day) { + const { type, minDate, maxDate, currentDate } = this.data; + if (compareDay(day, minDate) < 0 || compareDay(day, maxDate) > 0) { + return 'disabled'; + } + if (type === 'single') { + return compareDay(day, currentDate) === 0 ? 'selected' : ''; + } + if (type === 'multiple') { + return this.getMultipleDayType(day); + } + /* istanbul ignore else */ + if (type === 'range') { + return this.getRangeDayType(day); + } + }, + getBottomInfo(type) { + if (this.data.type === 'range') { + if (type === 'start') { + return '开始'; + } + if (type === 'end') { + return '结束'; + } + if (type === 'start-end') { + return '开始/结束'; + } + } + }, + }, +}); diff --git a/wxcomponents/vant/calendar/components/month/index.json b/wxcomponents/vant/calendar/components/month/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/calendar/components/month/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/calendar/components/month/index.vue b/wxcomponents/vant/calendar/components/month/index.vue new file mode 100644 index 0000000..3857feb --- /dev/null +++ b/wxcomponents/vant/calendar/components/month/index.vue @@ -0,0 +1,197 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/calendar/components/month/index.wxml b/wxcomponents/vant/calendar/components/month/index.wxml new file mode 100644 index 0000000..55bab83 --- /dev/null +++ b/wxcomponents/vant/calendar/components/month/index.wxml @@ -0,0 +1,39 @@ + + + + + + {{ computed.formatMonthTitle(date) }} + + + + + {{ computed.getMark(date) }} + + + + + {{ item.topInfo }} + {{ item.text }} + + {{ item.bottomInfo }} + + + + + {{ item.topInfo }} + {{ item.text }} + + {{ item.bottomInfo }} + + + + + diff --git a/wxcomponents/vant/calendar/components/month/index.wxs b/wxcomponents/vant/calendar/components/month/index.wxs new file mode 100644 index 0000000..a057079 --- /dev/null +++ b/wxcomponents/vant/calendar/components/month/index.wxs @@ -0,0 +1,67 @@ +/* eslint-disable */ +var utils = require('../../utils.wxs'); + +function getMark(date) { + return getDate(date).getMonth() + 1; +} + +var ROW_HEIGHT = 64; + +function getDayStyle(type, index, date, rowHeight, color) { + var style = []; + var offset = getDate(date).getDay(); + + if (index === 0) { + style.push(['margin-left', (100 * offset) / 7 + '%']); + } + + if (rowHeight !== ROW_HEIGHT) { + style.push(['height', rowHeight + 'px']); + } + + if (color) { + if ( + type === 'start' || + type === 'end' || + type === 'multiple-selected' || + type === 'multiple-middle' + ) { + style.push(['background', color]); + } else if (type === 'middle') { + style.push(['color', color]); + } + } + + return style + .map(function(item) { + return item.join(':'); + }) + .join(';'); +} + +function formatMonthTitle(date) { + date = getDate(date); + return date.getFullYear() + '年' + (date.getMonth() + 1) + '月'; +} + +function getMonthStyle(visible, date, rowHeight) { + if (!visible) { + date = getDate(date); + + var totalDay = utils.getMonthEndDay( + date.getFullYear(), + date.getMonth() + 1 + ); + var offset = getDate(date).getDay(); + var padding = Math.ceil((totalDay + offset) / 7) * rowHeight; + + return 'padding-bottom:' + padding + 'px'; + } +} + +module.exports = { + getMark: getMark, + getDayStyle: getDayStyle, + formatMonthTitle: formatMonthTitle, + getMonthStyle: getMonthStyle +}; diff --git a/wxcomponents/vant/calendar/components/month/index.wxss b/wxcomponents/vant/calendar/components/month/index.wxss new file mode 100644 index 0000000..87e43a4 --- /dev/null +++ b/wxcomponents/vant/calendar/components/month/index.wxss @@ -0,0 +1 @@ +@import '../../../common/index.wxss';.van-calendar{display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;height:100%;background-color:#fff;background-color:var(--calendar-background-color,#fff)}.van-calendar__month-title{text-align:center;height:44px;height:var(--calendar-header-title-height,44px);font-weight:500;font-weight:var(--font-weight-bold,500);font-size:14px;font-size:var(--calendar-month-title-font-size,14px);line-height:44px;line-height:var(--calendar-header-title-height,44px)}.van-calendar__days{position:relative;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-webkit-user-select:none;user-select:none}.van-calendar__month-mark{position:absolute;top:50%;left:50%;z-index:0;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);pointer-events:none;color:rgba(242,243,245,.8);color:var(--calendar-month-mark-color,rgba(242,243,245,.8));font-size:160px;font-size:var(--calendar-month-mark-font-size,160px)}.van-calendar__day,.van-calendar__selected-day{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;text-align:center}.van-calendar__day{position:relative;width:14.285%;height:64px;height:var(--calendar-day-height,64px);font-size:16px;font-size:var(--calendar-day-font-size,16px)}.van-calendar__day--end,.van-calendar__day--multiple-middle,.van-calendar__day--multiple-selected,.van-calendar__day--start,.van-calendar__day--start-end{color:#fff;color:var(--calendar-range-edge-color,#fff);background-color:#ce5b67;background-color:var(--calendar-range-edge-background-color,#ce5b67)}.van-calendar__day--start{border-radius:4px 0 0 4px;border-radius:var(--border-radius-md,4px) 0 0 var(--border-radius-md,4px)}.van-calendar__day--end{border-radius:0 4px 4px 0;border-radius:0 var(--border-radius-md,4px) var(--border-radius-md,4px) 0}.van-calendar__day--multiple-selected,.van-calendar__day--start-end{border-radius:4px;border-radius:var(--border-radius-md,4px)}.van-calendar__day--middle{color:#ce5b67;color:var(--calendar-range-middle-color,#ce5b67)}.van-calendar__day--middle:after{position:absolute;top:0;right:0;bottom:0;left:0;background-color:currentColor;content:"";opacity:.1;opacity:var(--calendar-range-middle-background-opacity,.1)}.van-calendar__day--disabled{cursor:default;color:#c8c9cc;color:var(--calendar-day-disabled-color,#c8c9cc)}.van-calendar__bottom-info,.van-calendar__top-info{position:absolute;right:0;left:0;font-size:10px;font-size:var(--calendar-info-font-size,10px);line-height:14px;line-height:var(--calendar-info-line-height,14px)}@media (max-width:350px){.van-calendar__bottom-info,.van-calendar__top-info{font-size:9px}}.van-calendar__top-info{top:6px}.van-calendar__bottom-info{bottom:6px}.van-calendar__selected-day{width:54px;width:var(--calendar-selected-day-size,54px);height:54px;height:var(--calendar-selected-day-size,54px);color:#fff;color:var(--calendar-selected-day-color,#fff);background-color:#ce5b67;background-color:var(--calendar-selected-day-background-color,#ce5b67);border-radius:4px;border-radius:var(--border-radius-md,4px)} \ No newline at end of file diff --git a/wxcomponents/vant/calendar/index.d.ts b/wxcomponents/vant/calendar/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/calendar/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/calendar/index.js b/wxcomponents/vant/calendar/index.js new file mode 100644 index 0000000..e953c6f --- /dev/null +++ b/wxcomponents/vant/calendar/index.js @@ -0,0 +1,290 @@ +import { VantComponent } from '../common/component'; +import { + ROW_HEIGHT, + getNextDay, + compareDay, + copyDates, + calcDateNum, + formatMonthTitle, + compareMonth, + getMonths, + getDayByOffset, +} from './utils'; +import Toast from '../toast/toast'; +VantComponent({ + props: { + title: { + type: String, + value: '日期选择', + }, + color: String, + show: { + type: Boolean, + observer(val) { + if (val) { + this.initRect(); + this.scrollIntoView(); + } + }, + }, + formatter: null, + confirmText: { + type: String, + value: '确定', + }, + rangePrompt: String, + defaultDate: { + type: [Number, Array], + observer(val) { + this.setData({ currentDate: val }); + this.scrollIntoView(); + }, + }, + allowSameDay: Boolean, + confirmDisabledText: String, + type: { + type: String, + value: 'single', + observer: 'reset', + }, + minDate: { + type: null, + value: Date.now(), + }, + maxDate: { + type: null, + value: new Date( + new Date().getFullYear(), + new Date().getMonth() + 6, + new Date().getDate() + ).getTime(), + }, + position: { + type: String, + value: 'bottom', + }, + rowHeight: { + type: [Number, String], + value: ROW_HEIGHT, + }, + round: { + type: Boolean, + value: true, + }, + poppable: { + type: Boolean, + value: true, + }, + showMark: { + type: Boolean, + value: true, + }, + showTitle: { + type: Boolean, + value: true, + }, + showConfirm: { + type: Boolean, + value: true, + }, + showSubtitle: { + type: Boolean, + value: true, + }, + safeAreaInsetBottom: { + type: Boolean, + value: true, + }, + closeOnClickOverlay: { + type: Boolean, + value: true, + }, + maxRange: { + type: [Number, String], + value: null, + }, + }, + data: { + subtitle: '', + currentDate: null, + scrollIntoView: '', + }, + created() { + this.setData({ + currentDate: this.getInitialDate(), + }); + }, + mounted() { + if (this.data.show || !this.data.poppable) { + this.initRect(); + this.scrollIntoView(); + } + }, + methods: { + reset() { + this.setData({ currentDate: this.getInitialDate() }); + this.scrollIntoView(); + }, + initRect() { + if (this.contentObserver != null) { + this.contentObserver.disconnect(); + } + const contentObserver = this.createIntersectionObserver({ + thresholds: [0, 0.1, 0.9, 1], + observeAll: true, + }); + this.contentObserver = contentObserver; + contentObserver.relativeTo('.van-calendar__body'); + contentObserver.observe('.month', (res) => { + if (res.boundingClientRect.top <= res.relativeRect.top) { + // @ts-ignore + this.setData({ subtitle: formatMonthTitle(res.dataset.date) }); + } + }); + }, + getInitialDate() { + const { type, defaultDate, minDate } = this.data; + if (type === 'range') { + const [startDay, endDay] = defaultDate || []; + return [ + startDay || minDate, + endDay || getNextDay(new Date(minDate)).getTime(), + ]; + } + if (type === 'multiple') { + return defaultDate || [minDate]; + } + return defaultDate || minDate; + }, + scrollIntoView() { + setTimeout(() => { + const { + currentDate, + type, + show, + poppable, + minDate, + maxDate, + } = this.data; + const targetDate = type === 'single' ? currentDate : currentDate[0]; + const displayed = show || !poppable; + if (!targetDate || !displayed) { + return; + } + const months = getMonths(minDate, maxDate); + months.some((month, index) => { + if (compareMonth(month, targetDate) === 0) { + this.setData({ scrollIntoView: `month${index}` }); + return true; + } + return false; + }); + }, 100); + }, + onOpen() { + this.$emit('open'); + }, + onOpened() { + this.$emit('opened'); + }, + onClose() { + this.$emit('close'); + }, + onClosed() { + this.$emit('closed'); + }, + onClickDay(event) { + const { date } = event.detail; + const { type, currentDate, allowSameDay } = this.data; + if (type === 'range') { + const [startDay, endDay] = currentDate; + if (startDay && !endDay) { + const compareToStart = compareDay(date, startDay); + if (compareToStart === 1) { + this.select([startDay, date], true); + } else if (compareToStart === -1) { + this.select([date, null]); + } else if (allowSameDay) { + this.select([date, date]); + } + } else { + this.select([date, null]); + } + } else if (type === 'multiple') { + let selectedIndex; + const selected = currentDate.some((dateItem, index) => { + const equal = compareDay(dateItem, date) === 0; + if (equal) { + selectedIndex = index; + } + return equal; + }); + if (selected) { + const cancelDate = currentDate.splice(selectedIndex, 1); + this.setData({ currentDate }); + this.unselect(cancelDate); + } else { + this.select([...currentDate, date]); + } + } else { + this.select(date, true); + } + }, + unselect(dateArray) { + const date = dateArray[0]; + if (date) { + this.$emit('unselect', copyDates(date)); + } + }, + select(date, complete) { + if (complete && this.data.type === 'range') { + const valid = this.checkRange(date); + if (!valid) { + // auto selected to max range if showConfirm + if (this.data.showConfirm) { + this.emit([ + date[0], + getDayByOffset(date[0], this.data.maxRange - 1), + ]); + } else { + this.emit(date); + } + return; + } + } + this.emit(date); + if (complete && !this.data.showConfirm) { + this.onConfirm(); + } + }, + emit(date) { + const getTime = (date) => (date instanceof Date ? date.getTime() : date); + this.setData({ + currentDate: Array.isArray(date) ? date.map(getTime) : getTime(date), + }); + this.$emit('select', copyDates(date)); + }, + checkRange(date) { + const { maxRange, rangePrompt } = this.data; + if (maxRange && calcDateNum(date) > maxRange) { + Toast({ + context: this, + message: rangePrompt || `选择天数不能超过 ${maxRange} 天`, + }); + return false; + } + return true; + }, + onConfirm() { + if ( + this.data.type === 'range' && + !this.checkRange(this.data.currentDate) + ) { + return; + } + wx.nextTick(() => { + this.$emit('confirm', copyDates(this.data.currentDate)); + }); + }, + }, +}); diff --git a/wxcomponents/vant/calendar/index.json b/wxcomponents/vant/calendar/index.json new file mode 100644 index 0000000..397d5ae --- /dev/null +++ b/wxcomponents/vant/calendar/index.json @@ -0,0 +1,10 @@ +{ + "component": true, + "usingComponents": { + "header": "./components/header/index", + "month": "./components/month/index", + "van-button": "../button/index", + "van-popup": "../popup/index", + "van-toast": "../toast/index" + } +} diff --git a/wxcomponents/vant/calendar/index.vue b/wxcomponents/vant/calendar/index.vue new file mode 100644 index 0000000..1c1dc54 --- /dev/null +++ b/wxcomponents/vant/calendar/index.vue @@ -0,0 +1,318 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/calendar/index.wxml b/wxcomponents/vant/calendar/index.wxml new file mode 100644 index 0000000..d4849cc --- /dev/null +++ b/wxcomponents/vant/calendar/index.wxml @@ -0,0 +1,31 @@ + + + + + +