zhb 3 месяцев назад
Родитель
Сommit
25008a376b

+ 9 - 0
api/apply.ts

@@ -0,0 +1,9 @@
+
+import { post } from '@/utils/request';
+
+export const applyApi = {
+  // 根据条件查看拒绝列表-用于下拉和选择展示理由
+  reasonsRefusalList: (params = {}) => {
+    return post('/reasons/refusal/list', params);
+  },
+};

+ 13 - 0
api/country.ts

@@ -0,0 +1,13 @@
+
+import { post, get } from '@/utils/request';
+
+export const countryApi = {
+  // 获取国家列表
+  Country: (params = {}) => {
+    // 注意:原有this.postAll("Host80", ...)逻辑如需保留需补充实现
+    return post('/country/get', params, 'Host80');
+  },
+  CountryGet: (params = {}) => {
+    return get('/country/get', params);
+  },
+};

+ 17 - 0
api/customer.ts

@@ -0,0 +1,17 @@
+
+import { post } from '@/utils/request';
+
+export const customerApi = {
+  // cid详细信息real
+  cidRealSingle: (params = {}) => post('/custom/search/real/single', params),
+  // 真实用户列表all
+  realCustomerListAll: (params = {}) => post('/custom/login/search/custom/list', params),
+  // ibno详细信息
+  pIbNoRealSingle: (params = {}) => post('/ib/search/ib/single', params),
+  // 用户文件审核
+  customFileApprove: (params = {}) => post('/custom/file/approve', params),
+  // 反审核
+  customFileApproveDe: (params = {}) => post('/custom/file/de/approve', params),
+  // 根据条件查看拒绝列表-用于下拉和选择展示理由
+  reasonsRefusalList: (params = {}) => post('/reasons/refusal/list', params),
+};

+ 3 - 0
api/enter.ts

@@ -0,0 +1,3 @@
+
+// 暂无接口定义,如需添加请补充
+export const enterApi = {};

+ 11 - 0
api/financial.ts

@@ -0,0 +1,11 @@
+
+import { post } from '@/utils/request';
+
+export const financialApi = {
+  // 入金金额统计
+  depositAmountStatistics: (params = {}) => post('/finance/deposit/amount/statictics', params),
+  // 出金金额统计
+  withdrawAmountStatistics: (params = {}) => post('/finance/withdraw/amount/statictics', params),
+  // 根据条件查看拒绝列表-用于下拉和选择展示理由
+  reasonsRefusalList: (params = {}) => post('/reasons/refusal/list', params),
+};

+ 13 - 0
api/google.ts

@@ -0,0 +1,13 @@
+
+import { post } from '@/utils/request';
+
+export const googleApi = {
+  // 查询组别列表
+  googleGroupList: (params = {}) => post('/google/group/search/list', params),
+  // 删除组别
+  googleGroupDelete: (params = {}) => post('/google/group/delete', params),
+  // 更新组别
+  googleGroupUpdate: (params = {}) => post('/google/group/update', params),
+  // 新增组别
+  googleGroupAdd: (params = {}) => post('/google/group/add', params),
+};

+ 35 - 0
api/login.ts

