Ver Fonte

首次重构完成,项目结构被重新设计

skyfffire há 3 anos atrás
pai
commit
be43afde6f

+ 1 - 1
src/App.vue

@@ -112,7 +112,7 @@ export default {
   data: () => ({
     tab: 'history',
     pwdMD5: '7f5029bbd4daae18f3ae4cd910f0f4f0',
-    pwd: ''
+    pwd: 'qwe410410'
   }),
 
   methods: {

+ 10 - 49
src/components/History.vue

@@ -205,14 +205,14 @@
                           @click="jump(trade.token, 'token')"
                           v-if="!trade.tokenSymbol && trade.token !== '0xeth'">
                     <div class="tokenName">{{ getSimpleStr3(trade.token) }}</div>
-                    <div class="tokenAmount">{{ myKit._N(trade.amount, 4) }} </div>
+                    <div class="tokenAmount">{{ numKit._N(trade.amount, 4) }} </div>
                   </v-chip>
                   <v-chip label
                           color="blue lighten-4" class="ma-2 tradeLabel"
                           @click="jump(trade.token, 'token')"
                           v-else>
                     <div class="tokenName">{{ trade.tokenSymbol }}</div>
-                    <div class="tokenAmount">{{ myKit._N(trade.amount, 4) }}</div>
+                    <div class="tokenAmount">{{ numKit._N(trade.amount, 4) }}</div>
                   </v-chip>
                   <!--from-->
                   <div>
@@ -294,37 +294,14 @@
 </template>
 
 <script>
-  import MyKit from "../plugins/kit/MyKit";
+  import NumKit from '../plugins/kit/NumKit'
+  import HashKit from '../plugins/kit/HashKit'
+  import EthMev from '../plugins/model/EthMev'
 
   export default {
     name: 'History',
 
     methods: {
-      // 时间戳转换chart时间
-      getTime (timestamp) {
-        // 组织日期格式并返回
-        return this.dateFormat('YYYY-mm-dd HH:MM:SS:sss', new Date(timestamp * 1000))
-      },
-      dateFormat(fmt, date) {
-        let ret;
-        const opt = {
-          "Y+": date.getFullYear().toString(),        // 年
-          "m+": (date.getMonth() + 1).toString(),     // 月
-          "d+": date.getDate().toString(),            // 日
-          "H+": date.getHours().toString(),           // 时
-          "M+": date.getMinutes().toString(),         // 分
-          "S+": date.getSeconds().toString(),         // 秒
-          "s+": date.getMilliseconds().toString()     // 毫秒
-          // 有其他格式化字符需求可以继续添加,必须转化成字符串
-        };
-        for (let k in opt) {
-          ret = new RegExp("(" + k + ")").exec(fmt);
-          if (ret) {
-            fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
-          }
-        }
-        return fmt;
-      },
       // 获取简易str
       getSimpleStr (str) {
         if (str && str.indexOf('x') !== -1) {
@@ -354,12 +331,10 @@
       },
       // 获取数据
       async pullData () {
-        let url = '/ethmev/findByHashOrBlockOrDataVague'
-
         this.tableData.length = 0
-        this.loading = true
 
-        const rst = await this.$http.post(url, this.query)
+        this.loading = true
+        const rst = await EthMev.getEthMevData(this.query.block, this.query.hash, this.query.dataVague)
         this.loading = false
 
         if (!rst.data.state) {
@@ -378,7 +353,7 @@
             one.tradeInfo = dataObj.tradeInfo
             one.from = dataObj.fromAdd
             one.to = dataObj.toAdd
-            one.gasPrice = MyKit._N(parseInt(dataObj.gasPrice) / (10 ** 9), 2)
+            one.gasPrice = NumKit._N(parseInt(dataObj.gasPrice) / (10 ** 9), 2)
             one.index = dataObj.index
             one.type = dataObj.type
             one.state = dataObj.status
@@ -390,11 +365,7 @@
       },
       async deleteByHash(hash_code) {
         if (confirm('要删吗?\n' + hash_code)) {
-          let url = '/ethmev/deleteByHash'
-
-          const rst = await this.$http.post(url, {
-            hash: hash_code
-          })
+          const rst = await EthMev.deleteByHash(hash_code)
 
           if (rst.data.state) {
             this.$msgkit.success(rst.data.msg)
@@ -408,13 +379,6 @@
       logInfo (info) {
         console.log(info)
       },
-      dateToTimestamp (str) {
-        let [a, b] = str.split(' ')
-        let [year, month, day] = a.split('/')
-        let [hour, minute, second] = b.split(':')
-
-        return new Date(year, month - 1, day, hour, minute, second).getTime() / 1000
-      },
       jump (pairAddress, type) {
         if (type === 'token') {
           window.open('https://www.oklink.com/en/ethw/token/' + pairAddress)
@@ -425,14 +389,11 @@
       changeShowBlock (item, openSnackbar) {
         if (openSnackbar) this.blockSnackbar = true
         this.showBlock = item.block
-      },
-      removeShowBlock () {
-        this.showBlock = 0
       }
     },
 
     data: () => ({
-      myKit: MyKit,
+      numKit: NumKit,
       query: {
         block: '',
         hash: '',

+ 1 - 1
src/main.js

@@ -1,8 +1,8 @@
 import Vue from 'vue'
-import './plugins/axios'
 import App from './App.vue'
 import vuetify from './plugins/vuetify';
 import MsgKit from '@/plugins/kit/MsgKit.js'
+import './plugins/network'
 
 // 标题指令
 Vue.directive('title', {

+ 3 - 0
src/plugins/kit/HashKit.js

@@ -0,0 +1,3 @@
+export default class HashKit {
+
+}

+ 0 - 187
src/plugins/kit/MyKit.js

@@ -1,187 +0,0 @@
-class MyKit {}
-
-/**
- * 豪秒级时间戳转换
- *
- * @param timestamp
- * @returns {*}
- */
-MyKit.getTimeByMillisecond = function (timestamp) {
-  // 组织日期格式并返回
-  return MyKit.dateFormat('YYYY-mm-dd HH:MM:SS', new Date(timestamp))
-}
-
-/**
- * 秒级时间戳转换
- *
- * @param timestamp
- * @returns {*}
- */
-MyKit.getTimeBySecond = function (timestamp) {
-  // 组织日期格式并返回
-  return MyKit.dateFormat('YYYY-mm-dd HH:MM:SS', new Date(timestamp * 1000))
-}
-
-/**
- * 格式化日期
- *
- * @param fmt 日期格式
- * @param date 日期对象
- * @returns {*}
- */
-MyKit.dateFormat = function (fmt, date) {
-  let ret
-  const opt = {
-    "Y+": date.getFullYear().toString(),        // 年
-    "m+": (date.getMonth() + 1).toString(),     // 月
-    "d+": date.getDate().toString(),            // 日
-    "H+": date.getHours().toString(),           // 时
-    "M+": date.getMinutes().toString(),         // 分
-    "S+": date.getSeconds().toString(),         // 秒
-    "s+": date.getMilliseconds().toString()     // 毫秒
-    // 有其他格式化字符需求可以继续添加,必须转化成字符串
-  }
-
-  for (let k in opt) {
-    ret = new RegExp("(" + k + ")").exec(fmt)
-    if (ret) {
-      fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
-    }
-  }
-
-  return fmt
-}
-
-/**
- * 截取小数位工具
- * @param num 需要截取的小数
- * @param n 截取位数
- * @returns {number}
- * @private
- */
-MyKit._N = function (num, n) {
-  if (!num) {
-    return 0
-  }
-
-  let rst = num.toString()
-
-  if (rst.indexOf('.') !== -1) {
-    rst = rst.substring(0, rst.indexOf('.') + n + 1)
-  }
-
-  return parseFloat(rst)
-}
-
-/**
- * 转成非科学计数法
- * @param num
- * @returns {string}
- */
-MyKit.toNonExponential = function (num) {
-  const m = num.toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/)
-  return num.toFixed(Math.max(0, (m[1] || '').length - m[2]))
-}
-
-/**
- * 睡眠工具
- * @param time 单位:毫秒
- * @returns {Promise<unknown>}
- */
-MyKit.sleep = function (time) {
-  return new Promise(function (resolve) {
-    setTimeout(function () {
-      resolve(true)
-    }, time)
-  })
-}
-
-/**
- * EMA计算器
- * @param lastEma 上一个EMA
- * @param closePrice 收盘价
- * @param units 数据条数
- * @returns {number}
- */
-MyKit.EMA = function (lastEma, closePrice, units) {
-  return (lastEma * (units - 1) + closePrice * 2) / (units + 1)
-}
-
-/**
- *
- * 计算移动平均线指标, ma的周期为days
- *
- * @method MA
- * @param {Array} ticks 一维数组类型,每个元素为当前Tick的收盘价格
- * @param {Integer} day
- * @return {Array} mas
- */
-MyKit.MA = function (ticks, day) {
-  const mas = []
-  for (let i = 0; i < ticks.length; i++) {
-    if (i < day - 1) {
-      mas.push(ticks[i])
-    } else {
-      let valueSum = 0
-      for (let j = i; j > i - day; j--) {
-        valueSum += ticks[j]
-
-        if (i === ticks.length - 1) {
-          // console.log(day, ticks[j])
-        }
-      }
-      if (i === ticks.length - 1) {
-        // console.log(day, valueSum)
-      }
-      mas.push(valueSum / day)
-    }
-  }
-  return mas
-}
-
-/**
- *
- * 计算macd指标,快速和慢速移动平均线的周期分别取12和26
- *
- * @method MACD
- * @param {Array} ticks
- * 一维数组类型,每个元素为tick的收盘价格
- * @param {Integer} N1
- * 整数类型,是为快线
- * @param {Integer} N2
- * 整数类型,是为慢线
- * @param {Integer} N3
- * 整数类型,是为信号长度
- * @return {Object} 返回一个包含diffs deas bars属性的对象,每个属性对应的类型为{Array[Number]}
- */
-MyKit.MACD = function (ticks, N1, N2, N3) {
-  const emaN1 = []
-  const emaN2 = []
-  const diffs = []
-  const deas = []
-  const bars = []
-
-  for (let i = 0; i < ticks.length; i++) {
-    const c = ticks[i]
-    if (i === 0) {
-      emaN1.push(c)
-      emaN2.push(c)
-      deas.push(0)
-    } else {
-      emaN1.push(MyKit.EMA(emaN1[i - 1], c, N1))
-      emaN2.push(MyKit.EMA(emaN2[i - 1], c, N2))
-    }
-    // 计算离差值
-    diffs.push(emaN1[i] - emaN2[i])
-
-    if (i !== 0) {
-      deas.push(MyKit.EMA(deas[i - 1], diffs[i], N3))
-    }
-    // bars.push((diffs[i]-deas[i]) * 2);
-    bars.push(diffs[i] - deas[i])
-  }
-
-  return { diffs: diffs, deas: deas, bars: bars }
-}
-
-export default MyKit

+ 32 - 0
src/plugins/kit/NumKit.js

@@ -0,0 +1,32 @@
+export default class NumKit {
+  /**
+   * 截取小数位工具
+   * @param num 需要截取的小数
+   * @param n 截取位数
+   * @returns {number}
+   * @private
+   */
+  static _N = function (num, n) {
+    if (!num) {
+      return 0
+    }
+
+    let rst = num.toString()
+
+    if (rst.indexOf('.') !== -1) {
+      rst = rst.substring(0, rst.indexOf('.') + n + 1)
+    }
+
+    return parseFloat(rst)
+  }
+
+  /**
+   * 转成非科学计数法
+   * @param num
+   * @returns {string}
+   */
+  static toNonExponential = function (num) {
+    const m = num.toExponential().match(/\d(?:\.(\d*))?e([+-]\d+)/)
+    return num.toFixed(Math.max(0, (m[1] || '').length - m[2]))
+  }
+}

+ 91 - 0
src/plugins/kit/TickKit.js

@@ -0,0 +1,91 @@
+class TickKit {}
+
+/**
+ * EMA计算器
+ * @param lastEma 上一个EMA
+ * @param closePrice 收盘价
+ * @param units 数据条数
+ * @returns {number}
+ */
+TickKit.EMA = function (lastEma, closePrice, units) {
+  return (lastEma * (units - 1) + closePrice * 2) / (units + 1)
+}
+
+/**
+ *
+ * 计算移动平均线指标, ma的周期为days
+ *
+ * @method MA
+ * @param {Array} ticks 一维数组类型,每个元素为当前Tick的收盘价格
+ * @param {Integer} day
+ * @return {Array} mas
+ */
+TickKit.MA = function (ticks, day) {
+  const mas = []
+  for (let i = 0; i < ticks.length; i++) {
+    if (i < day - 1) {
+      mas.push(ticks[i])
+    } else {
+      let valueSum = 0
+      for (let j = i; j > i - day; j--) {
+        valueSum += ticks[j]
+
+        if (i === ticks.length - 1) {
+          // console.log(day, ticks[j])
+        }
+      }
+      if (i === ticks.length - 1) {
+        // console.log(day, valueSum)
+      }
+      mas.push(valueSum / day)
+    }
+  }
+  return mas
+}
+
+/**
+ *
+ * 计算macd指标,快速和慢速移动平均线的周期分别取12和26
+ *
+ * @method MACD
+ * @param {Array} ticks
+ * 一维数组类型,每个元素为tick的收盘价格
+ * @param {Integer} N1
+ * 整数类型,是为快线
+ * @param {Integer} N2
+ * 整数类型,是为慢线
+ * @param {Integer} N3
+ * 整数类型,是为信号长度
+ * @return {Object} 返回一个包含diffs deas bars属性的对象,每个属性对应的类型为{Array[Number]}
+ */
+TickKit.MACD = function (ticks, N1, N2, N3) {
+  const emaN1 = []
+  const emaN2 = []
+  const diffs = []
+  const deas = []
+  const bars = []
+
+  for (let i = 0; i < ticks.length; i++) {
+    const c = ticks[i]
+    if (i === 0) {
+      emaN1.push(c)
+      emaN2.push(c)
+      deas.push(0)
+    } else {
+      emaN1.push(TickKit.EMA(emaN1[i - 1], c, N1))
+      emaN2.push(TickKit.EMA(emaN2[i - 1], c, N2))
+    }
+    // 计算离差值
+    diffs.push(emaN1[i] - emaN2[i])
+
+    if (i !== 0) {
+      deas.push(TickKit.EMA(deas[i - 1], diffs[i], N3))
+    }
+    // bars.push((diffs[i]-deas[i]) * 2);
+    bars.push(diffs[i] - deas[i])
+  }
+
+  return { diffs: diffs, deas: deas, bars: bars }
+}
+
+export default TickKit

+ 66 - 0
src/plugins/kit/TimeKit.js

@@ -0,0 +1,66 @@
+export default class TimeKit {
+  static dateToTimestamp (str) {
+    let [a, b] = str.split(' ')
+    let [year, month, day] = a.split('/')
+    let [hour, minute, second] = b.split(':')
+
+    return new Date(year, month - 1, day, hour, minute, second).getTime() / 1000
+  }
+
+  // 时间戳转换chart时间
+  static getTime (timestamp) {
+    // 组织日期格式并返回
+    return this.dateFormat('YYYY-mm-dd HH:MM:SS:sss', new Date(timestamp * 1000))
+  }
+
+  static dateFormat(fmt, date) {
+    let ret;
+    const opt = {
+      "Y+": date.getFullYear().toString(),        // 年
+      "m+": (date.getMonth() + 1).toString(),     // 月
+      "d+": date.getDate().toString(),            // 日
+      "H+": date.getHours().toString(),           // 时
+      "M+": date.getMinutes().toString(),         // 分
+      "S+": date.getSeconds().toString(),         // 秒
+      "s+": date.getMilliseconds().toString()     // 毫秒
+      // 有其他格式化字符需求可以继续添加,必须转化成字符串
+    };
+    for (let k in opt) {
+      ret = new RegExp("(" + k + ")").exec(fmt);
+      if (ret) {
+        fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
+      }
+    }
+    return fmt;
+  }
+
+  /**
+   * 豪秒级时间戳转换
+   *
+   * @param timestamp
+   * @returns {*}
+   */
+  static getTimeByMillisecond = function (timestamp) {
+    // 组织日期格式并返回
+    return TickKit.dateFormat('YYYY-mm-dd HH:MM:SS', new Date(timestamp))
+  }
+
+  /**
+   * 秒级时间戳转换
+   *
+   * @param timestamp
+   * @returns {*}
+   */
+  static getTimeBySecond = function (timestamp) {
+    // 组织日期格式并返回
+    return TickKit.dateFormat('YYYY-mm-dd HH:MM:SS', new Date(timestamp * 1000))
+  }
+
+  static sleep = function (time) {
+    return new Promise(function (resolve) {
+      setTimeout(function () {
+        resolve(true)
+      }, time)
+    })
+  }
+}

+ 35 - 0
src/plugins/model/EthMev.js

@@ -0,0 +1,35 @@
+import Vue from 'vue';
+
+const http = Vue.prototype.$http
+
+export default class EthMev {
+  static async getEthMevData(block, hash, dataVague, page=1, size=200) {
+    let url = '/ethmev/findByHashOrBlockOrDataVague'
+
+    return http.post(url, {
+      block: block,
+      hash: hash,
+      dataVague: dataVague,
+      limit1: (page - 1) * size,
+      limit2: size
+    });
+  }
+
+  static async deleteByHash(hash) {
+    let url = '/ethmev/deleteByHash'
+
+    return http.post(url, {
+      hash: hash
+    });
+  }
+
+  static async appendOrUpdate(block, hash, dataVague) {
+    let url = '/ethmev/appendOrUpdate'
+
+    return http.post(url, {
+      block: block,
+      hash: hash,
+      dataVague: dataVague
+    })
+  }
+}

+ 1 - 27
src/plugins/axios.js → src/plugins/network.js

@@ -5,14 +5,8 @@ import axios from "axios";
 import md5 from "md5-node"
 import qs from "qs"
 
-// Vue.prototype.$http = axios
-
 axios.defaults.baseURL = process.env.VUE_APP_BASE_URL
 
-
-let config = {}
-const _axios = axios.create(config)
-
 axios.interceptors.request.use(
     function(config) {
       // auth
@@ -49,24 +43,4 @@ axios.interceptors.response.use(
     }
 );
 
-Plugin.install = function(Vue) {
-  Vue.axios = axios;
-  Vue.prototype.$http = axios;
-
-  Object.defineProperties(Vue.prototype, {
-    axios: {
-      get() {
-        return axios;
-      }
-    },
-    $axios: {
-      get() {
-        return axios;
-      }
-    },
-  });
-};
-
-Vue.use(Plugin)
-
-export default Plugin;
+Vue.prototype.$http = axios