1
jhzh
2025-07-20 24d786b273537a2763b1fb4c727304a7af6b25f0
1
6 files modified
2 files added
18672 ■■■■■ changed files
package-lock.json 18134 ●●●●● patch | view | raw | blame | history
src/assets/img/record.svg 7 ●●●●● patch | view | raw | blame | history
src/axios/api.js 11 ●●●●● patch | view | raw | blame | history
src/axios/api.url.js 4 ●●●● patch | view | raw | blame | history
src/page/home/smart_intraday.vue 67 ●●●● patch | view | raw | blame | history
src/page/home/smart_list.vue 283 ●●●●● patch | view | raw | blame | history
src/page/kline/index.vue 153 ●●●● patch | view | raw | blame | history
src/router/index.js 13 ●●●●● 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"