Jelajahi Sumber

Merge branch 'v20' of http://192.168.31.240:3000/MTP2.0_New/MTP20_WEB_GLOBAL into v20

li.shaoyi 9 bulan lalu
induk
melakukan
87289b0602

+ 15 - 5
public/locales/en-US.json

@@ -1274,12 +1274,13 @@
         "accountname": "Name",
         "accountname1": "BankCard AccountName",
         "OpenBankAccId": "Bank Account",
-        "cardtype": "Document Type",
-        "cardno": "Document Number",
+        "cardtype": "Card-Type",
+        "cardno": "Card-Number",
         "cusbankname": "Custodian Bank",
         "bankaccountno1": "Contract bank account number",
         "currency": "Currency",
         "bankname": "Contract Bank",
+        "banktype": "Bank-Type",
         "bankname1": "Bank Name",
         "bankno": "Bank CardNo",
         "bankaccountname": "Account Name",
@@ -1291,13 +1292,13 @@
         "signagreement": "Agreement signing",
         "cancel": "Cancel",
         "modify": "Modify",
-        "bankchannel": "Bank Channel",
+        "bankchannel": "Channel",
         "addbanksign": "Add Bank Sign",
         "modifybanksign": "Modify Bank Sign",
         "Pleaseselectyourbank": "Please select the bank account",
         "Pleaseenteryourmobilephonenumber": "Please enter the phoneNo",
         "Pleaseenterbankaccountname": "Please enter the bank card account name",
-        "Pleaseenterbankaccountno": "Please enter the bank card account number",
+        "Pleaseenterbankaccountno": "Please enter the bank card no",
         "Pleaseenterbankno": "Please enter the bank cardNo",
         "youhavenotaddedasignedaccount": "You have not added a signed account",
         "fundstype": "Fund type",
@@ -1409,6 +1410,15 @@
                 "amount": "Amount",
                 "pay": "Pay"
             }
+        },
+        "reciver": {
+            "title": "Choice",
+            "name": "UserName:",
+            "phone_number": "PhoneNo:",
+            "cert_no": "CardNo:",
+            "bank_name": "BankName:",
+            "bank_account": "BankCardNo:",
+            "channel_code": "BankCHannel:"
         }
     },
     "user": {
@@ -1519,7 +1529,7 @@
             "authstatus": "Real-name status",
             "submit": "Submit real-name authentication",
             "pleaseentertheusername": "Please enter user name",
-            "pleaseenterthecardnum": "Please enter document number",
+            "pleaseenterthecardnum": "Please enter card number",
             "pleaseuploadthecardbackphoto": "Please upload the back photo of the document",
             "pleaseuploadthecardfrontphoto": "Please upload the front photo of the document",
             "pleaseselectthecardtype": "Please select document type",

+ 10 - 0
public/locales/th-TH.json

@@ -1283,6 +1283,7 @@
         "bankaccountno1": "หมายเลขบัญชีธนาคารที่ทำสัญญา",
         "currency": "ค่าเงิน",
         "bankname": "ธนาคารเปิด",
+        "banktype": "ชนิดของธนาคาร",
         "bankname1": "ชื่อธนาคาร",
         "bankno": "หมายเลขบัตรธนาคาร",
         "bankaccountname": "ชื่อ",
@@ -1412,6 +1413,15 @@
                 "amount": "ยอดเงิน",
                 "pay": "ชำระเงิน"
             }
+        },
+        "reciver": {
+            "title": "เลือกข้อมูลผู้รับ",
+            "name": "ผู้รับ:",
+            "phone_number": "หมายเลขโทรศัพท์:",
+            "cert_no": "หมายเลขบัตร:",
+            "bank_name": "ธนาคาร ที่ได้รับ:",
+            "bank_account": "เลขบัตรธนาคาร:",
+            "channel_code": "ช่องทางการธนาคาร:"
         }
     },
     "user": {

+ 10 - 0
public/locales/zh-CN.json

@@ -1281,6 +1281,7 @@
         "cardno": "证件号码",
         "cusbankname": "托管银行",
         "bankname": "签约银行",
+        "banktype": "银行类型",
         "bankname1": "银行名称",
         "bankno": "银行卡号",
         "bankaccountno1": "签约银行账号",
@@ -1412,6 +1413,15 @@
                 "amount": "金额",
                 "pay": "支付"
             }
