Răsfoiți Sursa

添加余额变动标记

DESKTOP-NE65RNK\Citrus_limon 1 an în urmă
părinte
comite
249b48e348

+ 2 - 2
.env.development

@@ -1,6 +1,6 @@
 VITE_APP_ENV = development
 
-VITE_API_BASE_URL = "https://4lapi.skyfffire.com"
-# VITE_API_BASE_URL = "https://t4lapi.skyfffire.com"
+# VITE_API_BASE_URL = "https://4lapi.skyfffire.com"
+VITE_API_BASE_URL = "https://t4lapi.skyfffire.com"
 # VITE_API_BASE_URL = "http://192.168.1.5:18888"
 # VITE_API_BASE_URL = "http://183.249.84.29:18888"

+ 1 - 1
package.json

@@ -13,7 +13,7 @@
     "publish-test": "vue-tsc && vite build --mode test && npm run upload-test && npm run del",
     "upload-test": "scp -r dist root@18.181.169.47:/home/ubuntu/html",
     "publish-prod": "vue-tsc && vite build && npm run upload-prod && npm run del",
-    "upload-prod": "scp -r dist root@54.199.45.43:/home/ubuntu/html"
+    "upload-prod": "scp -r dist root@3.112.225.227:/home/ubuntu/html"
   },
   "dependencies": {
     "@layui/layui-vue": "^2.13.0",

+ 7 - 1
src/api/index.ts

@@ -577,7 +577,13 @@ export const get_menu_all = (params: any, callback: any) => {
 
 // 数据收集-数据交易日志
 export const get_acquire_log = (params: any, callback: any) => {
-  return http.request("/api/acquireULog/getYK", "get", params).then((data) => {
+  return http.request("/api/acquireULog/getPage", "get", params).then((data) => {
+    if (data) callback && callback(data);
+  });
+};
+// 数据收集-设置数据交易标签
+export const set_acquire_label = (params: any, callback: any) => {
+  return http.request("/api/acquireULog/label", "post", params).then((data) => {
     if (data) callback && callback(data);
   });
 };

+ 6 - 0
src/utils/enum.ts

@@ -25,3 +25,9 @@ export const INDICATOR_EXCHANG_TYPE: Enum = {
   gate_usdt_swap: "gate_usdt_swap",
   bitget_usdt_swap: "bitget_usdt_swap",
 };
+
+export const BALANCE_TYPE: Enum = {
+  "0": "盈亏",
+  "1": "转账",
+};
+

+ 7 - 1
src/utils/index.ts

@@ -32,7 +32,13 @@ export const timeConverts = (timestamp: number) => {
   let diff_timestamp = now_timestamp - timestamp;
   if (diff_timestamp / 1000 <= 0) return `0秒前`;
   if (diff_timestamp / 1000 <= 60) return `${Math.floor(diff_timestamp / 1000)}秒前`;
-  if (diff_timestamp / 1000 / 60 <= 60) return `${Math.floor((diff_timestamp / 1000) / 60)}分钟前`;
+  if (diff_timestamp / 1000 / 60 <= 60) return `${Math.floor(diff_timestamp / 1000 / 60)}分钟前`;
   if (diff_timestamp / 1000 / 60 / 60 <= 24) return `${Math.floor(diff_timestamp / 1000 / 60 / 60)}小时前`;
   return `${Math.floor(diff_timestamp / 1000 / 60 / 60 / 24)}天前`;
 };
+
+export const unitConverts = (value: number) => {
+  if (value >= 1000000) return `${(value / 1000000).toFixed(2)}M`;
+  if (value >= 1000) return `${(value / 1000).toFixed(2)}K`;
+  return `${value}`;
+};

+ 83 - 0
src/views/debug/deeebug/components/Update.vue

@@ -0,0 +1,83 @@
+<template>
+  <lay-layer :title="modelConfig.title" v-model="modelConfig.visible" area="auto" :btn="operator">
+    <div class="width-500 custom-layer" style="padding: 20px">
+      <lay-form :model="modelParams" ref="modelFormRef" required>
+        <lay-form-item label="类型" prop="label">
+          <lay-select v-model="modelParams.label" placeholder="设置金额变动类型">
+            <lay-select-option v-for="(item, key) of BALANCE_TYPE" :value="key" :label="item" />
+          </lay-select>
+        </lay-form-item>
+      </lay-form>
+    </div>
+  </lay-layer>
+</template>
+
+<script lang="ts" setup>
+import { ref, reactive, getCurrentInstance } from "vue";
+import { BALANCE_TYPE } from "@/utils/enum";
+import { set_acquire_label } from "@/api";
+
+const { proxy }: any = getCurrentInstance();
+
+const modelFormRef = ref();
+
+interface ModelConfig {
+  title: string;
+  visible: boolean;
+  isUpdate: boolean;
+  loading: boolean;
+}
+interface ModelParams {
+  id?: string;
+  label?: string;
+}
+
+let modelParams = ref<ModelParams>({});
+let modelConfig: ModelConfig = reactive({ title: "", visible: false, isUpdate: false, loading: false });
+
+let handleResult = reactive<{ resolve?: any; reject?: any }>({});
+
+const show = (params?: any) => {
+  modelConfig.visible = true;
+  modelConfig.isUpdate = !!params;
+  modelConfig.title = "设置数据类型";
+  modelParams.value = { ...params };
+  return new Promise(async (resolve, reject) => {
+    handleResult.resolve = resolve;
+    handleResult.reject = reject;
+  });
+};
+
+const operator = reactive([
+  {
+    text: "确认",
+    callback: () => {
+      modelFormRef.value.validate((isValidate: boolean) => {
+        if (isValidate) {
+          const params = {
+            id: modelParams.value.id,
+            label: modelParams.value.label,
+          };
+          modelConfig.loading = true;
+          set_acquire_label(params, (data: any) => {
+            modelConfig.loading = false;
+            if (data.code == 200) {
+              proxy.$message("设置成功!");
+              modelConfig.visible = false;
+              handleResult.resolve(true);
+            }
+          });
+        }
+      });
+    },
+  },
+  {
+    text: "取消",
+    callback: () => {
+      modelConfig.visible = false;
+      handleResult.resolve(false);
+    },
+  },
+]);
+defineExpose({ show });
+</script>

+ 65 - 38
src/views/debug/deeebug/index.vue

@@ -7,26 +7,53 @@
     <template v-slot:body>
       <div class="custom-form-layout">
         <lay-form class="form-wp" :model="pageParams" mode="inline" size="sm">
+          <lay-form-item label="查询时间" prop="rangeTime">
+            <lay-date-picker v-model="pageParams.rangeTime" range type="datetime" :placeholder="['开始日期', '结束日期']" />
+          </lay-form-item>
+          <lay-form-item label="类型" prop="label">
+            <lay-select v-model="pageParams.label" :show-search="true" allowClear placeholder="金额变动类型">
+              <lay-select-option v-for="(item, key) of BALANCE_TYPE" :value="key" :label="item" />
+            </lay-select>
+          </lay-form-item>
+          <lay-form-item label="盈亏绝对值" prop="absVal">
+            <lay-input v-model="pageParams.absVal" placeholder="盈亏绝对值大于" />
+          </lay-form-item>
           <div class="form-button-wp">
-            <lay-button @click="getPageInfo()">刷新</lay-button>
+            <lay-button @click="getPageInfo(true)">搜索</lay-button>
           </div>
         </lay-form>
       </div>
       <div>
-        <lay-table :page="tablePage" :columns="columns" resize :data-source="dataSource" :loading="pageConfig.loading">
+        <lay-table :page="tablePage" :columns="columns" resize :data-source="dataSource" :loading="pageConfig.loading" @change="handleCurrentChange">
+          <template v-slot:label="{ row }">
+            {{ BALANCE_TYPE[row.label] }}
+          </template>
           <template v-slot:changeU="{ row }">
             <span :class="row.changeU * 1 > 0 ? 'primary-color' : 'danger-color'">{{ row.changeU }}</span>
           </template>
+
+          <template v-slot:operator="{ row }">
+            <lay-space>
+              <TableButton text="标记" @click="handleUpdate(row)" />
+            </lay-space>
+          </template>
         </lay-table>
       </div>
     </template>
   </lay-card>
+  <Update ref="updateRef" />
 </template>
 
 <script lang="ts" setup name="DebugDeeebug">
 import { ref, reactive } from "vue";
+import dayjs from "dayjs";
+import Update from "./components/Update.vue";
+import TableButton from "@/components/TableButton.vue";
+import { BALANCE_TYPE } from "@/utils/enum";
 import { get_acquire_log } from "@/api";
 
+const updateRef = ref();
+
 interface PageConfig {
   loading: boolean;
 }
@@ -36,17 +63,20 @@ let pageConfig: PageConfig = reactive({
 });
 
 interface FormItem {
-  startTime?: Number;
-  endTime?: Number;
+  rangeTime?: any;
+  label?: Number;
+  absVal?: Number;
+  pageNum?: Number;
+  pageSize?: Number;
 }
-let pageParams: FormItem = reactive({});
+const pageParams: FormItem = reactive({ pageNum: 1, pageSize: 20 });
 
 interface TablePage {
   current: number;
   limit: number;
   total: number;
 }
-const tablePage: TablePage = reactive({ current: 1, limit: 20, total: 0, limits: [20, 50, 100, 200, 500] });
+const tablePage: TablePage = reactive({ current: 1, limit: 50, total: 0, limits: [20, 50, 100, 200, 500] });
 const columns = ref([
   { title: "机器人ID", key: "robotId" },
   { title: "币对", key: "pair" },
@@ -54,50 +84,47 @@ const columns = ref([
   { title: "变动后", key: "afterU" },
   { title: "盈亏", key: "changeU", customSlot: "changeU" },
   { title: "参数", width: "200px", key: "jsonParams", ellipsisTooltip: true },
+  { title: "类型", width: "80px", key: "label", customSlot: "label" },
   { title: "创建时间", key: "creationTime" },
+  {
+    title: "操作",
+    width: "80px",
+    customSlot: "operator",
+    key: "operator",
+    ignoreExport: true,
+  },
 ]);
 let dataSource = ref<any>([]);
 
 // 请求数据列表
-const getPageInfo = () => {
-  //   if (isSearch) pageParams.pageNum = 1;
-  pageParams = { startTime: +new Date() - 1000 * 60 * 60 * 4, endTime: +new Date() };
+const getPageInfo = (isSearch?: boolean) => {
+  if (isSearch) pageParams.pageNum = 1;
+  let params: any = { ...pageParams };
+  if (params.rangeTime) {
+    params = { ...pageParams, startTime: +dayjs(pageParams?.rangeTime[0]), endTime: +dayjs(pageParams?.rangeTime[1]) };
+    delete params.rangeTime;
+  }
+
   pageConfig.loading = true;
-  get_acquire_log(pageParams, (data: any) => {
+  get_acquire_log(params, (data: any) => {
     pageConfig.loading = false;
     if (data.code == 200) {
-      dataSource.value = [
-        ...[...data.data["+"], ...data.data["-"]].sort((a, b) => {
-          return +new Date(b.creationTime) - +new Date(a.creationTime);
-        }),
-      ];
-      //   tablePage.total = dataSource.value.length;
+      dataSource.value = data.data.list;
+      tablePage.total = data.data.total;
     }
   });
 };
 getPageInfo();
 
-// // 分页设置
-// const handleCurrentChange = (val: any) => {
-//   dataShowSource.value = [...dataSortSource.value.slice((val.current - 1) * val.limit, val.current * val.limit)];
-// };
+const handleUpdate = async (value?: any) => {
+  const result = await updateRef.value.show(value);
+  if (result) getPageInfo();
+};
 
-// // 排序
-// const handleSortChange = (key: any, sort: any) => {
-//   sortInfo.value = { key, sort };
-//   if (!sort) {
-//     dataSortSource.value = [...dataSource.value];
-//     dataShowSource.value = [...dataSource.value.slice((tablePage.current - 1) * tablePage.limit, tablePage.current * tablePage.limit)];
-//     return;
-//   }
-//   dataSortSource.value = [...dataSource.value].sort((a: any, b: any) => {
-//     let maxA = -9999999;
-//     let maxB = -9999999;
-//     Object.values(a[key]).map((item) => (maxA = Number(item) > maxA ? Number(item) : maxA));
-//     Object.values(b[key]).map((item) => (maxB = Number(item) > maxB ? Number(item) : maxB));
-//     return maxA - maxB;
-//   });
-//   if (sort == "desc") dataSortSource.value.reverse();
-//   dataShowSource.value = [...dataSortSource.value.slice((tablePage.current - 1) * tablePage.limit, tablePage.current * tablePage.limit)];
-// };
+// 分页设置
+const handleCurrentChange = (val: any) => {
+  pageParams.pageNum = val.current;
+  pageParams.pageSize = val.limit;
+  getPageInfo();
+};
 </script>

+ 7 - 5
src/views/indicator/msv/index.vue

@@ -42,6 +42,7 @@ import { useRoute } from "vue-router";
 import * as echarts from "echarts";
 import dayjs from "dayjs";
 import Trades from "./components/Trades.vue";
+import { unitConverts } from "@/utils";
 import { get_indicator, get_ia_exchanges } from "@/api";
 
 const route = useRoute();
@@ -119,8 +120,8 @@ const initChart = (data: any) => {
   window.removeEventListener("resize", () => msvChart.value.resize());
   window.addEventListener("resize", () => msvChart.value.resize());
 
-  const xData = data.x;
-  const yData = data.y;
+  // const xData = data.x;
+  const yData = data.msv;
   const chartOption = {
     title: {
       text: `${pageParams.exchange} ${pageParams.symbol?.toUpperCase()} ${parseFloat(((Number(pageParams.minute_time_range) || 240) / 60).toFixed(2)).toString()}小时波动率指标`,
@@ -142,8 +143,10 @@ const initChart = (data: any) => {
       },
       formatter: (value: any) => {
         let time = dayjs(value[0].name * 1).format("YYYY-MM-DD HH:mm:ss.SSS");
-        let price = value[0].value;
-        return `时间:${time}<br/>波动率:${price}%`;
+        let volatilities = value[0].value[1];
+        let dissociation = unitConverts(value[0].value[2]);
+
+        return `时间:${time}<br/>波动率:${volatilities}%<br/>强度:${dissociation} USDT`;
       },
     },
     dataZoom: [
@@ -160,7 +163,6 @@ const initChart = (data: any) => {
     xAxis: {
       type: "category",
       boundaryGap: false,
-      data: xData,
       show: true,
       axisLabel: {
         formatter: (value: any) => {