Browse Source

增加手动信号模块

master
lizhixin 4 years ago
parent
commit
3fc1956e39
  1. 4
      src/layout/dashboard/DashboardLayout.vue
  2. 397
      src/pages/Dashboard.vue
  3. 53
      src/pages/MainSec/OrderTable.vue
  4. 11
      src/pages/RobotSec/index.vue
  5. 127
      src/pages/SignalSender/index.vue
  6. 8
      src/router/routes.js
  7. 6
      src/utils/TimeUtils.js

4
src/layout/dashboard/DashboardLayout.vue

@ -63,6 +63,10 @@
<i class="el-icon-trophy"></i>
<span slot="title">系统账号</span>
</el-menu-item>
<el-menu-item index="7" @click="to('/signalSender')">
<i class="el-icon-trophy"></i>
<span slot="title">手动信号</span>
</el-menu-item>
</el-menu>
<!-- <template slot="links">
<span @click="test = !test" class="title">动量现货</span>

397
src/pages/Dashboard.vue

@ -1,93 +1,115 @@
<template>
<div>
<div class="row">
<div class="col-12">
<card type="chart">
<template slot="header">
<div class="row">
<div class="col-sm-6" :class="isRTL ? 'text-right' : 'text-left'">
<h5 class="card-category">{{$t('dashboard.totalShipments')}}</h5>
<h2 class="card-title">{{$t('dashboard.performance')}}</h2>
<h5 class="card-category">
{{ $t("dashboard.totalShipments") }}
</h5>
<h2 class="card-title">{{ $t("dashboard.performance") }}</h2>
</div>
<div class="col-sm-6">
<div class="btn-group btn-group-toggle"
:class="isRTL ? 'float-left' : 'float-right'"
data-toggle="buttons">
<label v-for="(option, index) in bigLineChartCategories"
:key="option"
class="btn btn-sm btn-primary btn-simple"
:class="{active: bigLineChart.activeIndex === index}"
:id="index">
<input type="radio"
@click="initBigChart(index)"
name="options" autocomplete="off"
:checked="bigLineChart.activeIndex === index">
{{option}}
<div
class="btn-group btn-group-toggle"
:class="isRTL ? 'float-left' : 'float-right'"
data-toggle="buttons"
>
<label
v-for="(option, index) in bigLineChartCategories"
:key="option"
class="btn btn-sm btn-primary btn-simple"
:class="{ active: bigLineChart.activeIndex === index }"
:id="index"
>
<input
type="radio"
@click="initBigChart(index)"
name="options"
autocomplete="off"
:checked="bigLineChart.activeIndex === index"
/>
{{ option }}
</label>
</div>
</div>
</div>
</template>
<div class="chart-area">
<line-chart style="height: 100%"
ref="bigChart"
chart-id="big-line-chart"
:chart-data="bigLineChart.chartData"
:gradient-colors="bigLineChart.gradientColors"
:gradient-stops="bigLineChart.gradientStops"
:extra-options="bigLineChart.extraOptions">
<line-chart
style="height: 100%"
ref="bigChart"
chart-id="big-line-chart"
:chart-data="bigLineChart.chartData"
:gradient-colors="bigLineChart.gradientColors"
:gradient-stops="bigLineChart.gradientStops"
:extra-options="bigLineChart.extraOptions"
>
</line-chart>
</div>
</card>
</div>
</div>
<div class="row">
<div class="col-lg-4" :class="{'text-right': isRTL}">
<div class="col-lg-4" :class="{ 'text-right': isRTL }">
<card type="chart">
<template slot="header">
<h5 class="card-category">{{$t('dashboard.totalShipments')}}</h5>
<h3 class="card-title"><i class="tim-icons icon-bell-55 text-primary "></i> 763,215</h3>
<h5 class="card-category">{{ $t("dashboard.totalShipments") }}</h5>
<h3 class="card-title">
<i class="tim-icons icon-bell-55 text-primary "></i> 763,215
</h3>
</template>
<div class="chart-area">
<line-chart style="height: 100%"
chart-id="purple-line-chart"
:chart-data="purpleLineChart.chartData"
:gradient-colors="purpleLineChart.gradientColors"
:gradient-stops="purpleLineChart.gradientStops"
:extra-options="purpleLineChart.extraOptions">
<line-chart
style="height: 100%"
chart-id="purple-line-chart"
:chart-data="purpleLineChart.chartData"
:gradient-colors="purpleLineChart.gradientColors"
:gradient-stops="purpleLineChart.gradientStops"
:extra-options="purpleLineChart.extraOptions"
>
</line-chart>
</div>
</card>
</div>
<div class="col-lg-4" :class="{'text-right': isRTL}">
<div class="col-lg-4" :class="{ 'text-right': isRTL }">
<card type="chart">
<template slot="header">
<h5 class="card-category">{{$t('dashboard.dailySales')}}</h5>
<h3 class="card-title"><i class="tim-icons icon-delivery-fast text-info "></i> 3,500</h3>
<h5 class="card-category">{{ $t("dashboard.dailySales") }}</h5>
<h3 class="card-title">
<i class="tim-icons icon-delivery-fast text-info "></i> 3,500
</h3>
</template>
<div class="chart-area">
<bar-chart style="height: 100%"
chart-id="blue-bar-chart"
:chart-data="blueBarChart.chartData"
:gradient-stops="blueBarChart.gradientStops"
:extra-options="blueBarChart.extraOptions">
<bar-chart
style="height: 100%"
chart-id="blue-bar-chart"
:chart-data="blueBarChart.chartData"
:gradient-stops="blueBarChart.gradientStops"
:extra-options="blueBarChart.extraOptions"
>
</bar-chart>
</div>
</card>
</div>
<div class="col-lg-4" :class="{'text-right': isRTL}">
<div class="col-lg-4" :class="{ 'text-right': isRTL }">
<card type="chart">
<template slot="header">
<h5 class="card-category">{{$t('dashboard.completedTasks')}}</h5>
<h3 class="card-title"><i class="tim-icons icon-send text-success "></i> 12,100K</h3>
<h5 class="card-category">{{ $t("dashboard.completedTasks") }}</h5>
<h3 class="card-title">
<i class="tim-icons icon-send text-success "></i> 12,100K
</h3>
</template>
<div class="chart-area">
<line-chart style="height: 100%"
chart-id="green-line-chart"
:chart-data="greenLineChart.chartData"
:gradient-stops="greenLineChart.gradientStops"
:extra-options="greenLineChart.extraOptions">
<line-chart
style="height: 100%"
chart-id="green-line-chart"
:chart-data="greenLineChart.chartData"
:gradient-stops="greenLineChart.gradientStops"
:extra-options="greenLineChart.extraOptions"
>
</line-chart>
</div>
</card>
@ -95,19 +117,29 @@
</div>
<div class="row">
<div class="col-lg-6 col-md-12">
<card type="tasks" :header-classes="{'text-right': isRTL}">
<card type="tasks" :header-classes="{ 'text-right': isRTL }">
<template slot="header">
<h6 class="title d-inline">{{$t('dashboard.tasks', {count: 5})}}</h6>
<p class="card-category d-inline">{{$t('dashboard.today')}}</p>
<base-dropdown menu-on-right=""
tag="div"
title-classes="btn btn-link btn-icon"
aria-label="Settings menu"
:class="{'float-left': isRTL}">
<h6 class="title d-inline">
{{ $t("dashboard.tasks", { count: 5 }) }}
</h6>
<p class="card-category d-inline">{{ $t("dashboard.today") }}</p>
<base-dropdown
menu-on-right=""
tag="div"
title-classes="btn btn-link btn-icon"
aria-label="Settings menu"
:class="{ 'float-left': isRTL }"
>
<i slot="title" class="tim-icons icon-settings-gear-63"></i>
<a class="dropdown-item" href="#pablo">{{$t('dashboard.dropdown.action')}}</a>
<a class="dropdown-item" href="#pablo">{{$t('dashboard.dropdown.anotherAction')}}</a>
<a class="dropdown-item" href="#pablo">{{$t('dashboard.dropdown.somethingElse')}}</a>
<a class="dropdown-item" href="#pablo">{{
$t("dashboard.dropdown.action")
}}</a>
<a class="dropdown-item" href="#pablo">{{
$t("dashboard.dropdown.anotherAction")
}}</a>
<a class="dropdown-item" href="#pablo">{{
$t("dashboard.dropdown.somethingElse")
}}</a>
</base-dropdown>
</template>
<div class="table-full-width table-responsive">
@ -116,8 +148,10 @@
</card>
</div>
<div class="col-lg-6 col-md-12">
<card class="card" :header-classes="{'text-right': isRTL}">
<h4 slot="header" class="card-title">{{$t('dashboard.simpleTable')}}</h4>
<card class="card" :header-classes="{ 'text-right': isRTL }">
<h4 slot="header" class="card-title">
{{ $t("dashboard.simpleTable") }}
</h4>
<div class="table-responsive">
<user-table></user-table>
</div>
@ -127,43 +161,57 @@
</div>
</template>
<script>
import LineChart from '@/components/Charts/LineChart';
import BarChart from '@/components/Charts/BarChart';
import * as chartConfigs from '@/components/Charts/config';
import TaskList from './Dashboard/TaskList';
import UserTable from './Dashboard/UserTable';
import config from '@/config';
import LineChart from "@/components/Charts/LineChart";
import BarChart from "@/components/Charts/BarChart";
import * as chartConfigs from "@/components/Charts/config";
import TaskList from "./Dashboard/TaskList";
import UserTable from "./Dashboard/UserTable";
import config from "@/config";
export default {
components: {
LineChart,
BarChart,
TaskList,
UserTable
},
data() {
return {
bigLineChart: {
allData: [
[100, 70, 90, 70, 85, 60, 75, 60, 90, 80, 110, 100],
[80, 120, 105, 110, 95, 105, 90, 100, 80, 95, 70, 120],
[60, 80, 65, 130, 80, 105, 90, 130, 70, 115, 60, 130]
],
activeIndex: 0,
chartData: {
datasets: [{ }],
labels: ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'],
},
extraOptions: chartConfigs.purpleChartOptions,
gradientColors: config.colors.primaryGradient,
gradientStops: [1, 0.4, 0],
categories: []
export default {
components: {
LineChart,
BarChart,
TaskList,
UserTable
},
data() {
return {
bigLineChart: {
allData: [
[100, 70, 90, 70, 85, 60, 75, 60, 90, 80, 110, 100],
[80, 120, 105, 110, 95, 105, 90, 100, 80, 95, 70, 120],
[60, 80, 65, 130, 80, 105, 90, 130, 70, 115, 60, 130]
],
activeIndex: 0,
chartData: {
datasets: [{}],
labels: [
"JAN",
"FEB",
"MAR",
"APR",
"MAY",
"JUN",
"JUL",
"AUG",
"SEP",
"OCT",
"NOV",
"DEC"
]
},
purpleLineChart: {
extraOptions: chartConfigs.purpleChartOptions,
chartData: {
labels: ['JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'],
datasets: [{
extraOptions: chartConfigs.purpleChartOptions,
gradientColors: config.colors.primaryGradient,
gradientStops: [1, 0.4, 0],
categories: []
},
purpleLineChart: {
extraOptions: chartConfigs.purpleChartOptions,
chartData: {
labels: ["JUL", "AUG", "SEP", "OCT", "NOV", "DEC"],
datasets: [
{
label: "Data",
fill: true,
borderColor: config.colors.primary,
@ -171,23 +219,25 @@
borderDash: [],
borderDashOffset: 0.0,
pointBackgroundColor: config.colors.primary,
pointBorderColor: 'rgba(255,255,255,0)',
pointBorderColor: "rgba(255,255,255,0)",
pointHoverBackgroundColor: config.colors.primary,
pointBorderWidth: 20,
pointHoverRadius: 4,
pointHoverBorderWidth: 15,
pointRadius: 4,
data: [80, 100, 70, 80, 120, 80],
}]
},
gradientColors: config.colors.primaryGradient,
gradientStops: [1, 0.2, 0],
data: [80, 100, 70, 80, 120, 80]
}
]
},
greenLineChart: {
extraOptions: chartConfigs.greenChartOptions,
chartData: {
labels: ['JUL', 'AUG', 'SEP', 'OCT', 'NOV'],
datasets: [{
gradientColors: config.colors.primaryGradient,
gradientStops: [1, 0.2, 0]
},
greenLineChart: {
extraOptions: chartConfigs.greenChartOptions,
chartData: {
labels: ["JUL", "AUG", "SEP", "OCT", "NOV"],
datasets: [
{
label: "My First dataset",
fill: true,
borderColor: config.colors.danger,
@ -195,88 +245,109 @@
borderDash: [],
borderDashOffset: 0.0,
pointBackgroundColor: config.colors.danger,
pointBorderColor: 'rgba(255,255,255,0)',
pointBorderColor: "rgba(255,255,255,0)",
pointHoverBackgroundColor: config.colors.danger,
pointBorderWidth: 20,
pointHoverRadius: 4,
pointHoverBorderWidth: 15,
pointRadius: 4,
data: [90, 27, 60, 12, 80],
}]
},
gradientColors: ['rgba(66,134,121,0.15)', 'rgba(66,134,121,0.0)', 'rgba(66,134,121,0)'],
gradientStops: [1, 0.4, 0],
data: [90, 27, 60, 12, 80]
}
]
},
blueBarChart: {
extraOptions: chartConfigs.barChartOptions,
chartData: {
labels: ['USA', 'GER', 'AUS', 'UK', 'RO', 'BR'],
datasets: [{
gradientColors: [
"rgba(66,134,121,0.15)",
"rgba(66,134,121,0.0)",
"rgba(66,134,121,0)"
],
gradientStops: [1, 0.4, 0]
},
blueBarChart: {
extraOptions: chartConfigs.barChartOptions,
chartData: {
labels: ["USA", "GER", "AUS", "UK", "RO", "BR"],
datasets: [
{
label: "Countries",
fill: true,
borderColor: config.colors.info,
borderWidth: 2,
borderDash: [],
borderDashOffset: 0.0,
data: [53, 20, 10, 80, 100, 45],
}]
},
gradientColors: config.colors.primaryGradient,
gradientStops: [1, 0.4, 0],
}
data: [53, 20, 10, 80, 100, 45]
}
]
},
gradientColors: config.colors.primaryGradient,
gradientStops: [1, 0.4, 0]
}
};
},
computed: {
enableRTL() {
return this.$route.query.enableRTL;
},
computed: {
enableRTL() {
return this.$route.query.enableRTL;
},
isRTL() {
return this.$rtl.isRTL;
},
bigLineChartCategories() {
return this.$t('dashboard.chartCategories');
}
isRTL() {
return this.$rtl.isRTL;
},
methods: {
initBigChart(index) {
let chartData = {
datasets: [{
bigLineChartCategories() {
return this.$t("dashboard.chartCategories");
}
},
methods: {
initBigChart(index) {
let chartData = {
datasets: [
{
fill: true,
borderColor: config.colors.primary,
borderWidth: 2,
borderDash: [],
borderDashOffset: 0.0,
pointBackgroundColor: config.colors.primary,
pointBorderColor: 'rgba(255,255,255,0)',
pointBorderColor: "rgba(255,255,255,0)",
pointHoverBackgroundColor: config.colors.primary,
pointBorderWidth: 20,
pointHoverRadius: 4,
pointHoverBorderWidth: 15,
pointRadius: 4,
data: this.bigLineChart.allData[index]
}],
labels: ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'],
}
this.$refs.bigChart.updateGradients(chartData);
this.bigLineChart.chartData = chartData;
this.bigLineChart.activeIndex = index;
}
},
mounted() {
this.i18n = this.$i18n;
if (this.enableRTL) {
this.i18n.locale = 'ar';
this.$rtl.enableRTL();
}
this.initBigChart(0);
},
beforeDestroy() {
if (this.$rtl.isRTL) {
this.i18n.locale = 'en';
this.$rtl.disableRTL();
}
}
],
labels: [
"JAN",
"FEB",
"MAR",
"APR",
"MAY",
"JUN",
"JUL",
"AUG",
"SEP",
"OCT",
"NOV",
"DEC"
]
};
this.$refs.bigChart.updateGradients(chartData);
this.bigLineChart.chartData = chartData;
this.bigLineChart.activeIndex = index;
}
},
mounted() {
this.i18n = this.$i18n;
if (this.enableRTL) {
this.i18n.locale = "ar";
this.$rtl.enableRTL();
}
this.initBigChart(0);
},
beforeDestroy() {
if (this.$rtl.isRTL) {
this.i18n.locale = "en";
this.$rtl.disableRTL();
}
};
}
};
</script>
<style>
</style>
<style></style>

53
src/pages/MainSec/OrderTable.vue

@ -102,6 +102,15 @@
</template>
</el-table-column>
</el-table>
<el-pagination
small
:hide-on-single-page="true"
layout="prev, pager, next"
:total="historyOrdersPagination.total"
:page-size="historyOrdersPagination.pageSize"
:current-page="historyOrdersPagination.current"
>
</el-pagination>
</div>
</template>
<script>
@ -113,14 +122,48 @@ export default {
data() {
return {
columns: secondTradeColumns,
data: []
data: [],
historyOrdersPagination: { current: 1, pageSize: 15 }
};
},
mounted() {
this.init();
},
mounted() {},
methods: {
init() {}
initOrders() {
this.initHistoryOrders();
this.initNowOrders();
},
initHistoryOrders() {
let pageIndex = this.historyOrdersPagination.current;
let pageSize = this.historyOrdersPagination.pageSize;
this.$http
.get(
`/Api/Order/GetHistorySpotGoodsOrder?pageIndex=${pageIndex}&pageSize=${pageSize}&robotId=${this.RobotId}`
)
.then(res => {
if (res.Code == 200) {
this.historyOrders = res.Data.List;
const pager = { ...this.historyOrdersPagination };
pager.total = res.Data.Count;
this.historyOrdersPagination = pager;
}
});
},
//
historyOrdersChange(pagination) {
this.historyOrdersPagination = pagination;
this.initHistoryOrders();
},
initNowOrders() {
this.$http
.get(`/Api/Order/GetRuningSpotGoodsOrder?robotId=${this.RobotId}`)
.then(res => {
if (res.Code == 200) {
this.nowOrders = res.Data;
}
});
}
}
};
</script>

11
src/pages/RobotSec/index.vue

@ -36,8 +36,8 @@
</el-switch>
</template>
<!-- 运行时长 -->
<template slot="WorkTime" slot-scope="item" v-if="item.row.item.Time">{{
secToMin(item.row.item.Time)
<template slot="WorkTime" slot-scope="item" v-if="item.row.item.Robot">{{
secToMin(item.row.item.Robot.RunningTime)
}}</template>
<!-- 策略配置 -->
<template
@ -88,7 +88,7 @@
</div>
<div class="col-md-4">
<base-button @click="goCheck(item.row.item.Id)">查看</base-button>
<base-button @click="goCheck(item.row.item.Robot.Id)">查看</base-button>
</div>
</div>
</template>
@ -132,7 +132,7 @@ const tableColumns = [
customSlot: "WorkTime"
},
{ name: "策略配置", prop: "Robot.SaleSetting", customSlot: "Setting" },
{ name: "委托单", prop: "Robot.SaleSetting", customSlot: "OrderPlan" },
// { name: "", prop: "Robot.SaleSetting", customSlot: "OrderPlan" },
{ name: "操作", prop: "Action", customSlot: "Action" }
];
@ -239,7 +239,8 @@ export default {
goCheck(id) {
this.$router.push(`/editt/${id}`);
}, // showNotification
},
// showNotification
sMessage(type, message) {
this.$notify({
type: type,

127
src/pages/SignalSender/index.vue

@ -0,0 +1,127 @@
<template>
<card>
<!-- 关联交易对 -->
<div>
<p class="form-label" style="color:rgba(255, 255, 255, 0.6)">
交易对
</p>
<el-select
class="select-danger"
placeholder="选择交易对"
style="width:100%"
v-model="form.Symbol"
>
<el-option
v-for="item in allSymbol"
class="select-danger"
:value="item.Symbol"
:label="item.Symbol"
:key="item.Symbol"
>
</el-option>
</el-select>
</div>
<!-- 信号类型 -->
<div>
<p class="form-label" style="color:rgba(255, 255, 255, 0.6)">
信号类型
</p>
<el-select
class="select-danger"
placeholder="选择信号类型"
style="width:100%"
v-model="form.NotifyType"
>
<el-option
v-for="item in LogTypes"
class="select-danger"
:value="item.value"
:label="item.title"
:key="item.value"
>
</el-option>
</el-select>
</div>
<!-- 周期 -->
<div>
<p class="form-label" style="color:rgba(255, 255, 255, 0.6)">
周期
</p>
<el-select
class="select-danger"
placeholder="选择周期"
style="width:100%"
v-model="form.KLinePeriodic"
>
<el-option
v-for="item in periodSignal"
class="select-danger"
:value="item.value"
:label="item.title"
:key="item.value"
>
</el-option>
</el-select>
</div>
<base-checkbox inline v-model="form.IsDebug">
isDebug
</base-checkbox>
<base-input
label="请输入收盘价"
v-model="form.ClosePrice"
v-if="form.IsDebug"
></base-input>
<div>
<base-button @click="sendSignal" :loading="loading">发送信号</base-button>
</div>
</card>
</template>
<script>
import { LogTypes, periodSignal } from "../prePages/js/selectoptions";
export default {
data() {
return {
form: { IsDebug: false },
allSymbol: [],
LogTypes,
loading: false,
periodSignal
};
},
created() {
this.getAllSymbol();
},
methods: {
//
getAllSymbol() {
this.$http.get("/Api/Symbol/GetList").then(res => {
if (res.Code == 200) {
this.allSymbol = res.Data;
}
});
},
sendSignal() {
let params = this.form;
if (!this.form.IsDebug) delete params.ClosePrice;
console.log(params);
this.loading = true;
this.$http.post("/Api/Signal/ReceiveSignal", params).then(res => {
this.loading = false;
if (res.Code == 200) {
this.sMessage("success", "发送成功");
} else {
this.sMessage("danger", res.Message);
}
});
},
// showNotification
sMessage(type, message) {
this.$notify({
type: type,
message,
timeout: 1800
});
}
}
};
</script>

8
src/router/routes.js

@ -21,6 +21,7 @@ const RobotSec = () => import("@/pages/RobotSec");
const AccountSec = () => import("@/pages/RobotSec/Account");
const MainSec = () => import("@/pages/MainSec");
const MainAccount = () => import("@/pages/MainAccount");
const SignalSender = () => import("@/pages/SignalSender");
const routes = [
{
@ -93,8 +94,13 @@ const routes = [
name: "mainAccount",
meta: { auth: true },
component: MainAccount
},
{
path: "signalSender",
name: "signalSender",
meta: { auth: true },
component: SignalSender
}
// {
// path: "profile",
// name: "profile",

6
src/utils/TimeUtils.js

@ -1,4 +1,4 @@
export const secToMin = (s) => {
export const secToMin = s => {
let min = Math.floor(s / 60);
let _min = min % 60;
let hour = Math.floor(min / 60);
@ -8,8 +8,6 @@ export const secToMin = (s) => {
return (
(day == 0 ? "" : `${day}`) +
(hour == 0 ? "" : `${_hour}`) +
(min == 0 ? "" : `${_min}`) +
sec +
"秒"
(min == 0 ? "" : `${_min}`)
);
};

Loading…
Cancel
Save