Преглед изворни кода

1,贷款-规则 完成 2,用户-我的贷款-还款中 完成 3,用户-我的贷款-已还款 完成 4,贷款-提交信息 完成 5,贷款-合同内容 完成 6,贷款-签字面板(除签字功能) 完成 7,贷款-提交审核弹窗 完成 8,贷款-首页增加提示 完成

jhaoG пре 1 месец
родитељ
комит
bee4fe6563

+ 3 - 0
src/assets/icon/index/upload.svg

@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M15.625 9.68824V14.6882C15.625 14.9369 15.5262 15.1753 15.3504 15.3512C15.1746 15.527 14.9361 15.6257 14.6875 15.6257H0.9375C0.68886 15.6257 0.450403 15.527 0.274587 15.3512C0.0987721 15.1753 0 14.9369 0 14.6882V9.68824C0 9.4396 0.0987721 9.20114 0.274587 9.02533C0.450403 8.84951 0.68886 8.75074 0.9375 8.75074C1.18614 8.75074 1.4246 8.84951 1.60041 9.02533C1.77623 9.20114 1.875 9.4396 1.875 9.68824V13.7507H13.75V9.68824C13.75 9.4396 13.8488 9.20114 14.0246 9.02533C14.2004 8.84951 14.4389 8.75074 14.6875 8.75074C14.9361 8.75074 15.1746 8.84951 15.3504 9.02533C15.5262 9.20114 15.625 9.4396 15.625 9.68824ZM5.35078 4.72652L6.875 3.20386V9.68824C6.875 9.93688 6.97377 10.1753 7.14959 10.3512C7.3254 10.527 7.56386 10.6257 7.8125 10.6257C8.06114 10.6257 8.2996 10.527 8.47541 10.3512C8.65123 10.1753 8.75 9.93688 8.75 9.68824V3.20386L10.2742 4.72886C10.3614 4.81607 10.465 4.88525 10.5789 4.93244C10.6928 4.97964 10.815 5.00393 10.9383 5.00393C11.0616 5.00393 11.1837 4.97964 11.2977 4.93244C11.4116 4.88525 11.5151 4.81607 11.6023 4.72886C11.6895 4.64166 11.7587 4.53813 11.8059 4.42419C11.8531 4.31025 11.8774 4.18813 11.8774 4.0648C11.8774 3.94147 11.8531 3.81935 11.8059 3.70541C11.7587 3.59147 11.6895 3.48795 11.6023 3.40074L8.47734 0.275739C8.39025 0.188339 8.28675 0.118992 8.1728 0.0716746C8.05884 0.024357 7.93667 0 7.81328 0C7.68989 0 7.56772 0.024357 7.45376 0.0716746C7.33981 0.118992 7.23632 0.188339 7.14922 0.275739L4.02422 3.40074C3.93701 3.48795 3.86784 3.59147 3.82064 3.70541C3.77345 3.81935 3.74915 3.94147 3.74915 4.0648C3.74915 4.31387 3.8481 4.55274 4.02422 4.72886C4.20034 4.90498 4.43921 5.00393 4.68828 5.00393C4.93735 5.00393 5.17622 4.90498 5.35234 4.72886L5.35078 4.72652Z" fill="white"/>
+</svg>

Разлика између датотеке није приказан због своје велике величине
+ 47 - 0
src/assets/img/index/Cross-device_syncing_2_.svg


+ 18 - 0
src/router/index.js

@@ -15,6 +15,9 @@ import IcoIndex from "../views/index/ico/Index.vue";
 import LoanIndex from "../views/index/loan/Index.vue";
 import LoanRules from "../views/index/loan/Rules.vue";
 import UserLoanIndex from "../views/user/loan/Index.vue";
