cmy 1 year ago
commit
d14a83efe3
100 changed files with 9887 additions and 0 deletions
  1. 15 0
      .gitignore
  2. 93 0
      App.vue
  3. 26 0
      common/mehaotian-request/config.js
  4. 266 0
      common/mehaotian-request/index.js
  5. 72 0
      common/mehaotian-request/interface.js
  6. 1017 0
      common/mehaotian-request/public.js
  7. 75 0
      common/mehaotian-request/router.js
  8. 54 0
      common/web3modal.vue
  9. 23 0
      index.html
  10. 54 0
      lang/arabic.js
  11. 37 0
      lang/cn.js
  12. 44 0
      lang/en.js
  13. 64 0
      lang/french.js
  14. 16 0
      lang/index.js
  15. 63 0
      lang/italian.js
  16. 58 0
      lang/ja.js
  17. 66 0
      lang/portuguese.js
  18. 64 0
      lang/spanish.js
  19. 62 0
      lang/turk.js
  20. 1782 0
      lang/vue-i18n.js
  21. 63 0
      lang/xl.js
  22. 37 0
      lang/zh-tc.js
  23. 3 0
      locales/en-US.json
  24. 3 0
      locales/zh-CN.json
  25. 27 0
      main.js
  26. 90 0
      manifest.json
  27. 8 0
      package.json
  28. 114 0
      pages.json
  29. 1092 0
      pages/index/index.vue
  30. 412 0
      pages/leakage/index.vue
  31. 306 0
      pages/login/register.vue
  32. 418 0
      pages/my/fhlist.vue
  33. 596 0
      pages/my/index.vue
  34. 312 0
      pages/my/rule.vue
  35. 211 0
      pages/my/tutorial.vue
  36. 306 0
      pages/my/tutorialdel.vue
  37. 798 0
      pages/orders/index.vue
  38. 804 0
      pages/orders/indexcoye.vue
  39. 6 0
      shime-uni.d.ts
  40. BIN
      static/banner.png
  41. BIN
      static/bg.png
  42. BIN
      static/bj.png
  43. BIN
      static/bjes.png
  44. BIN
      static/bjss.png
  45. BIN
      static/djicon.png
  46. BIN
      static/fonts/NotoSansSC.ttf
  47. 86 0
      static/fonts/iconfont.css
  48. BIN
      static/fonts/iconfont.eot
  49. 0 0
      static/fonts/iconfont.js
  50. 128 0
      static/fonts/iconfont.json
  51. 16 0
      static/fonts/iconfont.svg
  52. BIN
      static/fonts/iconfont.ttf
  53. BIN
      static/fonts/iconfont.woff
  54. BIN
      static/fonts/iconfont.woff2
  55. BIN
      static/gzicon.png
  56. BIN
      static/icon/Add.png
  57. BIN
      static/icon/icon1.png
  58. BIN
      static/icon/icon2.png
  59. BIN
      static/icon/icon3.png
  60. BIN
      static/icon/icon4.png
  61. BIN
      static/icon/iconw.png
  62. BIN
      static/icon/myicon1.png
  63. BIN
      static/icon/myicon10.png
  64. BIN
      static/icon/myicon2.png
  65. BIN
      static/icon/myicon3.png
  66. BIN
      static/icon/myicon4.png
  67. BIN
      static/icon/myicon5.png
  68. BIN
      static/icon/myicon6.png
  69. BIN
      static/icon/myicon7.png
  70. BIN
      static/icon/myicon8.png
  71. BIN
      static/icon/myicon9.png
  72. BIN
      static/icon/ordericon.png
  73. BIN
      static/icon/tcicon.png
  74. BIN
      static/icons.png
  75. BIN
      static/iconxs.png
  76. BIN
      static/logo.png
  77. BIN
      static/logos.png
  78. BIN
      static/my1.png
  79. BIN
      static/my2.png
  80. BIN
      static/my3.png
  81. BIN
      static/rule/bj.png
  82. BIN
      static/rule/log.png
  83. BIN
      static/tabble/Bill.png
  84. BIN
      static/tabble/Billhover.png
  85. BIN
      static/tabble/Home.png
  86. BIN
      static/tabble/Homehover.png
  87. BIN
      static/tabble/Mine.png
  88. BIN
      static/tabble/Minehover.png
  89. BIN
      static/tabble/Price.png
  90. BIN
      static/tabble/Pricehover.png
  91. BIN
      static/tc.png
  92. BIN
      static/testlog.png
  93. BIN
      static/tip.png
  94. BIN
      static/tips.png
  95. BIN
      static/usdt.png
  96. BIN
      static/vip.png
  97. BIN
      static/xsicon.png
  98. 76 0
      uni.scss
  99. 19 0
      uni_modules/uni-load-more/changelog.md
  100. 5 0
      uni_modules/uni-load-more/components/uni-load-more/i18n/en.json

+ 15 - 0
.gitignore

@@ -0,0 +1,15 @@
+.DS_Store
+/dist
+package-lock.json
+yarn.lock
+yarn-error.log
+.idea/
+.vscode/
+loader
+electron-dist/
+build/packages
+/node_modules/
+.hbuilderx/
+/unpackage/dist
+/unpackage/cache
+/unpackage/release

+ 93 - 0
App.vue

