|
@@ -3,18 +3,12 @@
|
|
|
<div class="chart-container">
|
|
<div class="chart-container">
|
|
|
<div class="chart-content">
|
|
<div class="chart-content">
|
|
|
<div class="chart-content__header">
|
|
<div class="chart-content__header">
|
|
|
- <a-menu class="chart-content__tabs" v-model:selectedKeys="activeCycleName" mode="horizontal" @click="changeCycleType">
|
|
|
|
|
- <a-menu-item v-for="item in chartType" :key="item.name">{{ item.label }}</a-menu-item>
|
|
|
|
|
- </a-menu>
|
|
|
|
|
- <a-menu class="chart-content__tabs" v-model:selectedKeys="activeSeriesType" mode="horizontal" v-if="activeCycleType !== CycleType.time">
|
|
|
|
|
- <a-menu-item key="MACD">MACD</a-menu-item>
|
|
|
|
|
- <a-menu-item key="VOL">VOL</a-menu-item>
|
|
|
|
|
- <a-menu-item key="KDJ">KDJ</a-menu-item>
|
|
|
|
|
- <a-menu-item key="CCI">CCI</a-menu-item>
|
|
|
|
|
- </a-menu>
|
|
|
|
|
|
|
+ <mtp-tabbar theme="menu" :data="chartType" v-model:active="activeCycleType" @change="changeCycleType" />
|
|
|
</div>
|
|
</div>
|
|
|
- <echart-time class="chart-content__main" :quote-data="selectedRow" @change="getHistoryTikDatas" v-if="activeCycleType === CycleType.time"></echart-time>
|
|
|
|
|
- <echart-kline class="chart-content__main" :quote-data="selectedRow" :cycle-type="activeCycleType" :series-type="activeSeriesType[0]" v-else></echart-kline>
|
|
|
|
|
|
|
+ <!-- K线 -->
|
|
|
|
|
+ <mtp-echarts-timeline class="chart-content__main" :goodscode="selectedRow.goodscode" @ready="getHistoryTikDatas" v-if="chartType[activeCycleType].code === CycleType.time" />
|
|
|
|
|
+ <!-- 分时线 -->
|
|
|
|
|
+ <mtp-echarts-kline class="chart-content__main" :cycle-type="activeCycleType" :goodscode="selectedRow.goodscode" v-else />
|
|
|
<div class="chart-content__footer"></div>
|
|
<div class="chart-content__footer"></div>
|
|
|
</div>
|
|
</div>
|
|
|
<div class="chart-slider">
|
|
<div class="chart-slider">
|
|
@@ -136,118 +130,118 @@
|
|
|
import { defineComponent } from '@/common/export/commonTable';
|
|
import { defineComponent } from '@/common/export/commonTable';
|
|
|
import { _closeModal } from '@/common/setup/modal/modal';
|
|
import { _closeModal } from '@/common/setup/modal/modal';
|
|
|
import { PropType, ref, watch } from 'vue';
|
|
import { PropType, ref, watch } from 'vue';
|
|
|
-import { QueryQuoteDayRsp, QueryHistoryTikDatasRsp, CycleType } from '@/services/go/quote/interface';
|
|
|
|
|
|
|
+import { QueryQuoteDayRsp, QueryHistoryTikDatasRsp } from '@/services/go/quote/interface';
|
|
|
import { QueryHistoryTikDatas } from '@/services/go/quote';
|
|
import { QueryHistoryTikDatas } from '@/services/go/quote';
|
|
|
import { formatTime } from '@/common/methods';
|
|
import { formatTime } from '@/common/methods';
|
|
|
import { changeUnit } from '@/utils/qt/common';
|
|
import { changeUnit } from '@/utils/qt/common';
|
|
|
import { ComponentType } from '@/views/market/spot_trade/spot_trade_order_transaction/setup';
|
|
import { ComponentType } from '@/views/market/spot_trade/spot_trade_order_transaction/setup';
|
|
|
-import { EchartKline, EchartTime } from '@/common/components/echart';
|
|
|
|
|
import { handleQuotePriceColor, quoteChange, handleNoneValue, quoteAmplitude } from '@/common/setup/table/tableQuote';
|
|
import { handleQuotePriceColor, quoteChange, handleNoneValue, quoteAmplitude } from '@/common/setup/table/tableQuote';
|
|
|
import moment from 'moment';
|
|
import moment from 'moment';
|
|
|
|
|
+import { CycleType } from '@/common/components/echarts/echarts-kline/type';
|
|
|
|
|
+import MtpEchartsKline from '@/common/components/echarts/echarts-kline/index.vue';
|
|
|
|
|
+import MtpEchartsTimeline from '@/common/components/echarts/echarts-timeline/index.vue';
|
|
|
|
|
+import MtpTabbar from '@/common/components/tabbar/index.vue';
|
|
|
|
|
|
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
|
- emits: ['cancel', 'update'],
|
|
|
|
|
- name: 'stock-exchange',
|
|
|
|
|
- components: {
|
|
|
|
|
- EchartKline,
|
|
|
|
|
- EchartTime,
|
|
|
|
|
|
|
+ emits: ['cancel', 'update'],
|
|
|
|
|
+ name: 'stock-exchange',
|
|
|
|
|
+ components: {
|
|
|
|
|
+ MtpEchartsKline,
|
|
|
|
|
+ MtpEchartsTimeline,
|
|
|
|
|
+ MtpTabbar,
|
|
|
|
|
+ },
|
|
|
|
|
+ props: {
|
|
|
|
|
+ selectedRow: {
|
|
|
|
|
+ type: Object as PropType<QueryQuoteDayRsp>,
|
|
|
|
|
+ default: {},
|
|
|
},
|
|
},
|
|
|
- props: {
|
|
|
|
|
- selectedRow: {
|
|
|
|
|
- type: Object as PropType<QueryQuoteDayRsp>,
|
|
|
|
|
- default: {},
|
|
|
|
|
- },
|
|
|
|
|
- showExchange: {
|
|
|
|
|
- type: Boolean,
|
|
|
|
|
- default: true,
|
|
|
|
|
- },
|
|
|
|
|
|
|
+ showExchange: {
|
|
|
|
|
+ type: Boolean,
|
|
|
|
|
+ default: true,
|
|
|
},
|
|
},
|
|
|
- setup(props, context) {
|
|
|
|
|
- const { visible, cancel } = _closeModal(context),
|
|
|
|
|
- activeCycleName = ref<string[]>(['time']),
|
|
|
|
|
- activeCycleType = ref<CycleType>(CycleType.time),
|
|
|
|
|
- activeSeriesType = ref<string[]>(['MACD']),
|
|
|
|
|
- tradedList = ref<QueryHistoryTikDatasRsp[]>([]);
|
|
|
|
|
|
|
+ },
|
|
|
|
|
+ setup(props, context) {
|
|
|
|
|
+ const { visible, cancel } = _closeModal(context),
|
|
|
|
|
+ activeCycleType = ref(0), // 当前选中的图表周期
|
|
|
|
|
+ tradedList = ref<QueryHistoryTikDatasRsp[]>([]);
|
|
|
|
|
|
|
|
- function watchMore() {
|
|
|
|
|
- context.emit('update', ComponentType.marketContent);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ function watchMore() {
|
|
|
|
|
+ context.emit('update', ComponentType.marketContent);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- // 周期类型
|
|
|
|
|
- const chartType = [
|
|
|
|
|
- { label: '分时', name: 'time', value: CycleType.time },
|
|
|
|
|
- { label: '1分钟', name: 'minutes', value: CycleType.minutes },
|
|
|
|
|
- { label: '5分钟', name: 'minutes5', value: CycleType.minutes5 },
|
|
|
|
|
- { label: '30分钟', name: 'minutes30', value: CycleType.minutes30 },
|
|
|
|
|
- { label: '60分钟', name: 'minutes60', value: CycleType.minutes60 },
|
|
|
|
|
- { label: '4小时', name: 'Hours4', value: CycleType.Hours4 },
|
|
|
|
|
- { label: '日 K', name: 'days', value: CycleType.days },
|
|
|
|
|
- ];
|
|
|
|
|
|
|
+ // 周期类型
|
|
|
|
|
+ const chartType = [
|
|
|
|
|
+ { code: CycleType.time, label: '分时' },
|
|
|
|
|
+ { code: CycleType.minutes, label: '1分钟' },
|
|
|
|
|
+ { code: CycleType.minutes5, label: '5分钟' },
|
|
|
|
|
+ { code: CycleType.minutes30, label: '30分钟' },
|
|
|
|
|
+ { code: CycleType.minutes60, label: '60分钟' },
|
|
|
|
|
+ { code: CycleType.Hours4, label: '4小时' },
|
|
|
|
|
+ { code: CycleType.days, label: '日K' },
|
|
|
|
|
+ ];
|
|
|
|
|
|
|
|
- // 切换图表周期类型
|
|
|
|
|
- const changeCycleType = (e: { key: string }) => {
|
|
|
|
|
- activeCycleType.value = chartType.find((item) => item.name === e.key)!.value;
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ // 切换图表周期类型
|
|
|
|
|
+ const changeCycleType = (index: number) => {
|
|
|
|
|
+ activeCycleType.value = index;
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
- // Tik列表
|
|
|
|
|
- const getHistoryTikDatas = (startTime: string, endTime: string) => {
|
|
|
|
|
- const param = {
|
|
|
|
|
- goodsCode: props.selectedRow.goodscode.toUpperCase(),
|
|
|
|
|
- count: 20,
|
|
|
|
|
- startTime: moment(startTime).format('YYYY-MM-DD HH:mm:ss'),
|
|
|
|
|
- endTime: moment(endTime).format('YYYY-MM-DD HH:mm:ss'),
|
|
|
|
|
- };
|
|
|
|
|
- QueryHistoryTikDatas(param).then((res) => {
|
|
|
|
|
- tradedList.value = res;
|
|
|
|
|
- });
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ // Tik列表
|
|
|
|
|
+ const getHistoryTikDatas = (startTime: string, endTime: string) => {
|
|
|
|
|
+ const param = {
|
|
|
|
|
+ goodsCode: props.selectedRow.goodscode.toUpperCase(),
|
|
|
|
|
+ count: 20,
|
|
|
|
|
+ startTime: moment(startTime).format('YYYY-MM-DD HH:mm:ss'),
|
|
|
|
|
+ endTime: moment(endTime).format('YYYY-MM-DD HH:mm:ss'),
|
|
|
|
|
+ };
|
|
|
|
|
+ QueryHistoryTikDatas(param).then((res) => {
|
|
|
|
|
+ tradedList.value = res;
|
|
|
|
|
+ });
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
- // 监听行情变化刷Tik列表
|
|
|
|
|
- watch(
|
|
|
|
|
- () => props.selectedRow.last,
|
|
|
|
|
- () => {
|
|
|
|
|
- if (tradedList.value.length > 19) {
|
|
|
|
|
- // 移除列表最后一条记录
|
|
|
|
|
- tradedList.value.pop();
|
|
|
|
|
- }
|
|
|
|
|
- // 向列表开头添加新纪录
|
|
|
|
|
- tradedList.value.unshift({
|
|
|
|
|
- AV: 0,
|
|
|
|
|
- Ask: 0,
|
|
|
|
|
- BV: 0,
|
|
|
|
|
- Bid: 0,
|
|
|
|
|
- HI: 0,
|
|
|
|
|
- HV: 0,
|
|
|
|
|
- PE: props.selectedRow.last,
|
|
|
|
|
- TDR: 0,
|
|
|
|
|
- TK: 0,
|
|
|
|
|
- TS: props.selectedRow.lasttime,
|
|
|
|
|
- TT: 0,
|
|
|
|
|
- Vol: props.selectedRow.lastvolume,
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
- );
|
|
|
|
|
|
|
+ // 监听行情变化刷Tik列表
|
|
|
|
|
+ watch(
|
|
|
|
|
+ () => props.selectedRow.last,
|
|
|
|
|
+ () => {
|
|
|
|
|
+ if (tradedList.value.length > 19) {
|
|
|
|
|
+ // 移除列表最后一条记录
|
|
|
|
|
+ tradedList.value.pop();
|
|
|
|
|
+ }
|
|
|
|
|
+ // 向列表开头添加新纪录
|
|
|
|
|
+ tradedList.value.unshift({
|
|
|
|
|
+ AV: 0,
|
|
|
|
|
+ Ask: 0,
|
|
|
|
|
+ BV: 0,
|
|
|
|
|
+ Bid: 0,
|
|
|
|
|
+ HI: 0,
|
|
|
|
|
+ HV: 0,
|
|
|
|
|
+ PE: props.selectedRow.last,
|
|
|
|
|
+ TDR: 0,
|
|
|
|
|
+ TK: 0,
|
|
|
|
|
+ TS: props.selectedRow.lasttime,
|
|
|
|
|
+ TT: 0,
|
|
|
|
|
+ Vol: props.selectedRow.lastvolume,
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ );
|
|
|
|
|
|
|
|
- return {
|
|
|
|
|
- cancel,
|
|
|
|
|
- visible,
|
|
|
|
|
- chartType,
|
|
|
|
|
- tradedList,
|
|
|
|
|
- CycleType,
|
|
|
|
|
- activeCycleName,
|
|
|
|
|
- activeCycleType,
|
|
|
|
|
- activeSeriesType,
|
|
|
|
|
- changeUnit,
|
|
|
|
|
- watchMore,
|
|
|
|
|
- formatTime,
|
|
|
|
|
- quoteChange,
|
|
|
|
|
- handleNoneValue,
|
|
|
|
|
- quoteAmplitude,
|
|
|
|
|
- handleQuotePriceColor,
|
|
|
|
|
- changeCycleType,
|
|
|
|
|
- getHistoryTikDatas,
|
|
|
|
|
- };
|
|
|
|
|
- },
|
|
|
|
|
|
|
+ return {
|
|
|
|
|
+ cancel,
|
|
|
|
|
+ visible,
|
|
|
|
|
+ chartType,
|
|
|
|
|
+ tradedList,
|
|
|
|
|
+ CycleType,
|
|
|
|
|
+ activeCycleType,
|
|
|
|
|
+ changeUnit,
|
|
|
|
|
+ watchMore,
|
|
|
|
|
+ formatTime,
|
|
|
|
|
+ quoteChange,
|
|
|
|
|
+ handleNoneValue,
|
|
|
|
|
+ quoteAmplitude,
|
|
|
|
|
+ handleQuotePriceColor,
|
|
|
|
|
+ changeCycleType,
|
|
|
|
|
+ getHistoryTikDatas,
|
|
|
|
|
+ };
|
|
|
|
|
+ },
|
|
|
});
|
|
});
|
|
|
</script>
|
|
</script>
|
|
|
|
|
|