ljc 1 Minggu lalu
induk
melakukan
90e1b3ea1c
1 mengubah file dengan 1185 tambahan dan 1166 penghapusan
  1. 1185 1166
      pages/mine/improveImmediately.vue

+ 1185 - 1166
pages/mine/improveImmediately.vue

@@ -2,7 +2,7 @@
   <cwg-page-wrapper>
     <view class="page page-shadow">
       <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">
           <uni-row class="demo-uni-row uni-row1" :gutter="20">
@@ -26,10 +26,14 @@
               <uni-row class="demo-uni-row uni-row1" :gutter="20">
                 <uni-col :xs="24" :sm="24" :md="10" :lg="10" :xl="10" class="mb-3">
                   <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')"
+                                           :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">
                       <image v-if="!isPdf(fileListID1.path)" class="avatar" :src="updateUrl + (fileListID1.path)">
@@ -55,10 +59,14 @@
                 </uni-col>
                 <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')"
+                                           :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">
                       <image v-if="!isPdf(fileListID2.path)" class="avatar" :src="updateUrl + (fileListID2.path)">
@@ -157,14 +165,14 @@
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item :label="t('ImproveImmediately.Label.CustomerType')">
                 <cwg-combox :clearable="false" v-model:value="formData.customType" :options="customerTypeOptions"
-                  :placeholder="t('placeholder.choose')" />
+                            :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
             </uni-col>
             <!-- 公司名称 -->
             <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-easyinput :clearable="false" v-model="formData.companyName"
-                  :placeholder="t('placeholder.input')" />
+                               :placeholder="t('placeholder.input')" />
               </uni-forms-item>
             </uni-col>
             <!-- 姓 -->
@@ -193,14 +201,14 @@
             <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')">
                 <cwg-combox :clearable="false" :filterable="true" v-model:value="formData.nationality"
-                  :options="countryOptions" :placeholder="t('placeholder.choose')" />
+                            :options="countryOptions" :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
             </uni-col>
             <!-- 证件类型 -->
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="IdentityType" :label="identityLabel">
                 <cwg-combox :clearable="false" v-model:value="formData.IdentityType" :options="identityTypes"
-                  :placeholder="t('placeholder.choose')" />
+                            :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
             </uni-col>
             <!-- 证件号 -->
@@ -219,14 +227,14 @@
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="gender" :label="t('ImproveImmediately.Label.Gender')">
                 <cwg-combox :clearable="false" v-model:value="formData.gender" :options="genderOptions"
-                  :placeholder="t('placeholder.choose')" />
+                            :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
             </uni-col>
             <!-- 生日 -->
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <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')" />
+                                     :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
             </uni-col>
             <uni-col :span="24">
@@ -248,15 +256,15 @@
             <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')">
                 <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-col>
             <!-- 省份/州 -->
             <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')">
                 <cwg-combox :clearable="false" :filterable="true" v-model:value="formData.state" :options="stateOptions"
-                  :placeholder="t('placeholder.choose')" @change="changeState" />
+                            :placeholder="t('placeholder.choose')" @change="changeState" />
               </uni-forms-item>
             </uni-col>
             <!-- 国外省份/州 -->
@@ -267,10 +275,10 @@
             </uni-col>
             <!-- 城市 -->
             <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')">
                 <cwg-combox :clearable="false" :filterable="true" v-model:value="formData.city" :options="cityOptions"
-                  :placeholder="t('placeholder.choose')" />
+                            :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
             </uni-col>
             <!-- 国外城市 -->
@@ -282,7 +290,7 @@
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="addressLines1" :label="t('ImproveImmediately.Label.DetailedAddress')">
                 <uni-easyinput :clearable="false" v-model="formData.addressLines1"
-                  :placeholder="t('placeholder.input')" />
+                               :placeholder="t('placeholder.input')" />
               </uni-forms-item>
             </uni-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
@@ -293,7 +301,7 @@
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="addressLines2" :label="t('ImproveImmediately.Label.DetailedAddressStandby')">
                 <uni-easyinput :clearable="false" v-model="formData.addressLines2"
-                  :placeholder="t('placeholder.input')" />
+                               :placeholder="t('placeholder.input')" />
               </uni-forms-item>
             </uni-col>
           </uni-row>
@@ -305,37 +313,37 @@
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <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')" />
+                            :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
             </uni-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <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')" />
+                            :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
             </uni-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <uni-forms-item name="tradingObjectives" :label="t('ImproveImmediately.Label.purposeTransaction')">
                 <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-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <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')" />
+                            :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
             </uni-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <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')" />
+                            :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
             </uni-col>
             <uni-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
               <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')" />
+                            :placeholder="t('placeholder.choose')" />
               </uni-forms-item>
             </uni-col>
           </uni-row>
@@ -344,7 +352,7 @@
             <text class="Trad-experience">{{ t('ImproveImmediately.Content.TradingExperience1') }}</text>
             <view class="Trad-choose">
               <uni-data-checkbox v-model="formData.experienceTradingDerivative"