+        },
+        "reciver": {
+            "title": "选择接收人信息",
+            "name": "接收人:",
+            "phone_number": "电话号码:",
+            "cert_no": "证件号码:",
+            "bank_name": "接收银行:",
+            "bank_account": "银行卡号:",
+            "channel_code": "银行渠道:"
         }
     },
     "user": {

+ 10 - 0
public/locales/zh-TW.json

@@ -1281,6 +1281,7 @@
         "cardno": "證件號碼",
         "cusbankname": "託管銀行",
         "bankname": "簽約銀行",
+        "banktype": "銀行類型",
         "bankname1": "銀行名稱",
         "bankno": "銀行卡號",
         "bankaccountno1": "簽約銀行賬號",
@@ -1412,6 +1413,15 @@
                 "amount": "金額",
                 "pay": "付款"
             }
+        },
+        "reciver": {
+            "title": "選擇接收人信息",
+            "name": "接收人:",
+            "phone_number": "電話號碼:",
+            "cert_no": "證件號碼:",
+            "bank_name": "接收銀行:",
+            "bank_account": "銀行卡號:",
+            "channel_code": "銀行渠道:"
         }
     },
     "user": {

+ 84 - 37
src/business/bank/index.ts

@@ -33,11 +33,15 @@ export function useDoWithdraw() {
     const loading = shallowRef(false)
     /// 获取当前是否已签约
     const bankAccountSign = shallowRef<Model.BankAccountSignRsp[]>([])
+
     const hybrids = shallowRef<Model.PaymentCenterHybridConfigs[]>([])
-    const bank_code = shallowRef('')
-    const channel_code = shallowRef('')
+    const method_types = shallowRef<string[]>([])
     const channel_banks = shallowRef<Model.HybridBank[]>([])
 
+    const channel_code = shallowRef('')
+    const method_type = shallowRef('')
+    const bank_code  = shallowRef('')
+
     const sign = computed<Partial<Model.BankAccountSignRsp>>(() => {
         if (bankAccountSign.value.length) {
             return bankAccountSign.value[0]
@@ -69,13 +73,19 @@ export function useDoWithdraw() {
     // 获取支付中心混合支付渠道配置信息列表 泰商所采用
     getHybridConfigs().then((res) => {
         if (res.data.length) {
-            hybrids.value = res.data.filter(e => e.can_amt_out === 1 && e.bank_infos.length != 0)
+            hybrids.value = res.data.filter(e => e.can_amt_out === 1)
             if (hybrids.value.length) {
+                // 默认选中第一个银行的 code
                 channel_code.value = hybrids.value[0].channel_code ?? ''
-                // 默认选中第一个
-                channel_banks.value = hybrids.value.filter(e => e.channel_code === channel_code.value)[0].bank_infos.filter(e => e.out_in_flag === 0 && e.is_enabled === 1) ?? []
-                if (channel_banks.value.length != 0) {
-                    bank_code.value = channel_banks.value[0].bank_code ?? ''
+                // 默认选中第一个下面的银行类型
+                method_types.value = getMethodTypeKeys(hybrids.value[0].out_bank_infos)
+                if (method_types.value.length != 0) {
+                    method_type.value = method_types.value[0]
+
+                    channel_banks.value = hybrids.value[0].out_bank_infos[method_type.value]
+                    if (channel_banks.value.length != 0) {
+                        bank_code.value = channel_banks.value[0].bank_code
+                    }
                 }
             }
         }
@@ -102,8 +112,10 @@ export function useDoWithdraw() {
         sign,
         hybrids,
         bank_code,
-        channel_code,
-        channel_banks
+        method_types,
+        method_type,
+        channel_banks,
+        channel_code
     }
 }
 
@@ -112,11 +124,15 @@ export function useDoDeposit(userid?: number) {
     const loading = shallowRef(false)
     /// 获取当前是否已签约
     const bankAccountSign = shallowRef<Model.BankAccountSignRsp[]>([])
+
     const hybrids = shallowRef<Model.PaymentCenterHybridConfigs[]>([])
-    const bank_code = shallowRef('')
-    const channel_code = shallowRef('')
+    const method_types = shallowRef<string[]>([])
     const channel_banks = shallowRef<Model.HybridBank[]>([])
 
+    const channel_code = shallowRef('')
+    const method_type = shallowRef('')
+    const bank_code  = shallowRef('')
+
     const sign = computed<Partial<Model.BankAccountSignRsp>>(() => {
         if (bankAccountSign.value.length) {
             return bankAccountSign.value[0]
@@ -146,13 +162,19 @@ export function useDoDeposit(userid?: number) {
     // 获取支付中心混合支付渠道配置信息列表 泰商所采用
     getHybridConfigs().then((res) => {
         if (res.data.length) {
-            hybrids.value = res.data.filter(e => e.can_amt_in === 1 && e.bank_infos.length != 0)
+            hybrids.value = res.data.filter(e => e.can_amt_in === 1)
             if (hybrids.value.length) {
+                // 默认选中第一个银行的 code
                 channel_code.value = hybrids.value[0].channel_code ?? ''
-                // 默认选中第一个
-                channel_banks.value = hybrids.value.filter(e => e.channel_code === channel_code.value)[0].bank_infos.filter(e => e.out_in_flag === 1 && e.is_enabled === 1) ?? []
-                if (channel_banks.value.length != 0) {
-                    bank_code.value = channel_banks.value[0].bank_code ?? ''
+                // 默认选中第一个下面的银行类型
+                method_types.value = getMethodTypeKeys(hybrids.value[0].in_bank_infos)
+                if (method_types.value.length != 0) {
+                    method_type.value = method_types.value[0]
+
+                    channel_banks.value = hybrids.value[0].in_bank_infos[method_type.value]
+                    if (channel_banks.value.length != 0) {
+                        bank_code.value = channel_banks.value[0].bank_code
+                    }
                 }
             }
         }
@@ -178,11 +200,22 @@ export function useDoDeposit(userid?: number) {
         sign,
         hybrids,
         bank_code,
-        channel_code,
-        channel_banks
+        method_types,
+        method_type,
+        channel_banks,
+        channel_code
     }
 }
 
+// 获取对应属性的 key 集合
+export function getMethodTypeKeys(config: Model.MethodType): string[] {
+    const allKeys = new Set<string>()
+    for (const key in config) {
+        allKeys.add(key)
+    }
+    return Array.from(allKeys)
+}
+
 /// 银行签约请求
 export function useDoBankSign() {
     const { userInfo } = useUserStore()
@@ -430,25 +463,39 @@ export function useDoCusBankExtendConfigs(extendbiztype: number) {
     const startTime = shallowRef(getSystemParamValue('012') ?? '')
     const endTime = shallowRef(getSystemParamValue('013') ?? '')
 
-    /// 查询签约银行信息
-    queryCusBankSignBank().then((res) => {
-        const firstData = res.data[0]
-        if (firstData) {
-            cusBank.value = firstData
-            /// 不为空 入金取 318 出金取 319
-            const time = getSystemParamValue(extendbiztype === 2 ? '318' : '319') ?? ''
-            endTime.value = time != '' ? time : endTime.value
-            /// 查询配置信息
-            queryBankCusBankExtendConfigs({
-                data: {
-                    cusbankid: firstData.cusbankid,
-                    extendbiztype: extendbiztype
-                },
-            }).then((res) => {
-                configs.value = res.data.map(obj => ({
-                    ...obj,
-                    value: obj.fieldcode === 'legal_name' ? (useStore.userInfo?.legalpersonname ?? '') : ''
-                }))
+    const banAccountSign = shallowRef<Model.BankAccountSignRsp>()
+    
+    /// 判断是否有签约信息 有就做修改
+    queryBankAccountSign().then((res) => {
+        if (res.data.length != 0) {
+            banAccountSign.value = res.data.filter(obj => {
+                return ![SignStatus.Rescinded].includes(obj.signstatus)
+            })[0]
+            // 查询托管银行信息
+            queryCusBankSignBank().then((res) => {
+                if (banAccountSign.value) {
+                    cusBank.value = res.data.filter(e => e.cusbankid === banAccountSign.value?.cusbankid)[0] ?? {}
+                } else {
+                    cusBank.value = res.data[0]
+                }
+                console.log(res)
+                if (cusBank.value) {
+                    /// 不为空 入金取 318 出金取 319
+                    const time = getSystemParamValue(extendbiztype === 2 ? '318' : '319') ?? ''
+                    endTime.value = time != '' ? time : endTime.value
+                    /// 查询配置信息
+                    queryBankCusBankExtendConfigs({
+                        data: {
+                            cusbankid: cusBank.value.cusbankid,
+                            extendbiztype: extendbiztype
+                        },
+                    }).then((res) => {
+                        configs.value = res.data.map(obj => ({
+                            ...obj,
+                            value: obj.fieldcode === 'legal_name' ? (useStore.userInfo?.legalpersonname ?? '') : ''
+                        }))
+                    })
+                }
             })
         }
     })

+ 53 - 11
src/packages/tss/views/bank/wallet/components/deposit/Index.vue

@@ -32,18 +32,20 @@
                 <Cell v-if="sign.ismix === 0" :title="$t('banksign.wallet.withdraw.bankname')" :value="handleNoneValue(sign.bankname)" />
                 <Cell v-if="sign.ismix === 0" :title="$t('banksign.wallet.withdraw.bankaccountno')"
                     :value="handleNoneValue(sign.bankaccountno)" />
-                <Field v-if="sign.ismix === 1" label="银行渠道" name="channel_code" is-link >
+                <Field v-if="sign.ismix === 1" :label="$t('banksign.bankchannel')" name="channel_code" is-link >
                     <template #input>
                         <app-select v-model="channel_code" :options="hybrids"
                             :optionProps="{ label: 'channel_name', value: 'channel_code' }" @confirm="onHibirdChange"/>
                     </template>
                 </Field>
-                <Field v-if="sign.ismix === 1 && bank_code != ''" label="银行名称" name="bank_code" is-link >
+                <Field v-if="sign.ismix === 1" :label="$t('banksign.banktype')" name="method_type" is-link >
                     <template #input>
-                        <app-select v-model="bank_code" :options="channel_banks"
-                            :optionProps="{ label: 'bank_name', value: 'bank_code' }" />
+                        <app-select v-model="method_type" :options="methodTypes" @confirm="onMethodTypeChange"/>
                     </template>
                 </Field>
+                <Field v-if="sign.ismix === 1 && channel_banks.length != 0" :label="$t('banksign.bankname1')" 
+                    :placeholder="$t('banksign.Pleaseselectyourbank')" name="bank_code" v-model="hyBankName"
+                    @click-input="showSelect = true" :rules="formRules.hyBankName" is-link />
             </CellGroup>
             <CellGroup>
                 <Cell :title="$t('banksign.wallet.deposit.platformdepositbankname')" v-if="msg_320">
@@ -85,14 +87,15 @@
             </div>
         </template>
         <component ref="componentRef" :is="componentMap.get(componentId)" @closed="closeComponent" v-if="componentId" />
+        <SelectBank v-model:show="showSelect" :data-list="channel_banks" @change="onSelectBankChange" />
     </app-view>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, ref, defineAsyncComponent, onMounted } from 'vue'
+import { shallowRef, ref, defineAsyncComponent, onMounted, computed } from 'vue'
 import { Form, Field, Cell, CellGroup, Button, FieldRule, FormInstance, RadioGroup, Radio, showToast, showFailToast } from 'vant'
 import { fullloading, dialog } from '@/utils/vant'
-import { useDoDeposit, useDoCusBankExtendConfigs } from '@/business/bank'
+import { useDoDeposit, useDoCusBankExtendConfigs, getMethodTypeKeys } from '@/business/bank'
 import { getServerTime } from '@/services/api/common'
 import { useUserStore, useAccountStore, i18n } from '@/stores'
 import { useComponent } from '@/hooks/component'
@@ -102,7 +105,7 @@ import AppSelect from '@mobile/components/base/select/index.vue'
 import moment from 'moment'
 
 const formRef = shallowRef<FormInstance>()
-const { formData, onSubmit, sign, hybrids, channel_code, bank_code, channel_banks } = useDoDeposit()
+const { formData, onSubmit, sign, hybrids, channel_code, bank_code, method_type, method_types, channel_banks } = useDoDeposit()
 const { getSystemParamValue } = useUserStore()
 const { configs, cusBank, startTime, endTime } = useDoCusBankExtendConfigs(2)
 const certificate_photo_url = ref('')
@@ -119,6 +122,17 @@ const msg_322 = getSystemParamValue('322')
 const msg_323 = getSystemParamValue('323')
 const msg_324 = getSystemParamValue('324')
 
+const hyBankName = shallowRef('')
+// 弹出客户选择界面
+const showSelect = shallowRef(false) 
+// 选择银行
+const SelectBank = defineAsyncComponent(() => import('../hybank/Index.vue'))
+
+const onSelectBankChange = (item: Model.HybridBank) => {
+    hyBankName.value = item.bank_name
+    bank_code.value = item.bank_code
+}
+
 const componentMap = new Map<string, unknown>([
     ['inoutapply', defineAsyncComponent(() => import('../inoutapply/Index.vue'))], // 申请流水
 ])
@@ -133,11 +147,35 @@ const onRadioChange = (value: number) => {
     formData.Amount = value
 }
 
+const methodTypes = computed(() => {
+    return method_types.value.map(e => { return { label: e, value: e } })
+})
+
 const onHibirdChange = (code: string) => {
-    // 银行信息
-    channel_banks.value = hybrids.value.find(e => e.channel_code === code)?.bank_infos.filter(e => e.out_in_flag === 1 && e.is_enabled === 1) ?? []
-    // 默认选中第一个
-    if(channel_banks.value.length) { bank_code.value = channel_banks.value[0].bank_code ?? '' }
+    // 默认选择第一个下面的银行类型
+    const hybird = hybrids.value.filter(e => e.channel_code === code)[0]
+    method_types.value = getMethodTypeKeys(hybird.in_bank_infos)
+    if (method_types.value.length != 0) {
+        method_type.value = method_types.value[0]
+        // 默认去下面的银行信息
+        channel_banks.value = hybird.in_bank_infos[method_type.value]
+        if (channel_banks.value.length != 0) {
+            bank_code.value = channel_banks.value[0].bank_code
+            hyBankName.value = channel_banks.value[0].bank_name
+        }
+    }
+}
+
+const onMethodTypeChange = (code: string) => {
+    // 默认选择第一个下面的银行类型
+    const hybird = hybrids.value.filter(e => e.channel_code === channel_code.value)[0]
+    bank_code.value = ''
+    hyBankName.value = ''
+    channel_banks.value = hybird.in_bank_infos[code]
+    if (channel_banks.value.length != 0) {
+        bank_code.value = channel_banks.value[0].bank_code
+        hyBankName.value = channel_banks.value[0].bank_name
+    }
 }
 
 // 表单验证规则
@@ -153,6 +191,10 @@ const formRules: { [key: string]: FieldRule[] } = {
             const ismandatory = Number(getSystemParamValue('316'))
             return ismandatory === 0 ? true : !!certificate_photo_url.value
         }
+    }],
+    hyBankName: [{
+        message: t('banksign.Pleaseselectyourbank'),
+        required: true
     }]
 }
 

+ 68 - 0
src/packages/tss/views/bank/wallet/components/hybank/Index.vue

@@ -0,0 +1,68 @@
+<template>
+    <app-modal direction="right-top" height="100%" width="100%" v-model:show="showModal">
+        <app-view class="g-form">
+            <template #header>
+                <app-navbar :title="$t('banksign.tips14')">
+                    <template #footer>
+                        <Form action="/">
+                            <Search :placeholder="$t('banksign.tips15')" v-model="keyword" />
+                        </Form>
+                    </template>
+                </app-navbar>
+            </template>
+            <RadioGroup v-model="checked" style="padding-bottom: 50px;" v-if="bankList.length">
+                <CellGroup :title="$t('banksign.tips15')">
+                    <template v-for="(item, index) in bankList" :key="index">
+                        <Cell :title="item.bank_name" :label="item.bank_code" clickable @click="onChange(item)">
+                            <template #icon>
+                                <Radio :name="item" style="padding: 0 10px;" />
+                            </template>
+                        </Cell>
+                    </template>
+                </CellGroup>
+            </RadioGroup>
+            <Empty :description="$t('banksign.search.nodatas')" v-else />
+        </app-view>
+    </app-modal>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef, computed, toRaw, PropType } from 'vue'
+import { Form, Search, Empty, Cell, CellGroup, RadioGroup, Radio } from 'vant'
+import AppModal from '@/components/base/modal/index.vue'
+
+const props = defineProps({
+    show: {
+        type: Boolean,
+        default: false
+    },
+    dataList: {
+        type: Array as PropType<Model.HybridBank[]>,
+        default: () => []
+    }
+})
+
+const emit = defineEmits(['update:show', 'change'])
+const keyword = shallowRef('')
+const checked = shallowRef<Model.HybridBank>()
+
+const showModal = computed({
+    get: () => props.show,
+    set: (val) => emit('update:show', val)
+})
+
+const bankList = computed(() => {
+    const filteredList = props.dataList.filter(e => {
+        const a = e.bank_name.toLowerCase()
+        const b = keyword.value.toLowerCase()
+        return !b || a.includes(b)
+    })
+    return filteredList.slice(0, 30)
+})
+
+const onChange = (item: Model.HybridBank) => {
+    checked.value = item
+    showModal.value = false
+    emit('change', toRaw(item))
+}
+</script>

+ 67 - 18
src/packages/tss/views/bank/wallet/components/withdraw/Index.vue

@@ -25,22 +25,26 @@
                 <Cell v-if="sign.ismix === 0" :title="$t('banksign.wallet.withdraw.bankaccountname')" :value="handleNoneValue(sign.bankaccountname)" />
                 <Cell v-if="sign.ismix === 0" :title="$t('banksign.wallet.withdraw.bankname')" :value="handleNoneValue(sign.bankname)" />
                 <Cell v-if="sign.ismix === 0" :title="$t('banksign.wallet.withdraw.bankaccountno')" :value="handleNoneValue(sign.bankaccountno)" />
-                <Field v-if="sign.ismix === 1" name="bankaccountname" :label="$t('banksign.wallet.withdraw.bankaccountname')" v-model.trim="sign.bankaccountname" @click="showReciver = true" is-link readonly />
-                <Field v-if="sign.ismix === 1" type="number" name="phone_number" label="电话号码" maxlength="30" v-model.trim="onboard.phone_number" :placeholder="$t('banksign.Pleaseenterbankaccountno')"
-                        :rules="formRules.phone_number" />
-                <Field v-if="sign.ismix === 1" type="number" name="cert_no" label="证件号码" maxlength="30" v-model.trim="onboard.cert_no" placeholder="请输入证件号码" :rules="formRules.cert_no" />
-                <Field v-if="sign.ismix === 1" label="银行渠道" name="channel_code" is-link >
+                <Field v-if="sign.ismix === 1" name="bankaccountname" :label="$t('banksign.wallet.withdraw.bankaccountname')" 
+                    v-model.trim="sign.bankaccountname" @click="showReciver = true" is-link readonly />
+                <Field v-if="sign.ismix === 1" type="number" name="phone_number" :label="$t('banksign.mobilephone')" maxlength="30" v-model.trim="onboard.phone_number" :placeholder="$t('banksign.Pleaseenteryourmobilephonenumber')"
+                    :rules="formRules.phone_number" />
+                <Field v-if="sign.ismix === 1" type="number" name="cert_no" :label="$t('banksign.cardno')" maxlength="30" v-model.trim="onboard.cert_no" :placeholder="$t('user.authentication.pleaseenterthecardnum')" :rules="formRules.cert_no" />
+                <Field v-if="sign.ismix === 1" :label="$t('banksign.bankchannel')" name="channel_code" is-link >
                     <template #input>
                         <app-select v-model="channel_code" :options="hybrids" :optionProps="{ label: 'channel_name', value: 'channel_code' }" 
                           @confirm="onHibirdChange"/>
                     </template>
                 </Field>
-                <Field v-if="sign.ismix === 1 && channel_banks.length != 0" label="银行名称" name="bank_code" is-link >
+                <Field v-if="sign.ismix === 1" :label="$t('banksign.banktype')" name="method_type" is-link >
                     <template #input>
-                        <app-select v-model="bank_code" :options="channel_banks" :optionProps="{ label: 'bank_name', value: 'bank_code' }" />
+                        <app-select v-model="method_type" :options="methodTypes" @confirm="onMethodTypeChange"/>
                     </template>
                 </Field>
-                <Field v-if="sign.ismix === 1" type="number" name="bank_account" label="银行卡号" maxlength="30" v-model.trim="onboard.bank_account" :placeholder="$t('banksign.Pleaseenterbankaccountno')"
+                <Field v-if="sign.ismix === 1 && channel_banks.length != 0" :label="$t('banksign.bankname1')" 
+                    :placeholder="$t('banksign.Pleaseselectyourbank')" name="bank_code" v-model="hyBankName" 
+                    @click-input="showSelect = true" :rules="formRules.hyBankName" is-link />
+                <Field v-if="sign.ismix === 1" type="number" name="bank_account" :label="$t('banksign.bankno')" maxlength="30" v-model.trim="onboard.bank_account" :placeholder="$t('banksign.Pleaseenterbankaccountno')"
                         :rules="formRules.bank_account" />
             </CellGroup>
             <CellGroup v-if="msg_317">
@@ -69,13 +73,14 @@
         </template>
     </app-view>
     <component :is="Reciver" v-model:show="showReciver" @change="onChange" />
+    <SelectBank v-model:show="showSelect" :data-list="channel_banks" @change="onSelectBankChange" />
 </template>
 
 <script lang="ts" setup>
-import { reactive, shallowRef, defineAsyncComponent } from 'vue'
+import { reactive, shallowRef, defineAsyncComponent, computed } from 'vue'
 import { Form, Field, Cell, CellGroup, FormInstance, Button, FieldRule } from 'vant'
 import { fullloading, dialog, } from '@/utils/vant'
-import { useDoWithdraw, useAccountFundInfo, useDoCusBankExtendConfigs } from '@/business/bank'
+import { useDoWithdraw, useAccountFundInfo, useDoCusBankExtendConfigs, getMethodTypeKeys } from '@/business/bank'
 import { getServerTime } from '@/services/api/common'
 import { useNavigation } from '@mobile/router/navigation'
 import { useUserStore, i18n } from '@/stores'
@@ -83,7 +88,7 @@ import { handleNoneValue } from '@/filters'
 import moment from 'moment'
 import AppSelect from '@mobile/components/base/select/index.vue'
 
-const { formData, onSubmit, sign, hybrids, channel_code, bank_code, channel_banks } = useDoWithdraw()
+const { formData, onSubmit, sign, hybrids, channel_code, bank_code, method_type, method_types, channel_banks } = useDoWithdraw()
 const { configs, cusBank, startTime, endTime } = useDoCusBankExtendConfigs(3)
 
 /// 资金账户信息
@@ -101,10 +106,25 @@ const { userinfotype } = userStore.userInfo
 const showReciver = shallowRef(false)
 const Reciver = defineAsyncComponent(() => import('./reciver/Index.vue'))
 
+const hyBankName = shallowRef('')
+// 弹出客户选择界面
+const showSelect = shallowRef(false) 
+// 选择银行
+const SelectBank = defineAsyncComponent(() => import('../hybank/Index.vue'))
+
 const onboard = reactive<Partial<Model.HybridReceiverOnboard>>({
     receiver_type: userinfotype === 1 ? 'Individual' : 'Organization'
 })
 
+const methodTypes = computed(() => {
+    return method_types.value.map(e => { return { label: e, value: e } })
+})
+
+const onSelectBankChange = (item: Model.HybridBank) => {
+    hyBankName.value = item.bank_name
+    bank_code.value = item.bank_code
+}
+
 // 选择接收人信息
 const onChange = (item: Model.HybridReceiverOnboard) => {
     channel_code.value = item.channel_code
@@ -113,13 +133,38 @@ const onChange = (item: Model.HybridReceiverOnboard) => {
     onboard.bank_account = item.bank_account
     showReciver.value = false
     // 切换银行
-    onHibirdChange(item.channel_code)
+    const hybird = hybrids.value.filter(e => e.channel_code === item.channel_code)[0]
+    method_types.value = getMethodTypeKeys(hybird.out_bank_infos)
+    method_type.value = item.method_type
+    // 默认去下面的银行信息
+    channel_banks.value = hybird.out_bank_infos[method_type.value]
+    // 获取信息
+    hyBankName.value = item.bank_name
+    bank_code.value = item.bank_code
 }
 
 const onHibirdChange = (code: string) => {
-    channel_banks.value = hybrids.value.find(e => e.channel_code === code)?.bank_infos.filter(e => e.out_in_flag === 0 && e.is_enabled === 1) ?? []
-    if(channel_banks.value.length && bank_code.value) {
-        bank_code.value = channel_banks.value[0].bank_code ?? ''
+    // 默认选择第一个下面的银行类型
+    const hybird = hybrids.value.filter(e => e.channel_code === code)[0]
+    method_types.value = getMethodTypeKeys(hybird.out_bank_infos)
+    if (method_types.value.length != 0) {
+        method_type.value = method_types.value[0]
+        // 默认去下面的银行信息
+        channel_banks.value = hybird.out_bank_infos[method_type.value]
+        if (channel_banks.value.length != 0) {
+            bank_code.value = channel_banks.value[0].bank_code
+            hyBankName.value = channel_banks.value[0].bank_name
+        }
+    }
+}
+
+const onMethodTypeChange = (code: string) => {
+    // 默认选择第一个下面的银行类型
+    const hybird = hybrids.value.filter(e => e.channel_code === channel_code.value)[0]
+    channel_banks.value = hybird.out_bank_infos[code]
+    if (channel_banks.value.length != 0) {
+        bank_code.value = channel_banks.value[0].bank_code
+        hyBankName.value = channel_banks.value[0].bank_name
     }
 }
 
@@ -140,15 +185,19 @@ const formRules: { [key: string]: FieldRule[] } = {
     }],
     cert_no: [{
         required: true,
-        message: '请输入证件号码',
+        message: t('user.authentication.pleaseenterthecardnum'),
     }],
     phone_number: [{
         required: true,
-        message: '请输入电话号码',
+        message: t('banksign.Pleaseenteryourmobilephonenumber'),
     }],
     bank_account: [{
         required: true,
-        message: '请输入银行卡号',
+        message: t('banksign.Pleaseenterbankno'),
+    }],
+    hyBankName: [{
+        message: t('banksign.Pleaseselectyourbank'),
+        required: true
     }]
 }
 

+ 7 - 7
src/packages/tss/views/bank/wallet/components/withdraw/reciver/Index.vue

@@ -2,7 +2,7 @@
     <app-modal direction="right-top" height="100%" width="100%">
         <app-view class="g-form">
             <template #header>
-                <app-navbar title="选择接收人信息" @back="closed" />
+                <app-navbar :title="$t('banksign.reciver.title')" @back="closed" />
             </template>
             <RadioGroup class="g-form__container" v-model="checkedRow" v-if="dataList.length">
                 <CellGroup v-for="(item, index) in dataList" :key="index" @click="onChange(item)" inset>
@@ -11,27 +11,27 @@
                             <Radio :name="item" checked-color="#ee0a24">
                                 <ul style="margin-left: 10px;">
                                     <li>
-                                        <span>接收人:</span>
+                                        <span>{{ $t('banksign.reciver.name') }}</span>
                                         <span>{{ item.name }}</span>
                                     </li>
                                     <li>
-                                        <span>电话号码:</span>
+                                        <span>{{ $t('banksign.reciver.phone_number') }}</span>
                                         <span>{{ item.phone_number }}</span>
                                     </li>
                                     <li>
-                                        <span>证件号码:</span>
+                                        <span>{{ $t('banksign.reciver.cert_no') }}</span>
                                         <span>{{ item.cert_no }}</span>
                                     </li>
                                     <li>
-                                        <span>接收银行:</span>
+                                        <span>{{ $t('banksign.reciver.bank_name') }}</span>
                                         <span>{{ item.bank_name }}</span>
                                     </li>
                                     <li>
-                                        <span>银行卡号:</span>
+                                        <span>{{ $t('banksign.reciver.bank_account') }}</span>
                                         <span>{{ item.bank_account }}</span>
                                     </li>
                                     <li>
-                                        <span>银行渠道:</span>
+                                        <span>{{ $t('banksign.reciver.channel_code') }}</span>
                                         <span>{{ item.channel_code }}</span>
                                     </li>
                                 </ul>

+ 7 - 1
src/types/model/bank.d.ts

@@ -570,13 +570,18 @@ declare namespace Model {
     }
 
     interface PaymentCenterHybridConfigs {
-        bank_infos: HybridBank[]
+        in_bank_infos: MethodType // 入金银行
+        out_bank_infos: MethodType // 出金银行
         can_amt_in: number   // 入金是否可用 0-不可用 1-可用
         can_amt_out: number  // 出金是否可用 0-不可用 1-可用
         channel_code: string // 渠道代码
         channel_name: string // 渠道名称
     }
 
+    interface MethodType {
+        [method_type: string]: HybridBank[]
+    }
+
     interface HybridBank {
         bank_code: string    // 银行代码
         bank_name: string    // 银行名称
@@ -596,6 +601,7 @@ declare namespace Model {
         channel_code: string // 渠道代码
         name: string // 名称 / 企业名称
         phone_number?: string // 电话号码
+        method_type: string // 方式类型
         receiver_type: string // 接收者类型 // 个人-Individual 企业-Organization
     }
 }