@@ -0,0 +1,35 @@
+
+import { post } from '@/utils/request';
+
+export const loginApi = {
+  // 登录
+  Login: (params = {}) => post('/custom/login', params, 'Host80'),
+  // 获取登录信息
+  CustomLoginInfo: (params = {}) => post('/custom/info', params, 'Host80'),
+  // 登出
+  Logout: (params = {}) => post('/user/logout', params),
+  // 注册
+  Register: (params = {}) => post('/custom/register', params, 'Host80'),
+  // 发送邮件验证
+  Code: (params = {}) => post('/custom/register/send/code', params),
+  // 当前国家编码
+  CodeById: (params = {}) => post('/country/getCodeByIp', params, 'Host80'),
+  // 语言切换
+  switchLanguage: (params = {}) => post('/user/switch/lang', params),
+  // 忘记密码
+  forgetPwd: (params = {}) => post('/user/update/password/send/email', params),
+  // 修改密码
+  updatePwd: (params = {}) => post('/user/update/login/password', params),
+  // 高风险客户内转提醒list
+  financeTransferRiskRemindList: (params = {}) => post('/finance/transfer/risk/remind/list', params),
+  // 高风险客户内转提醒
+  financeTransferRiskRemindConfirm: (params = {}) => post('/finance/transfer/risk/remind/confirm', params),
+  // 发送邮件验证
+  sendCode: (params = {}) => post('/user/login/send/code', params),
+  // 登录验证方式
+  loginValid: (params = {}) => post('/custom/login/valid', params),
+  // 获取用户附加信息(角色列表)
+  getUserAttachs: (params = {}) => post('/user/attachs', params),
+  // 切换登录身份
+  switchLogin: (params = {}) => post('/user/switchLogin', params),
+};

+ 11 - 0
api/marketing.ts

@@ -0,0 +1,11 @@
+
+import { post } from '@/utils/request';
+
+export const marketingApi = {
+  // 审核邮箱add
+  emailAdd: (params = {}) => post('/approve/email/add', params),
+  // 审核邮箱update
+  emailUpdate: (params = {}) => post('/approve/email/update', params),
+  // 获取国家列表
+  Country: (params = {}) => post('/country/get', params),
+};

+ 7 - 0
api/salaryPerformance.ts

@@ -0,0 +1,7 @@
+
+import { post } from '@/utils/request';
+
+export const salaryPerformanceApi = {
+  // 下拉
+  salesCommissionRuleDropdown: (params = {}) => post('/sales/commission/rule/search/dropdown', params),
+};

+ 23 - 0
api/system.ts

@@ -0,0 +1,23 @@
+
+import { post } from '@/utils/request';
+
+export const systemApi = {
+  // cid详细信息real
+  cidRealSingle: (params = {}) => post('/custom/search/real/single', params),
+  // 真实用户列表all
+  realCustomerListAll: (params = {}) => post('/custom/login/search/custom/list', params),
+  // 反审核
+  customFileApproveDe: (params = {}) => post('/custom/file/de/approve', params),
+  // 根据父级id获取下级城市
+  countryGet: (params = {}) => post('/country/get', params),
+  // 拒绝理由添加
+  reasonsRefusalAdd: (params = {}) => post('/reasons/refusal/add', params),
+  // 拒绝理由修改
+  reasonsRefusalUpdate: (params = {}) => post('/reasons/refusal/update', params),
+  // 删除拒绝理由
+  reasonsRefusalDelete: (params = {}) => post('/reasons/refusal/delete', params),
+  // 单个查看拒绝理由
+  reasonsRefusalSingle: (params = {}) => post('/reasons/refusal/search/single', params),
+  // 拒绝理由列表
+  reasonsRefusalSearchList: (params = {}) => post('/reasons/refusal/search/list', params),
+};

+ 1 - 1
components/QrCode.vue