-                :localdata="radioList"></uni-data-checkbox>
+                                 :localdata="radioList"></uni-data-checkbox>
             </view>
           </view>
           <view class="experience">
@@ -470,24 +478,29 @@
               <uni-row class="demo-uni-row uni-row1" :gutter="20">
                 <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">
-                    <button type="primary" class="btn btn-danger waves-effect waves-light">{{ t('Btn.Upload') }}</button>
+                                   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" class="btn btn-danger waves-effect waves-light">{{ t('Btn.Upload') }}
+                    </button>
                   </cwg-file-picker>
                   <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="200" :imageHeight="150" :showPreviewDelete="true"
-                        :disablePreview="true" :image-styles="imageStyle" :canChoose="true"
-                        @update:modelValue="(val) => handleFileUpdate(val, '1')">
+                                               :editable="item.status != 2" :limit="1" :fileMediatype="'all'"
+                                               :uploadUrl="'/custom/file/upload/10/' + item.id" :baseUrl="updateUrl"
+                                               :uploadError="false"
+                                               :showProgress="false" :imageWidth="200" :imageHeight="150"
+                                               :showPreviewDelete="true"
+                                               :disablePreview="true" :image-styles="imageStyle" :canChoose="true"
+                                               @update:modelValue="(val) => handleFileUpdate(val, '1')">
                         <view class="file-item">
                           <image v-if="!isPdf(item.path) || !isPdf(item.againPath)" class="avatar"
-                            :src="updateUrl + (item.againPath || item.path)"></image>
+                                 :src="updateUrl + (item.againPath || item.path)"></image>
                           <view v-else>
                             <image class="icon" :src="icon_doc" />
                           </view>
@@ -537,7 +550,7 @@
                 <button class="btn btn-danger" type="primary" block @click="cancle">
                   {{ t('Btn.Cancel') }}
                 </button>
-                <button  block class="btn btn-danger" type="primary" @click="goStep(3)">
+                <button block class="btn btn-danger" type="primary" @click="goStep(3)">
                   {{ t('Btn.Last') }}
                 </button>
                 <button type="primary" class="btn btn-danger" block :loading="loadingStates.submit" @click="Submit">
@@ -552,7 +565,7 @@
                 <button class="btn btn-danger" type="primary" block @click="cancle">
                   {{ t('Btn.Cancel') }}
                 </button>
-                <button  block class="btn prev-btn btn-danger" type="primary" @click="goStep(2)">
+                <button block class="btn prev-btn btn-danger" type="primary" @click="goStep(2)">
                   {{ t('Btn.Last') }}
                 </button>
                 <button class="btn btn-danger" type="primary" block :loading="loadingStates.next" @click="goStep(4)">
@@ -567,7 +580,7 @@
                 <button class="btn btn-danger" type="primary" block @click="cancle">
                   {{ t('Btn.Cancel') }}
                 </button>
-                <button  block class="btn prev-btn btn-danger" type="primary" @click="goStep(1)">
+                <button block class="btn prev-btn btn-danger" type="primary" @click="goStep(1)">
                   {{ t('Btn.Last') }}
                 </button>
                 <button class="btn btn-danger" type="primary" block :loading="loadingStates.next" @click="goStep(3)">
@@ -606,7 +619,7 @@
           <button class="cancel-btn" @click="closeDia">
             {{ t('Btn.TemporarilyNot') }}
           </button>
-          <button class="confirm-btn primary"  @click="save">
+          <button class="confirm-btn primary" @click="save">
             {{ t('Btn.Save') }}
           </button>
         </view>
@@ -623,1293 +636,1299 @@
           <button class="cancel-btn" @click="closeDia">
             {{ t('Btn.Cancel') }}
           </button>
-          <button class="confirm-btn primary"  @click="toHome">
+          <button class="confirm-btn primary" @click="toHome">
             {{ t('Btn.Home') }}
           </button>
         </view>
       </view>
     </view>
   </uni-popup>
-  <cwg-global-popup/>
+  <cwg-global-popup />
 </template>
 
 <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'
-import { useWindowWidth } from '@/composables/useWindowWidth'
-import { usePopup } from '@/hooks/usePopup'
-import useUserStore from '@/stores/use-user-store'
-const { confirm , toast } = usePopup()
-const router = useRouter()
-const { t, locale } = 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 windowWidth = useWindowWidth(300)
-const isMobile = computed(() => windowWidth.value <= 991)
-const userStore = useUserStore()
-
-// 新增的响应式数据
-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')))
+  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'
+  import { useWindowWidth } from '@/composables/useWindowWidth'
+  import { usePopup } from '@/hooks/usePopup'
+  import useUserStore from '@/stores/use-user-store'
+
+  const { confirm, toast } = usePopup()
+  const router = useRouter()
+  const { t, locale } = 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 windowWidth = useWindowWidth(300)
+  const isMobile = computed(() => windowWidth.value <= 991)
+  const userStore = useUserStore()
+
+  // 新增的响应式数据
+  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')
     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()
