You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
349 lines
8.4 KiB
349 lines
8.4 KiB
<template>
|
|
<view class="main">
|
|
<view :style="{height:iSMT+'px'}"></view>
|
|
|
|
<view class="time-share-title">
|
|
<text>分时设计</text>
|
|
</view>
|
|
<view style="height:57.5vh;background-color: white;">
|
|
<view class="title">A股竞价</view>
|
|
<view class="top-options">
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': aStockBid === 'auto' }"
|
|
@click="handleAStockBidChange('auto')"
|
|
>
|
|
<text>智能开启</text>
|
|
<view class="active-dot" v-if="aStockBid === 'auto'"></view>
|
|
</view>
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': aStockBid === 'open' }"
|
|
@click="handleAStockBidChange('open')"
|
|
>
|
|
<text>保持开启</text>
|
|
<view class="active-dot" v-if="aStockBid === 'open'"></view>
|
|
</view>
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': aStockBid === 'close' }"
|
|
@click="handleAStockBidChange('close')"
|
|
>
|
|
<text>保持关闭</text>
|
|
<view class="active-dot" v-if="aStockBid === 'close'"></view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="title">K线样式</view>
|
|
<view class="top-options">
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': kStyle === 'common' }"
|
|
@click="handleKStyleChange('common')"
|
|
>
|
|
<image src="../../static/my/common.png" class="kline-icon" />
|
|
<text>普通</text>
|
|
<view class="active-dot" v-if="kStyle === 'common'"></view>
|
|
</view>
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': kStyle === 'outline' }"
|
|
@click="handleKStyleChange('outline')"
|
|
>
|
|
<image src="../../static/my/outline.png" class="kline-icon" />
|
|
<text>轮廓图</text>
|
|
<view class="active-dot" v-if="kStyle === 'outline'"></view>
|
|
</view>
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': kStyle === 'polylines' }"
|
|
@click="handleKStyleChange('polylines')"
|
|
>
|
|
<image src="../../static/my/polylines.png" class="kline-icon" />
|
|
<text>折线图</text>
|
|
<view class="active-dot" v-if="kStyle === 'polylines'"></view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="title">除权类型</view>
|
|
<view class="top-options">
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': exRights === 'exRights' }"
|
|
@click="handleExRightsChange('exRights')"
|
|
>
|
|
<text>除权</text>
|
|
<view class="active-dot" v-if="exRights === 'exRights'"></view>
|
|
</view>
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': exRights === 'normal' }"
|
|
@click="handleExRightsChange('normal')"
|
|
>
|
|
<text>普通</text>
|
|
<view class="active-dot" v-if="exRights === 'normal'"></view>
|
|
</view>
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': exRights === 'weighted' }"
|
|
@click="handleExRightsChange('weighted')"
|
|
>
|
|
<text>加权</text>
|
|
<view class="active-dot" v-if="exRights === 'weighted'"></view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="title">涨跌颜色</view>
|
|
<view class="top-options">
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': rfColor === 'greenUp' }"
|
|
@click="handleRfColorChange('greenUp')"
|
|
>
|
|
<view class="color-icon">
|
|
<image src="../../static/my/greenRise.png" class="kline-icon" />
|
|
</view>
|
|
<text>绿涨红跌</text>
|
|
<view class="active-dot" v-if="rfColor === 'greenUp'"></view>
|
|
</view>
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': rfColor === 'red' }"
|
|
@click="handleRfColorChange('red')"
|
|
>
|
|
<view class="color-icon">
|
|
<image src="../../static/my/redRise.png" class="kline-icon" />
|
|
</view>
|
|
<text>红涨绿跌</text>
|
|
<view class="active-dot" v-if="rfColor === 'redUp'"></view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="title">副图指标个数</view>
|
|
<view class="top-options">
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': indexCount === 1 }"
|
|
@click="handleIndexCountChange(1)"
|
|
>
|
|
<text>1</text>
|
|
</view>
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': indexCount === 2 }"
|
|
@click="handleIndexCountChange(2)"
|
|
>
|
|
<text>2</text>
|
|
</view>
|
|
<view
|
|
class="option-btn"
|
|
:class="{ 'active': indexCount === 3 }"
|
|
@click="handleIndexCountChange(3)"
|
|
>
|
|
<text>3</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- <view class="indicator-title">
|
|
<text>指标设置</text>
|
|
</view>
|
|
<view class="indicator-list">
|
|
<view class="indicator-item" v-for="(item, index) in indicatorList" :key="index">
|
|
<text class="indicator-text">{{ item }}</text>
|
|
<view class="indicator-icons">
|
|
<image src="../../static/my/setting.png" class="icon" />
|
|
<image src="../../static/my/menu.png" class="icon" />
|
|
</view>
|
|
</view>
|
|
<view style="height:10vh;background-color: white;"></view>
|
|
</view> -->
|
|
</view>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { ref, onMounted } from 'vue'
|
|
import { getMarketSetting, updateMarketSetting } from "@/api/setting/market"
|
|
|
|
const iSMT = ref(0)
|
|
const aStockBid = ref('auto') // A股竞价:auto/open/close
|
|
const kStyle = ref('common') // K线样式:common/outline/polylines
|
|
const exRights = ref('exRights') // 除权类型:exRights/normal/weighted
|
|
const rfColor = ref('greenUp') // 涨跌颜色:greenUp/redUp
|
|
const indexCount = ref(1) // 副图个数:1/2/3
|
|
const indicatorList = ref(['K线', '均线', '成交量', 'KDJ', 'MACD', 'RSI'])
|
|
|
|
const getMarketSettings = async () => {
|
|
try {
|
|
const res = await getMarketSetting()
|
|
if (res.code === 200) {
|
|
aStockBid.value = res.data.auctionDisplay ?? 'auto'
|
|
kStyle.value = res.data.klineStyle ?? 'common'
|
|
exRights.value = res.data.rightsIssueType ?? 'exRights'
|
|
rfColor.value = res.data.priceColorScheme ?? 'greenUp'
|
|
indexCount.value = res.data.subChartCount ?? 1
|
|
}
|
|
} catch (err) {
|
|
console.error("获取市场设置失败:", err)
|
|
}
|
|
}
|
|
|
|
const updateSetting = async () => {
|
|
try {
|
|
const params = {
|
|
auctionDisplay: aStockBid.value,
|
|
klineStyle: kStyle.value,
|
|
rightsIssueType: exRights.value,
|
|
priceColorScheme: rfColor.value,
|
|
subChartCount: indexCount.value
|
|
}
|
|
const res = await updateMarketSetting(params)
|
|
if (res.code === 200) {
|
|
uni.showToast({ title: '设置已更新', icon: 'none' })
|
|
} else {
|
|
uni.showToast({ title: '更新失败', icon: 'none' })
|
|
}
|
|
} catch (err) {
|
|
console.error("更新设置失败:", err)
|
|
uni.showToast({ title: '更新失败', icon: 'none' })
|
|
}
|
|
}
|
|
|
|
const handleAStockBidChange = (newValue) => {
|
|
if (newValue !== aStockBid.value) {
|
|
aStockBid.value = newValue
|
|
updateSetting()
|
|
}
|
|
}
|
|
|
|
const handleKStyleChange = (newValue) => {
|
|
if (newValue !== kStyle.value) {
|
|
kStyle.value = newValue
|
|
updateSetting()
|
|
}
|
|
}
|
|
|
|
const handleExRightsChange = (newValue) => {
|
|
if (newValue !== exRights.value) {
|
|
exRights.value = newValue
|
|
updateSetting()
|
|
}
|
|
}
|
|
|
|
const handleRfColorChange = (newValue) => {
|
|
if (newValue !== rfColor.value) {
|
|
rfColor.value = newValue
|
|
updateSetting()
|
|
}
|
|
}
|
|
|
|
const handleIndexCountChange = (newValue) => {
|
|
if (newValue !== indexCount.value) {
|
|
indexCount.value = newValue
|
|
updateSetting()
|
|
}
|
|
}
|
|
|
|
onMounted(() => {
|
|
iSMT.value = uni.getSystemInfoSync().statusBarHeight;
|
|
getMarketSettings()
|
|
})
|
|
</script>
|
|
|
|
<style scoped>
|
|
.time-share-title {
|
|
height: 4.5vh;
|
|
padding: 0 40rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.title {
|
|
height: 5.5vh;
|
|
padding: 0 40rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
font-size: 26rpx;
|
|
color: #666;
|
|
}
|
|
|
|
.top-options {
|
|
display: flex;
|
|
padding: 0 40rpx;
|
|
}
|
|
|
|
.option-btn {
|
|
flex: 1;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border: 1rpx solid #ddd;
|
|
border-radius: 8rpx;
|
|
margin: 0 10rpx;
|
|
padding: 15rpx 0;
|
|
font-size: 28rpx;
|
|
}
|
|
|
|
.option-btn.active {
|
|
border-color: red;
|
|
}
|
|
|
|
.active-dot {
|
|
width: 16rpx;
|
|
height: 16rpx;
|
|
background-color: red;
|
|
border-radius: 50%;
|
|
margin-left: 10rpx;
|
|
}
|
|
|
|
.kline-icon {
|
|
margin-right: 10rpx;
|
|
font-size: 32rpx;
|
|
width:60rpx;
|
|
height:50rpx;
|
|
}
|
|
|
|
.color-icon {
|
|
margin-right: 10rpx;
|
|
display: flex;
|
|
gap: 4rpx;
|
|
}
|
|
|
|
.indicator-title {
|
|
height: 6vh;
|
|
padding: 0 40rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.indicator-list {
|
|
display: flex;
|
|
flex-direction: column;
|
|
justify-content: center;
|
|
padding: 0 40rpx;
|
|
background-color: white;
|
|
}
|
|
|
|
.indicator-item {
|
|
display: flex;
|
|
align-items: center;
|
|
height: 7.5vh;
|
|
border-bottom: 1rpx solid #eee;
|
|
}
|
|
|
|
.indicator-text {
|
|
font-size: 28rpx;
|
|
flex: 1;
|
|
}
|
|
|
|
.indicator-icons {
|
|
display: flex;
|
|
gap: 100rpx;
|
|
margin-left: auto;
|
|
}
|
|
|
|
.icon {
|
|
width: 28rpx;
|
|
height: 28rpx;
|
|
}
|
|
</style>
|