| package-lock.json | ●●●●● patch | view | raw | blame | history | |
| src/assets/img/record.svg | ●●●●● patch | view | raw | blame | history | |
| src/axios/api.js | ●●●●● patch | view | raw | blame | history | |
| src/axios/api.url.js | ●●●●● patch | view | raw | blame | history | |
| src/page/home/smart_intraday.vue | ●●●●● patch | view | raw | blame | history | |
| src/page/home/smart_list.vue | ●●●●● patch | view | raw | blame | history | |
| src/page/kline/index.vue | ●●●●● patch | view | raw | blame | history | |
| src/router/index.js | ●●●●● patch | view | raw | blame | history |
package-lock.json
Diff too large src/assets/img/record.svg
New file @@ -0,0 +1,7 @@ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <path d="M21 7V17C21 20 19.5 22 16 22H8C4.5 22 3 20 3 17V7C3 4 4.5 2 8 2H16C19.5 2 21 4 21 7Z" stroke="black" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> <path d="M14.5 4.5V6.5C14.5 7.6 15.4 8.5 16.5 8.5H18.5" stroke="black" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> <path d="M8 13H12" stroke="black" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> <path d="M8 17H16" stroke="black" stroke-width="1.5" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/> </svg> src/axios/api.js
@@ -1,6 +1,15 @@ import { post, get } from "@/axios/index"; // import APIUrl from '@/axios/api.url' export function listIntraday(options) { return post("/api/intraday/listIntraday.do", options); } export function addIntraday(options) { return post("/api/intraday/addIntraday.do", options); } export function getlistSmart(options) { return post("/api/intraday/listSmart.do", options); } // var img_url = APIUrl.util.image // 这个就是图片上传的api url export function thirdPartyRecharge(options) { return post("/user/thirdPartyRecharge.do", options); @@ -592,4 +601,4 @@ // 删除银行卡 export function deleteBankCard(options) { return post("/user/bank/delete.do", options); } } src/axios/api.url.js
@@ -11,8 +11,8 @@ // 0311 // baseURL: "https://api.durocaspitall.com/", // 本地 // baseURL: "https://rgapi.yanshiz.com/", baseURL: "http://192.168.10.13:8092/", baseURL: "https://rgapi.yanshiz.com/", // baseURL: "http://192.168.10.13:8092/", util: { image: "/util/image.html" // 图片上传 } src/page/home/smart_intraday.vue
@@ -1,28 +1,31 @@ <template> <div style="background-color: #F8FAF9;"> <van-nav-bar :placeholder="true" :safe-area-inset-top="true" :title="$t('智能日内')" left-arrow @click-left="onClickLeft" /> <div class="body"> <div class="body_title"> <div class="body_title_txt">日股</div> </div> <van-nav-bar :placeholder="true" :safe-area-inset-top="true" :title="$t('智能日内')" left-arrow @click-left="onClickLeft"> <template #right> <img @click="$router.push('/smart_list')" style="width: 20px;" src="../../assets/img/record.svg"/> </template> </van-nav-bar> <div class="body_title"> <div class="body_title_txt">{{$t('日股')}}</div> </div> <div class="body" v-for="(item,index) in pagelist" :key="index"> <div class="body_price"> <div class="body_price_price">可用余额 <span style="font-weight: bold;">123123123 JPY </span></div> <div class="body_price_price">{{$t('hj48')}} <span style="font-weight: bold;">{{price}} JPY </span></div> <div class="body_price_input"> <input class="body_price_input_ipt" v-model="priceinput" placeholder="请输入参与金额" type="number"/> <input class="body_price_input_ipt" v-model="values[item.id]" placeholder="请输入参与金额" type="number"/> </div> <div class="body_price_tips"> <div class="body_price_tips_left">限額: 100.00JPY-999,999,999,999.00JPY </div> <div class="body_price_tips_rigth">效益:3%-15%</div> <div class="body_price_tips_left">{{$t('je')}}: {{item.minAmount}}JPY-{{item.maxAmount}}JPY </div> <div class="body_price_tips_rigth">效益:{{item.profit}}</div> </div> </div> <div class="btn"> <div class="btn_txt">提交</div> <div @click="gopay(item)" class="btn_txt">{{$t('hj237')}}</div> </div> <div class="tips"> <img class="tips_img" src="../../assets/img/tips.svg"/> @@ -34,16 +37,46 @@ <script> // import tabsList from "./favorites/tabs"; import * as api from "@/axios/api"; import headers from "@/page/login/components/header.vue"; export default { components: { headers }, data() { return { gpcode: "", priceinput:'', values:{}, pagelist:[], price:'', }; }, mounted() { this.getpagelist(); this.getenableAmt() }, methods: { async gopay(item){ var data = { smartId: item.id, orderAmount:this.values[item.id] } const res = await api.addIntraday(data); if(res.status==0){ this.$toast(this.$t("hj276")); } }, async getenableAmt() { const res = await api.getMoney(); const data = res.data.filter((item) => item.accectType === "ALL"); this.price = data[0].availableBalance; }, async getpagelist(){ let result = await api.getlistSmart(); if (result.status === 0) { this.pagelist = result.data } else { } }, onClickLeft() { this.$router.push("/home"); }, src/page/home/smart_list.vue
New file @@ -0,0 +1,283 @@ <template> <div style="background-color: #F8FAF9;"> <van-nav-bar :placeholder="true" :safe-area-inset-top="true" :title="$t('nwetitlea')" left-arrow @click-left="$router.go(-1)"> </van-nav-bar> <div class="body_title" > <div @click="typeclick(item,index)" :class="typeindex==index?'body_title_txts':'body_title_txt'" v-for="(item,index) in typelist" :key="index">{{item.name}}</div> </div> <div class="body" v-for="(item,index) in pagelist" :key="index"> <div class="body_titles" v-if="typeindex==2"> <div class="body_titles_txt">JP</div> <div class="body_titles_name">{{item.stockName}}</div> </div> <div class="body_price_tips"> <div class="body_price_tips_left">{{$t('参与金额')}}</div> <div class="body_price_tips_rigth">{{item.orderAmount}}</div> </div> <div class="body_price_tips" v-if="typeindex==2"> <div class="body_price_tips_left">{{$t('实际购买金额')}}</div> <div class="body_price_tips_rigth">{{item.purchaseAmount}}</div> </div> <div class="body_price_tips"> <div class="body_price_tips_left">{{$t('提交时间')}}</div> <div class="body_price_tips_rigth">{{formatTimestamp(item.orderTime)}}</div> </div> </div> </div> </template> <script> // import tabsList from "./favorites/tabs"; import * as api from "@/axios/api"; import headers from "@/page/login/components/header.vue"; export default { components: { headers }, data() { return { pagelist:[], typeindex:0, status:0, typelist:[ { name:this.$t('hjshz'), key:0 }, { name:'已驳回', key:2 }, { name:'已完成', key:1 } ] }; }, mounted() { this.getpagelist(); }, methods: { formatTimestamp(timestamp) { const date = new Date(timestamp); // 将时间戳转换为 Date 对象 const day = date.getDate(); // 日期 const month = date.getMonth() + 1; // 月份(从 0 开始,所以下标要加 1) const year = date.getFullYear(); // 年份 const hours = date.getHours(); // 小时 const minutes = date.getMinutes(); // 分钟 const seconds = date.getSeconds(); // 秒钟 // 格式化为 "日月年/时分秒" 格式 return `${month}.${day}.${year}/${hours}:${minutes}:${seconds}`; }, typeclick(e,i){ this.typeindex = i this.status = e.key this.getpagelist() }, async getpagelist(){ let result = await api.listIntraday({status:this.status}); if (result.status === 0) { this.pagelist = result.data } else { } }, onClickLeft() { this.$router.push("/home"); }, }, }; </script> <style scoped lang="less"> .body_titles_name{ margin-left: 15px; color: #8c8c8c; } .body_titles_txt{ background-color: #EF3037; color: #fff; border-radius: 4px; padding: 3px 6px; font-size: 15px; } .body_titles{ display: flex; align-items: center; } .body_price_tips_rigth{ color: #000; } .tips_img{ width: 14px; margin-right: 10px; } .tips{ display: flex; justify-content: center; align-items: center; margin:0px 20px; margin-top: 20px; color: #8c8c8c; line-height: 30px; } .btn_txt{ color: #fff; height: 60px; text-align: center; line-height: 60px; font-size: 20px; } .btn{ margin:0px 20px; margin-top: 60px; border-radius: 10px; background-color: #185546; } .body_price_tips{ display: flex; margin-top: 20px; justify-content: space-between; align-items: center; color: #8c8c8c; } .body_price_input_ipt{ margin: 0 20px; height: 60px; } .body_price_input{ margin: 0px 15px; background-color: #fff; border-radius: 10px; border: 1px solid #dcdcdc; } .body_price_price{ display: flex; justify-content: end; } .body_price_price{ display: flex; margin: 40px 15px; } .body_price{ display: flex; flex-direction: column; } .body_title_txts{ width: 30%; color: #ffffff; background-color: #185546; border-radius: 20px; display: flex; justify-content: center; align-items: center; padding: 20px 0; } .body_title_txt{ width: 30%; color: #858093; border-radius: 20px; display: flex; justify-content: center; align-items: center; } .body_title{ margin: 20px; display: flex; justify-content: space-between; align-items: center; } .body{ display: flex; flex-direction: column; padding: .533333rem .4rem; border-radius: .426667rem; background: var(--ex-default-bgcolor); font-size: .346667rem; box-shadow: 0 .026667rem 1.173333rem .106667rem rgba(0, 0, 0, .1); margin: 0 20px; margin-bottom: .213333rem; } /deep/.van-nav-bar__content{ background-color: #F8FAF9; } .search { height: 1rem; display: flex; align-items: center; justify-content: center; margin: 15px 22px; position: relative; z-index: 99; .search_content { width: 100%; height: 90%; display: flex; justify-content: space-between; align-items: center; } .left_search { width: 100%; height: 100%; background: #fff; border-radius: 0.5rem; display: flex; .search_img { width: 1rem; height: 100%; display: flex; justify-content: center; align-items: center; img { width: 0.5rem; height: 0.5rem; } } .search_input { width: 100%; overflow: hidden; height: 100%; display: flex; } } .right_search { width: 140px; line-height: 0.9rem; text-align: center; height: 100%; border-radius: 0.5rem; background-color: #0066ed; color: #ffffff; font-weight: bold; margin-left: 20px; } } /deep/ .van-nav-bar__content { height: 65px; } /deep/ .van-nav-bar__title { font-family: "DINPro"; width: 100%; height: 1.17333rem; display: flex; justify-content: center; align-items: center; font-style: normal; font-weight: 500; font-size: 0.48rem; color: #185546; } </style> src/page/kline/index.vue
@@ -74,25 +74,98 @@ </div> </div> --> </div> <div class="real_time_detail" style="border-bottom: 1px solid #dadada;"> <div style="display: flex;justify-content: center;align-items: center;"> <img style="width: 40px;border-radius: 50px;" src="../../assets/img/nologo.svg"/> <div class="left_now_price" style="margin-left: 10px;"> <div class="top_now"> <!-- <span :class="singDetails.nowPrice - singDetails.preclose_px > 0 ? 'price green' : 'price red'">{{ singDetails.nowPrice }}</span> --> <span style="color: #0FAD60;font-size: 12px;" :class="singDetails.hcrate > 0 ? 'price green' : 'price red'" >{{ singDetails.name }}</span > </div> <div class="bottom_now" style="margin-top: 5px;font-weight: bold;"> <div> <span v-if="singDetails.nowPrice === 0">-</span> <!-- <span v-else>{{ singDetails.nowPrice - singDetails.preclose_px > 0 ? '+' : '' }}{{ (singDetails.nowPrice - singDetails.preclose_px).toFixed(2) }}</span> --> <span :class="singDetails.hcrate > 0 ? 'number green' : 'number red'" v-else> {{ singDetails.spell }}</span > </div> </div> </div> </div> <div class="right_ets"> <div class="tops"> <div class="lefts topes"> <span class="titles">{{ $t("hj40") }}</span> <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{ singDetails.open_px }}</span> --> <!-- <span style="font-weight: bold;" >{{ singDetails.nowPrice }}</span > --> </div> <div class="rights topes"> <!-- <span class="titles">{{ $t("hj73") }}</span> --> <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{ singDetails.today_max }}</span> --> <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'" style="font-weight: bold;" >还米有</span > </div> </div> <div class="bottoms"> <div class="lefts bots"> <!-- <span class="titles">{{ $t("hj74") }}</span> --> <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{ singDetails.preclose_px }}</span> --> <span style="font-weight: bold;font-size: 18px;" >{{ singDetails.preclose_px }}</span > </div> <div class="rights bots"> <!-- <span class="titles">{{ $t("hj75") }}</span> --> <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{ singDetails.today_min }}</span> --> <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'" style="font-weight: bold;" >{{ singDetails.hcrate ? singDetails.hcrate : "0" }}%</span > </div> </div> </div> </div> <div class="real_time_detail"> <div class="left_now_price"> <div class="top_now"> <!-- <span :class="singDetails.nowPrice - singDetails.preclose_px > 0 ? 'price green' : 'price red'">{{ singDetails.nowPrice }}</span> --> <span <span style="color: #0FAD60;" :class="singDetails.hcrate > 0 ? 'price green' : 'price red'" >¥{{ singDetails.nowPrice }}</span >{{ singDetails.nowPrice }}</span > </div> <div class="bottom_now"> <div class="bottom_now" style="margin-top: 5px;font-weight: bold;"> <div> <span v-if="singDetails.nowPrice === 0">-</span> <!-- <span v-else>{{ singDetails.nowPrice - singDetails.preclose_px > 0 ? '+' : '' }}{{ (singDetails.nowPrice - singDetails.preclose_px).toFixed(2) }}</span> --> <span v-else> ¥{{ <span :class="singDetails.hcrate > 0 ? 'number green' : 'number red'" v-else> {{ (singDetails.nowPrice - singDetails.preclose_px).toFixed(2) }}</span > @@ -117,11 +190,9 @@ <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{ singDetails.open_px }}</span> --> <span :class=" singDetails.hcrate > 0 ? 'number green' : 'number red' " >¥{{ singDetails.open_px }}</span <span style="font-weight: bold;" >{{ singDetails.open_px }}</span > </div> <div class="rights topes"> @@ -130,10 +201,8 @@ singDetails.today_max }}</span> --> <span :class=" singDetails.hcrate > 0 ? 'number green' : 'number red' " >¥{{ singDetails.today_max }}</span style="font-weight: bold;" >{{ singDetails.today_max }}</span > </div> </div> @@ -144,10 +213,8 @@ singDetails.preclose_px }}</span> --> <span :class=" singDetails.hcrate > 0 ? 'number green' : 'number red' " >¥{{ singDetails.preclose_px }}</span style="font-weight: bold;" >{{ singDetails.preclose_px }}</span > </div> <div class="rights bots"> @@ -156,10 +223,8 @@ singDetails.today_min }}</span> --> <span :class=" singDetails.hcrate > 0 ? 'number green' : 'number red' " >¥{{ singDetails.today_min }}</span style="font-weight: bold;" >{{ singDetails.today_min }}</span > </div> </div> @@ -414,7 +479,7 @@ <!-- <div class="border_bottom"></div> --> </div> <div class="btns"> <div class="lefts"> <!-- <div class="lefts"> <div class="left_ca" @click="option()"> <img src="../../assets/img/meishoucang.png" @@ -426,23 +491,23 @@ <div class="right_xx" @click="handleJj()"> <a href="#"><img src="../../assets/img/xiaoxi.png" alt /></a> </div> </div> </div> --> <div class="rights"> <div class="buy_btn"> <div class="top_buy" @click="goBuy(0)"> <span>{{ $t("hj84") }}</span> </div> <div class="bottom_buy"> <!-- <div class="bottom_buy"> <span>¥{{ singDetails.nowPrice }}</span> </div> </div> --> </div> <div class="sell_btn" @click="goBuy(1)"> <div class="top_sell"> <span>{{ $t("hj85") }}</span> </div> <div class="bottom_sell"> <!-- <div class="bottom_sell"> <span>¥{{ singDetails.nowPrice }}</span> </div> </div> --> </div> </div> </div> @@ -931,7 +996,7 @@ .top_now { width: 100%; // height: 65%; font-size: 25px; font-size: 40px; display: flex; align-items: center; font-weight: bold; @@ -1149,7 +1214,7 @@ } .rights { width: 70%; width: 100%; height: 70%; display: flex; align-items: center; @@ -1162,23 +1227,25 @@ .buy_btn { width: 45%; height: 100%; background: rgb(225, 59, 69); background: #185546; color: #fff; display: flex; justify-content: center; align-items: center; .top_buy { width: 100%; height: 45%; // height: 45%; display: flex; justify-content: center; align-items: flex-end; align-items: center; } .bottom_buy { width: 100%; height: 55%; // height: 55%; display: flex; justify-content: center; align-items: flex-start; align-items: center; font-size: 0.4015rem; padding: 0.1rem 0 0 0; } @@ -1187,23 +1254,25 @@ .sell_btn { width: 45%; height: 100%; background: rgb(68, 155, 84); background: #185546; color: #fff; display: flex; justify-content: center; align-items: center; .top_sell { width: 100%; height: 45%; // height: 45%; display: flex; justify-content: center; align-items: flex-end; // align-items: flex-end; } .bottom_sell { width: 100%; height: 55%; // height: 55%; display: flex; justify-content: center; align-items: flex-start; // align-items: flex-start; padding: 0.1rem 0 0 0; font-size: 0.4015rem; } src/router/index.js
@@ -85,6 +85,7 @@ import help_fwxy from "@/page/home/help_fwxy.vue"; import new_service from "@/page/home/new_service.vue"; import smart_intraday from "@/page/home/smart_intraday.vue"; import smart_list from "@/page/home/smart_list.vue"; Vue.use(Router); const routerPush = Router.prototype.push; @@ -1106,6 +1107,18 @@ component: smart_intraday }, { path: "/smart_list", name: "smart_list", meta: { title: i18n.t("hj2"), requireAuth: false, hasHeader: false, index: 64, show: true }, component: smart_list }, { // 会匹配所有路径 path: "*", redirect: "/home"