From f1aaecc9dc0a3d680f2f693ee963d5d060e75734 Mon Sep 17 00:00:00 2001
From: jhzh <1628036192@qq.com>
Date: Fri, 09 Jan 2026 16:18:43 +0800
Subject: [PATCH] 1
---
src/page/kline/buyStock.vue | 388 ++++++++++++++++++++++++++++++-------------------------
1 files changed, 213 insertions(+), 175 deletions(-)
diff --git a/src/page/kline/buyStock.vue b/src/page/kline/buyStock.vue
index 915c220..07b43e8 100644
--- a/src/page/kline/buyStock.vue
+++ b/src/page/kline/buyStock.vue
@@ -4,62 +4,54 @@
<div class="wenebn">
<h6>{{name}}</h6>
<p class="">{{nowPrice}}</p>
- <!-- <p class="">{{ currentItem.p }} {{ currentItem.zdp ? currentItem.zdp.toFixed(2) + '%' : '0.00%' }}</p> -->
</div>
</div>
- <div style="height:1.5rem">
-
- </div>
+ <div style="height:1.5rem"></div>
<div class="goumais">
- <div class="xiaoge"><span><img
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABEklEQVQ4jaVSwUoDMRScl2alsIuIB89C9Su8iHqrWryKFy12Tz36cd79BfFiS13woKAfINuMpG7SbGjL2r5bJvMmM0Ow6ci6++eDIifwoNc2ILIvIh3VlH9287IdCcwCNBLo5cVxmmZf3fu3g0ABBJoJALJrAK1arR2H2GUjSxxc5cXR6fVz4s6mWvizXWFiHSwQuOiPDw35lGZZL3zNZZ5jAi50INK2ZBJbAeYzewHn4PJudNK9fd2Lyaau6jOHDixHKa0fkyQZhmSfOSqMQQRTubAfSRPQ4YUsKSzEfIS43VWFhQ6coIrJqwqr9TLDAEViPCUnDi/L6QeBgkp5zBDvBvj+KcvPOcYJyVGt638PgF/kfWPjHkHUbAAAAABJRU5ErkJggg==">{{ $t('jy18') }}</span>
- <div class="rtyh">
- <div class="kunk"><input :placeholder="$t('jy125')" v-model="buyNum"
- @input="buyNum = buyNum.replace(/^(0+)|[^\d]+/g, '')" type="number"><a class="shou">{{ $t('hj117') }}</a>
- </div>
+ <!-- 买入价格 -->
+ <div class="price-section">
+ <label class="section-label">{{ $t("hj130") }}</label>
+ <div class="erty price-input">
+ <input type="number" class="inpy" v-model="buyPrice" disabled :placeholder="nowPrice.toString()">
+ <a class="current-price-btn" @click="setCurrentPrice">{{ $t("hj81") }}</a>
</div>
</div>
- <p class="shougu">1{{ $t('hj117') }}=100{{ $t('jy96') }}</p>
- <div class="xiaoge">
- <span class="eduleft"><img class="eduleftimg"
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABp0lEQVQ4jZXRTUsbURgF4HPeSZuIm9goFOpXQrtrQaiICG4KGVGxwU1WwYWgpeBPKCn1X2jSrHQjbiJaYUoX7nXlQhAUg13ED2bcuTH3lTstbarNtJ6Bgbnc59yXO0REcrNHgxTZpkgnQGj4AErL7Df2WhZYLI7jgdxTReUveATkQiwK2xMCP3i7sz5wPTl71GXxl8+ZC7tnYq5GEVmQSBxchTg3XytKLFZ3nFh96t3px3Djz0n4L5wtHKTa2tvPAC4a1YYCiw1jnoo4WYqsShS2648TCdqTjKqAdCiixijD+wAgUdhmq5y+NKpFkB9AFo3RT14lff7jQgWMws15M3OYiscT3C71Xg7n99s6Up0bDdUBTs+d1EF+9/1gtBVujsXJJ6kNJV/fGOOKAlVVvEp2JN2H4m9Lz3bF876+V+iKAmtT87XcQ3D4N+0r0bcs2bGxEsCCAvnN5d7q/+BfBTbx/rJkXbekQAFkfmupJyyJwn8U2DzqL4vbNIkfBF4UvlcQlqQrvycRZ98AmVbYxrm7YK6qeuy/3Mw8f9Gt5NCNMeOtMADcAijV/2tFJVE6AAAAAElFTkSuQmCC">{{ $t('jy135') }}</span>
- <div class="eduright">
- <a class="ertyu">¥{{ userinfo.userAmt }}</a>
+ <!-- 买入数量 -->
+ <div class="quantity-section">
+ <label class="section-label">{{ $t("jy87") }}</label>
+ <div class="erty quantity-input">
+ <input :placeholder="$t('jy87')" type="number" class="inpy" v-model="buyNum"
+ @input="buyNum = buyNum.replace(/^(0+)|[^\d]+/g, ''); updateHandlingFee()">
+ <a>{{ $t("hj117") }}</a>
</div>
</div>
- <div class="rtyh">
- <!-- <div class="fangxi">
- <a class="fanh" :class="buyType == 0 ? 'xuk' : ''" @click="buyType = 0">买涨</a>
- <a class="fanh" :class="buyType == 1 ? 'xuk' : ''" @click="buyType = 1">买跌</a>
- </div> -->
- </div>
- <div class="xiaoge">
- <span class="eduleft"><img
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB7UlEQVQ4ja2SwWsTQRjF3zc7MbuJpQgFD1LbIIIHQbwKFtEexGJ7iKigUovm6klP/gEG6s2LJUgPWulBRawH0cQUMYqHCiUVFEPSePNiEsWa2t15sjGpW8mKgu8wwwzzfvO9b0aOnS9dIDm/XK0WF7LDxD/KB6xCZBMgHw35FJCs63m5B9M7q3+DkrGzb+NaR+5AJEJihcB+EdVLoESRLMnct2Yz//jmrk9dAf6QTJVnACnezSTSe4fzamBwcA9FDgKYhMgyRLYD8to1JqcsK1ur1wvPZ3c3A4DKDIHivUwi3SGPTJR6dSRSX3PdrZalt0CpowRGIbIPkO8ECi55WSVTlbQhRwG5NHaufKoDaHVTpHXHXGbg3dxU/9WHU/1DJC4SKHvAGkT1ac+YW0pZ875BLOvNr3A/zea3zARcAyw8ur5t3F/r+zd2LAFY6tYe06mkrcOpD1EqtRmQ6NBEpefZdOKLDnse36zWK2kjtT5OyBWKwHZi/tZJFQYI9qCjwouXt2uNhlOrNxyxrDOtCGEA23HoeWZDhM+LSe/VIrzgudAKms1VzzebQIRuCgUYMu6bCYn/CbABf2j8fY9tO7MEDlCpGCHwG2aIFQPkldYnnlzr+xoaIRq1T0PkSNDcnmNQasQzXP9o/0cAfgDTaMAiD+M0wAAAAABJRU5ErkJggg==">{{ $t('jy532') }}</span>
- <div class="rtyh" @click="showPicker = true">
- <div class="kunk">
- <input placeholder="请选择" disabled="disabled" v-model="lever" class="canwei">
- <img class="gangganicon"
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAGCAYAAAAVMmT4AAAAAXNSR0IArs4c6QAAAGRJREFUKFNjnDFjhiUjI2Pr////GRlwAEZGxpcsLCypYAUzZ87MYWBgmMTAwIBNw8v///87ZWRkXINL4tAAVwgyFMUkNA0oCjEUIzmp+v///84gq5G9gdVT/f39AoWFhR/Q/QsATGgt64otJQ8AAAAASUVORK5CYII=">
- </div>
+ <!-- 仓位选择 -->
+ <div class="position-section">
+ <label class="section-label">{{ $t("hj226") }}</label>
+ <div class="position-buttons">
+ <div class="position-btn" :class="{ active: selectedPosition === '1/4' }" @click="selectPosition('1/4')">{{ $t('hj258') }}</div>
+ <div class="position-btn" :class="{ active: selectedPosition === '1/3' }" @click="selectPosition('1/3')">{{ $t('hj259') }}</div>
+ <div class="position-btn" :class="{ active: selectedPosition === '1/2' }" @click="selectPosition('1/2')">{{ $t('hj260') }}</div>
+ <div class="position-btn" :class="{ active: selectedPosition === 'full' }" @click="selectPosition('full')">{{ $t('hj261') }}</div>
</div>
</div>
- <div class="xiaoge">
- <span class="eduleft"><img
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACEElEQVQ4jY1TPWhTURg9331vcdP6PzSpTtahi0InFS2CjakxEoNgFNrykqibTgpqdXDTRVAbWsRJfNBBGqKmFasoWBCEWEX8qfkRcWptHRTk3SPJa14ebah+cIcL55x7zvm4gqUjB/s+diplxAnEACGBEYe0R4c3TwKgn+EJRPs+bDcMs0o6DMhqTY4CYusqXam4iPRockaUsh1H29mhtleeQMz6/JhEJ0SyJOyZ2dkHEyPbfvlf2hF7vWJVS0u3iIo7ZBgik9nB1i64AtOM9n/qaBKn6YSsUkc4/bUWRWEhFIk//ytAVLFuelWvgstz0JOqnN2fLKcX4z0Hvj4RsYqnI8lSoH4PJ8tXCJwRpV7W8VpcvNnUgUg7RJ5GUpUuDZwkcEyTe3KDrQUskJU/Qq0DaTh4lM+nSIw7ZIHAUU3uzmUChUYH4uFdAZE5AGvrgN9FS08Xi0kCF0WpXblM4J3foDLNdZr44UUgOQaRBIBnddBUfiengKvNtyC9GnzY2ILIZWUYiQPJcugfy8DeE99jDlk9lzyB+5ngG615SgN2yCpFlyEfp8gdivRO3Nr43q3fN+FU5QiBIUBuz83Pn3t+d+vPGjH9bSVEXaPIIYdMPLm5IestbPEr3Va5XRnGsAMENTFAEVOUMeCQb5Vp9o9dX/PFj2/2nbFl3wsJtm1KUOQCRFED58dvrL+3BAjgL/OP2zMWLMK9AAAAAElFTkSuQmCC">{{ $t('jy136') }}</span>
- <div class="eduright"><a class="ertyu"> ¥{{ (nowPrice * buyNum * 100 ).toFixed(2) }}</a>
- </div>
+ <!-- 金额信息 -->
+ <div class="amount-info">
+ <p class="plm">
+ <span>{{ $t("hj54") }}</span>
+ <a>¥{{ (userinfo.enableAmt || userinfo.userAmt || 0).toFixed(2) }}</a>
+ </p>
+ <p class="plm">
+ <span>{{ $t("hj44") }}</span>
+ <a>¥{{ handlingFee }}</a>
+ </p>
+ <p class="plm">
+ <span>{{ $t("jy88") }}</span>
+ <a class="red-amount">¥{{ getActualAmount() }}</a>
+ </p>
</div>
- <!-- <div class="xiaoge">
- <span class="eduleft"><img
- src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAbdJREFUOE+N0z9IG1EcB/Dv76URtGiXekEsgRCHunToXZrV5A7XIB0LzeTUreJQMnTRrYODCFUchDpauulwgSCK4AUXyVAIpVCKuUtSIdr8UfJ+5bB3TVLUu+3de78P3/vd7xEGHgaophofJSFLxJ3B/X9rYsUyH1HvAbe4qukbTDQHxlakaL69DXA040IpmqM+4BWDEBGMvS4o7gG2mo4LUOay3l2LfS+0XbQP6C0eb1Ze1kYmspIx7QKVZ7MPEZYZIbDNQFw5D/+k8m7HBwaLqVS6qiaMeQ+wNeMLETLepzCwGLHMDz7gaPobEK0yo0rA9c1BHgGwphTzuZqaSkqIDAS9Y5avScoj5aRQ9oGqZrwHsWy2O6u9DYueHjQI6LrvKmoqKYTI/Wq0Xz39enjR1wMXkITfbqzbf9n/O30J7gLqyeTYZTMc8ohoa7TZ18T7EjiaUWAg5gGCsDxumeuBEzjPZ6ZCHBrygFYY9pPjfD0wYCf0zwSK+gnAK4+t/KfAwJmWfvGAQsMecIXOt0lr/0dgwEnoGwAm/UFi2owUzZ3AwL2XyVb1BRK0BPDfKQw+DYqVH/sD+c0JIKaNn8sAAAAASUVORK5CYII=">手续费</span>
- <div class="eduright"><a class="ertyu">HKD26600640.90</a></div>
- </div> -->
</div>
- <div class="mail" @click="setBuy">{{ $t('hj85') }}</div>
- <van-popup v-model="showPicker" round position="bottom">
- <van-picker :columns="siteLeverList" @cancel="showPicker = false" @confirm="onConfirm" show-toolbar />
- </van-popup>
+ <div class="mail" @click="setBuy">{{ $t("hj85") }}{{ $t("jy150") }}</div>
</div>
</template>
<script>
@@ -74,8 +66,8 @@
return {
showPicker: false,
currentItem: '',
- userinfo: '',
- settingdetail: '',
+ userinfo: {},
+ settingdetail: {},
siteLeverList: [],
nowPrice: 0,
buyType: 0, // 0 买入 1 卖出
@@ -85,6 +77,9 @@
code:'',
id:'',
buying: false,
+ buyPrice: '',
+ selectedPosition: '',
+ handlingFee: '0.00'
}
},
mounted() {
@@ -99,13 +94,89 @@
}
if (this.$route.query.m) {
this.nowPrice = Number(this.$route.query.m)
+ this.buyPrice = this.nowPrice.toString()
}
- // this.currentItem = JSON.parse(decodeURIComponent(this.$route.query.item))
-
this.getUserInfo()
this.getuserSetting()
},
+ watch: {
+ buyPrice() {
+ this.updateHandlingFee()
+ },
+ buyNum() {
+ this.updateHandlingFee()
+ }
+ },
methods: {
+ setCurrentPrice() {
+ this.buyPrice = this.nowPrice.toString()
+ this.updateHandlingFee()
+ },
+ selectPosition(position) {
+ this.selectedPosition = position
+ if (this.userinfo.enableAmt && this.buyPrice) {
+ let availableAmount = parseFloat(this.userinfo.enableAmt || this.userinfo.userAmt || 0)
+ let currentPrice = parseFloat(this.buyPrice) || 0
+ let positionRatio = 0
+
+ switch(position) {
+ case '1/4':
+ positionRatio = 0.25
+ break
+ case '1/3':
+ positionRatio = 0.333
+ break
+ case '1/2':
+ positionRatio = 0.5
+ break
+ case 'full':
+ positionRatio = 1
+ break
+ }
+
+ // 计算可买入的手数(1手=100股)
+ let maxAmount = availableAmount * positionRatio
+ let maxHands = Math.floor(maxAmount / (currentPrice * 100))
+ this.buyNum = maxHands.toString()
+ this.updateHandlingFee()
+ }
+ },
+ async updateHandlingFee() {
+ if (this.buyPrice && this.buyNum) {
+ await this.getHandlingFee()
+ } else {
+ this.handlingFee = '0.00'
+ }
+ },
+ async getHandlingFee() {
+ if (!this.buyPrice || !this.buyNum) {
+ return '0.00'
+ }
+ try {
+ let opt = {
+ nowPrice: this.buyPrice,
+ buyNum: Number(this.buyNum) * 100
+ }
+ let data = await api.getFee(opt)
+ if (data.status === 0) {
+ this.handlingFee = (data.data || 0).toFixed(2)
+ return this.handlingFee
+ } else {
+ return '0.00'
+ }
+ } catch (error) {
+ console.error('获取手续费失败:', error)
+ return '0.00'
+ }
+ },
+ getActualAmount() {
+ if (this.buyPrice && this.buyNum) {
+ let price = parseFloat(this.buyPrice) || 0
+ let num = parseFloat(this.buyNum) || 0
+ return (price * num * 100).toFixed(2)
+ }
+ return '0.00'
+ },
onConfirm(item) {
console.log(item)
this.showPicker = false
@@ -164,6 +235,10 @@
this.$router.push('/smrz')
return
}
+ if (!this.buyPrice) {
+ Toast('请输入价格')
+ return
+ }
if (this.buyNum * 100 < this.settingdetail.buyMinNum) {
this.$message.error(this.$t('jy137') + this.settingdetail.buyMinNum / 100 + this.$t('hj117'));
return
@@ -172,29 +247,13 @@
this.$message.error(this.$t('jy138') + this.settingdetail.buyMaxNum / 100 + this.$t('hj117'));
return
}
- // if (!this.agree) {
- // Toast('需同意合作协议才能交易!')
- // } else if (isNull(this.selectNumber) && isNull(this.autoNumber)) {
- // Toast('请选择购买手数')
- // } else if (isNull(this.selectType)) {
- // Toast('请选择买卖方向')
- // } else if(isNull(this.subaccountNumber)) {
- // Toast('请选择子账户')
- // } else {}
if (this.buying) {
return;
}
this.buying = true
let opts = {}
opts = {
- // stockId: this.detail.id,
- // buyNum: this.selectNumber ? this.selectNumber * 100 : 0, // 单位为手
- // buyType: this.selectType,
- // lever: this.selectCycle ? this.selectCycle : 0,
- // subaccountNumber:this.subaccountNumber
- //买入是买涨buyType:0, 卖出是买跌buyType:1,卖出的状态是0,买入的状态是1
buyNum: Number(this.buyNum) * 100, // 单位为手
- //buyNum: (this.num.match(/\d+/g))[0] * 100, // 单位为手
lever: this.lever,
buyType :0,
stockId: this.id,
@@ -224,18 +283,6 @@
}
</script>
<style lang="less" scoped>
-/deep/ .van-picker__cancel{
- font-size: 0.4rem;
-}
-/deep/ .van-picker__confirm{
- font-size: 0.4rem;
-}
-/deep/ .van-picker__toolbar{
- height: 1.3rem;
-}
-/deep/ .van-picker-column{
- font-size: 0.4rem;
-}
.headf {
height: 1.17rem;
position: fixed;
@@ -279,115 +326,105 @@
.goumais {
width: 9.21rem;
margin: 0 auto;
+ padding: 0.4rem 0;
- .xiaoge {
- margin-top: 10px;
+ .price-section, .quantity-section, .position-section {
+ margin-bottom: 0.4rem;
+
+ .section-label {
+ display: block;
+ color: #333;
+ font-size: 0.35rem;
+ margin-bottom: 0.2rem;
+ }
+ }
+
+ .erty {
+ width: 100%;
+ height: 1.07rem;
+ border: 0.0266rem solid #999;
+ border-radius: 0.13rem;
display: flex;
- height: 1.50rem;
justify-content: space-between;
align-items: center;
- margin: 5px 0;
+
+ .inpy {
+ height: 1.07rem;
+ flex: 1;
+ margin-left: 0.266rem;
+ background: transparent;
+ font-size: .37rem;
+ color: #000;
+ border: none;
+ outline: none;
+ }
+
+ a {
+ height: 0.64rem;
+ border-left: 0.0266rem solid #999;
+ width: 1.5rem;
+ margin-right: 0.266rem;
+ text-align: center;
+ font-size: .32rem;
+ color: #666;
+ line-height: .64rem;
+
+ &.current-price-btn {
+ color: #666;
+ cursor: pointer;
+ }
+ }
+ }
+
+ .position-buttons {
+ display: flex;
+ gap: 0.2rem;
+ margin-top: 0.2rem;
+
+ .position-btn {
+ flex: 1;
+ height: 0.8rem;
+ border: 0.0266rem solid #999;
+ border-radius: 0.13rem;
+ text-align: center;
+ line-height: 0.8rem;
+ font-size: 0.32rem;
+ color: #666;
+ cursor: pointer;
+ transition: all 0.3s;
+
+ &.active {
+ border-color: #f33030;
+ background: #f33030;
+ color: #fff;
+ }
+ }
+ }
+
+ .amount-info {
+ margin-top: 0.4rem;
+ }
+
+ .plm {
+ width: 100%;
+ margin: 0.2rem 0;
+ display: flex;
+ justify-content: space-between;
span {
- display: flex;
- align-items: center;
- color: #333;
- font-size: .43rem;
- line-height: 1.5rem;
-
- img {
- width: 0.43rem;
- height: 0.43rem;
- margin-right: 0.133rem;
- }
- }
-
- .rtyh {
- background-color: rgb(245, 245, 245);
- width: 4.75rem;
- border: 1px solid rgb(224, 224, 224);
- border-radius: 5px;
- display: flex;
-
-
- .kunk {
- border-radius: 0.08rem;
- display: flex;
- align-items: center;
-
- input {
- color: #000;
- font-size: .37rem;
- background-color: rgb(245, 245, 245);
- width: 4rem;
- padding-left: 10px;
- height: 1.07rem !important;
- }
-
- a {
- color: #333;
- font-size: .4rem;
- line-height: 1.07rem;
- margin-right: 0.266rem;
- }
-
- .gangganicon {
- width: 0.26rem;
- height: 0.24rem;
- }
- }
- }
-
- .eduleft {
- display: flex;
- align-items: center;
-
- .eduleftimg {
- width: 0.43rem;
- height: 0.43rem;
- margin-right: 0.13rem;
- }
- }
-
- .eduright {
- justify-content: space-between;
- }
-
- .ertyu {
- color: #333;
- font-size: .4rem;
- line-height: 1.5rem;
- }
- }
-
- .fangxi {
- display: flex;
- justify-content: space-between;
- align-items: center;
- font-size: .4rem;
- text-align: center;
- margin-top: 20px;
-
- .fanh {
- width: 49%;
- height: 1.07rem;
- line-height: 1.07rem;
- border-radius: 5px;
color: #999;
- border: 1px solid #e0e0e0;
+ font-size: .32rem;
}
- .xuk {
- color: #fff;
- background: linear-gradient(-55deg,rgb(241, 22, 20),rgb(240, 40, 37));
- border: 1px solid #fff;
+ a {
+ color: #333;
+ font-size: .32rem;
+
+ &.red-amount {
+ color: #f33030;
+ }
}
}
-}
-
-.shougu {
- color: rgb(153, 153, 153);
- text-align: right;
}
.mail {
@@ -400,5 +437,6 @@
font-size: .43rem;
text-align: center;
background: linear-gradient(-55deg,rgb(241, 22, 20),rgb(240, 40, 37));
+ cursor: pointer;
}
</style>
--
Gitblit v1.9.3