@@ -0,0 +1,93 @@
+<script>
+export default {
+  onLaunch: function () {
+	  // 设置红点	 
+  },
+  onShow: function () {
+    //console.log('App Show')
+  },
+  onHide: function () {
+   //console.log('App Hide')
+  },
+}
+</script>
+
+<style >
+	page{
+		background-color: rgba(20, 198, 112, 0.1);
+		 font-family: NotoSansSC;
+	}
+	@font-face {font-family: 'NotoSansSC';
+	  src:url('static/fonts/NotoSansSC.ttf') format('truetype');		
+	}	
+	/* 引入的字体图标 */
+	@font-face {font-family: 'iconfont';
+		src: url('static/fonts/iconfont.woff') format('woff'),
+		url('static/fonts/iconfont.ttf') format('truetype');		
+	}
+	.iconfont{
+	font-family:"iconfont" !important;
+	font-size:16px;
+	font-style:normal;
+	-webkit-font-smoothing: antialiased;
+	-webkit-text-stroke-width: 0.2px;
+	-moz-osx-font-smoothing: grayscale;}
+	.content{
+		width: 100%;
+		min-height:100vh;
+		background-image: url('static/bg.png');
+		background-repeat: repeat-y;
+		background-size: 100% 1730rpx;
+		font-size: 28rpx;
+	}
+	.wrap{
+		width: 96%;
+		margin: 0 2%;		
+	}
+	.wraps{
+		margin: 0 24rpx;		
+	}
+	.wrap90{
+		width: 90%;
+		margin: 0 5%;		
+	}
+	.flex{
+		 display: flex;
+		 align-items: center;
+	}
+	.flat{
+		 align-items: flex-start;
+	}
+	.flcc{
+		justify-content: center;
+	}
+	.flsb{
+		justify-content: space-between;
+	 	}
+	.mt{
+		margin-top: 48rpx;
+	}
+	.mask{
+		width: 100vw;
+		height: 100vh;
+		background-color:rgba(0, 0, 0, 0.4);
+		position: fixed;
+		left: 0;
+		top: 0;
+		z-index: 3;
+	}
+	.buttonbj{
+		background: linear-gradient(90.89deg, #38F957 49.57%, #1DEEE1 99.24%);
+	}
+	.buttonbjs{
+		background: linear-gradient(85.42deg, #FFB673 3.71%, #FF5F3B 96.29%);
+
+	}
+	.noMore{
+		width: 100%;
+		text-align: center;
+		padding: 100rpx 0;
+		color: #778299;
+		font-size: 32rpx;
+	}
+</style>

+ 26 - 0
common/mehaotian-request/config.js

@@ -0,0 +1,26 @@
+//  http 请求配置项
+
+export default {	
+    //	开发者服务器接口地址  
+     url:'https://www.vgst168.com',	
+//http://vgq.vgst68.com
+//	url:'/host',
+    //	请求的参数	
+    data: {},
+    //	设置请求的 header,header 中不能设置 Referer。
+    header: {		
+	},
+    //	(需大写)有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT	
+    method: "POST",
+    //	json	如果设为json,会尝试对返回的数据做一次 JSON.parse	
+   // dataType: "json",
+   dataType:"json",
+    //	text	设置响应的数据类型。合法值:text、arraybuffer	1.7.0
+    responseType: "text",
+    //	收到开发者服务成功返回的回调函数	
+    success() {},
+    //	接口调用失败的回调函数	
+    fail() {},
+    //	接口调用结束的回调函数(调用成功、失败都会执行)
+    complete() {},
+}

+ 266 - 0
common/mehaotian-request/index.js

@@ -0,0 +1,266 @@
+	import https from './interface'
+	const Timestamp = new Date().getTime();//随机时间戳
+	
+/**
+ * 将所有接口统一起来便于维护
+ * 如果项目很大可以将 url 独立成文件,接口分成不同的模块
+ * handle [boolean] 如果需要自己处理 catch 请求 ,传入 true ,交给接口统一处理 ,请传如 false或不传
+ */
+
+//获取用户信息接口
+export const getUserInfo = (data) => {
+    return https({
+        url: '/api/getUserInfo?time='+Timestamp,
+        method: 'GET', 
+        data,
+    })
+}
+//新用户注册接口
+export const regUser = (data) => {
+    return https({
+        url: '/api/regUser?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+
+//场次列表
+export const paimaiGoodspaicat = (data) => {
+    return https({
+        url: '/api/paimai/goodspaicat?time='+Timestamp,
+        method: 'GET', 
+        data,
+    })
+}
+//预约
+export const yuyue = (data) => {
+    return https({
+        url: '/api/paimai/yuyue?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//预约列表
+export const yuyuelist = (data) => {
+    return https({
+        url: '/api/paimai/yuyuelist?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//订单列表
+export const paiorderlist = (data) => {
+    return https({
+        url: '/api/paimai/paiorderlist?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//资金记录
+export const payjilu = (data) => {
+    return https({
+        url: '/api/paimai/payjilu?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//兑换预支付订单
+export const dhyuzhifu = (data) => {
+    return https({
+        url: '/api/paimai/dhyuzhifu?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//兑换付款后调用
+export const dhinfo = (data) => {
+    return https({
+        url: '/api/paimai/dhinfo?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//付款后
+export const fukuan = (data) => {
+    return https({
+        url: '/api/paimai/fukuan?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//兑换预支付订单
+export const zzyuzhifu = (data) => {
+    return https({
+        url: '/api/paimai/zzyuzhifu?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+
+//兑换付款后调用
+export const zzinfo = (data) => {
+    return https({
+        url: '/api/paimai/zzinfo?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//团队信息 
+export const tuanduiinfo = (data) => {
+    return https({
+        url: '/api/paimai/tuanduiinfo?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//团队信息 
+export const tuanduilist = (data) => {
+    return https({
+        url: '/api/paimai/tuanduilist?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//团队信息 
+export const qianbaomingxi = (data) => {
+    return https({
+        url: '/api/paimai/qianbaomingxi?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//体现 api/paimai/applyWithdraw
+export const applyWithdraw = (data) => {
+    return https({
+        url: '/api/paimai/applyWithdraw?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//体现记录
+export const withdrawLog = (data) => {
+    return https({
+        url: '/api/paimai/withdrawLog?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//补票
+export const jiaoshui = (data) => {
+    return https({
+        url: '/api/paimai/jiaoshui?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+
+export const jiefeng = (data) => {
+    return https({
+        url: '/api/paimai/jiefeng?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//捡漏
+export const jianloulist = (data) => {
+    return https({
+        url: '/api/paimai/jianloulist?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//立即捡漏  api/paimai/paiorder
+export const paiorder = (data) => {
+    return https({
+        url: '/api/paimai/paiorder?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//收益 api/paimai/paimai/shifanglist
+export const shifanglist = (data) => {
+    return https({
+        url: '/api/paimai/shifanglist?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//平仓
+export const shifang = (data) => {
+    return https({
+        url: '/api/paimai/shifang?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//捡漏数据 api/paimai/jianlounum
+export const jianlounum = (data) => {
+    return https({
+        url: '/api/paimai/jianlounum?time='+Timestamp,
+        method: 'POST',
+        data,
+    })
+}
+//新手教程
+export const jiaocheng = (data) => {
+    return https({
+        url: '/api/paimai/jiaocheng?time='+Timestamp,
+        method: 'GET',
+        data,
+    })
+}
+//参与规则
+export const guize = (data) => {
+    return https({
+        url: '/api/paimai/guize?time='+Timestamp,
+        method: 'GET',
+        data,
+    })
+}
+//教程详情api/paimai/jiaochengxq
+export const jiaochengxq = (data) => {
+    return https({
+        url: '/api/paimai/jiaochengxq?time='+Timestamp,
+        method: 'GET',
+        data,
+    })
+}
+//节点详情
+export const jiedianxq = (data) => {
+    return https({
+        url: '/api/paimai/jiedianxq?time='+Timestamp,
+        method: 'GET',
+        data,
+    })
+}
+// 默认全部导出
+export default {
+	getUserInfo,
+	regUser,
+	paimaiGoodspaicat,
+	yuyue,
+    paiorderlist,
+	yuyuelist,
+	payjilu,
+	dhyuzhifu,
+	dhinfo,
+	zzyuzhifu,
+	zzinfo,
+	tuanduiinfo,
+	tuanduilist,
+	qianbaomingxi,
+	applyWithdraw,
+	withdrawLog,
+	jiaoshui,
+	fukuan,
+	jiefeng,
+	jianloulist,
+	paiorder,
+	shifanglist,
+	shifang,
+	jianlounum,
+	jiaocheng,
+	guize,
+	jiaochengxq,
+	jiedianxq
+}

+ 72 - 0
common/mehaotian-request/interface.js

@@ -0,0 +1,72 @@
+import _config from './config'; // 导入私有配置
+
+
+
+export default function $http(options) {
+	options.url = _config.url + options.url;	
+	return new Promise((resolve, reject) => {					
+		let token = uni.getStorageSync('token');		
+		uni.showLoading({
+			title: "加载中",
+			mask: true,
+		});
+		_config.header = {	
+			 'Content-Type': 'application/json',
+			 'Authorization':'Bearer '+token	
+			
+		}
+		
+		_config.complete = (response) => {			
+			if (response.statusCode === 200){			
+				resolve(response);
+			} else {				
+				if (options.handle) {
+					reject(response)
+				} else {
+					try {
+						Promise.reject(response).catch(err => {							
+							_page_error(response.statusCode || response.errMsg);
+						});
+					} catch (e) {
+						console.log(e)
+					}
+				}
+			}
+			// 完成之后关闭加载效果			
+
+		}
+		// 开始请求
+		uni.request(Object.assign({}, _config, options));
+		
+		uni.hideLoading();
+	})
+}
+
+// 接口錯誤
+function _error(err, msg = '') {
+	switch (err) {
+		case 400:
+			console.error(msg)
+			// 错误码400的处理方式
+			break;
+	}
+}
+// request 錯誤
+function _page_error(err) {
+	switch (err) {
+	     	case 401:		
+			// 错误码404的处理方式
+			uni.reLaunch({
+				url: "/pages/logon/index.vue",					
+			})
+			console.error("请求背拒绝")
+			break;
+	     	case 404:
+			// 错误码404的处理方式
+			console.error("没有找到页面")
+			break;
+		    case 405:
+			console.error("错误的请求")
+			break;
+	}
+}

+ 1017 - 0
common/mehaotian-request/public.js

@@ -0,0 +1,1017 @@
+import Vue from "vue";
+// import {checkGoogleCode, baseUrl} from "../api/public.js";
+import transCodeImg from "./codeImg";
+// import ElementUI from "element-ui";
+import md5 from "js-md5";
+// import i18n from "@/locale/index.js"; //引入语言包
+// import CryptoJS from "crypto-js";
+import {store} from "../store";
+
+const keyStr = "bi_ecology_qwert"; //加密的秘钥
+// Vue.use(ElementUI);
+// Vue.use(ElementUI, {
+//   i18n: (key, value) => i18n.t(key, value) //重点!!在注册Element时设置i18n的处理方法(这里有个小坑)
+// });
+// let vue = new Vue({
+//   i18n: i18n
+// });
+let Public = new Object();
+Public.imgUpload = "/api/authentication/shangchuan"; //图片上传地址
+Public.img_host = "https://jyh.hashtron.top/";
+Public.kf = 'https://1539049.s2.udesk.cn/im_client/?web_plugin_id=28350';
+Public.captchaId = "7057166a15d74781a0d8620b925436c9"; // 网易滑块
+// 加法
+Public.UserInfo = {};
+Public.getLocalTime = function (nS) {
+  var h, m, s;
+  var date = new Date(nS * 1000);
+  h = (date.getHours() < 10 ? "0" + date.getHours() : date.getHours()) + ":";
+  m =
+    (date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()) +
+    ":";
+  s = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
+  return h + m + s;
+};
+Public.Addition = function (a, b) {
+  var c, d, e;
+  try {
+    c = a.toString().split(".")[1].length;
+  } catch (f) {
+    c = 0;
+  }
+  try {
+    d = b.toString().split(".")[1].length;
+  } catch (f) {
+    d = 0;
+  }
+  return (e = Math.pow(10, Math.max(c, d))), (mul(a, e) + mul(b, e)) / e;
+};
+// 减法
+Public.Subtraction = function (a, b) {
+  var c, d, e;
+  try {
+    c = a.toString().split(".")[1].length;
+  } catch (f) {
+    c = 0;
+  }
+  try {
+    d = b.toString().split(".")[1].length;
+  } catch (f) {
+    d = 0;
+  }
+  return (e = Math.pow(10, Math.max(c, d))), (mul(a, e) - mul(b, e)) / e;
+};
+// 参数val为内容,num为需要保留的位数 bl为true则去除无效零
+Public.toIntercept = function (_val, num, bl, debug) {
+  var val = String(_val)
+  if (val == undefined) return 0; //
+  // var _num = Number(val).toFixed(num + 1); // 补零
+  var de = val.indexOf('.')
+  var arr = val.split('.')
+
+  if (de > -1) { // 小数
+    var rs = arr[1]
+    if (rs.length >= num) { // 小数位多余需保留位数
+      rs = rs.substring(0, num)
+      arr[1] = rs
+    } else {
+      // 补零
+      for (var i = 0; i < num; i++) {
+        rs[i] === undefined ? rs = rs + '0' : ''
+      }
+      arr[1] = rs
+    }
+    return bl ? parseFloat(Number(arr.join('.'))) : arr.join('.')
+  } else {// 整数
+    return bl ? val : Number(val).toFixed(num)
+  }
+};
+// 数组去重 根据数组中的对象
+Public.repeat = function (arr, key) {
+  console.log(arr)
+  const res = new Map();
+  return arr.filter((a) => !res.has(a[key]) && res.set(a[key], 1))
+},
+  // 乘法
+  Public.Multiplication = function (arg1, arg2) {
+    var arg1 = isNaN(Number(arg1)) ? 0 : Number(arg1);
+    var arg2 = isNaN(Number(arg2)) ? 0 : Number(arg2);
+    var r1, r2, m, n, q;
+    if (parseInt(arg1) == arg1) {
+      r1 = 0;
+    } else {
+      r1 = arg1.toString().split(".")[1].length;
+    }
+    if (parseInt(arg2) == arg2) {
+      r2 = 0;
+    } else {
+      r2 = arg2.toString().split(".")[1].length;
+    }
+    m = Math.pow(10, r1);
+    n = Math.pow(10, r2);
+    q = m * n;
+    var sum = (arg1 * m * (arg2 * n)) / q;
+    return sum;
+  };
+Public.toPercent = function (val) {
+  return Number(val) * 100 + "%";
+};
+// 除法
+Public.Division = function (a, b) {
+  var a = a == "" || isNaN(Number(a)) ? 0 : Number(a);
+  var b = b == "" || isNaN(Number(b)) ? 0 : Number(b);
+  var c,
+    d,
+    e = 0,
+    f = 0;
+  try {
+    e = a.toString().split(".")[1].length;
+  } catch (g) {
+  }
+  try {
+    f = b.toString().split(".")[1].length;
+  } catch (g) {
+  }
+  return (
+    (c = Number(a.toString().replace(".", ""))),
+      (d = Number(b.toString().replace(".", ""))),
+      mul(c / d, Math.pow(10, f - e))
+  );
+};
+Public.toLowFixed1 = function (num, n) {
+  var c, e;
+  try {
+    c = num.toString().split(".")[1].length;
+  } catch (f) {
+    c = 0;
+  }
+  e = Math.pow(10, Math.max(0, n));
+  let str = mul(num, e) / e;
+  str = str + "";
+  if (str.indexOf(".") == -1) {
+    str = str + ".0000000000";
+  } else {
+    str = str + "00000000";
+  }
+  return str.substring(0, str.indexOf(".") + n + 1);
+};
+Public.formatSeconds = function (value) {
+  var theTime = parseInt(value);// 需要转换的时间秒
+  var theTime1 = 0;// 分
+  var theTime2 = 0;// 小时
+  var theTime3 = 0;// 天
+  if (theTime > 60) {
+    theTime1 = parseInt(theTime / 60);
+    theTime = parseInt(theTime % 60);
+    if (theTime1 > 60) {
+      theTime2 = parseInt(theTime1 / 60);
+      theTime1 = parseInt(theTime1 % 60);
+      if (theTime2 > 24) {
+        //大于24小时
+        theTime3 = parseInt(theTime2 / 24);
+        theTime2 = parseInt(theTime2 % 24);
+      }
+    }
+  }
+  var result = '';
+  if (theTime > 0) {
+    result = "" + parseInt(theTime) + "秒";
+  }
+  if (theTime1 > 0) {
+    result = "" + parseInt(theTime1) + "分" + result;
+  }
+  if (theTime2 > 0) {
+    result = "" + parseInt(theTime2) + "小时" + result;
+  }
+  if (theTime3 > 0) {
+    result = "" + parseInt(theTime3) + "天" + result;
+  }
+  return result;
+}
+// 保留小数位  btc btc_usdt btc/usdt   字母不区分大小写
+Public.cutDot = function (num, type) {
+  if (type.indexOf("_") != -1) {
+    type = type.split("_")[0];
+  }
+  if (type.indexOf("/") != -1) {
+    type = type.split("/")[0];
+  }
+  type = type.toUpperCase();
+  if (type == "BTC") {
+    return this.toLowFixed1(parseFloat(num), 6);
+  } else if (type == "XRP") {
+    return this.toLowFixed1(parseFloat(num), 4);
+  } else if (type == "ETH") {
+    return this.toLowFixed1(parseFloat(num), 6);
+  } else if (type == "LTC") {
+    return this.toLowFixed1(parseFloat(num), 2);
+  } else if (type == "EOS") {
+    return this.toLowFixed1(parseFloat(num), 4);
+  } else if (type == "BCH") {
+    return this.toLowFixed1(parseFloat(num), 2);
+  } else if (type == "ETC") {
+    return this.toLowFixed1(parseFloat(num), 4);
+  } else if (type == "TRX") {
+    return this.toLowFixed1(parseFloat(num), 6);
+  } else if (type == "ZEC") {
+    return this.toLowFixed1(parseFloat(num), 2);
+  } else if (type == "DASH") {
+    return this.toLowFixed1(parseFloat(num), 2);
+  } else if (type == "USDT") {
+    return this.toLowFixed1(parseFloat(num), 4);
+  } else if (type == "CNY") {
+    return this.toLowFixed1(parseFloat(num), 2);
+  } else if (type == "NUM") {
+    return this.toLowFixed1(parseFloat(num), 6);
+  } else if (type == "UDR") {
+    // 涨跌幅
+    return this.toLowFixed1(parseFloat(num), 2);
+  } else {
+    return this.toLowFixed1(parseFloat(num), 8);
+  }
+};
+// 百分数转小数
+Public.toPoint = function (percent) {
+  if (percent == 0) {
+    return 0;
+  }
+  var str = percent.replace("%", "");
+  str = str / 100;
+  return str;
+};
+// 验证正整数
+Public.integer = function (value) {
+  var reg = /^\+?[1-9][0-9]*$/;
+  if (!reg.test(value)) {
+    return false;
+  } else {
+    return true;
+  }
+};
+// 验证小数最多8位
+Public.integerDecimal = function (value) {
+  var reg = /^\d{1}$|^\d{1}(\.?\d{1,8})$/;
+  if (!reg.test(value)) {
+    return false;
+  } else {
+    return true;
+  }
+};
+// 时间戳转化
+Public.timestampToTime = function (timestamp, mat) {
+  var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
+  var Y, M, D, h, m, s;
+  var format = '-'
+  if (mat) format = mat
+  Y = date.getFullYear() + format;
+  M =
+    (date.getMonth() < 9 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1) +
+    format;
+  D = (date.getDate() < 9 ? "0" + date.getDate() : date.getDate()) + " ";
+  h = (date.getHours() < 9 ? "0" + date.getHours() : date.getHours()) + ":";
+  m =
+    (date.getMinutes() < 9 ? "0" + date.getMinutes() : date.getMinutes()) + ":";
+  s = date.getSeconds() < 9 ? "0" + date.getSeconds() : date.getSeconds();
+
+  return Y + M + D + h + m + s;
+};
+// 时间戳转化
+Public.timestampToTimeshian = function (timestamp) {
+  var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
+  var Y, M, D, h, m, s;
+  Y = date.getFullYear() + "-";
+  M =
+    (date.getMonth() < 9 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1) +
+    "-";
+  D = (date.getDate() < 9 ? "0" + date.getDate() : date.getDate()) + " ";
+  h = (date.getHours() < 9 ? "0" + date.getHours() : date.getHours()) + ":";
+  m =
+    (date.getMinutes() < 9 ? "0" + date.getMinutes() : date.getMinutes()) + ":";
+  s = date.getSeconds() < 9 ? "0" + date.getSeconds() : date.getSeconds();
+  return Y + M + D;
+};
+Public.timestampToTimeshian1 = function (timestamp) {
+  var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
+  var Y, M, D, h, m, s;
+  Y = date.getFullYear() + "-";
+  M =
+    (date.getMonth() < 9 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1) +
+    "-";
+  D = (date.getDate() < 9 ? "0" + date.getDate() : date.getDate()) + " ";
+  h = (date.getHours() < 9 ? "0" + date.getHours() : date.getHours()) + ":";
+  m =
+    (date.getMinutes() < 9 ? "0" + date.getMinutes() : date.getMinutes()) + ":";
+  s = date.getSeconds() < 9 ? "0" + date.getSeconds() : date.getSeconds();
+  return h + m + s;
+};
+
+// 函数节流
+// throttle(fn, 1000) 函数foo每次执行间隔最小为1000ms
+// 第一个参数也可以为数组:throttle([fn, arg1, arg2...], 1000)
+// 同一页面多个节流时需要传mark(String类型) 区分全局变量防止冲突
+Public.throttle = function (obj, t, mark) {
+  var windowVar = (function () {
+    if (mark == undefined) return "$$THROTTLE_CTRL";
+    if (mark.constructor === String || mark.constructor === Number)
+      return "$$THROTTLE_CTRL" + "_" + mark;
+    else return "$$THROTTLE_CTRL";
+  })();
+  if (!window[windowVar]) {
+    window[windowVar] = true;
+
+    if (obj.constructor === Function) obj();
+    if (obj.constructor !== Function && obj.constructor !== Array)
+      throw new TypeError(
+        "throttle(option , time) 'option' Musb be a Function or Array"
+      );
+    if (obj.constructor === Array) {
+      var fn = obj[0];
+      if (fn.constructor !== Function)
+        throw new TypeError("throttle(arr , time) 'arr[0]' Musb be a Function");
+      obj.splice(0, 1);
+      fn.apply(null, obj);
+    }
+    window.setTimeout(function () {
+      window[windowVar] = null;
+    }, t);
+  }
+};
+//密码格式
+Public.pwd = function (val) {
+  var reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$/;
+  return reg.test(val);
+};
+//邮箱验证
+Public.email = function (em) {
+  // var ema = /^[A-Za-z0-9\u4e00-\u9fa5_]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
+  // if (!ema.test(em)) {
+  //   return false;
+  // } else {
+  //   return true;
+  // }
+  var exist = em.indexOf('@') > -1;
+  if (exist) {
+    return true;
+  } else {
+    return false;
+  }
+
+};
+// 手机正则
+Public.checkMobile = function (sMobile) {
+
+  var phone = sMobile.trim();
+  // var reg = /^1\d{10}$/;
+  // return reg.test(phone);
+  if (isNaN(Number(phone))) {
+    return false
+  }
+  return true
+
+
+};
+//身份证号验证
+Public.isCardID = function (sId) {
+  if (!/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(sId)) {
+    return false;
+  } else {
+    return true;
+  }
+};
+//银行卡号验证
+Public.bank_car = function (val) {
+  if (!isNaN(val) && val.length > 10 && val.length < 20) {
+    return true;
+  } else {
+    return false;
+  }
+};
+Public.Eliminate = function (str) {
+  var rs = "";
+  for (var i = 0; i < str.length; i++) {
+    rs = rs + str.substr(i, 1).replace(/^\s+/, "");
+  }
+  return rs;
+};
+//验证码格式验证
+Public.code = function (val) {
+  var reg = /^\d{6}$/;
+  return reg.test(val);
+};
+Public.name = function (val) {
+  var reg1 = /^([\u4e00-\u9fa5]){2,7}$/; //只能是中文,长度为2-7位
+  var reg2 = /^[a-zA-Z\/ ]{2,20}$/; //英文
+  if (reg1.test(val) || reg2.test(val)) {
+    return true;
+  } else {
+    return false;
+  }
+  //return reg2.test(val);
+};
+//验证是否为大于0的非空纯数字
+Public.Ints = function (val) {
+  if (!val) {
+    return false;
+  } else if (val <= 0) {
+    return false;
+  } else {
+    return true;
+  }
+};
+// 正数
+// Public.validateNums = function (num) {
+//  var reg = /^\d+$|^\d+\.\d+$/g
+//   if(reg.test(num)) return true;
+//   return false ;
+// }
+Public.isInteger = function (obj) {
+  var obj = Number(obj);
+  return Math.floor(obj) === obj;
+};
+//倒计时执行函数封装
+Public.setTime = function (_this) {
+  _this.btnCode = {
+    time: 59,
+    disabled: true
+  };
+  _this.$message({
+    // message: _this.$t('header.tips[1]'),
+    message: "验证码发送成功",
+    type: "success"
+  });
+  var path = _this.$route.path;
+  var set = setInterval(function () {
+    if (_this.$route.path != path) clearInterval(set);
+    _this.btnCode.time--;
+    if (_this.btnCode.time <= 0) {
+      _this.btnCode = {
+        time: "重获验证码",
+        disabled: false
+      };
+      clearInterval(set);
+    }
+  }, 1000);
+};
+
+//密码加密
+Public.transPwd = function (msg, type, _this) {
+
+
+};
+//提示信息封装
+Public.msg = function (msg, type, _this) {
+  // _this.$message({
+  //   showClose: true,
+  //   message: msg,
+  //   type: type,
+  //   time: 2100000
+  // });
+  const h = _this.$createElement;
+  _this.$notify[type]({
+    message: msg,
+  });
+
+};
+//传一个手机号 返回手机号的前3位和后四位 其他的显示* (手机号加密)
+Public.telStart = function (num, type) {
+  let _num = String(num)
+  //获得手机号的前3位
+  if (!_num) {
+    return false;
+  }
+  var a = _num.slice(0, 3);
+  var b = _num.slice(7);
+  var ok = a + "****" + b;
+  if (type === 'bank') {
+
+    var reg = /^(\d{4})\d+(\d{4})$/;
+    _num = _num.replace(reg, "$1 **** **** $2");
+    return _num
+  }
+  return ok;
+};
+Public.Trim = function (str) {
+  return str.replace(/(^\s*)|(\s*$)/g, "");
+};
+Public.codeImg = function (id) {
+  // 生成验证码
+  function yanzhenma(window, document) {
+    var size = 4; //设置验证码长度
+    function GVerify(options) {
+      //创建一个图形验证码对象,接收options对象为参数
+      this.options = {
+        //默认options参数值
+        id: "", //容器Id
+        canvasId: "verifyCanvas", //canvas的ID
+        width: "200", //默认canvas宽度
+        height: "44", //默认canvas高度
+        type: "blend", //图形验证码默认类型blend:数字字母混合类型、number:纯数字、letter:纯字母
+        code: ""
+      };
+      if (Object.prototype.toString.call(options) == "[object Object]") {
+        //判断传入参数类型
+        for (var i in options) {
+          //根据传入的参数,修改默认参数值
+          this.options[i] = options[i];
+        }
+      } else {
+        this.options.id = options;
+      }
+      this.options.numArr = "0,1,2,3,4,5,6,7,8,9".split(",");
+      this.options.letterArr = getAllLetter();
+      this._init();
+      this.refresh();
+    }
+
+    GVerify.prototype = {
+      /**版本号**/
+      version: "1.0.0",
+      /**初始化方法**/
+      _init: function () {
+        var con = document.getElementById(this.options.id);
+        var canvas = document.createElement("canvas");
+        this.options.width = con.offsetWidth > 0 ? con.offsetWidth : "200";
+        this.options.height = con.offsetHeight > 0 ? con.offsetHeight : "44";
+        canvas.id = this.options.canvasId;
+        canvas.width = this.options.width;
+        canvas.height = this.options.height;
+        canvas.style.cursor = "pointer";
+        canvas.innerHTML = "您的浏览器版本不支持canvas";
+        con.appendChild(canvas);
+        var parent = this;
+        canvas.onclick = function () {
+          parent.refresh();
+        };
+      },
+      /**生成验证码**/
+      refresh: function () {
+        this.options.code = "";
+        var canvas = document.getElementById(this.options.canvasId);
+        if (canvas.getContext) {
+          var ctx = canvas.getContext("2d");
+        } else {
+          return;
+        }
+        ctx.textBaseline = "middle";
+        ctx.fillStyle = randomColor(180, 240);
+        ctx.fillRect(0, 0, this.options.width, this.options.height);
+        if (this.options.type == "blend") {
+          //判断验证码类型
+          var txtArr = this.options.numArr.concat(this.options.letterArr);
+        } else if (this.options.type == "number") {
+          var txtArr = this.options.numArr;
+        } else {
+          var txtArr = this.options.letterArr;
+        }
+        for (var i = 1; i <= size; i++) {
+          var txt = txtArr[randomNum(0, txtArr.length)];
+          this.options.code += txt;
+          ctx.font =
+            randomNum(this.options.height, this.options.height) + "px SimHei"; //随机生成字体大小
+          ctx.fillStyle = randomColor(50, 160); //随机生成字体颜色
+          ctx.shadowOffsetX = randomNum(-3, 3);
+          ctx.shadowOffsetY = randomNum(-3, 3);
+          ctx.shadowBlur = randomNum(-3, 3);
+          ctx.shadowColor = "rgba(0, 0, 0, 0.3)";
+          var x = (this.options.width / (size + 1)) * i;
+          var y = this.options.height / 2;
+          var deg = randomNum(-30, 30);
+          /**设置旋转角度和坐标原点**/
+          ctx.translate(x, y);
+          ctx.rotate((deg * Math.PI) / 180);
+          ctx.fillText(txt, 0, 0);
+          /**恢复旋转角度和坐标原点**/
+          ctx.rotate((-deg * Math.PI) / 180);
+          ctx.translate(-x, -y);
+        }
+        /**绘制干扰线**/
+        for (var i = 0; i < 4; i++) {
+          ctx.strokeStyle = randomColor(40, 180);
+          ctx.beginPath();
+          ctx.moveTo(
+            randomNum(0, this.options.width),
+            randomNum(0, this.options.height)
+          );
+          ctx.lineTo(
+            randomNum(0, this.options.width),
+            randomNum(0, this.options.height)
+          );
+          ctx.stroke();
+        }
+        /**绘制干扰点**/
+        for (var i = 0; i < this.options.width / 4; i++) {
+          ctx.fillStyle = randomColor(0, 255);
+          ctx.beginPath();
+          ctx.arc(
+            randomNum(0, this.options.width),
+            randomNum(0, this.options.height),
+            1,
+            0,
+            2 * Math.PI
+          );
+          ctx.fill();
+        }
+      },
+      /**验证验证码**/
+      validate: function (code) {
+        var code = code.toLowerCase();
+        var v_code = this.options.code.toLowerCase();
+        if (code == v_code) {
+          return true;
+        } else {
+          this.refresh();
+          return false;
+        }
+      }
+    };
+
+    /**生成字母数组**/
+    function getAllLetter() {
+      var letterStr =
+        "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
+      return letterStr.split(",");
+    }
+
+    /**生成一个随机数**/
+    function randomNum(min, max) {
+      return Math.floor(Math.random() * (max - min) + min);
+    }
+
+    /**生成一个随机色**/
+    function randomColor(min, max) {
+      var r = randomNum(min, max);
+      var g = randomNum(min, max);
+      var b = randomNum(min, max);
+      return "rgb(" + r + "," + g + "," + b + ")";
+    }
+
+    window.GVerify = GVerify;
+  }
+
+  yanzhenma(window, document);
+  new GVerify(id);
+};
+//页面路由跳转封装
+Public.go = function (url, time, _this) {
+  _this.$router.push({
+    path: url
+  });
+};
+Public.scrollTop = function () {
+  document.body.scrollTop = document.documentElement.scrollTop = 0;
+};
+
+function mul(a, b) {
+  var c = 0,
+    d = a.toString(),
+    e = b.toString();
+  try {
+    c += d.split(".")[1].length;
+  } catch (f) {
+  }
+  try {
+    c += e.split(".")[1].length;
+  } catch (f) {
+  }
+  return (
+    (Number(d.replace(".", "")) * Number(e.replace(".", ""))) / Math.pow(10, c)
+  );
+}
+
+//判断是否登录执行函数
+Public.isLogin = function (_this) {
+  if (!sessionStorage.account || !sessionStorage.token) {
+    _this.$public.msg(_this.$t("confirm[4]"), "warning", _this);
+    _this.$public.go("login", 1000, _this);
+  }
+};
+//提示信息封装
+Public.confirm = function (msg, what, _this) {
+  _this
+    .$confirm(msg, _this.$t("confirm[0]"), {
+      confirmButtonText: _this.$t("confirm[1]"),
+      cancelButtonText: _this.$t("confirm[2]"),
+      type: "warning"
+    })
+    .then(() => {
+      _this.$public.go(what, 800, _this);
+    })
+    .catch(() => {
+      _this.$message({
+        type: "info",
+        message: _this.$t("confirm[3]")
+      });
+    });
+  return false;
+};
+
+//提示没有设置资金密码
+Public.confirm_fund_pwd = function (msg, what, _this) {
+  _this
+    .$confirm(msg, _this.$t("confirm[0]"), {
+      confirmButtonText: _this.$t("confirm[1]"),
+      cancelButtonText: _this.$t("confirm[2]"),
+      type: "warning"
+    })
+    .then(() => {
+      _this.$public.go(what, 800, _this);
+    })
+    .catch(() => {
+      _this.$message({
+        type: "info",
+        message: _this.$t("confirm[3]")
+      });
+    });
+  return false;
+};
+
+// 币种图标
+Public.transCodeImg = function (code) {
+  return transCodeImg(code);
+};
+//清除对象值
+Public.clearObj = function (obj, save) {
+  for (var i in obj) {
+    if (i !== save) {
+      obj[i] = undefined;
+    }
+  }
+};
+//谷歌验证
+Public.googleVerify = function (isLogin) {
+  //直接调用 不用额外判断用户谷歌开关状态 内部统一处理
+  return new Promise((resolve, reject) => {
+    if (isLogin || store.getters.googleState == 1) {
+      //谷歌验证已开启的用户
+      // '请输入谷歌验证码', '谷歌验证'
+      vue
+        .$prompt(
+          vue.$t("googleDialog.tips[0]"),
+          vue.$t("googleDialog.tips[1]"),
+          {
+            confirmButtonText: vue.$t("center.baseInfo[33]"),
+            cancelButtonText: vue.$t("center.baseInfo[34]"),
+            customClass: "prompt_googleVerify",
+            inputType: "password",
+            inputPattern: /^\d{6}$/,
+            inputErrorMessage: vue.$t("googleDialog.tips[2]")
+          }
+        )
+        .then(data => {
+          // 请求谷歌验证码接口,成功返回true 失败false
+          let _data = {
+            code: data.value,
+            stockUserId: store.getters.Id
+          };
+          checkGoogleCode(_data).then(res => {
+            if (res.data.code == 200) {
+              resolve(true);
+            } else {
+              resolve(false);
+            }
+          });
+        })
+        .catch(() => {
+          reject("取消输入");
+        });
+    } else {
+      //谷歌验证关闭的用户
+      resolve(true);
+    }
+  });
+};
+// 保留位数
+Public.savePoint = function (code) {
+  if (!code) {
+    return 2;
+  }
+  var _code = code;
+  if (_code.indexOf("/") > -1) {
+    _code = _code.replace("/", "_");
+  }
+  _code = _code.toLowerCase();
+
+  var obj = {
+    btc_usdt: 2,
+    eth_usdt: 2,
+    bch_usdt: 2,
+    etc_usdt: 4,
+    xrp_usdt: 5,
+    ltc_usdt: 2,
+    eos_usdt: 4,
+    dash_usdt: 2,
+    ht_usdt: 4,
+    atom_usdt: 4,
+    trx_usdt: 6,
+    imc_usdt: 4,
+
+    link_usdt: 4,
+    bsv_usdt: 4,
+    trx_usdt: 6,
+    ada_usdt: 6,
+    xlm_usdt: 6,
+    xmr_usdt: 2,
+    neo_usdt: 2,
+    xem_usdt: 4,
+    iota_usdt: 4,
+    zec_usdt: 2,
+    omg_usdt: 4,
+    ont_usdt: 4,
+    defalut: 2
+  };
+  var num = obj[_code] ? obj[_code] : obj.defalut;
+  return num;
+};
+Public.cpTime = function (endTime) {
+  let start = new Date().getTime()
+  let end = new Date(endTime).getTime()
+  let time = end - start;
+  if (time >= 0) {
+    let day = Math.floor(time / 86400000);
+    time = time - day * 86400000;
+    let hours = Math.floor(time / 3600000);
+    time = time - hours * 3600000;
+    let min = Math.floor(time / 60000);
+    time = time - min * 60000;
+    let second = Math.floor(time / 1000);
+    let obj = {
+      day,
+      hours,
+      min,
+      second
+    };
+    //   let obj = {
+    //     day:day<10?'0'+day:day,
+    //     hours:hours<10?'0'+hours:hours,
+    //     min:min<10?'0'+min:min,
+    //     second:second<10?'0'+second:second
+    // };
+    obj.hours = obj.day * 24 + obj.hours * 1
+    obj.hours < 10 ? obj.hours = '0' + obj.hours : ''
+    obj.min < 10 ? obj.min = '0' + obj.min : ''
+    obj.second < 10 ? obj.second = '0' + obj.second : ''
+    return `${obj.hours}:${obj.min}:${obj.second}`
+  } else {
+    return false
+  }
+},
+// 保留位数 下单数量
+  Public.savePoint_order = function (code) {
+    if (!code) {
+      return 6;
+    }
+    var _code = code;
+    if (_code.indexOf("/") > -1) {
+      _code = _code.replace("/", "_");
+    }
+    _code = _code.toLowerCase();
+
+    var obj = {
+      btc_usdt: 6,
+      eth_usdt: 4,
+      bch_usdt: 4,
+      etc_usdt: 4,
+      xrp_usdt: 2,
+      ltc_usdt: 4,
+      eos_usdt: 4,
+      dash_usdt: 4,
+      atom_usdt: 4,
+      ht_usdt: 4,
+      imc_usdt: 4,
+      link_usdt: 4,
+      bsv_usdt: 4,
+      trx_usdt: 4,
+      ada_usdt: 4,
+      xlm_usdt: 4,
+      xmr_usdt: 4,
+      neo_usdt: 4,
+      xem_usdt: 4,
+      iota_usdt: 4,
+      zec_usdt: 4,
+      omg_usdt: 4,
+      ont_usdt: 4,
+
+      defalut: 2
+    };
+    var num = obj[_code] ? obj[_code] : obj.defalut;
+    return num;
+  };
+Public.transPrice_order = function (val, code, bl) {
+  //按需将价格位数保留
+  if (val == undefined) return 0; //
+  var num = this.savePoint_order(code);
+  var _num = Number(val).toFixed(num + 1);
+  if (bl) {
+    return parseFloat(Number(_num.substr(0, _num.length - 1)));
+  }
+  return _num.substr(0, _num.length - 1);
+};
+
+
+Public.CryptographicLand = function (argument) {
+  //登录密码加密
+  return md5(argument);
+
+};
+Public.ungzip = function (msg, call) {
+
+
+  let reader = new FileReader();
+  reader.onload = () => {
+    let result = JSON.parse(
+      this.$pako.inflate(reader.result, {to: "string"})
+    );
+  };
+  let blob = msg.data;
+  try {
+    reader.readAsBinaryString(blob);
+  } catch (err) {
+    console.log(err);
+  }
+
+
+};
+
+Public.Cryptographiccapital = function (argument) {
+  //资金密码加密
+  return md5(argument);
+};
+Public.transPrice = function (val, code, bl) {
+  //按需将价格位数保留
+  if (val == undefined) return 0; //
+  var num = this.savePoint(code);
+  var _num = Number(val).toFixed(num + 1);
+  if (bl) {
+    return parseFloat(_num.substr(0, _num.length - 1));
+  }
+  return _num.substr(0, _num.length - 1);
+};
+
+
+Public.CryptographicLand = function (argument) {
+  //登录密码加密
+  return md5(argument);
+};
+
+Public.Cryptographiccapital = function (argument) {
+  //资金密码加密
+  return md5(argument);
+};
+// 加密
+Public.encrypt = function (word) {
+  return word
+  // return vue.$jse.encrypt(String(word))
+  var key = CryptoJS.enc.Utf8.parse(keyStr);
+  var srcs = CryptoJS.enc.Utf8.parse(word);
+  var encrypted = CryptoJS.AES.encrypt(srcs, key, {
+    mode: CryptoJS.mode.ECB,
+    // padding: CryptoJS.pad.Pkcs7
+    padding: CryptoJS.pad.ZeroPadding
+  }); // 加密模式为ECB,补码方式为PKCS5Padding(也就是PKCS7)
+
+  return encrypted.toString();
+};
+// 解密
+Public.decrypt = function (word) {
+  var key = CryptoJS.enc.Utf8.parse(keyStr);
+  var decrypt = CryptoJS.AES.decrypt(word, key, {
+    mode: CryptoJS.mode.ECB,
+    // padding: CryptoJS.pad.Pkcs7
+    padding: CryptoJS.pad.ZeroPadding
+  });
+  return CryptoJS.enc.Utf8.stringify(decrypt).toString();
+};
+// 獲取 cookie
+Public.getCookie = function (name) {
+  var arr,
+    reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
+  if ((arr = document.cookie.match(reg))) return unescape(arr[2]);
+  else return null;
+};
+
+//获取浏览器查询字符串
+Public.GetQueryString = function (name) {
+  //截取url
+  var reg = new RegExp("(^|&|)" + name + "=([^&?]*)(&|$|)", "i");
+  var r = window.location.search.substr(1).match(reg); //获取url中"?"符后的字符串并正则匹配
+  var context = "";
+  if (r != null) context = r[2];
+  reg = null;
+  r = null;
+  return context == null || context == "" || context == "undefined"
+    ? ""
+    : context;
+};
+
+Public.webSocket = function (url) {
+  let _webSocket;
+  if ("WebSocket" in window) {
+    _webSocket = new WebSocket(url);
+  } else if ("MozWebSocket" in window) {
+    _webSocket = new MozWebSocket(url);
+  } else {
+    _webSocket = new SockJS(url);
+  }
+  return _webSocket;
+};
+export default Public;

+ 75 - 0
common/mehaotian-request/router.js

@@ -0,0 +1,75 @@
+uni.addInterceptor('request', {
+	invoke(args) {
+		// request 触发前拼接 url 
+		const {
+			data,
+			method,
+		} = args;
+		if (method === "GET") {
+			// 如果是get请求,且params是数组类型如arr=[1,2],则转换成arr=1&arr=2
+			const newData = qs.stringify(data, {
+				arrayFormat: "repeat"
+			})
+			delete args.data;
+			args.url = `${args.url}?${newData}`;
+		}
+	},
+	success(args) {},
+	fail(err) {},
+	complete(res) {}
+})
+
+
+import config from "./config.js"
+export default function initApp() {
+	/**
+	 * 页面跳转拦截器
+	 */
+	let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
+	list.forEach(item => { //用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器
+		uni.addInterceptor(item, {
+			invoke(e) { // 调用前拦截
+				//获取用户的token
+				const token = uni.getStorageSync('uni_id_token'),
+					//token是否已失效
+					tokenExpired = uni.getStorageSync('uni_id_token_expired') < Date.now(),
+					//获取要跳转的页面路径(url去掉"?"和"?"后的参数)
+					url = e.url.split('?')[0];
+				let notNeed = config.whiteList.includes(url)
+				// 如果在whiteList里面就不需要登录
+				if (notNeed) {
+					return e
+				} else {
+					//需要登录
+					if (token == '' || tokenExpired) {
+						uni.showToast({
+							title: '请先登录',
+							icon: 'none'
+						})
+						uni.navigateTo({
+							url: config.loginPage
+						})
+						return false
+					}else{
+						return e
+					}
+				}
+				
+			},
+			fail(err) { // 失败回调拦截 
+				console.log(err);
+				if (Debug) {
+					console.log(err);
+					uni.showModal({
+						content: JSON.stringify(err),
+						showCancel: false
+					});
+				}
+			}
+		})
+	})
+	//添加uniCloud云函数拦截器
+	
+
+}
+

+ 54 - 0
common/web3modal.vue

@@ -0,0 +1,54 @@
+<template>
+	<view class="modal">
+		<w3m-button />
+	</view>
+</template>
+
+<script>
+	import { createWeb3Modal, walletConnectProvider, EIP6963Connector } from '@web3modal/wagmi'
+	
+	import { configureChains, createConfig } from '@wagmi/core'
+	import { mainnet } from '@wagmi/core/chains'
+	import { publicProvider } from '@wagmi/core/providers/public'
+	import { InjectedConnector } from '@wagmi/core'
+	import { CoinbaseWalletConnector } from '@wagmi/core/connectors/coinbaseWallet'
+	import { WalletConnectConnector } from '@wagmi/core/connectors/walletConnect'
+	
+	// 1. Define constants
+	const projectId = 'c46fe115e62fd8cc283e8db10b3a7fa7'
+	
+	// 2. Configure wagmi client
+	const { chains, publicClient } = configureChains([mainnet], [
+	  walletConnectProvider({ projectId }),
+	  publicProvider()
+	])
+	
+	const metadata = {
+	  name: 'Web3Modal',
+	  description: 'Web3Modal Example',
+	  url: 'https://web3modal.com',
+	  icons: ['https://avatars.githubusercontent.com/u/37784886']
+	}
+	const a1={ chains, options: { projectId, showQrModal: false, metadata } }
+	const a2={ chains }
+	const a3={ chains, options: { shimDisconnect: true } }
+	const a4={ chains, options: { appName: metadata.name } }
+	console.log(a1,a2,a3,a4)
+	const wagmiConfig = createConfig({
+	  autoConnect: true,
+	  connectors: [
+	    new WalletConnectConnector({ chains, options: { projectId, showQrModal: false, metadata } }),
+	    new EIP6963Connector({ chains }),
+	    new InjectedConnector({ chains, options: { shimDisconnect: true } }),
+	    new CoinbaseWalletConnector({ chains, options: { appName: metadata.name } })
+	  ],
+	  publicClient
+	})
+	console.log(wagmiConfig)
+	// 3. Create modal
+	const modal = createWeb3Modal({ wagmiConfig, projectId, chains })
+	console.log(modal)
+</script>
+
+<style>
+</style>

+ 23 - 0
index.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />	 
+	 <meta http-equiv="pragram" content="no-cache">
+	 <meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate">
+	 <meta http-equiv="expires" content="0">
+    <script>
+      var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
+        CSS.supports('top: constant(a)'))
+      document.write(
+        '<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
+        (coverSupport ? ', viewport-fit=cover' : '') + '" />')
+    </script>
+    <title></title>
+    <!--preload-links-->
+    <!--app-context-->
+  </head>
+  <body>
+    <div id="app"><!--app-html--></div>
+    <script type="module" src="main.js"></script>
+  </body>
+</html>

+ 54 - 0
lang/arabic.js

@@ -0,0 +1,54 @@
+export default {
+	   index:{
+			language:' إعدادات اللغة ',		//阿拉伯语	
+		},
+		lang:{
+			languageSet_0:'中文繁體',
+			languageSet_1:'中文简体',
+			languageSet_2:'English',
+			languageSet_3:'Español',//西班牙语
+			languageSet_4:'Italiano',//意大利语
+			languageSet_5:'Portugués',//葡萄牙语
+			languageSet_6:'عربي',//阿拉伯语
+			languageSet_7:'Français',//法语
+			languageSet_8:'日本語',//日语
+			languageSet_9:'Türk dili',//土耳其
+			languageSet_10:'Ελληνικά',//希腊
+			logon:['عملة العالم','رقم الحساب','الرجاء إدخال رقم الحساب','كلمة السر','الرجاء إدخال كلمة السر'],
+			register:['عملة مسجلة في العالم','تسجيل فوري','رمز التحقق','الرجاء إدخال رمز التحقق','الحصول على','كلمة السر التجارية','الرجاء إدخال كلمة السر','رمز الدعوة','الرجاء إدخال رمز الدعوة','الحساب الحالي'],
+			forgotPwd:['نسيت كلمة السر','كلمة السر الجديدة','الرجاء تعيين كلمة مرور جديدة','تأكيد كلمة المرور','يرجى تأكيد كلمة المرور مرة أخرى','كلمة السر غير متناسقة'],
+			
+			index:{			
+				nav:['دردشة المجتمع','بلدي الأصول','أوامري','دعوة الأصدقاء','خدمة العملاء على الانترنت','عنا','ضبط','النظام الذكي','ترتيب خاص','معرض أوامر','ماي شير','قواعد التداول','اتصل بنا','الاسم الحقيقي التوثيق'],
+				notice:['إعلان'],//公告
+				ai:['AIذكي نقل الطوب','سعر السوق','دخل','أيام .','سحابة منظمة العفو الدولية الطلاء ميزة المنتج','بداية .','ماكس القابضة','رسوم عمال المناجم','صافي الدخل'],
+				preipo:['القطاع الخاص','كمية الشراء','الرجاء إدخال كمية الشراء','الأسعار','الكمية','السعر الإجمالي'],
+				price:['اقتباسات'],
+				gallery:['معرض','الأسعار'],
+				realName:[' الاسم ',' الرجاء إدخال اسم ' , ' رقم الهوية ' , ' الرجاء إدخال رقم الهوية ' , ' واجهة بطاقة الهوية ' , ' تحميل واجهة بطاقة الهوية ' , ' عكس الجانب من بطاقة الهوية ' ,
+				' تحميل عكس الجانب من بطاقة الهوية ' , ' تقديم ']
+			},
+			my:{
+				setup:['ضبط','كلمة السر','عدل','كلمة السر التجارية','لغة التبديل','الرجاء إدخال رمز التحقق','الحصول على','الرجاء إدخال كلمة المرور الجديدة','يرجى تأكيد كلمة المرور مرة أخرى','كلمة السر ليست هي نفسها مرتين','درجة'],
+				invite:['دعوة الأصدقاء','نسخ الرابط','نسخ الهاتف'],
+				chatgpt:['AIرسم','صورة جيل','توليد النص','خلق','الكلمات الرئيسية','اختيار نمط','صورة جيل .','يرجى تحميل الصورة الأصلية'],
+				orderList:['أوامري','رقم الطلب','مبلغ الاستثمار','نسبة الدخل','مبلغ الدخل','دورة الاستثمار','وقت النظام','الإيرادات المتوقعة','وقت انتهاء الصلاحية'],
+				assets:['مجموع الأصول','الأصول','سجل','شحن','رفع العملة','نقل','تفاصيل الأصول'],
+				gallery:['تفاصيل المعرض','الاستيلاء على الوقت','السعر الحالي','وصف السلعة'],
+				PreIPO:['تفاصيل الاكتتاب الخاص','اسم العملة','وقت الإصدار','نهاية الوقت','عرض المشروع','إصدار الكمية','سعر الإصدار','الكمية المتبقية'],
+				deposit:['عنوان الشحن'],
+				withdraw:['متاح','سلسلة مشتركة','عنوان العملة','الرجاء إدخال أو اضغط على عنوان لصق لفترة طويلة','عدد القطع النقدية','يرجى إدخال عدد من العملات','رسوم المناولة','كلمة السر التجارية'],
+				transer:['تحويل المبلغ','الرجاء إدخال رقم التحويل','حساب الطرف الآخر','الرجاء إدخال رقم الحساب','خروج','في'],
+				team:['مباشرة دفع عدد','مشاركة فعالة','تقاسم الإيرادات','بلدي دفع مستقيم','صندوق البريد','درجة','أداء','وقت التسجيل']
+			},
+			btn:['سجل','التسجيل','خروج الدخول','أكّد','ألغى','حفظ الصور','أريد أن تبادل لاطلاق النار','شراء على الفور','خلق','وضع النظام على الفور','تجربة منظمة العفو الدولية الرسم','نسخ العنوان','كامل','الحصول على الدخل','اضغط على حفظ الصورة طويلة'],
+			wrong:['تقرير خاطئ','لا يمكن الحصول عليها مرارا وتكرارا'],
+			state:['تحميل الصور . . .','في التقدم','انتهى','انتظر','في انتظار مراجعة ','في الحساب','رفض','وصلت إلى الحساب','هزم','شحن','شحن ناجحة','فشل شحن','معتمد','مراجعة'],
+			tips:['[ المشهد ] + [ نمط إشارة ] + [ تقديم ] ، الكلمات الرئيسية المستخدمة بين " ، "','سحب تحميل أكثر','تحميل','لا أكثر','بيانات مؤقتة','الاستثمار في مزاد محفوف بالمخاطر يتطلب الحذر','جودة الخدمة',
+			'اختيار نوعية صارمة','ضمان ما بعد البيع','شاهد المزيد','مرحبا بعودتك','اختيار العملة','اختيار الشبكة','ملاحظة : يرجى عدم شحن أي أصول غير العملة المحلية إلى عنوان الكتاب أعلاه ، وإلا فإن الأصول لن تكون قابلة للاسترداد',
+			'نسخة ناجحة','كامل 200 يمكن أن تحمل على رفع النقدية ، كل يوم رفع العملة الوقت هو 10 صباحا - 2 مساء بتوقيت جرينتش !   لا يمكنك سحب النقود لبقية الوقت .'],
+			Aistyle:['استكشاف غير محدود','الطراز القديم','عنصر ثانوي','أسلوب واقعي','اللوحة العائمة','low poly' ,'مستقبلية','نمط بكسل','مفهوم الفن','سايبر بانك','لوليتا ستايل','نمط الباروك','سريالية',
+			          'ألوان مائية','فن البخار','زيت صورة زيتيّة','رسم كرتون','اختيار نمط'],
+		}
+		
+	}

+ 37 - 0
lang/cn.js

@@ -0,0 +1,37 @@
+export default {
+		index:{
+			language:'语言设置',				
+		},
+		lang:{
+			languageSet_0:'中文繁體',
+			languageSet_1:'中文简体',
+			languageSet_2:'English',
+			languageSet_3:'Español',//西班牙语
+			languageSet_4:'Italiano',//意大利语
+			languageSet_5:'Portugués',//葡萄牙语
+			languageSet_6:'عربي',//阿拉伯语
+			languageSet_7:'Français',//法语
+			languageSet_8:'日本語',//日语
+			languageSet_9:'Türk dili',//土耳其
+			languageSet_10:'Ελληνικά',//希腊
+			logon:['登录 币世界','邮箱','请输入邮箱','密码','请输入密码'],
+			register:['注册 币世界','立即注册','验证码','请输入验证码','获取','交易密码','请输入交易密码','邀请码','请输入邀请码','已有账号'],			
+			index:{			
+				withdraw:['佣金','提现'],
+				transer:['兑换','余额','转账','转出数量','请输入VGT转出数量','接收地址','请输入VGT接收地址'],
+				orders:['时间','收益','预约','用时','价格','请选择预约日期(可多选)','今日','明日','后天','共预约','场']
+			},
+			orders:{
+			   tab:['待付款','待出仓','待收款','紫金记录','预约记录']	,
+			   list:['订单号','匹配时间' ,'匹配地址' ,'日收益']
+			},
+			my:{				
+				team:['我的收益','今日收益','累计收益','我的团队','直推人数','团队人数','直推预约','团队预约','直推业绩','团队业绩'],
+				list:['好友明细','奖励明细','VGST明细','体现明细','昵称','时间','地址','金额','说明','状态']
+			},
+			btn:['预约','立即支付','退出登录','确定','取消','立即购买','复制地址','全部'],
+			wrong:['报错了','不能重复获取'],
+			state:['正在上传图片...','已匹配','未匹配','待打款','已付款 ','已拒绝'],
+		}
+		
+	}

+ 44 - 0
lang/en.js

@@ -0,0 +1,44 @@
+export default {
+		index:{
+			language:'Language',				
+		},
+		lang:{
+			languageSet_0:'中文繁體',
+			languageSet_1:'中文简体',
+			languageSet_2:'English',
+			languageSet_3:'Español',//西班牙语
+			languageSet_4:'Italiano',//意大利语
+			languageSet_5:'Portugués',//葡萄牙语
+			languageSet_6:'عربي',//阿拉伯语
+			languageSet_7:'Français',//法语		
+			languageSet_8:'日本語',//日语
+			languageSet_9:'Türk dili',//土耳其
+			languageSet_10:'Ελληνικά',//希腊
+			logon:['Login to Coin World', 'E-mail', 'Please Enter e-mail', 'Password', 'Please Enter Password'],
+			register:['Register Currency World', 'Register Now', 'Invitation code', 'Please nter invite code', 'Obtain', 'Transaction Password', 'Please Enter Transaction Password', 'Invitation Code', 'Please Enter Invitation Code', 'Existing Account'],
+			forgotPwd:['Forgot password', 'New password', 'Please set a new password', 'Confirm password', 'Please confirm password again', 'Password inconsistency'],
+			index:{
+				withdraw:['Commission', 'Withdrawal'],
+				transer:['Exchange', 'Balance', 'Transfer', 'Transfer out Quantity', 'Please enter VGT Transfer out Quantity', 'Receiving Address',
+				' Please enter VGT Receiving Address','請選擇預約時間'],
+				orders:['Time', 'Revenue', 'Appointment', 'Usage', 'Price', 'Please select appointment date (multiple choices are allowed)', 'Today', 'Tomorrow', 'DAT', 'Total appointments',' Sessions']
+				
+			},
+			orders:{
+				// tab:['待付款','待出仓','待收款','紫金记录','预约记录']	,
+				// list:['订单号','匹配时间' ,'匹配地址' ,'日收益']
+			   tab:['To be paid', 'To be released from warehouse', 'To be received', 'Zijin record', 'Appointment record']	,
+			   list:['Order number', 'matching time', 'matching address', 'daily revenue','已收益']
+			},
+			my:{	
+				// team:['我的收益','今日收益','累计收益','我的团队','直推人数','团队人数','直推预约','团队预约','直推业绩','团队业绩'],
+				// list:['好友明细','奖励明细','VGST明细','体现明细','昵称','时间','地址','金额','说明','状态']
+				team:['My Revenue', "Today's Revenue", 'Accumulated Revenue', 'My Team', 'Number of Direct Promoters',' Number of Teams', 'Direct Promoter Appointment', 'Team Appointment', 'Direct Promoter Performance', 'Team Performance'],
+				list:['Friend Details',' Reward Details', 'VGST Details',' Presentation Details', 'Nickname', 'Time', 'Address',' Amount ',' Description ',' Status']
+			},
+			btn:['Appointment', 'Pay Now', 'Log Out', 'OK', 'Cancel', 'Buy Now', 'Copy Address',' All '],
+			wrong:['Error reported', 'Cannot obtain duplicate','暫無數據'],
+			state:['Uploading image... ',' Matched ',' Unmatched ',' Pending Payment ',' Paid ',' Rejected ','複製成功','暫未注册','待稽核','到賬中','已到賬'],
+			// state:['正在上传图片...','已匹配','未匹配','待打款','已付款 ','已拒绝'],
+		}
+	}

+ 64 - 0
lang/french.js

@@ -0,0 +1,64 @@
+export default {       
+		index:{
+			language:'Paramètres de langue', //法语				
+		},
+		lang:{
+			languageSet_0:'中文繁體',
+			languageSet_1:'中文简体',
+			languageSet_2:'English',
+			languageSet_3:'Español',//西班牙语
+			languageSet_4:'Italiano',//意大利语
+			languageSet_5:'Portugués',//葡萄牙语
+			languageSet_6:'عربي',//阿拉伯语
+			languageSet_7:'Français',//法语
+			languageSet_8:'日本語',//日语
+			languageSet_9:'Türk dili',//土耳其
+			languageSet_10:'Ελληνικά',//希腊
+			logon:['Login to coin World', 'account number', 'Please enter account number', 'password', 'Please enter password'],
+			register:['Register coin World', 'Register now', 'CAPTCHA', 'Please enter CAPTCHA', 'get', 'Trade password', 'Please enter Trade password', 'invitation Code', 'Please enter invitation Code', 'existing account number'],
+			forgotPwd:["Mot de passe oublié", "nouveau mot de passe", "s'il vous plaît définir un nouveau mot de passe", "confirmer le mot de passe", "s'il vous plaît confirmer le mot de passe à nouveau", "mot de passe incohérent"],			
+			index:{			
+				nav:["Communauté de discussion", "mes actifs", "mes commandes", "inviter des amis", "Service à la clientèle en ligne", "À propos de nous",
+				 "Paramètres", "commandes intelligentes", "commandes de placement privé", "commandes de galerie", "mes partages",'Règles de Trading',
+				 'Contactez - nous','Certification du vrai nom'],
+				notice:['Annonces'],//公告
+				ai:["Ai Smart brick", "prix du marché", "bénéfices", "jours", "Cloud ai painting Product Advantage", "début", "détention maximale", "frais de mine", "bénéfice net"],
+				preipo:["Placement privé", "quantité achetée", "Veuillez saisir la quantité achetée", "prix", "quantité", "prix total"],
+				price:['Le comportement'],
+				gallery:["Galerie", "prix"],
+				realName:["Nom", "Veuillez entrer le nom", "numéro d'identification", "Veuillez entrer le numéro d'identification", "recto de la carte d'identité", "recto de la carte d'identité téléchargée", "verso de la carte d'identité téléchargée", "Envoyer"]
+			},
+			my:{
+				setup:["Paramètres", "mot de passe de connexion", "modifier", "mot de passe de transaction", "changement de langue", "s'il vous plaît entrer le Code de vérification", "obtenir", "s'il vous plaît entrer un nouveau mot de passe", "s'il vous plaît confirmer le mot de passe à nouveau", "deux fois le mot de passe est différent", "niveau"],
+				invite:['Inviter des amis','Copier le téléphone'],
+				chatgpt:["Dessin ai", "génération d'image", "génération de texte", "Création", "Mots clés", "Sélection de style","Image dans la génération...", 
+				" Veuillez télécharger l'image originale"],
+				orderList:["Mon ordre", "numéro d'ordre", "montant investi", "ratio des bénéfices", "montant des bénéfices", "cycle d'investissement", "moment de la passation de l'ordre", "rendement attendu", "échéance"],
+				assets:["Total des actifs du compte", "actifs", "enregistrements", "Recharges", "retraits", "transferts", "répartition des actifs"],
+				gallery:["Détails de la galerie", "temps de prise de vue", "prix actuel", "description de l'article"],
+				PreIPO:["Placement privé", "nom de la devise", "heure d'émission", "heure de clôture", "profil du projet", "nombre d'émissions", "prix d'émission", "quantité restante"],
+				deposit:['Adresse de chargement de monnaie'],
+				withdraw:["Disponible", "chaîne publique", "adresse de retrait", "s'il vous plaît entrer ou appuyez longuement sur coller l'adresse", "quantité de retrait", "s'il vous plaît entrer la quantité de retrait", "frais de traitement", "mot de passe de transaction"],
+				transer:["Nombre de transferts", "Veuillez saisir le nombre de transferts", "numéro de compte adverse", "Veuillez saisir le numéro de compte adverse", "transfert", "transfert"],
+				team:["Straight Push number", "share effective", "share Yield", "Straight Push", "mailbox", "Rating", "performance", "Registration time"]
+			},
+			btn:['connexion', "s'inscrire", 'se déconnecter', 'OK', 'annuler', "enregistrer l'image", 'Je vais prendre une photo', 'acheter maintenant', 'créer', 'passer une commande maintenant', 'experience ai Mapping', "copier l'adresse", 'tout', 'réclamer le produit', "appuyez longuement pour enregistrer l'image"],
+			wrong:["Erreur signalée", "ne peut pas être récupéré à plusieurs reprises"],
+			state:["Téléchargement d'images en cours","En cours", "terminé", "à ouvrir...", " En attente d'examen "," dans le compte "," refusé ",
+			" arrivé dans le compte "," échoué "," en cours de recharge "," recharge réussie "," recharge échouée ","Certifié","En audit"],
+			tips:["Recommandation de mots - clés: [scène d'image] + [référence de style] + [rendu], mots - clés séparés par ",
+			     "Pull up Load more", "in Load", "no more", "pas de données pour le moment", 
+				 "Investir dans des enchères risquées doit être prudent",
+				  "qualité de service", "qualité critique", "garantie après - vente",
+				"voir plus", "welcome back", "choisir la devise", "choisir le réseau",
+			     "Rappel de remplissage: ne rechargez pas l'adresse du livre avec des actifs non natifs, sinon les actifs ne seront pas récupérables", 
+				 "copier avec succès",'Les retraits sont effectués à 200 heures, tous les jours de 10h à 14h, heure du Royaume - Uni! Le reste du temps ne peut pas être payé.'],
+			Aistyle:["Explorer l'infini", "archaïsme", "binaire", "réaliste", "Ukiyo - E", "Low Poly", "futuriste", "pixel style", "art conceptuel", "cyberpunk", "Lolita style", "baroque", "surréaliste",
+                        "Aquarelle", "Steam Wave art", "huile", "dessin animé", "Sélection de style"],
+			
+				
+			
+			
+		}
+		
+	}

+ 16 - 0
lang/index.js

@@ -0,0 +1,16 @@
+import { createI18n } from 'vue-i18n'
+import cn from './zh-tc'//中文
+import en from './en'//英文
+import {createSSRApp} from "vue"
+
+const i18n = createI18n({
+  locale: localStorage.getItem('lang') || 'cn',
+  messages: {
+    cn,
+    en,
+  },
+  legacy: false,
+  globalInjection: true,
+})
+
+export default i18n

+ 63 - 0
lang/italian.js

@@ -0,0 +1,63 @@
+export default {
+	
+		index:{
+			language:'lingua',	//意大利语				
+		},
+		lang:{
+			languageSet_0:'中文繁體',
+			languageSet_1:'中文简体',
+			languageSet_2:'English',
+			languageSet_3:'Español',//西班牙语
+			languageSet_4:'Italiano',//意大利语
+			languageSet_5:'Portugués',//葡萄牙语
+			languageSet_6:'عربي',//阿拉伯语
+			languageSet_7:'Français',//法语
+			languageSet_8:'日本語',//日语
+			languageSet_9:'Türk dili',//土耳其
+			languageSet_10:'Ελληνικά',//希腊
+			logon:['Accedi a Coin World', 'cassetta postale', 'Inserisci cassetta postale', 'Password', 'Inserisci Password'],
+			register:['Registrati ora', 'Codice di verifica', 'Inserisci il codice di verifica', 'Ottieni', 'Password della transazione', 'Inserisci la password della transazione', 'Codice invito', 'Inserisci il codice invito', 'Account esistente'],
+			forgotPwd:['Password dimenticata', 'Nuova password', 'Imposta una nuova password', 'Conferma password', 'Conferma password di nuovo', 'Inconsigenza password'],
+			
+			index:{			
+				nav:['Chat Community',' I miei beni', 'I miei ordini', 'Invita amici', 'Servizio online', 'Chi siamo','Impostazioni' ,
+				 'Ordini intelligenti','Ordini privati' ,'Ordini galleria' , 'La mia condivisione','Regole di negoziazione','contattaci','Autenticazione del nome reale'],
+				notice:['annuncio'],//公告
+				ai:['AI intelligent brick moving ',' market price ',' revenue ',' days', 'cloud AI painting product advantages', 'start ',' holding massimo '," miner's fee", 'reddito netto'],
+				preipo:['Collocamento privato', 'Quantità di acquisto', 'Inserisci quantità di acquisto', 'Prezzo', 'Quantità', 'Prezzo totale'],
+				price:['mercato'],
+				gallery:['Galleria', 'Prezzo'],
+                realName:['Nome', 'Inserisci nome', 'Numero ID', 'Inserisci numero ID', "Anteriore della carta d'identità", "Carica la parte anteriore della carta d'identità","Indietro della carta d'identità",
+				 "Carica la parte posteriore della carta d'identità", 'Invia']
+			},
+			my:{
+				setup:['Impostazioni', 'Password di accesso', 'Modifica', 'Password di transazione', 'Cambio lingua', 'Inserisci codice di verifica', 'Ottieni', 'Inserisci nuova password', 'Conferma di nuovo la password', 'Due password sono diverse', 'Livello '],
+				invite:['Invita amici','Copia collegamento','Copia telefono'],
+				chatgpt:['Disegno AI', 'Generazione immagine', 'Generazione testo', 'Creazione', 'Parole chiave', 'Selezione stile ',
+				"Generazione di immagini in corso...", "Carica l'immagine originale"],
+				orderList:['Il mio ordine', 'Numero ordine', 'investimento', 'proporzione', 'denaro', 'ciclo', "acquistare", 'reddito','scade'],
+				assets:["Conversione totale delle attività del conto", "Attività", "Record", "Ricarica", "Prelievo", "Trasferimento", "Dettagli dell'attività"],
+				gallery:['Gallery Details', 'Auction Time', 'Current Price', 'Product Description '],
+				PreIPO:['Dettagli sul collocamento privato', 'Nome valuta', 'emissione', 'finitura', 'Introduzione del progetto', 'Quantità di emissione', 'Prezzo di emissione', 'Quantità residua '],
+				deposit:['Indirizzo di addebito'],
+				withdraw:['Disponibile', 'Catena pubblica', 'Indirizzo di prelievo', "Inserisci o premi a lungo l'indirizzo di incolla", 'Quantità di prelievo', 'Inserisci quantità di prelievo', 'Costo di gestione', 'Password di transazione'],
+				transer:['Quantità di trasferimento', 'Inserisci quantità di trasferimento', 'Conto opposto', 'Inserisci conto opposto', 'Trasferimento fuori', 'Trasferimento in'],
+				team:['Numero di referral diretti', 'Condivisione effettiva', 'Benefici condivisi', 'I miei referral diretti', 'Email', 'Livello', 'Prestazioni', 'Tempo di registrazione']
+			},
+			btn:['Login', 'Registrati', 'Esci dal login', 'OK', 'Annulla', 'Salva immagine', 'Voglio prendere', 'Acquista ora', 'Crea', 'Ordina ora', 'Esperienza AI Drawing', 'Copia indirizzo', 'Tutto', 'ricevere', 'Premi a lungo per salvare immagine'],
+			wrong:['Errore segnalato', 'Impossibile ottenere duplicato'],
+			state:['Caricamento immagine... ', "In corso", "Completato", "Da aprire...", "Revisione in attesa "," In conto "," Rifiutata "," In conto "," Failed ",
+			" Ricarica in corso", "Ricarica riuscita", "Ricarica fallita","Certificato","In corso di revisione"],
+			tips:['Raccomandazione di parole chiave: [Immagine scena]+[Style reference]+[Rendering method], con parole chiave separate da ','Pulling up to load more', 'Loading in progress', 'No more', 'Nessun dato al momento', 'Aste con rischi di investimento devono essere caute', 'Qualità del servizio', 'Rigorosa selezione della qualità', 'Garanzia post vendita', 'Vedi di più', 'Bentornato', 'Seleziona valuta', 'Seleziona rete',
+			"Promemoria di ricarica: Si prega di non ricaricare alcun asset in valuta non locale all'indirizzo sopra indicato, altrimenti il patrimonio non sarà recuperabile. '",
+			 'Copiato con successo ',
+			 'I prelievi possono essere effettuati solo dopo aver raggiunto i 200, e il tempo di prelievo giornaliero è dalle 10:00 alle 14:00 ora del Regno Unito! Non è possibile ritirare monete in altri momenti.'],
+			Aistyle:['Explore Infinity', 'Antique', 'anime', 'Realistic Style', 'Ukiyo-e', 'low poly', 'Futurismo', 'Pixel Style', 'Concept Art', 'Cyberpunk', 'Lolita Style', 'Baroque Style', 'Surrealismo',
+                     'Pittura ad acquerello', 'Vapore Wave Art', 'Pittura ad olio', 'Cartoon', 'Selezione di stile'],
+			
+				
+			
+			
+		}
+		
+	}

+ 58 - 0
lang/ja.js

@@ -0,0 +1,58 @@
+export default {
+		index:{
+			language:'言語設定',				
+		},
+		lang:{
+			languageSet_0:'中文繁體',
+			languageSet_1:'中文简体',
+			languageSet_2:'English',
+			languageSet_3:'Español',//西班牙语
+			languageSet_4:'Italiano',//意大利语
+			languageSet_5:'Portugués',//葡萄牙语
+			languageSet_6:'عربي',//阿拉伯语
+			languageSet_7:'Français',//法语
+			languageSet_8:'日本語',//日语
+			logon:['ログイン通貨の世界','アカウント','アカウントを入力してください','パスワード','パスワードを入力してください'],
+			register:['登録通貨の世界','今すぐ登録','認証コード','認証コードを入力してください','取得#シュトク#','トランザクションパスワード','取引パスワードを入力してください','招待コード','招待コードを入力してください','既存のアカウント'],
+			forgotPwd:['パスワードを忘れる','新しいパスワード','新しいパスワードを設定してください','パスワードの確認','パスワードを再確認してください','パスワードが一致しません'],
+			
+			index:{				
+				nav:['チャットコミュニティ','マイ資産','私の注文','友達を招待する','オンラインカスタマーサービス','私たちについて','設定#セッテイ#','スマートオーダー',
+				'私募注文書','ギャラリーオーダー','私の共有','取引ルール','連絡先','実名認証'],
+				notice:['公告'],//公告
+				ai:['AIスマートタイル搬送','市場価格','に利益を与える','日','クラウドAI絵画製品の利点','开始スタート','最大保有','鉱夫費','純利益'],
+				preipo:['私募','購入数量','購入数量を入力してください','価格','数量','合計価格'],
+				price:['相場'],
+				gallery:['画廊','価格'],
+				realName:['姓名','请输入姓名','身份证号','请输入身份证号','身份证正面','上传身份证正面','身份证反面','上传身份证反面','提交']
+			},
+			my:{
+				setup:['設定#セッテイ#','ログインパスワード','変更','トランザクションパスワード','言語切り替え','認証コードを入力してください','取得#シュトク#','新しいパスワードを入力してください','パスワードを再確認してください','2回のパスワードが異なる','等級'],
+				invite:['友達を招待する','リンクのコピー','コピー電話'],
+				chatgpt:['AI製図する','画像生成','テキスト生成','オーサリング','キーワード','スタイル選択','ピクチャ生成中...','原図をアップロードしてください'],
+				orderList:['私の注文','注文番号','投資額','収益率','収益金額','投資サイクル','注文時間','予想収益','有効期限'],
+				assets:['総勘定科目資産換算','資産','レコード破り','チャージ','貨幣をつりあげる','振り替え','資産詳細'],
+				gallery:['ギャラリー詳細','スナップタイム','現在の価格','商品の説明'],
+				PreIPO:['個人募集の詳細','通貨名','リリース時間','終了時間','プロジェクトの概要','発行部数','発行価格','残りの数量'],
+				deposit:['チャージアドレス'],
+				withdraw:['使用可能','コモンチェーン','外貨引出先住所','ペースト先を入力または長押ししてください','外貨引出数量','貨幣引出数量を入力してください','手数料','トランザクションパスワード'],
+				transer:['振替数量','振替数量を入力してください','相手のアカウント','相手のアカウントを入力してください','転出','転入'],
+				team:['直進人数','共有有効','共有収益','私の直進','メールボックス','等級','業績','登録時間']
+			},
+			btn:['ログイン#ログイン#','登録','ログオンの終了','を選択して、','キャンセル','画像を保存','撮ります','今すぐ購入','オーサリング','今すぐ注文','AI製図を体験する','アドレスのコピー','すべて','受け取る','長押しで画像を保存'],
+			wrong:['新聞をまちがえた','繰り返し取得できません'],
+			state:['画像をアップロードしています...','進行中','完了','保留中...','レビュー待ち','入金中','拒否済み','入金済み','失敗','チャージ中','チャージ成功',
+			'チャージ失敗',"資格認定済み",'レビュー中'],
+			tips:['キーワード推薦:【画面シーン】+【スタイル参考】+【レンダリング方式】、キーワード間用”、”間隔','ドロップアップロードの詳細','ロード中','これ以上ない',
+			'データが一時的にありません','リスクのある投資オークションは慎重に','サービス品質','品質を厳選する','アフターサービス保障','詳細を表示','お帰りなさい','通貨の選択',
+			'ネットワークの選択','貨幣充填の注意:上書の住所に任意の非貨幣種資産を充填しないでください、さもなくば資産は取り戻すことができません','コピー成功',
+			'200歳になってから現金化できます。毎日の現金化時間はイギリス時間の午前10時から午後2時です!残りの時間はお金を出すことができません。'],
+			Aistyle:['無限の探索','古風','二次元','写実的なスタイル','浮世絵','low poly' ,'未来主義','ピクセルスタイル','概念芸術','サイボパンク','ロリータ風','バロック様式','シュールリアリズム',
+			          '水彩画','蒸気波アート','油絵','漫画','スタイル選択'],
+			
+				
+			
+			
+		}
+		
+	}

+ 66 - 0
lang/portuguese.js

@@ -0,0 +1,66 @@
+export default {
+	
+		index:{
+			language:'Configuração do idioma',	//葡萄牙语	
+			
+		},
+		lang:{
+			languageSet_0:'中文繁體',
+			languageSet_1:'中文简体',
+			languageSet_2:'English',
+			languageSet_3:'Español',//西班牙语
+			languageSet_4:'Italiano',//意大利语
+			languageSet_5:'Portugués',//葡萄牙语
+			languageSet_6:'عربي',//阿拉伯语
+			languageSet_7:'Français',//法语
+			languageSet_8:'日本語',//日语
+			languageSet_9:'Türk dili',//土耳其
+			languageSet_10:'Ελληνικά',//希腊
+			logon:['Login to Coin World', 'caixa de correio', 'Please Enter caixa de correio', 'Password', 'Please Enter Password'],
+			register:['Register Currency World', 'Register Now', 'Verification Code', 'Please Enter Verification Code', 'Obter', 'Transaction Password', 'Please Enter Transaction Password', 'Invitation Code', 'Please Enter Invitation Code', 'Existing Account'],
+			forgotPwd:['Esqueceu a senha', 'Nova senha', 'Por favor, defina uma nova senha', 'Confirme senha', 'Por favor confirme senha novamente', 'inconsistência de senha'],
+			
+			index:{			
+				nav:['chat','Os meus bens','A Minha Ordem','Convidar amigos','Serviço Online','Sobre nós','configurar','Ordens Inteligentes',
+				'Ordens de colocação privada','Ordens da Galeria','A Minha Partilha','Regras de negociação','entre em contato conosco','Autenticação de nomes reais'],
+				notice:['anúncio'],//公告
+				ai:['Inteligência IA','preço','juros','dia','Vantagens dos produtos de pintura de IA na nuvem','iniciar',' máxima','Taxas dos mineiros','Resultado líquido'],
+				preipo:["Colocação privada", "Quantidade de compra", "Introduza a quantidade de compra", "Preço", "Quantidade", "Preço total"],
+				price:['mercado'],
+				gallery:['Galeria','Preço'],
+				realName:['Nome', 'Por favor insira nome', 'Número de identificação', 'Por favor insira número de identificação', 'Frente do cartão de identificação', 'Carregar frente do cartão de identificação', 'Voltar do cartão de identificação', 'Carregar verso do cartão de identificação', 'Enviar']
+			},
+			my:{
+				setup:['configurar','Senha de login', 'Modificar', 'Senha de transação', 'Comutador de idioma', 'Por favor insira o código de verificação', 'Obter', 'Por favor insira uma nova senha', 'Por favor confirme a senha novamente', 'Duas senhas são diferentes', 'Nível'],
+				invite:['Convidar amigos','Copiar a Ligação','Copiar o Telefone'],
+				chatgpt:['AI Drawing', 'Image Generation', 'Text Generation', 'Creation', 'Keywords', 'Style Selection','Geração de imagens em curso...', 'Envie por favor a imagem original '],
+				orderList:['Meu Pedido', 'número', 'investimento', 'proporção', 'dinheiro', 'ciclo', 'comprar', 'juros', 'expirar'],
+				assets:["Total dos activos", "activos", "registos", "recarga", "retirada", "transferência", "dados do activo"],
+				gallery:['Detalhes da galeria',' Tempo do leilão ',' Preço atual ',' Descrição do produto '],
+				PreIPO:["Detalhes da colocação privada", "Nome da moeda", "Hora de emissão", "Hora de término", "Introdução do projeto", "Quantidade de emissão", "Preço de emissão", "Quantidade restante"],
+				deposit:['Endereço de cobrança'],
+				withdraw:['Disponível', 'Cadeia Pública', 'Endereço de Retirada', 'Por favor insira ou pressione longa Colar Endereço', 'Quantidade de Retirada', 'Por favor insira Quantidade de Retirada', 'Taxa de Tratamento', 'Senha de Transação'],
+				transer:['Quantidade de transferência', 'Por favor insira quantidade de transferência', 'Conta oposta', 'Por favor insira conta oposta', 'Transferência para fora', 'Transferência para'],
+				team:['Número de referências diretas', 'Compartilhamento efetivo', 'Benefícios compartilhados', 'Minhas referências diretas', 'E-mail', 'Nível', 'Desempenho', 'Tempo de registro ']
+			},
+			btn:['Login', 'Registrar', 'Sair Login', 'OK', 'Cancelar', 'Salvar Imagem', 'Eu Quero Pegar', 'Comprar Agora', 'Criar', 'Fazer Encomenda Agora', 'Experimente Desenho AI', 'Copiar Endereço', 'Todos', 'receber', 'Pressione Longa para Salvar Imagem'],
+			wrong:['Erro reportado', 'Não é possível obter duplicata'],
+			state:['A carregar a imagem... ','Em andamento', "Concluído", "A ser aberto...", " Revisão pendente ",' Na conta ',' Rejeitado ',' Na conta ',
+			' Falhou ',' Recarga em andamento', 'Recarga bem sucedida', 'Recarga falhou','Certificado','Em análise'],
+			tips:["Recomendação de palavra-chave: [Cena de imagem]+[Referência de estilo]+[Método de renderização], com palavras-chave separadas por ",
+			"Pulling up to load more", 
+			"Loading in progress", 
+			"No more", "Nenhum dado no momento", "Leilões com riscos de investimento precisam ser cautelosos", "Qualidade do serviço", "Seleção rigorosa de qualidade", 
+			"Garantia pós-venda", "Veja mais", "Bem-vindo de volta", "Selecione moeda", "Selecione rede",
+			'Lembrete de recarga: Por favor, não recarregue quaisquer ativos de moeda não local para o endereço mencionado acima, caso contrário, os ativos não serão recuperáveis. ',
+			' Copiado com sucesso ',
+			'Os levantamentos só podem ser feitos após atingir 200, e o tempo de retirada diário é das 10h às 14h, hora do Reino Unido! Você não pode retirar moedas em outros momentos.'],
+			Aistyle:['Explore Infinity', 'Antique', 'anime', 'Realistic Style', 'Ukiyo-e', 'low poly', 'Futurism', 'Pixel Style', 'Concept Art', 'Cyberpunk', 'Lolita Style', 'Baroque Style', 'Surrealism',
+                     'Watercolor painting', 'Steam Wave Art', 'Oil Painting', 'Cartoon', 'Style Selection'],
+			
+				
+			
+			
+		}
+		
+	}

+ 64 - 0
lang/spanish.js

@@ -0,0 +1,64 @@
+export default {
+
+		index:{
+			language:'Idiomas',			//西班牙语			
+		},
+		lang:{
+			languageSet_0:'中文繁體',
+			languageSet_1:'中文简体',
+			languageSet_2:'English',
+			languageSet_3:'Español',//西班牙语
+			languageSet_4:'Italiano',//意大利语
+			languageSet_5:'Portugués',//葡萄牙语
+			languageSet_6:'عربي',//阿拉伯语
+			languageSet_7:'Français',//法语
+			languageSet_8:'日本語',//日语
+			languageSet_9:'Türk dili',//土耳其
+			languageSet_10:'Ελληνικά',//希腊
+			logon:['iniciar sesión en el mundo de la moneda', 'Buzón', 'introduzca la Buzón', 'contraseña', "introduzca la contraseña' "],
+			register:['mundo de la moneda de registro', 'registro ahora', 'código de verificación', 'introduzca el Código de verificación', 'obtener', 'contraseña de transacción', 'introduzca la contraseña de transacción', 'código de invitación', 'introduzca el Código de invitación', 'ya tiene una cuenta'],
+			forgotPwd:['olvídate de la contraseña', 'nueva contraseña', 'por favor, establezca una nueva contraseña', 'confirme la contraseña', 'confirme la contraseña de nuevo', 'la contraseña es inconsistente'],
+			
+			index:{			
+				nav:['comunidad de chat', 'mis activos',' mis pedidos', 'invitar amigos',' Servicio al cliente en línea ',' sobre nosotros', 'configuración',
+				 'pedidos inteligentes','pedidos de capital privado','pedidos de galería ','mi compartir','Reglas de transacción','Contáctanos','Autenticación de nombre real'],
+				notice:['Anuncio'],//公告
+				ai:['ai SMART Moving brick', 'market price', 'income', 'sky', 'cloud ai Painting Products advantage', 'start', 'maximum help', "miner fee' y 'net income"],
+				preipo:['capital privado', 'cantidad de compra', 'por favor introduzca la cantidad de compra', 'precio', 'cantidad', 'precio total '],
+				price:['Mercado'],
+				gallery:['Galería','Precio'],
+				realName:['nombre', 'por favor introduzca el nombre', 'número de identificación', 'por favor introduzca el número de identificación', 'parte delantera de la tarjeta de identificación', 'subir la parte delantera de la tarjeta de identificación', 'reverso de la tarjeta de identificación', 'enviar']
+			},
+			my:{
+				setup:['configuración', 'contraseña de inicio de sesión', 'modificar', 'contraseña de transacción', 'cambio de idioma', 'por favor introduzca el Código de verificación', 'obtener', 'por favor introduzca una nueva contraseña', 'por favor confirme la contraseña de nuevo', 'las dos contraseñas son diferentes',' nivel '],
+				invite:['Invitar a amigos','Copiar enlace','Copiar el teléfono'],
+				chatgpt:['ai cartography', 'image generation', 'text generation', 'creation', 'keywords', 'style choice','en la generación de imágenes...',
+				         'Por favor, suba la imagen original'],
+				orderList:['mi pedido', 'número de pedido', 'Inversión', 'Proporción', 'Importe', 'Ciclo', 'tiempo de pedido', 'Expectativas', 'Vencimiento'],
+				assets:['activos totales',' activos', 'registros',' recarga ',' retiro de moneda ',' transferencia ',' detalles de activos'],
+				gallery:['detalles de la galería', 'tiempo de captura', 'precio actual', 'descripción del producto'],
+				PreIPO:['detalles del capital privado', 'nombre de la moneda', 'Emisión', 'Fin del tiempo', 'perfil del proyecto', 'número de emisión', 'precio de emisión', 'cantidad restante'],
+				deposit:['Dirección de carga'],
+				withdraw:['disponible', 'cadena pública', 'dirección de recogida de moneda', 'introduzca o presione y pegue la dirección durante mucho tiempo', 'número de recogida de moneda', 'introduzca el número de recogida de moneda', "tarifa de manejo' y", 'contraseña de transacción'],
+				transer:['número de transferencias',' introduzca el número de transferencias', 'cuenta de la otra parte', 'introduzca la cuenta de la otra parte', "transferencia' y", 'transferencia'],
+				team:['número de empujones directas',' compartir válido ',' compartir ganancias', 'mi empuje directo', 'buzón', 'nivel', 'rendimiento', 'tiempo de registro ']
+			},
+			btn:['iniciar sesión', 'registrarse', 'salir de inicio de sesión', 'aceptar', 'cancelar', 'guardar la imagen', 'quiero tomar fotos',' comprar ahora ',' crear ',' hacer un pedido ahora ',' experimentar la cartografía AI ',' copiar la dirección ',' todo ','Recoger', 'presionar durante mucho tiempo para guardar la imagen '],
+			wrong:['se informa mal', 'no se puede obtener repetidamente'],
+			state:['Subiendo imágenes...','en curso', 'completado', 'a abrir...', 'Pendiente de revisión', 'en la cuenta', 'rechazado', 'en la cuenta', 
+			'fallado', 'en la recarga', "recarga exitosa' y" ,'recarga fallida','Certificado',"En revisión"],
+			tips:['Recomendación de palabras clave: [escena de imagen] + [referencia de estilo] + [método de representación], palabras clave entre "," separados',
+			'tirar hacia arriba para cargar más',' cargar en ',' no hay más', 'no hay datos por el momento', 'hay que ser cautelosos en la inversión en subastas de riesgo', "calidad del servicio' y ",'selección estricta de la calidad',
+			'garantía post - venta', 'ver más',' Bienvenido de vuelta ',' elegir la moneda ',' elegir la red ',
+			"Recordatorio de recarga de moneda: no recargar ningún activo no en moneda local a la dirección de shangshu, de lo contrario los activos no serán recuperables", 
+			"la copia fue exitosa ",
+			"¡No se puede retirar efectivo hasta que se hayan completado 200, ¡ la hora diaria de retirar la moneda es de 10 a.m. a 14 P.M. hora británica! No se puede retirar la moneda el resto del tiempo."],
+			Aistyle:['explorando el infinito', 'estilo antiguo', 'segunda dimensión', 'estilo realista', 'ukiyo', 'política baja', 'futurismo', 'estilo pixel', 'arte conceptual', 'cyberpunk', 'estilo lolita', 'estilo barroco', 'surrealismo',
+                    'acuarela', 'arte de ondas de vapor', 'pintura al óleo', 'dibujos animados',' elección de estilo '],
+			
+				
+			
+			
+		}
+		
+	}

+ 62 - 0
lang/turk.js

@@ -0,0 +1,62 @@
+export default {
+		index:{
+			language:'Türk dili',	//土耳其			
+		},
+		lang:{
+			languageSet_0:'中文繁體',
+			languageSet_1:'中文简体',
+			languageSet_2:'English',
+			languageSet_3:'Español',//西班牙语
+			languageSet_4:'Italiano',//意大利语
+			languageSet_5:'Portugués',//葡萄牙语
+			languageSet_6:'عربي',//阿拉伯语
+			languageSet_7:'Français',//法语
+			languageSet_8:'日本語',//日语
+			languageSet_9:'Türk dili',//土耳其
+			languageSet_10:'Ελληνικά',//希腊
+			logon:["Coin World'a girin", 'posta kutusu', 'Lütfen e-posta adresinizi girin', 'Parola', 'Lütfen Parola girin'],
+			register:['Valüt Dünyasını Register World', 'Register Now', 'Verification Code', 'Please Enter Verification Code', 'Hold', 'Transaction Password', 'Please Enter Transaction Password', 'Invitation Code', 'Please Enter Invitation Code', 'Existing Account'],
+			forgotPwd:['Parola unut', 'Yeni parola', 'Lütfen yeni parola ayarlayın', 'Parola onaylayın', 'Lütfen parola tekrar onaylayın', 'Parola uyumsuz'],
+			
+			index:{			
+				nav:['Chat Community', 'My Assets',' My Orders', 'Invite Friends', 'Çevrimiçi Hizmeti',' About Us', 'Settings',' Smart Orders',' Private Place Orders',
+				' Gallery Orders', 'My Sharing','Satış Kuralları','Bizimle iletişim kur','Gerçek isim doğrulaması'],
+				notice:['duyuru'],//公告
+				ai:['AI zeki tuğla hareket etti',' pazar fiyatı',' gelir', 'günler',' bulut AI boyama ürünlerinin avantajları', 'başlat', 'maksimum', 'miner ücretleri',' net gelir.'],
+				preipo:['Özel yerleştirme', 'satın miktarı', 'lütfen satın miktarını girin', 'fiyatı','miktarı' , 'toplam fiyatı.'],
+				price:['pazar'],
+				gallery:['Galeri','fiyat'],
+				realName:['İsim', 'Lütfen isim girin', 'kimlik numarası', 'Lütfen kimlik numarasını girin', 'kimlik kartının önünde', 'kimlik kartının önünde yükle', 'kimlik kartının geri yükle', 'kimlik kartı geri yükle', 'Yükle']
+			},
+			my:{
+				setup:['Ayarlar', 'İçeri Parola', 'Değiştir', 'İçeri Parola', 'Dil Değiştir', 'Lütfen Dönüştürme Kodu' ,'girin ',' Lütfen Yeni Parola Girin', "Lütfen Parola Yine'yi Tayit", 'İki Parola Farklı', 'Seviye'],
+				invite:['Arkadaşları davet et','İlişimi kopyala','Telefonu kopyala'],
+				chatgpt:['AI Çizim', 'Resim Yaratım', 'Metin Yaratım', 'Yaratım', 'Anahtar Kelimeler', 'Uslu Seçim',"Resim üretimi ilerliyor...",'Lütfen orijinal resimi yükleyin '],
+				orderList:['Emrim', 'Emrim Numarası', 'yatırım miktarı', 'Dönüş Hizmeti', 'Dönüş Hizmeti', 'Yatırım Periodu', 'Emri Yerleştirme Zamanı', 'Görünen Geri', 'İşlenme Zamanı'],
+				assets:["Toplam maliyetler", "maliyetler", "kayıtlar", "yeniden yükle", "çekme", "transfer", "asset details"],
+				gallery:['Galeri Ayrıntıları', 'Seçim Zamanı', 'Şimdiki Ödül', 'Üretim Açıklaması'],
+				PreIPO:['Özel yerleştirme detayları', 'Valüt adı', 'İstem zamanı', 'Son zamanı', 'Proje girişi', 'İstem miktarı', 'İstem fiyatı', 'Kalan miktarı'],
+				deposit:['Yüklenen adres'],
+				withdraw:['Available', 'Public Chain', 'Remove Address', 'Please enter or Long Press Paste Address', 'Remove Quantity', 'Please enter Remove Quantity', 'Handling Feed', 'Transaction Password'],
+				transer:['Transfer quantity', 'Please enter transfer quantity', 'Opposite account', 'Please enter Opposite account', 'Transfer out', 'Transfer in'],
+				team:['Doğru baskı', 'Etkileşimli paylaşım', 'gelir paylaşım', 'Direkt baskı','E-posta', 'Seviye','başarılar', 'kayıt']
+			},
+			btn:['Girin', 'Kaydet', 'Girin', 'Çıkın', 'Tamam', 'Lütfen', 'Resim Kaydet', 'Almak istiyorum', 'Şimdi satın almak istiyorum', 'Şimdi yap', 'Düzenle Şimdi', 'Deneyim AI Çizim', 'Kopyala Adresi', 'Tüm', 'Söyleme Benefileri', 'Resim Kaydet için Uzun Basın'],
+			wrong:['Hata rapor edildi', 'Çift alınamaz'],
+			state:['Resimler yükleniyor...','İlerlemede',"Tamamlandı", "Açılacak..." ,'Bekleyecek ',' hesabda ',' reddedildi ',' hesabda ',' başarısız ',' yeniden yükleniyor ', 
+			       'yeniden yüklenmek başarısız', 'yeniden yüklenmek başarısız','Kullanılmış','Gözlemde'],
+			tips:["Anahtar kelime tavsiye: [Resim sahnesi]+[Stil referans]+[Rendering method], anahtar kelimeleri ',' ile ayrılır",'yükleme','Yüklenmek','Daha fazla yok.',
+			'Şu anda hiçbir veri ulaşılabilir','Risk tercihlere yatırım yapmak için uyarı gerekiyor.','Servis kalitesi','Keyfiğin sıkı seçimi','Satış garantisinden sonra',
+			'Daha fazla görüntüle','Geri hoş geldiniz.',
+			'Parayı Seç','Ağ Seç','Yeniden yükleme hatırlatıcısı: Yukarıdaki adrese yerel para aktarlarını yeniden yüklemeyin, yoksa aktarlar geri yüklemez.',
+			'Başarılı kopyalandı',
+			"Kaçırma zamanı sadece 200'e ulaştıktan sonra yapılabilir ve günlük çıkarma zamanı saat 10'den 2'e kadar İngiltere zamanıdır! Başka zamanlarda para çekemezsin."],
+			Aistyle:['Sonsuzluğu Araştır', 'Antik', 'Anime', 'Realist Style', 'Ukiyo-e', 'düşük poly', 'Futurism', 'Pixel Style', 'Concept Art', 'Cyberpunk', 
+			'Lolita Style', 'Baroque Style', 'Surrealism','Su rengi resim', 'Steam Dalga Sanat',' petrol Resim', 'Karakter', 'Stil Seçimi'],
+			
+				
+			
+			
+		}
+		
+	}

+ 1782 - 0
lang/vue-i18n.js

@@ -0,0 +1,1782 @@
+/*!
+ * vue-i18n v8.10.0 
+ * (c) 2019 kazuya kawaguchi
+ * Released under the MIT License.
+ */
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+  typeof define === 'function' && define.amd ? define(factory) :
+  (global.VueI18n = factory());
+}(this, (function () { 'use strict';
+
+  /*  */
+
+  /**
+   * constants
+   */
+
+  var numberFormatKeys = [
+    'style',
+    'currency',
+    'currencyDisplay',
+    'useGrouping',
+    'minimumIntegerDigits',
+    'minimumFractionDigits',
+    'maximumFractionDigits',
+    'minimumSignificantDigits',
+    'maximumSignificantDigits',
+    'localeMatcher',
+    'formatMatcher'
+  ];
+
+  /**
+   * utilities
+   */
+
+  function warn (msg, err) {
+    if (typeof console !== 'undefined') {
+      console.warn('[vue-i18n] ' + msg);
+      /* istanbul ignore if */
+      if (err) {
+        console.warn(err.stack);
+      }
+    }
+  }
+
+  function isObject (obj) {
+    return obj !== null && typeof obj === 'object'
+  }
+
+  var toString = Object.prototype.toString;
+  var OBJECT_STRING = '[object Object]';
+  function isPlainObject (obj) {
+    return toString.call(obj) === OBJECT_STRING
+  }
+
+  function isNull (val) {
+    return val === null || val === undefined
+  }
+
+  function parseArgs () {
+    var args = [], len = arguments.length;
+    while ( len-- ) args[ len ] = arguments[ len ];
+
+    var locale = null;
+    var params = null;
+    if (args.length === 1) {
+      if (isObject(args[0]) || Array.isArray(args[0])) {
+        params = args[0];
+      } else if (typeof args[0] === 'string') {
+        locale = args[0];
+      }
+    } else if (args.length === 2) {
+      if (typeof args[0] === 'string') {
+        locale = args[0];
+      }
+      /* istanbul ignore if */
+      if (isObject(args[1]) || Array.isArray(args[1])) {
+        params = args[1];
+      }
+    }
+
+    return { locale: locale, params: params }
+  }
+
+  function looseClone (obj) {
+    return JSON.parse(JSON.stringify(obj))
+  }
+
+  function remove (arr, item) {	 
+    if (arr.length) {
+      var index = arr.indexOf(item);
+      if (index > -1) {
+        return arr.splice(index, 1)
+      }
+    }
+  }
+
+  var hasOwnProperty = Object.prototype.hasOwnProperty;
+  function hasOwn (obj, key) {
+    return hasOwnProperty.call(obj, key)
+  }
+
+  function merge (target) {
+    var arguments$1 = arguments;
+
+    var output = Object(target);
+    for (var i = 1; i < arguments.length; i++) {
+      var source = arguments$1[i];
+      if (source !== undefined && source !== null) {
+        var key = (void 0);
+        for (key in source) {
+          if (hasOwn(source, key)) {
+            if (isObject(source[key])) {
+              output[key] = merge(output[key], source[key]);
+            } else {
+              output[key] = source[key];
+            }
+          }
+        }
+      }
+    }
+    return output
+  }
+
+  function looseEqual (a, b) {
+    if (a === b) { return true }
+    var isObjectA = isObject(a);
+    var isObjectB = isObject(b);
+    if (isObjectA && isObjectB) {
+      try {
+        var isArrayA = Array.isArray(a);
+        var isArrayB = Array.isArray(b);
+        if (isArrayA && isArrayB) {
+          return a.length === b.length && a.every(function (e, i) {
+            return looseEqual(e, b[i])
+          })
+        } else if (!isArrayA && !isArrayB) {
+          var keysA = Object.keys(a);
+          var keysB = Object.keys(b);
+          return keysA.length === keysB.length && keysA.every(function (key) {
+            return looseEqual(a[key], b[key])
+          })
+        } else {
+          /* istanbul ignore next */
+          return false
+        }
+      } catch (e) {
+        /* istanbul ignore next */
+        return false
+      }
+    } else if (!isObjectA && !isObjectB) {
+      return String(a) === String(b)
+    } else {
+      return false
+    }
+  }
+
+  /*  */
+
+  function extend (Vue) {
+    if (!Vue.prototype.hasOwnProperty('$i18n')) {
+      // $FlowFixMe
+      Object.defineProperty(Vue.prototype, '$i18n', {
+        get: function get () { return this._i18n }
+      });
+    }
+
+    Vue.prototype.$t = function (key) {
+      var values = [], len = arguments.length - 1;
+      while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];
+
+      var i18n = this.$i18n;
+      return i18n._t.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this ].concat( values ))
+    };
+
+    Vue.prototype.$tc = function (key, choice) {
+      var values = [], len = arguments.length - 2;
+      while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];
+
+      var i18n = this.$i18n;
+      return i18n._tc.apply(i18n, [ key, i18n.locale, i18n._getMessages(), this, choice ].concat( values ))
+    };
+
+    Vue.prototype.$te = function (key, locale) {
+      var i18n = this.$i18n;
+      return i18n._te(key, i18n.locale, i18n._getMessages(), locale)
+    };
+
+    Vue.prototype.$d = function (value) {
+      var ref;
+
+      var args = [], len = arguments.length - 1;
+      while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
+      return (ref = this.$i18n).d.apply(ref, [ value ].concat( args ))
+    };
+
+    Vue.prototype.$n = function (value) {
+      var ref;
+
+      var args = [], len = arguments.length - 1;
+      while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
+      return (ref = this.$i18n).n.apply(ref, [ value ].concat( args ))
+    };
+  }
+
+  /*  */
+
+  var mixin = {
+    beforeCreate: function beforeCreate () {
+      var options = this.$options;
+      options.i18n = options.i18n || (options.__i18n ? {} : null);
+
+      if (options.i18n) {
+        if (options.i18n instanceof VueI18n) {
+          // init locale messages via custom blocks
+          if (options.__i18n) {
+            try {
+              var localeMessages = {};
+              options.__i18n.forEach(function (resource) {
+                localeMessages = merge(localeMessages, JSON.parse(resource));
+              });
+              Object.keys(localeMessages).forEach(function (locale) {
+                options.i18n.mergeLocaleMessage(locale, localeMessages[locale]);
+              });
+            } catch (e) {
+              {
+                warn("Cannot parse locale messages via custom blocks.", e);
+              }
+            }
+          }
+          this._i18n = options.i18n;
+          this._i18nWatcher = this._i18n.watchI18nData();
+          this._i18n.subscribeDataChanging(this);
+          this._subscribing = true;
+        } else if (isPlainObject(options.i18n)) {
+          // component local i18n
+          if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {
+            options.i18n.root = this.$root;
+            options.i18n.formatter = this.$root.$i18n.formatter;
+            options.i18n.fallbackLocale = this.$root.$i18n.fallbackLocale;
+            options.i18n.silentTranslationWarn = this.$root.$i18n.silentTranslationWarn;
+            options.i18n.silentFallbackWarn = this.$root.$i18n.silentFallbackWarn;
+            options.i18n.pluralizationRules = this.$root.$i18n.pluralizationRules;
+            options.i18n.preserveDirectiveContent = this.$root.$i18n.preserveDirectiveContent;
+          }
+
+          // init locale messages via custom blocks
+          if (options.__i18n) {
+            try {
+              var localeMessages$1 = {};
+              options.__i18n.forEach(function (resource) {
+                localeMessages$1 = merge(localeMessages$1, JSON.parse(resource));
+              });
+              options.i18n.messages = localeMessages$1;
+            } catch (e) {
+              {
+                warn("Cannot parse locale messages via custom blocks.", e);
+              }
+            }
+          }
+
+          this._i18n = new VueI18n(options.i18n);
+          this._i18nWatcher = this._i18n.watchI18nData();
+          this._i18n.subscribeDataChanging(this);
+          this._subscribing = true;
+
+          if (options.i18n.sync === undefined || !!options.i18n.sync) {
+            this._localeWatcher = this.$i18n.watchLocale();
+          }
+        } else {
+          {
+            warn("Cannot be interpreted 'i18n' option.");
+          }
+        }
+      } else if (this.$root && this.$root.$i18n && this.$root.$i18n instanceof VueI18n) {
+        // root i18n
+        this._i18n = this.$root.$i18n;
+        this._i18n.subscribeDataChanging(this);
+        this._subscribing = true;
+      } else if (options.parent && options.parent.$i18n && options.parent.$i18n instanceof VueI18n) {
+        // parent i18n
+        this._i18n = options.parent.$i18n;
+        this._i18n.subscribeDataChanging(this);
+        this._subscribing = true;
+      }
+    },
+
+    beforeDestroy: function beforeDestroy () {
+      if (!this._i18n) { return }
+
+      var self = this;
+      this.$nextTick(function () {
+        if (self._subscribing) {
+          self._i18n.unsubscribeDataChanging(self);
+          delete self._subscribing;
+        }
+
+        if (self._i18nWatcher) {
+          self._i18nWatcher();
+          self._i18n.destroyVM();
+          delete self._i18nWatcher;
+        }
+
+        if (self._localeWatcher) {
+          self._localeWatcher();
+          delete self._localeWatcher;
+        }
+
+        self._i18n = null;
+      });
+    }
+  };
+
+  /*  */
+
+  var interpolationComponent = {
+    name: 'i18n',
+    functional: true,
+    props: {
+      tag: {
+        type: String,
+        default: 'span'
+      },
+      path: {
+        type: String,
+        required: true
+      },
+      locale: {
+        type: String
+      },
+      places: {
+        type: [Array, Object]
+      }
+    },
+    render: function render (h, ref) {
+      var props = ref.props;
+      var data = ref.data;
+      var children = ref.children;
+      var parent = ref.parent;
+
+      var i18n = parent.$i18n;
+
+      children = (children || []).filter(function (child) {
+        return child.tag || (child.text = child.text.trim())
+      });
+
+      if (!i18n) {
+        {
+          warn('Cannot find VueI18n instance!');
+        }
+        return children
+      }
+
+      var path = props.path;
+      var locale = props.locale;
+
+      var params = {};
+      var places = props.places || {};
+
+      var hasPlaces = Array.isArray(places)
+        ? places.length > 0
+        : Object.keys(places).length > 0;
+
+      var everyPlace = children.every(function (child) {
+        if (child.data && child.data.attrs) {
+          var place = child.data.attrs.place;
+          return (typeof place !== 'undefined') && place !== ''
+        }
+      });
+
+      if (hasPlaces && children.length > 0 && !everyPlace) {
+        warn('If places prop is set, all child elements must have place prop set.');
+      }
+
+      if (Array.isArray(places)) {
+        places.forEach(function (el, i) {
+          params[i] = el;
+        });
+      } else {
+        Object.keys(places).forEach(function (key) {
+          params[key] = places[key];
+        });
+      }
+
+      children.forEach(function (child, i) {
+        var key = everyPlace
+          ? ("" + (child.data.attrs.place))
+          : ("" + i);
+        params[key] = child;
+      });
+
+      return h(props.tag, data, i18n.i(path, locale, params))
+    }
+  };
+
+  /*  */
+
+  var numberComponent = {
+    name: 'i18n-n',
+    functional: true,
+    props: {
+      tag: {
+        type: String,
+        default: 'span'
+      },
+      value: {
+        type: Number,
+        required: true
+      },
+      format: {
+        type: [String, Object]
+      },
+      locale: {
+        type: String
+      }
+    },
+    render: function render (h, ref) {
+      var props = ref.props;
+      var parent = ref.parent;
+      var data = ref.data;
+
+      var i18n = parent.$i18n;
+
+      if (!i18n) {
+        {
+          warn('Cannot find VueI18n instance!');
+        }
+        return null
+      }
+
+      var key = null;
+      var options = null;
+
+      if (typeof props.format === 'string') {
+        key = props.format;
+      } else if (isObject(props.format)) {
+        if (props.format.key) {
+          key = props.format.key;
+        }
+
+        // Filter out number format options only
+        options = Object.keys(props.format).reduce(function (acc, prop) {
+          var obj;
+
+          if (numberFormatKeys.includes(prop)) {
+            return Object.assign({}, acc, ( obj = {}, obj[prop] = props.format[prop], obj ))
+          }
+          return acc
+        }, null);
+      }
+
+      var locale = props.locale || i18n.locale;
+      var parts = i18n._ntp(props.value, locale, key, options);
+
+      var values = parts.map(function (part, index) {
+        var obj;
+
+        var slot = data.scopedSlots && data.scopedSlots[part.type];
+        return slot ? slot(( obj = {}, obj[part.type] = part.value, obj.index = index, obj.parts = parts, obj )) : part.value
+      });
+
+      return h(props.tag, {
+        attrs: data.attrs,
+        'class': data['class'],
+        staticClass: data.staticClass
+      }, values)
+    }
+  };
+
+  /*  */
+
+  function bind (el, binding, vnode) {
+    if (!assert(el, vnode)) { return }
+
+    t(el, binding, vnode);
+  }
+
+  function update (el, binding, vnode, oldVNode) {
+    if (!assert(el, vnode)) { return }
+
+    var i18n = vnode.context.$i18n;
+    if (localeEqual(el, vnode) &&
+      (looseEqual(binding.value, binding.oldValue) &&
+       looseEqual(el._localeMessage, i18n.getLocaleMessage(i18n.locale)))) { return }
+
+    t(el, binding, vnode);
+  }
+
+  function unbind (el, binding, vnode, oldVNode) {
+    var vm = vnode.context;
+    if (!vm) {
+      warn('Vue instance does not exists in VNode context');
+      return
+    }
+
+    var i18n = vnode.context.$i18n || {};
+    if (!binding.modifiers.preserve && !i18n.preserveDirectiveContent) {
+      el.textContent = '';
+    }
+    el._vt = undefined;
+    delete el['_vt'];
+    el._locale = undefined;
+    delete el['_locale'];
+    el._localeMessage = undefined;
+    delete el['_localeMessage'];
+  }
+
+  function assert (el, vnode) {
+    var vm = vnode.context;
+    if (!vm) {
+      warn('Vue instance does not exists in VNode context');
+      return false
+    }
+
+    if (!vm.$i18n) {
+      warn('VueI18n instance does not exists in Vue instance');
+      return false
+    }
+
+    return true
+  }
+
+  function localeEqual (el, vnode) {
+    var vm = vnode.context;
+    return el._locale === vm.$i18n.locale
+  }
+
+  function t (el, binding, vnode) {
+    var ref$1, ref$2;
+
+    var value = binding.value;
+
+    var ref = parseValue(value);
+    var path = ref.path;
+    var locale = ref.locale;
+    var args = ref.args;
+    var choice = ref.choice;
+    if (!path && !locale && !args) {
+      warn('value type not supported');
+      return
+    }
+
+    if (!path) {
+      warn('`path` is required in v-t directive');
+      return
+    }
+
+    var vm = vnode.context;
+    if (choice) {
+      el._vt = el.textContent = (ref$1 = vm.$i18n).tc.apply(ref$1, [ path, choice ].concat( makeParams(locale, args) ));
+    } else {
+      el._vt = el.textContent = (ref$2 = vm.$i18n).t.apply(ref$2, [ path ].concat( makeParams(locale, args) ));
+    }
+    el._locale = vm.$i18n.locale;
+    el._localeMessage = vm.$i18n.getLocaleMessage(vm.$i18n.locale);
+  }
+
+  function parseValue (value) {
+    var path;
+    var locale;
+    var args;
+    var choice;
+
+    if (typeof value === 'string') {
+      path = value;
+    } else if (isPlainObject(value)) {
+      path = value.path;
+      locale = value.locale;
+      args = value.args;
+      choice = value.choice;
+    }
+
+    return { path: path, locale: locale, args: args, choice: choice }
+  }
+
+  function makeParams (locale, args) {
+    var params = [];
+
+    locale && params.push(locale);
+    if (args && (Array.isArray(args) || isPlainObject(args))) {
+      params.push(args);
+    }
+
+    return params
+  }
+
+  var Vue;
+
+  function install (_Vue) {
+    /* istanbul ignore if */
+    if (install.installed && _Vue === Vue) {
+      warn('already installed.');
+      return
+    }
+    install.installed = true;
+
+    Vue = _Vue;
+
+    var version = (Vue.version && Number(Vue.version.split('.')[0])) || -1;
+    /* istanbul ignore if */
+    if (version < 2) {
+      warn(("vue-i18n (" + (install.version) + ") need to use Vue 2.0 or later (Vue: " + (Vue.version) + ")."));
+      return
+    }
+
+    extend(Vue);
+    Vue.mixin(mixin);
+    Vue.directive('t', { bind: bind, update: update, unbind: unbind });
+    Vue.component(interpolationComponent.name, interpolationComponent);
+    Vue.component(numberComponent.name, numberComponent);
+
+    // use simple mergeStrategies to prevent i18n instance lose '__proto__'
+    var strats = Vue.config.optionMergeStrategies;
+    strats.i18n = function (parentVal, childVal) {
+      return childVal === undefined
+        ? parentVal
+        : childVal
+    };
+  }
+
+  /*  */
+
+  var BaseFormatter = function BaseFormatter () {
+    this._caches = Object.create(null);
+  };
+
+  BaseFormatter.prototype.interpolate = function interpolate (message, values) {
+    if (!values) {
+      return [message]
+    }
+    var tokens = this._caches[message];
+    if (!tokens) {
+      tokens = parse(message);
+      this._caches[message] = tokens;
+    }
+    return compile(tokens, values)
+  };
+
+
+
+  var RE_TOKEN_LIST_VALUE = /^(?:\d)+/;
+  var RE_TOKEN_NAMED_VALUE = /^(?:\w)+/;
+
+  function parse (format) {
+    var tokens = [];
+    var position = 0;
+
+    var text = '';
+    while (position < format.length) {
+      var char = format[position++];
+      if (char === '{') {
+        if (text) {
+          tokens.push({ type: 'text', value: text });
+        }
+
+        text = '';
+        var sub = '';
+        char = format[position++];
+        while (char !== undefined && char !== '}') {
+          sub += char;
+          char = format[position++];
+        }
+        var isClosed = char === '}';
+
+        var type = RE_TOKEN_LIST_VALUE.test(sub)
+          ? 'list'
+          : isClosed && RE_TOKEN_NAMED_VALUE.test(sub)
+            ? 'named'
+            : 'unknown';
+        tokens.push({ value: sub, type: type });
+      } else if (char === '%') {
+        // when found rails i18n syntax, skip text capture
+        if (format[(position)] !== '{') {
+          text += char;
+        }
+      } else {
+        text += char;
+      }
+    }
+
+    text && tokens.push({ type: 'text', value: text });
+
+    return tokens
+  }
+
+  function compile (tokens, values) {
+    var compiled = [];
+    var index = 0;
+
+    var mode = Array.isArray(values)
+      ? 'list'
+      : isObject(values)
+        ? 'named'
+        : 'unknown';
+    if (mode === 'unknown') { return compiled }
+
+    while (index < tokens.length) {
+      var token = tokens[index];
+      switch (token.type) {
+        case 'text':
+          compiled.push(token.value);
+          break
+        case 'list':
+          compiled.push(values[parseInt(token.value, 10)]);
+          break
+        case 'named':
+          if (mode === 'named') {
+            compiled.push((values)[token.value]);
+          } else {
+            {
+              warn(("Type of token '" + (token.type) + "' and format of value '" + mode + "' don't match!"));
+            }
+          }
+          break
+        case 'unknown':
+          {
+            warn("Detect 'unknown' type of token!");
+          }
+          break
+      }
+      index++;
+    }
+
+    return compiled
+  }
+
+  /*  */
+
+  /**
+   *  Path parser
+   *  - Inspired:
+   *    Vue.js Path parser
+   */
+
+  // actions
+  var APPEND = 0;
+  var PUSH = 1;
+  var INC_SUB_PATH_DEPTH = 2;
+  var PUSH_SUB_PATH = 3;
+
+  // states
+  var BEFORE_PATH = 0;
+  var IN_PATH = 1;
+  var BEFORE_IDENT = 2;
+  var IN_IDENT = 3;
+  var IN_SUB_PATH = 4;
+  var IN_SINGLE_QUOTE = 5;
+  var IN_DOUBLE_QUOTE = 6;
+  var AFTER_PATH = 7;
+  var ERROR = 8;
+
+  var pathStateMachine = [];
+
+  pathStateMachine[BEFORE_PATH] = {
+    'ws': [BEFORE_PATH],
+    'ident': [IN_IDENT, APPEND],
+    '[': [IN_SUB_PATH],
+    'eof': [AFTER_PATH]
+  };
+
+  pathStateMachine[IN_PATH] = {
+    'ws': [IN_PATH],
+    '.': [BEFORE_IDENT],
+    '[': [IN_SUB_PATH],
+    'eof': [AFTER_PATH]
+  };
+
+  pathStateMachine[BEFORE_IDENT] = {
+    'ws': [BEFORE_IDENT],
+    'ident': [IN_IDENT, APPEND],
+    '0': [IN_IDENT, APPEND],
+    'number': [IN_IDENT, APPEND]
+  };
+
+  pathStateMachine[IN_IDENT] = {
+    'ident': [IN_IDENT, APPEND],
+    '0': [IN_IDENT, APPEND],
+    'number': [IN_IDENT, APPEND],
+    'ws': [IN_PATH, PUSH],
+    '.': [BEFORE_IDENT, PUSH],
+    '[': [IN_SUB_PATH, PUSH],
+    'eof': [AFTER_PATH, PUSH]
+  };
+
+  pathStateMachine[IN_SUB_PATH] = {
+    "'": [IN_SINGLE_QUOTE, APPEND],
+    '"': [IN_DOUBLE_QUOTE, APPEND],
+    '[': [IN_SUB_PATH, INC_SUB_PATH_DEPTH],
+    ']': [IN_PATH, PUSH_SUB_PATH],
+    'eof': ERROR,
+    'else': [IN_SUB_PATH, APPEND]
+  };
+
+  pathStateMachine[IN_SINGLE_QUOTE] = {
+    "'": [IN_SUB_PATH, APPEND],
+    'eof': ERROR,
+    'else': [IN_SINGLE_QUOTE, APPEND]
+  };
+
+  pathStateMachine[IN_DOUBLE_QUOTE] = {
+    '"': [IN_SUB_PATH, APPEND],
+    'eof': ERROR,
+    'else': [IN_DOUBLE_QUOTE, APPEND]
+  };
+
+  /**
+   * Check if an expression is a literal value.
+   */
+
+  var literalValueRE = /^\s?(?:true|false|-?[\d.]+|'[^']*'|"[^"]*")\s?$/;
+  function isLiteral (exp) {
+    return literalValueRE.test(exp)
+  }
+
+  /**
+   * Strip quotes from a string
+   */
+
+  function stripQuotes (str) {
+    var a = str.charCodeAt(0);
+    var b = str.charCodeAt(str.length - 1);
+    return a === b && (a === 0x22 || a === 0x27)
+      ? str.slice(1, -1)
+      : str
+  }
+
+  /**
+   * Determine the type of a character in a keypath.
+   */
+
+  function getPathCharType (ch) {
+    if (ch === undefined || ch === null) { return 'eof' }
+
+    var code = ch.charCodeAt(0);
+
+    switch (code) {
+      case 0x5B: // [
+      case 0x5D: // ]
+      case 0x2E: // .
+      case 0x22: // "
+      case 0x27: // '
+        return ch
+
+      case 0x5F: // _
+      case 0x24: // $
+      case 0x2D: // -
+        return 'ident'
+
+      case 0x09: // Tab
+      case 0x0A: // Newline
+      case 0x0D: // Return
+      case 0xA0:  // No-break space
+      case 0xFEFF:  // Byte Order Mark
+      case 0x2028:  // Line Separator
+      case 0x2029:  // Paragraph Separator
+        return 'ws'
+    }
+
+    return 'ident'
+  }
+
+  /**
+   * Format a subPath, return its plain form if it is
+   * a literal string or number. Otherwise prepend the
+   * dynamic indicator (*).
+   */
+
+  function formatSubPath (path) {
+    var trimmed = path.trim();
+    // invalid leading 0
+    if (path.charAt(0) === '0' && isNaN(path)) { return false }
+
+    return isLiteral(trimmed) ? stripQuotes(trimmed) : '*' + trimmed
+  }
+
+  /**
+   * Parse a string path into an array of segments
+   */
+
+  function parse$1 (path) {
+    var keys = [];
+    var index = -1;
+    var mode = BEFORE_PATH;
+    var subPathDepth = 0;
+    var c;
+    var key;
+    var newChar;
+    var type;
+    var transition;
+    var action;
+    var typeMap;
+    var actions = [];
+
+    actions[PUSH] = function () {
+      if (key !== undefined) {
+        keys.push(key);
+        key = undefined;
+      }
+    };
+
+    actions[APPEND] = function () {
+      if (key === undefined) {
+        key = newChar;
+      } else {
+        key += newChar;
+      }
+    };
+
+    actions[INC_SUB_PATH_DEPTH] = function () {
+      actions[APPEND]();
+      subPathDepth++;
+    };
+
+    actions[PUSH_SUB_PATH] = function () {
+      if (subPathDepth > 0) {
+        subPathDepth--;
+        mode = IN_SUB_PATH;
+        actions[APPEND]();
+      } else {
+        subPathDepth = 0;
+        key = formatSubPath(key);
+        if (key === false) {
+          return false
+        } else {
+          actions[PUSH]();
+        }
+      }
+    };
+
+    function maybeUnescapeQuote () {
+      var nextChar = path[index + 1];
+      if ((mode === IN_SINGLE_QUOTE && nextChar === "'") ||
+        (mode === IN_DOUBLE_QUOTE && nextChar === '"')) {
+        index++;
+        newChar = '\\' + nextChar;
+        actions[APPEND]();
+        return true
+      }
+    }
+
+    while (mode !== null) {
+      index++;
+      c = path[index];
+
+      if (c === '\\' && maybeUnescapeQuote()) {
+        continue
+      }
+
+      type = getPathCharType(c);
+      typeMap = pathStateMachine[mode];
+      transition = typeMap[type] || typeMap['else'] || ERROR;
+
+      if (transition === ERROR) {
+        return // parse error
+      }
+
+      mode = transition[0];
+      action = actions[transition[1]];
+      if (action) {
+        newChar = transition[2];
+        newChar = newChar === undefined
+          ? c
+          : newChar;
+        if (action() === false) {
+          return
+        }
+      }
+
+      if (mode === AFTER_PATH) {
+        return keys
+      }
+    }
+  }
+
+
+
+
+
+  var I18nPath = function I18nPath () {
+    this._cache = Object.create(null);
+  };
+
+  /**
+   * External parse that check for a cache hit first
+   */
+  I18nPath.prototype.parsePath = function parsePath (path) {
+    var hit = this._cache[path];
+    if (!hit) {
+      hit = parse$1(path);
+      if (hit) {
+        this._cache[path] = hit;
+      }
+    }
+    return hit || []
+  };
+
+  /**
+   * Get path value from path string
+   */
+  I18nPath.prototype.getPathValue = function getPathValue (obj, path) {
+    if (!isObject(obj)) { return null }
+
+    var paths = this.parsePath(path);
+    if (paths.length === 0) {
+      return null
+    } else {
+      var length = paths.length;
+      var last = obj;
+      var i = 0;
+      while (i < length) {
+        var value = last[paths[i]];
+        if (value === undefined) {
+          return null
+        }
+        last = value;
+        i++;
+      }
+
+      return last
+    }
+  };
+
+  /*  */
+
+
+
+  var linkKeyMatcher = /(?:@(?:\.[a-z]+)?:(?:[\w\-_|.]+|\([\w\-_|.]+\)))/g;
+  var linkKeyPrefixMatcher = /^@(?:\.([a-z]+))?:/;
+  var bracketsMatcher = /[()]/g;
+  var formatters = {
+    'upper': function (str) { return str.toLocaleUpperCase(); },
+    'lower': function (str) { return str.toLocaleLowerCase(); }
+  };
+
+  var defaultFormatter = new BaseFormatter();
+
+  var VueI18n = function VueI18n (options) {
+    var this$1 = this;
+    if ( options === void 0 ) options = {};
+
+    // Auto install if it is not done yet and `window` has `Vue`.
+    // To allow users to avoid auto-installation in some cases,
+    // this code should be placed here. See #290
+    /* istanbul ignore if */
+    if (!Vue && typeof window !== 'undefined' && window.Vue) {
+      install(window.Vue);
+    }
+
+    var locale = options.locale || 'en-US';
+    var fallbackLocale = options.fallbackLocale || 'en-US';
+    var messages = options.messages || {};
+    var dateTimeFormats = options.dateTimeFormats || {};
+    var numberFormats = options.numberFormats || {};
+
+    this._vm = null;
+    this._formatter = options.formatter || defaultFormatter;
+    this._missing = options.missing || null;
+    this._root = options.root || null;
+    this._sync = options.sync === undefined ? true : !!options.sync;
+    this._fallbackRoot = options.fallbackRoot === undefined
+      ? true
+      : !!options.fallbackRoot;
+    this._silentTranslationWarn = options.silentTranslationWarn === undefined
+      ? false
+      : !!options.silentTranslationWarn;
+    this._silentFallbackWarn = options.silentFallbackWarn === undefined
+      ? false
+      : !!options.silentFallbackWarn;
+    this._dateTimeFormatters = {};
+    this._numberFormatters = {};
+    this._path = new I18nPath();
+    this._dataListeners = [];
+    this._preserveDirectiveContent = options.preserveDirectiveContent === undefined
+      ? false
+      : !!options.preserveDirectiveContent;
+    this.pluralizationRules = options.pluralizationRules || {};
+
+    this._exist = function (message, key) {
+      if (!message || !key) { return false }
+      if (!isNull(this$1._path.getPathValue(message, key))) { return true }
+      // fallback for flat key
+      if (message[key]) { return true }
+      return false
+    };
+
+    this._initVM({
+      locale: locale,
+      fallbackLocale: fallbackLocale,
+      messages: messages,
+      dateTimeFormats: dateTimeFormats,
+      numberFormats: numberFormats
+    });
+  };
+
+  var prototypeAccessors = { vm: { configurable: true },messages: { configurable: true },dateTimeFormats: { configurable: true },numberFormats: { configurable: true },availableLocales: { configurable: true },locale: { configurable: true },fallbackLocale: { configurable: true },missing: { configurable: true },formatter: { configurable: true },silentTranslationWarn: { configurable: true },silentFallbackWarn: { configurable: true },preserveDirectiveContent: { configurable: true } };
+
+  VueI18n.prototype._initVM = function _initVM (data) {
+    var silent = Vue.config.silent;
+    Vue.config.silent = true;
+    this._vm = new Vue({ data: data });
+    Vue.config.silent = silent;
+  };
+
+  VueI18n.prototype.destroyVM = function destroyVM () {
+    this._vm.$destroy();
+  };
+
+  VueI18n.prototype.subscribeDataChanging = function subscribeDataChanging (vm) {
+    this._dataListeners.push(vm);
+  };
+
+  VueI18n.prototype.unsubscribeDataChanging = function unsubscribeDataChanging (vm) {	 
+    remove(this._dataListeners, vm);
+  };
+
+  VueI18n.prototype.watchI18nData = function watchI18nData () {
+    var self = this;
+    return this._vm.$watch('$data', function () {
+      var i = self._dataListeners.length;
+      while (i--) {
+        Vue.nextTick(function () {
+          self._dataListeners[i] && self._dataListeners[i].$forceUpdate();
+        });
+      }
+    }, { deep: true })
+  };
+
+  VueI18n.prototype.watchLocale = function watchLocale () {
+    /* istanbul ignore if */
+    if (!this._sync || !this._root) { return null }
+    var target = this._vm;
+    return this._root.$i18n.vm.$watch('locale', function (val) {
+      target.$set(target, 'locale', val);
+      target.$forceUpdate();
+    }, { immediate: true })
+  };
+
+  prototypeAccessors.vm.get = function () { return this._vm };
+
+  prototypeAccessors.messages.get = function () { return looseClone(this._getMessages()) };
+  prototypeAccessors.dateTimeFormats.get = function () { return looseClone(this._getDateTimeFormats()) };
+  prototypeAccessors.numberFormats.get = function () { return looseClone(this._getNumberFormats()) };
+  prototypeAccessors.availableLocales.get = function () { return Object.keys(this.messages).sort() };
+
+  prototypeAccessors.locale.get = function () { return this._vm.locale };
+  prototypeAccessors.locale.set = function (locale) {
+    this._vm.$set(this._vm, 'locale', locale);
+  };
+
+  prototypeAccessors.fallbackLocale.get = function () { return this._vm.fallbackLocale };
+  prototypeAccessors.fallbackLocale.set = function (locale) {
+    this._vm.$set(this._vm, 'fallbackLocale', locale);
+  };
+
+  prototypeAccessors.missing.get = function () { return this._missing };
+  prototypeAccessors.missing.set = function (handler) { this._missing = handler; };
+
+  prototypeAccessors.formatter.get = function () { return this._formatter };
+  prototypeAccessors.formatter.set = function (formatter) { this._formatter = formatter; };
+
+  prototypeAccessors.silentTranslationWarn.get = function () { return this._silentTranslationWarn };
+  prototypeAccessors.silentTranslationWarn.set = function (silent) { this._silentTranslationWarn = silent; };
+
+  prototypeAccessors.silentFallbackWarn.get = function () { return this._silentFallbackWarn };
+  prototypeAccessors.silentFallbackWarn.set = function (silent) { this._silentFallbackWarn = silent; };
+
+  prototypeAccessors.preserveDirectiveContent.get = function () { return this._preserveDirectiveContent };
+  prototypeAccessors.preserveDirectiveContent.set = function (preserve) { this._preserveDirectiveContent = preserve; };
+
+  VueI18n.prototype._getMessages = function _getMessages () { return this._vm.messages };
+  VueI18n.prototype._getDateTimeFormats = function _getDateTimeFormats () { return this._vm.dateTimeFormats };
+  VueI18n.prototype._getNumberFormats = function _getNumberFormats () { return this._vm.numberFormats };
+
+  VueI18n.prototype._warnDefault = function _warnDefault (locale, key, result, vm, values) {
+    if (!isNull(result)) { return result }
+    if (this._missing) {
+      var missingRet = this._missing.apply(null, [locale, key, vm, values]);
+      if (typeof missingRet === 'string') {
+        return missingRet
+      }
+    } else {
+      if (!this._silentTranslationWarn) {
+        warn(
+          "Cannot translate the value of keypath '" + key + "'. " +
+          'Use the value of keypath as default.'
+        );
+      }
+    }
+    return key
+  };
+
+  VueI18n.prototype._isFallbackRoot = function _isFallbackRoot (val) {
+    return !val && !isNull(this._root) && this._fallbackRoot
+  };
+
+  VueI18n.prototype._isSilentFallback = function _isSilentFallback (locale) {
+    return this._silentFallbackWarn && (this._isFallbackRoot() || locale !== this.fallbackLocale)
+  };
+
+  VueI18n.prototype._interpolate = function _interpolate (
+    locale,
+    message,
+    key,
+    host,
+    interpolateMode,
+    values,
+    visitedLinkStack
+  ) {
+    if (!message) { return null }
+
+    var pathRet = this._path.getPathValue(message, key);
+    if (Array.isArray(pathRet) || isPlainObject(pathRet)) { return pathRet }
+
+    var ret;
+    if (isNull(pathRet)) {
+      /* istanbul ignore else */
+      if (isPlainObject(message)) {
+        ret = message[key];
+        if (typeof ret !== 'string') {
+          if (!this._silentTranslationWarn && !this._isSilentFallback(locale)) {
+            warn(("Value of key '" + key + "' is not a string!"));
+          }
+          return null
+        }
+      } else {
+        return null
+      }
+    } else {
+      /* istanbul ignore else */
+      if (typeof pathRet === 'string') {
+        ret = pathRet;
+      } else {
+        if (!this._silentTranslationWarn && !this._isSilentFallback(locale)) {
+          warn(("Value of key '" + key + "' is not a string!"));
+        }
+        return null
+      }
+    }
+
+    // Check for the existence of links within the translated string
+    if (ret.indexOf('@:') >= 0 || ret.indexOf('@.') >= 0) {
+      ret = this._link(locale, message, ret, host, 'raw', values, visitedLinkStack);
+    }
+
+    return this._render(ret, interpolateMode, values, key)
+  };
+
+  VueI18n.prototype._link = function _link (
+    locale,
+    message,
+    str,
+    host,
+    interpolateMode,
+    values,
+    visitedLinkStack
+  ) {
+    var ret = str;
+
+    // Match all the links within the local
+    // We are going to replace each of
+    // them with its translation
+    var matches = ret.match(linkKeyMatcher);
+    for (var idx in matches) {
+      // ie compatible: filter custom array
+      // prototype method
+      if (!matches.hasOwnProperty(idx)) {
+        continue
+      }
+      var link = matches[idx];
+      var linkKeyPrefixMatches = link.match(linkKeyPrefixMatcher);
+      var linkPrefix = linkKeyPrefixMatches[0];
+        var formatterName = linkKeyPrefixMatches[1];
+
+      // Remove the leading @:, @.case: and the brackets
+      var linkPlaceholder = link.replace(linkPrefix, '').replace(bracketsMatcher, '');
+
+      if (visitedLinkStack.includes(linkPlaceholder)) {
+        {
+          warn(("Circular reference found. \"" + link + "\" is already visited in the chain of " + (visitedLinkStack.reverse().join(' <- '))));
+        }
+        return ret
+      }
+      visitedLinkStack.push(linkPlaceholder);
+
+      // Translate the link
+      var translated = this._interpolate(
+        locale, message, linkPlaceholder, host,
+        interpolateMode === 'raw' ? 'string' : interpolateMode,
+        interpolateMode === 'raw' ? undefined : values,
+        visitedLinkStack
+      );
+
+      if (this._isFallbackRoot(translated)) {
+        if (!this._silentTranslationWarn) {
+          warn(("Fall back to translate the link placeholder '" + linkPlaceholder + "' with root locale."));
+        }
+        /* istanbul ignore if */
+        if (!this._root) { throw Error('unexpected error') }
+        var root = this._root.$i18n;
+        translated = root._translate(
+          root._getMessages(), root.locale, root.fallbackLocale,
+          linkPlaceholder, host, interpolateMode, values
+        );
+      }
+      translated = this._warnDefault(
+        locale, linkPlaceholder, translated, host,
+        Array.isArray(values) ? values : [values]
+      );
+      if (formatters.hasOwnProperty(formatterName)) {
+        translated = formatters[formatterName](translated);
+      }
+
+      visitedLinkStack.pop();
+
+      // Replace the link with the translated
+      ret = !translated ? ret : ret.replace(link, translated);
+    }
+
+    return ret
+  };
+
+  VueI18n.prototype._render = function _render (message, interpolateMode, values, path) {
+    var ret = this._formatter.interpolate(message, values, path);
+
+    // If the custom formatter refuses to work - apply the default one
+    if (!ret) {
+      ret = defaultFormatter.interpolate(message, values, path);
+    }
+
+    // if interpolateMode is **not** 'string' ('row'),
+    // return the compiled data (e.g. ['foo', VNode, 'bar']) with formatter
+    return interpolateMode === 'string' ? ret.join('') : ret
+  };
+
+  VueI18n.prototype._translate = function _translate (
+    messages,
+    locale,
+    fallback,
+    key,
+    host,
+    interpolateMode,
+    args
+  ) {
+    var res =
+      this._interpolate(locale, messages[locale], key, host, interpolateMode, args, [key]);
+    if (!isNull(res)) { return res }
+
+    res = this._interpolate(fallback, messages[fallback], key, host, interpolateMode, args, [key]);
+    if (!isNull(res)) {
+      if (!this._silentTranslationWarn && !this._silentFallbackWarn) {
+        warn(("Fall back to translate the keypath '" + key + "' with '" + fallback + "' locale."));
+      }
+      return res
+    } else {
+      return null
+    }
+  };
+
+  VueI18n.prototype._t = function _t (key, _locale, messages, host) {
+      var ref;
+
+      var values = [], len = arguments.length - 4;
+      while ( len-- > 0 ) values[ len ] = arguments[ len + 4 ];
+    if (!key) { return '' }
+
+    var parsedArgs = parseArgs.apply(void 0, values);
+    var locale = parsedArgs.locale || _locale;
+
+    var ret = this._translate(
+      messages, locale, this.fallbackLocale, key,
+      host, 'string', parsedArgs.params
+    );
+    if (this._isFallbackRoot(ret)) {
+      if (!this._silentTranslationWarn && !this._silentFallbackWarn) {
+        warn(("Fall back to translate the keypath '" + key + "' with root locale."));
+      }
+      /* istanbul ignore if */
+      if (!this._root) { throw Error('unexpected error') }
+      return (ref = this._root).$t.apply(ref, [ key ].concat( values ))
+    } else {
+      return this._warnDefault(locale, key, ret, host, values)
+    }
+  };
+
+  VueI18n.prototype.t = function t (key) {
+      var ref;
+
+      var values = [], len = arguments.length - 1;
+      while ( len-- > 0 ) values[ len ] = arguments[ len + 1 ];
+    return (ref = this)._t.apply(ref, [ key, this.locale, this._getMessages(), null ].concat( values ))
+  };
+
+  VueI18n.prototype._i = function _i (key, locale, messages, host, values) {
+    var ret =
+      this._translate(messages, locale, this.fallbackLocale, key, host, 'raw', values);
+    if (this._isFallbackRoot(ret)) {
+      if (!this._silentTranslationWarn) {
+        warn(("Fall back to interpolate the keypath '" + key + "' with root locale."));
+      }
+      if (!this._root) { throw Error('unexpected error') }
+      return this._root.$i18n.i(key, locale, values)
+    } else {
+      return this._warnDefault(locale, key, ret, host, [values])
+    }
+  };
+
+  VueI18n.prototype.i = function i (key, locale, values) {
+    /* istanbul ignore if */
+    if (!key) { return '' }
+
+    if (typeof locale !== 'string') {
+      locale = this.locale;
+    }
+
+    return this._i(key, locale, this._getMessages(), null, values)
+  };
+
+  VueI18n.prototype._tc = function _tc (
+    key,
+    _locale,
+    messages,
+    host,
+    choice
+  ) {
+      var ref;
+
+      var values = [], len = arguments.length - 5;
+      while ( len-- > 0 ) values[ len ] = arguments[ len + 5 ];
+    if (!key) { return '' }
+    if (choice === undefined) {
+      choice = 1;
+    }
+
+    var predefined = { 'count': choice, 'n': choice };
+    var parsedArgs = parseArgs.apply(void 0, values);
+    parsedArgs.params = Object.assign(predefined, parsedArgs.params);
+    values = parsedArgs.locale === null ? [parsedArgs.params] : [parsedArgs.locale, parsedArgs.params];
+    return this.fetchChoice((ref = this)._t.apply(ref, [ key, _locale, messages, host ].concat( values )), choice)
+  };
+
+  VueI18n.prototype.fetchChoice = function fetchChoice (message, choice) {
+    /* istanbul ignore if */
+    if (!message && typeof message !== 'string') { return null }
+    var choices = message.split('|');
+
+    choice = this.getChoiceIndex(choice, choices.length);
+    if (!choices[choice]) { return message }
+    return choices[choice].trim()
+  };
+
+  /**
+   * @param choice {number} a choice index given by the input to $tc: `$tc('path.to.rule', choiceIndex)`
+   * @param choicesLength {number} an overall amount of available choices
+   * @returns a final choice index
+  */
+  VueI18n.prototype.getChoiceIndex = function getChoiceIndex (choice, choicesLength) {
+    // Default (old) getChoiceIndex implementation - english-compatible
+    var defaultImpl = function (_choice, _choicesLength) {
+      _choice = Math.abs(_choice);
+
+      if (_choicesLength === 2) {
+        return _choice
+          ? _choice > 1
+            ? 1
+            : 0
+          : 1
+      }
+
+      return _choice ? Math.min(_choice, 2) : 0
+    };
+
+    if (this.locale in this.pluralizationRules) {
+      return this.pluralizationRules[this.locale].apply(this, [choice, choicesLength])
+    } else {
+      return defaultImpl(choice, choicesLength)
+    }
+  };
+
+  VueI18n.prototype.tc = function tc (key, choice) {
+      var ref;
+
+      var values = [], len = arguments.length - 2;
+      while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];
+    return (ref = this)._tc.apply(ref, [ key, this.locale, this._getMessages(), null, choice ].concat( values ))
+  };
+
+  VueI18n.prototype._te = function _te (key, locale, messages) {
+      var args = [], len = arguments.length - 3;
+      while ( len-- > 0 ) args[ len ] = arguments[ len + 3 ];
+
+    var _locale = parseArgs.apply(void 0, args).locale || locale;
+    return this._exist(messages[_locale], key)
+  };
+
+  VueI18n.prototype.te = function te (key, locale) {
+    return this._te(key, this.locale, this._getMessages(), locale)
+  };
+
+  VueI18n.prototype.getLocaleMessage = function getLocaleMessage (locale) {
+    return looseClone(this._vm.messages[locale] || {})
+  };
+
+  VueI18n.prototype.setLocaleMessage = function setLocaleMessage (locale, message) {
+    this._vm.$set(this._vm.messages, locale, message);
+  };
+
+  VueI18n.prototype.mergeLocaleMessage = function mergeLocaleMessage (locale, message) {
+    this._vm.$set(this._vm.messages, locale, merge(this._vm.messages[locale] || {}, message));
+  };
+
+  VueI18n.prototype.getDateTimeFormat = function getDateTimeFormat (locale) {
+    return looseClone(this._vm.dateTimeFormats[locale] || {})
+  };
+
+  VueI18n.prototype.setDateTimeFormat = function setDateTimeFormat (locale, format) {
+    this._vm.$set(this._vm.dateTimeFormats, locale, format);
+  };
+
+  VueI18n.prototype.mergeDateTimeFormat = function mergeDateTimeFormat (locale, format) {
+    this._vm.$set(this._vm.dateTimeFormats, locale, merge(this._vm.dateTimeFormats[locale] || {}, format));
+  };
+
+  VueI18n.prototype._localizeDateTime = function _localizeDateTime (
+    value,
+    locale,
+    fallback,
+    dateTimeFormats,
+    key
+  ) {
+    var _locale = locale;
+    var formats = dateTimeFormats[_locale];
+
+    // fallback locale
+    if (isNull(formats) || isNull(formats[key])) {
+      if (!this._silentTranslationWarn) {
+        warn(("Fall back to '" + fallback + "' datetime formats from '" + locale + " datetime formats."));
+      }
+      _locale = fallback;
+      formats = dateTimeFormats[_locale];
+    }
+
+    if (isNull(formats) || isNull(formats[key])) {
+      return null
+    } else {
+      var format = formats[key];
+      var id = _locale + "__" + key;
+      var formatter = this._dateTimeFormatters[id];
+      if (!formatter) {
+        formatter = this._dateTimeFormatters[id] = new Intl.DateTimeFormat(_locale, format);
+      }
+      return formatter.format(value)
+    }
+  };
+
+  VueI18n.prototype._d = function _d (value, locale, key) {
+    /* istanbul ignore if */
+    if (!VueI18n.availabilities.dateTimeFormat) {
+      warn('Cannot format a Date value due to not supported Intl.DateTimeFormat.');
+      return ''
+    }
+
+    if (!key) {
+      return new Intl.DateTimeFormat(locale).format(value)
+    }
+
+    var ret =
+      this._localizeDateTime(value, locale, this.fallbackLocale, this._getDateTimeFormats(), key);
+    if (this._isFallbackRoot(ret)) {
+      if (!this._silentTranslationWarn) {
+        warn(("Fall back to datetime localization of root: key '" + key + "' ."));
+      }
+      /* istanbul ignore if */
+      if (!this._root) { throw Error('unexpected error') }
+      return this._root.$i18n.d(value, key, locale)
+    } else {
+      return ret || ''
+    }
+  };
+
+  VueI18n.prototype.d = function d (value) {
+      var args = [], len = arguments.length - 1;
+      while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
+
+    var locale = this.locale;
+    var key = null;
+
+    if (args.length === 1) {
+      if (typeof args[0] === 'string') {
+        key = args[0];
+      } else if (isObject(args[0])) {
+        if (args[0].locale) {
+          locale = args[0].locale;
+        }
+        if (args[0].key) {
+          key = args[0].key;
+        }
+      }
+    } else if (args.length === 2) {
+      if (typeof args[0] === 'string') {
+        key = args[0];
+      }
+      if (typeof args[1] === 'string') {
+        locale = args[1];
+      }
+    }
+
+    return this._d(value, locale, key)
+  };
+
+  VueI18n.prototype.getNumberFormat = function getNumberFormat (locale) {
+    return looseClone(this._vm.numberFormats[locale] || {})
+  };
+
+  VueI18n.prototype.setNumberFormat = function setNumberFormat (locale, format) {
+    this._vm.$set(this._vm.numberFormats, locale, format);
+  };
+
+  VueI18n.prototype.mergeNumberFormat = function mergeNumberFormat (locale, format) {
+    this._vm.$set(this._vm.numberFormats, locale, merge(this._vm.numberFormats[locale] || {}, format));
+  };
+
+  VueI18n.prototype._getNumberFormatter = function _getNumberFormatter (
+    value,
+    locale,
+    fallback,
+    numberFormats,
+    key,
+    options
+  ) {
+    var _locale = locale;
+    var formats = numberFormats[_locale];
+
+    // fallback locale
+    if (isNull(formats) || isNull(formats[key])) {
+      if (!this._silentTranslationWarn) {
+        warn(("Fall back to '" + fallback + "' number formats from '" + locale + " number formats."));
+      }
+      _locale = fallback;
+      formats = numberFormats[_locale];
+    }
+
+    if (isNull(formats) || isNull(formats[key])) {
+      return null
+    } else {
+      var format = formats[key];
+
+      var formatter;
+      if (options) {
+        // If options specified - create one time number formatter
+        formatter = new Intl.NumberFormat(_locale, Object.assign({}, format, options));
+      } else {
+        var id = _locale + "__" + key;
+        formatter = this._numberFormatters[id];
+        if (!formatter) {
+          formatter = this._numberFormatters[id] = new Intl.NumberFormat(_locale, format);
+        }
+      }
+      return formatter
+    }
+  };
+
+  VueI18n.prototype._n = function _n (value, locale, key, options) {
+    /* istanbul ignore if */
+    if (!VueI18n.availabilities.numberFormat) {
+      {
+        warn('Cannot format a Number value due to not supported Intl.NumberFormat.');
+      }
+      return ''
+    }
+
+    if (!key) {
+      var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);
+      return nf.format(value)
+    }
+
+    var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);
+    var ret = formatter && formatter.format(value);
+    if (this._isFallbackRoot(ret)) {
+      if (!this._silentTranslationWarn) {
+        warn(("Fall back to number localization of root: key '" + key + "' ."));
+      }
+      /* istanbul ignore if */
+      if (!this._root) { throw Error('unexpected error') }
+      return this._root.$i18n.n(value, Object.assign({}, { key: key, locale: locale }, options))
+    } else {
+      return ret || ''
+    }
+  };
+
+  VueI18n.prototype.n = function n (value) {
+      var args = [], len = arguments.length - 1;
+      while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
+
+    var locale = this.locale;
+    var key = null;
+    var options = null;
+
+    if (args.length === 1) {
+      if (typeof args[0] === 'string') {
+        key = args[0];
+      } else if (isObject(args[0])) {
+        if (args[0].locale) {
+          locale = args[0].locale;
+        }
+        if (args[0].key) {
+          key = args[0].key;
+        }
+
+        // Filter out number format options only
+        options = Object.keys(args[0]).reduce(function (acc, key) {
+            var obj;
+
+          if (numberFormatKeys.includes(key)) {
+            return Object.assign({}, acc, ( obj = {}, obj[key] = args[0][key], obj ))
+          }
+          return acc
+        }, null);
+      }
+    } else if (args.length === 2) {
+      if (typeof args[0] === 'string') {
+        key = args[0];
+      }
+      if (typeof args[1] === 'string') {
+        locale = args[1];
+      }
+    }
+
+    return this._n(value, locale, key, options)
+  };
+
+  VueI18n.prototype._ntp = function _ntp (value, locale, key, options) {
+    /* istanbul ignore if */
+    if (!VueI18n.availabilities.numberFormat) {
+      {
+        warn('Cannot format to parts a Number value due to not supported Intl.NumberFormat.');
+      }
+      return []
+    }
+
+    if (!key) {
+      var nf = !options ? new Intl.NumberFormat(locale) : new Intl.NumberFormat(locale, options);
+      return nf.formatToParts(value)
+    }
+
+    var formatter = this._getNumberFormatter(value, locale, this.fallbackLocale, this._getNumberFormats(), key, options);
+    var ret = formatter && formatter.formatToParts(value);
+    if (this._isFallbackRoot(ret)) {
+      if (!this._silentTranslationWarn) {
+        warn(("Fall back to format number to parts of root: key '" + key + "' ."));
+      }
+      /* istanbul ignore if */
+      if (!this._root) { throw Error('unexpected error') }
+      return this._root.$i18n._ntp(value, locale, key, options)
+    } else {
+      return ret || []
+    }
+  };
+
+  Object.defineProperties( VueI18n.prototype, prototypeAccessors );
+
+  var availabilities;
+  // $FlowFixMe
+  Object.defineProperty(VueI18n, 'availabilities', {
+    get: function get () {
+      if (!availabilities) {
+        var intlDefined = typeof Intl !== 'undefined';
+        availabilities = {
+          dateTimeFormat: intlDefined && typeof Intl.DateTimeFormat !== 'undefined',
+          numberFormat: intlDefined && typeof Intl.NumberFormat !== 'undefined'
+        };
+      }
+
+      return availabilities
+    }
+  });
+
+  VueI18n.install = install;
+  VueI18n.version = '8.10.0';
+
+  return VueI18n;
+
+})));

+ 63 - 0
lang/xl.js

@@ -0,0 +1,63 @@
+export default {
+		index:{
+			language:'Ελληνικά',	//希腊语	
+		},
+		lang:{
+			languageSet_0:'中文繁體',
+			languageSet_1:'中文简体',
+			languageSet_2:'English',
+			languageSet_3:'Español',//西班牙语
+			languageSet_4:'Italiano',//意大利语
+			languageSet_5:'Portugués',//葡萄牙语
+			languageSet_6:'عربي',//阿拉伯语
+			languageSet_7:'Français',//法语
+			languageSet_8:'日本語',//日语
+			languageSet_9:'Türk dili',//土耳其
+			languageSet_10:'Ελληνικά',//希腊
+			logon:["Σύνδεση στον κόσμο νομισμάτων", "γραμματοκιβώτιο", "Παρακαλώ εισάγετε γραμματοκιβώτιο", "Κωδικός πρόσβασης", "Παρακαλώ εισάγετε κωδικό πρόσβασης"],
+			register:["Εγγραφή νομίσματος Κόσμος", "Εγγραφείτε τώρα", "Κωδικός επαλήθευσης", "Παρακαλώ εισάγετε τον κωδικό επαλήθευσης", "Λήψη", "Κωδικός πρόσβασης συναλλαγής", "Παρακαλώ εισάγετε τον κωδικό πρόσκλησης", "Παρακαλώ εισαγάγετε τον κωδικό προσκλήσεως", "Υπάρχοντα λογαριασμό"],
+			forgotPwd:["Ξεχάσατε τον κωδικό πρόσβασης", "Νέος κωδικός πρόσβασης", "Παρακαλώ ορίστε νέο κωδικό πρόσβασης", "Επιβεβαιώστε τον κωδικό πρόσβασης", "Παρακαλώ επιβεβαιώστε τον κωδικό πρόσβασης και πάλι", "Μη συμβατότητα κωδικού πρόσβασης"],
+			
+			index:{			
+				nav:['Κοινότητα συνομιλίας','περιουσιακό στοιχείο','Οι παραγγελίες μου','Ηλεκτρονική υπηρεσία',' Επικοινωνία με την εξυπηρέτηση πελατών',
+				'Σχετικά με εμάς','Ρυθμίσεις','Έξυπνες παραγγελίες','Παραγγελίες ιδιωτικής τοποθέτησης','Παραγγελίες γκαλερί','Η κοινή μου χρήση',
+				'Κανόνες συναλλαγών','Επικοινωνήστε μαζί μας','Έλεγχος ταυτότητας πραγματικού ονόματος'],
+				notice:['ανακοίνωση'],//公告
+				ai:["Έξυπνο τούβλο που κινείται", 'τιμή αγοράς', 'τόκοι', 'ημέρα', 'πλεονεκτήματα προϊόντων ζωγραφικής σύννεφων', 'αρχή', 'μέγιστη κατοχή', 'αμοιβές μεταλλωρύχων', 'καθαρό εισόδημα'],
+				preipo:["Ιδιωτική τοποθέτηση", "ποσότητα αγοράς", "Παρακαλώ εισάγετε την ποσότητα αγοράς", "τιμή", "ποσότητα", "σύνολο"],
+				price:['αγορά'],
+				gallery:['Γκαλερί','Τιμή'],
+				realName:['Όνομα', 'Παρακαλώ εισάγετε το όνομα', 'Αριθμός ταυτότητας', 'Παρακαλώ εισάγετε τον αριθμό ταυτότητας', 'Μπροστά στην κάρτα ταυτότητας', 'Ανεβάστε μπροστά στην κάρτα ταυτότητας', 'Πίσω στην κάρτα ταυτότητας', 'Ανεβάστε πίσω την κάρτα ταυτότητας', 'Υποβολή']
+			},
+			my:{
+				setup:['Ρυθμίσεις', 'Κωδικός σύνδεσης', 'Τροποποίηση', 'Κωδικός συναλλαγής', 'Αλλαγή γλώσσας', 'Παρακαλώ εισάγετε τον κωδικό επαλήθευσης', 'Λήψη', 'Παρακαλώ εισάγετε νέο κωδικό πρόσβασης', 'Παρακαλώ επιβεβαιώστε ξανά τον κωδικό πρόσβασης', 'Δύο κωδικοί πρόσβασης είναι διαφορετικοί', 'Επίπεδο '],
+				invite:['Πρόσκληση φίλων','Αντιγραφή σύνδεσης','Αντιγραφή τηλεφώνου'],
+				chatgpt:['Σχέδιο τεχνητής νοημοσύνης', 'Δημιουργία εικόνας', 'Δημιουργία κειμένου', 'Λέξεις-κλειδιά', 'Επιλογή στυλ ',"Δημιουργία εικόνας σε εξέλιξη...",' Παρακαλώ ανεβάστε την αρχική εικόνα'],
+				orderList:["Η παραγγελία μου", "αριθμός", "επένδυση", "αναλογία", "χρήματα", "κύκλος", "αγορά", "εισόδημα", "λήξη"],
+				assets:["Σύνολο ενεργητικού", "περιουσιακό στοιχείο", "εγγραφή", "επαναφόρτιση", "ανάληψη", "μεταβίβαση", "λεπτομέρεια"],
+				gallery:['Λεπτομέρειες γκαλερί', 'Χρόνος δημοπρασίας', 'Τρέχουσα τιμή', 'Περιγραφή προϊόντος '],
+				PreIPO:["Στοιχεία ιδιωτικής τοποθέτησης", "Ονομασία νομίσματος", "έκδοση", "φινίρισμα", "Εισαγωγή έργου", "Ποσότητα έκδοσης", "Τιμή έκδοσης", "Υπόλοιπη ποσότητα"],
+				deposit:['Διεύθυνση χρέωσης'],
+				withdraw:['επίσης', 'Δημόσια αλυσίδα', 'Διεύθυνση ανάληψης',' Παρακαλώ εισάγετε ή πατήστε παρατεταμένα τη διεύθυνση επικόλλησης', 'Ποσότητα ανάληψης', 'Παρακαλώ εισάγετε την ποσότητα ανάληψης', 'Τέλος χειρισμού', 'Κωδικός συναλλαγής'],
+				transer:["Ποσότητα μεταφοράς", "Παρακαλώ εισάγετε ποσότητα μεταφοράς", "Αντίθετο λογαριασμό", "Παρακαλώ εισάγετε αντίθετο λογαριασμό", "Μεταφορά έξω", "Μεταφορά μέσα"],
+				team:['Αριθμός ατόμων', 'Αποτελεσματική κατανομή', 'εισόδημα', 'Άμεση ώθηση', 'αριθμός', 'βαθμός', 'επίτευξη','χρόνος']
+			},
+			btn:['Σύνδεση', 'Εγγραφή', 'Έξοδος σύνδεσης', 'Εντάξει', 'Ακύρωση', 'Αποθήκευση εικόνας', 'Θέλω να πάρω', 'Αγορά τώρα', 'Δημιουργία', 'Παραγγελία τώρα', 'Εμπειρία σχεδίασης τεχνητής νοημοσύνης', 'Αντιγραφή διεύθυνσης', 'Όλα', 'λήψη', 'Μακρύ πάτημα για αποθήκευση εικόνας'],
+			wrong:["Αναφέρθηκε σφάλμα", "Αδύνατη λήψη διπλότυπου"],
+			state:['Αποστολή εικόνας... '," Σε εξέλιξη", "Ολοκληρώθηκε", "Προς άνοιγμα...", ' Σε αναμονή αναθεώρησης ','Σε λογαριασμό','Απορρίφθηκε ',
+			'Σε λογαριασμό' ,'Αποτυχία','Επαναφόρτιση σε εξέλιξη', 'Επαναφόρτιση επιτυχής', 'Επαναφόρτιση απέτυχε','Πιστοποιημένη',"Υπό εξέταση"],
+			tips:['Σύσταση λέξης-κλειδιού: [Σκηνή]+[Αναφορά στυλ]+[Μέθοδος απόδοσης], χρησιμοποιήστε "," Διαχωρισμός "μεταξύ λέξεων-κλειδιών"',
+			       "Φόρτωση", "Φόρτωση", "Όχι περισσότερα", "Χωρίς δεδομένα επί του παρόντος", "Δημοπρασίες με επενδυτικούς κινδύνους θα πρέπει να είναι προσεκτικοί", 
+				   "Ποιότητα υπηρεσιών", "Αυστηρή επιλογή ποιότητας", "Εγγύηση μετά την πώληση", "Προβολή περισσότερων", "Καλωσορίσατε πίσω", "Επιλογή νομίσματος", 
+				   "Επιλογή δικτύου", "Υπενθύμιση χρέωσης: Μην χρεώνετε περιουσιακά στοιχεία εκτός τοπικού νομίσματος στη διεύθυνση που αναφέρεται παραπάνω, διαφορετικά τα περιουσιακά στοιχεία δεν θα είναι ανακτήσιμα", 
+				   "Αντιγραφή επιτυχώς","Οι αναλήψεις μπορούν να γίνουν μόνο μετά την επίτευξη 200, και ο ημερήσιος χρόνος ανάληψης είναι από 10μ έως 2μμ UK χρόνο! Δεν μπορείτε να αποσύρετε νομίσματα άλλες φορές."],
+			Aistyle:['Εξερευνήστε το άπειρο', 'Αντίκα', 'Anime', 'Realistic Style', 'Ukiyo-e', 'low poly', 'Futurism', 'Pixel Style', 'Concept Art', 'Cyberpunk',
+			        'Lolita Style', 'Baroque Style', 'Surrealism',
+                     "Ζωγραφική υδατογραφίας", "Τέχνη κύματος ατμού", "Πετρογραφία", "Κινούμενα σχέδια", "Επιλογή στυλ"],
+			
+				
+			
+			
+		}
+		
+	}

+ 37 - 0
lang/zh-tc.js

@@ -0,0 +1,37 @@
+export default {
+		index:{
+			language:'語言設定',		//中文繁体			
+		},
+		lang:{
+			languageSet_0:'中文繁體',
+			languageSet_1:'中文简体',
+			languageSet_2:'English',
+			languageSet_3:'Español',//西班牙语
+			languageSet_4:'Italiano',//意大利语
+			languageSet_5:'Portugués',//葡萄牙语
+			languageSet_6:'عربي',//阿拉伯语			
+			languageSet_7:'Français',//法语
+			languageSet_8:'日本語',//日语
+			languageSet_9:'Türk dili',//土耳其
+			languageSet_10:'Ελληνικά',//希腊
+			logon:['登录 币世界','邮箱','请输入邮箱','密码','请输入密码'],
+			register:['注册 币世界','立即注册','验证码','请输入验证码','获取','交易密码','请输入交易密码','邀请码','请输入邀请码','已有账号'],			
+			index:{			
+				withdraw:['餘額','提現'],
+				transer:['兌換','餘額','轉帳','轉出數量','請輸入VGT轉出數量','接收地址','請輸入VGT接收地址','請選擇預約時間'],
+				orders:['時間','收益','預約','用時','價格','請選擇預約日期(可多選)','今日','明日','後天','共預約','場']
+			},
+			orders:{
+			   tab:['待付款','待出倉','待收款','紫金記錄','預約記錄']	,
+			   list:['訂單號','匹配時間','匹配地址','日收益','已收益']
+			},
+			my:{				
+				team:['我的收益','今日收益','累計收益','我的團隊','直推人數','團隊人數','直推預約','團隊預約','直推業績','團隊業績'],
+				list:['團隊明細','餘額明細',' VGT明細','提現明細','昵稱','時間','地址','金額','說明','狀態']
+			},
+			btn:['預約','立即支付','登出','確定','取消','立即購買','複製地址','全部','手動補票'],
+			wrong:['報錯了','不能重複獲取','暫無數據'],
+			state:['正在上傳圖片…',' 已匹配','未匹配','待打款','已付款','已拒絕','複製成功','暫未注册','待稽核','到賬中','已到賬'],
+		}
+		
+	}

+ 3 - 0
locales/en-US.json

@@ -0,0 +1,3 @@
+{
+  "welcome": "Welcome to Uni-app"
+}

+ 3 - 0
locales/zh-CN.json

@@ -0,0 +1,3 @@
+{
+  "welcome": "欢迎使用uniapp"
+}

+ 27 - 0
main.js

@@ -0,0 +1,27 @@
+import {createSSRApp} from "vue";
+import App from "./App.vue";
+ import i18n from './lang/index'
+
+//挂载 接口
+import http from './common/mehaotian-request/index.js'   
+export function createApp() {
+	const app = createSSRApp(App);		
+    app.config.globalProperties.i18n = i18n
+	app.config.globalProperties.$http = http
+	const t =(path)=>{
+		const time = Date.parse(new Date())
+		uni.switchTab({
+			url:path + time
+		})
+	}
+	app.config.globalProperties.$t = t
+	app.use(i18n)
+	//app.prototype._i18n = i18n
+	return {	
+		app
+	};
+}
+
+//app.prototype._i18n = i18n
+//app.mount('#app')
+

+ 90 - 0
manifest.json

@@ -0,0 +1,90 @@
+{
+    "name" : "VGST",
+    "appid" : "__UNI__9AA9DA2",
+    "description" : "",
+    "versionName" : "1.0.0",
+    "versionCode" : "100",
+    "transformPx" : false,
+    /* 5+App特有相关 */
+    "app-plus" : {
+        "usingComponents" : true,
+        "nvueStyleCompiler" : "uni-app",
+        "compilerVersion" : 3,
+        "splashscreen" : {
+            "alwaysShowBeforeRender" : true,
+            "waiting" : true,
+            "autoclose" : true,
+            "delay" : 0
+        },
+        /* 模块配置 */
+        "modules" : {},
+        /* 应用发布信息 */
+        "distribute" : {
+            /* android打包配置 */
+            "android" : {
+                "permissions" : [
+                    "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+                ]
+            },
+            /* ios打包配置 */
+            "ios" : {},
+            /* SDK配置 */
+            "sdkConfigs" : {}
+        }
+    },
+    /* 快应用特有相关 */
+    "quickapp" : {},
+    /* 小程序特有相关 */
+    "mp-weixin" : {
+        "appid" : "",
+        "setting" : {
+            "urlCheck" : false
+        },
+        "usingComponents" : true
+    },
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    },
+    "uniStatistics" : {
+        "enable" : false
+    },
+    "vueVersion" : "3",
+    "h5" : {
+        "router" : {
+            "base" : "/vgst/",
+            "mode" : "hash"
+        },
+        "devServer" : {
+            "proxy" : {
+                "/host" : {
+                    "target" : "https://www.vgst168.com", //请求的目标域名
+
+                    // "target": "http://qudou.frp.liuniu946.com", //请求的目标域名
+                    "changeOrigin" : true
+                }
+            }
+        }
+    }
+}
+// "secure": false,
+

+ 8 - 0
package.json

@@ -0,0 +1,8 @@
+{
+  "dependencies": {
+    "@wagmi/core": "^1.4.4",
+    "@web3modal/wagmi": "^3.5.5",
+    "sass": "^1.69.7",
+    "vue-i18n": "^9.9.0"
+  }
+}

+ 114 - 0
pages.json

@@ -0,0 +1,114 @@
+{
+	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		{
+			"path": "pages/index/index",
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path": "pages/orders/index",//订单
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+				
+			}
+		},
+		{
+			"path": "pages/my/index",//团队
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path": "pages/login/register",//注册
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white"
+			}
+		},
+		{
+			"path": "pages/leakage/index",//撿漏區
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path": "pages/my/rule",//参与规则
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path": "pages/my/tutorial",//新手教程
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path": "pages/my/tutorialdel",//新手教详情
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white",
+				"enablePullDownRefresh": true
+			}
+		},
+		{
+			"path": "pages/my/fhlist",//分红列表			
+			"style": {
+				"navigationStyle": "custom",
+				"navigationBarTextStyle": "white",
+				"enablePullDownRefresh": true
+			}
+		}
+	],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "VGST",
+		"navigationBarBackgroundColor": "#F8F8F8",
+		"backgroundColor": "#F8F8F8"
+	},//撿漏區
+	"tabBar": {
+		"color": "#767E9E",
+		"selectedColor": "#14C670",
+		"borderStyle": "white",
+		"backgroundColor": "#ffffff",
+		"iconWidth":"32px",
+		"spacing":"0",
+		"fontSize":"10px",
+		"height":"60px",
+		"list": [{
+			"pagePath": "pages/index/index",
+			"iconPath": "static/tabble/Home.png",
+			"selectedIconPath": "static/tabble/Homehover.png",
+			"text": "首頁"
+		}, {
+			"pagePath": "pages/orders/index",
+			"iconPath": "static/tabble/Bill.png",
+			"selectedIconPath": "static/tabble/Billhover.png",
+			"text": "訂單"
+		}, 
+		{
+			"pagePath": "pages/leakage/index",
+			"iconPath": "static/tabble/Price.png",
+			"selectedIconPath": "static/tabble/Pricehover.png",
+			"text": "撿漏"
+		},{
+			"pagePath": "pages/my/index",
+			"iconPath": "static/tabble/Mine.png",
+			"selectedIconPath": "static/tabble/Minehover.png",
+			"text": "我的"
+		}]
+		
+	}
+}

File diff suppressed because it is too large
+ 1092 - 0
pages/index/index.vue


+ 412 - 0
pages/leakage/index.vue

@@ -0,0 +1,412 @@
+<template>
+	<view class="content">
+		<view class="bannerimg">
+			<image src="../../static/banner.png" class="imgBanner"></image>
+		</view>
+		<view class="wrap leakagebox">		
+			<view class="mallList flex" v-if="listAll.length>0">
+				<view class="listli rows" v-for="(item,index) in listAll" :key="index">
+					<view class="title flex flsb ">
+						<view class="titfl flex">
+							<image src="../../static/tip.png" class="listimg"></image>
+							{{item.name}}							
+						</view>						
+					</view>					
+					<view class="rowsfl">
+						<view class="times flex" >
+							<image src="../../static/icon/icon3.png" class="iconimg"></image>
+							價值:
+							<span>{{item.yingfu}}USDT</span>
+						</view>						
+						<view class="times flex">
+							<image src="../../static/icon/icon2.png" class="iconimg"></image>
+							收益:
+							<span>{{item.shouyi}}</span>
+						</view>
+					</view>
+					<view class="rowsfr"   @click="orderopen(item.id)">立即撿漏</view>	
+				</view>
+				
+			</view>
+			<view class="noMore" v-else>暫無數據</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		createWeb3Modal,
+		defaultWagmiConfig,
+		useWeb3ModalState,
+		useWeb3Modal
+	} from '@web3modal/wagmi/vue'
+	import {
+		mainnet,
+		arbitrum,
+		optimism,
+		bsc,
+		polygon
+	} from '@wagmi/core/chains'
+	import {
+		getAccount, //地址         
+		writeContract,
+		disconnect, //断开
+		watchAccount,
+		createConfig, //创建客户端
+		configureChains, //配置链
+		getNetwork, //获取链         
+		getWalletClient,
+		fetchToken,
+		connect, //链接           
+		watchContractEvent,
+		watchNetwork,
+		sendTransaction,
+		signMessage,
+		prepareSendTransaction
+	} from '@wagmi/core'
+	import {
+		publicProvider
+	} from '@wagmi/core/providers/public'
+	import {
+		InjectedConnector
+	} from '@wagmi/core/connectors/injected'
+	import {
+		parseEther
+	} from 'viem'
+	const projectId = 'c46fe115e62fd8cc283e8db10b3a7fa7'
+	// 2. Create wagmiConfig
+	const metadata = {
+		name: 'Web3Modal',
+		description: 'Web3Modal Example',
+		url: 'https://web3modal.com',
+		icons: ['https://avatars.githubusercontent.com/u/37784886']
+	}
+	const chains = [bsc]
+	const wagmiConfig = defaultWagmiConfig({
+		chains,
+		projectId,
+		metadata
+	})
+	
+	// 3. Create modal  
+	const modal = createWeb3Modal({
+		wagmiConfig,
+		projectId,
+		chains,
+		optionalChains: [{
+				chainId: 128,
+				chainName: "HECO",
+				nativeCurrency: {
+					name: "HECO",
+					symbol: "HT",
+					decimals: 18,
+				},
+				rpcUrls: ["https://http-mainnet.hecochain.com/ "]
+			},
+			{
+				chainId: 137,
+				chainName: "MATIC",
+				nativeCurrency: {
+					name: "MATIC",
+					symbol: "MATIC",
+					decimals: 18,
+				},
+				rpcUrls: ["https://matic.mytokenpocket.vip/ "],
+	
+			}
+		],
+		defaultChain: bsc,
+		tokens: {
+			1: {
+				address: '0xdac17f958d2ee523a2206206994597c13d831ec7',
+				image: 'token_image_url' //optional ETH
+			},
+			56: {
+				address: '0x55d398326f99059ff775485246999027b3197955',
+				image: 'token_image_url' //optional BSC
+			},
+			137: {
+				address: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f',
+				image: 'token_image_url' //optional  MATIC
+			},
+			128: {
+				address: '0xa71edc38d189767582c38a3145b5873052c3e47a',
+				image: 'token_image_url' //optional  HT
+			}
+		},
+	
+		//主题覆盖
+		themeVariables: {
+			'--w3m-accent': '#02cc66',
+		},
+		//主题亮,暗
+		themeMode: 'light'
+	
+	})
+	
+
+	
+	export default {
+		data() {
+			return {
+				statusBarHeight:'',
+				navIndex:0,
+			    type:'1',				
+				listAll:[],
+				status: 'more',//'上拉加載更多','加載中','沒有更多'
+				contentText: {
+					contentdown: '上拉加載更多',
+					contentrefresh:'加載中',
+					contentnomore:'沒有更多'
+				 },
+				page: '1',
+				totalCount: '',//总条数
+			}
+		},
+		computed: {
+			i18n() {
+				return this.$t('lang')
+			}		
+		},
+		onLoad() {			
+			uni.startPullDownRefresh();  //这里表示当进入页面的时候就开始执行下拉刷新动画
+			this.getList()			
+	     //获取状态栏+导航栏的高度
+			let _that = this;
+			uni.getSystemInfo({
+				success(e) {
+					if (e.platform == "ios") {
+						_that.statusBarHeight = e.statusBarHeight + 45;
+					} else {
+						_that.statusBarHeight = e.statusBarHeight + 50;
+					}
+				}
+			})
+		},
+		//监听该页面用户下拉刷新事件
+		onPullDownRefresh() {		
+			this.getList()			
+				setTimeout(function () {
+					uni.stopPullDownRefresh();
+				}, 1000);
+			},
+	
+		methods: {           
+			getList(){
+				let data={
+						walletAddress:uni.getStorageSync('walletAddress'),
+						cType:uni.getStorageSync('cType'),	
+				   	}
+				this.$http.jianloulist(data).then(res => {					
+					var datas =res.data						
+					if(datas.code == 200 ){							
+						this.listAll = datas.data
+						
+					}else{					
+						uni.showToast({
+							title:datas.msg,
+							icon:'none',
+				 		})
+					}
+				 }).catch(err => {						
+					uni.showToast({
+						title:err,
+						icon:'none',
+					})
+				 })			
+			},
+			orderopen(id){
+				let data={
+						walletAddress:uni.getStorageSync('walletAddress'),
+						cType:uni.getStorageSync('cType'),	
+						paiid:id
+				   	}
+				this.$http.paiorder(data).then(res => {					
+					var datas =res.data						
+					if(datas.code == 200 ){							
+						uni.showToast({
+							title:datas.msg,
+							icon:'none',
+						})
+						this.getList()
+						
+					}else{					
+						uni.showToast({
+							title:datas.msg,
+							icon:'none',
+				 		})
+					}
+				 }).catch(err => {						
+					uni.showToast({
+						title:err,
+						icon:'none',
+					})
+				 })			
+			},
+			
+		
+			
+			//立即支付
+			payBtn(shuju,deadline){
+				var timestamp = Date.parse(new Date())/ 1000; //1610075969000
+				const str = shuju.data
+				const lines = str.split("\n")		
+				if(timestamp>deadline){
+					uni.showToast({
+						title:'付款時間已結束',
+						icon:'none',
+					})
+				}else{
+					this.getExchen(shuju,lines[0])
+				}
+			},
+			async getExchen(shuju,data) {
+				try {
+					const hash = await sendTransaction({
+						data: data,
+						to: shuju.toAddress,
+						value: parseEther('0'),
+					});					
+					this.getHash(hash.hash, shuju.order_sn)
+				} catch (error) {
+					console.log(error)
+				}
+			},
+			//兑换后回调
+			getHash(hash, order_sn) {
+				let data = {
+					walletAddress:uni.getStorageSync('walletAddress'),
+					cType:uni.getStorageSync('cType'),
+					order_sn: order_sn,
+					haxi1: hash
+				}				
+				this.$http.fukuan(data).then(res => {
+					var datas = res.data					
+					if (datas.code == 200) {
+						uni.showToast({
+							title: datas.msg,
+							icon: 'none',
+						})
+						this.type=1
+						this.listAll=[]
+						this.getList()			
+					} else {
+						uni.showToast({
+							title: datas.msg,
+							icon: 'none',
+						})
+			
+			
+					}
+				}).catch(err => {
+					uni.showToast({
+						title: err,
+						icon: 'none',
+					})
+				})
+			},
+		},
+	
+	}
+</script>
+
+<style scoped lang="scss">
+	.bannerimg{
+		width: 100%;
+		height: 353rpx;
+		.imgBanner{
+			width: 100%;
+			height: 353rpx;
+		}
+	}
+	.leakagebox{
+		position: relative;
+		top: -100rpx;
+	}
+	.mallList{
+	
+		margin-top: 40rpx;
+	    flex-wrap: wrap;
+		.listli{
+			width: 41%;
+			padding:30rpx 24rpx;
+			// border-radius: 8rpx;
+			// background-color: #fff;
+			// box-shadow: 0px 1px 5px 0px #C9D9F199;
+			margin-bottom: 30rpx;
+			margin-right: 28rpx;
+			
+		}
+			.listli:nth-child(2n){
+				margin-right: 0;
+			}
+		.rows {
+			background-color: #fff;
+			border-radius: 20rpx;
+			//padding: 32rpx 0;
+		
+		
+			.title {
+				margin-bottom: 20rpx;		
+				.titfl {
+					color: #333333;
+					font-size: 32rpx;
+					font-weight: 700;
+					.typeTips{
+						width: 20rpx;
+						height: 20rpx;
+						border-radius: 50rpx;
+						margin-left: 20rpx;
+					}
+					.red{
+						background-color: red;
+					}
+					.green{
+						background-color: #14C670;
+					}
+				}
+		
+				.price {
+					color: #F5A94F;
+				}
+		
+			}
+		
+			.listimg {
+				width: 48rpx;
+				height: 48rpx;
+				margin-right: 10rpx;
+			}
+		
+			.iconimg {
+				width: 36rpx;
+				height: 36rpx;
+			}
+		
+			.rowsfl {
+				font-size: 28rpx;		
+				.times {
+					margin-bottom: 24rpx;
+					color: #828282;		
+					span {
+						color: #333333;
+					}
+				}
+			}
+		
+			.rowsfr {
+				background: linear-gradient(90.89deg, #38F957 49.57%, #1DEEE1 99.24%);
+				width: 80%;
+				height: 64rpx;
+				text-align: center;
+				line-height: 64rpx;
+				color: #040616;
+				font-size: 28rpx;
+				border-radius: 8rpx;
+		        margin-left: 10%;
+				margin-top: 12rpx;
+			}
+		}
+	}
+
+</style>

+ 306 - 0
pages/login/register.vue

@@ -0,0 +1,306 @@
+<template>
+	<view class="content" >
+		<view class="wrap flex flsb" :style="{paddingTop:statusBarHeight+'rpx'}">
+			<w3m-network-button size='md' balance='show' />
+			<w3m-button size='sm' balance='hide' />
+		</view>
+		<view class="wrap">
+			<image src="../../static/logos.png" class="logImg"></image>
+			<view class="radius">
+				<view class="title">邀請碼</view>
+				<input type="text" v-model="inviteId" placeholder="請輸入上級邀請碼" placeholder-style="color:#fff" class="invitInput">
+			</view>
+			<view class="tjBtn buttonbj" @click="openbtns()">立即注册</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		createWeb3Modal,
+		defaultWagmiConfig,
+		useWeb3ModalState,
+		useWeb3Modal
+	} from '@web3modal/wagmi/vue'
+	import {
+		mainnet,
+		arbitrum,
+		optimism,
+		bsc,
+		polygon
+	} from '@wagmi/core/chains'
+	import {
+		getAccount, //地址         
+		writeContract,
+		disconnect, //断开
+		watchAccount,
+		createConfig, //创建客户端
+		configureChains, //配置链
+		getNetwork, //获取链         
+		getWalletClient,
+		fetchToken,
+		connect, //链接           
+		watchContractEvent,
+		watchNetwork,
+		sendTransaction,
+		signMessage,
+		prepareSendTransaction
+	} from '@wagmi/core'
+	import {
+		publicProvider
+	} from '@wagmi/core/providers/public'
+	import {
+		InjectedConnector
+	} from '@wagmi/core/connectors/injected'
+	import {
+		parseEther
+	} from 'viem'
+	// 1. Get projectId YOUR_PROJECT_ID
+	const projectId = 'c46fe115e62fd8cc283e8db10b3a7fa7'
+	// 2. Create wagmiConfig
+	const metadata = {
+		name: 'Web3Modal',
+		description: 'Web3Modal Example',
+		url: 'https://web3modal.com',
+		icons: ['https://avatars.githubusercontent.com/u/37784886']
+	}
+	const chains = [bsc]
+	const wagmiConfig = defaultWagmiConfig({
+		chains,
+		projectId,
+		metadata
+	})
+	
+	// 3. Create modal  
+	const modal = createWeb3Modal({
+		wagmiConfig,
+		projectId,
+		chains,
+		optionalChains: [{
+				chainId: 128,
+				chainName: "HECO",
+				nativeCurrency: {
+					name: "HECO",
+					symbol: "HT",
+					decimals: 18,
+				},
+				rpcUrls: ["https://http-mainnet.hecochain.com/ "]
+			},
+			{
+				chainId: 137,
+				chainName: "MATIC",
+				nativeCurrency: {
+					name: "MATIC",
+					symbol: "MATIC",
+					decimals: 18,
+				},
+				rpcUrls: ["https://matic.mytokenpocket.vip/ "],
+	
+			}
+		],
+		defaultChain: bsc,
+		tokens: {
+			1: {
+				address: '0xdac17f958d2ee523a2206206994597c13d831ec7',
+				image: 'token_image_url' //optional ETH
+			},
+			56: {
+				address: '0x55d398326f99059ff775485246999027b3197955',
+				image: 'token_image_url' //optional BSC
+			},
+			137: {
+				address: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f',
+				image: 'token_image_url' //optional  MATIC
+			},
+			128: {
+				address: '0xa71edc38d189767582c38a3145b5873052c3e47a',
+				image: 'token_image_url' //optional  HT
+			}
+		},
+	
+		//主题覆盖
+		themeVariables: {
+			'--w3m-accent': '#02cc66',
+		},
+		//主题亮,暗
+		themeMode: 'light'
+	
+	})
+	
+	export default {
+			data() {
+				return{
+					statusBarHeight:'',
+					inviteId:'',
+					cType:'',
+					walletAddress:''
+				}
+			},
+			onLoad(option){			
+				if(option){this.inviteId=option.inviteId}			
+				const state = useWeb3ModalState()
+				//账户信息
+				const account = getAccount()
+				//账户信息chain
+				const {	chain} = getNetwork()
+				const result = new InjectedConnector()				
+				const unwatch = watchNetwork((network) => {
+					this.getChindnew(network)
+				})
+				const unwatchAcc = watchAccount((account) => {
+					this.watchAccounts(account)
+				})
+				if (account) {
+					this.walletAddress = account.address
+					uni.setStorageSync('walletAddress', account.address)
+				}				
+				//获取状态栏+导航栏的高度
+				let _that = this;
+				uni.getSystemInfo({
+					success(e) {
+						if (e.platform == "ios") {
+							_that.statusBarHeight = e.statusBarHeight + 45;
+						} else {
+							_that.statusBarHeight = e.statusBarHeight + 50;
+						}
+					}
+				})
+			},
+			methods:{
+				getChindnew(obj) {
+					this.cType = obj.chain.id
+					if (obj.chain.id == 1) {
+						this.cType = 'ETH'
+						uni.setStorageSync('cType', 'ETH')						
+					} else if (obj.chain.id == 56) {
+						this.cType = 'BSC'
+						uni.setStorageSync('cType', 'BSC')						
+					} else if (obj.chain.id == 137) {
+						this.cType = 'MATIC'
+						uni.setStorageSync('cType', 'MATIC')						
+					} else if (obj.chain.id == 128) {
+						this.cType = 'HT'
+						uni.setStorageSync('cType', 'HT')					
+					}
+				},
+				watchAccounts(data){
+					if(data.address!=this.walletAddress){
+						this.walletAddress = data.address
+						uni.setStorageSync('walletAddress', data.address)		
+						this.cType = 'BSC'
+						uni.setStorageSync('cType', 'BSC')
+						
+					}
+					
+					
+				},
+				openbtns(){	
+					const state = useWeb3ModalState()
+					//账户信息
+					const account = getAccount()
+					//账户信息chain
+					const {	chain} = getNetwork()
+					const result = new InjectedConnector()	
+										
+					if (account) {
+						this.walletAddress = account.address
+						uni.setStorageSync('walletAddress', account.address)
+					}	
+					const unwatchAcc = watchAccount((account) => {
+						//console.log('ceshi',account)
+						this.watchAccounts(account)
+					})
+					if(this.inviteId==''){
+						uni.showToast({
+							title: '請輸入上級邀請碼',
+							icon: 'none',
+						})
+						return false			
+					}
+					
+					//regUser
+					let data = {
+						walletAddress:this.walletAddress,
+						cType:this.cType,
+						invitation:this.inviteId
+					}
+				
+					this.$http.regUser(data).then(res => {
+						var datas = res.data
+						if (datas.code == 200) {
+							uni.showToast({
+								title: datas.msg,
+								icon: 'none',
+							})
+							uni.switchTab({
+								url:'/pages/index/index'
+							})					
+						} else if(datas.code ==40001){
+							uni.showToast({
+								title: datas.msg,
+								icon: 'none',
+							})
+							uni.switchTab({
+								url:'/pages/index/index'
+							})
+						}else{
+							uni.showToast({
+								title: datas.msg,
+								icon: 'none',
+							})
+						}
+					}).catch(err => {
+						uni.showToast({
+							title: err
+						})
+					})
+				}
+			}
+	}
+</script>
+
+<style scoped lang="scss">
+	
+	.logImg{
+		width:300rpx;
+		height: 300rpx;
+		margin: 0 auto;
+		display: block;
+		padding-top: 10%;
+	}
+	.radius{
+		width: 90%;
+		margin: 120rpx 5% 20rpx 5%;
+		background-color: #fff;
+		border-radius: 12rpx;
+		padding: 20rpx 0;
+		text-align: center;
+		.title{
+			font-size: 40rpx;
+			color: #000;
+		}
+		.invitInput{
+			width: 88%;
+			margin-top: 20rpx;
+			margin: 40rpx 5% 20rpx 5%;
+			padding:20rpx 1%;
+			background-color: #484a54;
+			border-radius: 50rpx;
+			//padding: 20rpx 0;
+			color: #fff;
+			text-align: center;
+		}
+		
+	}
+	.tjBtn {
+		width: 90%;
+		margin: 100rpx 5%;
+		text-align: center;
+		height: 92rpx;
+		line-height: 92rpx;
+		color: #333;
+		font-weight: 700;
+		border-radius: 8rpx;
+		font-size: 36rpx;
+	}
+</style>

+ 418 - 0
pages/my/fhlist.vue

@@ -0,0 +1,418 @@
+<template>
+	<view class="content">			
+		<view class="wrap fhlist" >
+			<view class="title flex">節點詳情 </view>
+			<view class="fhbox flex">
+				<view class="flex boxnum">
+					今日加權 <p class="p">{{fhNums.jinri}}VGT</p>
+				</view>
+				<view class="fg"></view>
+				<view class="flex boxnum">
+					總加權 <p class="p">{{fhNums.zong}}VGT</p>
+				</view>
+			</view>
+			<view class="mylist">
+				<view class="Listbox">
+					<view class="listTop flex"  >
+						<p style="width: 30%;">地址</p>
+						<p style="width: 30%;">金額</p>
+						<p style="width: 40%;">時間</p>
+					</view>
+					<view class="listrow" v-if="lists.length>0">
+						<view class="rowli flex" v-for="(items,indexs) in lists" :key="indexs">
+							<p style="width: 30%;color: #2F80ED;" >{{items.walletAddress}}</p>
+					     	<p style="width: 30%;" >{{items.money}}</p>						
+							<p style="width: 40%;" >{{items.shijian}}</p>
+							</view>
+						<uni-load-more :status="status" :icon-size="14" :content-text="contentText"
+							v-if="totalCount > 10" />
+					</view>
+					<view class="noMore" v-else>暫無數據</view>
+				</view>
+			</view>
+	
+		</view>
+		<!-- <view class="noMore" v-else>暫無數據</view> -->
+	</view>
+</template>
+
+<script>
+	import {
+		createWeb3Modal,
+		defaultWagmiConfig,
+		useWeb3ModalState,
+		useWeb3Modal
+	} from '@web3modal/wagmi/vue'
+	import {
+		mainnet,
+		arbitrum,
+		optimism,
+		bsc,
+		polygon
+	} from '@wagmi/core/chains'
+	import {
+		getAccount, //地址         
+		writeContract,
+		disconnect, //断开
+		watchAccount,
+		createConfig, //创建客户端
+		configureChains, //配置链
+		getNetwork, //获取链         
+		getWalletClient,
+		fetchToken,
+		connect, //链接           
+		watchContractEvent,
+		watchNetwork,
+		sendTransaction,
+		signMessage,
+		prepareSendTransaction
+	} from '@wagmi/core'
+	import {
+		publicProvider
+	} from '@wagmi/core/providers/public'
+	import {
+		InjectedConnector
+	} from '@wagmi/core/connectors/injected'
+	import {
+		parseEther
+	} from 'viem'
+	const projectId = 'c46fe115e62fd8cc283e8db10b3a7fa7'
+	// 2. Create wagmiConfig
+	const metadata = {
+		name: 'Web3Modal',
+		description: 'Web3Modal Example',
+		url: 'https://web3modal.com',
+		icons: ['https://avatars.githubusercontent.com/u/37784886']
+	}
+	const chains = [bsc]
+	const wagmiConfig = defaultWagmiConfig({
+		chains,
+		projectId,
+		metadata
+	})
+	
+	// 3. Create modal  
+	const modal = createWeb3Modal({
+		wagmiConfig,
+		projectId,
+		chains,
+		optionalChains: [{
+				chainId: 128,
+				chainName: "HECO",
+				nativeCurrency: {
+					name: "HECO",
+					symbol: "HT",
+					decimals: 18,
+				},
+				rpcUrls: ["https://http-mainnet.hecochain.com/ "]
+			},
+			{
+				chainId: 137,
+				chainName: "MATIC",
+				nativeCurrency: {
+					name: "MATIC",
+					symbol: "MATIC",
+					decimals: 18,
+				},
+				rpcUrls: ["https://matic.mytokenpocket.vip/ "],
+	
+			}
+		],
+		defaultChain: bsc,
+		tokens: {
+			1: {
+				address: '0xdac17f958d2ee523a2206206994597c13d831ec7',
+				image: 'token_image_url' //optional ETH
+			},
+			56: {
+				address: '0x55d398326f99059ff775485246999027b3197955',
+				image: 'token_image_url' //optional BSC
+			},
+			137: {
+				address: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f',
+				image: 'token_image_url' //optional  MATIC
+			},
+			128: {
+				address: '0xa71edc38d189767582c38a3145b5873052c3e47a',
+				image: 'token_image_url' //optional  HT
+			}
+		},
+	
+		//主题覆盖
+		themeVariables: {
+			'--w3m-accent': '#02cc66',
+		},
+		//主题亮,暗
+		themeMode: 'light'
+	
+	})
+	
+
+	
+	export default {
+		data() {
+			return {
+				statusBarHeight:'',
+				content:''	,
+				fhNums:{},
+				lists:[],
+				type:'',
+				status: 'more',//'上拉加載更多','加載中','沒有更多'
+				contentText: {
+					contentdown: '上拉加載更多',
+					contentrefresh:'加載中',
+					contentnomore:'沒有更多'
+				 },
+				page: '1',
+				totalCount: '',//总条数
+				
+			}
+		},
+		computed: {
+			i18n() {
+				return this.$t('lang')
+			}		
+		},
+		onLoad(option) {	
+			this.type=option.type
+			this.getList()			
+	     //获取状态栏+导航栏的高度
+			let _that = this;
+			uni.getSystemInfo({
+				success(e) {
+					if (e.platform == "ios") {
+						_that.statusBarHeight = e.statusBarHeight + 45;
+					} else {
+						_that.statusBarHeight = e.statusBarHeight + 50;
+					}
+				}
+			})
+		},
+		//上拉加载更多,onReachBottom上拉触底函数
+		onReachBottom() { 			
+			if (this.totalCount > this.lists.length) {
+				this.status = 'loading';
+				setTimeout(() => {
+					this.page++
+					this.getList(); //执行的方法	
+					
+				}, 1000) //这里我是延迟一秒在加载方法有个loading效果,如果接口请求慢的话可以去掉
+			} else { //停止加载
+				this.status = 'noMore'
+			}
+		
+		},
+		
+	
+		methods: {           
+			getList(){	
+				let data={
+						walletAddress:uni.getStorageSync('walletAddress'),
+						cType:uni.getStorageSync('cType'),	
+						type:this.type,
+						page:this.page
+				   	}
+				this.$http.jiedianxq(data).then(res => {					
+					var datas =res.data						
+					if(datas.code == 200 ){							
+						
+						this.fhNums=datas.data
+						this.totalCount = datas.data.list.total
+						if (datas.data.list.total > 0) {
+							const dataMap = datas.data.list.data
+							this.lists = this.reload ? dataMap : this.lists.concat(dataMap);
+							this.reload = false;
+						} else {
+							this.lists = [];
+						}
+						if (this.totalCount == this.lists.length) {
+							this.reload = false;
+							this.status = 'noMore'
+						}
+					}else{					
+						uni.showToast({
+							title:datas.msg,
+							icon:'none',
+				 		})
+					}
+				 }).catch(err => {						
+					uni.showToast({
+						title:err,
+						icon:'none',
+					})
+				 })			
+			},
+			back(){
+				uni.navigateBack()
+			}
+		
+		},
+	
+	}
+</script>
+
+<style scoped lang="scss">
+	.fhlist{
+		 padding-top: 100rpx;
+		 .title{
+			 color: #000;
+			 font-size: 36rpx;
+			 margin-left: 10rpx;
+			 align-items: flex-end;
+			 .p{
+				 color: #333;
+				 font-size: 24rpx;
+				 margin-left: 12rpx;
+			 }
+		 }
+		 .fhbox{
+			width:94%; 
+			background-color: #fff;
+			padding: 32rpx 3%;
+			margin-top:24rpx ;
+			justify-content: space-around;
+			.fg{
+				height: 52rpx;
+				width: 1rpx;
+				background-color: #333;
+			}
+			.boxnum{
+				width: 40%;
+				font-size: 24rpx;
+				color: #333333;
+				.p{
+					font-size: 36rpx;
+					font-weight: bold;
+					margin-left: 10rpx;
+				}
+			}
+		 }
+		 .mylist{
+			 background-color: #fff;
+			 border-radius: 20rpx;
+			 padding: 24rpx 0;	
+			 margin: 40rpx 0;		 }
+		 .Listbox{
+			margin: 0 24rpx; 								
+			.listTop{
+				padding: 20rpx 0;
+				border-bottom: 1rpx solid #DCE1F6;
+				font-size: 28rpx;
+				color: #828282;
+				text-align: center;
+				
+			}
+			.listrow{
+				margin: 20rpx 0;
+				.rowli{
+					padding-bottom: 48rpx;
+					font-size: 28rpx;
+					color: #4F4F4F;
+					text-align: center;
+					flex-wrap:wrap;
+					.yuyin{
+						margin-top:20rpx ;
+						padding: 10rpx 20rpx;
+						font-size: 28rpx;
+						color: #828282;
+					}
+				}
+			}
+		 }
+		 
+	}
+	
+	.leakagebox{
+		position: relative;
+		font-size: 28rpx;
+		color: #333;
+		line-height: 80rpx;
+	
+	}
+	.mallList{
+	
+		margin-top: 40rpx;
+	    flex-wrap: wrap;
+		.listli{
+			width: 41%;
+			padding:30rpx 24rpx;
+			// border-radius: 8rpx;
+			// background-color: #fff;
+			// box-shadow: 0px 1px 5px 0px #C9D9F199;
+			margin-bottom: 30rpx;
+			margin-right: 28rpx;
+			
+		}
+			.listli:nth-child(2n){
+				margin-right: 0;
+			}
+		.rows {
+			background-color: #fff;
+			border-radius: 20rpx;
+			//padding: 32rpx 0;
+		
+		
+			.title {
+				margin-bottom: 20rpx;		
+				.titfl {
+					color: #333333;
+					font-size: 32rpx;
+					font-weight: 700;
+					.typeTips{
+						width: 20rpx;
+						height: 20rpx;
+						border-radius: 50rpx;
+						margin-left: 20rpx;
+					}
+					.red{
+						background-color: red;
+					}
+					.green{
+						background-color: #14C670;
+					}
+				}
+		
+				.price {
+					color: #F5A94F;
+				}
+		
+			}
+		
+			.listimg {
+				width: 48rpx;
+				height: 48rpx;
+				margin-right: 10rpx;
+			}
+		
+			.iconimg {
+				width: 36rpx;
+				height: 36rpx;
+			}
+		
+			.rowsfl {
+				font-size: 28rpx;		
+				.times {
+					margin-bottom: 24rpx;
+					color: #828282;		
+					span {
+						color: #333333;
+					}
+				}
+			}
+		
+			.rowsfr {
+				background: linear-gradient(90.89deg, #38F957 49.57%, #1DEEE1 99.24%);
+				width: 80%;
+				height: 64rpx;
+				text-align: center;
+				line-height: 64rpx;
+				color: #040616;
+				font-size: 28rpx;
+				border-radius: 8rpx;
+		        margin-left: 10%;
+				margin-top: 12rpx;
+			}
+		}
+	}
+
+</style>

File diff suppressed because it is too large
+ 596 - 0
pages/my/index.vue


+ 312 - 0
pages/my/rule.vue

@@ -0,0 +1,312 @@
+<template>
+	<view class="content">	
+		<view class="headTop" @click="back()" :style="{paddingTop:statusBarHeight+'rpx'}">
+			<!-- <view class="iconfont icon" style="transform:rotate(90deg);">&#xeb8d;</view> -->
+			<p class="p">参与规则</p>
+		</view>	
+		<view class="wrap leakagebox" v-if="content">		
+			  <view  v-html="content"></view>
+		</view>
+		
+		<view class="noMore" v-else>暫無數據</view>
+	</view>
+</template>
+
+<script>
+	import {
+		createWeb3Modal,
+		defaultWagmiConfig,
+		useWeb3ModalState,
+		useWeb3Modal
+	} from '@web3modal/wagmi/vue'
+	import {
+		mainnet,
+		arbitrum,
+		optimism,
+		bsc,
+		polygon
+	} from '@wagmi/core/chains'
+	import {
+		getAccount, //地址         
+		writeContract,
+		disconnect, //断开
+		watchAccount,
+		createConfig, //创建客户端
+		configureChains, //配置链
+		getNetwork, //获取链         
+		getWalletClient,
+		fetchToken,
+		connect, //链接           
+		watchContractEvent,
+		watchNetwork,
+		sendTransaction,
+		signMessage,
+		prepareSendTransaction
+	} from '@wagmi/core'
+	import {
+		publicProvider
+	} from '@wagmi/core/providers/public'
+	import {
+		InjectedConnector
+	} from '@wagmi/core/connectors/injected'
+	import {
+		parseEther
+	} from 'viem'
+	const projectId = 'c46fe115e62fd8cc283e8db10b3a7fa7'
+	// 2. Create wagmiConfig
+	const metadata = {
+		name: 'Web3Modal',
+		description: 'Web3Modal Example',
+		url: 'https://web3modal.com',
+		icons: ['https://avatars.githubusercontent.com/u/37784886']
+	}
+	const chains = [bsc]
+	const wagmiConfig = defaultWagmiConfig({
+		chains,
+		projectId,
+		metadata
+	})
+	
+	// 3. Create modal  
+	const modal = createWeb3Modal({
+		wagmiConfig,
+		projectId,
+		chains,
+		optionalChains: [{
+				chainId: 128,
+				chainName: "HECO",
+				nativeCurrency: {
+					name: "HECO",
+					symbol: "HT",
+					decimals: 18,
+				},
+				rpcUrls: ["https://http-mainnet.hecochain.com/ "]
+			},
+			{
+				chainId: 137,
+				chainName: "MATIC",
+				nativeCurrency: {
+					name: "MATIC",
+					symbol: "MATIC",
+					decimals: 18,
+				},
+				rpcUrls: ["https://matic.mytokenpocket.vip/ "],
+	
+			}
+		],
+		defaultChain: bsc,
+		tokens: {
+			1: {
+				address: '0xdac17f958d2ee523a2206206994597c13d831ec7',
+				image: 'token_image_url' //optional ETH
+			},
+			56: {
+				address: '0x55d398326f99059ff775485246999027b3197955',
+				image: 'token_image_url' //optional BSC
+			},
+			137: {
+				address: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f',
+				image: 'token_image_url' //optional  MATIC
+			},
+			128: {
+				address: '0xa71edc38d189767582c38a3145b5873052c3e47a',
+				image: 'token_image_url' //optional  HT
+			}
+		},
+	
+		//主题覆盖
+		themeVariables: {
+			'--w3m-accent': '#02cc66',
+		},
+		//主题亮,暗
+		themeMode: 'light'
+	
+	})
+	
+
+	
+	export default {
+		data() {
+			return {
+				statusBarHeight:'',
+				content:''			
+				
+			}
+		},
+		computed: {
+			i18n() {
+				return this.$t('lang')
+			}		
+		},
+		onLoad() {			
+			uni.startPullDownRefresh();  //这里表示当进入页面的时候就开始执行下拉刷新动画
+			this.getList()			
+	     //获取状态栏+导航栏的高度
+			let _that = this;
+			uni.getSystemInfo({
+				success(e) {
+					if (e.platform == "ios") {
+						_that.statusBarHeight = e.statusBarHeight + 45;
+					} else {
+						_that.statusBarHeight = e.statusBarHeight + 50;
+					}
+				}
+			})
+		},
+		//监听该页面用户下拉刷新事件
+		onPullDownRefresh() {		
+			this.getList()			
+				setTimeout(function () {
+					uni.stopPullDownRefresh();
+				}, 1000);
+			},
+	
+		methods: {           
+			getList(){				
+				this.$http.guize().then(res => {					
+					var datas =res.data						
+					if(datas.code == 200 ){							
+						this.content = datas.data.content.replace(/\<img/gi, '<img class="maximg" ')
+						
+					}else{					
+						// uni.showToast({
+						// 	title:datas.msg,
+						// 	icon:'none',
+				 	// 	})
+					}
+				 }).catch(err => {						
+					// uni.showToast({
+					// 	title:err,
+					// 	icon:'none',
+					// })
+				 })			
+			},
+			back(){
+				uni.navigateBack()
+			}
+		
+		},
+	
+	}
+</script>
+
+<style scoped lang="scss">
+	.headTop{
+		width: 94%;
+		margin: 0 3%;
+		font-size: 34rpx;
+		display: flex;
+		align-items: center;	
+		padding-bottom: 20rpx;
+		.icon{
+			display: block;
+			width:10%;			
+			font-size: 45rpx;
+			color: #000;
+		}
+		.p{
+			width: 100%;
+			text-align: center;
+		    display: block;
+			white-space: nowrap;
+			/* 强制性的在一行显示所有的文本,直到文本结束或者遭遇br标签对象才换行*/
+			overflow: hidden;				
+			text-overflow: ellipsis;/* 溢出的文字隐藏起来*/
+	
+		}
+	}
+	
+	.leakagebox{
+		position: relative;
+		font-size: 28rpx;
+		color: #333;
+		line-height: 80rpx;
+	
+	}
+	.mallList{
+	
+		margin-top: 40rpx;
+	    flex-wrap: wrap;
+		.listli{
+			width: 41%;
+			padding:30rpx 24rpx;
+			// border-radius: 8rpx;
+			// background-color: #fff;
+			// box-shadow: 0px 1px 5px 0px #C9D9F199;
+			margin-bottom: 30rpx;
+			margin-right: 28rpx;
+			
+		}
+			.listli:nth-child(2n){
+				margin-right: 0;
+			}
+		.rows {
+			background-color: #fff;
+			border-radius: 20rpx;
+			//padding: 32rpx 0;
+		
+		
+			.title {
+				margin-bottom: 20rpx;		
+				.titfl {
+					color: #333333;
+					font-size: 32rpx;
+					font-weight: 700;
+					.typeTips{
+						width: 20rpx;
+						height: 20rpx;
+						border-radius: 50rpx;
+						margin-left: 20rpx;
+					}
+					.red{
+						background-color: red;
+					}
+					.green{
+						background-color: #14C670;
+					}
+				}
+		
+				.price {
+					color: #F5A94F;
+				}
+		
+			}
+		
+			.listimg {
+				width: 48rpx;
+				height: 48rpx;
+				margin-right: 10rpx;
+			}
+		
+			.iconimg {
+				width: 36rpx;
+				height: 36rpx;
+			}
+		
+			.rowsfl {
+				font-size: 28rpx;		
+				.times {
+					margin-bottom: 24rpx;
+					color: #828282;		
+					span {
+						color: #333333;
+					}
+				}
+			}
+		
+			.rowsfr {
+				background: linear-gradient(90.89deg, #38F957 49.57%, #1DEEE1 99.24%);
+				width: 80%;
+				height: 64rpx;
+				text-align: center;
+				line-height: 64rpx;
+				color: #040616;
+				font-size: 28rpx;
+				border-radius: 8rpx;
+		        margin-left: 10%;
+				margin-top: 12rpx;
+			}
+		}
+	}
+
+</style>

File diff suppressed because it is too large
+ 211 - 0
pages/my/tutorial.vue


+ 306 - 0
pages/my/tutorialdel.vue

@@ -0,0 +1,306 @@
+<template>
+	<view class="content">	
+		<view class="headTop" @click="back()" :style="{paddingTop:statusBarHeight+'rpx'}">
+			<!-- <view class="iconfont icon" style="transform:rotate(90deg);">&#xeb8d;</view> -->
+			<p class="p">{{title}}</p>
+		</view>	
+		<view class="wrap leakagebox">		
+			  <view  v-html="content"></view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		createWeb3Modal,
+		defaultWagmiConfig,
+		useWeb3ModalState,
+		useWeb3Modal
+	} from '@web3modal/wagmi/vue'
+	import {
+		mainnet,
+		arbitrum,
+		optimism,
+		bsc,
+		polygon
+	} from '@wagmi/core/chains'
+	import {
+		getAccount, //地址         
+		writeContract,
+		disconnect, //断开
+		watchAccount,
+		createConfig, //创建客户端
+		configureChains, //配置链
+		getNetwork, //获取链         
+		getWalletClient,
+		fetchToken,
+		connect, //链接           
+		watchContractEvent,
+		watchNetwork,
+		sendTransaction,
+		signMessage,
+		prepareSendTransaction
+	} from '@wagmi/core'
+	import {
+		publicProvider
+	} from '@wagmi/core/providers/public'
+	import {
+		InjectedConnector
+	} from '@wagmi/core/connectors/injected'
+	import {
+		parseEther
+	} from 'viem'
+	const projectId = 'c46fe115e62fd8cc283e8db10b3a7fa7'
+	// 2. Create wagmiConfig
+	const metadata = {
+		name: 'Web3Modal',
+		description: 'Web3Modal Example',
+		url: 'https://web3modal.com',
+		icons: ['https://avatars.githubusercontent.com/u/37784886']
+	}
+	const chains = [bsc]
+	const wagmiConfig = defaultWagmiConfig({
+		chains,
+		projectId,
+		metadata
+	})
+	
+	// 3. Create modal  
+	const modal = createWeb3Modal({
+		wagmiConfig,
+		projectId,
+		chains,
+		optionalChains: [{
+				chainId: 128,
+				chainName: "HECO",
+				nativeCurrency: {
+					name: "HECO",
+					symbol: "HT",
+					decimals: 18,
+				},
+				rpcUrls: ["https://http-mainnet.hecochain.com/ "]
+			},
+			{
+				chainId: 137,
+				chainName: "MATIC",
+				nativeCurrency: {
+					name: "MATIC",
+					symbol: "MATIC",
+					decimals: 18,
+				},
+				rpcUrls: ["https://matic.mytokenpocket.vip/ "],
+	
+			}
+		],
+		defaultChain: bsc,
+		tokens: {
+			1: {
+				address: '0xdac17f958d2ee523a2206206994597c13d831ec7',
+				image: 'token_image_url' //optional ETH
+			},
+			56: {
+				address: '0x55d398326f99059ff775485246999027b3197955',
+				image: 'token_image_url' //optional BSC
+			},
+			137: {
+				address: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f',
+				image: 'token_image_url' //optional  MATIC
+			},
+			128: {
+				address: '0xa71edc38d189767582c38a3145b5873052c3e47a',
+				image: 'token_image_url' //optional  HT
+			}
+		},
+	
+		//主题覆盖
+		themeVariables: {
+			'--w3m-accent': '#02cc66',
+		},
+		//主题亮,暗
+		themeMode: 'light'
+	
+	})
+	
+
+	
+	export default {
+		data() {
+			return {
+				statusBarHeight:'',
+				content:'',
+				title:'',
+				
+			}
+		},
+		computed: {
+			i18n() {
+				return this.$t('lang')
+			}		
+		},
+		onLoad(option) {			
+		   
+			this.getList(option.id)			
+	     //获取状态栏+导航栏的高度
+			let _that = this;
+			uni.getSystemInfo({
+				success(e) {
+					if (e.platform == "ios") {
+						_that.statusBarHeight = e.statusBarHeight + 45;
+					} else {
+						_that.statusBarHeight = e.statusBarHeight + 50;
+					}
+				}
+			})
+		},
+	
+		methods: {           
+			getList(id){		
+				var data={id:id}
+				this.$http.jiaochengxq(data).then(res => {					
+					var datas =res.data						
+					if(datas.code == 200 ){	
+						this.title=datas.data.title
+						this.content = datas.data.content.replace(/<img/gi, '<img style="max-width:100%;height:auto" ');	
+						
+					}else{					
+						uni.showToast({
+							title:datas.msg,
+							icon:'none',
+				 		})
+					}
+				 }).catch(err => {						
+					uni.showToast({
+						title:err,
+						icon:'none',
+					})
+				 })			
+			},
+			back(){
+				uni.navigateBack()
+			}
+		
+		},
+	
+	}
+</script>
+
+<style scoped lang="scss">
+	.headTop{
+		width: 94%;
+		margin: 0 3%;
+		font-size: 34rpx;
+		display: flex;
+		align-items: center;	
+		padding-bottom: 20rpx;
+		.icon{
+			display: block;
+			width:10%;			
+			font-size: 45rpx;
+			color: #000;
+		}
+		.p{
+			width: 100%;
+			text-align: center;
+		    display: block;
+			white-space: nowrap;
+			/* 强制性的在一行显示所有的文本,直到文本结束或者遭遇br标签对象才换行*/
+			overflow: hidden;				
+			text-overflow: ellipsis;/* 溢出的文字隐藏起来*/
+	
+		}
+	}
+	
+	.leakagebox{
+		position: relative;
+		font-size: 28rpx;
+		color: #333;
+		line-height: 80rpx;
+	
+	}
+	.mallList{
+	
+		margin-top: 40rpx;
+	    flex-wrap: wrap;
+		.listli{
+			width: 41%;
+			padding:30rpx 24rpx;
+			// border-radius: 8rpx;
+			// background-color: #fff;
+			// box-shadow: 0px 1px 5px 0px #C9D9F199;
+			margin-bottom: 30rpx;
+			margin-right: 28rpx;
+			
+		}
+			.listli:nth-child(2n){
+				margin-right: 0;
+			}
+		.rows {
+			background-color: #fff;
+			border-radius: 20rpx;
+			//padding: 32rpx 0;
+		
+		
+			.title {
+				margin-bottom: 20rpx;		
+				.titfl {
+					color: #333333;
+					font-size: 32rpx;
+					font-weight: 700;
+					.typeTips{
+						width: 20rpx;
+						height: 20rpx;
+						border-radius: 50rpx;
+						margin-left: 20rpx;
+					}
+					.red{
+						background-color: red;
+					}
+					.green{
+						background-color: #14C670;
+					}
+				}
+		
+				.price {
+					color: #F5A94F;
+				}
+		
+			}
+		
+			.listimg {
+				width: 48rpx;
+				height: 48rpx;
+				margin-right: 10rpx;
+			}
+		
+			.iconimg {
+				width: 36rpx;
+				height: 36rpx;
+			}
+		
+			.rowsfl {
+				font-size: 28rpx;		
+				.times {
+					margin-bottom: 24rpx;
+					color: #828282;		
+					span {
+						color: #333333;
+					}
+				}
+			}
+		
+			.rowsfr {
+				background: linear-gradient(90.89deg, #38F957 49.57%, #1DEEE1 99.24%);
+				width: 80%;
+				height: 64rpx;
+				text-align: center;
+				line-height: 64rpx;
+				color: #040616;
+				font-size: 28rpx;
+				border-radius: 8rpx;
+		        margin-left: 10%;
+				margin-top: 12rpx;
+			}
+		}
+	}
+
+</style>

File diff suppressed because it is too large
+ 798 - 0
pages/orders/index.vue


File diff suppressed because it is too large
+ 804 - 0
pages/orders/indexcoye.vue


+ 6 - 0
shime-uni.d.ts

@@ -0,0 +1,6 @@
+export {};
+
+declare module "vue" {
+  type Hooks = App.AppInstance & Page.PageInstance;
+  interface ComponentCustomOptions extends Hooks {}
+}

BIN
static/banner.png


BIN
static/bg.png


BIN
static/bj.png


BIN
static/bjes.png


BIN
static/bjss.png


BIN
static/djicon.png


BIN
static/fonts/NotoSansSC.ttf


+ 86 - 0
static/fonts/iconfont.css

@@ -0,0 +1,86 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 3874386 */
+  src: url('iconfont.eot?t=1697440519713'); /* IE9 */
+  src: url('iconfont.eot?t=1697440519713#iefix') format('embedded-opentype'), /* IE6-IE8 */
+       url('iconfont.woff2?t=1697440519713') format('woff2'),
+       url('iconfont.woff?t=1697440519713') format('woff'),
+       url('iconfont.ttf?t=1697440519713') format('truetype'),
+       url('iconfont.svg?t=1697440519713#iconfont') format('svg');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-metamask-fox1:before {
+  content: "\e61c";
+}
+
+.icon-Tronlink:before {
+  content: "\e602";
+}
+
+.icon-ic_exchanged:before {
+  content: "\e608";
+}
+
+.icon-qianbao:before {
+  content: "\e851";
+}
+
+.icon-fanyi:before {
+  content: "\e64d";
+}
+
+.icon-caidan:before {
+  content: "\e641";
+}
+
+.icon-jihuo:before {
+  content: "\e617";
+}
+
+.icon-gudingzichan:before {
+  content: "\e601";
+}
+
+.icon-jiangzhang:before {
+  content: "\e60e";
+}
+
+.icon-reset:before {
+  content: "\e611";
+}
+
+.icon-anjianfengexian:before {
+  content: "\e680";
+}
+
+.icon-31guanbi:before {
+  content: "\e600";
+}
+
+.icon-duoyuyan:before {
+  content: "\e62e";
+}
+
+.icon-xuanzeqizhankai_o:before {
+  content: "\eb8d";
+}
+
+.icon-fuzhi:before {
+  content: "\e612";
+}
+
+.icon-shezhi:before {
+  content: "\e8b7";
+}
+
+.icon-zhuanhuan:before {
+  content: "\e609";
+}
+

BIN
static/fonts/iconfont.eot


File diff suppressed because it is too large
+ 0 - 0
static/fonts/iconfont.js


+ 128 - 0
static/fonts/iconfont.json

@@ -0,0 +1,128 @@
+{
+  "id": "3874386",
+  "name": "ADDP",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon-",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "28347916",
+      "name": "metamask",
+      "font_class": "metamask-fox1",
+      "unicode": "e61c",
+      "unicode_decimal": 58908
+    },
+    {
+      "icon_id": "36137894",
+      "name": "Tronlink-copy",
+      "font_class": "Tronlink",
+      "unicode": "e602",
+      "unicode_decimal": 58882
+    },
+    {
+      "icon_id": "4734140",
+      "name": "交割",
+      "font_class": "ic_exchanged",
+      "unicode": "e608",
+      "unicode_decimal": 58888
+    },
+    {
+      "icon_id": "8288859",
+      "name": "钱包",
+      "font_class": "qianbao",
+      "unicode": "e851",
+      "unicode_decimal": 59473
+    },
+    {
+      "icon_id": "12884752",
+      "name": "翻译",
+      "font_class": "fanyi",
+      "unicode": "e64d",
+      "unicode_decimal": 58957
+    },
+    {
+      "icon_id": "12097374",
+      "name": "菜单",
+      "font_class": "caidan",
+      "unicode": "e641",
+      "unicode_decimal": 58945
+    },
+    {
+      "icon_id": "20104514",
+      "name": "激活",
+      "font_class": "jihuo",
+      "unicode": "e617",
+      "unicode_decimal": 58903
+    },
+    {
+      "icon_id": "24067506",
+      "name": "固定资产",
+      "font_class": "gudingzichan",
+      "unicode": "e601",
+      "unicode_decimal": 58881
+    },
+    {
+      "icon_id": "26212869",
+      "name": "奖章",
+      "font_class": "jiangzhang",
+      "unicode": "e60e",
+      "unicode_decimal": 58894
+    },
+    {
+      "icon_id": "1135934",
+      "name": "重置",
+      "font_class": "reset",
+      "unicode": "e611",
+      "unicode_decimal": 58897
+    },
+    {
+      "icon_id": "445409",
+      "name": "按键分割线",
+      "font_class": "anjianfengexian",
+      "unicode": "e680",
+      "unicode_decimal": 59008
+    },
+    {
+      "icon_id": "200856",
+      "name": "3.1关闭",
+      "font_class": "31guanbi",
+      "unicode": "e600",
+      "unicode_decimal": 58880
+    },
+    {
+      "icon_id": "700807",
+      "name": "多语言",
+      "font_class": "duoyuyan",
+      "unicode": "e62e",
+      "unicode_decimal": 58926
+    },
+    {
+      "icon_id": "5387915",
+      "name": "选择器展开_o",
+      "font_class": "xuanzeqizhankai_o",
+      "unicode": "eb8d",
+      "unicode_decimal": 60301
+    },
+    {
+      "icon_id": "5638788",
+      "name": "复制",
+      "font_class": "fuzhi",
+      "unicode": "e612",
+      "unicode_decimal": 58898
+    },
+    {
+      "icon_id": "11372694",
+      "name": "设置",
+      "font_class": "shezhi",
+      "unicode": "e8b7",
+      "unicode_decimal": 59575
+    },
+    {
+      "icon_id": "11855595",
+      "name": "转换",
+      "font_class": "zhuanhuan",
+      "unicode": "e609",
+      "unicode_decimal": 58889
+    }
+  ]
+}

File diff suppressed because it is too large
+ 16 - 0
static/fonts/iconfont.svg


BIN
static/fonts/iconfont.ttf


BIN
static/fonts/iconfont.woff


BIN
static/fonts/iconfont.woff2


BIN
static/gzicon.png


BIN
static/icon/Add.png


BIN
static/icon/icon1.png


BIN
static/icon/icon2.png


BIN
static/icon/icon3.png


BIN
static/icon/icon4.png


BIN
static/icon/iconw.png


BIN
static/icon/myicon1.png


BIN
static/icon/myicon10.png


BIN
static/icon/myicon2.png


BIN
static/icon/myicon3.png


BIN
static/icon/myicon4.png


BIN
static/icon/myicon5.png


BIN
static/icon/myicon6.png


BIN
static/icon/myicon7.png


BIN
static/icon/myicon8.png


BIN
static/icon/myicon9.png


BIN
static/icon/ordericon.png


BIN
static/icon/tcicon.png


BIN
static/icons.png


BIN
static/iconxs.png


BIN
static/logo.png


BIN
static/logos.png


BIN
static/my1.png


BIN
static/my2.png


BIN
static/my3.png


BIN
static/rule/bj.png


BIN
static/rule/log.png


BIN
static/tabble/Bill.png


BIN
static/tabble/Billhover.png


BIN
static/tabble/Home.png


BIN
static/tabble/Homehover.png


BIN
static/tabble/Mine.png


BIN
static/tabble/Minehover.png


BIN
static/tabble/Price.png


BIN
static/tabble/Pricehover.png


BIN
static/tc.png


BIN
static/testlog.png


BIN
static/tip.png


BIN
static/tips.png


BIN
static/usdt.png


BIN
static/vip.png


BIN
static/xsicon.png


+ 76 - 0
uni.scss

@@ -0,0 +1,76 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$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: #fff;
+$uni-bg-color-grey: #f8f8f8;
+$uni-bg-color-hover: #f1f1f1; // 点击状态颜色
+$uni-bg-color-mask: rgba(0, 0, 0, 0.4); // 遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color: #c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm: 12px;
+$uni-font-size-base: 14px;
+$uni-font-size-lg: 16;
+
+/* 图片尺寸 */
+$uni-img-size-sm: 20px;
+$uni-img-size-base: 26px;
+$uni-img-size-lg: 40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2c405a; // 文章标题颜色
+$uni-font-size-title: 20px;
+$uni-color-subtitle: #555; // 二级标题颜色
+$uni-font-size-subtitle: 18px;
+$uni-color-paragraph: #3f536e; // 文章段落颜色
+$uni-font-size-paragraph: 15px;

+ 19 - 0
uni_modules/uni-load-more/changelog.md

@@ -0,0 +1,19 @@
+## 1.3.3(2022-01-20)
+- 新增 showText属性 ,是否显示文本
+## 1.3.2(2022-01-19)
+- 修复 nvue 平台下不显示文本的bug
+## 1.3.1(2022-01-19)
+- 修复 微信小程序平台样式选择器报警告的问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+## 1.2.1(2021-08-24)
+- 新增 支持国际化
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.8(2021-05-12)
+- 新增 组件示例地址
+## 1.1.7(2021-03-30)
+- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug
+## 1.1.6(2021-02-05)
+- 调整为uni_modules目录规范

+ 5 - 0
uni_modules/uni-load-more/components/uni-load-more/i18n/en.json

@@ -0,0 +1,5 @@
+{
+	"uni-load-more.contentdown": "Pull up to show more",
+	"uni-load-more.contentrefresh": "loading...",
+	"uni-load-more.contentnomore": "No more data"
+}

Some files were not shown because too many files changed in this diff