zhb hace 1 mes
padre
commit
10c7ff00c4
Se han modificado 57 ficheros con 2599 adiciones y 2672 borrados
  1. 1 1
      components/card-websdkLink.vue
  2. 12 12
      components/cwg-notice.vue
  3. 322 322
      components/cwg-payment.vue
  4. 5 4
      components/cwg-popup.vue
  5. 1 1
      components/cwg-right-drawer.vue
  6. 3 3
      components/cwg-tabel.vue
  7. 1 1
      components/cwg-wiper.vue
  8. 1 1
      pages/activities/components/ActivityCard.vue
  9. 15 15
      pages/activities/components/ActivityDialogs.vue
  10. 1 1
      pages/customer/components/AccountList.vue
  11. 2 2
      pages/customer/components/ActivitiesSwiper.vue
  12. 1 1
      pages/customer/components/AmountWallet.vue
  13. 1 1
      pages/customer/components/DeleteAccountDialogs.vue
  14. 1 1
      pages/customer/components/TerminalChangePasswordDialog.vue
  15. 1 1
      pages/customer/components/TerminalDialog.vue
  16. 1 1
      pages/customer/components/TerminalInfoDialog.vue
  17. 1 1
      pages/customer/components/TerminalNickNameDialog.vue
  18. 3 3
      pages/customer/components/Timeline.vue
  19. 2 2
      pages/customer/components/TransactionCharts.vue
  20. 1 1
      pages/customer/components/TransactionDialogs.vue
  21. 1008 1013
      pages/login/index.vue
  22. 4 4
      pages/login/regist.vue
  23. 1 1
      pages/mine/components/CardAuthDialog.vue
  24. 1144 1221
      pages/mine/improveImmediately.vue
  25. 2 2
      pages/mine/kyc.vue
  26. 3 3
      static/scss/global/global.scss
  27. 1 1
      stores/pinia.types.ts
  28. 1 1
      stores/use-global-store.ts
  29. 3 2
      uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue
  30. 5 3
      uni_modules/uni-card/components/uni-card/uni-card.vue
  31. 2 2
      uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue
  32. 1 1
      uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue
  33. 1 1
      uni_modules/uni-combox/components/uni-combox/uni-combox.vue
  34. 4 4
      uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue
  35. 2 2
      uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.uvue
  36. 2 2
      uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue
  37. 1 1
      uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.css
  38. 1 1
      uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue
  39. 2 2
      uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
  40. 4 3
      uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue
  41. 1 1
      uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue
  42. 3 3
      uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue
  43. 1 1
      uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue
  44. 1 1
      uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue
  45. 3 2
      uni_modules/uni-group/components/uni-group/uni-group.vue
  46. 4 4
      uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue
  47. 3 2
      uni_modules/uni-list/components/uni-list-item/uni-list-item.vue
  48. 1 1
      uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue
  49. 1 1
      uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
  50. 1 1
      uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
  51. 1 1
      uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue
  52. 1 1
      uni_modules/uni-section/components/uni-section/uni-section.vue
  53. 3 2
      uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue
  54. 1 1
      uni_modules/uni-table/components/uni-table/uni-table.vue
  55. 1 1
      uni_modules/uni-table/components/uni-th/filter-dropdown.vue
  56. 4 3
      uni_modules/uni-table/components/uni-tr/table-checkbox.vue
  57. 1 1
      uni_modules/uni-tag/components/uni-tag/uni-tag.vue

+ 1 - 1
components/card-websdkLink.vue

@@ -197,7 +197,7 @@ defineExpose({
 }
 }
 
 
 .aaa {
 .aaa {
-  background-color: var(--color-white);
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
   padding-top: env(safe-area-inset-top);
   padding-top: env(safe-area-inset-top);
 }
 }
 </style>
 </style>

+ 12 - 12
components/cwg-notice.vue

@@ -34,7 +34,7 @@
 </template>
 </template>
 
 
 <script setup lang="ts">
 <script setup lang="ts">
-import { computed, ref, onMounted,onUnmounted } from 'vue'
+import { computed, ref, onMounted, onUnmounted } from 'vue'
 import { newsApi } from '@/service/news'
 import { newsApi } from '@/service/news'
 import useRouter from "@/hooks/useRouter";
 import useRouter from "@/hooks/useRouter";
 import { useI18n } from 'vue-i18n'
 import { useI18n } from 'vue-i18n'
@@ -76,9 +76,9 @@ const goMore = () => {
     close()
     close()
 }
 }
 const openNotice = () => {
 const openNotice = () => {
-  if (!userToken.value) return
-  getData()
-  getList()
+    if (!userToken.value) return
+    getData()
+    getList()
 }
 }
 const getData = async () => {
 const getData = async () => {
     const res = await newsApi.newsNoticeRead({
     const res = await newsApi.newsNoticeRead({
@@ -98,15 +98,15 @@ onMounted(() => {
     })
     })
     getData()
     getData()
     getList()
     getList()
-  uni.$on('updateUnreadCount',(value)=>{
-    console.log('updateUnreadCount',value)
-    isRed.value = value > 0
-    if (!userToken.value) return
-    getList()
-  })
+    uni.$on('updateUnreadCount', (value) => {
+        console.log('updateUnreadCount', value)
+        isRed.value = value > 0
+        if (!userToken.value) return
+        getList()
+    })
 })
 })
 onUnmounted(() => {
 onUnmounted(() => {
-  uni.off('updateUnreadCount')
+    uni.off('updateUnreadCount')
 })
 })
 </script>
 </script>
 
 
@@ -144,7 +144,7 @@ onUnmounted(() => {
 
 
     .right-drawer {
     .right-drawer {
         width: px2rpx(300);
         width: px2rpx(300);
-        background-color: var(--color-white);
+        background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
         display: flex;
         display: flex;
         flex-direction: column;
         flex-direction: column;
         padding: 20px 16px;
         padding: 20px 16px;

+ 322 - 322
components/cwg-payment.vue

@@ -70,383 +70,383 @@
 </template>
 </template>
 
 
 <script setup lang="ts">
 <script setup lang="ts">
-  import { computed, ref, onMounted, onUnmounted, watch } from 'vue'
-  import { newsApi } from '@/service/news'
-  import { storeToRefs } from 'pinia'
-  import useRouter from '@/hooks/useRouter'
-  import { drawApi } from '@/service/draw'
-  import { useI18n } from 'vue-i18n'
-  import { useMenuSplit } from '@/composables/useMenuSplit'
-  import useUserStore from '@/stores/use-user-store'
-  import { userToken } from '@/composables/config'
-  import { onLoad } from '@dcloudio/uni-app'
-  import { ibApi } from '@/service/ib'
-  import { documentaryApi } from '@/service/documentary'
-
-  const { mode } = useMenuSplit()
-
-  const { t, locale } = useI18n()
-  const userStore = useUserStore()
-
-  const isRed = ref(false)
-  const dropdownRef = ref(null)
-  const close = () => {
-    dropdownRef.value.close()
+import { computed, ref, onMounted, onUnmounted, watch } from 'vue'
+import { newsApi } from '@/service/news'
+import { storeToRefs } from 'pinia'
+import useRouter from '@/hooks/useRouter'
+import { drawApi } from '@/service/draw'
+import { useI18n } from 'vue-i18n'
+import { useMenuSplit } from '@/composables/useMenuSplit'
+import useUserStore from '@/stores/use-user-store'
+import { userToken } from '@/composables/config'
+import { onLoad } from '@dcloudio/uni-app'
+import { ibApi } from '@/service/ib'
+import { documentaryApi } from '@/service/documentary'
+
+const { mode } = useMenuSplit()
+
+const { t, locale } = useI18n()
+const userStore = useUserStore()
+
+const isRed = ref(false)
+const dropdownRef = ref(null)
+const close = () => {
+  dropdownRef.value.close()
+}
+const router = useRouter()
+const menuList = []
+const ibData = ref({})
+const walletData = ref({})
+
+const handleMenuClick = ({ value }) => {
+  goPages(value)
+}
+const NumberDecimal = (value) => {
+  let realVal = ''
+  if (!isNaN(value) && value !== '') {
+    // 截取当前数据到小数点后两位
+    realVal = parseFloat(value).toFixed(2)
+  } else {
+    realVal = '0'
   }
   }
-  const router = useRouter()
-  const menuList = []
-  const ibData = ref({})
-  const walletData = ref({})
-
-  const handleMenuClick = ({ value }) => {
-    goPages(value)
-  }
-  const NumberDecimal = (value) => {
-    let realVal = ''
-    if (!isNaN(value) && value !== '') {
-      // 截取当前数据到小数点后两位
-      realVal = parseFloat(value).toFixed(2)
-    } else {
-      realVal = '0'
-    }
-    return realVal
+  return realVal
+}
+const NumberDesensitization = (value) => {
+  let realVal = ''
+  if (!isNaN(value) && value !== '') {
+    value = value.toString()
+    realVal = '*****'
+  } else {
+    realVal = '--'
   }
   }
-  const NumberDesensitization = (value) => {
-    let realVal = ''
-    if (!isNaN(value) && value !== '') {
-      value = value.toString()
-      realVal = '*****'
-    } else {
-      realVal = '--'
+  return realVal
+}
+const isShow = ref(true)
+const walletbalance = ref(0)
+const pendingWithdrawAmount = ref(0)
+const formattedBalance = computed(() => {
+  const value = walletbalance.value || '0'
+  const decimalValue = NumberDecimal(value)
+  return isShow.value ? decimalValue : NumberDesensitization(decimalValue)
+})
+const formattedPendingWithdrawAmount = computed(() => {
+  const value = pendingWithdrawAmount.value || '0'
+  const decimalValue = NumberDecimal(value)
+  return isShow.value ? decimalValue : NumberDesensitization(decimalValue)
+})
+
+//ib金额
+const ibBalance = computed(() => {
+  const value = NumberDecimal(ibData.value?.balance || 0)
+  return isShow.value ? value : NumberDesensitization(value)
+})
+const ibTotalBalance = computed(() => {
+  const value = NumberDecimal(ibData.value?.all || 0)
+  return isShow.value ? value : NumberDesensitization(value)
+})
+// 跟单
+const followBalance = computed(() => {
+  const value = NumberDecimal(walletData.value?.walletAmount || 0)
+  return isShow.value ? value : NumberDesensitization(value)
+})
+const getWalletList = async () => {
+  let res = await drawApi.walletbalance({})
+  if (res.code == 200) {
+    if (res.data != null) {
+      walletbalance.value = res.data
     }
     }
-    return realVal
-  }
-  const isShow = ref(true)
-  const walletbalance = ref(0)
-  const pendingWithdrawAmount = ref(0)
-  const formattedBalance = computed(() => {
-    const value = walletbalance.value || '0'
-    const decimalValue = NumberDecimal(value)
-    return isShow.value ? decimalValue : NumberDesensitization(decimalValue)
-  })
-  const formattedPendingWithdrawAmount = computed(() => {
-    const value = pendingWithdrawAmount.value || '0'
-    const decimalValue = NumberDecimal(value)
-    return isShow.value ? decimalValue : NumberDesensitization(decimalValue)
-  })
-
-  //ib金额
-  const ibBalance = computed(() => {
-    const value = NumberDecimal(ibData.value?.balance || 0)
-    return isShow.value ? value : NumberDesensitization(value)
-  })
-  const ibTotalBalance = computed(() => {
-    const value = NumberDecimal(ibData.value?.all || 0)
-    return isShow.value ? value : NumberDesensitization(value)
-  })
-  // 跟单
-  const followBalance = computed(() => {
-    const value = NumberDecimal(walletData.value?.walletAmount || 0)
-    return isShow.value ? value : NumberDesensitization(value)
-  })
-  const getWalletList = async () => {
-    let res = await drawApi.walletbalance({})
-    if (res.code == 200) {
-      if (res.data != null) {
-        walletbalance.value = res.data
-      }
-    } else {
+  } else {
 
 
-      uni.showToast({
-        title: res.msg,
-        icon: 'none',
-      })
-    }
+    uni.showToast({
+      title: res.msg,
+      icon: 'none',
+    })
   }
   }
-
-  //获取处理中出金金额
-  const getPendingWithdrawAmount = async () => {
-    let res = await drawApi.pendingWithdrawAmount({})
-    if (res.code == 200) {
-      if (res.data != null) {
-        pendingWithdrawAmount.value = res.data
-      }
-    } else {
-      uni.showToast({
-        title: res.msg,
-        icon: 'none',
-      })
+}
+
+//获取处理中出金金额
+const getPendingWithdrawAmount = async () => {
+  let res = await drawApi.pendingWithdrawAmount({})
+  if (res.code == 200) {
+    if (res.data != null) {
+      pendingWithdrawAmount.value = res.data
     }
     }
+  } else {
+    uni.showToast({
+      title: res.msg,
+      icon: 'none',
+    })
   }
   }
-  const toggleShow = (e) => {
-    isShow.value = !e.detail.value
-  }
-  //跟单金额
-  const getMoneyList = async () => {
-    let res = await documentaryApi.followWalletSingle({})
-    if (res.code == 200) {
-      if (res.data != null) {
-        walletData.value = res.data
-      }
-    } else {
-      uni.showToast({
-        title: res.msg,
-        icon: 'none',
-      })
+}
+const toggleShow = (e) => {
+  isShow.value = !e.detail.value
+}
+//跟单金额
+const getMoneyList = async () => {
+  let res = await documentaryApi.followWalletSingle({})
+  if (res.code == 200) {
+    if (res.data != null) {
+      walletData.value = res.data
     }
     }
+  } else {
+    uni.showToast({
+      title: res.msg,
+      icon: 'none',
+    })
   }
   }
-
-  const goPages = (type) => {
-    let path
-    if (type == 1) {
-      path = '/pages/customer/wallet-transfer'
-    } else if (type == 2) {
-      path = '/pages/customer/wallet-history' // 此处根据实际“出金”路由修改
-    }
-    router.push(path)
-    close()
+}
+
+const goPages = (type) => {
+  let path
+  if (type == 1) {
+    path = '/pages/customer/wallet-transfer'
+  } else if (type == 2) {
+    path = '/pages/customer/wallet-history' // 此处根据实际“出金”路由修改
   }
   }
-
-  const goFollowPages = (type) => {
-    // let path
-    router.push('/pages/follow/transfer')
-    close()
+  router.push(path)
+  close()
+}
+
+const goFollowPages = (type) => {
+  // let path
+  router.push('/pages/follow/transfer')
+  close()
+}
+
+const goIbPages = (type) => {
+  let path, query
+  if (type == 1) {
+    path = '/pages/ib/withdraw-select'
+  } else if (type == 2) {
+    path = '/pages/ib/transfer'
+  } else if (type == 3) {
+    path = '/pages/ib/transfer'
+    query = { tab: 2 }
   }
   }
-
-  const goIbPages = (type) => {
-    let path, query
-    if (type == 1) {
-      path = '/pages/ib/withdraw-select'
-    } else if (type == 2) {
-      path = '/pages/ib/transfer'
-    } else if (type == 3) {
-      path = '/pages/ib/transfer'
-      query = { tab: 2 }
-    }
-    router.push({ path, query })
-    close()
+  router.push({ path, query })
+  close()
+}
+
+
+const toPaymentHistory = () => {
+  router.push({ path: '/pages/customer/payment-history', query: { fromPending: 'true' } })
+}
+
+const getIbData = async () => {
+  const res = await ibApi.IbData()
+  if (res.code === 200) {
+    if (res.data != null)
+      ibData.value = res.data
+  } else {
+    uni.showToast({ title: res.msg, icon: 'none' })
+  }
+}
+const getPay = (newMode) => {
+  if (newMode == 'customer') {
+    getWalletList()
+    getPendingWithdrawAmount()
+  } else if (newMode == 'ib') {
+    getIbData()
+  } else if (newMode == 'follow') {
+    getMoneyList()
   }
   }
+}
+watch(() => mode.value, (newMode) => {
+  if (!userToken.value) return
+  console.log(newMode, 'mode')
+  getPay(newMode)
+},
+  { immediate: true })
+onMounted(() => {
+  uni.$on('updatePayment', () => {
+    getPay(mode.value)
+  })
+})
+onUnmounted(() => {
+  uni.$off('updatePayment')
+})
+</script>
 
 
+<style scoped lang="scss">
+@import "@/uni.scss";
 
 
-  const toPaymentHistory = () => {
-    router.push({ path: '/pages/customer/payment-history', query: { fromPending: 'true' } })
+.notice-container {
+  :deep(.cwg-dropdown-menu-container) {
+    //left: px2rpx(-280) !important;
+    //right: px2rpx(0) !important;
   }
   }
 
 
-  const getIbData = async () => {
-    const res = await ibApi.IbData()
-    if (res.code === 200) {
-      if (res.data != null)
-        ibData.value = res.data
-    } else {
-      uni.showToast({ title: res.msg, icon: 'none' })
+  @media screen and (max-width: 991px) {
+    :deep(.cwg-dropdown-menu-container) {
+      left: px2rpx(-270) !important;
+      //max-width: px2rpx(400);
     }
     }
   }
   }
-  const getPay = (newMode) => {
-    if (newMode == 'customer') {
-      getWalletList()
-      getPendingWithdrawAmount()
-    } else if (newMode == 'ib') {
-      getIbData()
-    } else if (newMode == 'follow') {
-      getMoneyList()
+
+  .pc-header-btn {
+    position: relative;
+    width: fit-content;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    padding: 0 px2rpx(12);
+
+
+    &.has-dot::after {
+      content: '';
+      position: absolute;
+      top: px2rpx(4);
+      right: px2rpx(4);
+      width: px2rpx(8);
+      height: px2rpx(8);
+      background-color: #f56c6c;
+      border-radius: 50%;
     }
     }
   }
   }
-  watch(() => mode.value, (newMode) => {
-      if (!userToken.value) return
-      console.log(newMode, 'mode')
-      getPay(newMode)
-    },
-    { immediate: true })
-  onMounted(() => {
-    uni.$on('updatePayment', () => {
-      getPay(mode.value)
-    })
-  })
-  onUnmounted(() => {
-    uni.$off('updatePayment')
-  })
-</script>
-
-<style scoped lang="scss">
-  @import "@/uni.scss";
 
 
-  .notice-container {
-    :deep(.cwg-dropdown-menu-container) {
-      //left: px2rpx(-280) !important;
-      //right: px2rpx(0) !important;
+  .pc-payment-btn {
+    border-radius: px2rpx(4);
+    padding: px2rpx(4) px2rpx(12);
+    height: px2rpx(36);
+    cursor: pointer;
+
+    .balance-text {
+      margin-left: px2rpx(6);
+      font-size: px2rpx(14);
+      font-weight: 500;
+      color: #97A1C0;
     }
     }
+  }
 
 
-    @media screen and (max-width: 991px) {
-      :deep(.cwg-dropdown-menu-container) {
-        left: px2rpx(-270) !important;
-        //max-width: px2rpx(400);
-      }
-    }
+  .custom-payment-drawer {
+    width: px2rpx(320);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
+    padding: 0;
+    border-radius: px2rpx(8);
+    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
 
 
-    .pc-header-btn {
-      position: relative;
-      width: fit-content;
+    .drawer-header {
       display: flex;
       display: flex;
+      justify-content: space-between;
       align-items: center;
       align-items: center;
-      justify-content: center;
-      padding: 0 px2rpx(12);
-
+      padding: px2rpx(12) px2rpx(16);
+      border-bottom: 1px solid #f0f0f0;
 
 
-      &.has-dot::after {
-        content: '';
-        position: absolute;
-        top: px2rpx(4);
-        right: px2rpx(4);
-        width: px2rpx(8);
-        height: px2rpx(8);
-        background-color: #f56c6c;
-        border-radius: 50%;
+      .drawer-title {
+        font-size: px2rpx(14);
+        color: #333;
       }
       }
     }
     }
 
 
-    .pc-payment-btn {
-      border-radius: px2rpx(4);
-      padding: px2rpx(4) px2rpx(12);
-      height: px2rpx(36);
-      cursor: pointer;
+    .drawer-content {
+      padding: px2rpx(20) px2rpx(16);
 
 
-      .balance-text {
-        margin-left: px2rpx(6);
-        font-size: px2rpx(14);
-        font-weight: 500;
+      .balance-amount {
+        font-size: px2rpx(18);
+        font-weight: bold;
         color: #97A1C0;
         color: #97A1C0;
+        margin-bottom: px2rpx(8);
       }
       }
-    }
 
 
-    .custom-payment-drawer {
-      width: px2rpx(320);
-      background-color: var(--color-white);
-      padding: 0;
-      border-radius: px2rpx(8);
-      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
-
-      .drawer-header {
-        display: flex;
-        justify-content: space-between;
-        align-items: center;
-        padding: px2rpx(12) px2rpx(16);
-        border-bottom: 1px solid #f0f0f0;
-
-        .drawer-title {
-          font-size: px2rpx(14);
-          color: #333;
-        }
+      .account-type {
+        font-size: px2rpx(13);
+        color: #666;
+        margin-bottom: px2rpx(4);
       }
       }
 
 
-      .drawer-content {
-        padding: px2rpx(20) px2rpx(16);
-
-        .balance-amount {
-          font-size: px2rpx(18);
-          font-weight: bold;
-          color: #97A1C0;
-          margin-bottom: px2rpx(8);
-        }
+      .account-number {
+        font-size: px2rpx(13);
+        color: #999;
+      }
+    }
 
 
-        .account-type {
-          font-size: px2rpx(13);
-          color: #666;
-          margin-bottom: px2rpx(4);
-        }
+    .drawer-actions {
+      display: flex;
+      gap: px2rpx(10);
+      padding: 0 px2rpx(16) px2rpx(20);
 
 
-        .account-number {
-          font-size: px2rpx(13);
-          color: #999;
+      .action-btn {
+        flex: 1;
+        height: px2rpx(36);
+        line-height: px2rpx(36);
+        background-color: #f5f7fa;
+        color: #333;
+        font-size: px2rpx(13);
+        border-radius: px2rpx(4);
+        margin: 0;
+
+        &::after {
+          border: none;
         }
         }
-      }
 
 
-      .drawer-actions {
-        display: flex;
-        gap: px2rpx(10);
-        padding: 0 px2rpx(16) px2rpx(20);
-
-        .action-btn {
-          flex: 1;
-          height: px2rpx(36);
-          line-height: px2rpx(36);
-          background-color: #f5f7fa;
-          color: #333;
-          font-size: px2rpx(13);
-          border-radius: px2rpx(4);
-          margin: 0;
-
-          &::after {
-            border: none;
-          }
-
-          &:active {
-            background-color: #e4e7ed;
-          }
+        &:active {
+          background-color: #e4e7ed;
         }
         }
       }
       }
     }
     }
+  }
+
+  .notification-list {
+    width: 100%;
+  }
 
 
-    .notification-list {
-      width: 100%;
+  .notification-item {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    padding: px2rpx(12) px2rpx(16);
+    border-bottom: 1px solid #f0f0f0;
+    cursor: pointer;
+    transition: all 0.3s;
+
+    &:hover {
+      background-color: rgba(0, 0, 0, 0.05);
     }
     }
 
 
-    .notification-item {
-      display: flex;
-      align-items: center;
-      justify-content: space-between;
-      padding: px2rpx(12) px2rpx(16);
-      border-bottom: 1px solid #f0f0f0;
-      cursor: pointer;
-      transition: all 0.3s;
+    .item-content {
+      flex: 1;
 
 
-      &:hover {
-        background-color: rgba(0, 0, 0, 0.05);
+      .item-title {
+        font-size: px2rpx(14);
+        color: #333;
+        line-height: 1.4;
+        margin-bottom: px2rpx(4);
       }
       }
 
 
-      .item-content {
-        flex: 1;
-
-        .item-title {
-          font-size: px2rpx(14);
-          color: #333;
-          line-height: 1.4;
-          margin-bottom: px2rpx(4);
-        }
-
-        .item-time {
-          font-size: px2rpx(12);
-          color: #999;
-        }
+      .item-time {
+        font-size: px2rpx(12);
+        color: #999;
       }
       }
+    }
 
 
-      .item-badge {
-        margin-left: px2rpx(12);
+    .item-badge {
+      margin-left: px2rpx(12);
 
 
-        .dot {
-          width: px2rpx(8);
-          height: px2rpx(8);
-          background-color: #f56c6c;
-          border-radius: 50%;
-        }
+      .dot {
+        width: px2rpx(8);
+        height: px2rpx(8);
+        background-color: #f56c6c;
+        border-radius: 50%;
       }
       }
     }
     }
+  }
 
 
-    .logout-wrap {
-      margin-top: auto;
-      padding: 20px 16px;
-      margin-bottom: 20px;
-    }
+  .logout-wrap {
+    margin-top: auto;
+    padding: 20px 16px;
+    margin-bottom: 20px;
+  }
 
 
-    .logout-btn {
-      height: 44px;
-      background: #f4eadf;
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      gap: 8px;
-      color: #ff9800;
-      font-weight: 600;
-      cursor: pointer;
-    }
+  .logout-btn {
+    height: 44px;
+    background: #f4eadf;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    gap: 8px;
+    color: #ff9800;
+    font-weight: 600;
+    cursor: pointer;
   }
   }
+}
 </style>
 </style>

+ 5 - 4
components/cwg-popup.vue

@@ -4,7 +4,7 @@
             <!-- 弹窗头部 -->
             <!-- 弹窗头部 -->
             <view class="dialog-header" v-if="title">
             <view class="dialog-header" v-if="title">
                 <text class="dialog-title">{{ title || t('Tips.DeleteAccount') }}</text>
                 <text class="dialog-title">{{ title || t('Tips.DeleteAccount') }}</text>
-                
+
                 <uni-icons class="dialog-close" type="closeempty" size="20" color="#999" @click="closeDialog" />
                 <uni-icons class="dialog-close" type="closeempty" size="20" color="#999" @click="closeDialog" />
             </view>
             </view>
 
 
@@ -187,12 +187,13 @@ defineExpose({
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
 @import "@/uni.scss";
 @import "@/uni.scss";
-.crm-popup{
-  z-index: 9999;
+
+.crm-popup {
+    z-index: 9999;
 }
 }
 
 
 .cwg-dialog {
 .cwg-dialog {
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     border-radius: px2rpx(8);
     border-radius: px2rpx(8);
 
 
     overflow: hidden;
     overflow: hidden;

+ 1 - 1
components/cwg-right-drawer.vue

@@ -149,7 +149,7 @@ defineExpose({ openNotice, close })
 
 
     .right-drawer {
     .right-drawer {
         width: px2rpx(300);
         width: px2rpx(300);
-        background-color: var(--color-white);
+        background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
         display: flex;
         display: flex;
         flex-direction: column;
         flex-direction: column;
         padding: 20px 16px;
         padding: 20px 16px;

+ 3 - 3
components/cwg-tabel.vue

@@ -843,7 +843,7 @@ defineExpose({
             top: 0;
             top: 0;
             z-index: 100;
             z-index: 100;
             transition: all 0.3s;
             transition: all 0.3s;
-            background-color: #fafafa !important;
+            background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
             border-bottom: 1px solid #ebeef5 !important;
             border-bottom: 1px solid #ebeef5 !important;
             color: #606266;
             color: #606266;
 
 
@@ -990,7 +990,7 @@ defineExpose({
         padding: 0 px2rpx(12);
         padding: 0 px2rpx(12);
         min-width: px2rpx(32);
         min-width: px2rpx(32);
         height: px2rpx(30);
         height: px2rpx(30);
-        background-color: var(--color-white);
+        background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
         border-radius: px2rpx(4);
         border-radius: px2rpx(4);
         font-size: px2rpx(14);
         font-size: px2rpx(14);
         color: #606266;
         color: #606266;
@@ -1027,7 +1027,7 @@ defineExpose({
         min-width: px2rpx(20);
         min-width: px2rpx(20);
         height: px2rpx(26);
         height: px2rpx(26);
         padding: 0 px2rpx(4);
         padding: 0 px2rpx(4);
-        background-color: var(--color-white);
+        background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
         border-radius: px2rpx(4);
         border-radius: px2rpx(4);
         font-size: px2rpx(12);
         font-size: px2rpx(12);
         color: #606266;
         color: #606266;

+ 1 - 1
components/cwg-wiper.vue

@@ -244,7 +244,7 @@ const onItemClick = (index: number) => {
         &-active {
         &-active {
             width: px2rpx(32);
             width: px2rpx(32);
             border-radius: px2rpx(16);
             border-radius: px2rpx(16);
-            background-color: var(--color-white);
+            background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
         }
         }
     }
     }
 }
 }

+ 1 - 1
pages/activities/components/ActivityCard.vue

@@ -200,7 +200,7 @@ const handleButtonClick = (btn: any) => {
             flex-direction: column;
             flex-direction: column;
             padding: 0 px2rpx(14);
             padding: 0 px2rpx(14);
             box-sizing: border-box;
             box-sizing: border-box;
-            background-color: var(--color-white);
+            background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
             z-index: 1;
             z-index: 1;
             position: relative;
             position: relative;
         }
         }

+ 15 - 15
pages/activities/components/ActivityDialogs.vue

@@ -13,7 +13,7 @@
                 </view>
                 </view>
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogChinaUnionPay')">{{ t('Btn.Cancel')
                     <button class="btn-cancel" @click="closeDialog('dialogChinaUnionPay')">{{ t('Btn.Cancel')
-                    }}</button>
+                        }}</button>
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toTransformActive')">{{
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toTransformActive')">{{
                         t('Btn.Confirm') }}</button>
                         t('Btn.Confirm') }}</button>
                 </view>
                 </view>
@@ -33,7 +33,7 @@
                 </view>
                 </view>
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogChinaUnionPay1')">{{ t('Btn.Cancel')
                     <button class="btn-cancel" @click="closeDialog('dialogChinaUnionPay1')">{{ t('Btn.Cancel')
-                    }}</button>
+                        }}</button>
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toRealizationActive')">{{
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toRealizationActive')">{{
                         t('Btn.Confirm') }}</button>
                         t('Btn.Confirm') }}</button>
                 </view>
                 </view>