+    if (`${firstName} ${lastName}`.length > 23) return t('card.vaildate.v40')
+    return true
   }
-  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')))
+
+  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 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 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()
+    return age < 18 ? t('card.New.n3') : true
   }
-  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 = computed(()=>({
-  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)
-})
-
-async function goStep(step: number) {
-  console.log(step, 'step')
-  loadingStates.value.next = true
-  if (step == 3){
-    if (!formData.value?.identity){
-      toast(t('vaildate.IDCard.empty'))
-      loadingStates.value.next = false
-      return
+
+  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')
   }
-  if (step == 2) {
-    if (currentUploadCard.value == 1) {
-      if (!formData.value.cardType) {
-        toast( t('vaildate.CardType.empty'))
-        loadingStates.value.next = false
-        return
-      }
-      if (!fileListID1.value.path || !fileListID2.value.path) {
-        toast( t('vaildate.IDPhoto.empty'))
+
+  const rules = computed(() => ({
+    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)
+  })
+
+  async function goStep(step: number) {
+    console.log(step, 'step')
+    loadingStates.value.next = true
+    if (step == 3) {
+      if (!formData.value?.identity) {
+        toast(t('vaildate.IDCard.empty'))
         loadingStates.value.next = false
         return
       }
     }
-    // 当前接口没有审核通过的请求接口,
-    const {status,applyRealStatus} = userStore.userInfo.customInfo
-    if (!(status == 2 || applyRealStatus == 1 || applyRealStatus == 2)){
-     await getOcrInfo()
-    }
-  }
-  loadingStates.value.next = false
-  currentStep.value = step
-}
-
-const getOcrInfo =async () => {
-  try {
-    let res = await personalApi.ocrResult()
-    console.log(res)
-    if (res.data){
-      const { idCard='',gender='男' ,birthDate='',address='',names=['','']} = res.data
-      formData.value = {
-        identity:idCard,
-        gender:gender=='男'?1:2,
-        birth:Date.parse(new Date(birthDate).toString())/1000,
-        addressLines1:address,
-        lastName:names[0],
-        firstName:names[1],
-        ...formData.value,
+    if (step == 2) {
+      if (currentUploadCard.value == 1) {
+        if (!formData.value.cardType) {
+          toast(t('vaildate.CardType.empty'))
+          loadingStates.value.next = false
+          return
+        }
+        if (!fileListID1.value.path || !fileListID2.value.path) {
+          toast(t('vaildate.IDPhoto.empty'))
+          loadingStates.value.next = false
+          return
+        }
+      }
+      // 当前接口没有审核通过的请求接口,
+      const { status, applyRealStatus } = userStore.userInfo.customInfo
+      if (!(status == 2 || applyRealStatus == 1 || applyRealStatus == 2)) {
+        await getOcrInfo()
       }
-      console.log(formData.value)
     }
-  }catch (error) {
     loadingStates.value.next = false
-    toast(error.msg)
-  }
-}
-
-// 选项数据
-const customerTypeOptions = computed(()=>[
-  { value: 1, text: t('ImproveImmediately.Label.CustomerType1') },
-  { value: 2, text: t('ImproveImmediately.Label.CustomerType2') },
-])
-
-const identityTypes = computed(()=>[
-  { text: t('ImproveImmediately.Label.IDCard'), value: 2 },
-  { text: t('ImproveImmediately.Label.Passport'), value: 3 },
-])
-
-const genderOptions = computed(()=>[
-  { value: 1, text: t('PersonalManagement.Label.Men') },
-  { value: 2, text: t('PersonalManagement.Label.Women') },
-])
-const radioList = computed(()=>[
-  { value: 1, text: t('ImproveImmediately.Label.Yes') },
-  { value: 0, text: t('ImproveImmediately.Label.No') },
-])
-
-const educationOptions = computed(()=>[
-  { 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 =computed(()=> [
-  { 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 =computed(()=> [
-  { 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 = computed(()=>[
-  { 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 = computed(()=>[
-  { 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 = computed(()=>[
-  { 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
+    currentStep.value = step
   }
-  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
-  }
-  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
+  const getOcrInfo = async () => {
+    try {
+      let res = await personalApi.ocrResult()
+      console.log(res)
+      if (res.data) {
+        const { idCard = '', gender: gender1 = '男', birthDate = '', address = '', names = ['', ''] } = res.data
+        console.log(formData.value, '1')
+        const { identity, gender, birth, addressLines1, lastName, firstName } = formData.value
+        formData.value = {
+          ...formData.value,
+          identity: identity ?? idCard,
+          gender: gender ?? (gender1 == '男' ? 1 : 2),
+          birth: birth ?? Date.parse(new Date(birthDate).toString()) / 1000,
+          addressLines1: addressLines1 ?? address,
+          lastName: lastName ?? names[0],
+          firstName: firstName ?? names[1],
+        }
+        console.log(formData.value, '2')
+      }
+    } catch (error) {
+      loadingStates.value.next = false
+      toast(error.msg)
     }
+  }
+
+  // 选项数据
+  const customerTypeOptions = computed(() => [
+    { value: 1, text: t('ImproveImmediately.Label.CustomerType1') },
+    { value: 2, text: t('ImproveImmediately.Label.CustomerType2') },
+  ])
+
+  const identityTypes = computed(() => [
+    { text: t('ImproveImmediately.Label.IDCard'), value: 2 },
+    { text: t('ImproveImmediately.Label.Passport'), value: 3 },
+  ])
+
+  const genderOptions = computed(() => [
+    { value: 1, text: t('PersonalManagement.Label.Men') },
+    { value: 2, text: t('PersonalManagement.Label.Women') },
+  ])
+  const radioList = computed(() => [
+    { value: 1, text: t('ImproveImmediately.Label.Yes') },
+    { value: 0, text: t('ImproveImmediately.Label.No') },
+  ])
+
+  const educationOptions = computed(() => [
+    { 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 = computed(() => [
+    { 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 = computed(() => [
+    { 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 = computed(() => [
+    { 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 = computed(() => [
+    { 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 = computed(() => [
+    { 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: [],
   })
-  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 }>>([])
 
-function handleFileUpdate(value, type) {
-  console.log(value, type, 'uplaod')
-  if (type == 10) {
-    uni.showToast({ title: t('card.New1.d5'), icon: 'none' })
-    getCustomFileList();
-  }
-}
-function handleOcr(value, type) {
-  console.log(value, type, 'uplaod')
-
-}
-const showFile = (file) => {
-  // console.log(file)
-  window.open(updateUrl + (file.againPath || file.path), '_blank')
-}
-
-async function fileOtherDelete(id) {
-  const result = await confirm({
-    title: t('Msg.SystemPrompt'),
-    content: t('Msg.Delete'),
-    confirmText: t('Btn.Confirm'),
-    cancelText: t('Btn.Cancel'),
+  // 加载状态
+  const loadingStates = ref({
+    next: false,
+    submit: false,
   })
-  if (result){
-    try {
-      // 确认删除
-      let data = await personalApi.customFileDelete({ ids: [id] })
-      if (data.code == 200) {
-        uni.showToast(t('Msg.DeleteSuccess'))
-        getCustomFileList()
-      }
-    }catch (e) {
-      uni.showToast(e.msg)
-    }
-  }
-}
 
+  // 计算属性
+  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')
+  })
 
-function changeState(val) {
-  formData.value.city = ''
-  cityOptions.value = []
-  let item = {}
-  states.value.forEach((element) => {
-    if (element.name == val || element.enName == val) {
-      item = element
-      return
+  // 计算属性:当前选中国籍的 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
   })
-  getCityList(item.id)
-}
 
-function handleChange(value: any) {
-  formData.value = { ...formData.value, [value.key]: value.value }
-  console.log(value)
-  if (value.key === 'country') {
+  // 计算属性:当前选中国籍的 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 = []
-    if (value.value) {
-      getStateList(value.value)
-    }
-  } else if (value.key === 'state') {
-    formData.value.city = ''
-    cityOptions.value = []
-    if (value.value) {
-      getCityList(value.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()
     }
   }
-}
-
-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 handleOcr(value, type) {
+    console.log(value, type, 'uplaod')
+
   }
-  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/dashboard' })
+
+  const showFile = (file) => {
+    // console.log(file)
+    window.open(updateUrl + (file.againPath || file.path), '_blank')
   }
-}
-
-function closeDia() {
-  dialogCheck.value.close()
-}
-
-function toHome() {
-  dialogCheck.value.close()
-  router.push({ path: '/pages/customer/dashboard' })
-}
-
-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,
+
+  async function fileOtherDelete(id) {
+    const result = await confirm({
+      title: t('Msg.SystemPrompt'),
+      content: t('Msg.Delete'),
+      confirmText: t('Btn.Confirm'),
+      cancelText: t('Btn.Cancel'),
     })
-    if (res.code == Config.Code.StatusOK) {
-      await getCustomFileList()
-      await customApply()
-    } else {
-      uni.showToast({ title: res.msg, icon: 'none' })
+    if (result) {
+      try {
+        // 确认删除
+        let data = await personalApi.customFileDelete({ ids: [id] })
+        if (data.code == 200) {
+          uni.showToast(t('Msg.DeleteSuccess'))
+          getCustomFileList()
+        }
+      } catch (e) {
+        uni.showToast(e.msg)
+      }
     }
-  } catch (error: any) {
-    uni.showToast({ title: error.msg || t('Msg.SystemError'), icon: 'none' })
-  } finally {
-    loadingStates.value.submit = false
   }
-}
 
-async function updateInfo(save: number) {
-  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 = []
-    }
-    let res = await personalApi.CustomUpdateInfo({
-      ...formData.value,
+
+  function changeState(val) {
+    formData.value.city = ''
+    cityOptions.value = []
+    let item = {}
+    states.value.forEach((element) => {
+      if (element.name == val || element.enName == val) {
+        item = element
+        return
+      }
     })
-    if (res.code == Config.Code.StatusOK) {
-      if (save) {
-        dialogCheck.value.close()
-        router.push({ path: '/pages/customer/index' })
+    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 {
-      uni.showToast({ title: res.msg, icon: 'none' })
+    } 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'
     }
-  } catch (error: any) {
-    uni.showToast({ title: error.msg || t('Msg.SystemError'), icon: 'none' })
+    return res && (url.substr(-3, 3) == 'pdf' ||
+      url.substr(-3, 3) == 'PDF')
   }
-}
-
-async function customApply() {
-  try {
-    let res = await personalApi.customApplyReal({})
-    if (res.code == Config.Code.StatusOK) {
-      isApprove.value = true
-      await getLoginInfo(true)
+
+  function cancle() {
+    if (!isApprove.value) {
       dialogCheck.value.open()
-      dialogCheck1.value = false
+      dialogCheck1.value = true
     } else {
-      uni.showToast({ title: res.msg, icon: 'none' })
+      router.push({ path: '/pages/customer/dashboard' })
     }
-  } catch (error: any) {
-    uni.showToast({ title: error.msg, icon: 'none' })
   }
-}
-
-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,
-        disable: 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)
-          }
-        })
+
+  function closeDia() {
+    dialogCheck.value.close()
+  }
+
+  function toHome() {
+    dialogCheck.value.close()
+    router.push({ path: '/pages/customer/dashboard' })
+  }
+
+  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.msg || t('Msg.SystemError'), icon: 'none' })
+    } finally {
+      loadingStates.value.submit = false
     }
-  } catch (error: any) {
-    uni.showToast({ title: error.msg, icon: 'none' })
   }
-}
-
-async function getStateList(pid: string) {
-  try {
-    let res = await personalApi.Country({ pid })
-    if (res.code == Config.Code.StatusOK) {
-      // console.log(locale)
-      stateOptions.value = res.data.map((item: any) => ({
-        text: locale.value === 'en' ? item.enName : item.name,
-        value: locale.value === 'en' ? item.enName : item.name,
-      }))
-      states.value = res.data
-      const state = formData.value.state
-      console.log(state)
-      if (state) {
-        states.value.forEach((item) => {
-          if (
-            item.name == state ||
-            item.enName == state
-          ) {
-            getCityList(item.id)
-          }
-        })
+
+  async function updateInfo(save: number) {
+    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 = []
+      }
+      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.msg || t('Msg.SystemError'), icon: 'none' })
     }
-  } catch (error: any) {
-    console.log(error)
   }
-}
-
-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: locale.value === 'en' ? item.enName : item.name,
-        value: locale.value === 'en' ? item.enName : item.name,
-      }))
-      cities.value = res.data
+
+  async function customApply() {
+    try {
+      let res = await personalApi.customApplyReal({})
+      if (res.code == Config.Code.StatusOK) {
+        isApprove.value = true
+        await getLoginInfo(true)
+        dialogCheck.value.open()
+        dialogCheck1.value = false
+      } else {
+        uni.showToast({ title: res.msg, icon: 'none' })
+      }
+    } catch (error: any) {
+      uni.showToast({ title: error.msg, icon: 'none' })
     }
-  } catch (error: any) {
   }
-}
-
-async function getLoginInfo(type=false) {
-  try {
-    let res = await personalApi.CustomLoginInfo()
-    if (res.code == Config.Code.StatusOK) {
-      formData.value = res.data.customInfo
-      if (type) userStore.saveUserInfo(res.data)
-      if (formData.value.addressLines != null && formData.value.addressLines.length) {
-        formData.value.addressLines1 = formData.value.addressLines[0]
-        formData.value.addressLines2 = formData.value.addressLines[1]
+
+  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,
+          disable: 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)
+            }
+          })
+        }
       }
-      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' })
+    } catch (error: any) {
+      uni.showToast({ title: error.msg, icon: 'none' })
     }
-  } catch (error: any) {
-
-  }
-}
-
-// 获取二维码
-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)
+
+  async function getStateList(pid: string) {
+    try {
+      let res = await personalApi.Country({ pid })
+      if (res.code == Config.Code.StatusOK) {
+        // console.log(locale)
+        stateOptions.value = res.data.map((item: any) => ({
+          text: locale.value === 'en' ? item.enName : item.name,
+          value: locale.value === 'en' ? item.enName : item.name,
+        }))
+        states.value = res.data
+        const state = formData.value.state
+        console.log(state)
+        if (state) {
+          states.value.forEach((item) => {
+            if (
+              item.name == state ||
+              item.enName == state
+            ) {
+              getCityList(item.id)
+            }
+          })
         }
-      })
-      actionType()
-    } else {
-      uni.showToast({ title: res.msg, icon: 'none' })
-      flag.value = false
+      }
+    } catch (error: any) {
+      console.log(error)
     }
-  } catch (error: any) {
-    uni.showToast({ title: error.msg || t('Msg.SystemError'), 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'
+
+  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: locale.value === 'en' ? item.enName : item.name,
+          value: locale.value === 'en' ? item.enName : item.name,
+        }))
+        cities.value = res.data
+      }
+    } catch (error: any) {
+    }
   }
-  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 getLoginInfo(type = false) {
+    try {
+      let res = await personalApi.CustomLoginInfo()
+      if (res.code == Config.Code.StatusOK) {
+        formData.value = res.data.customInfo
+        if (type) userStore.saveUserInfo(res.data)
+        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' })
+      }
+    } catch (error: any) {
+
+    }
   }
-  if (fileListAdd1.value.id) {
-    actionAdd1.value = Config.Host80 + '/custom/file/upload/3/' + fileListAdd1.value.id
-  } else {
-    actionAdd1.value = Config.Host80 + '/custom/file/upload/3'
+
+  // 获取二维码
+  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' })
+    }
   }
-  if (fileListAdd2.value.id) {
-    actionAdd2.value = Config.Host80 + '/custom/file/upload/4/' + fileListAdd2.value.id
-  } else {
-    actionAdd2.value = Config.Host80 + '/custom/file/upload/4'
+
+  // 获取上传文件信息
+  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()
+      } else {
+        uni.showToast({ title: res.msg, icon: 'none' })
+        flag.value = false
+      }
+    } catch (error: any) {
+      uni.showToast({ title: error.msg || t('Msg.SystemError'), icon: 'none' })
+    }
   }
-  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)
+
+  // 请求头
+  function actionType() {
+    if (fileListID1.value.id) {
+      actionID1.value = Config.Host80 + '/custom/file/upload/1/' + fileListID1.value.id
     } else {
-      let flag = true
-      fileListOthers.value.forEach((item: any) => {
-        if (item.id == myData.id) {
-          item = myData
-          flag = false
-        }
-      })
-      if (flag) {
+      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)
+        }
       }
     }
+    actionType()
   }
-  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
+
+  // 判断是否为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
+      }
     }
+    return flag
   }
-  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}`
-      )
+
+  // 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(locale,()=>{
-  formRef.value?.clearValidate()
-})
-
-// 生命周期
-onMounted(async () => {
-  // dialogCheck.value.open()
-  divInit()
-  await getLoginInfo()
-  await getMobileInfo()
-  await getCustomFileList()
-  isPC.value = IsPC()
-  uni.$on('updateImproveFile', (data) => {
-    updateFile(data)
+  }
+
+  // 监听表单字段变化
+  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}`,
+        )
+      }
+    },
+  )
+
+  watch(locale, () => {
+    formRef.value?.clearValidate()
+  })
+
+  // 生命周期
+  onMounted(async () => {
+    // dialogCheck.value.open()
+    divInit()
+    await getLoginInfo()
+    await getMobileInfo()
+    await getCustomFileList()
+    isPC.value = IsPC()
+    uni.$on('updateImproveFile', (data) => {
+      updateFile(data)
+    })
   })
-})
 
-// 组件销毁时
-onUnmounted(() => {
-  uni.$off('updateImproveFile')
-})
+  // 组件销毁时
+  onUnmounted(() => {
+    uni.$off('updateImproveFile')
+  })
 </script>
 
 <style scoped lang="scss">
-@import "@/uni.scss";
-.btn{
-  margin: 0;
-  width: 100%;
-}
-
-.form-tab {
-  height: px2rpx(100);
-}
-
-.form-section {
-  margin: px2rpx(8) 0;
-}
-
-.section-title {
-  color: var(--bs-emphasis-color);
-  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);
-  }
-}
-
-.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;
+  @import "@/uni.scss";
+
+  .btn {
+    margin: 0;
+    width: 100%;
   }