+import CommitMessage from "../views/index/loan/CommitMessage.vue";
+import ContractTerms from "../views/index/loan/ContractTerms.vue";
+import Signature from "../views/index/loan/Signature.vue";
 
 const routes = [
   {
@@ -97,6 +100,21 @@ const routes = [
     name: "userLoanIndex",
     component: UserLoanIndex,
   },
+  {
+    path: "/commitMessage",
+    name: "commitMessage",
+    component: CommitMessage,
+  },
+  {
+    path: "/contractTerms",
+    name: "contractTerms",
+    component: ContractTerms,
+  },
+  {
+    path: "/signature",
+    name: "signature",
+    component: Signature,
+  },
 ];
 
 const router = createRouter({

+ 91 - 0
src/views/index/dialog/PendingReview.vue

@@ -0,0 +1,91 @@
+<template>
+  <!-- 等待审核 -->
+  <div class="pending-review">
+    <div class="apply-mask" @click="emits('pendingReviewClose')"></div>
+    <div class="apply-content">
+      <div class="slide-line"></div>
+      <div class="apply-text pf600 fs18 fc121212">等待审核</div>
+      <img
+        src="../../../assets/img/index/Cross-device_syncing_2_.svg"
+        class="review-img"
+        alt="" />
+      <div class="review-desc pf500 fs14 fc333333">审核通过后,自动放币到您账户</div>
+      <div class="sure-btn pf600 fs14 fcFFFFFF">保存</div>
+    </div>
+  </div>
+</template>
+<script setup>
+  const emits = defineEmits(["pendingReviewClose"]);
+</script>
+<style lang="less" scoped>
+  .pending-review {
+    position: fixed;
+    left: 0;
+    top: 0;
+    z-index: 1;
+    display: flex;
+    flex-direction: column;
+    justify-content: flex-end;
+    width: 100%;
+    min-height: 100vh;
+
+    .apply-mask {
+      position: fixed;
+      left: 0;
+      top: 0;
+      z-index: -1;
+      width: 100%;
+      min-height: 100vh;
+      background: rgba(0, 0, 0, 0.5);
+    }
+
+    .apply-content {
+      display: flex;
+      flex-direction: column;
+      justify-content: flex-start;
+      align-items: center;
+      width: 375px;
+      height: 337px;
+      background: #ffffff;
+      border-radius: 24px 24px 0px 0px;
+
+      .slide-line {
+        margin-top: 12px;
+        width: 32px;
+        height: 4px;
+        border-radius: 2px;
+        opacity: 0.4;
+        background: rgba(0, 0, 0, 0.5);
+      }
+
+      .apply-text {
+        margin-top: 20px;
+        height: 24px;
+        line-height: 24px;
+        letter-spacing: 0.2px;
+      }
+
+      .review-img {
+        margin-top: 25px;
+        width: 100px;
+        height: 99px;
+      }
+
+      .review-desc {
+        margin-top: 10px;
+        line-height: 25px;
+        letter-spacing: 0.2px;
+      }
+
+      .sure-btn {
+        margin-top: 27px;
+        width: 311px;
+        height: 40px;
+        line-height: 40px;
+        text-align: center;
+        border-radius: 100px;
+        background: #df384c;
+      }
+    }
+  }
+</style>

+ 280 - 0
src/views/index/loan/CommitMessage.vue

@@ -0,0 +1,280 @@
+<template>
+  <!-- 提交信息 -->
+  <HeaderNav headerText="提交信息"></HeaderNav>
+  <div class="commit-message">
+    <div class="message-name">
+      <div class="name-left">
+        <div class="left-text pf500 fs14 fc333333">法定名</div>
+        <div class="left-input">
+          <input type="text" class="input pf400 fs14 fc333333" placeholder="名" />
+        </div>
+      </div>
+      <div class="name-right">
+        <div class="left-text pf500 fs14 fc333333">法定姓</div>
+        <div class="left-input">
+          <input type="text" class="input pf400 fs14 fc333333" placeholder="姓" />
+        </div>
+      </div>
+    </div>
+    <div class="card-type">
+      <div class="card-text pf500 fs14 fc333333">证件类型</div>
+      <div class="type-select pf400 fs14 fc333333">
+        身份证
+        <img src="../../../assets/icon/market/bottom-arrow.svg" alt="" />
+      </div>
+    </div>
+    <div class="card-number">
+      <div class="card-text pf500 fs14 fc333333">证件号码</div>
+      <div class="number-input">
+        <input
+          type="text"
+          class="input pf400 fs14 fc333333"
+          placeholder="请输入证件号码" />
+      </div>
+    </div>
+    <div class="card-type">
+      <div class="card-text pf500 fs14 fc333333">所在地区</div>
+      <div class="type-select pf400 fs14 fc333333">
+        请选择
+        <img src="../../../assets/icon/market/bottom-arrow.svg" alt="" />
+      </div>
+    </div>
+    <div class="address">
+      <div class="pf500 fs14 fc333333">详细地址</div>
+      <textarea
+        name=""
+        id=""
+        class="address-textarea pf400 fs14 fc333333"
+        placeholder="请输入"></textarea>
+    </div>
+    <div class="upload-card">
+      <div class="upload-title pf600 fs18 fc121212">上传证件照</div>
+      <div class="upload-desc pf400 fs14 fc999999">确保证件照清晰可见</div>
+      <div class="card-front">
+        <div class="desc1 pf400 fs12 fc999999">确保证件照清晰可见</div>
+        <div class="desc2 pf500 fs20 fc333333">身份证人像面</div>
+        <div class="btn pf600 fs14 fcFFFFFF">
+          上传
+          <img src="../../../assets/icon/index/upload.svg" alt="" />
+        </div>
+      </div>
+      <div class="card-back">
+        <div class="desc1 pf400 fs12 fc999999">确保证件照清晰可见</div>
+        <div class="desc2 pf500 fs20 fc333333">身份证国徽面</div>
+        <div class="btn pf600 fs14 fcFFFFFF">
+          上传
+          <img src="../../../assets/icon/index/upload.svg" alt="" />
+        </div>
+      </div>
+    </div>
+    <div class="upload-remarks pf500 fs12 fc999999">
+      支持小于8M的JPG、JPGE或PNG格式的图片 <br />
+      上传您身份证件的完整照片,<br />
+      请确保上传图片中的所有细节都清晰可见 <br />
+      请确保证件为原件并在有效期内 <br />
+      请将证件置于纯色背景下 <br />
+    </div>
+    <div class="submit pf600 fs14 fcFFFFFF" @click="submit">提交</div>
+  </div>
+</template>
+<script setup>
+  import HeaderNav from "../components/HeaderNav.vue";
+  import { useRoute, useRouter } from "vue-router";
+
+  const router = useRouter();
+
+  const submit = () => {
+    router.push("/contractTerms");
+  };
+</script>
+<style lang="less" scoped>
+  .commit-message {
+    display: flex;
+    flex-direction: column;
+    justify-content: flex-start;
+    align-items: center;
+    margin-bottom: 100px;
+    margin-top: 48px;
+    width: 100%;
+
+    .message-name {
+      display: flex;
+      flex-direction: row;
+      justify-content: space-between;
+      margin-top: 10px;
+      width: 345px;
+
+      .name-left,
+      .name-right {
+        width: 165px;
+
+        .left-text {
+          height: 18px;
+          line-height: 18px;
+        }
+
+        .left-input {
+          margin-top: 5px;
+          width: 165px;
+          height: 45px;
+
+          .input {
+            padding-left: 11px;
+            width: 100%;
+            height: 100%;
+            box-sizing: border-box;
+            border-radius: 6px;
+            border: none;
+            outline: none;
+            background: #f5f5f5;
+          }
+        }
+      }
+    }
+
+    .card-type {
+      margin-top: 10px;
+      width: 345px;
+
+      .type-select {
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+        align-items: center;
+        margin-top: 5px;
+        padding: 0 11px;
+        width: 345px;
+        height: 45px;
+        border-radius: 6px;
+        background: #f5f5f5;
+        box-sizing: border-box;
+
+        img {
+          width: 12px;
+          height: 8px;
+        }
+      }
+    }
+
+    .card-number {
+      margin-top: 10px;
+      width: 345px;
+
+      .number-input {
+        margin-top: 5px;
+        width: 345px;
+        height: 45px;
+
+        .input {
+          padding-left: 11px;
+          width: 100%;
+          height: 100%;
+          box-sizing: border-box;
+          border-radius: 6px;
+          border: none;
+          outline: none;
+          background: #f5f5f5;
+        }
+      }
+    }
+
+    .address {
+      margin-top: 10px;
+      width: 345px;
+
+      .address-textarea {
+        padding-top: 13px;
+        padding-left: 11px;
+        margin-top: 5px;
+        width: 345px;
+        height: 90px;
+        background: #f5f5f5;
+        border-radius: 6px;
+        border: none;
+        outline: none;
+        box-sizing: border-box;
+      }
+    }
+
+    .upload-card {
+      margin-top: 18px;
+      width: 345px;
+
+      .upload-title {
+        height: 24px;
+        line-height: 24px;
+      }
+
+      .upload-desc {
+        margin-top: 6px;
+        height: 18px;
+        line-height: 18px;
+      }
+
+      .card-front,
+      .card-back {
+        display: flex;
+        flex-direction: column;
+        justify-content: flex-start;
+        align-items: center;
+        margin-top: 17px;
+        width: 345px;
+        height: 175px;
+        border-radius: 8px;
+        border: 1px solid #ebebeb;
+        background: #f5f5f5;
+
+        .desc1 {
+          margin-top: 34px;
+          height: 18px;
+          line-height: 18px;
+        }
+
+        .desc2 {
+          margin-top: 9px;
+          height: 20px;
+          line-height: 20px;
+        }
+
+        .btn {
+          display: flex;
+          flex-direction: row;
+          justify-content: flex-start;
+          align-items: center;
+          margin-top: 25px;
+          padding-left: 16px;
+          width: 88px;
+          height: 40px;
+          border-radius: 64px;
+          background: #df384c;
+          box-sizing: border-box;
+
+          img {
+            margin-left: 10px;
+            width: 16px;
+            height: 16px;
+          }
+        }
+      }
+    }
+
+    .upload-remarks {
+      margin-top: 15px;
+      width: 345px;
+      height: 100px;
+      line-height: 20px;
+      letter-spacing: 0.2px;
+    }
+
+    .submit {
+      margin-top: 21px;
+      width: 311px;
+      height: 40px;
+      line-height: 40px;
+      text-align: center;
+      border-radius: 100px;
+      background: #df384c;
+      letter-spacing: 0.2px;
+    }
+  }
+</style>

+ 44 - 0
src/views/index/loan/ContractTerms.vue

@@ -0,0 +1,44 @@
+<template>
+  <!-- 合同内容 -->
+  <HeaderNav headerText="合同内容"></HeaderNav>
+  <div class="contract-terms pf400 fs14 fc666666">
+    借款协议的主要内容应涵盖以下几个方面:首先是关于合同各方当事人的个人身份信息;其次,详细列出了借款的类型,借款的具体用途以及借款的金额,同时还需明确借款的利率;第三,需要明确借款的期限;第四,规定了还款的方式;最后,需要明确违约责任及争议解决的相关条款。<br />
+    在签订借款合同时,应以书面形式呈现,但若双方当事人就自然人之间的借款事项另有约定的情况下,则可另行处理。<br />
+    通常情况下,借款合同的内容应包含借款的类别、货币种类、借款的用途、借款的金额、借款的利率、借款的期限以及还款的方式等关键条款。<br />
+    《民法典》第六百六十八条借款合同应当采用书面形式,但是自然人之间借款另有约定的除外。<br />
+    借款合同的内容一般包括借款种类、币种、用途、数额、利率、期限和还款方式等条款。<br />
+    第六百六十九条订立借款合同,借款人应当按照贷款人的要求提供与借款有关的业务活动和财务状况的真实情况。<br />
+  </div>
+  <div class="submit pf600 fs14 fcFFFFFF" @click="signature">签字</div>
+</template>
+<script setup>
+  import HeaderNav from "../components/HeaderNav.vue";
+  import { useRoute, useRouter } from "vue-router";
+
+  const router = useRouter();
+
+  const signature = () => {
+    router.push("/signature");
+  };
+</script>
+<style lang="less" scoped>
+  .contract-terms {
+    margin: 0 auto;
+    margin-top: 48px;
+    width: 345px;
+    line-height: 24px;
+    letter-spacing: 0.2px;
+  }
+
+  .submit {
+    margin: 0 auto;
+    margin-top: 187px;
+    width: 311px;
+    height: 40px;
+    line-height: 40px;
+    text-align: center;
+    border-radius: 100px;
+    background: #df384c;
+    letter-spacing: 0.2px;
+  }
+</style>

+ 16 - 1
src/views/index/loan/Index.vue

@@ -27,6 +27,9 @@
       请选择借贷产品
       <img src="../../../assets/icon/market/bottom-arrow.svg" alt="" />
     </div>
+    <div class="loan-product-tips pf500 fs12 fcDF384C" v-show="productTips">
+      当前信用分不足,无法进行贷款,请选择其他借贷产品
+    </div>
     <div class="loan-time margin-top10 pf500 fs14 fc333333">
       <div>还款周期</div>
       <div>15 天</div>
@@ -52,18 +55,25 @@
       <div>放款机构</div>
       <div>SDFFG508020</div>
     </div>
-    <div class="loan-btn pf600 fs14 fcFFFFFF">贷款</div>
+    <div class="loan-btn pf600 fs14 fcFFFFFF" @click="goCommitMessage">贷款</div>
     <div class="loan-rules pf600 fs14 fcDF384C" @click="goRules">贷款规则</div>
   </div>
 </template>
 <script setup>
   import { useRoute, useRouter } from "vue-router";
+  import { ref } from "vue";
+
+  const productTips = ref(false);
 
   const router = useRouter();
 
   const goRules = () => {
     router.push("/loanRules");
   };
+
+  const goCommitMessage = () => {
+    router.push("/commitMessage");
+  };
 </script>
 <style lang="less" scoped>
   .loan-header {
@@ -181,6 +191,11 @@
       }
     }
 
+    .loan-product-tips {
+      margin-top: 6px;
+      width: 349px;
+    }
+
     .loan-price {
       display: flex;
       flex-direction: row;

+ 76 - 0
src/views/index/loan/Signature.vue

@@ -0,0 +1,76 @@
+<template>
+  <!-- 签字 -->
+  <HeaderNav headerText="签字"></HeaderNav>
+  <div class="signature">
+    <div class="signature-area">
+      <div class="title pf600 fs20 fc121212">签署您的名字</div>
+      <!-- 签字区域 -->
+      <div class="content"></div>
+    </div>
+    <div class="submit pf600 fs14 fcFFFFFF" @click="pendingReviewFlag = true">提交</div>
+    <div class="signature-clear pf600 fs16 fcDF384C">重签</div>
+  </div>
+  <PendingReview
+    v-show="pendingReviewFlag"
+    @pendingReviewClose="pendingReviewClose"></PendingReview>
+</template>
+<script setup>
+  import HeaderNav from "../components/HeaderNav.vue";
+  import PendingReview from "../dialog/PendingReview.vue";
+  import { ref } from "vue";
+
+  const pendingReviewFlag = ref(false);
+  const pendingReviewClose = () => {
+    pendingReviewFlag.value = false;
+  };
+</script>
+<style lang="less" scoped>
+  .signature {
+    display: flex;
+    flex-direction: column;
+    justify-content: flex-start;
+    align-items: center;
+    margin-top: 48px;
+    width: 100%;
+
+    .signature-area {
+      display: flex;
+      flex-direction: column;
+      justify-content: flex-start;
+      align-items: center;
+      margin-top: 50px;
+      width: 345px;
+      height: 407px;
+      border-radius: 16px;
+      border: 1px solid #a8a8a8;
+
+      .title {
+        margin-top: 27px;
+        line-height: 24px;
+        letter-spacing: 0.2px;
+      }
+
+      .content {
+        width: 311px;
+        height: 272px;
+        border-bottom: 1px solid rgba(168, 168, 168, 0.3);
+      }
+    }
+
+    .submit {
+      margin: 0 auto;
+      margin-top: 28px;
+      width: 311px;
+      height: 40px;
+      line-height: 40px;
+      text-align: center;
+      border-radius: 100px;
+      background: #df384c;
+      letter-spacing: 0.2px;
+    }
+
+    .signature-clear {
+      margin-top: 28px;
+    }
+  }
+</style>

+ 96 - 1
src/views/user/loan/Repaid.vue

@@ -1,9 +1,104 @@
 <template>
   <!-- 已还款 -->
-  <div class="repaid">2</div>
+  <div class="repaid">
+    <div class="repaymenting-item">
+      <div class="item-name">
+        <div class="pf400 fs14 fc1F2937">贷款金额(USDT)</div>
+        <div class="pf500 fs14 fcDF384C">借贷产品名称</div>
+      </div>
+      <div class="item-number pf600 fs24 fc1F2937">1,125,158.00</div>
+      <div class="item-line"></div>
+      <div class="item-first margin-top11">
+        <div class="pf500 fs12 fcA8A8A8">还款周期</div>
+        <div class="pf500 fs12 fcDF384C">15 天</div>
+      </div>
+      <div class="item-first margin-top4">
+        <div class="pf500 fs12 fcA8A8A8">贷款时间</div>
+        <div class="pf500 fs12 fc767676">2025-11-04, 16:30</div>
+      </div>
+      <div class="item-first margin-top4">
+        <div class="pf500 fs12 fcA8A8A8">利息</div>
+        <div class="pf500 fs12 fc767676">5.45 USDT</div>
+      </div>
+      <div class="item-first margin-top4">
+        <div class="pf500 fs12 fcA8A8A8">日利率</div>
+        <div class="pf500 fs12 fc767676">0.16%</div>
+      </div>
+      <div class="item-first margin-top4">
+        <div class="pf500 fs12 fcA8A8A8">还款方式</div>
+        <div class="pf500 fs12 fc767676">到期一次性还清</div>
+      </div>
+      <div class="item-first margin-top4">
+        <div class="pf500 fs12 fcA8A8A8">放款机构</div>
+        <div class="pf500 fs12 fc767676">SDFFG508020</div>
+      </div>
+      <div class="item-kuan pf600 fs14 fcFFFFFF">已还清</div>
+    </div>
+  </div>
 </template>
 <script setup></script>
 <style lang="less" scoped>
   .repaid {
+    width: 345px;
+
+    .repaymenting-item {
+      display: flex;
+      flex-direction: column;
+      justify-content: flex-start;
+      align-items: center;
+      margin-top: 10px;
+      width: 345px;
+      height: 272px;
+      border-radius: 8px;
+      border: 1px solid #ebebeb;
+
+      .margin-top4 {
+        margin-top: 4px;
+      }
+
+      .margin-top11 {
+        margin-top: 11px;
+      }
+
+      .item-name {
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+        align-items: center;
+        margin-top: 11px;
+        width: 311px;
+        height: 24px;
+      }
+
+      .item-number {
+        width: 311px;
+      }
+
+      .item-line {
+        margin-top: 7px;
+        width: 310px;
+        height: 1px;
+        background: #e9e9e9;
+      }
+
+      .item-first {
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+        align-items: center;
+        width: 311px;
+        height: 18px;
+      }
+
+      .item-kuan {
+        margin-top: 7px;
+        width: 311px;
+        height: 40px;
+        line-height: 40px;
+        text-align: center;
+        background: #a8a8a8;
+        border-radius: 100px;
+      }
+    }
   }
 </style>

Неке датотеке нису приказане због велике количине промена