@@ -53,7 +53,7 @@
                 </view>
                 </view>
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogChinaUnionPayJX')">{{ t('Btn.Cancel')
                     <button class="btn-cancel" @click="closeDialog('dialogChinaUnionPayJX')">{{ t('Btn.Cancel')
-                    }}</button>
+                        }}</button>
                     <button class="btn-confirm" type="primary" @click="closeDialog('dialogChinaUnionPayJX')">{{
                     <button class="btn-confirm" type="primary" @click="closeDialog('dialogChinaUnionPayJX')">{{
                         t('Btn.Confirm') }}</button>
                         t('Btn.Confirm') }}</button>
                 </view>
                 </view>
@@ -80,7 +80,7 @@
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogDealResult')">{{ t('Btn.Cancel') }}</button>
                     <button class="btn-cancel" @click="closeDialog('dialogDealResult')">{{ t('Btn.Cancel') }}</button>
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApply23')">{{ t('Btn.Confirm')
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApply23')">{{ t('Btn.Confirm')
-                    }}</button>
+                        }}</button>
                 </view>
                 </view>
             </view>
             </view>
         </uni-popup>
         </uni-popup>
@@ -105,7 +105,7 @@
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogDealResultJx')">{{ t('Btn.Cancel') }}</button>
                     <button class="btn-cancel" @click="closeDialog('dialogDealResultJx')">{{ t('Btn.Cancel') }}</button>
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApply23Jx')">{{ t('Btn.Confirm')
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApply23Jx')">{{ t('Btn.Confirm')
-                    }}</button>
+                        }}</button>
                 </view>
                 </view>
             </view>
             </view>
         </uni-popup>
         </uni-popup>
@@ -129,7 +129,7 @@
                 </scroll-view>
                 </scroll-view>
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogDealResultJxVip')">{{ t('Btn.Cancel')
                     <button class="btn-cancel" @click="closeDialog('dialogDealResultJxVip')">{{ t('Btn.Cancel')
-                    }}</button>
+                        }}</button>
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApply23JxVip')">{{
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApply23JxVip')">{{
                         t('Btn.Confirm') }}</button>
                         t('Btn.Confirm') }}</button>
                 </view>
                 </view>
@@ -176,9 +176,9 @@
                 </scroll-view>
                 </scroll-view>
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogDealResultCpt')">{{ t('Btn.Cancel')
                     <button class="btn-cancel" @click="closeDialog('dialogDealResultCpt')">{{ t('Btn.Cancel')
-                    }}</button>
+                        }}</button>
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApplyCpt')">{{ t('Btn.Confirm')
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApplyCpt')">{{ t('Btn.Confirm')
-                    }}</button>
+                        }}</button>
                 </view>
                 </view>
             </view>
             </view>
         </uni-popup>
         </uni-popup>
@@ -202,7 +202,7 @@
                 </scroll-view>
                 </scroll-view>
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogDealResultJxJYB')">{{ t('Btn.Cancel')
                     <button class="btn-cancel" @click="closeDialog('dialogDealResultJxJYB')">{{ t('Btn.Cancel')
-                    }}</button>
+                        }}</button>
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApply24JYBVip')">{{
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApply24JYBVip')">{{
                         t('Btn.Confirm') }}</button>
                         t('Btn.Confirm') }}</button>
                 </view>
                 </view>
@@ -229,7 +229,7 @@
                 </scroll-view>
                 </scroll-view>
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogDealResultNoWorries')">{{ t('Btn.Cancel')
                     <button class="btn-cancel" @click="closeDialog('dialogDealResultNoWorries')">{{ t('Btn.Cancel')
-                    }}</button>
+                        }}</button>
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApplyNoWorries')">{{
                     <button class="btn-confirm" type="primary" @click="handleConfirm('toApplyNoWorries')">{{
                         t('news_add_field1.activitiesNoWorries.item6_1') }}</button>
                         t('news_add_field1.activitiesNoWorries.item6_1') }}</button>
                 </view>
                 </view>
@@ -292,7 +292,7 @@
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogNewTask')">{{ t('Home.msg.item3') }}</button>
                     <button class="btn-cancel" @click="closeDialog('dialogNewTask')">{{ t('Home.msg.item3') }}</button>
                     <button class="btn-confirm" type="primary" @click="closeDialog('dialogNewTask')">{{ t('Btn.Confirm')
                     <button class="btn-confirm" type="primary" @click="closeDialog('dialogNewTask')">{{ t('Btn.Confirm')
-                    }}</button>
+                        }}</button>
                 </view>
                 </view>
             </view>
             </view>
         </uni-popup>
         </uni-popup>
@@ -310,7 +310,7 @@
                 </view>
                 </view>
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogNewTaskDraw')">{{ t('Home.msg.item3')
                     <button class="btn-cancel" @click="closeDialog('dialogNewTaskDraw')">{{ t('Home.msg.item3')
-                    }}</button>
+                        }}</button>
                 </view>
                 </view>
             </view>
             </view>
         </uni-popup>
         </uni-popup>
@@ -340,7 +340,7 @@
                 </scroll-view>
                 </scroll-view>
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogSurplusActivity')">{{ t('Btn.Cancel')
                     <button class="btn-cancel" @click="closeDialog('dialogSurplusActivity')">{{ t('Btn.Cancel')
-                    }}</button>
+                        }}</button>
                     <button class="btn-confirm" type="primary" @click="handleConfirm('confirmSurplusActivity')"
                     <button class="btn-confirm" type="primary" @click="handleConfirm('confirmSurplusActivity')"
                         :disabled="!selectedAccount || !selectedSurplusValue">{{ t('Btn.Confirm') }}</button>
                         :disabled="!selectedAccount || !selectedSurplusValue">{{ t('Btn.Confirm') }}</button>
                 </view>
                 </view>
@@ -361,7 +361,7 @@
                 </view>
                 </view>
                 <view class="popup-footer">
                 <view class="popup-footer">
                     <button class="btn-cancel" @click="closeDialog('dialogSurplusActivity1')">{{ t('Btn.Cancel')
                     <button class="btn-cancel" @click="closeDialog('dialogSurplusActivity1')">{{ t('Btn.Cancel')
-                    }}</button>
+                        }}</button>
                     <button class="btn-confirm" type="primary" @click="handleConfirm('confirmSurplusActivity1')">{{
                     <button class="btn-confirm" type="primary" @click="handleConfirm('confirmSurplusActivity1')">{{
                         t('Btn.Confirm') }}</button>
                         t('Btn.Confirm') }}</button>
                 </view>
                 </view>