@@ -151,7 +151,7 @@ function drawLogo(ctx) {
 
     // 绘制白色背景
     ctx.setFillStyle('#ffffff')
-    ctx.fillRect(dx - 5, dy - 5, logoSize + 10, logoSize + 10)
+    ctx.fillRect(dx, dy, logoSize, logoSize)
 
     // 在真机上,确保图片已加载再绘制
     const img = new Image()

+ 271 - 81
pages/login/index.vue

@@ -1,6 +1,6 @@
 <script setup>
 import { ref, onMounted, computed } from "vue";
-
+import QrCode from "@/components/QrCode.vue";
 import { post } from "@/utils/request";
 import { userToken } from "@/composables/config";
 import { userApi } from "@/api/user";
@@ -8,6 +8,7 @@ import { ucardApi } from "@/api/ucard";
 import useUserStore from "@/stores/use-user-store";
 import useRouter from "@/hooks/useRouter";
 import { useI18n } from "vue-i18n";
+import logoImage from "/static/images/logo3.png";
 const router = useRouter();
 const { t } = useI18n();
 const userStore = useUserStore();
@@ -131,55 +132,106 @@ const inputType = ref("password");
 </script>
 
 <template>
-  <cwg-page-wrapper>
-    <view>
-      <view class="company u-flex-y u-flex-y-center">
-        <image src="/static/images/logo.png" class="company-icon" mode="widthFix"></image>
-      </view>
+  <cwg-page-wrapper class="login-page" :isHeaderFixed="true">
+    <uni-row class="demo-uni-row">
+      <match-media :min-width="991">
+        <uni-col :xs="24" :sm="24" :md="12" :lg="14" :xl="16" class="left-bg">
+          <view class="company logo u-flex-y u-flex-y-center">
+            <image src="/static/images/logo4.png" class="company-icon" mode="widthFix"></image>
+          </view>
+          <view class="left-box">
+            <view class="left-content">
+              <view class="h1">
+                <text>{{ t('newLoop.item12') }}</text>
+                <br />
+                <text class="color-white">{{ t('newLoop.item13') }}</text>
+              </view>
+              <view class="h6 text-white">{{ t('newLoop.item14') }}</view>
+              <view class="company u-flex-y u-flex-y-center">
+                <image src="/static/images/trust-pilot.png" class="company-icon" mode="widthFix"></image>
+              </view>
+            </view>
+          </view>
+        </uni-col>
+      </match-media>
+      <uni-col :xs="24" :sm="24" :md="12" :lg="10" :xl="8" class="right-f">
+        <view class="account">
+          <match-media :max-width="991">
+            <view class="company u-flex-y u-flex-y-center">
+              <image src="/static/images/logo.png" class="company-icon" mode="widthFix"></image>
+            </view>
+          </match-media>
+          <view class="title">
+            <view class="tit1">{{ t('newSignin.item1') }}</view>
+            <view class="tit2">{{ t('newSignin.item2') }}</view>
+          </view>
+          <view>
+            <up-form :model="form" ref="uFormRef">
+              <up-form-item label="" prop="loginName">
+                <up-input :customStyle="customStyle" v-model="form.loginName" border="none"
+                  :placeholder="t('signin.form.email')">
+                  <template #prefix>
+                    <cwg-icon name="email-outline" :size="20" color="#000" />
+                  </template>
+                </up-input>
+              </up-form-item>
 
-      <view class="account">
-        <view>
-          <up-form :model="form" ref="uFormRef">
-            <up-form-item label="" prop="loginName">
-              <up-input :customStyle="customStyle" v-model="form.loginName" border="none"
-                :placeholder="t('signin.form.email')">
-                <template #prefix>
-                  <cwg-icon name="email-outline" :size="20" color="#000" />
-                </template>
-              </up-input>
-            </up-form-item>
-
-            <up-form-item label="" prop="password">
-              <up-input :customStyle="customStyle" v-model="form.password" :type="inputType" border="none"
-                :placeholder="t('signin.form.password')">
-                <template #prefix>
-                  <cwg-icon name="lock-outline" :size="20" color="#000" />
-                </template>
-              </up-input>
-            </up-form-item>
-          </up-form>
-        </view>
-        <view class="u-flex u-flex-between u-flex-y-center">
-          <view class="check-box">
-            <up-checkbox-group v-model="remenber" @change="checkboxChange">
-              <up-checkbox size="14" labelSize="14" labelColor="#666666" activeColor="#ea002a"
-                :label="t('newSignin.item5')" name="记住我" class="wcg-checkbox"></up-checkbox>
-            </up-checkbox-group>
+              <up-form-item label="" prop="password">
+                <up-input :customStyle="customStyle" v-model="form.password" :type="inputType" border="none"
+                  :placeholder="t('signin.form.password')">
+                  <template #prefix>
+                    <cwg-icon name="lock-outline" :size="20" color="#000" />
+                  </template>
+                </up-input>
+              </up-form-item>
+            </up-form>
+          </view>
+          <view class="u-flex u-flex-between u-flex-y-center mb1">
+            <view class="check-box">
+              <up-checkbox-group v-model="remenber" @change="checkboxChange">
+                <up-checkbox size="14" labelSize="14" labelColor="#666666" activeColor="#ea002a"
+                  :label="t('newSignin.item5')" name="记住我" class="wcg-checkbox"></up-checkbox>
+              </up-checkbox-group>
+            </view>
+            <navigator url="/pages/login/reset" class="account-tip">
+              <text>{{ t("signin.forget") }}</text>
+            </navigator>
           </view>
-          <navigator url="/pages/login/reset" class="account-tip">
-            <text>{{ t("signin.forget") }}</text>
+          <view class="cwg-button">
+            <u-button type="primary" class="" @click="submit">
+              {{ t("signin.login") }}
+            </u-button>
+          </view>
+          <navigator url="/pages/login/regist" class="account-tip">
+            {{ t("signin.words") }}
+            <text>{{ t("signin.signup") }}</text>
           </navigator>
-        </view>
-        <view class="cwg-button">
-          <u-button type="primary" class="" @click="submit">
-            {{ t("signin.login") }}
-          </u-button>
-        </view>
+          <match-media :min-width="791">
+
 
-        <!-- <navigator url="/pages/login/regist" class="account-tip">
-          {{ t("signin.words") }}
-          <text>{{ t("signin.signup") }}</text>
-        </navigator> -->
+            <view class="qr-container">
+              <view class="qr-title">
+                <view class="line"></view>
+                <view class="qr-tit2">{{ t('newSignin.item2') }}</view>
+                <view class="line"></view>
+              </view>
+              <QrCode width="200" height="200" text="cardGuide" :logo="logoImage"></QrCode>
+            </view>
+          </match-media>
+        </view>
+      </uni-col>
+    </uni-row>
+    <view class="bottom-box">
+      <match-media :max-width="791">
+        <view class="bottom-title ellipsis">{{ t('newSignin.item12') }}</view>
+      </match-media>
+      <match-media :min-width="791">
+        <view class="bottom-title">{{ t('newSignin.item12') }}</view>
+      </match-media>
+      <view class="cwg-button">
+        <u-button type="primary" class="" @click="">
+          {{ t("News.More") }}
+        </u-button>
       </view>
     </view>
   </cwg-page-wrapper>
@@ -188,10 +240,135 @@ const inputType = ref("password");
 <style lang="scss" scoped>
 @import "@/uni.scss";
 
-page {
-  // padding: px2rpx(5) px2rpx(27);
+.login-page {
+  height: 100vh;
+  border: none;
+  padding: 0;
 }
 
+.demo-uni-row {
+  margin: 0 !important;
+
+  .left-bg {
+    height: calc(100vh - 60px);
+    background-image: url(/static//images/login-bg.gif);
+    background-repeat: no-repeat;
+    background-size: cover;
+    background-position: center center;
+
+    .left-box {
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      align-items: center;
+
+      .h1 {
+        // text-align: center;
+        line-height: 20px;
+        color: #fff;
+        font-size: 30px;
+        margin-top: 30px;
+        font-size: 700;
+        line-height: 1.5;
+      }
+
+      .h6 {
+        text-align: start;
+        line-height: 20px;
+        color: #fff;
+        font-size: 14px;
+        margin-top: 10px;
+      }
+
+      .company {
+        padding: px2rpx(40) 0 px2rpx(50) 0;
+        position: relative;
+        align-items: flex-start !important;
+      }
+    }
+
+    .left-content {
+      .h1 {
+        // text-align: center;
+        line-height: 20px;
+        color: #fff;
+        font-size: 30px;
+        margin-top: 30px;
+        font-size: 700;
+        line-height: 1.5;
+      }
+
+      .h6 {
+        line-height: 20px;
+        color: #fff;
+        font-size: 14px;
+        margin-top: 10px;
+      }
+    }
+  }
+
+  .right-f {
+    background-color: #fff;
+    padding: 0 px2rpx(24);
+    box-sizing: border-box;
+
+    .account {
+      background-color: #ffffff;
+      position: relative;
+      height: calc(100vh - 60px);
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      padding: 0 10%;
+
+      .company {
+        padding: px2rpx(50) 0 px2rpx(20) 0;
+        position: relative;
+        align-items: center !important;
+      }
+
+      .company-icon {
+        width: px2rpx(234);
+      }
+    }
+  }
+}
+
+.bottom-box {
+  width: 100%;
+  height: 60px;
+  background-color: #fff;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  color: #000;
+
+  .bottom-title {
+
+    text-align: center;
+    font-size: px2rpx(14);
+    font-weight: 500;
+    line-height: 1.5;
+    color: #666666;
+
+  }
+
+  .ellipsis {
+    width: px2rpx(200);
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+  }
+
+  .cwg-button {
+    width: 120px !important;
+    padding: px2rpx(4) 0 !important;
+  }
+}
+
+
+
+
 button {
   background-color: #ea002a;
   font-size: px2rpx(14);
@@ -201,46 +378,63 @@ button {
 }
 
 .company {
-  padding: px2rpx(110) 0 px2rpx(50) 0;
+  padding: px2rpx(50) 0 px2rpx(200) 0;
   position: relative;
   align-items: flex-start !important;
 }
 
-.home-bg {
-  position: absolute;
-  width: 100%;
-  height: 100%;
-  top: 0;
-  left: 0;
-  z-index: -1;
+.logo {
+  margin-left: px2rpx(48);
 }
 
-.company-icon {
-  width: px2rpx(117);
-}
+.title {
+  margin: px2rpx(32) 0;
+  font-size: px2rpx(24);
+  font-weight: bolder;
+  color: #e4e4e4;
+  text-align: center;
 
-.company-head {
-  .name {
-    font-size: px2rpx(20);
-    font-weight: 500;
-    color: #ea002a;
-    margin-bottom: px2rpx(2);
+  i {
+    margin-right: px2rpx(10);
   }
 
-  .into {
-    font-size: px2rpx(14);
-    font-weight: 350;
-    color: #222222;
+  .tit1 {
+    font-size: px2rpx(34);
+    line-height: 1.5;
+    font-weight: bold;
+    color: #000000;
+  }
+
+  .tit2 {
+    font-size: px2rpx(16);
+    line-height: 1.5;
+    color: #cecece;
+    font-weight: 500;
   }
 }
 
-.account {
-  /* border-radius: px2rpx(16) px2rpx(16) px2rpx(0) px2rpx(0); */
-  background-color: #ffffff;
-  position: relative;
-  top: px2rpx(-15);
+.qr-title {
+  font-size: px2rpx(16);
+  line-height: 1.5;
+  color: #cecece;
+  font-weight: 500;
+  text-align: center;
+  margin: px2rpx(40) 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  .line {
+    flex: 1;
+    height: 1px;
+    background-color: #e4e4e4;
+  }
+
+  .qr-tit2 {
+    margin: 0 px2rpx(12);
+
+  }
 
-  /* box-shadow: 0 -1px 4px rgba(97, 96, 96, 0.1); */
 }
 
 .input {
@@ -277,18 +471,14 @@ button {
 
 :deep(.u-form-item__body) {
   padding: 0 !important;
-  padding-bottom: px2rpx(14) !important;
+  padding-bottom: px2rpx(24) !important;
 }
 
 :deep(.wcg-checkbox) {
   padding: 0 !important;
-  /* .u-checkbox__icon-wrap {
-    background-color: #ea002a !important;
-    border-color: #ea002a !important;
-  } */
 }
 
 .cwg-button {
-  padding-top: px2rpx(14) !important;
+  padding: px2rpx(34) 0 !important;
 }
 </style>

+ 29 - 0
static/images/cwg-logo-01.svg

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1152.78 167.73">
+  <defs>
+    <style>
+      .cls-1 {
+        fill: #fff;
+      }
+
+      .cls-1, .cls-2, .cls-3 {
+        fill-rule: evenodd;
+      }
+
+      .cls-2 {
+        fill: #040000;
+      }
+
+      .cls-3 {
+        fill: #e61f21;
+      }
+    </style>
+  </defs>
+  <g>
+    <path class="cls-3" d="m35.79,2.4h102.44c16.98,0,30.87,13.89,30.87,30.87v102.44c0,16.98-13.89,30.87-30.87,30.87H35.79c-16.98,0-30.87-13.89-30.87-30.87V33.27C4.92,16.29,18.81,2.4,35.79,2.4h0Z"/>
+    <path class="cls-1" d="m93.13,29.14c17.42,0,32.95,8.05,43.1,20.63l-2.33,2.08-15.01,13.45c-5.86-7.85-15.21-12.93-25.76-12.93-17.74,0-32.12,14.38-32.12,32.12s14.38,32.12,32.12,32.12c10.54,0,19.9-5.08,25.76-12.93l15.01,13.45,2.33,2.08c-10.15,12.58-25.68,20.63-43.1,20.63-30.56,0-55.35-24.79-55.35-55.35s24.79-55.35,55.35-55.35h0Zm-.25,4.26c-28.1.14-50.84,22.96-50.84,51.09s22.74,50.95,50.84,51.09v-14.71c-19.97-.13-36.13-16.37-36.13-36.38s16.16-36.24,36.13-36.38v-14.71h0Zm-.63,23.72c-14.66.54-26.36,12.6-26.36,27.37s11.7,26.83,26.36,27.37v-4.45c-12.28-.47-22.06-10.58-22.06-22.92s9.77-22.46,22.06-22.92v-4.45h0Zm-4.41-18.39c-22.96,2.62-40.77,22.12-40.77,45.76s17.82,43.13,40.77,45.75v-4.68c-20.38-2.6-36.13-20.02-36.13-41.08s15.75-38.48,36.13-41.08v-4.68h0Z"/>
+  </g>
+  <path class="cls-2" d="m459.02,106.11l-35.79-80.54h23.61l38.18,86.03c2.98,6.68,5.97,10.6,13.54,10.6s10.93-3.18,14.09-9.55l43.3-87.07h22.82l-46.77,96.26c-6.73,13.83-17.88,21.45-33.28,21.45-11.78,0-21.23-4.72-28.09-13.91-6.81,9.56-17.2,13.93-28.83,13.91-16.24-.03-27.13-8.91-33.61-23.48l-41.88-94.23h23.6l38.18,86.03c2.99,6.68,5.98,10.6,13.55,10.6s10.9-3.21,14.09-9.55l3.28-6.53h0Z"/>
+  <path class="cls-2" d="m711.47,121.4v-41.2h21.86v63.23h-91.71c-40.4,0-56.27-19.69-56.27-58.93s15.85-58.93,56.27-58.93h91.71v21.86h-91.71c-27.26,0-33.42,11.59-33.42,37.08s6.29,36.91,33.42,36.91h69.86Z"/>
+  <path class="cls-2" d="m347.77,25.55v21.86h-91.71c-27.27,0-33.42,11.59-33.42,37.08s6.29,36.91,33.42,36.91h91.71v22.02h-91.71c-40.4,0-56.27-19.69-56.27-58.93s15.85-58.93,56.27-58.93h91.71Z"/>
+</svg>

BIN
static/images/login-bg.gif


BIN
static/images/logo3.png


BIN
static/images/logo4.png


BIN
static/images/trust-pilot.png