|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <ProDialog title="配置" v-model="visible" @close="onDialogClose" destroy-on-close draggable> | 
|---|
|  |  |  | <ProForm :model="form" ref="dialogForm" label-width="120px"> | 
|---|
|  |  |  | <ProFormItemV2 label="" prop="enterpriseConfigureType" label-width="0"> | 
|---|
|  |  |  | <ProFormRadio | 
|---|
|  |  |  | v-model="form.enterpriseConfigureType" | 
|---|
|  |  |  | :value-enum="EnterpriseConfigureTypeText" | 
|---|
|  |  |  | buttonStyle | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | <!-- <template v-if="form.enterpriseConfigureType === EnterpriseConfigureType.Bank"> | 
|---|
|  |  |  | <ProFormItemV2 label="开户总行:" prop="openBank"> | 
|---|
|  |  |  | <ProFormText | 
|---|
|  |  |  | v-model.trim="form.openBank" | 
|---|
|  |  |  | placeholder="请输入开户总行" | 
|---|
|  |  |  | :maxlength="40" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | <ProFormItemV2 label="开户支行:" prop="openBranchBank"> | 
|---|
|  |  |  | <ProFormText | 
|---|
|  |  |  | v-model.trim="form.openBranchBank" | 
|---|
|  |  |  | placeholder="请输入开户支行" | 
|---|
|  |  |  | :maxlength="40" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="银行账户:" | 
|---|
|  |  |  | prop="bankAccount" | 
|---|
|  |  |  | :check-rules="[ | 
|---|
|  |  |  | { message: '请输入银行账户' }, | 
|---|
|  |  |  | { message: '银行账户仅支持数字', pattern: BoleRegExp.RegNumber }, | 
|---|
|  |  |  | ]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormText v-model.trim="form.bankAccount" placeholder="请输入银行账户" /> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | <ProFormItemV2 label="银行账户:" prop="verifyStatus"> | 
|---|
|  |  |  | {{ VerifyStatusText[form.verifyStatus] }} | 
|---|
|  |  |  | <el-button style="margin-left: 10px" type="primary" link @click="handleCheckBankAccount" | 
|---|
|  |  |  | >校验</el-button | 
|---|
|  |  |  | > | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </template> --> | 
|---|
|  |  |  | <template v-if="form.enterpriseConfigureType === EnterpriseConfigureType.AliPay"> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="支付宝账号:" | 
|---|
|  |  |  | prop="alipayAccount" | 
|---|
|  |  |  | :checkRules="[{ message: '请输入支付宝账号' }]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <div style="display: flex; width: 100%"> | 
|---|
|  |  |  | <ProFormText v-model.trim="form.alipayAccount" placeholder="请输入支付宝账号"> | 
|---|
|  |  |  | </ProFormText> | 
|---|
|  |  |  | <el-button | 
|---|
|  |  |  | style="margin-left: 10px" | 
|---|
|  |  |  | type="primary" | 
|---|
|  |  |  | link | 
|---|
|  |  |  | @click="handleOpenEnterpriseWallet" | 
|---|
|  |  |  | >获取签约链接</el-button | 
|---|
|  |  |  | > | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | label="商户ID:" | 
|---|
|  |  |  | prop="alipayMerchantId" | 
|---|
|  |  |  | :checkRules="[{ message: '请输入商户ID' }]" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormText v-model.trim="form.alipayMerchantId" placeholder="请输入商户ID" /> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | <ProFormItemV2 label="签约状态:" prop="signStatus" required> | 
|---|
|  |  |  | <span>{{ EnumEnterpriseWalletSignStatusText[form.signStatus] }}</span> | 
|---|
|  |  |  | <el-button style="margin-left: 10px" type="primary" link @click="handleCheckBankAccount" | 
|---|
|  |  |  | >校验</el-button | 
|---|
|  |  |  | > | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | <ProFormItemV2 label="进件状态:" prop="expandindirectOrderStatus" required> | 
|---|
|  |  |  | <span>{{ | 
|---|
|  |  |  | EnumEnterpriseWalletExpandindirectOrderStatusText[form.expandindirectOrderStatus] | 
|---|
|  |  |  | }}</span> | 
|---|
|  |  |  | <el-button style="margin-left: 10px" type="primary" link @click="handleCheckBankAccount" | 
|---|
|  |  |  | >校验</el-button | 
|---|
|  |  |  | > | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <template v-if="form.enterpriseConfigureType === EnterpriseConfigureType.Electronic"> | 
|---|
|  |  |  | <div class="configure-dialog-form-title">通道配置</div> | 
|---|
|  |  |  | <ProFormItemV2 | 
|---|
|  |  |  | v-for="(item, index) in enabledElectronSignSettings" | 
|---|
|  |  |  | :label="item.accessName" | 
|---|
|  |  |  | :key="item.access" | 
|---|
|  |  |  | prop="electronSignAccesses" | 
|---|
|  |  |  | required | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <ProFormSwitch | 
|---|
|  |  |  | v-model="form.electronSignAccesses[index]" | 
|---|
|  |  |  | :active-value="Number(item.access)" | 
|---|
|  |  |  | :inactive-value="null" | 
|---|
|  |  |  | ></ProFormSwitch> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | <template v-if="form.enterpriseConfigureType === EnterpriseConfigureType.ShortMessage"> | 
|---|
|  |  |  | <div class="configure-dialog-form-title">通道配置</div> | 
|---|
|  |  |  | <ProFormItemV2 label="名称:" prop="smsAccess" :checkRules="[{ message: '请选择短信通道' }]"> | 
|---|
|  |  |  | <ProFormSelect | 
|---|
|  |  |  | v-model="form.smsAccess" | 
|---|
|  |  |  | :valueEnum="EnumSmsAccessText" | 
|---|
|  |  |  | placeholder="请选择短信通道" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | </ProFormSelect> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | <div class="configure-dialog-form-title">费用配置</div> | 
|---|
|  |  |  | <ProFormItemV2 label="短信费用:" prop="smsCost"> | 
|---|
|  |  |  | <ProFormInputNumber | 
|---|
|  |  |  | :controls="false" | 
|---|
|  |  |  | v-model="form.smsCost" | 
|---|
|  |  |  | placeholder="请输入" | 
|---|
|  |  |  | unit="元/条" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </ProFormItemV2> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </ProForm> | 
|---|
|  |  |  | <FieldRadio | 
|---|
|  |  |  | v-model="form.enterpriseConfigureType" | 
|---|
|  |  |  | :value-enum="EnterpriseConfigureTypeText" | 
|---|
|  |  |  | buttonStyle | 
|---|
|  |  |  | style="margin-bottom: 22px" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | <el-tabs v-model="form.enterpriseConfigureType" class="configure-dialog-tabs"> | 
|---|
|  |  |  | <el-tab-pane lazy :name="EnterpriseConfigureType.Bank"> | 
|---|
|  |  |  | <BankConfigureView :id="form.id" ref="bankConfigureViewRef" /> | 
|---|
|  |  |  | </el-tab-pane> | 
|---|
|  |  |  | <el-tab-pane lazy :name="EnterpriseConfigureType.AliPay"> | 
|---|
|  |  |  | <AliPayConfigureView :id="form.id" ref="aliPayConfigureViewRef" /> | 
|---|
|  |  |  | </el-tab-pane> | 
|---|
|  |  |  | <el-tab-pane lazy :name="EnterpriseConfigureType.Wechat"> | 
|---|
|  |  |  | <WechatConfigureView :id="form.id" ref="wechatConfigureViewRef" /> | 
|---|
|  |  |  | </el-tab-pane> | 
|---|
|  |  |  | <el-tab-pane lazy :name="EnterpriseConfigureType.Electronic"> | 
|---|
|  |  |  | <ElectronicConfigureView :id="form.id" ref="electronicConfigureViewRef" /> | 
|---|
|  |  |  | </el-tab-pane> | 
|---|
|  |  |  | <el-tab-pane lazy :name="EnterpriseConfigureType.ShortMessage"> | 
|---|
|  |  |  | <ShortMessageConfigureView :id="form.id" ref="shortMessageConfigureViewRef" /> | 
|---|
|  |  |  | </el-tab-pane> | 
|---|
|  |  |  | </el-tabs> | 
|---|
|  |  |  | <template #footer> | 
|---|
|  |  |  | <span class="dialog-footer"> | 
|---|
|  |  |  | <el-button @click="emit('onCancel')">取 消</el-button> | 
|---|
|  |  |  | 
|---|
|  |  |  | </span> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </ProDialog> | 
|---|
|  |  |  | <AlipayWalletOpen v-bind="dialogQrcodeProps"></AlipayWalletOpen> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script setup lang="ts"> | 
|---|
|  |  |  | import { FormInstance } from 'element-plus'; | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | ProDialog, | 
|---|
|  |  |  | ProForm, | 
|---|
|  |  |  | ProFormItemV2, | 
|---|
|  |  |  | ProFormText, | 
|---|
|  |  |  | ProFormRadio, | 
|---|
|  |  |  | ProFormInputNumber, | 
|---|
|  |  |  | ProFormSelect, | 
|---|
|  |  |  | ProFormSwitch, | 
|---|
|  |  |  | useFormDialog, | 
|---|
|  |  |  | } from '@bole-core/components'; | 
|---|
|  |  |  | import { BoleRegExp } from '@bole-core/core'; | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | EnterpriseConfigureType, | 
|---|
|  |  |  | EnterpriseConfigureTypeText, | 
|---|
|  |  |  | ChargeTypeEnum, | 
|---|
|  |  |  | EnumElectronSignAccessText, | 
|---|
|  |  |  | EnumSmsAccessText, | 
|---|
|  |  |  | EnumElectronSignAccess, | 
|---|
|  |  |  | EnumEnterpriseWalletSignStatusText, | 
|---|
|  |  |  | EnumEnterpriseWalletExpandindirectOrderStatusText, | 
|---|
|  |  |  | } from '@/constants'; | 
|---|
|  |  |  | import * as enterpriseWalletServices from '@/services/api/enterpriseWallet'; | 
|---|
|  |  |  | import AlipayWalletOpen from './AlipayWalletOpen.vue'; | 
|---|
|  |  |  | import { ProDialog, FieldRadio } from '@bole-core/components'; | 
|---|
|  |  |  | import { EnterpriseConfigureType, EnterpriseConfigureTypeText } from '@/constants'; | 
|---|
|  |  |  | import BankConfigureView from './BankConfigureView.vue'; | 
|---|
|  |  |  | import AliPayConfigureView from './AliPayConfigureView.vue'; | 
|---|
|  |  |  | import ElectronicConfigureView from './ElectronicConfigureView.vue'; | 
|---|
|  |  |  | import ShortMessageConfigureView from './ShortMessageConfigureView.vue'; | 
|---|
|  |  |  | import WechatConfigureView from './WechatConfigureView.vue'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | defineOptions({ | 
|---|
|  |  |  | name: 'ConfigureDialog', | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | type Form = { | 
|---|
|  |  |  | enterpriseConfigureType: EnterpriseConfigureType; | 
|---|
|  |  |  | // openBank: string; | 
|---|
|  |  |  | // openBranchBank: string; | 
|---|
|  |  |  | // bankAccount: string; | 
|---|
|  |  |  | // verifyStatus: VerifyStatus; | 
|---|
|  |  |  | electronSignAccesses: EnumElectronSignAccess[]; | 
|---|
|  |  |  | smsAccess: EnumSmsAccess; | 
|---|
|  |  |  | smsCost: number; | 
|---|
|  |  |  | alipayAccount: string; | 
|---|
|  |  |  | alipayMerchantId: string; | 
|---|
|  |  |  | id: string; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | signStatus: EnumEnterpriseWalletSignStatus; | 
|---|
|  |  |  | expandindirectOrderStatus: EnumEnterpriseWalletExpandindirectOrderStatus; | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const form = defineModel<Form>('form'); | 
|---|
|  |  |  | const visible = defineModel({ type: Boolean }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const emit = defineEmits<{ | 
|---|
|  |  |  | (e: 'onConfirm'): void; | 
|---|
|  |  |  | (e: 'onConfirm', value: any): void; | 
|---|
|  |  |  | (e: 'onCancel'): void; | 
|---|
|  |  |  | }>(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const dialogForm = ref<FormInstance>(); | 
|---|
|  |  |  | const bankConfigureViewRef = | 
|---|
|  |  |  | useTemplateRef<InstanceType<typeof BankConfigureView>>('bankConfigureViewRef'); | 
|---|
|  |  |  | const aliPayConfigureViewRef = | 
|---|
|  |  |  | useTemplateRef<InstanceType<typeof AliPayConfigureView>>('aliPayConfigureViewRef'); | 
|---|
|  |  |  | const electronicConfigureViewRef = useTemplateRef<InstanceType<typeof ElectronicConfigureView>>( | 
|---|
|  |  |  | 'electronicConfigureViewRef' | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | const shortMessageConfigureViewRef = useTemplateRef<InstanceType<typeof ShortMessageConfigureView>>( | 
|---|
|  |  |  | 'shortMessageConfigureViewRef' | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { enabledElectronSignSettings } = useEnabledElectronSignSettings(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | async function handleCheckBankAccount() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | let alipayWallet = await enterpriseWalletServices.getEnterpriseWallet({ | 
|---|
|  |  |  | enterpriseId: form.value.id, | 
|---|
|  |  |  | access: EnumEnterpriseWalletAccess.Alipay, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | if (alipayWallet) { | 
|---|
|  |  |  | form.value.signStatus = alipayWallet.signStatus; | 
|---|
|  |  |  | form.value.expandindirectOrderStatus = alipayWallet.expandindirectOrderStatus; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (error) {} | 
|---|
|  |  |  | } | 
|---|
|  |  |  | const wechatConfigureViewRef = | 
|---|
|  |  |  | useTemplateRef<InstanceType<typeof WechatConfigureView>>('wechatConfigureViewRef'); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function onDialogClose() { | 
|---|
|  |  |  | if (!dialogForm.value) return; | 
|---|
|  |  |  | dialogForm.value.resetFields(); | 
|---|
|  |  |  | // if (!dialogForm.value) return; | 
|---|
|  |  |  | // dialogForm.value.resetFields(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function handleConfirm() { | 
|---|
|  |  |  | if (!dialogForm.value) return; | 
|---|
|  |  |  | dialogForm.value.validate((valid) => { | 
|---|
|  |  |  | if (valid) { | 
|---|
|  |  |  | emit('onConfirm'); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { dialogProps: dialogQrcodeProps, handleAdd } = useFormDialog({ | 
|---|
|  |  |  | defaultFormParams: { | 
|---|
|  |  |  | alipayUrl: '', | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | async function handleOpenEnterpriseWallet() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if (!dialogForm.value) return; | 
|---|
|  |  |  | const valid = await dialogForm.value.validateField(['alipayAccount', 'alipayMerchantId']); | 
|---|
|  |  |  | if (valid) { | 
|---|
|  |  |  | openEnterpriseWallet(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (error) {} | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | async function openEnterpriseWallet() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | let params: API.OpenEnterpriseWalletCommand = { | 
|---|
|  |  |  | access: EnumEnterpriseWalletAccess.Alipay, | 
|---|
|  |  |  | enterpriseId: form.value.id, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | let res = await enterpriseWalletServices.openEnterpriseWallet(params); | 
|---|
|  |  |  | if (res) { | 
|---|
|  |  |  | handleAdd({ | 
|---|
|  |  |  | alipayUrl: res.signUrl, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (error) {} | 
|---|
|  |  |  | async function handleConfirm() { | 
|---|
|  |  |  | let res: any; | 
|---|
|  |  |  | if (form.value.enterpriseConfigureType === EnterpriseConfigureType.Bank) { | 
|---|
|  |  |  | res = await bankConfigureViewRef.value?.onConfirm(); | 
|---|
|  |  |  | } else if (form.value.enterpriseConfigureType === EnterpriseConfigureType.AliPay) { | 
|---|
|  |  |  | res = await aliPayConfigureViewRef.value?.onConfirm?.(); | 
|---|
|  |  |  | } else if (form.value.enterpriseConfigureType === EnterpriseConfigureType.Electronic) { | 
|---|
|  |  |  | res = await electronicConfigureViewRef.value?.onConfirm?.(); | 
|---|
|  |  |  | } else if (form.value.enterpriseConfigureType === EnterpriseConfigureType.ShortMessage) { | 
|---|
|  |  |  | res = await shortMessageConfigureViewRef.value?.onConfirm?.(); | 
|---|
|  |  |  | } else if (form.value.enterpriseConfigureType === EnterpriseConfigureType.Wechat) { | 
|---|
|  |  |  | res = await wechatConfigureViewRef.value?.onConfirm?.(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (res) { | 
|---|
|  |  |  | emit('onConfirm', res); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  | <style lang="scss" scoped> | 
|---|
|  |  |  | @use '@/style/common.scss' as *; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | .configure-dialog-form-title { | 
|---|
|  |  |  | margin-bottom: 10px; | 
|---|
|  |  |  | font-size: 15px; | 
|---|
|  |  |  | font-weight: bold; | 
|---|
|  |  |  | line-height: 36px; | 
|---|
|  |  |  | .configure-dialog-tabs { | 
|---|
|  |  |  | :deep() { | 
|---|
|  |  |  | .el-tabs__header { | 
|---|
|  |  |  | display: none; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|