-}
-
-.refresh {
-  width: 100%;
-  height: px2rpx(150);
-  display: flex;
-  justify-content: center;
-  align-items: center;
-
-  image {
-    width: px2rpx(28);
-    height: px2rpx(28);
+
+  .form-tab {
+    height: px2rpx(100);
   }
-}
 
-.fileOther {
+  .form-section {
+    margin: px2rpx(8) 0;
+  }
 
-  :deep(.upload-wrapper .uni-file-picker) {
-    display: flex;
-    align-items: center;
-    justify-content: center;
+  .section-title {
+    color: var(--bs-emphasis-color);
+    font-family: Roboto;
+    font-size: px2rpx(22);
+    font-weight: 500;
+    margin: px2rpx(10) 0;
   }
 
-  :deep(.uni-file-picker__lists) {
-    display: none !important;
+  :deep(.file-picker__box) {
+    width: px2rpx(200) !important;
+    height: px2rpx(150) !important;
   }
-}
-
-.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;
+
+  :deep(.uni-file-picker) {
+    width: 100%;
+    height: 100%;
   }
 
-  :deep(.upload-wrapper .uni-file-picker) {
+  .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;
 
-  .list_upload {
-    width: px2rpx(150);
-    height: px2rpx(60);
+    .icon {
+      width: px2rpx(24);
+      height: px2rpx(24);
+    }
   }
 
-  .file-item {
-    //border: none;
-    box-sizing: border-box;
-    width: px2rpx(150);
-    height: px2rpx(60);
-    border-radius: 0;
+  .avatar {
+    width: 100%;
+    height: 100%;
   }
 
-  margin-top: px2rpx(20);
-  max-width: px2rpx(600);
-  border: 1px dashed;
-  display: flex;
+  .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;
+    }
+  }
 
-  .options {
+  .refresh {
+    width: 100%;
+    height: px2rpx(150);
     display: flex;
-    flex: 1;
-    padding: 8px;
-    box-sizing: border-box;
     justify-content: center;
-    align-content: center;
     align-items: center;
-    @media screen and (max-width: 990px) {
-      flex-direction: column;
-      align-items: flex-start;
+
+    image {
+      width: px2rpx(28);
+      height: px2rpx(28);
     }
+  }
 
-    uni-button {
-      min-width: px2rpx(80);
-      max-height: px2rpx(35);
-      padding: 0;
-      line-height: px2rpx(35);
-      margin-bottom: px2rpx(5);
+  .fileOther {
 
-      span,
-      a {
-        display: inline-block;
-        height: 100%;
-        width: 100%;
-        color: var(--color-black);
-      }
+    :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;
+    }
+  }
 
-  .box {
+  .fileList {
     width: 100%;
-    // height: 190px;
     box-sizing: border-box;
     display: flex;
+    flex-direction: column;
     justify-content: center;
     align-items: center;
+  }
 
-    .mobile {
-      width: px2rpx(50);
-      height: px2rpx(50);
-      margin-right: px2rpx(10);
+  #files {
+    :deep(.uni-file-picker__lists) {
+      display: none !important;
     }
 
-    .arrow {
-      width: px2rpx(30);
-      height: px2rpx(30);
-      margin-right: px2rpx(10);
+    :deep(.upload-wrapper .uni-file-picker) {
+      display: flex;
+      align-items: center;
+      justify-content: center;
     }
 
-    .img_mobile {
-      width: 120px;
-      height: 120px;
-      margin: 10px;
-      border: 5px solid;
-      background-color: var(--color-gray);
+
+    .list_upload {
+      width: px2rpx(150);
+      height: px2rpx(60);
     }
 
-    .icon_refresh {
-      width: px2rpx(30);
-      height: px2rpx(30);
-      margin-right: px2rpx(10);
+    .file-item {
+      //border: none;
+      box-sizing: border-box;
+      width: px2rpx(150);
+      height: px2rpx(60);
+      border-radius: 0;
     }
-  }
-}
-
-.experience {
-  display: flex;
-  margin: px2rpx(10) 0;
-  align-items: center;
-}
-
-.Trad-experience {
-  flex: 1;
-  color: var(--bs-emphasis-color);
-  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: var(--bs-heading-color);
-}
-
-.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 {
+
+    margin-top: px2rpx(20);
+    max-width: px2rpx(600);
+    border: 1px dashed;
+    display: flex;
+
+    .options {
+      display: flex;
       flex: 1;
-      margin: 0 px2rpx(10);
+      padding: 8px;
+      box-sizing: border-box;
+      justify-content: center;
+      align-content: center;
+      align-items: center;
+      @media screen and (max-width: 990px) {
+        flex-direction: column;
+        align-items: flex-start;
+      }
 
-      &:first-child {
-        margin-left: 0;
+      uni-button {
+        min-width: px2rpx(80);
+        max-height: px2rpx(35);
+        padding: 0;
+        line-height: px2rpx(35);
+        margin-bottom: px2rpx(5);
+
+        span,
+        a {
+          display: inline-block;
+          height: 100%;
+          width: 100%;
+          color: var(--color-black);
+        }
       }
+    }
+  }
 
-      &:last-child {
-        margin-right: 0;
+  .con-box {
+    background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
+    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);
+      }
+
+      .icon_refresh {
+        width: px2rpx(30);
+        height: px2rpx(30);
+        margin-right: px2rpx(10);
       }
     }
   }
-}
-
-.btn-primary {
-  height: px2rpx(80);
-  font-size: px2rpx(18);
-}
-
-.prev-btn {
-  //border-color: #4a6cf7;
-  //color: #4a6cf7;
-}
-
-.address-tip {
-  width: px2rpx(140);
-  //height: px2rpx(60);
-  font-size: px2rpx(14);
-  word-break:break-all;
-  white-space:wrap;
-  word-wrap:break-word;
-}
-
-.crm-title-box {
-  display: flex;
-  align-items: center;
-  margin: px2rpx(20) 0;
-  background-color: var(--table-th-color) ;
-  color: #333;
-
-  .tit {
-    font-size: px2rpx(18);
-    font-weight: 500;
-    color: var(--bs-emphasis-color);
+
+  .experience {
+    display: flex;
+    margin: px2rpx(10) 0;
+    align-items: center;
   }
 
-  .icon-tip {
-    margin-left: px2rpx(10);
-    font-size: px2rpx(16);
+  .Trad-experience {
+    flex: 1;
     color: var(--bs-emphasis-color);
-    cursor: pointer;
+    font-size: px2rpx(16);
   }
-}
-
-.popup-content {
-  padding: px2rpx(20);
-  text-align: center;
-}
-
-.dia-content {
-  padding: px2rpx(30);
-  text-align: center;
 
-  .icon {
-    margin-bottom: px2rpx(20);
+  .Trad-choose {
+    display: flex;
+  }
 
-    i {
-      font-size: px2rpx(60);
-      color: #4a6cf7;
-    }
+  .descending {
+    margin: px2rpx(20) 0;
+    padding: px2rpx(20);
+    background-color: #f5f5f5;
+    border-radius: px2rpx(8);
   }
 
-  .des1 {
-    font-size: px2rpx(18);
+  .title {
     font-weight: 500;
     margin-bottom: px2rpx(10);
   }
 
-  .des2 {
+  .des {
+    margin: px2rpx(5) 0;
     font-size: px2rpx(14);
     color: var(--bs-heading-color);
-    margin-bottom: px2rpx(30);
   }
 
-  .dialog-footer {
-    display: flex;
-    justify-content: space-between;
+  .dian1 {
+    font-size: px2rpx(20);
+    margin-right: px2rpx(5);
+  }
+
+  .dian {
+    margin-right: px2rpx(10);
+  }
+
+  .btns {
     margin-top: px2rpx(30);
+  }
 
-    uni-button {
-      flex: 1;
-      margin: 0 px2rpx(10);
+  .cwg-button {
+    display: flex;
+    flex-direction: column;
+    gap: px2rpx(15);
 
-      &:first-child {
-        margin-left: 0;
-      }
+    &.two-btn {
+      flex-direction: row;
+      justify-content: space-between;
+
+      u-button {
+        flex: 1;
+        margin: 0 px2rpx(10);
 
-      &:last-child {
-        margin-right: 0;
+        &:first-child {
+          margin-left: 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: var(--bs-heading-color);
+
+  .btn-primary {
+    height: px2rpx(80);
+    font-size: px2rpx(18);
   }
 
-  .name {
-    font-size: px2rpx(16);
-    margin-bottom: px2rpx(5);
+  .prev-btn {
+    //border-color: #4a6cf7;
+    //color: #4a6cf7;
   }
 
-  .back {
-    font-size: px2rpx(12);
-    color: var(--bs-heading-color);
+  .address-tip {
+    width: px2rpx(140);
+    //height: px2rpx(60);
+    font-size: px2rpx(14);
+    word-break: break-all;
+    white-space: wrap;
+    word-wrap: break-word;
+  }
+
+  .crm-title-box {
+    display: flex;
+    align-items: center;
+    margin: px2rpx(20) 0;
+    background-color: var(--table-th-color);
+    color: #333;
+
+    .tit {
+      font-size: px2rpx(18);
+      font-weight: 500;
+      color: var(--bs-emphasis-color);
+    }
+
+    .icon-tip {
+      margin-left: px2rpx(10);
+      font-size: px2rpx(16);
+      color: var(--bs-emphasis-color);
+      cursor: pointer;
+    }
+  }
+
+  .popup-content {
+    padding: px2rpx(20);
+    text-align: center;
+  }
+
+  .dia-content {
+    padding: px2rpx(30);
+    text-align: center;
+
+    .icon {
+      margin-bottom: px2rpx(20);
+
+      i {
+        font-size: px2rpx(60);
+        color: #4a6cf7;
+      }
+    }
+
+    .des1 {
+      font-size: px2rpx(18);
+      font-weight: 500;
+      margin-bottom: px2rpx(10);
+    }
+
+    .des2 {
+      font-size: px2rpx(14);
+      color: var(--bs-heading-color);
+      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;
+        }
+      }
+    }
+  }
+
+  .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: var(--bs-heading-color);
+    }
+
+    .name {
+      font-size: px2rpx(16);
+      margin-bottom: px2rpx(5);
+    }
+
+    .back {
+      font-size: px2rpx(12);
+      color: var(--bs-heading-color);
+    }
   }
-}
 </style>