@@ -551,7 +551,7 @@ const setPopupRef = (el: any, key: string) => {
 <style scoped lang="scss">
 <style scoped lang="scss">
 .popup-content {
 .popup-content {
     width: 580rpx;
     width: 580rpx;
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     border-radius: 16rpx;
     border-radius: 16rpx;
     overflow: hidden;
     overflow: hidden;
 
 

+ 1 - 1
pages/customer/components/AccountList.vue

@@ -286,7 +286,7 @@ onMounted(async () => {
 
 
 .account-card {
 .account-card {
     width: 100%;
     width: 100%;
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     box-sizing: border-box;
     box-sizing: border-box;
 }
 }
 
 

+ 2 - 2
pages/customer/components/ActivitiesSwiper.vue

@@ -49,7 +49,7 @@ const toActivities = () => {
 
 
 .swiper-card {
 .swiper-card {
     padding: px2rpx(12);
     padding: px2rpx(12);
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     display: flex;
     display: flex;
     flex-direction: column;
     flex-direction: column;
     min-width: 1px;
     min-width: 1px;
@@ -128,7 +128,7 @@ const toActivities = () => {
         &-active {
         &-active {
             width: 32rpx;
             width: 32rpx;
             border-radius: 16rpx;
             border-radius: 16rpx;
-            background-color: var(--color-white);
+            background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
         }
         }
     }
     }
 }
 }

+ 1 - 1
pages/customer/components/AmountWallet.vue

@@ -163,7 +163,7 @@ getPendingWithdrawAmount()
         justify-content: space-between;
         justify-content: space-between;
         overflow: hidden;
         overflow: hidden;
         padding: px2rpx(16);
         padding: px2rpx(16);
-        background-color: var(--color-white);
+        background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 
 
         .item-left {
         .item-left {
             display: flex;
             display: flex;

+ 1 - 1
pages/customer/components/DeleteAccountDialogs.vue

@@ -133,7 +133,7 @@ listApi.value = customApi.deleteAccountList
 @import "@/uni.scss";
 @import "@/uni.scss";
 
 
 .delete-account-dialog {
 .delete-account-dialog {
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     border-radius: px2rpx(8);
     border-radius: px2rpx(8);
     overflow: hidden;
     overflow: hidden;
 
 

+ 1 - 1
pages/customer/components/TerminalChangePasswordDialog.vue

@@ -144,7 +144,7 @@ watch(() => props.visible, (newVal) => {
 @import "@/uni.scss";
 @import "@/uni.scss";
 @media (min-width: 768px) {
 @media (min-width: 768px) {
     :deep(.cwg-dialog) {
     :deep(.cwg-dialog) {
-        background-color: var(--color-white);
+        background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
         border-radius: px2rpx(8);
         border-radius: px2rpx(8);
         width: px2rpx(480) !important;
         width: px2rpx(480) !important;
     }
     }

+ 1 - 1
pages/customer/components/TerminalDialog.vue

@@ -212,7 +212,7 @@ onMounted(() => {
 
 
 @media (min-width: 768px) {
 @media (min-width: 768px) {
     :deep(.cwg-dialog) {
     :deep(.cwg-dialog) {
-        background-color: var(--color-white);
+        background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
         border-radius: px2rpx(8);
         border-radius: px2rpx(8);
         width: px2rpx(600) !important;
         width: px2rpx(600) !important;
     }
     }

+ 1 - 1
pages/customer/components/TerminalInfoDialog.vue

@@ -91,7 +91,7 @@ const copyValue = (text) => {
 @import "@/uni.scss";
 @import "@/uni.scss";
 @media (min-width: 768px) {
 @media (min-width: 768px) {
     :deep(.cwg-dialog) {
     :deep(.cwg-dialog) {
-        background-color: var(--color-white);
+        background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
         border-radius: px2rpx(8);
         border-radius: px2rpx(8);
         width: px2rpx(500) !important;
         width: px2rpx(500) !important;
     }
     }

+ 1 - 1
pages/customer/components/TerminalNickNameDialog.vue

@@ -85,7 +85,7 @@ const save = async () => {
 
 
 @media (min-width: 768px) {
 @media (min-width: 768px) {
     :deep(.cwg-dialog) {
     :deep(.cwg-dialog) {
-        background-color: var(--color-white);
+        background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
         border-radius: px2rpx(8);
         border-radius: px2rpx(8);
         width: px2rpx(480) !important;
         width: px2rpx(480) !important;
     }
     }

+ 3 - 3
pages/customer/components/Timeline.vue

@@ -612,7 +612,7 @@ defineExpose({
     padding: px2rpx(12);
     padding: px2rpx(12);
     box-sizing: border-box;
     box-sizing: border-box;
     margin: 0 auto;
     margin: 0 auto;
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 
 
     .timeline-scroll {
     .timeline-scroll {
         height: 100%;
         height: 100%;
@@ -646,7 +646,7 @@ defineExpose({
             display: flex;
             display: flex;
             align-items: center;
             align-items: center;
             justify-content: center;
             justify-content: center;
-            background-color: var(--color-white);
+            background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
             border: 1px solid currentColor;
             border: 1px solid currentColor;
             flex-shrink: 0;
             flex-shrink: 0;
             z-index: 1;
             z-index: 1;
@@ -767,7 +767,7 @@ defineExpose({
     flex-direction: column;
     flex-direction: column;
     align-items: center;
     align-items: center;
     padding: px2rpx(30);
     padding: px2rpx(30);
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     border-radius: px2rpx(16);
     border-radius: px2rpx(16);
     box-shadow: 0 px2rpx(4) px2rpx(20) rgba(0, 0, 0, 0.1);
     box-shadow: 0 px2rpx(4) px2rpx(20) rgba(0, 0, 0, 0.1);
 }
 }

+ 2 - 2
pages/customer/components/TransactionCharts.vue

@@ -73,7 +73,7 @@ const handleDateChange = (val) => {
     search.value.startDate = val[0]
     search.value.startDate = val[0]
     search.value.endDate = val[1]
     search.value.endDate = val[1]
     getChart()
     getChart()
-}   
+}
 //获取图表信息
 //获取图表信息
 const getChart = async () => {
 const getChart = async () => {
     if (flag.value) {
     if (flag.value) {
@@ -200,7 +200,7 @@ onMounted(() => {
     display: flex;
     display: flex;
     flex-direction: column;
     flex-direction: column;
     box-sizing: border-box;
     box-sizing: border-box;
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 
 
     .charts-header {
     .charts-header {
         display: flex;
         display: flex;

+ 1 - 1
pages/customer/components/TransactionDialogs.vue

@@ -99,7 +99,7 @@ listApi.value = customApi.historyList
 @import "@/uni.scss";
 @import "@/uni.scss";
 
 
 .delete-account-dialog {
 .delete-account-dialog {
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     border-radius: px2rpx(8);
     border-radius: px2rpx(8);
     overflow: hidden;
     overflow: hidden;
 
 

+ 1008 - 1013
pages/login/index.vue

@@ -62,13 +62,8 @@
               <image src="/static/images/logo-full.svg" class="company-icon" mode="widthFix"></image>
               <image src="/static/images/logo-full.svg" class="company-icon" mode="widthFix"></image>
             </view>
             </view>
             <view class="tab-list">
             <view class="tab-list">
-              <view
-                v-for="tab in tabs"
-                :key="tab.value"
-                class="tab-item"
-                :class="{ active: activeTab === tab.value }"
-                @click="handleClick(tab.value)"
-              >
+              <view v-for="tab in tabs" :key="tab.value" class="tab-item" :class="{ active: activeTab === tab.value }"
+                @click="handleClick(tab.value)">
                 <text class="tab-label">{{ tab.text }}</text>
                 <text class="tab-label">{{ tab.text }}</text>
               </view>
               </view>
             </view>
             </view>
@@ -82,13 +77,13 @@
                 <uni-forms ref="uFormRef" :model="form" labelWidth="200" label-position="top">
                 <uni-forms ref="uFormRef" :model="form" labelWidth="200" label-position="top">
                   <uni-forms-item :label="t('newSignup.item7')" prop="loginName">
                   <uni-forms-item :label="t('newSignup.item7')" prop="loginName">
                     <up-input :customStyle="customStyle" v-model="form.loginName" border="none"
                     <up-input :customStyle="customStyle" v-model="form.loginName" border="none"
-                              :placeholder="t('signin.form.email')">
+                      :placeholder="t('signin.form.email')">
                     </up-input>
                     </up-input>
                   </uni-forms-item>
                   </uni-forms-item>
 
 
                   <uni-forms-item :label="t('signin.form.password')" prop="password">
                   <uni-forms-item :label="t('signin.form.password')" prop="password">
                     <up-input :customStyle="customStyle" v-model="form.password" :type="inputType" border="none"
                     <up-input :customStyle="customStyle" v-model="form.password" :type="inputType" border="none"
-                              :placeholder="t('signin.form.password')">
+                      :placeholder="t('signin.form.password')">
                     </up-input>
                     </up-input>
                   </uni-forms-item>
                   </uni-forms-item>
                 </uni-forms>
                 </uni-forms>
@@ -97,7 +92,7 @@
                 <view class="check-box">
                 <view class="check-box">
                   <up-checkbox-group v-model="remenber" @change="checkboxChange">
                   <up-checkbox-group v-model="remenber" @change="checkboxChange">
                     <up-checkbox size="14" labelSize="14" labelColor="#666666" activeColor="#ea002a"
                     <up-checkbox size="14" labelSize="14" labelColor="#666666" activeColor="#ea002a"
-                                 :label="t('newSignin.item5')" name="记住我" class="wcg-checkbox"></up-checkbox>
+                      :label="t('newSignin.item5')" name="记住我" class="wcg-checkbox"></up-checkbox>
                   </up-checkbox-group>
                   </up-checkbox-group>
                 </view>
                 </view>
                 <navigator url="/pages/login/reset" class="account-tip">
                 <navigator url="/pages/login/reset" class="account-tip">
@@ -120,8 +115,8 @@
                 <view class="tit2">{{ t('newSignup.item2') }}</view>
                 <view class="tit2">{{ t('newSignup.item2') }}</view>
               </view>
               </view>
               <view>
               <view>
-                <uni-forms ref="regForm" :modelValue="formData" :rules="rules" validate-trigger="blur" label-position="top"
-                  label-width="120">
+                <uni-forms ref="regForm" :modelValue="formData" :rules="rules" validate-trigger="blur"
+                  label-position="top" label-width="120">
                   <uni-row :gutter="20" class="formContent">
                   <uni-row :gutter="20" class="formContent">
                     <uni-col :xs="24" :md="12">
                     <uni-col :xs="24" :md="12">
                       <uni-forms-item name="country" :label="t('newSignup.item3')">
                       <uni-forms-item name="country" :label="t('newSignup.item3')">
@@ -135,10 +130,10 @@
                       </uni-forms-item>
                       </uni-forms-item>
                     </uni-col>
                     </uni-col>
                     <uni-col :xs="24" :md="12">
                     <uni-col :xs="24" :md="12">
-                        <uni-forms-item name="birthDate" :label="t('newSignup.item18')">
-                          <uni-datetime-picker type="date" v-model="formData.birthDate"
-                            :placeholder="t('newSignup.item19')" @change="checkAge" />
-                        </uni-forms-item>
+                      <uni-forms-item name="birthDate" :label="t('newSignup.item18')">
+                        <uni-datetime-picker type="date" v-model="formData.birthDate"
+                          :placeholder="t('newSignup.item19')" @change="checkAge" />
+                      </uni-forms-item>
                     </uni-col>
                     </uni-col>
                     <uni-col :xs="24" :md="12">
                     <uni-col :xs="24" :md="12">
                       <uni-forms-item name="email" :label="t('newSignup.item7')">
                       <uni-forms-item name="email" :label="t('newSignup.item7')">
@@ -244,1142 +239,1142 @@
       </uni-row>
       </uni-row>
     </view>
     </view>
     <view class="chat-icon" :class="{ 'chat-icon-expanded': isChatIconExpanded, 'chat-icon-hidden': type == 'chat' }"
     <view class="chat-icon" :class="{ 'chat-icon-expanded': isChatIconExpanded, 'chat-icon-hidden': type == 'chat' }"
-          @click="handleChatIconClick">
+      @click="handleChatIconClick">
       <cwg-icon name="chat" color="#fff" />
       <cwg-icon name="chat" color="#fff" />
     </view>
     </view>
   </view>
   </view>
 </template>
 </template>
 <script setup>
 <script setup>
-  import { ref, watch, onMounted, computed } from 'vue'
-  import { onLoad } from '@dcloudio/uni-app'
-  import QrCode from '@/components/QrCode.vue'
-  import { post } from '@/utils/request'
-  import { userToken } from '@/composables/config'
-  import { userApi } from '@/api/user'
-  import { ucardApi } from '@/api/ucard'
-  import { customApi } from '@/service/custom'
-  import { loginApi } from '@/api/login'
-  import { countryApi } from '@/api/country'
-  import Config from '@/config/index'
-  import { showToast } from '@/utils/toast'
-  import { useEmailCountdown } from '@/hooks/useEmailCountdown'
-  import useGlobalStore from '@/stores/use-global-store'
-  import useUserStore from '@/stores/use-user-store'
-  import useRouter from '@/hooks/useRouter'
-  import { useI18n } from 'vue-i18n'
-  import companyLogo from '@/static/images/logo4.png'
-  import LoginHeaderGroup from './components/LoginHeaderGroup.vue'
-  import LiveChatService from '@/utils/liveChat.js'
-  import { useWindowWidth } from '@/composables/useWindowWidth'
-  import { openLocalPdf } from '@/utils/pdf.js'
-
-  const windowWidth = useWindowWidth(300)
-  const isMobile = computed(() => windowWidth.value <= 991)
-  const router = useRouter()
-  const { t } = useI18n()
-  const { Code } = Config
-  const userStore = useUserStore()
-  const globalStore = useGlobalStore()
-  const modeStore = computed(() => globalStore.mode)
-  const tabs = computed(() => [
-    { text:t('signin.tabs1'),value:1, },
-    { text:t('signin.tabs2'),value:2, },
-  ])
-  const activeTab = ref(1)
-
-  // ========== 注册表单相关 ==========
-  const {
-    time,
-    text: getCodeString,
-    canSend,
-    start,
-    restore,
-  } = useEmailCountdown()
-
-  const isRouteHasId = ref(false)
-  const formData = ref({
-    country: 'CN',
-    phone: '',
-    birthDate: '',
-    email: '',
-    emailCode: '',
-    password: '',
-    linkValue: '',
-    agree: 0,
-    isSubscribeEmail: 0,
-    sourceCode: null,
-    w: '',
-    subId: '',
-    oc: '',
-    agentId: null,
-    ibInvalid: null,
-  })
-
-  const rules = {
-    country: { rules: [{ required: true, errorMessage: t('vaildate.country.empty'), trigger: 'blur' }] },
-    email: {
-      rules: [
-        { required: true, errorMessage: t('vaildate.email.empty'), trigger: 'blur' },
-        { pattern: Config.Pattern.Email, errorMessage: t('vaildate.email.format'), trigger: 'blur' },
-      ],
-    },
-    emailCode: { rules: [{ required: true, errorMessage: t('vaildate.code.empty'), trigger: 'blur' }] },
-    password: {
-      rules: [
-        { required: true, errorMessage: t('vaildate.password.format'), trigger: 'blur' },
-        { pattern: Config.Pattern.Password, errorMessage: t('vaildate.password.format'), trigger: 'blur' },
-      ],
-    },
-    agree: {
-      rules: [
-        {
-          validateFunction: (rule, value) => {
-            if (value) return true
-            return t('vaildate.agree.empty')
-          },
-          trigger: 'change',
+import { ref, watch, onMounted, computed } from 'vue'
+import { onLoad } from '@dcloudio/uni-app'
+import QrCode from '@/components/QrCode.vue'
+import { post } from '@/utils/request'
+import { userToken } from '@/composables/config'
+import { userApi } from '@/api/user'
+import { ucardApi } from '@/api/ucard'
+import { customApi } from '@/service/custom'
+import { loginApi } from '@/api/login'
+import { countryApi } from '@/api/country'
+import Config from '@/config/index'
+import { showToast } from '@/utils/toast'
+import { useEmailCountdown } from '@/hooks/useEmailCountdown'
+import useGlobalStore from '@/stores/use-global-store'
+import useUserStore from '@/stores/use-user-store'
+import useRouter from '@/hooks/useRouter'
+import { useI18n } from 'vue-i18n'
+import companyLogo from '@/static/images/logo4.png'
+import LoginHeaderGroup from './components/LoginHeaderGroup.vue'
+import LiveChatService from '@/utils/liveChat.js'
+import { useWindowWidth } from '@/composables/useWindowWidth'
+import { openLocalPdf } from '@/utils/pdf.js'
+
+const windowWidth = useWindowWidth(300)
+const isMobile = computed(() => windowWidth.value <= 991)
+const router = useRouter()
+const { t } = useI18n()
+const { Code } = Config
+const userStore = useUserStore()
+const globalStore = useGlobalStore()
+const modeStore = computed(() => globalStore.mode)
+const tabs = computed(() => [
+  { text: t('signin.tabs1'), value: 1, },
+  { text: t('signin.tabs2'), value: 2, },
+])
+const activeTab = ref(1)
+
+// ========== 注册表单相关 ==========
+const {
+  time,
+  text: getCodeString,
+  canSend,
+  start,
+  restore,
+} = useEmailCountdown()
+
+const isRouteHasId = ref(false)
+const formData = ref({
+  country: 'CN',
+  phone: '',
+  birthDate: '',
+  email: '',
+  emailCode: '',
+  password: '',
+  linkValue: '',
+  agree: 0,
+  isSubscribeEmail: 0,
+  sourceCode: null,
+  w: '',
+  subId: '',
+  oc: '',
+  agentId: null,
+  ibInvalid: null,
+})
+
+const rules = {
+  country: { rules: [{ required: true, errorMessage: t('vaildate.country.empty'), trigger: 'blur' }] },
+  email: {
+    rules: [
+      { required: true, errorMessage: t('vaildate.email.empty'), trigger: 'blur' },
+      { pattern: Config.Pattern.Email, errorMessage: t('vaildate.email.format'), trigger: 'blur' },
+    ],
+  },
+  emailCode: { rules: [{ required: true, errorMessage: t('vaildate.code.empty'), trigger: 'blur' }] },
+  password: {
+    rules: [
+      { required: true, errorMessage: t('vaildate.password.format'), trigger: 'blur' },
+      { pattern: Config.Pattern.Password, errorMessage: t('vaildate.password.format'), trigger: 'blur' },
+    ],
+  },
+  agree: {
+    rules: [
+      {
+        validateFunction: (rule, value) => {
+          if (value) return true
+          return t('vaildate.agree.empty')
         },
         },
-      ],
-    },
-    phone: {
-      rules: [
-        { required: true, errorMessage: t('vaildate.phone.format'), trigger: 'blur' },
-        { pattern: Config.Pattern.NonNegInt, errorMessage: t('vaildate.phone.format'), trigger: 'blur' },
-      ],
-    },
-    birthDate: { rules: [{ required: true, errorMessage: t('vaildate.birthDate.empty'), trigger: 'change' }] },
-  }
-
-  const agreeGroup = ref([])
-  const subscribeEmailGroup = ref([])
-  const regForm = ref(null)
-  const mock_options = ref([])
-  const countryCode = ref('my')
-
-  const countryOptions = computed(() => {
-    return mock_options.value.map(item => ({
-      text: item.enName,
-      value: item.code,
-      disabled: item.isOpenAccount == 0 || item.isOpenAccount === null ? true : false,
-    }))
-  })
-
-  watch(() => formData.value.agree, (val) => {
-    agreeGroup.value = val === 1 ? ['agree'] : []
-  }, { immediate: true })
-
-  watch(() => formData.value.isSubscribeEmail, (val) => {
-    subscribeEmailGroup.value = val === 1 ? ['subscribeEmail'] : []
-  }, { immediate: true })
-
-  const onAgreeChange = (e) => {
-    formData.value.agree = e && e.length ? 1 : 0
-  }
-
-  const onSubscribeEmailChange = (e) => {
-    formData.value.isSubscribeEmail = e && e.length ? 1 : 0
-  }
-
-  const toggleAgree = () => {
-    const next = agreeGroup.value.length ? [] : ['agree']
-    agreeGroup.value = next
-    onAgreeChange(next)
-  }
-
-  const toggleSubscribeEmail = () => {
-    const next = subscribeEmailGroup.value.length ? [] : ['subscribeEmail']
-    subscribeEmailGroup.value = next
-    onSubscribeEmailChange(next)
-  }
-
-  const rule1 = computed(() => {
-    if (!formData.value.password) return false
-    return /^.{8,16}$/.test(formData.value.password)
-  })
-
-  const rule2 = computed(() => {
-    return /^(?=.*?[a-z])(?=.*?[A-Z]).*$/.test(formData.value.password)
-  })
-
-  const rule3 = computed(() => {
-    return /^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?!.*([~!@&%$^\(\)#_]).*\1.*\1)[A-Za-z0-9~!@&%$^\(\)#_]{8,16}$/.test(
-      formData.value.password,
-    )
-  })
-
-  const isAgeValid = computed(() => {
-    if (!formData.value.birthDate) {
-      return false
-    }
-    const today = new Date()
-    const birthDate = new Date(formData.value.birthDate)
-    let age = today.getFullYear() - birthDate.getFullYear()
-    const monthDiff = today.getMonth() - birthDate.getMonth()
-    if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
-      age--
-    }
-    return age >= 18
-  })
-
-  const checkAge = () => {
-    if (formData.value.birthDate && !isAgeValid.value) {
-      uni.showModal({
-        title: t('Msg.SystemPrompt'),
-        content: t('signup.ageRestriction'),
-        showCancel: false,
-        confirmText: t('Btn.Confirm'),
-        success: function (res) {
-          if (res.confirm) {
-          }
-        },
-      })
-    }
-  }
-
-  const limitAgentIdLength = (val) => {
-    if (val == null || val === '') return
-    const filtered = val.toString().replace(/[^0-9a-zA-Z]/g, '').slice(0, 10)
-    if (formData.value.linkValue !== filtered) {
-      formData.value.linkValue = filtered
-    }
-  }
-
-  onLoad((options) => {
-    if (options) {
-      formData.value.sourceCode = options.ex || null
-      formData.value.w = options.w || ''
-      formData.value.subId = options.SUBID || ''
-      formData.value.oc = options.oc || ''
-      formData.value.email = options.emailAdvertisement || ''
-
-      if (options.id) {
-        isRouteHasId.value = true
-        formData.value.agentId = Number(options.id)
-        formData.value.linkValue = options.commission || ''
-
-        switch (options.ibInvalid) {
-          case 'B0':
-            formData.value.ibInvalid = 0
-            break
-          case 'B1':
-            formData.value.ibInvalid = 1
-            break
+        trigger: 'change',
+      },
+    ],
+  },
+  phone: {
+    rules: [
+      { required: true, errorMessage: t('vaildate.phone.format'), trigger: 'blur' },
+      { pattern: Config.Pattern.NonNegInt, errorMessage: t('vaildate.phone.format'), trigger: 'blur' },
+    ],
+  },
+  birthDate: { rules: [{ required: true, errorMessage: t('vaildate.birthDate.empty'), trigger: 'change' }] },
+}
+
+const agreeGroup = ref([])
+const subscribeEmailGroup = ref([])
+const regForm = ref(null)
+const mock_options = ref([])
+const countryCode = ref('my')
+
+const countryOptions = computed(() => {
+  return mock_options.value.map(item => ({
+    text: item.enName,
+    value: item.code,
+    disabled: item.isOpenAccount == 0 || item.isOpenAccount === null ? true : false,
+  }))
+})
+
+watch(() => formData.value.agree, (val) => {
+  agreeGroup.value = val === 1 ? ['agree'] : []
+}, { immediate: true })
+
+watch(() => formData.value.isSubscribeEmail, (val) => {
+  subscribeEmailGroup.value = val === 1 ? ['subscribeEmail'] : []
+}, { immediate: true })
+
+const onAgreeChange = (e) => {
+  formData.value.agree = e && e.length ? 1 : 0
+}
+
+const onSubscribeEmailChange = (e) => {
+  formData.value.isSubscribeEmail = e && e.length ? 1 : 0
+}
+
+const toggleAgree = () => {
+  const next = agreeGroup.value.length ? [] : ['agree']
+  agreeGroup.value = next
+  onAgreeChange(next)
+}
+
+const toggleSubscribeEmail = () => {
+  const next = subscribeEmailGroup.value.length ? [] : ['subscribeEmail']
+  subscribeEmailGroup.value = next
+  onSubscribeEmailChange(next)
+}
+
+const rule1 = computed(() => {
+  if (!formData.value.password) return false
+  return /^.{8,16}$/.test(formData.value.password)
+})
+
+const rule2 = computed(() => {
+  return /^(?=.*?[a-z])(?=.*?[A-Z]).*$/.test(formData.value.password)
+})
+
+const rule3 = computed(() => {
+  return /^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?!.*([~!@&%$^\(\)#_]).*\1.*\1)[A-Za-z0-9~!@&%$^\(\)#_]{8,16}$/.test(
+    formData.value.password,
+  )
+})
+
+const isAgeValid = computed(() => {
+  if (!formData.value.birthDate) {
+    return false
+  }
+  const today = new Date()
+  const birthDate = new Date(formData.value.birthDate)
+  let age = today.getFullYear() - birthDate.getFullYear()
+  const monthDiff = today.getMonth() - birthDate.getMonth()
+  if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
+    age--
+  }
+  return age >= 18
+})
+
+const checkAge = () => {
+  if (formData.value.birthDate && !isAgeValid.value) {
+    uni.showModal({
+      title: t('Msg.SystemPrompt'),
+      content: t('signup.ageRestriction'),
+      showCancel: false,
+      confirmText: t('Btn.Confirm'),
+      success: function (res) {
+        if (res.confirm) {
         }
         }
+      },
+    })
+  }
+}
+
+const limitAgentIdLength = (val) => {
+  if (val == null || val === '') return
+  const filtered = val.toString().replace(/[^0-9a-zA-Z]/g, '').slice(0, 10)
+  if (formData.value.linkValue !== filtered) {
+    formData.value.linkValue = filtered
+  }
+}
+
+onLoad((options) => {
+  if (options) {
+    formData.value.sourceCode = options.ex || null
+    formData.value.w = options.w || ''
+    formData.value.subId = options.SUBID || ''
+    formData.value.oc = options.oc || ''
+    formData.value.email = options.emailAdvertisement || ''
+
+    if (options.id) {
+      isRouteHasId.value = true
+      formData.value.agentId = Number(options.id)
+      formData.value.linkValue = options.commission || ''
+
+      switch (options.ibInvalid) {
+        case 'B0':
+          formData.value.ibInvalid = 0
+          break
+        case 'B1':
+          formData.value.ibInvalid = 1
+          break
       }
       }
     }
     }
-  })
-
-  const ho = ref('')
-
-  // 国家列表
-  async function getCountry() {
-    try {
-      let res = await countryApi.Country({})
-      if (res.code == 200) {
-        mock_options.value = res.data
-      } else {
-        showToast(res.msg)
-      }
-    } catch (error) {
-      console.error(error)
-    }
   }
   }
+})
 
 
-  const getCountryMsg = async () => {
-    let res = await countryApi.CountryGet({})
-    if (res.code == Code.StatusOK) {
-      countryCode.value = res.msg
+const ho = ref('')
+
+// 国家列表
+async function getCountry() {
+  try {
+    let res = await countryApi.Country({})
+    if (res.code == 200) {
+      mock_options.value = res.data
     } else {
     } else {
-      console.log(res)
+      showToast(res.msg)
     }
     }
+  } catch (error) {
+    console.error(error)
   }
   }
+}
 
 
-  async function handleGetCode() {
-    if (!formData.value.birthDate) {
-      showToast(t('vaildate.birthDate.empty'))
-      return
-    }
-    if (!isAgeValid.value) {
-      showToast(t('signup.ageRestriction'))
-      return
-    }
-    if (!formData.value.country) {
-      showToast(t('vaildate.country.empty'))
-      return
-    }
-    if (!formData.value.email) {
-      showToast(t('vaildate.email.empty'))
-      return
-    }
-    if (!Config.Pattern.Email.test(formData.value.email)) {
-      showToast(t('vaildate.email.format'))
-      return
-    }
-
-    if (!canSend.value) return
-    await sendEmailCode()
+const getCountryMsg = async () => {
+  let res = await countryApi.CountryGet({})
+  if (res.code == Code.StatusOK) {
+    countryCode.value = res.msg
+  } else {
+    console.log(res)
   }
   }
+}
 
 
-  async function sendEmailCode() {
-    const res = await loginApi.Code({
-      ...formData.value,
-    })
-
-    if (res.code === 200) {
-      showToast(t('Msg.CodeSuccess'))
-      start()
-      return true
-    } else {
-      showToast(t('Msg.CodeFail'))
-      return false
-    }
+async function handleGetCode() {
+  if (!formData.value.birthDate) {
+    showToast(t('vaildate.birthDate.empty'))
+    return
   }
   }
-
-  const register = async () => {
-    if (countryCode.value == 'MY' || countryCode.value == 'ID') {
-      showToast('Registration not available for this region')
-      return
-    }
-    regForm.value.validate().then(async (res) => {
-      const chinaCountryCodes = ['CN']
-      const isChina = chinaCountryCodes.includes(formData.value.country)
-      const xSystemValue = isChina ? 'B' : 'A'
-
-      let resData = await loginApi.Register(
-        { ...formData.value },
-        { headers: { 'X-System': xSystemValue } },
-      )
-      if (resData.code == 200) {
-        showToast(t('Msg.registerSuc'))
-        registLogin()
-      } else {
-        showToast(resData.msg)
-      }
-
-    }).catch(err => {
-      console.log('表单错误信息:', err)
-      showToast(err.msg)
-      return false
-    })
+  if (!isAgeValid.value) {
+    showToast(t('signup.ageRestriction'))
+    return
   }
   }
-
-  const registLogin = async () => {
-    try {
-      let res = await userApi.login({
-        loginName: formData.value.email,
-        password: formData.value.password,
-      })
-      if (res.code == 200) {
-        userToken.value = res.data
-        getRegistLoginInfo()
-      } else {
-        showToast(res.msg)
-      }
-    } catch (error) {
-      console.error(error)
-    }
+  if (!formData.value.country) {
+    showToast(t('vaildate.country.empty'))
+    return
   }
   }
-
-  const getRegistLoginInfo = async () => {
-    try {
-      let res = await userApi.getUserInfo()
-      if (res.code == 200) {
-        userStore.saveUserInfo(res.data)
-        showToast(t('Msg.LoginSuccess'))
-        setTimeout(() => {
-          uni.reLaunch({
-            url: '/pages/customer/index',
-          })
-        }, 1000)
-      } else {
-        showToast(t('Msg.SystemError'))
-      }
-    } catch (error) {
-      console.error(error)
-    }
+  if (!formData.value.email) {
+    showToast(t('vaildate.email.empty'))
+    return
   }
   }
-
-  const openUrl = (url) => {
-    openLocalPdf(url)
+  if (!Config.Pattern.Email.test(formData.value.email)) {
+    showToast(t('vaildate.email.format'))
+    return
   }
   }
-  // ========== 注册表单相关结束 ==========
-  // 响应式表单数据
-  const form = ref({
-    loginName: '',
-    password: '',
-  })
 
 
-  function submit() {
-    if (!form.value.loginName) {
-      uni.$u.toast(t('signin.form.email'))
-      return
-    }
-    if (!form.value.password) {
-      uni.$u.toast(t('signin.form.password'))
-      return
-    }
+  if (!canSend.value) return
+  await sendEmailCode()
+}
 
 
-    handleLogin()
-  }
+async function sendEmailCode() {
+  const res = await loginApi.Code({
+    ...formData.value,
+  })
 
 
-  const customStyle = {
-    height: '44px',
-    'border-radius': '8px',
-    background: '#f7f8fa',
-    padding: '0 20px !important',
-    position: 'relative',
-  }
-  const remenber = ref([])
-  const checkboxChange = (e) => {
-    remenber.value = e
-  }
-  const fetchUserList = (params) => post('/Login/AcctLogin', params)
+  if (res.code === 200) {
+    showToast(t('Msg.CodeSuccess'))
+    start()
+    return true
+  } else {
+    showToast(t('Msg.CodeFail'))
+    return false
+  }
+}
+
+const register = async () => {
+  if (countryCode.value == 'MY' || countryCode.value == 'ID') {
+    showToast('Registration not available for this region')
+    return
+  }
+  regForm.value.validate().then(async (res) => {
+    const chinaCountryCodes = ['CN']
+    const isChina = chinaCountryCodes.includes(formData.value.country)
+    const xSystemValue = isChina ? 'B' : 'A'
+
+    let resData = await loginApi.Register(
+      { ...formData.value },
+      { headers: { 'X-System': xSystemValue } },
+    )
+    if (resData.code == 200) {
+      showToast(t('Msg.registerSuc'))
+      registLogin()
+    } else {
+      showToast(resData.msg)
+    }
 
 
-  const handleClick = (value)=>{
-    activeTab.value = value
-  }
+  }).catch(err => {
+    console.log('表单错误信息:', err)
+    showToast(err.msg)
+    return false
+  })
+}
 
 
-  async function handleLogin() {
-    try {
-      const res = await userApi.login({
-        loginName: form.value.loginName,
-        password: form.value.password,
-      })
-      if (res.code === 200) {
-        userToken.value = res.data
-        uni.$u.toast(t('login.msg0_1'))
-        getCustomLoginInfo()
-        // getCardUserInfo();
-        reasonsRefusalList()
-        if (remenber.value.length) {
-          userStore.saveAccountInfo({
-            loginName: form.value.loginName,
-            password: form.value.password,
-            rememberPassword: true,
-          })
-        } else {
-          userStore.saveAccountInfo({
-            loginName: '',
-            password: '',
-            rememberPassword: false,
-          })
-        }
-        //  console.log(1111);
-      } else {
-        uni.showToast({ title: res.msg })
-        //  console.log(12112);
-      }
-    } catch (error) {
-      // console.log(error)
-      uni.showToast({ title: error.msg, icon: 'none' })
-      //  console.log(error, 19089);
+const registLogin = async () => {
+  try {
+    let res = await userApi.login({
+      loginName: formData.value.email,
+      password: formData.value.password,
+    })
+    if (res.code == 200) {
+      userToken.value = res.data
+      getRegistLoginInfo()
+    } else {
+      showToast(res.msg)
     }
     }
+  } catch (error) {
+    console.error(error)
   }
   }
+}
 
 
-  async function getCustomLoginInfo() {
-    try {
-      const res = await userApi.getUserInfo()
+const getRegistLoginInfo = async () => {
+  try {
+    let res = await userApi.getUserInfo()
+    if (res.code == 200) {
       userStore.saveUserInfo(res.data)
       userStore.saveUserInfo(res.data)
-      if (res.code === 200) {
-        switch (modeStore.value) {
-          case 'customer':
-            router.reLaunch('/pages/customer/index')
-            break
-          case 'ib':
-            router.reLaunch('/pages/ib/index')
-            break
-          case 'follow':
-            router.reLaunch('/pages/follow/index')
-            break
-
-          default:
-            break
-        }
+      showToast(t('Msg.LoginSuccess'))
+      setTimeout(() => {
+        uni.reLaunch({
+          url: '/pages/customer/index',
+        })
+      }, 1000)
+    } else {
+      showToast(t('Msg.SystemError'))
+    }
+  } catch (error) {
+    console.error(error)
+  }
+}
+
+const openUrl = (url) => {
+  openLocalPdf(url)
+}
+// ========== 注册表单相关结束 ==========
+// 响应式表单数据
+const form = ref({
+  loginName: '',
+  password: '',
+})
+
+function submit() {
+  if (!form.value.loginName) {
+    uni.$u.toast(t('signin.form.email'))
+    return
+  }
+  if (!form.value.password) {
+    uni.$u.toast(t('signin.form.password'))
+    return
+  }
+
+  handleLogin()
+}
+
+const customStyle = {
+  height: '44px',
+  'border-radius': '8px',
+  background: '#f7f8fa',
+  padding: '0 20px !important',
+  position: 'relative',
+}
+const remenber = ref([])
+const checkboxChange = (e) => {
+  remenber.value = e
+}
+const fetchUserList = (params) => post('/Login/AcctLogin', params)
+
+const handleClick = (value) => {
+  activeTab.value = value
+}
+
+async function handleLogin() {
+  try {
+    const res = await userApi.login({
+      loginName: form.value.loginName,
+      password: form.value.password,
+    })
+    if (res.code === 200) {
+      userToken.value = res.data
+      uni.$u.toast(t('login.msg0_1'))
+      getCustomLoginInfo()
+      // getCardUserInfo();
+      reasonsRefusalList()
+      if (remenber.value.length) {
+        userStore.saveAccountInfo({
+          loginName: form.value.loginName,
+          password: form.value.password,
+          rememberPassword: true,
+        })
       } else {
       } else {
-        uni.$u.toast(res.msg || t('login.msg0'))
+        userStore.saveAccountInfo({
+          loginName: '',
+          password: '',
+          rememberPassword: false,
+        })
       }
       }
-    } catch (error) {
-      //  console.log(error, 111);
+      //  console.log(1111);
+    } else {
+      uni.showToast({ title: res.msg })
+      //  console.log(12112);
     }
     }
+  } catch (error) {
+    // console.log(error)
+    uni.showToast({ title: error.msg, icon: 'none' })
+    //  console.log(error, 19089);
   }
   }
+}
 
 
-  async function getCardUserInfo() {
-    try {
-      const res = await ucardApi.getSingle()
-      userStore.saveUserInfo(res.data)
-      if (res.code === 200) {
-        if (!res.data || res.data.approveStatus != 2) {
-          router.push('/pages/mine/improve')
-        } else {
-          router.push('/pages/card/index')
-        }
-      } else {
-        uni.$u.toast(res.msg || t('login.msg0'))
+async function getCustomLoginInfo() {
+  try {
+    const res = await userApi.getUserInfo()
+    userStore.saveUserInfo(res.data)
+    if (res.code === 200) {
+      switch (modeStore.value) {
+        case 'customer':
+          router.reLaunch('/pages/customer/index')
+          break
+        case 'ib':
+          router.reLaunch('/pages/ib/index')
+          break
+        case 'follow':
+          router.reLaunch('/pages/follow/index')
+          break
+
+        default:
+          break
       }
       }
-    } catch (error) {
-      //  console.log(error, 111);
+    } else {
+      uni.$u.toast(res.msg || t('login.msg0'))
     }
     }
+  } catch (error) {
+    //  console.log(error, 111);
   }
   }
+}
 
 
-  async function reasonsRefusalList() {
-    try {
-      const res = await customApi.reasonsRefusalList()
-      if (res.code === 200) {
-        pickFields(res.data)
+async function getCardUserInfo() {
+  try {
+    const res = await ucardApi.getSingle()
+    userStore.saveUserInfo(res.data)
+    if (res.code === 200) {
+      if (!res.data || res.data.approveStatus != 2) {
+        router.push('/pages/mine/improve')
       } else {
       } else {
-        uni.$u.toast(res.msg || t('login.msg0'))
+        router.push('/pages/card/index')
       }
       }
-    } catch (error) {
-      //  console.log(error, 111);
+    } else {
+      uni.$u.toast(res.msg || t('login.msg0'))
     }
     }
+  } catch (error) {
+    //  console.log(error, 111);
   }
   }
+}
 
 
-  function pickFields(source, fields = ['content', 'enContent']) {
-    const result = {}
-
-    Object.entries(source).forEach(([key, value]) => {
-      result[key] = fields.reduce((acc, f) => {
-        acc[f] = value[f] ?? null
-        return acc
-      }, {})
-    })
-    userStore.saveReasonsOptions(result)
-  }
-
-  onMounted(() => {
-    const accountInfo = userStore.accountInfo
-    if (accountInfo?.rememberPassword) {
-      form.value.loginName = accountInfo?.loginName || ''
-      form.value.password = accountInfo?.password || ''
-      remenber.value = ['记住我']
+async function reasonsRefusalList() {
+  try {
+    const res = await customApi.reasonsRefusalList()
+    if (res.code === 200) {
+      pickFields(res.data)
     } else {
     } else {
-      form.value.loginName = ''
-      form.value.password = ''
-      remenber.value = []
+      uni.$u.toast(res.msg || t('login.msg0'))
     }
     }
+  } catch (error) {
+    //  console.log(error, 111);
+  }
+}
 
 
-    // 注册表单初始化
-    getCountry()
-    getCountryMsg()
+function pickFields(source, fields = ['content', 'enContent']) {
+  const result = {}
 
 
-    const hostParts = window.location.host.split('.')
-    ho.value = hostParts.length > 1 ? hostParts[1] : ''
+  Object.entries(source).forEach(([key, value]) => {
+    result[key] = fields.reduce((acc, f) => {
+      acc[f] = value[f] ?? null
+      return acc
+    }, {})
   })
   })
-  const inputType = ref('password')
-  const isChatIconExpanded = ref(false)
-  // 处理聊天图标点击
-  const handleChatIconClick = () => {
-    // 如果还没显示 → 先滑出来
-    if (!isChatIconExpanded.value) {
-      isChatIconExpanded.value = true
-      return
+  userStore.saveReasonsOptions(result)
+}
+
+onMounted(() => {
+  const accountInfo = userStore.accountInfo
+  if (accountInfo?.rememberPassword) {
+    form.value.loginName = accountInfo?.loginName || ''
+    form.value.password = accountInfo?.password || ''
+    remenber.value = ['记住我']
+  } else {
+    form.value.loginName = ''
+    form.value.password = ''
+    remenber.value = []
+  }
+
+  // 注册表单初始化
+  getCountry()
+  getCountryMsg()
+
+  const hostParts = window.location.host.split('.')
+  ho.value = hostParts.length > 1 ? hostParts[1] : ''
+})
+const inputType = ref('password')
+const isChatIconExpanded = ref(false)
+// 处理聊天图标点击
+const handleChatIconClick = () => {
+  // 如果还没显示 → 先滑出来
+  if (!isChatIconExpanded.value) {
+    isChatIconExpanded.value = true
+    return
+  }
+  if (isMobile.value) {
+    router.push('/pages/common/chat')
+  } else {
+    if (LiveChatService) {
+      LiveChatService.showChat()
     }
     }
-    if (isMobile.value) {
-      router.push('/pages/common/chat')
-    } else {
-      if (LiveChatService) {
-        LiveChatService.showChat()
-      }
-    }
-    setTimeout(() => {
-      isChatIconExpanded.value = false
-    }, 300)
   }
   }
+  setTimeout(() => {
+    isChatIconExpanded.value = false
+  }, 300)
+}
 </script>
 </script>
 
 
 <style lang="scss" scoped>
 <style lang="scss" scoped>
-  @import "@/uni.scss";
-
-  :deep(uni-content) {
-    padding-left: 0 !important;
-  }
-
-  .login-page {
-    height: 100vh;
-    border: none;
-    padding: 0;
-    position: relative;
-    display: flex;
-    flex-direction: column;
-  }
-
-  .chat-icon {
-    width: px2rpx(50);
-    height: px2rpx(50);
-    border-radius: 50%;
-    background-color: #cf1322;
+@import "@/uni.scss";
+
+:deep(uni-content) {
+  padding-left: 0 !important;
+}
+
+.login-page {
+  height: 100vh;
+  border: none;
+  padding: 0;
+  position: relative;
+  display: flex;
+  flex-direction: column;
+}
+
+.chat-icon {
+  width: px2rpx(50);
+  height: px2rpx(50);
+  border-radius: 50%;
+  background-color: #cf1322;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  position: fixed;
+  bottom: px2rpx(25);
+  right: px2rpx(-25);
+  z-index: 999;
+  cursor: pointer;
+  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
+  box-shadow: 0 px2rpx(8) px2rpx(20) rgba(0, 0, 0, 0.15);
+  will-change: transform;
+}
+
+.chat-icon:hover {
+  transform: scale(1.1);
+}
+
+.chat-icon-expanded {
+  bottom: px2rpx(20);
+  right: px2rpx(20);
+  transform: scale(1.1);
+  box-shadow: 0 px2rpx(12) px2rpx(30) rgba(0, 0, 0, 0.2);
+}
+
+.chat-icon-hidden {
+  display: none;
+}
+
+.fixed {
+  width: 100%;
+  height: var(--status-bar-height);
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
+  z-index: 9;
+}
+
+.global-header-bar {
+  width: 100%;
+  height: px2rpx(60);
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  flex-shrink: 0;
+  z-index: 100;
+
+  &.pc-header {
+    background-color: transparent;
+  }
+
+  .header-inner {
+    width: 100%;
+    padding: 0 5%;
     display: flex;
     display: flex;
+    justify-content: space-between;
+    /* 两端对齐,可放logo和组件 */
     align-items: center;
     align-items: center;
-    justify-content: center;
-    position: fixed;
-    bottom: px2rpx(25);
-    right: px2rpx(-25);
-    z-index: 999;
-    cursor: pointer;
-    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-    box-shadow: 0 px2rpx(8) px2rpx(20) rgba(0, 0, 0, 0.15);
-    will-change: transform;
-  }
-
-  .chat-icon:hover {
-    transform: scale(1.1);
-  }
-
-  .chat-icon-expanded {
-    bottom: px2rpx(20);
-    right: px2rpx(20);
-    transform: scale(1.1);
-    box-shadow: 0 px2rpx(12) px2rpx(30) rgba(0, 0, 0, 0.2);
-  }
-
-  .chat-icon-hidden {
-    display: none;
   }
   }
-
-  .fixed {
-    width: 100%;
-    height: var(--status-bar-height);
-    background-color: var(--color-white);
-    z-index: 9;
-  }
-
-  .global-header-bar {
-    width: 100%;
-    height: px2rpx(60);
+}
+
+.mobile-header-bar {
+  //position: absolute;
+  //top: px2rpx(20);
+  //right: px2rpx(20);
+  z-index: 10;
+  width: 100%;
+  display: flex;
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
+  justify-content: flex-end;
+}
+
+.main-content {
+  flex: 1;
+  overflow: hidden;
+}
+
+.demo-uni-row {
+  height: 100%;
+  margin: 0 !important;
+
+  .left-bg {
+    height: 100%;
+    min-height: calc(100vh - 120px);
+    background-image: url(/static/images/login-bg.gif);
+    background-size: cover;
+    background-position: center;
     display: flex;
     display: flex;
-    align-items: center;
+    box-sizing: border-box;
+    padding: px2rpx(50);
+    //flex-direction: column;
+    //align-items: center;
     justify-content: center;
     justify-content: center;
-    flex-shrink: 0;
-    z-index: 100;
-
-    &.pc-header {
-      background-color: transparent;
-    }
 
 
-    .header-inner {
-      width: 100%;
-      padding: 0 5%;
+    .left-box {
       display: flex;
       display: flex;
-      justify-content: space-between;
-      /* 两端对齐,可放logo和组件 */
-      align-items: center;
-    }
-  }
-
-  .mobile-header-bar {
-    //position: absolute;
-    //top: px2rpx(20);
-    //right: px2rpx(20);
-    z-index: 10;
-    width: 100%;
-    display: flex;
-    background-color: var(--color-white);
-    justify-content: flex-end;
-  }
+      flex-direction: column;
+      justify-content: center;
+      align-items: flex-start;
+      width: 60%;
+      //margin-top: px2rpx(20);
 
 
-  .main-content {
-    flex: 1;
-    overflow: hidden;
-  }
+      .inner {
+        width: 100%;
+        text-align: start;
+        //margin-bottom: px2rpx(20);
 
 
-  .demo-uni-row {
-    height: 100%;
-    margin: 0 !important;
-
-    .left-bg {
-      height: 100%;
-      min-height: calc(100vh - 120px);
-      background-image: url(/static/images/login-bg.gif);
-      background-size: cover;
-      background-position: center;
-      display: flex;
-      box-sizing: border-box;
-      padding: px2rpx(50);
-      //flex-direction: column;
-      //align-items: center;
-      justify-content: center;
+        .section-title {
+          //margin-top: px2rpx(10);
+          //margin-bottom: px2rpx(10);
+        }
 
 
-      .left-box {
-        display: flex;
-        flex-direction: column;
-        justify-content: center;
-        align-items: flex-start;
-        width: 60%;
-        //margin-top: px2rpx(20);
 
 
-        .inner {
-          width: 100%;
-          text-align: start;
-          //margin-bottom: px2rpx(20);
-
-          .section-title {
-            //margin-top: px2rpx(10);
-            //margin-bottom: px2rpx(10);
-          }
-
-
-          .title {
-            margin: 0 0 0 px2rpx(10);
-            font-size: px2rpx(56);
-            line-height: 1.2;
-            color: #fff;
-            font-weight: 700;
-            text-align: left;
-          }
-
-          .w-700 {
-            font-weight: 700;
-          }
-
-          .subtitle {
-            width: 45%;
-            font-size: px2rpx(18);
-            letter-spacing: px2rpx(1);
-            display: block;
-            margin-bottom: px2rpx(24);
-            color: #ffffff;
-            line-height: px2rpx(15);
-            font-weight: 500;
-            padding: px2rpx(10) px2rpx(20);
-            border-radius: px2rpx(100);
-            text-transform: uppercase;
-            background-color: #e61f1e;
-            text-align: center;
-          }
-
-          .w-40 {
-            max-width: 40%;
-          }
-
-          .text-white {
-            margin-top: px2rpx(10);
-            font-size: px2rpx(18);
-            margin-bottom: px2rpx(16);
-            line-height: 1.6;
-            color: #fff;
-          }
+        .title {
+          margin: 0 0 0 px2rpx(10);
+          font-size: px2rpx(56);
+          line-height: 1.2;
+          color: #fff;
+          font-weight: 700;
+          text-align: left;
         }
         }
 
 
-        .img-fluid {
-          width: 400px;
-          height: 33px;
+        .w-700 {
+          font-weight: 700;
         }
         }
 
 
-        .mt--10 {
-          margin-top: px2rpx(10);
+        .subtitle {
+          width: 45%;
+          font-size: px2rpx(18);
+          letter-spacing: px2rpx(1);
+          display: block;
+          margin-bottom: px2rpx(24);
+          color: #ffffff;
+          line-height: px2rpx(15);
+          font-weight: 500;
+          padding: px2rpx(10) px2rpx(20);
+          border-radius: px2rpx(100);
+          text-transform: uppercase;
+          background-color: #e61f1e;
+          text-align: center;
         }
         }
 
 
-        .h1 {
-          // text-align: center;
-          color: #fff;
-          font-size: 30px;
-          margin-top: 30px;
-          line-height: 1.5;
+        .w-40 {
+          max-width: 40%;
         }
         }
 
 
-        .h6 {
-          text-align: start;
-          line-height: 20px;
+        .text-white {
+          margin-top: px2rpx(10);
+          font-size: px2rpx(18);
+          margin-bottom: px2rpx(16);
+          line-height: 1.6;
           color: #fff;
           color: #fff;
-          font-size: 14px;
-          margin-top: 10px;
         }
         }
+      }
 
 
-        .company {
-          padding: px2rpx(10) 0 px2rpx(10) 0;
-          position: relative;
-          align-items: flex-start !important;
-          width: 100%;
-        }
+      .img-fluid {
+        width: 400px;
+        height: 33px;
       }
       }
 
 
-      .left-content {
-        width: 100%;
+      .mt--10 {
+        margin-top: px2rpx(10);
+      }
 
 
-        .des {
-          text-align: start;
-          line-height: 24px;
-          color: #fff;
-          font-size: 14px;
-          //margin-top: px2rpx(20);
-
-          :nth-child(n) {
-            display: inline;
-            word-break: break-all;
-            word-wrap: break-word;
-          }
-
-          .doc-link {
-            color: var(--color-error);
-            text-decoration: underline;
-            margin: 0 px2rpx(4);
-          }
-        }
+      .h1 {
+        // text-align: center;
+        color: #fff;
+        font-size: 30px;
+        margin-top: 30px;
+        line-height: 1.5;
       }
       }
-    }
 
 
-    .right-f {
-      background-color: var(--color-white);
-      padding: 0 px2rpx(24);
-      height: 100%;
-      box-sizing: border-box;
+      .h6 {
+        text-align: start;
+        line-height: 20px;
+        color: #fff;
+        font-size: 14px;
+        margin-top: 10px;
+      }
 
 
-      .account {
-        background-color: var(--color-white);
+      .company {
+        padding: px2rpx(10) 0 px2rpx(10) 0;
         position: relative;
         position: relative;
-        height: calc(100vh - 120px);
-        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);
-        }
+        align-items: flex-start !important;
+        width: 100%;
       }
       }
     }
     }
-  }
-
-  .bottom-box {
-    width: 100%;
-    height: 60px;
-    background-color: var(--color-white);
-    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;
+    .left-content {
+      width: 100%;
 
 
-    }
+      .des {
+        text-align: start;
+        line-height: 24px;
+        color: #fff;
+        font-size: 14px;
+        //margin-top: px2rpx(20);
 
 
-    .ellipsis {
-      width: px2rpx(200);
-      white-space: nowrap;
-      overflow: hidden;
-      text-overflow: ellipsis;
-    }
+        :nth-child(n) {
+          display: inline;
+          word-break: break-all;
+          word-wrap: break-word;
+        }
 
 
-    .cwg-button {
-      width: 120px !important;
-      padding: px2rpx(4) 0 !important;
+        .doc-link {
+          color: var(--color-error);
+          text-decoration: underline;
+          margin: 0 px2rpx(4);
+        }
+      }
     }
     }
   }
   }
 
 
+  .right-f {
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
+    padding: 0 px2rpx(24);
+    height: 100%;
+    box-sizing: border-box;
 
 
-  button {
-    background-color: #ea002a;
-    font-size: px2rpx(14);
-    font-weight: normal;
-    height: px2rpx(44);
-    line-height: px2rpx(44);
-  }
+    .account {
+      background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
+      position: relative;
+      height: calc(100vh - 120px);
+      display: flex;
+      flex-direction: column;
+      justify-content: center;
+      padding: 0 10%;
 
 
-  .right-f .account .company {
-    padding: px2rpx(50) 0 px2rpx(200) 0;
-    position: relative;
-    align-items: flex-start !important;
-  }
+      .company {
+        padding: px2rpx(50) 0 px2rpx(20) 0;
+        position: relative;
+        align-items: center !important;
+      }
 
 
-  .logo {
-    margin-left: px2rpx(48);
+      .company-icon {
+        width: px2rpx(234);
+      }
+    }
   }
   }
+}
 
 
-  .left-bg .company-icon {
-    width: px2rpx(234);
-  }
+.bottom-box {
+  width: 100%;
+  height: 60px;
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  color: #000;
 
 
-  .left-bg .left-content {
-    position: relative;
-    z-index: 1;
-  }
+  .bottom-title {
 
 
-  .title {
-    margin: px2rpx(32) 0;
-    font-size: px2rpx(24);
-    font-weight: bolder;
-    color: #e4e4e4;
     text-align: center;
     text-align: center;
-
-    i {
-      margin-right: px2rpx(10);
-    }
-
-    .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;
-    }
-  }
-
-  .qr-title {
-    font-size: px2rpx(16);
-    line-height: 1.5;
-    color: #cecece;
+    font-size: px2rpx(14);
     font-weight: 500;
     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);
-
-    }
-
-  }
-
-  .input {
-    height: px2rpx(44);
-    border-radius: px2rpx(8);
-    background: #f7f8fa;
-    padding: 0 px2rpx(20) !important;
-    position: relative;
-  }
-
-  .account-icon {
-    width: px2rpx(12);
-    height: px2rpx(14) !important;
-    margin-right: px2rpx(5);
-  }
-
-  :deep(.u-input__content__prefix-icon) {
-    height: px2rpx(20);
-  }
-
-  .regiset-btn {
-    margin: px2rpx(20) 0;
-  }
-
-  .account-tip {
+    line-height: 1.5;
     color: #666666;
     color: #666666;
-    font-size: px2rpx(14);
-    text-align: center;
-
-    text {
-      color: #ea002a;
-    }
-  }
 
 
-  :deep(.u-form-item__body) {
-    padding: 0 !important;
-    padding-bottom: px2rpx(24) !important;
   }
   }
 
 
-  :deep(.wcg-checkbox) {
-    padding: 0 !important;
+  .ellipsis {
+    width: px2rpx(200);
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
   }
   }
 
 
   .cwg-button {
   .cwg-button {
-    padding: px2rpx(34) 0 !important;
+    width: 120px !important;
+    padding: px2rpx(4) 0 !important;
   }
   }
+}
 
 
-  .tab-list {
-    width: 100%;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    //gap: 5px;
-    //padding-bottom: 10px;
-    border-bottom: 1px solid #e4e4e4;
-  }
-
-  .tab-item {
-    width: 50%;
-    margin: 0 px2rpx(15);
-    padding-right: 0;
-    padding-left: 0;
-    padding-bottom: 8px;
-    text-align: center;
-    border-bottom: 0.1rem solid transparent;
-    font-weight: 500;
-    color: #333;
-    cursor: pointer;
-    transition: all 0.3s ease;
-
-    .tab-label {
-      font-size: px2rpx(24);
-    }
 
 
-    &:hover,
-    &:focus {
-      font-weight: 700;
-      color: #e32326;
-      border-bottom-color: #e32326;
-    }
+button {
+  background-color: #ea002a;
+  font-size: px2rpx(14);
+  font-weight: normal;
+  height: px2rpx(44);
+  line-height: px2rpx(44);
+}
 
 
-    &.active {
-      font-weight: 700;
-      color: #e32326;
-      border-bottom-color: #e32326;
-    }
-  }
+.right-f .account .company {
+  padding: px2rpx(50) 0 px2rpx(200) 0;
+  position: relative;
+  align-items: flex-start !important;
+}
 
 
-  /* 注册表单样式 */
-  .pwd {
-    list-style: none;
-    padding-left: 0;
-    margin: 0;
+.logo {
+  margin-left: px2rpx(48);
+}
 
 
-    li {
-      font-size: px2rpx(12);
-      color: #999;
-      line-height: px2rpx(20);
-      position: relative;
-      padding-left: px2rpx(16);
+.left-bg .company-icon {
+  width: px2rpx(234);
+}
 
 
-      &::before {
-        content: '';
-        position: absolute;
-        left: 0;
-        top: 50%;
-        transform: translateY(-50%);
-        width: px2rpx(6);
-        height: px2rpx(6);
-        border-radius: 50%;
-        background-color: #999;
-      }
+.left-bg .left-content {
+  position: relative;
+  z-index: 1;
+}
 
 
-      &.fit {
-        color: #67c23a;
+.title {
+  margin: px2rpx(32) 0;
+  font-size: px2rpx(24);
+  font-weight: bolder;
+  color: #e4e4e4;
+  text-align: center;
 
 
-        &::before {
-          background-color: #67c23a;
-        }
-      }
-    }
-  }
-
-  .formContent {
-    padding: 0 10px;
+  i {
+    margin-right: px2rpx(10);
   }
   }
 
 
-  :deep(.uni-stat-box) {
-    height: 100%;
+  .tit1 {
+    font-size: px2rpx(34);
+    line-height: 1.5;
+    font-weight: bold;
+    color: #000000;
   }
   }
 
 
-  :deep(.uni-select) {
-    height: 100%;
+  .tit2 {
+    font-size: px2rpx(16);
+    line-height: 1.5;
+    color: #cecece;
+    font-weight: 500;
   }
   }
+}
 
 
-  :deep(.uni-easyinput__content) {
-    height: 100%;
-  }
+.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;
 
 
-  :deep(.uni-date-editor) {
-    height: 100%;
+  .line {
+    flex: 1;
+    height: 1px;
+    background-color: #e4e4e4;
+  }
+
+  .qr-tit2 {
+    margin: 0 px2rpx(12);
+
+  }
+
+}
+
+.input {
+  height: px2rpx(44);
+  border-radius: px2rpx(8);
+  background: #f7f8fa;
+  padding: 0 px2rpx(20) !important;
+  position: relative;
+}
+
+.account-icon {
+  width: px2rpx(12);
+  height: px2rpx(14) !important;
+  margin-right: px2rpx(5);
+}
+
+:deep(.u-input__content__prefix-icon) {
+  height: px2rpx(20);
+}
+
+.regiset-btn {
+  margin: px2rpx(20) 0;
+}
+
+.account-tip {
+  color: #666666;
+  font-size: px2rpx(14);
+  text-align: center;
+
+  text {
+    color: #ea002a;
+  }
+}
+
+:deep(.u-form-item__body) {
+  padding: 0 !important;
+  padding-bottom: px2rpx(24) !important;
+}
+
+:deep(.wcg-checkbox) {
+  padding: 0 !important;
+}
+
+.cwg-button {
+  padding: px2rpx(34) 0 !important;
+}
+
+.tab-list {
+  width: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  //gap: 5px;
+  //padding-bottom: 10px;
+  border-bottom: 1px solid #e4e4e4;
+}
+
+.tab-item {
+  width: 50%;
+  margin: 0 px2rpx(15);
+  padding-right: 0;
+  padding-left: 0;
+  padding-bottom: 8px;
+  text-align: center;
+  border-bottom: 0.1rem solid transparent;
+  font-weight: 500;
+  color: #333;
+  cursor: pointer;
+  transition: all 0.3s ease;
+
+  .tab-label {
+    font-size: px2rpx(24);
   }
   }
 
 
-  :deep(.uni-date-editor--x) {
-    height: 100%;
+  &:hover,
+  &:focus {
+    font-weight: 700;
+    color: #e32326;
+    border-bottom-color: #e32326;
   }
   }
 
 
-  .btn-code {
-    margin-left: -10px;
-    width: 120px;
-    height: px2rpx(37);
-    box-sizing: border-box;
-    background-color: #102047;
-    //border: 1px solid rgb(229, 229, 229);
-    color: #fff;
-    text-align: center;
-    line-height: px2rpx(38);
-    border-radius: 0 18px 18px 0;
-    cursor: pointer;
-    font-size: 14px;
-    flex-shrink: 0;
+  &.active {
+    font-weight: 700;
+    color: #e32326;
+    border-bottom-color: #e32326;
   }
   }
+}
 
 
-  .check-box {
-    padding: 0 px2rpx(10);
-    margin-bottom: px2rpx(10);
-    display: flex;
-    align-items: center;
-    cursor: pointer;
+/* 注册表单样式 */
+.pwd {
+  list-style: none;
+  padding-left: 0;
+  margin: 0;
 
 
-    .checkbox-label {
-      font-size: px2rpx(14);
-      color: #666666;
-      margin-left: px2rpx(8);
-      user-select: none;
-    }
-
-    :deep(.u-checkbox) {
-      display: flex;
-      align-items: flex-start;
+  li {
+    font-size: px2rpx(12);
+    color: #999;
+    line-height: px2rpx(20);
+    position: relative;
+    padding-left: px2rpx(16);
+
+    &::before {
+      content: '';
+      position: absolute;
+      left: 0;
+      top: 50%;
+      transform: translateY(-50%);
+      width: px2rpx(6);
+      height: px2rpx(6);
+      border-radius: 50%;
+      background-color: #999;
     }
     }
-  }
 
 
-  .regiset-btn {
-    width: 100%;
-    height: px2rpx(40);
-    border-radius: px2rpx(4);
-    background-color: var(--color-error);
-    color: #fff;
-    font-weight: bold;
-  }
+    &.fit {
+      color: #67c23a;
 
 
-  .login-link {
-    width: 100%;
-    margin-top: px2rpx(20);
-    text-align: center;
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    font-size: px2rpx(16);
-    line-height: 1.6;
+      &::before {
+        background-color: #67c23a;
+      }
+    }
   }
   }
-
-  .link {
-    margin-left: px2rpx(5);
-    color: #e61f1e;
-    padding-bottom: 2px;
-    cursor: pointer;
+}
+
+.formContent {
+  padding: 0 10px;
+}
+
+:deep(.uni-stat-box) {
+  height: 100%;
+}
+
+:deep(.uni-select) {
+  height: 100%;
+}
+
+:deep(.uni-easyinput__content) {
+  height: 100%;
+}
+
+:deep(.uni-date-editor) {
+  height: 100%;
+}
+
+:deep(.uni-date-editor--x) {
+  height: 100%;
+}
+
+.btn-code {
+  margin-left: -10px;
+  width: 120px;
+  height: px2rpx(37);
+  box-sizing: border-box;
+  background-color: #102047;
+  //border: 1px solid rgb(229, 229, 229);
+  color: #fff;
+  text-align: center;
+  line-height: px2rpx(38);
+  border-radius: 0 18px 18px 0;
+  cursor: pointer;
+  font-size: 14px;
+  flex-shrink: 0;
+}
+
+.check-box {
+  padding: 0 px2rpx(10);
+  margin-bottom: px2rpx(10);
+  display: flex;
+  align-items: center;
+  cursor: pointer;
+
+  .checkbox-label {
     font-size: px2rpx(14);
     font-size: px2rpx(14);
+    color: #666666;
+    margin-left: px2rpx(8);
+    user-select: none;
   }
   }
 
 
-  .agreemnet9 {
-    text-align: initial;
+  :deep(.u-checkbox) {
+    display: flex;
+    align-items: flex-start;
+  }
+}
+
+.regiset-btn {
+  width: 100%;
+  height: px2rpx(40);
+  border-radius: px2rpx(4);
+  background-color: var(--color-error);
+  color: #fff;
+  font-weight: bold;
+}
+
+.login-link {
+  width: 100%;
+  margin-top: px2rpx(20);
+  text-align: center;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: px2rpx(16);
+  line-height: 1.6;
+}
+
+.link {
+  margin-left: px2rpx(5);
+  color: #e61f1e;
+  padding-bottom: 2px;
+  cursor: pointer;
+  font-size: px2rpx(14);
+}
+
+.agreemnet9 {
+  text-align: initial;
+  color: #e61f1e;
+}
+
+.des-bottom {
+  margin-top: px2rpx(20);
+  line-height: 20px;
+  color: #000;
+  font-size: 12px;
+
+  .desc-link {
+    display: inline-block;
     color: #e61f1e;
     color: #e61f1e;
+    text-decoration: underline;
   }
   }
-
-  .des-bottom {
-    margin-top: px2rpx(20);
-    line-height: 20px;
-    color: #000;
-    font-size: 12px;
-
-    .desc-link {
-      display: inline-block;
-      color: #e61f1e;
-      text-decoration: underline;
-    }
-  }
+}
 </style>
 </style>

+ 4 - 4
pages/login/regist.vue

@@ -674,7 +674,7 @@ onMounted(() => {
 .fixed {
 .fixed {
   width: 100%;
   width: 100%;
   height: var(--status-bar-height);
   height: var(--status-bar-height);
-  background-color: var(--color-white);
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
   z-index: 9;
   z-index: 9;
 }
 }
 
 
@@ -707,7 +707,7 @@ onMounted(() => {
   //right: px2rpx(20);
   //right: px2rpx(20);
   z-index: 10;
   z-index: 10;
   width: 100%;
   width: 100%;
-  background-color: var(--color-white);
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
   display: flex;
   display: flex;
   justify-content: flex-end;
   justify-content: flex-end;
 }
 }
@@ -853,13 +853,13 @@ onMounted(() => {
   }
   }
 
 
   .right-f {
   .right-f {
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     padding: 0 px2rpx(24);
     padding: 0 px2rpx(24);
     height: 100%;
     height: 100%;
     box-sizing: border-box;
     box-sizing: border-box;
 
 
     .account {
     .account {
-      background-color: var(--color-white);
+      background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
       position: relative;
       position: relative;
       height: calc(100vh - 120px);
       height: calc(100vh - 120px);
       overflow-y: auto;
       overflow-y: auto;

+ 1 - 1
pages/mine/components/CardAuthDialog.vue

@@ -496,7 +496,7 @@ defineExpose({
     .ok-button {
     .ok-button {
 
 
         .u-button {
         .u-button {
-            background-color: var(--color-white);
+            background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
             opacity: 0;
             opacity: 0;
         }
         }
     }
     }

+ 1144 - 1221
pages/mine/improveImmediately.vue

@@ -2,7 +2,7 @@
   <cwg-page-wrapper>
   <cwg-page-wrapper>
     <view class="page page-shadow">
     <view class="page page-shadow">
       <uni-forms ref="formRef" :model="formData" :rules="rules" labelWidth="200" label-position="top"
       <uni-forms ref="formRef" :model="formData" :rules="rules" labelWidth="200" label-position="top"
-                 class="payment-form">
+        class="payment-form">
         <!-- 第一步:个人信息 -->
         <!-- 第一步:个人信息 -->
         <view v-show="currentStep === 1" class="form-section">
         <view v-show="currentStep === 1" class="form-section">
           <h3 class="section-title">{{ t('ImproveImmediately.Title.BasicInformation') }}</h3>
           <h3 class="section-title">{{ t('ImproveImmediately.Title.BasicInformation') }}</h3>
@@ -10,15 +10,15 @@
             <!-- 客户类型 -->
             <!-- 客户类型 -->
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item :label="t('ImproveImmediately.Label.CustomerType')">
               <uni-forms-item :label="t('ImproveImmediately.Label.CustomerType')">
-                <cwg-combox :clearable="false" v-model:value="formData.customType"
-                            :options="customerTypeOptions" :placeholder="t('placeholder.choose')" />
+                <cwg-combox :clearable="false" v-model:value="formData.customType" :options="customerTypeOptions"
+                  :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <!-- 公司名称 -->
             <!-- 公司名称 -->
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="formData.customType == 2">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="formData.customType == 2">
               <uni-forms-item :label="t('ImproveImmediately.Label.CompanyName')">
               <uni-forms-item :label="t('ImproveImmediately.Label.CompanyName')">
                 <uni-easyinput :clearable="false" v-model="formData.companyName"
                 <uni-easyinput :clearable="false" v-model="formData.companyName"
-                               :placeholder="t('placeholder.input')" />
+                  :placeholder="t('placeholder.input')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <!-- 姓 -->
             <!-- 姓 -->
@@ -46,16 +46,15 @@
             <!-- 国家 -->
             <!-- 国家 -->
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="countryOptions.length > 0">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="countryOptions.length > 0">
               <uni-forms-item name="nationality" :label="t('ImproveImmediately.Label.Nationality')">
               <uni-forms-item name="nationality" :label="t('ImproveImmediately.Label.Nationality')">
-                <cwg-combox :clearable="false" :filterable="true"
-                            v-model:value="formData.nationality" :options="countryOptions"
-                            :placeholder="t('placeholder.choose')" />
+                <cwg-combox :clearable="false" :filterable="true" v-model:value="formData.nationality"
+                  :options="countryOptions" :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <!-- 证件类型 -->
             <!-- 证件类型 -->
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="IdentityType" :label="identityLabel">
               <uni-forms-item name="IdentityType" :label="identityLabel">
-                <cwg-combox :clearable="false" v-model:value="formData.IdentityType"
-                            :options="identityTypes" :placeholder="t('placeholder.choose')" />
+                <cwg-combox :clearable="false" v-model:value="formData.IdentityType" :options="identityTypes"
+                  :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <!-- 证件号 -->
             <!-- 证件号 -->
@@ -74,14 +73,14 @@
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="gender" :label="t('ImproveImmediately.Label.Gender')">
               <uni-forms-item name="gender" :label="t('ImproveImmediately.Label.Gender')">
                 <cwg-combox :clearable="false" v-model:value="formData.gender" :options="genderOptions"
                 <cwg-combox :clearable="false" v-model:value="formData.gender" :options="genderOptions"
-                            :placeholder="t('placeholder.choose')" />
+                  :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <!-- 生日 -->
             <!-- 生日 -->
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="birth" :label="t('ImproveImmediately.Label.Birthday')">
               <uni-forms-item name="birth" :label="t('ImproveImmediately.Label.Birthday')">
-                <uni-datetime-picker :clear-icon="false" type="date" return-type="timestamp"
-                                     v-model="formData.birth" :placeholder="t('placeholder.choose')" />
+                <uni-datetime-picker :clear-icon="false" type="date" return-type="timestamp" v-model="formData.birth"
+                  :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <uni-col :span="24">
             <uni-col :span="24">
@@ -103,15 +102,15 @@
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="countryOptions.length > 0">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8" v-if="countryOptions.length > 0">
               <uni-forms-item name="country" :label="t('ImproveImmediately.Label.CountryRegionOfResidence')">
               <uni-forms-item name="country" :label="t('ImproveImmediately.Label.CountryRegionOfResidence')">
                 <cwg-combox :clearable="false" :filterable="true" v-model:value="formData.country"
                 <cwg-combox :clearable="false" :filterable="true" v-model:value="formData.country"
-                            :options="countryOptions" :placeholder="t('placeholder.choose')" @change="changeCountry" />
+                  :options="countryOptions" :placeholder="t('placeholder.choose')" @change="changeCountry" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <!-- 省份/州 -->
             <!-- 省份/州 -->
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"
-                     v-if="formData.country == 'CN' || formData.country == 'CNX' || formData.country == 'CNA' || formData.country == 'CNT'">
+              v-if="formData.country == 'CN' || formData.country == 'CNX' || formData.country == 'CNA' || formData.country == 'CNT'">
               <uni-forms-item name="state" :label="t('ImproveImmediately.Label.ProvinceRegion')">
               <uni-forms-item name="state" :label="t('ImproveImmediately.Label.ProvinceRegion')">
-                <cwg-combox :clearable="false" :filterable="true" v-model:value="formData.state"
-                            :options="stateOptions" :placeholder="t('placeholder.choose')" @change="changeState" />
+                <cwg-combox :clearable="false" :filterable="true" v-model:value="formData.state" :options="stateOptions"
+                  :placeholder="t('placeholder.choose')" @change="changeState" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <!-- 国外省份/州 -->
             <!-- 国外省份/州 -->
@@ -122,10 +121,10 @@
             </uni-col>
             </uni-col>
             <!-- 城市 -->
             <!-- 城市 -->
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8"
-                     v-if="formData.country == 'CN' || formData.country == 'CNX' || formData.country == 'CNA' || formData.country == 'CNT'">
+              v-if="formData.country == 'CN' || formData.country == 'CNX' || formData.country == 'CNA' || formData.country == 'CNT'">
               <uni-forms-item name="city" :label="t('ImproveImmediately.Label.City')">
               <uni-forms-item name="city" :label="t('ImproveImmediately.Label.City')">
-                <cwg-combox :clearable="false" :filterable="true" v-model:value="formData.city"
-                            :options="cityOptions" :placeholder="t('placeholder.choose')" />
+                <cwg-combox :clearable="false" :filterable="true" v-model:value="formData.city" :options="cityOptions"
+                  :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <!-- 国外城市 -->
             <!-- 国外城市 -->
@@ -137,7 +136,7 @@
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="addressLines1" :label="t('ImproveImmediately.Label.DetailedAddress')">
               <uni-forms-item name="addressLines1" :label="t('ImproveImmediately.Label.DetailedAddress')">
                 <uni-easyinput :clearable="false" v-model="formData.addressLines1"
                 <uni-easyinput :clearable="false" v-model="formData.addressLines1"
-                               :placeholder="t('placeholder.input')" />
+                  :placeholder="t('placeholder.input')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
@@ -148,7 +147,7 @@
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="addressLines2" :label="t('ImproveImmediately.Label.DetailedAddressStandby')">
               <uni-forms-item name="addressLines2" :label="t('ImproveImmediately.Label.DetailedAddressStandby')">
                 <uni-easyinput :clearable="false" v-model="formData.addressLines2"
                 <uni-easyinput :clearable="false" v-model="formData.addressLines2"
-                               :placeholder="t('placeholder.input')" />
+                  :placeholder="t('placeholder.input')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
           </uni-row>
           </uni-row>
@@ -159,38 +158,38 @@
           <uni-row class="demo-uni-row uni-row1">
           <uni-row class="demo-uni-row uni-row1">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="level" :label="t('ImproveImmediately.Label.Education')">
               <uni-forms-item name="level" :label="t('ImproveImmediately.Label.Education')">
-                <cwg-combox :clearable="false" v-model:value="formData.level"
-                            :options="educationOptions" :placeholder="t('placeholder.choose')" />
+                <cwg-combox :clearable="false" v-model:value="formData.level" :options="educationOptions"
+                  :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="employmentStatus" :label="t('ImproveImmediately.Label.OnJob')">
               <uni-forms-item name="employmentStatus" :label="t('ImproveImmediately.Label.OnJob')">
-                <cwg-combox :clearable="false" v-model:value="formData.employmentStatus"
-                            :options="employmentOptions" :placeholder="t('placeholder.choose')" />
+                <cwg-combox :clearable="false" v-model:value="formData.employmentStatus" :options="employmentOptions"
+                  :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="tradingObjectives" :label="t('ImproveImmediately.Label.purposeTransaction')">
               <uni-forms-item name="tradingObjectives" :label="t('ImproveImmediately.Label.purposeTransaction')">
                 <cwg-combox :clearable="false" v-model:value="formData.tradingObjectives"
                 <cwg-combox :clearable="false" v-model:value="formData.tradingObjectives"
-                            :options="transactionPurposeOptions" :placeholder="t('placeholder.choose')" />
+                  :options="transactionPurposeOptions" :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="sourceFunding" :label="t('ImproveImmediately.Label.SourceFunds')">
               <uni-forms-item name="sourceFunding" :label="t('ImproveImmediately.Label.SourceFunds')">
-                <cwg-combox :clearable="false" v-model:value="formData.sourceFunding"
-                            :options="fundSourceOptions" :placeholder="t('placeholder.choose')" />
+                <cwg-combox :clearable="false" v-model:value="formData.sourceFunding" :options="fundSourceOptions"
+                  :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="grossAnnualIncome" :label="t('ImproveImmediately.Label.TotalAnnualRevenue')">
               <uni-forms-item name="grossAnnualIncome" :label="t('ImproveImmediately.Label.TotalAnnualRevenue')">
-                <cwg-combox :clearable="false" v-model:value="formData.grossAnnualIncome"
-                            :options="annualIncomeOptions" :placeholder="t('placeholder.choose')" />
+                <cwg-combox :clearable="false" v-model:value="formData.grossAnnualIncome" :options="annualIncomeOptions"
+                  :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="totalNewWorth" :label="t('ImproveImmediately.Label.TotalNetAssets')">
               <uni-forms-item name="totalNewWorth" :label="t('ImproveImmediately.Label.TotalNetAssets')">
-                <cwg-combox :clearable="false" v-model:value="formData.totalNewWorth"
-                            :options="netWorthOptions" :placeholder="t('placeholder.choose')" />
+                <cwg-combox :clearable="false" v-model:value="formData.totalNewWorth" :options="netWorthOptions"
+                  :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
             </uni-col>
             </uni-col>
           </uni-row>
           </uni-row>
@@ -199,7 +198,7 @@
             <text class="Trad-experience">{{ t('ImproveImmediately.Content.TradingExperience1') }}</text>
             <text class="Trad-experience">{{ t('ImproveImmediately.Content.TradingExperience1') }}</text>
             <view class="Trad-choose">
             <view class="Trad-choose">
               <uni-data-checkbox v-model="formData.experienceTradingDerivative"
               <uni-data-checkbox v-model="formData.experienceTradingDerivative"
-                                 :localdata="radioList"></uni-data-checkbox>
+                :localdata="radioList"></uni-data-checkbox>
             </view>
             </view>
           </view>
           </view>
           <view class="experience">
           <view class="experience">
@@ -239,85 +238,49 @@
 
 
               </view>
               </view>
               <uni-forms-item name="cardType" :label="t('ImproveImmediately.Label.CardType')">
               <uni-forms-item name="cardType" :label="t('ImproveImmediately.Label.CardType')">
-                <cwg-combox :clearable="false" v-model:value="formData.cardType"
-                            :options="cardTypeOptions" :placeholder="t('placeholder.choose')" />
+                <cwg-combox :clearable="false" v-model:value="formData.cardType" :options="cardTypeOptions"
+                  :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
               </uni-forms-item>
               <uni-row class="demo-uni-row uni-row1">
               <uni-row class="demo-uni-row uni-row1">
                 <uni-col :xs="24" :sm="24" :md="10" :lg="10" :xl="10">
                 <uni-col :xs="24" :sm="24" :md="10" :lg="10" :xl="10">
-                  <cwg-file-picker-wrapper
-                    v-model="fileListID1.path"
-                    :editable="fileListID1.status != 2"
-                    :limit="1"
-                    :fileMediatype="'all'"
-                    uploadUrl="/custom/file/upload/1"
-                    :baseUrl="updateUrl"
-                    :imageWidth="150"
-                    :imageHeight="150"
-                    :showPreviewDelete="false"
-                    :canDelete="false"
-                    :uploadError="false"
-                    :showProgress="false"
-                    :canChoose="true"
-                    :showError="false"
-                    :show-progress="false"
-                    disablePreview
-                    :image-styles="imageStyle"
-                    @update:modelValue="(val) => handleFileUpdate(val, '1')"
-                    customClass="avatar-uploader"
-                  >
+                  <cwg-file-picker-wrapper v-model="fileListID1.path" :editable="fileListID1.status != 2" :limit="1"
+                    :fileMediatype="'all'" uploadUrl="/custom/file/upload/1" :baseUrl="updateUrl" :imageWidth="150"
+                    :imageHeight="150" :showPreviewDelete="false" :canDelete="false" :uploadError="false"
+                    :showProgress="false" :canChoose="true" :showError="false" :show-progress="false" disablePreview
+                    :image-styles="imageStyle" @update:modelValue="(val) => handleFileUpdate(val, '1')"
+                    customClass="avatar-uploader">
                     <view class="file-item">
                     <view class="file-item">
-                      <image
-                        v-if="!isPdf(fileListID1.path)"
-                        class="avatar"
-                        :src="updateUrl + (fileListID1.path)"
-                      ></image>
+                      <image v-if="!isPdf(fileListID1.path)" class="avatar" :src="updateUrl + (fileListID1.path)">
+                      </image>
                       <view v-else>
                       <view v-else>
                         <image class="icon" :src="icon_doc" />
                         <image class="icon" :src="icon_doc" />
                       </view>
                       </view>
                     </view>
                     </view>
                   </cwg-file-picker-wrapper>
                   </cwg-file-picker-wrapper>
-<!--                  <view v-else>-->
-<!--                    <view class="file-item">-->
-<!--                      <image-->
-<!--                        v-if="!isPdf(fileListID1.path)"-->
-<!--                        class="avatar"-->
-<!--                        :src="updateUrl + fileListID1.path"-->
-<!--                      ></image>-->
-<!--                      <view v-else>-->
-<!--                        <image class="icon" :src="icon_doc" />-->
-<!--                      </view>-->
-
-<!--                    </view>-->
-<!--                  </view>-->
+                  <!--                  <view v-else>-->
+                  <!--                    <view class="file-item">-->
+                  <!--                      <image-->
+                  <!--                        v-if="!isPdf(fileListID1.path)"-->
+                  <!--                        class="avatar"-->
+                  <!--                        :src="updateUrl + fileListID1.path"-->
+                  <!--                      ></image>-->
+                  <!--                      <view v-else>-->
+                  <!--                        <image class="icon" :src="icon_doc" />-->
+                  <!--                      </view>-->
+
+                  <!--                    </view>-->
+                  <!--                  </view>-->
                 </uni-col>
                 </uni-col>
                 <uni-col :xs="24" :sm="24" :md="10" :lg="10" :xl="10">
                 <uni-col :xs="24" :sm="24" :md="10" :lg="10" :xl="10">
-                  <cwg-file-picker-wrapper
-                    v-model="fileListID2.path"
-                    :editable="fileListID2.status != 2"
-                    :limit="1"
-                    :fileMediatype="'all'"
-                    uploadUrl="/custom/file/upload/2"
-                    :baseUrl="updateUrl"
-                    :imageWidth="150"
-                    :imageHeight="150"
-                    :showPreviewDelete="false"
-                    :canDelete="false"
-                    :uploadError="false"
-                    :showProgress="false"
-                    :canChoose="true"
-                    :showError="false"
-                    :show-progress="false"
-                    disablePreview
-                    :image-styles="imageStyle"
-                    @update:modelValue="(val) => handleFileUpdate(val, '2')"
-                    customClass="avatar-uploader"
-                  >
+                  <cwg-file-picker-wrapper v-model="fileListID2.path" :editable="fileListID2.status != 2" :limit="1"
+                    :fileMediatype="'all'" uploadUrl="/custom/file/upload/2" :baseUrl="updateUrl" :imageWidth="150"
+                    :imageHeight="150" :showPreviewDelete="false" :canDelete="false" :uploadError="false"
+                    :showProgress="false" :canChoose="true" :showError="false" :show-progress="false" disablePreview
+                    :image-styles="imageStyle" @update:modelValue="(val) => handleFileUpdate(val, '2')"
+                    customClass="avatar-uploader">
                     <view class="file-item">
                     <view class="file-item">
-                      <image
-                        v-if="!isPdf(fileListID2.path)"
-                        class="avatar"
-                        :src="updateUrl + (fileListID2.path)"
-                      ></image>
+                      <image v-if="!isPdf(fileListID2.path)" class="avatar" :src="updateUrl + (fileListID2.path)">
+                      </image>
                       <view v-else>
                       <view v-else>
                         <image class="icon" :src="icon_doc" />
                         <image class="icon" :src="icon_doc" />
                       </view>
                       </view>
@@ -347,16 +310,12 @@
                 <view class="box">
                 <view class="box">
                   <image class="mobile" :src="icon_mobile" />
                   <image class="mobile" :src="icon_mobile" />
                   <image class="arrow" :src="icon_arrowR" />
                   <image class="arrow" :src="icon_arrowR" />
-                  <image
-                    class="img_mobile"
-                    style="
+                  <image class="img_mobile" style="
                       display: inline-block;
                       display: inline-block;
                       width: 120px;
                       width: 120px;
                       height: 120px;
                       height: 120px;
                       border: 8px solid var(--color-gray);
                       border: 8px solid var(--color-gray);
-                    "
-                    :src="mobile"
-                  >
+                    " :src="mobile">
                     <div slot="error" class="image-slot">
                     <div slot="error" class="image-slot">
                       <i class="el-icon-picture-outline"></i>
                       <i class="el-icon-picture-outline"></i>
                     </div>
                     </div>
@@ -408,8 +367,8 @@
         </view>
         </view>
         <!-- 第四步:地址证明 -->
         <!-- 第四步:地址证明 -->
         <view v-show="currentStep === 4" class="form-section">
         <view v-show="currentStep === 4" class="form-section">
-<!--去掉地址证明-->
-<!--          <uni-row class="demo-uni-row uni-row1">
+          <!--去掉地址证明-->
+          <!--          <uni-row class="demo-uni-row uni-row1">
             <uni-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
             <uni-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
               <view class="crm-title-box">
               <view class="crm-title-box">
                 <text class="tit">{{ t('ImproveImmediately.Title.ProofAddress') }}</text>
                 <text class="tit">{{ t('ImproveImmediately.Title.ProofAddress') }}</text>
@@ -509,75 +468,37 @@
               </view>
               </view>
               <uni-row class="demo-uni-row uni-row1">
               <uni-row class="demo-uni-row uni-row1">
                 <uni-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
                 <uni-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-                  <cwg-file-picker
-                    :limit="9"
-                    :multiple="true"
-                    :editable="true"
-                    :fileMediatype="'all'"
-                    uploadUrl="/custom/file/upload/10"
-                    :baseUrl="updateUrl"
-                    :imageWidth="100"
-                    :imageHeight="60"
-                    :showPreviewDelete="false"
-                    :canDelete="false"
-                    :uploadError="false"
-                    :showProgress="false"
-                    :image-styles="imageStyle"
-                    @update:modelValue="(val) => handleFileUpdate(val, '10')"
-                    custom-class="fileOther"
-                    :showError="false"
-                  >
+                  <cwg-file-picker :limit="9" :multiple="true" :editable="true" :fileMediatype="'all'"
+                    uploadUrl="/custom/file/upload/10" :baseUrl="updateUrl" :imageWidth="100" :imageHeight="60"
+                    :showPreviewDelete="false" :canDelete="false" :uploadError="false" :showProgress="false"
+                    :image-styles="imageStyle" @update:modelValue="(val) => handleFileUpdate(val, '10')"
+                    custom-class="fileOther" :showError="false">
                     <button type="primary">{{ t('Btn.Upload') }}</button>
                     <button type="primary">{{ t('Btn.Upload') }}</button>
                   </cwg-file-picker>
                   </cwg-file-picker>
                   <view class="fileList">
                   <view class="fileList">
-                    <view id="files" v-for="(item,index) in fileListOthers" :key="index">
-
-                      <cwg-file-picker-wrapper
-                        customClass="list_upload"
-                        v-model="item.path"
-                        :editable="item.status != 2"
-                        :limit="1"
-                        :fileMediatype="'all'"
-                        :uploadUrl="'/custom/file/upload/10/'+item.id"
-                        :baseUrl="updateUrl"
-                        :uploadError="false"
-                        :showProgress="false"
-                        :imageWidth="100"
-                        :imageHeight="60"
-                        :showPreviewDelete="true"
-                        :disablePreview="true"
-                        :image-styles="imageStyle"
-                        :canChoose="true"
-                        @update:modelValue="(val) => handleFileUpdate(val, '1')"
-                      >
+                    <view id="files" v-for="(item, index) in fileListOthers" :key="index">
+
+                      <cwg-file-picker-wrapper customClass="list_upload" v-model="item.path"
+                        :editable="item.status != 2" :limit="1" :fileMediatype="'all'"
+                        :uploadUrl="'/custom/file/upload/10/' + item.id" :baseUrl="updateUrl" :uploadError="false"
+                        :showProgress="false" :imageWidth="100" :imageHeight="60" :showPreviewDelete="true"
+                        :disablePreview="true" :image-styles="imageStyle" :canChoose="true"
+                        @update:modelValue="(val) => handleFileUpdate(val, '1')">
                         <view class="file-item">
                         <view class="file-item">
-                          <image
-                            v-if="!isPdf(item.path) || !isPdf(item.againPath)"
-                            class="avatar"
-                            :src="updateUrl + (item.againPath || item.path)"
-                          ></image>
+                          <image v-if="!isPdf(item.path) || !isPdf(item.againPath)" class="avatar"
+                            :src="updateUrl + (item.againPath || item.path)"></image>
                           <view v-else>
                           <view v-else>
                             <image class="icon" :src="icon_doc" />
                             <image class="icon" :src="icon_doc" />
                           </view>
                           </view>
                         </view>
                         </view>
                       </cwg-file-picker-wrapper>
                       </cwg-file-picker-wrapper>
                       <view class="options">
                       <view class="options">
-                        <u-button
-                          style="margin-right: 20px;"
-                          :disabled="item.status == 2"
-                          @click.stop="showFile(item)"
-                        >
-                          <a
-                            :href="updateUrl + (item.againPath || item.path)"
-                            target="_blank"
-                          >
+                        <u-button style="margin-right: 20px;" :disabled="item.status == 2" @click.stop="showFile(item)">
+                          <a :href="updateUrl + (item.againPath || item.path)" target="_blank">
                             {{ t('Btn.item12') }}
                             {{ t('Btn.item12') }}
                           </a>
                           </a>
                         </u-button>
                         </u-button>
-                        <u-button
-                          :disabled="item.status == 2"
-                          @click="fileOtherDelete(item.id)"
-                        >
+                        <u-button :disabled="item.status == 2" @click="fileOtherDelete(item.id)">
                           {{ t('Btn.Delete') }}
                           {{ t('Btn.Delete') }}
                         </u-button>
                         </u-button>
                       </view>
                       </view>
@@ -719,1216 +640,1218 @@
 </template>
 </template>
 
 
 <script setup lang="ts">
 <script setup lang="ts">
-  import { ref, onMounted, onUnmounted, watch, computed } from 'vue'
-  import { useI18n } from 'vue-i18n'
-  import { onLoad } from '@dcloudio/uni-app'
-  import { personalApi } from '@/service/personal'
-  import Config from '@/config/index'
-  import QrCode from '@/components/QRCode.vue'
-  import { userToken } from '@/composables/config'
-  import useRouter from '@/hooks/useRouter'
-  import { Patterns, Validators } from '@/utils/validators'
-  import { pinyin } from 'pinyin-pro'
-  import config from '@/config/index'
-  import icon_doc from '@/static/icons/crm-document.svg'
-  import icon_refresh from '@/static/icons/crm-refresh.svg'
-  import icon_mobile from '@/static/icons/icon_mobile.svg'
-  import icon_arrowR from '@/static/icons/icon_arrowR.svg'
-
-  const router = useRouter()
-  const { t,local } = useI18n()
-  const currentStep = ref<number>(3)
-  const formRef = ref()
-  const dialogCheck = ref(null)
-  const dialogCheck1 = ref(false)
-  const text1 = ref('')
-  const qrCodeStatus = ref(false)
-  const addressTipPopup = ref()
-
-  // 新增的响应式数据
-  const divActiveHelf = ref(false)
-  const divActiveAll = ref(false)
-  const websock = ref(null)
-  const isPC = ref(true)
-  const fileListID1 = ref({ againPath: '', id: null, path: '', status: null, type: null })
-  const fileListID2 = ref({ againPath: '', id: null, path: '', status: null, type: null })
-  const fileListAdd1 = ref({ againPath: '', id: null, path: '', status: null, type: null })
-  const fileListAdd2 = ref({ againPath: '', id: null, path: '', status: null, type: null })
-  const fileListOthers = ref([])
-  const actionID1 = ref('')
-  const actionID2 = ref('')
-  const actionAdd1 = ref('')
-  const actionAdd2 = ref('')
-  const actionOtherAdd = ref('')
-  const flag = ref(false)
-  const pictLoading = ref(false)
-  const pictLoadingImg = ref(false)
-  const isApprove = ref(false)
-  const metaInfo = ref({})
-  const HostWs = ref(Config.HostWs)
-  const cities = ref([])
-  const states = ref([])
-  const countries = ref([])
-  const uploadImage = ref(0)
-  const updateUrl = config.Host80
-  const mobile = ref('')
-  const notCountry = [
-    'AF',
-    'AI',
-    'AG',
-    'BS',
-    'BY',
-    'BZ',
-    'BA',
-    'BI',
-    'CF',
-    'CD',
-    'CU',
-    'ET',
-    'FJ',
-    'PS',
-    'GN',
-    'GW',
-    'HT',
-    'IR',
-    'IQ',
-    'LB',
-    'LY',
-    'ML',
-    'MM',
-    'NI',
-    'KP',
-    'PW',
-    'RU',
-    'SO',
-    'SS',
-    'SD',
-    'SY',
-    'UA',
-    'US',
-    'VE',
-    'YE',
-    'ZW',
-  ]
-
-  const imageStyle = ref({
-    width: 200,
-    height: 150,
-    border: {
-      radius: '5px',
-    },
-  })
-
-  // 验证函数
-  function validateName(a: any, b?: any, c?: any) {
-    const reg = /^[A-Z\s]+$/i
-    if (typeof c === 'function') {
-      const value = b
-      const callback = c
-      const val = String(value ?? '').trim()
-      if (!val) return callback(new Error(t('card.vaildate.v4')))
-      if (!reg.test(val)) return callback(new Error(t('card.vaildate.v38')))
-      if (val.length < 2 || val.length > 23) return callback(new Error(t('card.vaildate.v39')))
-      const firstName = String(formData.value?.firstName ?? '').trim()
-      const lastName = String(formData.value?.lastName ?? '').trim()
-      if (`${firstName} ${lastName}`.length > 23) return callback(new Error(t('card.vaildate.v40')))
-      return callback()
-    }
-    const val = String(a ?? '').trim()
-    if (!val) return t('card.vaildate.v4')
-    if (!reg.test(val)) return t('card.vaildate.v38')
-    if (val.length < 2 || val.length > 23) return t('card.vaildate.v39')
+import { ref, onMounted, onUnmounted, watch, computed } from 'vue'
+import { useI18n } from 'vue-i18n'
+import { onLoad } from '@dcloudio/uni-app'
+import { personalApi } from '@/service/personal'
+import Config from '@/config/index'
+import QrCode from '@/components/QRCode.vue'
+import { userToken } from '@/composables/config'
+import useRouter from '@/hooks/useRouter'
+import { Patterns, Validators } from '@/utils/validators'
+import { pinyin } from 'pinyin-pro'
+import config from '@/config/index'
+import icon_doc from '@/static/icons/crm-document.svg'
+import icon_refresh from '@/static/icons/crm-refresh.svg'
+import icon_mobile from '@/static/icons/icon_mobile.svg'
+import icon_arrowR from '@/static/icons/icon_arrowR.svg'
+
+const router = useRouter()
+const { t, local } = useI18n()
+const currentStep = ref<number>(3)
+const formRef = ref()
+const dialogCheck = ref(null)
+const dialogCheck1 = ref(false)
+const text1 = ref('')
+const qrCodeStatus = ref(false)
+const addressTipPopup = ref()
+
+// 新增的响应式数据
+const divActiveHelf = ref(false)
+const divActiveAll = ref(false)
+const websock = ref(null)
+const isPC = ref(true)
+const fileListID1 = ref({ againPath: '', id: null, path: '', status: null, type: null })
+const fileListID2 = ref({ againPath: '', id: null, path: '', status: null, type: null })
+const fileListAdd1 = ref({ againPath: '', id: null, path: '', status: null, type: null })
+const fileListAdd2 = ref({ againPath: '', id: null, path: '', status: null, type: null })
+const fileListOthers = ref([])
+const actionID1 = ref('')
+const actionID2 = ref('')
+const actionAdd1 = ref('')
+const actionAdd2 = ref('')
+const actionOtherAdd = ref('')
+const flag = ref(false)
+const pictLoading = ref(false)
+const pictLoadingImg = ref(false)
+const isApprove = ref(false)
+const metaInfo = ref({})
+const HostWs = ref(Config.HostWs)
+const cities = ref([])
+const states = ref([])
+const countries = ref([])
+const uploadImage = ref(0)
+const updateUrl = config.Host80
+const mobile = ref('')
+const notCountry = [
+  'AF',
+  'AI',
+  'AG',
+  'BS',
+  'BY',
+  'BZ',
+  'BA',
+  'BI',
+  'CF',
+  'CD',
+  'CU',
+  'ET',
+  'FJ',
+  'PS',
+  'GN',
+  'GW',
+  'HT',
+  'IR',
+  'IQ',
+  'LB',
+  'LY',
+  'ML',
+  'MM',
+  'NI',
+  'KP',
+  'PW',
+  'RU',
+  'SO',
+  'SS',
+  'SD',
+  'SY',
+  'UA',
+  'US',
+  'VE',
+  'YE',
+  'ZW',
+]
+
+const imageStyle = ref({
+  width: 200,
+  height: 150,
+  border: {
+    radius: '5px',
+  },
+})
+
+// 验证函数
+function validateName(a: any, b?: any, c?: any) {
+  const reg = /^[A-Z\s]+$/i
+  if (typeof c === 'function') {
+    const value = b
+    const callback = c
+    const val = String(value ?? '').trim()
+    if (!val) return callback(new Error(t('card.vaildate.v4')))
+    if (!reg.test(val)) return callback(new Error(t('card.vaildate.v38')))
+    if (val.length < 2 || val.length > 23) return callback(new Error(t('card.vaildate.v39')))
     const firstName = String(formData.value?.firstName ?? '').trim()
     const firstName = String(formData.value?.firstName ?? '').trim()
     const lastName = String(formData.value?.lastName ?? '').trim()
     const lastName = String(formData.value?.lastName ?? '').trim()
-    if (`${firstName} ${lastName}`.length > 23) return t('card.vaildate.v40')
-    return true
+    if (`${firstName} ${lastName}`.length > 23) return callback(new Error(t('card.vaildate.v40')))
+    return callback()
   }
   }
-
-  function validateBirthday(a: any, b?: any, c?: any) {
-    if (typeof c === 'function') {
-      const value = b
-      const callback = c
-      const val = value
-      if (!val) return callback(new Error(t('card.vaildate.v5')))
-      const today = new Date()
-      const birthDate = new Date(val)
-      let age = today.getFullYear() - birthDate.getFullYear()
-      const month = today.getMonth() - birthDate.getMonth()
-      if (month < 0 || (month === 0 && today.getDate() < birthDate.getDate())) age--
-      if (age < 18) return callback(new Error(t('card.New.n3')))
-      return callback()
-    }
-    const val = a
-    if (!val) return t('card.vaildate.v5')
+  const val = String(a ?? '').trim()
+  if (!val) return t('card.vaildate.v4')
+  if (!reg.test(val)) return t('card.vaildate.v38')
+  if (val.length < 2 || val.length > 23) return t('card.vaildate.v39')
+  const firstName = String(formData.value?.firstName ?? '').trim()
+  const lastName = String(formData.value?.lastName ?? '').trim()
+  if (`${firstName} ${lastName}`.length > 23) return t('card.vaildate.v40')
+  return true
+}
+
+function validateBirthday(a: any, b?: any, c?: any) {
+  if (typeof c === 'function') {
+    const value = b
+    const callback = c
+    const val = value
+    if (!val) return callback(new Error(t('card.vaildate.v5')))
     const today = new Date()
     const today = new Date()
     const birthDate = new Date(val)
     const birthDate = new Date(val)
     let age = today.getFullYear() - birthDate.getFullYear()
     let age = today.getFullYear() - birthDate.getFullYear()
     const month = today.getMonth() - birthDate.getMonth()
     const month = today.getMonth() - birthDate.getMonth()
     if (month < 0 || (month === 0 && today.getDate() < birthDate.getDate())) age--
     if (month < 0 || (month === 0 && today.getDate() < birthDate.getDate())) age--
-    return age < 18 ? t('card.New.n3') : true
+    if (age < 18) return callback(new Error(t('card.New.n3')))
+    return callback()
   }
   }
-
-  function validateAddress(a: any, b?: any, c?: any) {
-    if (typeof c === 'function') {
-      const value = b
-      const callback = c
-      const val = String(value ?? '').trim()
-      if (!val) return callback(new Error(t('card.vaildate.v27')))
-      if (val.length < 2 || val.length > 40) return callback(new Error(t('card.New.n1')))
-      if (!Patterns.address.test(val)) return callback(new Error(t('card.New.n1')))
-      return callback()
-    }
-    const val = String(a ?? '').trim()
-    if (!val) return t('card.vaildate.v27')
-    if (val.length < 2 || val.length > 40) return t('card.New.n1')
-    return Patterns.address.test(val) ? true : t('card.New.n1')
-  }
-
-  const rules = {
-    customType: [Validators.required(t('card.vaildate.v1'))],
-    firstName: [Validators.required(t('card.vaildate.v3')), Validators.custom(validateName)],
-    lastName: [Validators.required(t('card.vaildate.v4')), Validators.custom(validateName)],
-    nationality: [Validators.required(t('card.vaildate.v6'), 'change')],
-    IdentityType: [Validators.required(t('card.vaildate.v1'))],
-    identity: [Validators.required(t('card.vaildate.v4'))],
-    gender: [Validators.required(t('card.vaildate.v9'), 'change')],
-    birth: [
-      Validators.required(t('card.vaildate.v5'), 'change'),
-      Validators.custom(validateBirthday, 'change'),
-    ],
-    country: [Validators.required(t('card.vaildate.v1'))],
-    state: [Validators.required(t('card.vaildate.v1'))],
-    city: [Validators.required(t('card.vaildate.v1'))],
-    addressLines1: [Validators.required(t('card.vaildate.v27')), Validators.custom(validateAddress)],
-    zipCode: [
-      Validators.required(t('card.vaildate.v8')),
-      Validators.pattern(Patterns.postcode, t('card.New.n2')),
-    ],
-    level: [Validators.required(t('card.vaildate.v1'))],
-    employmentStatus: [Validators.required(t('card.vaildate.v1'))],
-    tradingObjectives: [Validators.required(t('card.vaildate.v1'))],
-    sourceFunding: [Validators.required(t('card.vaildate.v1'))],
-    grossAnnualIncome: [Validators.required(t('card.vaildate.v1'))],
-    totalNewWorth: [Validators.required(t('card.vaildate.v1'))],
-    cardType: [Validators.required(t('card.vaildate.v1'))],
-    idFrontUrl: [Validators.required(t('card.vaildate.v1'))],
-    idBackUrl: [Validators.required(t('card.vaildate.v1'))],
-    addressProofUrl: [Validators.required(t('card.vaildate.v1'))],
+  const val = a
+  if (!val) return t('card.vaildate.v5')
+  const today = new Date()
+  const birthDate = new Date(val)
+  let age = today.getFullYear() - birthDate.getFullYear()
+  const month = today.getMonth() - birthDate.getMonth()
+  if (month < 0 || (month === 0 && today.getDate() < birthDate.getDate())) age--
+  return age < 18 ? t('card.New.n3') : true
+}
+
+function validateAddress(a: any, b?: any, c?: any) {
+  if (typeof c === 'function') {
+    const value = b
+    const callback = c
+    const val = String(value ?? '').trim()
+    if (!val) return callback(new Error(t('card.vaildate.v27')))
+    if (val.length < 2 || val.length > 40) return callback(new Error(t('card.New.n1')))
+    if (!Patterns.address.test(val)) return callback(new Error(t('card.New.n1')))
+    return callback()
   }
   }
-
-  onLoad((options) => {
-    currentStep.value = parseInt(options?.currentStep || '1', 10)
-  })
-
-  function goStep(step: number) {
-    console.log(step,'step')
-    if ( step == 4){
-      if (currentUploadCard.value == 1){
-        if (!formData.value.cardType){
-          uni.showToast({ title:t('vaildate.CardType.empty'),icon:'error'
+  const val = String(a ?? '').trim()
+  if (!val) return t('card.vaildate.v27')
+  if (val.length < 2 || val.length > 40) return t('card.New.n1')
+  return Patterns.address.test(val) ? true : t('card.New.n1')
+}
+
+const rules = {
+  customType: [Validators.required(t('card.vaildate.v1'))],
+  firstName: [Validators.required(t('card.vaildate.v3')), Validators.custom(validateName)],
+  lastName: [Validators.required(t('card.vaildate.v4')), Validators.custom(validateName)],
+  nationality: [Validators.required(t('card.vaildate.v6'), 'change')],
+  IdentityType: [Validators.required(t('card.vaildate.v1'))],
+  identity: [Validators.required(t('card.vaildate.v4'))],
+  gender: [Validators.required(t('card.vaildate.v9'), 'change')],
+  birth: [
+    Validators.required(t('card.vaildate.v5'), 'change'),
+    Validators.custom(validateBirthday, 'change'),
+  ],
+  country: [Validators.required(t('card.vaildate.v1'))],
+  state: [Validators.required(t('card.vaildate.v1'))],
+  city: [Validators.required(t('card.vaildate.v1'))],
+  addressLines1: [Validators.required(t('card.vaildate.v27')), Validators.custom(validateAddress)],
+  zipCode: [
+    Validators.required(t('card.vaildate.v8')),
+    Validators.pattern(Patterns.postcode, t('card.New.n2')),
+  ],
+  level: [Validators.required(t('card.vaildate.v1'))],
+  employmentStatus: [Validators.required(t('card.vaildate.v1'))],
+  tradingObjectives: [Validators.required(t('card.vaildate.v1'))],
+  sourceFunding: [Validators.required(t('card.vaildate.v1'))],
+  grossAnnualIncome: [Validators.required(t('card.vaildate.v1'))],
+  totalNewWorth: [Validators.required(t('card.vaildate.v1'))],
+  cardType: [Validators.required(t('card.vaildate.v1'))],
+  idFrontUrl: [Validators.required(t('card.vaildate.v1'))],
+  idBackUrl: [Validators.required(t('card.vaildate.v1'))],
+  addressProofUrl: [Validators.required(t('card.vaildate.v1'))],
+}
+
+onLoad((options) => {
+  currentStep.value = parseInt(options?.currentStep || '1', 10)
+})
+
+function goStep(step: number) {
+  console.log(step, 'step')
+  if (step == 4) {
+    if (currentUploadCard.value == 1) {
+      if (!formData.value.cardType) {
+        uni.showToast({
+          title: t('vaildate.CardType.empty'), icon: 'error'
         })
         })
-          return
-        }
-        if (!fileListID1.value.path || !fileListID2.value.path){
-          uni.showToast({ title: t('vaildate.IDPhoto.empty'),icon: 'error'
+        return
+      }
+      if (!fileListID1.value.path || !fileListID2.value.path) {
+        uni.showToast({
+          title: t('vaildate.IDPhoto.empty'), icon: 'error'
         })
         })
-          return
-        }
+        return
       }
       }
     }
     }
-    currentStep.value = step
   }
   }
+  currentStep.value = step
+}
+
+// 选项数据
+const customerTypeOptions = [
+  { value: 1, text: t('ImproveImmediately.Label.CustomerType1') },
+  { value: 2, text: t('ImproveImmediately.Label.CustomerType2') },
+]
+
+const identityTypes = ref([
+  { text: t('ImproveImmediately.Label.IDCard'), value: 2 },
+  { text: t('ImproveImmediately.Label.Passport'), value: 3 },
+])
+
+const genderOptions = [
+  { value: 1, text: t('PersonalManagement.Label.Men') },
+  { value: 2, text: t('PersonalManagement.Label.Women') },
+]
+const radioList = [
+  { value: 1, text: t('ImproveImmediately.Label.Yes') },
+  { value: 0, text: t('ImproveImmediately.Label.No') },
+]
+
+const educationOptions = [
+  { value: 1, text: t('ImproveImmediately.Label.Education1') },
+  { value: 2, text: t('ImproveImmediately.Label.Education2') },
+  { value: 3, text: t('ImproveImmediately.Label.Education3') },
+  { value: 4, text: t('ImproveImmediately.Label.Education4') },
+  { value: 5, text: t('ImproveImmediately.Label.Education5') },
+]
+
+const employmentOptions = [
+  { value: 1, text: t('ImproveImmediately.Label.OnJob1') },
+  { value: 2, text: t('ImproveImmediately.Label.OnJob2') },
+  { value: 3, text: t('ImproveImmediately.Label.OnJob3') },
+  { value: 4, text: t('ImproveImmediately.Label.OnJob4') },
+  { value: 5, text: t('ImproveImmediately.Label.OnJob5') },
+]
+
+const transactionPurposeOptions = [
+  { value: 1, text: t('ImproveImmediately.Label.purposeTransaction1') },
+  { value: 2, text: t('ImproveImmediately.Label.purposeTransaction2') },
+  { value: 3, text: t('ImproveImmediately.Label.purposeTransaction3') },
+  { value: 4, text: t('ImproveImmediately.Label.purposeTransaction4') },
+]
+
+const fundSourceOptions = [
+  { value: 1, text: t('ImproveImmediately.Label.SourceFunds1') },
+  { value: 2, text: t('ImproveImmediately.Label.SourceFunds2') },
+  { value: 3, text: t('ImproveImmediately.Label.SourceFunds3') },
+  { value: 4, text: t('ImproveImmediately.Label.SourceFunds4') },
+  { value: 5, text: t('ImproveImmediately.Label.SourceFunds5') },
+  { value: 6, text: t('ImproveImmediately.Label.SourceFunds6') },
+]
+
+const annualIncomeOptions = [
+  { value: 1, text: t('ImproveImmediately.Label.TotalAnnualRevenue1') },
+  { value: 2, text: t('ImproveImmediately.Label.TotalAnnualRevenue2') },
+  { value: 3, text: t('ImproveImmediately.Label.TotalAnnualRevenue3') },
+  { value: 4, text: t('ImproveImmediately.Label.TotalAnnualRevenue4') },
+  { value: 5, text: t('ImproveImmediately.Label.TotalAnnualRevenue5') },
+]
+
+const netWorthOptions = [
+  { value: 1, text: t('ImproveImmediately.Label.TotalNetAssets1') },
+  { value: 2, text: t('ImproveImmediately.Label.TotalNetAssets2') },
+  { value: 3, text: t('ImproveImmediately.Label.TotalNetAssets3') },
+  { value: 4, text: t('ImproveImmediately.Label.TotalNetAssets4') },
+  { value: 5, text: t('ImproveImmediately.Label.TotalNetAssets5') },
+]
+
+const cardTypeOptions = [
+  { value: 'ID_CARD', text: 'ID Card' },
+  { value: 'PASSPORT', text: 'Passport' },
+  { value: 'DRIVERS', text: 'Driver\'s License' },
+  { value: 'RESIDENCE_PERMIT', text: 'Residence Permit' },
+]
+
+// 表单数据
+const formData = ref({
+  customType: 1,
+  companyName: undefined,
+  lastName: undefined,
+  firstName: undefined,
+  middle: undefined,
+  nationality: undefined,
+  IdentityType: 2,
+  identity: undefined,
+  nameEn: undefined,
+  gender: undefined,
+  birth: undefined,
+  country: undefined,
+  state: undefined,
+  city: undefined,
+  addressLines1: undefined,
+  addressLines2: undefined,
+  zipCode: undefined,
+  level: undefined,
+  employmentStatus: undefined,
+  tradingObjectives: undefined,
+  sourceFunding: undefined,
+  grossAnnualIncome: undefined,
+  totalNewWorth: undefined,
+  experienceTradingDerivative: 0,
+  experienceTradingForex: 0,
+  derivativeProducts: 0,
+  experienceQualification: 0,
+  cardType: undefined,
+  idFrontUrl: undefined,
+  idBackUrl: undefined,
+  addressProofUrl: undefined,
+  otherFiles: undefined,
+  addressLines: [],
+})
+
+// 选项数据
+const countryOptions = ref<Array<{ text: string; value: string }>>([])
+const stateOptions = ref<Array<{ text: string; value: string }>>([])
+const cityOptions = ref<Array<{ text: string; value: string }>>([])
+
+// 加载状态
+const loadingStates = ref({
+  next: false,
+  submit: false,
+})
+
+// 计算属性
+const identityLabel = computed(() => {
+  if (formData.value.IdentityType === 2) return t('ImproveImmediately.Label.IDCard')
+  if (formData.value.IdentityType === 3) return t('ImproveImmediately.Label.Passport')
+  return t('ImproveImmediately.Label.IdentityID')
+})
+
+// 计算属性:当前选中国籍的 uploadCard 值
+const currentUploadCard = computed(() => {
+  if (!formData.value.nationality || !countries.value.length) {
+    return 0
+  }
+  const selectedCountry = countries.value.find(
+    (item: any) => item.code === formData.value.nationality,
+  )
+  return selectedCountry ? (selectedCountry.uploadCard || 0) : 0
+})
 
 
-  // 选项数据
-  const customerTypeOptions = [
-    { value: 1, text: t('ImproveImmediately.Label.CustomerType1') },
-    { value: 2, text: t('ImproveImmediately.Label.CustomerType2') },
-  ]
-
-  const identityTypes = ref([
-    { text: t('ImproveImmediately.Label.IDCard'), value: 2 },
-    { text: t('ImproveImmediately.Label.Passport'), value: 3 },
-  ])
-
-  const genderOptions = [
-    { value: 1, text: t('PersonalManagement.Label.Men') },
-    { value: 2, text: t('PersonalManagement.Label.Women') },
-  ]
-  const radioList = [
-    { value: 1, text: t('ImproveImmediately.Label.Yes') },
-    { value: 0, text: t('ImproveImmediately.Label.No') },
-  ]
-
-  const educationOptions = [
-    { value: 1, text: t('ImproveImmediately.Label.Education1') },
-    { value: 2, text: t('ImproveImmediately.Label.Education2') },
-    { value: 3, text: t('ImproveImmediately.Label.Education3') },
-    { value: 4, text: t('ImproveImmediately.Label.Education4') },
-    { value: 5, text: t('ImproveImmediately.Label.Education5') },
-  ]
-
-  const employmentOptions = [
-    { value: 1, text: t('ImproveImmediately.Label.OnJob1') },
-    { value: 2, text: t('ImproveImmediately.Label.OnJob2') },
-    { value: 3, text: t('ImproveImmediately.Label.OnJob3') },
-    { value: 4, text: t('ImproveImmediately.Label.OnJob4') },
-    { value: 5, text: t('ImproveImmediately.Label.OnJob5') },
-  ]
-
-  const transactionPurposeOptions = [
-    { value: 1, text: t('ImproveImmediately.Label.purposeTransaction1') },
-    { value: 2, text: t('ImproveImmediately.Label.purposeTransaction2') },
-    { value: 3, text: t('ImproveImmediately.Label.purposeTransaction3') },
-    { value: 4, text: t('ImproveImmediately.Label.purposeTransaction4') },
-  ]
-
-  const fundSourceOptions = [
-    { value: 1, text: t('ImproveImmediately.Label.SourceFunds1') },
-    { value: 2, text: t('ImproveImmediately.Label.SourceFunds2') },
-    { value: 3, text: t('ImproveImmediately.Label.SourceFunds3') },
-    { value: 4, text: t('ImproveImmediately.Label.SourceFunds4') },
-    { value: 5, text: t('ImproveImmediately.Label.SourceFunds5') },
-    { value: 6, text: t('ImproveImmediately.Label.SourceFunds6') },
-  ]
-
-  const annualIncomeOptions = [
-    { value: 1, text: t('ImproveImmediately.Label.TotalAnnualRevenue1') },
-    { value: 2, text: t('ImproveImmediately.Label.TotalAnnualRevenue2') },
-    { value: 3, text: t('ImproveImmediately.Label.TotalAnnualRevenue3') },
-    { value: 4, text: t('ImproveImmediately.Label.TotalAnnualRevenue4') },
-    { value: 5, text: t('ImproveImmediately.Label.TotalAnnualRevenue5') },
-  ]
-
-  const netWorthOptions = [
-    { value: 1, text: t('ImproveImmediately.Label.TotalNetAssets1') },
-    { value: 2, text: t('ImproveImmediately.Label.TotalNetAssets2') },
-    { value: 3, text: t('ImproveImmediately.Label.TotalNetAssets3') },
-    { value: 4, text: t('ImproveImmediately.Label.TotalNetAssets4') },
-    { value: 5, text: t('ImproveImmediately.Label.TotalNetAssets5') },
-  ]
-
-  const cardTypeOptions = [
-    { value: 'ID_CARD', text: 'ID Card' },
-    { value: 'PASSPORT', text: 'Passport' },
-    { value: 'DRIVERS', text: 'Driver\'s License' },
-    { value: 'RESIDENCE_PERMIT', text: 'Residence Permit' },
-  ]
-
-  // 表单数据
-  const formData = ref({
-    customType: 1,
-    companyName: undefined,
-    lastName: undefined,
-    firstName: undefined,
-    middle: undefined,
-    nationality: undefined,
-    IdentityType: 2,
-    identity: undefined,
-    nameEn: undefined,
-    gender: undefined,
-    birth: undefined,
-    country: undefined,
-    state: undefined,
-    city: undefined,
-    addressLines1: undefined,
-    addressLines2: undefined,
-    zipCode: undefined,
-    level: undefined,
-    employmentStatus: undefined,
-    tradingObjectives: undefined,
-    sourceFunding: undefined,
-    grossAnnualIncome: undefined,
-    totalNewWorth: undefined,
-    experienceTradingDerivative: 0,
-    experienceTradingForex: 0,
-    derivativeProducts: 0,
-    experienceQualification: 0,
-    cardType: undefined,
-    idFrontUrl: undefined,
-    idBackUrl: undefined,
-    addressProofUrl: undefined,
-    otherFiles: undefined,
-    addressLines: [],
+// 计算属性:当前选中国籍的 uploadAddress 值
+const currentUploadAddress = computed(() => {
+  if (!formData.value.nationality || !countries.value.length) {
+    return 0
+  }
+  const selectedCountry = countries.value.find(
+    (item: any) => item.code === formData.value.nationality,
+  )
+  return selectedCountry ? (selectedCountry.uploadAddress || 0) : 0
+})
+
+// 方法
+function changeCountry(value: any) {
+  // 处理国家选择变化
+  // 清空省份/城市选择//
+  formData.value.state = ''
+  formData.value.city = ''
+  stateOptions.value = []
+  cityOptions.value = []
+  states.value = []
+  cities.value = []
+  let item = {}
+  countries.value.forEach(element => {
+    if (element.code == value) {
+      item = element
+      return
+    }
   })
   })
+  getStateList(item.id)
+}
 
 
-  // 选项数据
-  const countryOptions = ref<Array<{ text: string; value: string }>>([])
-  const stateOptions = ref<Array<{ text: string; value: string }>>([])
-  const cityOptions = ref<Array<{ text: string; value: string }>>([])
 
 
-  // 加载状态
-  const loadingStates = ref({
-    next: false,
-    submit: false,
-  })
+function handleFileUpdate(value, type) {
+  console.log(value, type, 'uplaod')
+  if (type == 10) {
+    uni.showToast({ title: t('card.New1.d5'), icon: 'none' })
+    getCustomFileList();
+  }
+}
+const showFile = (file) => {
+  // console.log(file)
+  window.open(updateUrl + (file.againPath || file.path), '_blank')
+}
+
+async function fileOtherDelete(id) {
+  uni.showModal({
+    title: t('Msg.SystemPrompt'),
+    content: t('Msg.Delete'),
+    cancelText: t('Btn.Cancel'),
+    confirmText: t('Btn.Confirm'),
+    success: async (res) => {
+      if (res.confirm) {
+        // 确认删除
+        let data = await personalApi.customFileDelete({ ids: [id] })
+        if (data.code == 200) {
+          uni.showToast(t('Msg.DeleteSuccess'))
+          getCustomFileList()
+        } else {
+          uni.showToast(res.msg)
+        }
+      }
+    },
+    fail: () => {
 
 
-  // 计算属性
-  const identityLabel = computed(() => {
-    if (formData.value.IdentityType === 2) return t('ImproveImmediately.Label.IDCard')
-    if (formData.value.IdentityType === 3) return t('ImproveImmediately.Label.Passport')
-    return t('ImproveImmediately.Label.IdentityID')
+    },
   })
   })
+}
 
 
-  // 计算属性:当前选中国籍的 uploadCard 值
-  const currentUploadCard = computed(() => {
-    if (!formData.value.nationality || !countries.value.length) {
-      return 0
-    }
-    const selectedCountry = countries.value.find(
-      (item: any) => item.code === formData.value.nationality,
-    )
-    return selectedCountry ? (selectedCountry.uploadCard || 0) : 0
-  })
 
 
-  // 计算属性:当前选中国籍的 uploadAddress 值
-  const currentUploadAddress = computed(() => {
-    if (!formData.value.nationality || !countries.value.length) {
-      return 0
+function changeState(val) {
+  formData.value.city = ''
+  cityOptions.value = []
+  let item = {}
+  states.value.forEach((element) => {
+    if (element.name == val || element.enName == val) {
+      item = element
+      return
     }
     }
-    const selectedCountry = countries.value.find(
-      (item: any) => item.code === formData.value.nationality,
-    )
-    return selectedCountry ? (selectedCountry.uploadAddress || 0) : 0
   })
   })
+  getCityList(item.id)
+}
 
 
-  // 方法
-  function changeCountry(value: any) {
-    // 处理国家选择变化
-    // 清空省份/城市选择//
+function handleChange(value: any) {
+  formData.value = { ...formData.value, [value.key]: value.value }
+  console.log(value)
+  if (value.key === 'country') {
     formData.value.state = ''
     formData.value.state = ''
     formData.value.city = ''
     formData.value.city = ''
     stateOptions.value = []
     stateOptions.value = []
     cityOptions.value = []
     cityOptions.value = []
-    states.value = []
-    cities.value = []
-    let item = {}
-    countries.value.forEach(element => {
-      if (element.code == value) {
-        item = element
-        return
-      }
-    })
-    getStateList(item.id)
-  }
-
-
-  function handleFileUpdate(value, type) {
-    console.log(value, type, 'uplaod')
-    if (type == 10){
-      uni.showToast({ title: t('card.New1.d5'),icon: 'none' })
-      getCustomFileList();
+    if (value.value) {
+      getStateList(value.value)
     }
     }
-  }
-  const showFile = (file)=>{
-    // console.log(file)
-    window.open(updateUrl + (file.againPath || file.path), '_blank')
-  }
-
-  async function fileOtherDelete(id) {
-    uni.showModal({
-      title: t('Msg.SystemPrompt'),
-      content: t('Msg.Delete'),
-      cancelText: t('Btn.Cancel'),
-      confirmText: t('Btn.Confirm'),
-      success: async (res) => {
-        if (res.confirm) {
-          // 确认删除
-          let data = await personalApi.customFileDelete({ ids: [id] })
-          if (data.code == 200) {
-            uni.showToast(t('Msg.DeleteSuccess'))
-            getCustomFileList()
-          } else {
-            uni.showToast(res.msg)
-          }
-        }
-      },
-      fail: () => {
-
-      },
-    })
-  }
-
-
-  function changeState(val) {
+  } else if (value.key === 'state') {
     formData.value.city = ''
     formData.value.city = ''
     cityOptions.value = []
     cityOptions.value = []
-    let item = {}
-    states.value.forEach((element) => {
-      if (element.name == val || element.enName == val) {
-        item = element
-        return
-      }
-    })
-    getCityList(item.id)
-  }
-
-  function handleChange(value: any) {
-    formData.value = { ...formData.value, [value.key]: value.value }
-    console.log(value)
-    if (value.key === 'country') {
-      formData.value.state = ''
-      formData.value.city = ''
-      stateOptions.value = []
-      cityOptions.value = []
-      if (value.value) {
-        getStateList(value.value)
-      }
-    } else if (value.key === 'state') {
-      formData.value.city = ''
-      cityOptions.value = []
-      if (value.value) {
-        getCityList(value.value)
-      }
-    }
-  }
-
-  function openAddressTip() {
-    // 打开地址提示弹窗
-    addressTipPopup.value.open()
-  }
-
-  function isPdf(url, image) {
-    let res = !!url
-    if (image) {
-      return res && url.substr(-3, 3) == 'pdf' &&
-        url.substr(-3, 3) == 'PDF'
-    }
-    return res && (url.substr(-3, 3) == 'pdf' ||
-      url.substr(-3, 3) == 'PDF')
-  }
-
-  function cancle() {
-    if (!isApprove.value) {
-      dialogCheck.value.open()
-      dialogCheck1.value = true
-    } else {
-      router.push({ path: '/pages/customer/index' })
+    if (value.value) {
+      getCityList(value.value)
     }
     }
   }
   }
-
-  function closeDia() {
-    dialogCheck.value.close()
+}
+
+function openAddressTip() {
+  // 打开地址提示弹窗
+  addressTipPopup.value.open()
+}
+
+function isPdf(url, image) {
+  let res = !!url
+  if (image) {
+    return res && url.substr(-3, 3) == 'pdf' &&
+      url.substr(-3, 3) == 'PDF'
   }
   }
-
-  function toHome() {
-    dialogCheck.value.close()
+  return res && (url.substr(-3, 3) == 'pdf' ||
+    url.substr(-3, 3) == 'PDF')
+}
+
+function cancle() {
+  if (!isApprove.value) {
+    dialogCheck.value.open()
+    dialogCheck1.value = true
+  } else {
     router.push({ path: '/pages/customer/index' })
     router.push({ path: '/pages/customer/index' })
   }
   }
-
-  async function save() {
-    await updateInfo(1)
-  }
-
-  async function Submit() {
-    loadingStates.value.submit = true
-    try {
-      formData.value.addressLines = []
-      if (formData.value.addressLines1) {
-        formData.value.addressLines.push(formData.value.addressLines1)
-      }
-      if (formData.value.addressLines2) {
-        formData.value.addressLines.push(formData.value.addressLines2)
-      }
-      if (!formData.value.addressLines1 && !formData.value.addressLines2) {
-        formData.value.addressLines = []
-      }
-      if (formData.value.customType != 2) {
-        formData.value.companyName = ''
-      }
-      let res = await personalApi.CustomUpdateInfo({
-        ...formData.value,
-      })
-      if (res.code == Config.Code.StatusOK) {
-        await getCustomFileList()
-        await customApply()
-      } else {
-        uni.showToast({ title: res.msg, icon: 'none' })
-      }
-    } catch (error: any) {
-      uni.showToast({ title: error.message || t('Msg.SystemError'), icon: 'none' })
-    } finally {
-      loadingStates.value.submit = false
+}
+
+function closeDia() {
+  dialogCheck.value.close()
+}
+
+function toHome() {
+  dialogCheck.value.close()
+  router.push({ path: '/pages/customer/index' })
+}
+
+async function save() {
+  await updateInfo(1)
+}
+
+async function Submit() {
+  loadingStates.value.submit = true
+  try {
+    formData.value.addressLines = []
+    if (formData.value.addressLines1) {
+      formData.value.addressLines.push(formData.value.addressLines1)
     }
     }
-  }
-
-  async function updateInfo(save: number) {
-    try {
+    if (formData.value.addressLines2) {
+      formData.value.addressLines.push(formData.value.addressLines2)
+    }
+    if (!formData.value.addressLines1 && !formData.value.addressLines2) {
       formData.value.addressLines = []
       formData.value.addressLines = []
-      if (formData.value.addressLines1) {
-        formData.value.addressLines.push(formData.value.addressLines1)
-      }
-      if (formData.value.addressLines2) {
-        formData.value.addressLines.push(formData.value.addressLines2)
-      }
-      if (!formData.value.addressLines1 && !formData.value.addressLines2) {
-        formData.value.addressLines = []
-      }
-      let res = await personalApi.CustomUpdateInfo({
-        ...formData.value,
-      })
-      if (res.code == Config.Code.StatusOK) {
-        if (save) {
-          dialogCheck.value.close()
-          router.push({ path: '/pages/customer/index' })
-        }
-      } else {
-        uni.showToast({ title: res.msg, icon: 'none' })
-      }
-    } catch (error: any) {
-      uni.showToast({ title: error.message || t('Msg.SystemError'), icon: 'none' })
     }
     }
-  }
-
-  async function customApply() {
-    try {
-      let res = await personalApi.customApplyReal({})
-      if (res.code == Config.Code.StatusOK) {
-        isApprove.value = true
-        await getLoginInfo()
-        dialogCheck.value.open()
-        dialogCheck1.value = false
-      } else {
-        uni.showToast({ title: res.msg, icon: 'none' })
-      }
-    } catch (error: any) {
-      uni.showToast({ title: error.message, icon: 'none' })
+    if (formData.value.customType != 2) {
+      formData.value.companyName = ''
     }
     }
-  }
-
-  async function getCountryList() {
-    try {
-      let res = await personalApi.Country({})
-      if (res.code == Config.Code.StatusOK) {
-        countryOptions.value = res.data.map((item: any) => ({
-          text: item.enName,
-          value: item.code,
-          disabled: notCountry.indexOf(item.code) !== -1,
-        }))
-        countries.value = res.data
-        const country = formData.value.country
-        if (country) {
-          countries.value.forEach((item) => {
-            if (item.code == country) {
-              getStateList(item.id)
-            }
-          })
-        }
-      }
-    } catch (error: any) {
-      uni.showToast({ title: error.message, icon: 'none' })
+    let res = await personalApi.CustomUpdateInfo({
+      ...formData.value,
+    })
+    if (res.code == Config.Code.StatusOK) {
+      await getCustomFileList()
+      await customApply()
+    } else {
+      uni.showToast({ title: res.msg, icon: 'none' })
     }
     }
+  } catch (error: any) {
+    uni.showToast({ title: error.message || t('Msg.SystemError'), icon: 'none' })
+  } finally {
+    loadingStates.value.submit = false
   }
   }
+}
 
 
-  async function getStateList(pid: string) {
-    try {
-      let res = await personalApi.Country({ pid })
-      if (res.code == Config.Code.StatusOK) {
-        stateOptions.value = res.data.map((item: any) => ({
-          text: local.value === 'en' ? item.enName : item.name,
-          value: local.value === 'en' ? item.enName : item.name,
-        }))
-        states.value = res.data
-        const state = formData.value.state
-        if (state) {
-          states.value.forEach((item) => {
-            if (
-              item.name == state ||
-              item.enName == state
-            ) {
-              getCityList(item.id)
-            }
-          })
-        }
-      }
-    } catch (error: any) {
+async function updateInfo(save: number) {
+  try {
+    formData.value.addressLines = []
+    if (formData.value.addressLines1) {
+      formData.value.addressLines.push(formData.value.addressLines1)
     }
     }
-  }
-
-  async function getCityList(pid: string) {
-    try {
-      let res = await personalApi.Country({ pid })
-      if (res.code == Config.Code.StatusOK) {
-        cityOptions.value = res.data.map((item: any) => ({
-          text: local.value === 'en' ? item.enName : item.name,
-          value: local.value === 'en' ? item.enName : item.name,
-        }))
-        cities.value = res.data
-      }
-    } catch (error: any) {
+    if (formData.value.addressLines2) {
+      formData.value.addressLines.push(formData.value.addressLines2)
     }
     }
-  }
-
-  async function getLoginInfo() {
-    try {
-      let res = await personalApi.CustomLoginInfo()
-      if (res.code == Config.Code.StatusOK) {
-        formData.value = res.data.customInfo
-        if (formData.value.addressLines != null && formData.value.addressLines.length) {
-          formData.value.addressLines1 = formData.value.addressLines[0]
-          formData.value.addressLines2 = formData.value.addressLines[1]
-        }
-        formData.value.customType = formData.value.customType ? formData.value.customType : 1
-        formData.value.IdentityType = 2
-        await getCountryList()
-      } else {
-        uni.showToast({ title: t('Msg.SystemError'), icon: 'none' })
+    if (!formData.value.addressLines1 && !formData.value.addressLines2) {
+      formData.value.addressLines = []
+    }
+    let res = await personalApi.CustomUpdateInfo({
+      ...formData.value,
+    })
+    if (res.code == Config.Code.StatusOK) {
+      if (save) {
+        dialogCheck.value.close()
+        router.push({ path: '/pages/customer/index' })
       }
       }
-    } catch (error: any) {
-
+    } else {
+      uni.showToast({ title: res.msg, icon: 'none' })
     }
     }
+  } catch (error: any) {
+    uni.showToast({ title: error.message || t('Msg.SystemError'), icon: 'none' })
   }
   }
-
-  // 获取二维码
-  async function getMobileInfo() {
-    try {
-      let res = await personalApi.CustomFileMobileFiles({}, { responseType: 'arraybuffer' })
-      // console.log(res);
-      mobile.value = 'data:image/png;base64,' + uni.arrayBufferToBase64(res)
-    } catch (error: any) {
-      // uni.showToast({ title: error.message , icon: 'none' })
+}
+
+async function customApply() {
+  try {
+    let res = await personalApi.customApplyReal({})
+    if (res.code == Config.Code.StatusOK) {
+      isApprove.value = true
+      await getLoginInfo()
+      dialogCheck.value.open()
+      dialogCheck1.value = false
+    } else {
+      uni.showToast({ title: res.msg, icon: 'none' })
     }
     }
+  } catch (error: any) {
+    uni.showToast({ title: error.message, icon: 'none' })
   }
   }
-
-  // 获取上传文件信息
-  async function getCustomFileList() {
-    try {
-      let res = await personalApi.CustomFileList()
-      if (res.code == Config.Code.StatusOK) {
-        let myData = res.data
-        fileListOthers.value = []
-        myData.forEach((item: any) => {
-          if (item.type == 1) {
-            fileListID1.value = item
-          } else if (item.type == 2) {
-            fileListID2.value = item
-          } else if (item.type == 3) {
-            fileListAdd1.value = item
-          } else if (item.type == 4) {
-            fileListAdd2.value = item
-          } else if (item.type == 10) {
-            fileListOthers.value.push(item)
+}
+
+async function getCountryList() {
+  try {
+    let res = await personalApi.Country({})
+    if (res.code == Config.Code.StatusOK) {
+      countryOptions.value = res.data.map((item: any) => ({
+        text: item.enName,
+        value: item.code,
+        disabled: notCountry.indexOf(item.code) !== -1,
+      }))
+      countries.value = res.data
+      const country = formData.value.country
+      if (country) {
+        countries.value.forEach((item) => {
+          if (item.code == country) {
+            getStateList(item.id)
           }
           }
         })
         })
-        actionType()
-      } else {
-        uni.showToast({ title: res.msg, icon: 'none' })
-        flag.value = false
       }
       }
-    } catch (error: any) {
-      uni.showToast({ title: error.message || t('Msg.SystemError'), icon: 'none' })
     }
     }
+  } catch (error: any) {
+    uni.showToast({ title: error.message, icon: 'none' })
   }
   }
-
-  // 请求头
-  function actionType() {
-    if (fileListID1.value.id) {
-      actionID1.value = Config.Host80 + '/custom/file/upload/1/' + fileListID1.value.id
-    } else {
-      actionID1.value = Config.Host80 + '/custom/file/upload/1'
-    }
-    if (fileListID2.value.id) {
-      actionID2.value = Config.Host80 + '/custom/file/upload/2/' + fileListID2.value.id
-    } else {
-      actionID2.value = Config.Host80 + '/custom/file/upload/2'
+}
+
+async function getStateList(pid: string) {
+  try {
+    let res = await personalApi.Country({ pid })
+    if (res.code == Config.Code.StatusOK) {
+      stateOptions.value = res.data.map((item: any) => ({
+        text: local.value === 'en' ? item.enName : item.name,
+        value: local.value === 'en' ? item.enName : item.name,
+      }))
+      states.value = res.data
+      const state = formData.value.state
+      if (state) {
+        states.value.forEach((item) => {
+          if (
+            item.name == state ||
+            item.enName == state
+          ) {
+            getCityList(item.id)
+          }
+        })
+      }
     }
     }
-    if (fileListAdd1.value.id) {
-      actionAdd1.value = Config.Host80 + '/custom/file/upload/3/' + fileListAdd1.value.id
-    } else {
-      actionAdd1.value = Config.Host80 + '/custom/file/upload/3'
+  } catch (error: any) {
+  }
+}
+
+async function getCityList(pid: string) {
+  try {
+    let res = await personalApi.Country({ pid })
+    if (res.code == Config.Code.StatusOK) {
+      cityOptions.value = res.data.map((item: any) => ({
+        text: local.value === 'en' ? item.enName : item.name,
+        value: local.value === 'en' ? item.enName : item.name,
+      }))
+      cities.value = res.data
     }
     }
-    if (fileListAdd2.value.id) {
-      actionAdd2.value = Config.Host80 + '/custom/file/upload/4/' + fileListAdd2.value.id
+  } catch (error: any) {
+  }
+}
+
+async function getLoginInfo() {
+  try {
+    let res = await personalApi.CustomLoginInfo()
+    if (res.code == Config.Code.StatusOK) {
+      formData.value = res.data.customInfo
+      if (formData.value.addressLines != null && formData.value.addressLines.length) {
+        formData.value.addressLines1 = formData.value.addressLines[0]
+        formData.value.addressLines2 = formData.value.addressLines[1]
+      }
+      formData.value.customType = formData.value.customType ? formData.value.customType : 1
+      formData.value.IdentityType = 2
+      await getCountryList()
     } else {
     } else {
-      actionAdd2.value = Config.Host80 + '/custom/file/upload/4'
+      uni.showToast({ title: t('Msg.SystemError'), icon: 'none' })
     }
     }
-    actionOtherAdd.value = Config.Host80 + '/custom/file/upload/10'
-  }
+  } catch (error: any) {
 
 
-  function updateFile(myData) {
-      if (myData.type == 1) {
-        fileListID1.value = myData
-      } else if (myData.type == 2) {
-        fileListID2.value = myData
-      } else if (myData.type == 3) {
-        fileListAdd1.value = myData
-      } else if (myData.type == 4) {
-        fileListAdd2.value = myData
-      } else if (myData.type == 10) {
-        if (!fileListOthers.value.length) {
-          fileListOthers.value.push(myData)
-        } else {
-          let flag = true
-          fileListOthers.value.forEach((item: any) => {
-            if (item.id == myData.id) {
-              item = myData
-              flag = false
-            }
-          })
-          if (flag) {
-            fileListOthers.value.push(myData)
-          }
+  }
+}
+
+// 获取二维码
+async function getMobileInfo() {
+  try {
+    let res = await personalApi.CustomFileMobileFiles({}, { responseType: 'arraybuffer' })
+    // console.log(res);
+    mobile.value = 'data:image/png;base64,' + uni.arrayBufferToBase64(res)
+  } catch (error: any) {
+    // uni.showToast({ title: error.message , icon: 'none' })
+  }
+}
+
+// 获取上传文件信息
+async function getCustomFileList() {
+  try {
+    let res = await personalApi.CustomFileList()
+    if (res.code == Config.Code.StatusOK) {
+      let myData = res.data
+      fileListOthers.value = []
+      myData.forEach((item: any) => {
+        if (item.type == 1) {
+          fileListID1.value = item
+        } else if (item.type == 2) {
+          fileListID2.value = item
+        } else if (item.type == 3) {
+          fileListAdd1.value = item
+        } else if (item.type == 4) {
+          fileListAdd2.value = item
+        } else if (item.type == 10) {
+          fileListOthers.value.push(item)
         }
         }
-      }
+      })
       actionType()
       actionType()
+    } else {
+      uni.showToast({ title: res.msg, icon: 'none' })
+      flag.value = false
+    }
+  } catch (error: any) {
+    uni.showToast({ title: error.message || t('Msg.SystemError'), icon: 'none' })
   }
   }
-
-  // 判断是否为PC端
-  function IsPC() {
-    let userAgentInfo = navigator.userAgent
-    let Agents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod']
-    let flag = true
-    for (let v = 0; v < Agents.length; v++) {
-      if (userAgentInfo.indexOf(Agents[v]) > 0) {
-        flag = false
-        break
+}
+
+// 请求头
+function actionType() {
+  if (fileListID1.value.id) {
+    actionID1.value = Config.Host80 + '/custom/file/upload/1/' + fileListID1.value.id
+  } else {
+    actionID1.value = Config.Host80 + '/custom/file/upload/1'
+  }
+  if (fileListID2.value.id) {
+    actionID2.value = Config.Host80 + '/custom/file/upload/2/' + fileListID2.value.id
+  } else {
+    actionID2.value = Config.Host80 + '/custom/file/upload/2'
+  }
+  if (fileListAdd1.value.id) {
+    actionAdd1.value = Config.Host80 + '/custom/file/upload/3/' + fileListAdd1.value.id
+  } else {
+    actionAdd1.value = Config.Host80 + '/custom/file/upload/3'
+  }
+  if (fileListAdd2.value.id) {
+    actionAdd2.value = Config.Host80 + '/custom/file/upload/4/' + fileListAdd2.value.id
+  } else {
+    actionAdd2.value = Config.Host80 + '/custom/file/upload/4'
+  }
+  actionOtherAdd.value = Config.Host80 + '/custom/file/upload/10'
+}
+
+function updateFile(myData) {
+  if (myData.type == 1) {
+    fileListID1.value = myData
+  } else if (myData.type == 2) {
+    fileListID2.value = myData
+  } else if (myData.type == 3) {
+    fileListAdd1.value = myData
+  } else if (myData.type == 4) {
+    fileListAdd2.value = myData
+  } else if (myData.type == 10) {
+    if (!fileListOthers.value.length) {
+      fileListOthers.value.push(myData)
+    } else {
+      let flag = true
+      fileListOthers.value.forEach((item: any) => {
+        if (item.id == myData.id) {
+          item = myData
+          flag = false
+        }
+      })
+      if (flag) {
+        fileListOthers.value.push(myData)
       }
       }
     }
     }
-    return flag
   }
   }
-
-  // div大小改变重载
-  function divInit() {
-    // 由于elementResizeDetectorMaker在UniApp中可能不可用,这里简化处理
-    const width = window.innerWidth
-    if (width <= 1100 && width > 800) {
-      divActiveHelf.value = true
-      divActiveAll.value = false
-    } else if (width <= 800) {
-      divActiveAll.value = true
-      divActiveHelf.value = false
-    } else if (1100 < width) {
-      divActiveAll.value = false
-      divActiveHelf.value = false
+  actionType()
+}
+
+// 判断是否为PC端
+function IsPC() {
+  let userAgentInfo = navigator.userAgent
+  let Agents = ['Android', 'iPhone', 'SymbianOS', 'Windows Phone', 'iPad', 'iPod']
+  let flag = true
+  for (let v = 0; v < Agents.length; v++) {
+    if (userAgentInfo.indexOf(Agents[v]) > 0) {
+      flag = false
+      break
     }
     }
   }
   }
-
-  // 监听表单字段变化
-  watch(
-    () => formData.value.firstName,
-    () => {
-      if (localStorage.getItem('lang') == 'cn' && formData.value.firstName && formData.value.lastName) {
-        formData.value.nameEn = pinyin(`${formData.value.firstName} ${formData.value.lastName}`)
-        pinyin
-      }
-    },
-  )
-
-  watch(
-    () => formData.value.lastName,
-    () => {
-      if (localStorage.getItem('lang') == 'cn' && formData.value.firstName && formData.value.lastName) {
-        formData.value.nameEn = pinyin(`${formData.value.firstName} ${formData.value.lastName}`
-        )
-      }
-    },
-  )
-
-  // 生命周期
-  onMounted(async () => {
-    // dialogCheck.value.open()
-    divInit()
-    await getLoginInfo()
-    await getMobileInfo()
-    await getCustomFileList()
-    // WebSocket
-    // initWebSocket()
-    isPC.value = IsPC()
-    uni.$on('updateImproveFile',(data)=>{
-      updateFile(data)
-    })
+  return flag
+}
+
+// div大小改变重载
+function divInit() {
+  // 由于elementResizeDetectorMaker在UniApp中可能不可用,这里简化处理
+  const width = window.innerWidth
+  if (width <= 1100 && width > 800) {
+    divActiveHelf.value = true
+    divActiveAll.value = false
+  } else if (width <= 800) {
+    divActiveAll.value = true
+    divActiveHelf.value = false
+  } else if (1100 < width) {
+    divActiveAll.value = false
+    divActiveHelf.value = false
+  }
+}
+
+// 监听表单字段变化
+watch(
+  () => formData.value.firstName,
+  () => {
+    if (localStorage.getItem('lang') == 'cn' && formData.value.firstName && formData.value.lastName) {
+      formData.value.nameEn = pinyin(`${formData.value.firstName} ${formData.value.lastName}`)
+      pinyin
+    }
+  },
+)
+
+watch(
+  () => formData.value.lastName,
+  () => {
+    if (localStorage.getItem('lang') == 'cn' && formData.value.firstName && formData.value.lastName) {
+      formData.value.nameEn = pinyin(`${formData.value.firstName} ${formData.value.lastName}`
+      )
+    }
+  },
+)
+
+// 生命周期
+onMounted(async () => {
+  // dialogCheck.value.open()
+  divInit()
+  await getLoginInfo()
+  await getMobileInfo()
+  await getCustomFileList()
+  // WebSocket
+  // initWebSocket()
+  isPC.value = IsPC()
+  uni.$on('updateImproveFile', (data) => {
+    updateFile(data)
   })
   })
+})
 
 
-  // 组件销毁时
-  onUnmounted(() => {
-    uni.$off('updateImproveFile')
-  })
+// 组件销毁时
+onUnmounted(() => {
+  uni.$off('updateImproveFile')
+})
 </script>
 </script>
 
 
 <style scoped lang="scss">
 <style scoped lang="scss">
-  @import "@/uni.scss";
-
-  .form-tab {
-    height: px2rpx(100);
+@import "@/uni.scss";
+
+.form-tab {
+  height: px2rpx(100);
+}
+
+.form-section {
+  margin: px2rpx(8) 0;
+}
+
+.section-title {
+  color: #1a1a1a;
+  font-family: Roboto;
+  font-size: px2rpx(22);
+  font-weight: 500;
+  margin: px2rpx(10) 0;
+}
+
+:deep(.file-picker__box) {
+  width: px2rpx(200) !important;
+  height: px2rpx(150) !important;
+}
+
+:deep(.uni-file-picker) {
+  width: 100%;
+  height: 100%;
+}
+
+.avatar-uploader {
+  border: 1px dashed;
+  width: px2rpx(200);
+  height: px2rpx(150);
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  /*float: left;*/
+  //overflow: hidden;
+}
+
+.file-item {
+  border: 1px dashed;
+  border-radius: px2rpx(5);
+  width: px2rpx(200);
+  height: px2rpx(150);
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  .icon {
+    width: px2rpx(24);
+    height: px2rpx(24);
   }
   }
-
-  .form-section {
-    margin: px2rpx(8) 0;
+}
+
+.avatar {
+  width: 100%;
+  height: 100%;
+}
+
+.custom-upload-btn {
+  width: px2rpx(200);
+  height: px2rpx(150);
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+
+  .plus {
+    font-size: px2rpx(24);
+    color: #9ca3af;
   }
   }
-
-  .section-title {
-    color: #1a1a1a;
-    font-family: Roboto;
-    font-size: px2rpx(22);
-    font-weight: 500;
-    margin: px2rpx(10) 0;
-  }
-
-  :deep(.file-picker__box) {
-    width: px2rpx(200) !important;
-    height: px2rpx(150) !important;
+}
+
+.refresh {
+  width: 100%;
+  height: px2rpx(150);
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  image {
+    width: px2rpx(28);
+    height: px2rpx(28);
   }
   }
+}
 
 
-  :deep(.uni-file-picker) {
-    width: 100%;
-    height: 100%;
-  }
+.fileOther {
 
 
-  .avatar-uploader {
-    border: 1px dashed;
-    width: px2rpx(200);
-    height: px2rpx(150);
+  :deep(.upload-wrapper .uni-file-picker) {
     display: flex;
     display: flex;
-    flex-direction: column;
     align-items: center;
     align-items: center;
     justify-content: center;
     justify-content: center;
-    /*float: left;*/
-    //overflow: hidden;
   }
   }
 
 
-  .file-item {
-    border: 1px dashed;
-    border-radius: px2rpx(5);
-    width: px2rpx(200);
-    height: px2rpx(150);
-    display: flex;
-    justify-content: center;
-    align-items: center;
-
-    .icon {
-      width: px2rpx(24);
-      height: px2rpx(24);
-    }
+  :deep(.uni-file-picker__lists) {
+    display: none !important;
   }
   }
-
-  .avatar {
-    width: 100%;
-    height: 100%;
+}
+
+.fileList {
+  width: 100%;
+  box-sizing: border-box;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+}
+
+#files {
+  :deep(.uni-file-picker__lists) {
+    display: none !important;
   }
   }
 
 
-  .custom-upload-btn {
-    width: px2rpx(200);
-    height: px2rpx(150);
+  :deep(.upload-wrapper .uni-file-picker) {
     display: flex;
     display: flex;
-    flex-direction: column;
     align-items: center;
     align-items: center;
     justify-content: center;
     justify-content: center;
+  }
 
 
-    .plus {
-      font-size: px2rpx(24);
-      color: #9ca3af;
-    }
+  .list_upload {
+    width: px2rpx(150);
+    height: px2rpx(60);
   }
   }
 
 
-  .refresh {
-    width: 100%;
-    height: px2rpx(150);
+  .file-item {
+    //border: none;
+    box-sizing: border-box;
+    width: px2rpx(150);
+    height: px2rpx(60);
+    border-radius: 0;
+  }
+
+  margin-top: px2rpx(20);
+  max-width: px2rpx(600);
+  border: 1px dashed;
+  display: flex;
+
+  .options {
+    flex: 1;
+    padding: 8px;
+    box-sizing: border-box;
     display: flex;
     display: flex;
     justify-content: center;
     justify-content: center;
+    align-content: center;
     align-items: center;
     align-items: center;
 
 
-    image {
-      width: px2rpx(28);
-      height: px2rpx(28);
+    uni-button {
+      min-width: px2rpx(100);
+      max-height: px2rpx(30);
+      padding: 0;
+      line-height: px2rpx(30);
+
+      span,
+      a {
+        display: inline-block;
+        height: 100%;
+        width: 100%;
+        color: var(--color-black);
+      }
     }
     }
   }
   }
+}
 
 
-  .fileOther {
-
-    :deep(.upload-wrapper .uni-file-picker) {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-    }
+.con-box {
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
+  border-radius: 2px;
+  padding: 20px;
 
 
-    :deep(.uni-file-picker__lists) {
-      display: none !important;
-    }
-  }
-
-  .fileList {
+  .box {
     width: 100%;
     width: 100%;
+    // height: 190px;
     box-sizing: border-box;
     box-sizing: border-box;
     display: flex;
     display: flex;
-    flex-direction: column;
     justify-content: center;
     justify-content: center;
     align-items: center;
     align-items: center;
-  }
 
 
-  #files {
-    :deep(.uni-file-picker__lists) {
-      display: none !important;
+    .mobile {
+      width: px2rpx(50);
+      height: px2rpx(50);
+      margin-right: px2rpx(10);
     }
     }
 
 
-    :deep(.upload-wrapper .uni-file-picker) {
-      display: flex;
-      align-items: center;
-      justify-content: center;
+    .arrow {
+      width: px2rpx(30);
+      height: px2rpx(30);
+      margin-right: px2rpx(10);
     }
     }
 
 
-    .list_upload {
-      width: px2rpx(150);
-      height: px2rpx(60);
+    .img_mobile {
+      width: 120px;
+      height: 120px;
+      margin: 10px;
+      border: 5px solid;
+      background-color: var(--color-gray);
     }
     }
 
 
-    .file-item {
-      //border: none;
-      box-sizing: border-box;
-      width: px2rpx(150);
-      height: px2rpx(60);
-      border-radius: 0;
-    }
-
-    margin-top: px2rpx(20);
-    max-width: px2rpx(600);
-    border: 1px dashed;
-    display: flex;
-
-    .options {
-      flex: 1;
-      padding: 8px;
-      box-sizing: border-box;
-      display: flex;
-      justify-content: center;
-      align-content: center;
-      align-items: center;
-
-      uni-button {
-        min-width: px2rpx(100);
-        max-height: px2rpx(30);
-        padding: 0;
-        line-height: px2rpx(30);
-
-        span,
-        a {
-          display: inline-block;
-          height: 100%;
-          width: 100%;
-          color: var(--color-black);
-        }
-      }
+    .icon_refresh {
+      width: px2rpx(30);
+      height: px2rpx(30);
+      margin-right: px2rpx(10);
     }
     }
   }
   }
+}
+
+.experience {
+  display: flex;
+  margin: px2rpx(10) 0;
+  align-items: center;
+}
+
+.Trad-experience {
+  flex: 1;
+  color: #1a1a1a;
+  font-size: px2rpx(16);
+}
+
+.Trad-choose {
+  display: flex;
+}
+
+.descending {
+  margin: px2rpx(20) 0;
+  padding: px2rpx(20);
+  background-color: #f5f5f5;
+  border-radius: px2rpx(8);
+}
+
+.title {
+  font-weight: 500;
+  margin-bottom: px2rpx(10);
+}
+
+.des {
+  margin: px2rpx(5) 0;
+  font-size: px2rpx(14);
+  color: #666;
+}
+
+.dian1 {
+  font-size: px2rpx(20);
+  margin-right: px2rpx(5);
+}
+
+.dian {
+  margin-right: px2rpx(10);
+}
+
+.btns {
+  margin-top: px2rpx(30);
+}
+
+.cwg-button {
+  display: flex;
+  flex-direction: column;
+  gap: px2rpx(15);
+
+  &.two-btn {
+    flex-direction: row;
+    justify-content: space-between;
+
+    u-button {
+      flex: 1;
+      margin: 0 px2rpx(10);
 
 
-  .con-box {
-    background-color: var(--color-white);
-    border-radius: 2px;
-    padding: 20px;
-
-    .box {
-      width: 100%;
-      // height: 190px;
-      box-sizing: border-box;
-      display: flex;
-      justify-content: center;
-      align-items: center;
-
-      .mobile {
-        width: px2rpx(50);
-        height: px2rpx(50);
-        margin-right: px2rpx(10);
-      }
-
-      .arrow {
-        width: px2rpx(30);
-        height: px2rpx(30);
-        margin-right: px2rpx(10);
-      }
-
-      .img_mobile {
-        width: 120px;
-        height: 120px;
-        margin: 10px;
-        border: 5px solid;
-        background-color: var(--color-gray);
+      &:first-child {
+        margin-left: 0;
       }
       }
 
 
-      .icon_refresh {
-        width: px2rpx(30);
-        height: px2rpx(30);
-        margin-right: px2rpx(10);
+      &:last-child {
+        margin-right: 0;
       }
       }
     }
     }
   }
   }
+}
 
 
-  .experience {
-    display: flex;
-    margin: px2rpx(10) 0;
-    align-items: center;
-  }
+.btn-primary {
+  height: px2rpx(80);
+  font-size: px2rpx(18);
+}
 
 
-  .Trad-experience {
-    flex: 1;
-    color: #1a1a1a;
-    font-size: px2rpx(16);
-  }
+.prev-btn {
+  border-color: #4a6cf7;
+  color: #4a6cf7;
+}
 
 
-  .Trad-choose {
-    display: flex;
-  }
+.address-tip {
+  width: px2rpx(120);
+  font-size: px2rpx(14);
+}
 
 
-  .descending {
-    margin: px2rpx(20) 0;
-    padding: px2rpx(20);
-    background-color: #f5f5f5;
-    border-radius: px2rpx(8);
-  }
+.crm-title-box {
+  display: flex;
+  align-items: center;
+  margin: px2rpx(20) 0;
 
 
-  .title {
+  .tit {
+    font-size: px2rpx(18);
     font-weight: 500;
     font-weight: 500;
-    margin-bottom: px2rpx(10);
-  }
-
-  .des {
-    margin: px2rpx(5) 0;
-    font-size: px2rpx(14);
-    color: #666;
-  }
-
-  .dian1 {
-    font-size: px2rpx(20);
-    margin-right: px2rpx(5);
-  }
-
-  .dian {
-    margin-right: px2rpx(10);
+    color: var(--color-white);
   }
   }
 
 
-  .btns {
-    margin-top: px2rpx(30);
+  .icon-tip {
+    margin-left: px2rpx(10);
+    font-size: px2rpx(16);
+    color: var(--color-white);
+    cursor: pointer;
   }
   }
+}
 
 
-  .cwg-button {
-    display: flex;
-    flex-direction: column;
-    gap: px2rpx(15);
+.popup-content {
+  padding: px2rpx(20);
+  text-align: center;
+}
 
 
-    &.two-btn {
-      flex-direction: row;
-      justify-content: space-between;
+.dia-content {
+  padding: px2rpx(30);
+  text-align: center;
 
 
-      u-button {
-        flex: 1;
-        margin: 0 px2rpx(10);
+  .icon {
+    margin-bottom: px2rpx(20);
 
 
-        &:first-child {
-          margin-left: 0;
-        }
-
-        &:last-child {
-          margin-right: 0;
-        }
-      }
+    i {
+      font-size: px2rpx(60);
+      color: #4a6cf7;
     }
     }
   }
   }
 
 
-  .btn-primary {
-    height: px2rpx(80);
+  .des1 {
     font-size: px2rpx(18);
     font-size: px2rpx(18);
+    font-weight: 500;
+    margin-bottom: px2rpx(10);
   }
   }
 
 
-  .prev-btn {
-    border-color: #4a6cf7;
-    color: #4a6cf7;
-  }
-
-  .address-tip {
-    width: px2rpx(120);
+  .des2 {
     font-size: px2rpx(14);
     font-size: px2rpx(14);
+    color: #666;
+    margin-bottom: px2rpx(30);
   }
   }
 
 
-  .crm-title-box {
+  .dialog-footer {
     display: flex;
     display: flex;
-    align-items: center;
-    margin: px2rpx(20) 0;
-
-    .tit {
-      font-size: px2rpx(18);
-      font-weight: 500;
-      color: var(--color-white);
-    }
-
-    .icon-tip {
-      margin-left: px2rpx(10);
-      font-size: px2rpx(16);
-      color: var(--color-white);
-      cursor: pointer;
-    }
-  }
-
-  .popup-content {
-    padding: px2rpx(20);
-    text-align: center;
-  }
-
-  .dia-content {
-    padding: px2rpx(30);
-    text-align: center;
+    justify-content: space-between;
+    margin-top: px2rpx(30);
 
 
-    .icon {
-      margin-bottom: px2rpx(20);
+    uni-button {
+      flex: 1;
+      margin: 0 px2rpx(10);
 
 
-      i {
-        font-size: px2rpx(60);
-        color: #4a6cf7;
+      &:first-child {
+        margin-left: 0;
       }
       }
-    }
-
-    .des1 {
-      font-size: px2rpx(18);
-      font-weight: 500;
-      margin-bottom: px2rpx(10);
-    }
 
 
-    .des2 {
-      font-size: px2rpx(14);
-      color: #666;
-      margin-bottom: px2rpx(30);
-    }
-
-    .dialog-footer {
-      display: flex;
-      justify-content: space-between;
-      margin-top: px2rpx(30);
-
-      uni-button {
-        flex: 1;
-        margin: 0 px2rpx(10);
-
-        &:first-child {
-          margin-left: 0;
-        }
-
-        &:last-child {
-          margin-right: 0;
-        }
+      &:last-child {
+        margin-right: 0;
       }
       }
     }
     }
   }
   }
+}
+
+.cwg-upload {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  padding: px2rpx(40);
+  border: 1px dashed #ddd;
+  border-radius: px2rpx(8);
+  cursor: pointer;
+
+  cwg-icon {
+    font-size: px2rpx(40);
+    margin-bottom: px2rpx(10);
+    color: #999;
+  }
 
 
-  .cwg-upload {
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    justify-content: center;
-    padding: px2rpx(40);
-    border: 1px dashed #ddd;
-    border-radius: px2rpx(8);
-    cursor: pointer;
-
-    cwg-icon {
-      font-size: px2rpx(40);
-      margin-bottom: px2rpx(10);
-      color: #999;
-    }
-
-    .name {
-      font-size: px2rpx(16);
-      margin-bottom: px2rpx(5);
-    }
+  .name {
+    font-size: px2rpx(16);
+    margin-bottom: px2rpx(5);
+  }
 
 
-    .back {
-      font-size: px2rpx(12);
-      color: #999;
-    }
+  .back {
+    font-size: px2rpx(12);
+    color: #999;
   }
   }
+}
 </style>
 </style>

+ 2 - 2
pages/mine/kyc.vue

@@ -125,7 +125,7 @@ async function getWebsdkLink() {
 @import "@/uni.scss";
 @import "@/uni.scss";
 
 
 .aaa {
 .aaa {
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     position: absolute;
     position: absolute;
     top: env(safe-area-inset-top);
     top: env(safe-area-inset-top);
     left: 0;
     left: 0;
@@ -141,6 +141,6 @@ async function getWebsdkLink() {
     bottom: 0;
     bottom: 0;
     padding-top: env(safe-area-inset-top);
     padding-top: env(safe-area-inset-top);
     padding-bottom: env(safe-area-inset-bottom);
     padding-bottom: env(safe-area-inset-bottom);
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 }
 }
 </style>
 </style>

+ 3 - 3
static/scss/global/global.scss

@@ -1084,7 +1084,7 @@ uni-content.collapsed {
 }
 }
 
 
 .filter-picker {
 .filter-picker {
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     border: 1px solid #e5e7eb;
     border: 1px solid #e5e7eb;
     border-radius: px2rpx(8);
     border-radius: px2rpx(8);
     padding: px2rpx(6);
     padding: px2rpx(6);
@@ -1132,7 +1132,7 @@ uni-content.collapsed {
 }
 }
 
 
 .filter-select {
 .filter-select {
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     border: 1px solid #e5e7eb;
     border: 1px solid #e5e7eb;
     border-radius: px2rpx(8);
     border-radius: px2rpx(8);
     padding: px2rpx(6);
     padding: px2rpx(6);
@@ -1511,7 +1511,7 @@ uni-content.collapsed {
     font-weight: 500;
     font-weight: 500;
     line-height: 1.5;
     line-height: 1.5;
     color: var(--color-rose-500);
     color: var(--color-rose-500);
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     border: 1px solid var(--color-rose-500);
     border: 1px solid var(--color-rose-500);
     cursor: pointer;
     cursor: pointer;
     transition: all var(--default-transition-duration) var(--default-transition-timing-function);
     transition: all var(--default-transition-duration) var(--default-transition-timing-function);

+ 1 - 1
stores/pinia.types.ts

@@ -10,6 +10,6 @@ export interface GlobalState {
     isPageSwitching: boolean
     isPageSwitching: boolean
     theme: string
     theme: string
     statusBarHeight: number
     statusBarHeight: number
-    mode: 'customer' | 'ib'
+    mode: 'customer' | 'ib' | 'follow'
     applyStatus: boolean
     applyStatus: boolean
 }
 }

+ 1 - 1
stores/use-global-store.ts

@@ -11,7 +11,7 @@ const useStore = defineStore("globalStore", () => {
     isPageSwitching: false,
     isPageSwitching: false,
     statusBarHeight: 0,
     statusBarHeight: 0,
     mode: 'customer',
     mode: 'customer',
-    theme: "light",
+    theme: "dark",
     // 认证状态
     // 认证状态
     applyStatus: false
     applyStatus: false
   });
   });

+ 3 - 2
uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue

@@ -17,7 +17,8 @@
 					<view class="uni-calendar__header-btn uni-calendar--left"></view>
 					<view class="uni-calendar__header-btn uni-calendar--left"></view>
 				</view>
 				</view>
 				<picker mode="date" :value="date" fields="month" @change="bindDateChange">
 				<picker mode="date" :value="date" fields="month" @change="bindDateChange">
-					<text class="uni-calendar__header-text">{{ (nowDate.year || '') + ' / ' + (nowDate.month || '') }}</text>
+					<text class="uni-calendar__header-text">{{ (nowDate.year || '') + ' / ' + (nowDate.month || '')
+						}}</text>
 				</picker>
 				</picker>
 				<view class="uni-calendar__header-btn-box" @click.stop="next">
 				<view class="uni-calendar__header-btn-box" @click.stop="next">
 					<view class="uni-calendar__header-btn uni-calendar--right"></view>
 					<view class="uni-calendar__header-btn uni-calendar--right"></view>
@@ -426,7 +427,7 @@ $uni-text-color-grey: #999;
 }
 }
 
 
 .uni-calendar__content {
 .uni-calendar__content {
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 }
 }
 
 
 .uni-calendar__header {
 .uni-calendar__header {

+ 5 - 3
uni_modules/uni-card/components/uni-card/uni-card.vue

@@ -1,5 +1,6 @@
 <template>
 <template>
-	<view class="uni-card" :class="{ 'uni-card--full': isFull, 'uni-card--shadow': isShadow, 'uni-card--border': border }"
+	<view class="uni-card"
+		:class="{ 'uni-card--full': isFull, 'uni-card--shadow': isShadow, 'uni-card--border': border }"
 		:style="{ 'margin': isFull ? 0 : margin, 'padding': spacing, 'box-shadow': isShadow ? shadow : '' }">
 		:style="{ 'margin': isFull ? 0 : margin, 'padding': spacing, 'box-shadow': isShadow ? shadow : '' }">
 		<!-- 封面 -->
 		<!-- 封面 -->
 		<slot name="cover">
 		<slot name="cover">
@@ -16,7 +17,8 @@
 					</view>
 					</view>
 					<view class="uni-card__header-content">
 					<view class="uni-card__header-content">
 						<text class="uni-card__header-content-title uni-ellipsis">{{ title }}</text>
 						<text class="uni-card__header-content-title uni-ellipsis">{{ title }}</text>
-						<text v-if="title && subTitle" class="uni-card__header-content-subtitle uni-ellipsis">{{ subTitle
+						<text v-if="title && subTitle" class="uni-card__header-content-subtitle uni-ellipsis">{{
+							subTitle
 							}}</text>
 							}}</text>
 					</view>
 					</view>
 				</view>
 				</view>
@@ -139,7 +141,7 @@ $uni-card-content-color: $uni-base-color;
 	border-radius: 4px;
 	border-radius: 4px;
 	overflow: hidden;
 	overflow: hidden;
 	font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, SimSun, sans-serif;
 	font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, SimSun, sans-serif;
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	flex: 1;
 	flex: 1;
 
 
 	.uni-card__cover {
 	.uni-card__cover {

+ 2 - 2
uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue

@@ -285,7 +285,7 @@ export default {
 			align-items: center;
 			align-items: center;
 			height: 48px;
 			height: 48px;
 			line-height: 48px;
 			line-height: 48px;
-			background-color: var(--color-white);
+			background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 			color: #303133;
 			color: #303133;
 			font-size: 13px;
 			font-size: 13px;
 			font-weight: 500;
 			font-weight: 500;
@@ -355,7 +355,7 @@ export default {
 		will-change: height;
 		will-change: height;
 		box-sizing: border-box;
 		box-sizing: border-box;
 		/* #endif */
 		/* #endif */
-		background-color: var(--color-white);
+		background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 		overflow: hidden;
 		overflow: hidden;
 		position: relative;
 		position: relative;
 		height: 0;
 		height: 0;

+ 1 - 1
uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue

@@ -142,6 +142,6 @@ export default {
 	flex: 1;
 	flex: 1;
 	/* #endif */
 	/* #endif */
 	flex-direction: column;
 	flex-direction: column;
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 }
 }
 </style>
 </style>

+ 1 - 1
uni_modules/uni-combox/components/uni-combox/uni-combox.vue

@@ -212,7 +212,7 @@ export default {
 	top: calc(100% + 12px);
 	top: calc(100% + 12px);
 	left: 0;
 	left: 0;
 	width: 100%;
 	width: 100%;
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	border: 1px solid #EBEEF5;
 	border: 1px solid #EBEEF5;
 	border-radius: 6px;
 	border-radius: 6px;
 	box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
 	box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);

+ 4 - 4
uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue

@@ -13,8 +13,8 @@
 				<label class="checklist-box"
 				<label class="checklist-box"
 					:class="['is--' + mode, item.selected ? 'is-checked' : '', (disabled || !!item.disabled) ? 'is-disable' : '', index !== 0 && mode === 'list' ? 'is-list-border' : '']"
 					:class="['is--' + mode, item.selected ? 'is-checked' : '', (disabled || !!item.disabled) ? 'is-disable' : '', index !== 0 && mode === 'list' ? 'is-list-border' : '']"
 					:style="item.styleBackgroud" v-for="(item, index) in dataList" :key="index">
 					:style="item.styleBackgroud" v-for="(item, index) in dataList" :key="index">
-					<checkbox class="hidden" hidden :disabled="disabled || !!item.disabled" :value="item[map.value] + ''"
-						:checked="item.selected" />
+					<checkbox class="hidden" hidden :disabled="disabled || !!item.disabled"
+						:value="item[map.value] + ''" :checked="item.selected" />
 					<view v-if="(mode !== 'tag' && mode !== 'list') || (mode === 'list' && icon === 'left')"
 					<view v-if="(mode !== 'tag' && mode !== 'list') || (mode === 'list' && icon === 'left')"
 						class="checkbox__inner" :style="item.styleIcon">
 						class="checkbox__inner" :style="item.styleIcon">
 						<view class="checkbox__inner-icon"></view>
 						<view class="checkbox__inner-icon"></view>
@@ -555,7 +555,7 @@ $disable: 0.4;
 				height: 16px;
 				height: 16px;
 				border: 1px solid $border-color;
 				border: 1px solid $border-color;
 				border-radius: 4px;
 				border-radius: 4px;
-				background-color: var(--color-white);
+				background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 				z-index: 1;
 				z-index: 1;
 
 
 				.checkbox__inner-icon {
 				.checkbox__inner-icon {
@@ -595,7 +595,7 @@ $disable: 0.4;
 				height: 16px;
 				height: 16px;
 				border: 1px solid $border-color;
 				border: 1px solid $border-color;
 				border-radius: 16px;
 				border-radius: 16px;
-				background-color: var(--color-white);
+				background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 				z-index: 1;
 				z-index: 1;
 
 
 				.radio__inner-icon {
 				.radio__inner-icon {

+ 2 - 2
uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.uvue

@@ -298,7 +298,7 @@
     top: 20%;
     top: 20%;
     right: 0;
     right: 0;
     bottom: 0;
     bottom: 0;
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     border-top-left-radius: 10px;
     border-top-left-radius: 10px;
     border-top-right-radius: 10px;
     border-top-right-radius: 10px;
     flex-direction: column;
     flex-direction: column;
@@ -365,7 +365,7 @@
       height: auto;
       height: auto;
       min-height: 400px;
       min-height: 400px;
       max-height: 50vh;
       max-height: 50vh;
-      background-color: var(--color-white);
+      background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
       border: 1px solid #EBEEF5;
       border: 1px solid #EBEEF5;
       box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
       box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
       border-radius: 4px;
       border-radius: 4px;

+ 2 - 2
uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue

@@ -421,7 +421,7 @@ export default {
   /* #endif */
   /* #endif */
   right: 0;
   right: 0;
   bottom: 0;
   bottom: 0;
-  background-color: var(--color-white);
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
   border-top-left-radius: 10px;
   border-top-left-radius: 10px;
   border-top-right-radius: 10px;
   border-top-right-radius: 10px;
   /* #ifndef APP-NVUE */
   /* #ifndef APP-NVUE */
@@ -508,7 +508,7 @@ export default {
     height: auto;
     height: auto;
     min-height: 400px;
     min-height: 400px;
     max-height: 50vh;
     max-height: 50vh;
-    background-color: var(--color-white);
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
     border: 1px solid #EBEEF5;
     border: 1px solid #EBEEF5;
     box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
     box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
     border-radius: 4px;
     border-radius: 4px;

+ 1 - 1
uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.css

@@ -16,7 +16,7 @@
 }
 }
 
 
 .error {
 .error {
-  background-color: var(--color-white);
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
   padding: 15px;
   padding: 15px;
 }
 }
 
 

+ 1 - 1
uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue

@@ -200,7 +200,7 @@ $uni-primary: #007aff !default;
 }
 }
 
 
 .error-message {
 .error-message {
-  background-color: var(--color-white);
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
   position: absolute;
   position: absolute;
   left: 0;
   left: 0;
   top: 0;
   top: 0;

+ 2 - 2
uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue

@@ -585,7 +585,7 @@ $uni-info: #909399 !default;
 }
 }
 
 
 .uni-stat-box {
 .uni-stat-box {
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	width: 100%;
 	width: 100%;
 	flex: 1;
 	flex: 1;
 }
 }
@@ -698,7 +698,7 @@ $uni-info: #909399 !default;
 	position: absolute;
 	position: absolute;
 	left: 0;
 	left: 0;
 	width: 100%;
 	width: 100%;
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	border: 1px solid #EBEEF5;
 	border: 1px solid #EBEEF5;
 	border-radius: 6px;
 	border-radius: 6px;
 	box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
 	box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);

+ 4 - 3
uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue

@@ -14,7 +14,7 @@
 
 
 				<picker mode="date" :value="date" fields="month" @change="bindDateChange">
 				<picker mode="date" :value="date" fields="month" @change="bindDateChange">
 					<text class="uni-calendar__header-text">{{ (nowDate.year || '') + yearText + (nowDate.month || '') +
 					<text class="uni-calendar__header-text">{{ (nowDate.year || '') + yearText + (nowDate.month || '') +
-						monthText}}</text>
+						monthText }}</text>
 				</picker>
 				</picker>
 
 
 				<view class="uni-calendar__header-btn-box" @click.stop="changeMonth('next')">
 				<view class="uni-calendar__header-btn-box" @click.stop="changeMonth('next')">
@@ -85,7 +85,8 @@
 					<uni-icons type="arrowthinright" color="#999"></uni-icons>
 					<uni-icons type="arrowthinright" color="#999"></uni-icons>
 				</view>
 				</view>
 				<view class="uni-date-changed--time-end">
 				<view class="uni-date-changed--time-end">
-					<view class="uni-date-changed--time-date">{{ tempRange.after ? tempRange.after : endDateText }}</view>
+					<view class="uni-date-changed--time-date">{{ tempRange.after ? tempRange.after : endDateText }}
+					</view>
 					<time-picker type="time" :end="timepickerEndTime" v-model="timeRange.endTime" :border="false"
 					<time-picker type="time" :end="timepickerEndTime" v-model="timeRange.endTime" :border="false"
 						:hide-second="hideSecond" :disabled="!tempRange.after" class="time-picker-style">
 						:hide-second="hideSecond" :disabled="!tempRange.after" class="time-picker-style">
 					</time-picker>
 					</time-picker>
@@ -684,7 +685,7 @@ $uni-primary: #007aff !default;
 }
 }
 
 
 .uni-calendar__content {
 .uni-calendar__content {
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 }
 }
 
 
 .uni-calendar__content-mobile {
 .uni-calendar__content-mobile {

+ 1 - 1
uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue

@@ -851,7 +851,7 @@ $uni-primary: #007aff !default;
 	/* #ifdef APP-NVUE */
 	/* #ifdef APP-NVUE */
 	width: 330px;
 	width: 330px;
 	/* #endif */
 	/* #endif */
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	position: fixed;
 	position: fixed;
 	top: 50%;
 	top: 50%;
 	left: 50%;
 	left: 50%;

+ 3 - 3
uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue

@@ -871,7 +871,7 @@ $uni-primary: #007aff !default;
 	align-items: center;
 	align-items: center;
 	justify-content: center;
 	justify-content: center;
 	border-radius: 4px;
 	border-radius: 4px;
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	color: #666;
 	color: #666;
 	font-size: 14px;
 	font-size: 14px;
 	flex: 1;
 	flex: 1;
@@ -955,7 +955,7 @@ $uni-primary: #007aff !default;
 }
 }
 
 
 .uni-date-single--x {
 .uni-date-single--x {
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	position: absolute;
 	position: absolute;
 	top: 0;
 	top: 0;
 	z-index: 999;
 	z-index: 999;
@@ -965,7 +965,7 @@ $uni-primary: #007aff !default;
 }
 }
 
 
 .uni-date-range--x {
 .uni-date-range--x {
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	position: absolute;
 	position: absolute;
 	top: 0;
 	top: 0;
 	z-index: 999;
 	z-index: 999;

+ 1 - 1
uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue

@@ -281,7 +281,7 @@ export default {
 .icon-del {
 .icon-del {
 	width: 15px;
 	width: 15px;
 	height: 2px;
 	height: 2px;
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	border-radius: 2px;
 	border-radius: 2px;
 }
 }
 </style>
 </style>

+ 1 - 1
uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue

@@ -128,7 +128,7 @@ export default {
 .uni-tab__cart-box {
 .uni-tab__cart-box {
 	flex: 1;
 	flex: 1;
 	height: 50px;
 	height: 50px;
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	z-index: 900;
 	z-index: 900;
 }
 }
 
 

+ 3 - 2
uni_modules/uni-group/components/uni-group/uni-group.vue

@@ -1,5 +1,6 @@
 <template>
 <template>
-	<view class="uni-group" :class="['uni-group--' + mode, margin ? 'group-margin' : '']" :style="{ marginTop: `${top}px` }">
+	<view class="uni-group" :class="['uni-group--' + mode, margin ? 'group-margin' : '']"
+		:style="{ marginTop: `${top}px` }">
 		<slot name="title">
 		<slot name="title">
 			<view v-if="title" class="uni-group__title" :style="{ 'padding-left': border ? '30px' : '15px' }">
 			<view v-if="title" class="uni-group__title" :style="{ 'padding-left': border ? '30px' : '15px' }">
 				<text class="uni-group__title-text">{{ title }}</text>
 				<text class="uni-group__title-text">{{ title }}</text>
@@ -108,7 +109,7 @@ export default {
 .uni-group__content {
 .uni-group__content {
 	padding: 15px;
 	padding: 15px;
 	// padding-bottom: 5px;
 	// padding-bottom: 5px;
-	// background-color: var(--color-white);
+	// background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 }
 }
 
 
 .group-conent-padding {
 .group-conent-padding {

+ 4 - 4
uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue

@@ -38,8 +38,8 @@
 						<text class="uni-list-chat__content-title uni-ellipsis">{{ title }}</text>
 						<text class="uni-list-chat__content-title uni-ellipsis">{{ title }}</text>
 						<view style="flex-direction: row;">
 						<view style="flex-direction: row;">
 							<text class="draft" v-if="isDraft">[草稿]</text>
 							<text class="draft" v-if="isDraft">[草稿]</text>
-							<text
-								class="uni-list-chat__content-note uni-ellipsis">{{ isDraft ? note.slice(14) : note }}</text>
+							<text class="uni-list-chat__content-note uni-ellipsis">{{ isDraft ? note.slice(14) : note
+								}}</text>
 						</view>
 						</view>
 					</view>
 					</view>
 					<view class="uni-list-chat__content-extra">
 					<view class="uni-list-chat__content-extra">
@@ -48,7 +48,7 @@
 							<view v-if="badgeText && badgePositon === 'right'" class="uni-list-chat__badge"
 							<view v-if="badgeText && badgePositon === 'right'" class="uni-list-chat__badge"
 								:class="[isSingle, badgePositon === 'right' ? 'uni-list-chat--right' : '']">
 								:class="[isSingle, badgePositon === 'right' ? 'uni-list-chat--right' : '']">
 								<text class="uni-list-chat__badge-text">{{ badgeText === 'dot' ? '' : badgeText
 								<text class="uni-list-chat__badge-text">{{ badgeText === 'dot' ? '' : badgeText
-									}}</text>
+								}}</text>
 							</view>
 							</view>
 						</slot>
 						</slot>
 					</view>
 					</view>
@@ -278,7 +278,7 @@ $uni-font-size-lg: 16px;
 $uni-spacing-row-sm: 5px;
 $uni-spacing-row-sm: 5px;
 $uni-spacing-row-base: 10px;
 $uni-spacing-row-base: 10px;
 $uni-spacing-row-lg: 15px;
 $uni-spacing-row-lg: 15px;
-$background-color: var(--color-white);
+$background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 $divide-line-color: #e5e5e5;
 $divide-line-color: #e5e5e5;
 $avatar-width: 45px;
 $avatar-width: 45px;
 $avatar-border-radius: 5px;
 $avatar-border-radius: 5px;

+ 3 - 2
uni_modules/uni-list/components/uni-list-item/uni-list-item.vue

@@ -2,7 +2,8 @@
 	<!-- #ifdef APP-NVUE -->
 	<!-- #ifdef APP-NVUE -->
 	<cell :keep-scroll-position="keepScrollPosition">
 	<cell :keep-scroll-position="keepScrollPosition">
 		<!-- #endif -->
 		<!-- #endif -->
-		<view :class="{ 'uni-list-item--disabled': disabled }" :style="{ 'background-color': customStyle.backgroundColor }"
+		<view :class="{ 'uni-list-item--disabled': disabled }"
+			:style="{ 'background-color': customStyle.backgroundColor }"
 			:hover-class="(!clickable && !link) || disabled || showSwitch ? '' : 'uni-list-item--hover'"
 			:hover-class="(!clickable && !link) || disabled || showSwitch ? '' : 'uni-list-item--hover'"
 			class="uni-list-item" @click="onClick">
 			class="uni-list-item" @click="onClick">
 			<view v-if="!isFirstChild" class="border--left" :class="{ 'uni-list--border': border }"></view>
 			<view v-if="!isFirstChild" class="border--left" :class="{ 'uni-list--border': border }"></view>
@@ -350,7 +351,7 @@ $list-item-pd: $uni-spacing-col-lg $uni-spacing-row-lg;
 	position: relative;
 	position: relative;
 	justify-content: space-between;
 	justify-content: space-between;
 	align-items: center;
 	align-items: center;
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	flex-direction: row;
 	flex-direction: row;
 	/* #ifdef H5 */
 	/* #ifdef H5 */
 	cursor: pointer;
 	cursor: pointer;

+ 1 - 1
uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue

@@ -258,7 +258,7 @@ $nav-height: 44px;
 
 
 .uni-navbar__content {
 .uni-navbar__content {
 	position: relative;
 	position: relative;
-	// background-color: var(--color-white);
+	// background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	// box-sizing: border-box;
 	// box-sizing: border-box;
 	background-color: transparent;
 	background-color: transparent;
 }
 }

+ 1 - 1
uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue

@@ -233,7 +233,7 @@ export default {
 <style lang="scss">
 <style lang="scss">
 .uni-popup-dialog {
 .uni-popup-dialog {
 	width: 300px;
 	width: 300px;
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 }
 }
 
 
 .uni-dialog-title {
 .uni-dialog-title {

+ 1 - 1
uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue

@@ -107,7 +107,7 @@ export default {
 </script>
 </script>
 <style lang="scss">
 <style lang="scss">
 .uni-popup-share {
 .uni-popup-share {
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	border-top-left-radius: 11px;
 	border-top-left-radius: 11px;
 	border-top-right-radius: 11px;
 	border-top-right-radius: 11px;
 }
 }

+ 1 - 1
uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue

@@ -240,7 +240,7 @@ $uni-searchbar-height: 36px;
 	flex-direction: row;
 	flex-direction: row;
 	position: relative;
 	position: relative;
 	padding: 10px;
 	padding: 10px;
-	// background-color: var(--color-white);
+	// background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 }
 }
 
 
 .uni-searchbar__box {
 .uni-searchbar__box {

+ 1 - 1
uni_modules/uni-section/components/uni-section/uni-section.vue

@@ -105,7 +105,7 @@ export default {
 $uni-primary: #2979ff !default;
 $uni-primary: #2979ff !default;
 
 
 .uni-section {
 .uni-section {
-  background-color: var(--color-white);
+  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 
 
   .uni-section-header {
   .uni-section-header {
     position: relative;
     position: relative;

+ 3 - 2
uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue

@@ -86,7 +86,8 @@
 							backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
 							backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
 							fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
 							fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
 						}" class="uni-swipe_button button-hock" @touchstart.stop="appTouchStart"
 						}" class="uni-swipe_button button-hock" @touchstart.stop="appTouchStart"
-							@touchend.stop="appTouchEnd($event, index, item, 'left')"><text class="uni-swipe_button-text"
+							@touchend.stop="appTouchEnd($event, index, item, 'left')"><text
+								class="uni-swipe_button-text"
 								:style="{ color: item.style && item.style.color ? item.style.color : '#FFFFFF', }">{{
 								:style="{ color: item.style && item.style.color ? item.style.color : '#FFFFFF', }">{{
 									item.text }}</text>
 									item.text }}</text>
 						</view>
 						</view>
@@ -347,7 +348,7 @@
 .movable-view-box {
 .movable-view-box {
 	flex-shrink: 0;
 	flex-shrink: 0;
 	height: 100%;
 	height: 100%;
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 }
 }
 
 
 /* #endif */
 /* #endif */

+ 1 - 1
uni_modules/uni-table/components/uni-table/uni-table.vue

@@ -324,7 +324,7 @@ $border-color: #ebeef5;
 	width: 100%;
 	width: 100%;
 	border-radius: 5px;
 	border-radius: 5px;
 	// box-shadow: 0px 0px 3px 1px rgba(0, 0, 0, 0.1);
 	// box-shadow: 0px 0px 3px 1px rgba(0, 0, 0, 0.1);
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	/* #ifndef APP-NVUE */
 	/* #ifndef APP-NVUE */
 	box-sizing: border-box;
 	box-sizing: border-box;
 	display: table;
 	display: table;

+ 1 - 1
uni_modules/uni-table/components/uni-th/filter-dropdown.vue

@@ -418,7 +418,7 @@ $uni-primary: #1890ff !default;
 .dropdown-popup {
 .dropdown-popup {
 	position: absolute;
 	position: absolute;
 	top: 100%;
 	top: 100%;
-	background-color: var(--color-white);
+	background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014, 0 9px 28px 8px #0000000d;
 	box-shadow: 0 3px 6px -4px #0000001f, 0 6px 16px #00000014, 0 9px 28px 8px #0000000d;
 	min-width: 150px;
 	min-width: 150px;
 	z-index: 1000;
 	z-index: 1000;

+ 4 - 3
uni_modules/uni-table/components/uni-tr/table-checkbox.vue

@@ -1,6 +1,7 @@
 <template>
 <template>
 	<view class="uni-table-checkbox" @click="selected">
 	<view class="uni-table-checkbox" @click="selected">
-		<view v-if="!indeterminate" class="checkbox__inner" :class="{ 'is-checked': isChecked, 'is-disable': isDisabled }">
+		<view v-if="!indeterminate" class="checkbox__inner"
+			:class="{ 'is-checked': isChecked, 'is-disable': isDisabled }">
 			<view class="checkbox__inner-icon"></view>
 			<view class="checkbox__inner-icon"></view>
 		</view>
 		</view>
 		<view v-else class="checkbox__inner checkbox--indeterminate">
 		<view v-else class="checkbox__inner checkbox--indeterminate">
@@ -101,7 +102,7 @@ $disable: 0.4;
 		height: 16px;
 		height: 16px;
 		border: 1px solid $border-color;
 		border: 1px solid $border-color;
 		border-radius: 2px;
 		border-radius: 2px;
-		background-color: var(--color-white);
+		background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 		z-index: 1;
 		z-index: 1;
 
 
 		.checkbox__inner-icon {
 		.checkbox__inner-icon {
@@ -143,7 +144,7 @@ $disable: 0.4;
 				border: none;
 				border: none;
 				border-radius: 2px;
 				border-radius: 2px;
 				transform: scale(0.5);
 				transform: scale(0.5);
-				background-color: var(--color-white);
+				background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 			}
 			}
 		}
 		}
 
 

+ 1 - 1
uni_modules/uni-tag/components/uni-tag/uni-tag.vue

@@ -204,7 +204,7 @@ $tag-mini-pd: 1px 3px;
 	}
 	}
 
 
 	&--inverted {
 	&--inverted {
-		background-color: var(--color-white);
+		background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
 	}
 	}
 
 
 	// other attr
 	// other attr