From bb3b9d75c09472618f1aebd6f0080fea30969599 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期二, 23 九月 2025 14:25:09 +0800
Subject: [PATCH] fix: 企业配置

---
 src/views/EnterpriseManage/components/ConfigureDialog.vue           |  346 +++----------------
 src/views/EnterpriseManage/components/ElectronicConfigureView.vue   |   98 +++++
 src/services/api/typings.d.ts                                       |    4 
 src/views/EnterpriseManage/components/ShortMessageConfigureView.vue |   98 +++++
 src/views/EnterpriseManage/components/BankConfigureView.vue         |  101 +++++
 src/constants/enterprise.ts                                         |    4 
 src/views/EnterpriseManage/EnterpriseManageList.vue                 |  165 --------
 src/views/EnterpriseManage/components/AliPayConfigureView.vue       |  231 ++++++++++++
 8 files changed, 602 insertions(+), 445 deletions(-)

diff --git a/src/constants/enterprise.ts b/src/constants/enterprise.ts
index 636974c..167088d 100644
--- a/src/constants/enterprise.ts
+++ b/src/constants/enterprise.ts
@@ -23,8 +23,8 @@
 }
 
 export const EnterpriseConfigureTypeText = {
-  // [EnterpriseConfigureType.Bank]: '閾惰淇℃伅閰嶇疆',
-  [EnterpriseConfigureType.AliPay]: '鏀粯淇℃伅閰嶇疆',
+  [EnterpriseConfigureType.Bank]: '閾惰淇℃伅閰嶇疆',
+  [EnterpriseConfigureType.AliPay]: '鏀粯瀹濋厤缃�',
   [EnterpriseConfigureType.Electronic]: '鐢靛瓙绛鹃厤缃�',
   [EnterpriseConfigureType.ShortMessage]: '鐭俊閫氶亾閰嶇疆',
 };
diff --git a/src/services/api/typings.d.ts b/src/services/api/typings.d.ts
index 0ada393..737d081 100644
--- a/src/services/api/typings.d.ts
+++ b/src/services/api/typings.d.ts
@@ -3455,6 +3455,10 @@
     /** 鍗忚澶辨晥鏃堕棿 */
     invalidTime?: string;
     signStatus?: EnumEnterpriseWalletSignStatus;
+    /** 鎵�灞為摱琛� */
+    bank?: string;
+    /** 鎵�灞炴敮琛� */
+    bankBranch?: string;
     /** 鏀粯瀹濆鍚� */
     name?: string;
     /** 鏀粯瀹濈櫥褰曡处鍙� */
diff --git a/src/views/EnterpriseManage/EnterpriseManageList.vue b/src/views/EnterpriseManage/EnterpriseManageList.vue
index 1c28138..9df9afe 100644
--- a/src/views/EnterpriseManage/EnterpriseManageList.vue
+++ b/src/views/EnterpriseManage/EnterpriseManageList.vue
@@ -47,10 +47,8 @@
   LoadingLayout,
   AppContainer,
   QueryFilterItem,
-  useTable,
   useFormDialog,
   FieldRadio,
-  UploadUserFile,
   useTableV2,
 } from '@bole-core/components';
 import { useAccess, useGlobalEventContext } from '@/hooks';
@@ -58,8 +56,6 @@
 import ConfigureDialog from './components/ConfigureDialog.vue';
 import { Message } from '@bole-core/core';
 import * as enterpriseServices from '@/services/api/enterprise';
-import * as enterpriseWalletServices from '@/services/api/enterpriseWallet';
-import { convertWalletApiToFiles, convertWalletFilesToApi } from '@/utils';
 
 defineOptions({
   name: 'EnterpriseManageList',
@@ -86,8 +82,6 @@
 });
 
 const router = useRouter();
-
-const { invalidateQueries } = useEnabledElectronSignSettings();
 
 const {
   getDataSource: getList,
@@ -131,165 +125,26 @@
   }
 );
 
-async function getEnterpriseElectronSignSetting(id: string) {
-  return await enterpriseServices.getEnterpriseElectronSignSetting({ id: id });
+function openDialog(row?: API.GetEnterprisesQueryResultItem) {
+  handleEdit({
+    id: row.id,
+    enterpriseConfigureType: EnterpriseConfigureType.Bank,
+  });
 }
 
-async function getEnterpriseSmsSetting(id: string) {
-  return await enterpriseServices.getEnterpriseSmsSetting({ id: id });
-}
-
-const EnumElectronSignAccessList = computed(() =>
-  Object.values(EnumElectronSignAccess)
-    .filter(Number)
-    .map((x) => Number(x))
-);
-
-async function openDialog(row?: API.GetEnterprisesQueryResultItem) {
-  try {
-    if (row) {
-      let electronSignSetting = await getEnterpriseElectronSignSetting(row.id);
-      let smsSetting = await getEnterpriseSmsSetting(row.id);
-      let alipayWallet = await enterpriseWalletServices.getEnterpriseWallet({
-        enterpriseId: row.id,
-        access: EnumEnterpriseWalletAccess.Alipay,
-      });
-      handleEdit({
-        id: row.id,
-        enterpriseConfigureType: EnterpriseConfigureType.AliPay,
-        electronSignAccesses: EnumElectronSignAccessList.value.map((value) =>
-          electronSignSetting.electronSignAccesses.includes(value) ? value : null
-        ),
-        smsAccess: smsSetting.smsAccess,
-        smsCost: smsSetting.smsCost,
-        alipayAccount: alipayWallet.identity,
-        alipayMerchantId: alipayWallet.code,
-        signStatus: alipayWallet.signStatus,
-        expandindirectOrderStatus: alipayWallet.expandindirectOrderStatus,
-
-        name: alipayWallet.name,
-        scene: alipayWallet.scene || EnumEnterpriseWalletExpandindirectOrderScene.YONGJIN_BAOCHOU,
-        sceneDirections: alipayWallet.sceneDirections,
-        sceneFiles: convertWalletApiToFiles(
-          alipayWallet.files,
-          EnumEnterpriseWalletExpandindirectOrderFileType.Scene
-        ),
-        sceneQualificationFiles: convertWalletApiToFiles(
-          alipayWallet.files,
-          EnumEnterpriseWalletExpandindirectOrderFileType.SceneQualification
-        ),
-      });
-    } else {
-      handleAdd({
-        enterpriseConfigureType: EnterpriseConfigureType.AliPay,
-      });
-    }
-  } catch (error) {}
-}
-
-const { dialogProps, handleAdd, handleEdit, editForm, dialogState } = useFormDialog({
+const { dialogProps, handleEdit, dialogState } = useFormDialog({
   onConfirm: handleAddOrEdit,
   defaultFormParams: {
     id: '',
-    enterpriseConfigureType: EnterpriseConfigureType.AliPay,
-    electronSignAccesses: [] as EnumElectronSignAccess[],
-    smsAccess: '' as any as EnumSmsAccess,
-    smsCost: 0,
-    alipayAccount: '',
-    alipayMerchantId: '',
-    signStatus: '' as any as EnumEnterpriseWalletSignStatus,
-    expandindirectOrderStatus: '' as any as EnumEnterpriseWalletExpandindirectOrderStatus,
-
-    name: '',
-    scene: '' as any as EnumEnterpriseWalletExpandindirectOrderScene,
-    sceneDirections: '',
-    /**杞处鍦烘櫙鎴浘 */
-    sceneFiles: [] as UploadUserFile[],
-    /**鍟嗘埛琛屼笟璧勮川鍥剧墖鎴栧崗璁枃鏈� */
-    sceneQualificationFiles: [] as UploadUserFile[],
+    enterpriseConfigureType: EnterpriseConfigureType.Bank,
   },
 });
 
 async function handleAddOrEdit() {
   try {
-    let res;
-    // if (type === EnterpriseConfigureType.Bank) {
-    //   res = await createOrEditFlexEnterpriseBankSetting();
-    // }
-    if (editForm.enterpriseConfigureType === EnterpriseConfigureType.Electronic) {
-      res = await createOrEditFlexEnterpriseSignSetting();
-    }
-    if (editForm.enterpriseConfigureType === EnterpriseConfigureType.ShortMessage) {
-      res = await createOrEditFlexEnterpriseMessageSetting();
-    }
-    if (editForm.enterpriseConfigureType === EnterpriseConfigureType.AliPay) {
-      res = await enterpriseWalletExpandindirectCreate();
-    }
-    if (res) {
-      Message.successMessage('鎿嶄綔鎴愬姛');
-      getList(paginationState.pageIndex);
-      dialogState.dialogVisible = false;
-    }
-  } catch (error) {}
-}
-
-async function enterpriseWalletExpandindirectCreate() {
-  try {
-    let params: API.EnterpriseWalletExpandindirectCreateCommand = {
-      enterpriseId: editForm.id,
-      identity: editForm.alipayAccount,
-      name: editForm.name,
-      scene: editForm.scene,
-      sceneDirections: editForm.sceneDirections,
-      sitesInfo: null,
-      files: [
-        ...convertWalletFilesToApi(
-          editForm.sceneFiles,
-          EnumEnterpriseWalletExpandindirectOrderFileType.Scene
-        ),
-        ...convertWalletFilesToApi(
-          editForm.sceneQualificationFiles,
-          EnumEnterpriseWalletExpandindirectOrderFileType.SceneQualification
-        ),
-      ],
-    };
-    return await enterpriseWalletServices.enterpriseWalletExpandindirectCreate(params);
-  } catch (error) {}
-}
-
-// async function createOrEditFlexEnterpriseBankSetting() {
-//   try {
-//     let params: API.CreateOrEditFlexEnterpriseBankInput = {
-//       id: editForm.id,
-//       openBank: editForm.openBank,
-//       openBranchBank: editForm.openBranchBank,
-//       bankAccount: editForm.bankAccount,
-//       verifyStatus: editForm.verifyStatus,
-//       flexEnterpirseId: editForm.flexEnterpirseId,
-//     };
-//     return await flexEnterpriseServices.createOrEditFlexEnterpriseBankSetting(params);
-//   } catch (error) {}
-// }
-
-async function createOrEditFlexEnterpriseSignSetting() {
-  try {
-    let params: API.SetEnterpriseElectronSignSettingCommand = {
-      id: editForm.id,
-      electronSignAccesses: editForm.electronSignAccesses.filter(Boolean),
-    };
-    let res = await enterpriseServices.setEnterpriseElectronSignSetting(params);
-    invalidateQueries();
-    return res;
-  } catch (error) {}
-}
-async function createOrEditFlexEnterpriseMessageSetting() {
-  try {
-    let params: API.SetEnterpriseSmsSettingCommand = {
-      id: editForm.id,
-      smsAccess: editForm.smsAccess,
-      smsCost: editForm.smsCost,
-    };
-    return await enterpriseServices.setEnterpriseSmsSetting(params);
+    Message.successMessage('鎿嶄綔鎴愬姛');
+    getList(paginationState.pageIndex);
+    dialogState.dialogVisible = false;
   } catch (error) {}
 }
 
diff --git a/src/views/EnterpriseManage/components/AliPayConfigureView.vue b/src/views/EnterpriseManage/components/AliPayConfigureView.vue
new file mode 100644
index 0000000..adfc111
--- /dev/null
+++ b/src/views/EnterpriseManage/components/AliPayConfigureView.vue
@@ -0,0 +1,231 @@
+<template>
+  <LoadingLayout :loading="isLoading">
+    <ProForm :model="form" ref="dialogForm" label-width="120px">
+      <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="openEnterpriseWallet"
+            >鑾峰彇绛剧害閾炬帴</el-button
+          >
+        </div>
+      </ProFormItemV2>
+      <ProFormItemV2
+        label="鏀粯瀹濆鍚�:"
+        prop="name"
+        :checkRules="[{ message: '璇疯緭鍏ユ敮浠樺疂濮撳悕' }]"
+      >
+        <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ユ敮浠樺疂濮撳悕" />
+      </ProFormItemV2>
+      <ProFormItemV2
+        label="鍟嗘埛ID:"
+        prop="alipayMerchantId"
+        :checkRules="[{ message: '璇疯緭鍏ュ晢鎴稩D' }]"
+      >
+        <ProFormText v-model.trim="form.alipayMerchantId" placeholder="璇疯緭鍏ュ晢鎴稩D" disabled />
+      </ProFormItemV2>
+      <ProFormItemV2 label="涓氬姟鍦烘櫙:" prop="scene" :checkRules="[{ message: '璇烽�夋嫨涓氬姟鍦烘櫙' }]">
+        <ProFormSelect
+          v-model="form.scene"
+          :valueEnum="EnumEnterpriseWalletExpandindirectOrderSceneText"
+          placeholder="璇烽�夋嫨涓氬姟鍦烘櫙"
+        >
+        </ProFormSelect>
+      </ProFormItemV2>
+      <ProFormItemV2
+        label="鍦烘櫙鎻忚堪:"
+        prop="sceneDirections"
+        :checkRules="[{ message: '璇疯緭鍏ュ満鏅弿杩�' }]"
+      >
+        <ProFormText
+          v-model.trim="form.sceneDirections"
+          placeholder="璋�/閫氳繃浠�涔堝獟浠嬶紙APP/web/灏忕▼搴�)/涓昏涓鸿皝鎻愪緵浠�涔堟湇鍔�/鐢ㄤ簬鍦ㄤ粈涔堝満鏅粰浠�涔堜汉缇よ浆璐�"
+        />
+      </ProFormItemV2>
+      <ProFormItemV2
+        label="杞处鍦烘櫙鎴浘:"
+        prop="sceneFiles"
+        :check-rules="[{ type: 'upload', message: '璇蜂笂浼犺浆璐﹀満鏅埅鍥�' }]"
+      >
+        <ProFormUpload
+          v-model:file-url="form.sceneFiles"
+          :limit="5"
+          :limitFileSize="10"
+          accept="png,jpg,jpeg,pdf"
+        ></ProFormUpload>
+      </ProFormItemV2>
+      <ProFormItemV2
+        label="璧勮川鏂囦欢:"
+        prop="sceneQualificationFiles"
+        :check-rules="[{ type: 'upload', message: '璇蜂笂浼犺祫璐ㄦ枃浠�' }]"
+      >
+        <ProFormUpload
+          v-model:file-url="form.sceneQualificationFiles"
+          :limit="5"
+          :limitFileSize="10"
+          accept="png,jpg,jpeg,pdf"
+        ></ProFormUpload>
+      </ProFormItemV2>
+      <ProFormItemV2 label="绛剧害鐘舵��:" prop="signStatus" required>
+        <span>{{ EnumEnterpriseWalletSignStatusText[form.signStatus] }}</span>
+        <el-button
+          style="margin-left: 10px"
+          type="primary"
+          link
+          @click="refetch({ type: 'inactive' })"
+          >鏍¢獙</el-button
+        >
+      </ProFormItemV2>
+      <ProFormItemV2 label="杩涗欢鐘舵��:" prop="expandindirectOrderStatus" required>
+        <span>{{
+          EnumEnterpriseWalletExpandindirectOrderStatusText[form.expandindirectOrderStatus]
+        }}</span>
+        <el-button
+          style="margin-left: 10px"
+          type="primary"
+          link
+          @click="refetch({ type: 'inactive' })"
+          >鏍¢獙</el-button
+        >
+      </ProFormItemV2>
+    </ProForm>
+    <AlipayWalletOpen v-bind="dialogQrcodeProps"></AlipayWalletOpen>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import { FormInstance } from 'element-plus';
+import {
+  ProForm,
+  ProFormItemV2,
+  ProFormText,
+  LoadingLayout,
+  UploadUserFile,
+  ProFormSelect,
+  ProFormUpload,
+  useFormDialog,
+} from '@bole-core/components';
+import * as enterpriseWalletServices from '@/services/api/enterpriseWallet';
+import { useQuery } from '@tanstack/vue-query';
+import {
+  EnumEnterpriseWalletExpandindirectOrderSceneText,
+  EnumEnterpriseWalletSignStatusText,
+  EnumEnterpriseWalletExpandindirectOrderStatusText,
+} from '@/constants';
+import { convertWalletApiToFiles, convertWalletFilesToApi } from '@/utils';
+import AlipayWalletOpen from './AlipayWalletOpen.vue';
+
+defineOptions({
+  name: 'AliPayConfigureView',
+});
+
+type Props = {
+  id: string;
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+
+const dialogForm = ref<FormInstance>();
+
+const form = reactive({
+  alipayAccount: '',
+  alipayMerchantId: '',
+  signStatus: '' as any as EnumEnterpriseWalletSignStatus,
+  expandindirectOrderStatus: '' as any as EnumEnterpriseWalletExpandindirectOrderStatus,
+  name: '',
+  scene: '' as any as EnumEnterpriseWalletExpandindirectOrderScene,
+  sceneDirections: '',
+  /**杞处鍦烘櫙鎴浘 */
+  sceneFiles: [] as UploadUserFile[],
+  /**鍟嗘埛琛屼笟璧勮川鍥剧墖鎴栧崗璁枃鏈� */
+  sceneQualificationFiles: [] as UploadUserFile[],
+});
+
+const { isLoading, refetch } = useQuery({
+  queryKey: [
+    'enterpriseWalletServices/getEnterpriseWallet',
+    props.id,
+    EnumEnterpriseWalletAccess.Alipay,
+  ],
+  queryFn: async (ctx) => {
+    return await enterpriseWalletServices.getEnterpriseWallet({
+      enterpriseId: props.id,
+      access: EnumEnterpriseWalletAccess.Alipay,
+    });
+  },
+  onSuccess(data) {
+    form.alipayAccount = data.identity;
+    form.alipayMerchantId = data.code;
+    form.expandindirectOrderStatus = data.expandindirectOrderStatus;
+    form.signStatus = data.signStatus;
+    form.name = data.name;
+    form.scene = data.scene || EnumEnterpriseWalletExpandindirectOrderScene.YONGJIN_BAOCHOU;
+    form.name = data.sceneDirections;
+    form.sceneFiles = convertWalletApiToFiles(
+      data.files,
+      EnumEnterpriseWalletExpandindirectOrderFileType.Scene
+    );
+    form.sceneQualificationFiles = convertWalletApiToFiles(
+      data.files,
+      EnumEnterpriseWalletExpandindirectOrderFileType.SceneQualification
+    );
+  },
+});
+
+const { dialogProps: dialogQrcodeProps, handleAdd } = useFormDialog({
+  defaultFormParams: {
+    alipayUrl: '',
+  },
+});
+
+async function openEnterpriseWallet() {
+  try {
+    let params: API.OpenEnterpriseWalletCommand = {
+      access: EnumEnterpriseWalletAccess.Alipay,
+      enterpriseId: props.id,
+    };
+    let res = await enterpriseWalletServices.openEnterpriseWallet(params);
+    if (res) {
+      handleAdd({
+        alipayUrl: res.signUrl,
+      });
+    }
+  } catch (error) {}
+}
+
+async function enterpriseWalletExpandindirectCreate() {
+  try {
+    if (!dialogForm.value) return;
+    const valid = await dialogForm.value.validate();
+    if (!valid) return;
+    let params: API.EnterpriseWalletExpandindirectCreateCommand = {
+      enterpriseId: props.id,
+      identity: form.alipayAccount,
+      name: form.name,
+      scene: form.scene,
+      sceneDirections: form.sceneDirections,
+      sitesInfo: null,
+      files: [
+        ...convertWalletFilesToApi(
+          form.sceneFiles,
+          EnumEnterpriseWalletExpandindirectOrderFileType.Scene
+        ),
+        ...convertWalletFilesToApi(
+          form.sceneQualificationFiles,
+          EnumEnterpriseWalletExpandindirectOrderFileType.SceneQualification
+        ),
+      ],
+    };
+    let res = await enterpriseWalletServices.enterpriseWalletExpandindirectCreate(params);
+    return res;
+  } catch (error) {}
+}
+
+defineExpose({
+  onConfirm: enterpriseWalletExpandindirectCreate,
+});
+</script>
diff --git a/src/views/EnterpriseManage/components/BankConfigureView.vue b/src/views/EnterpriseManage/components/BankConfigureView.vue
new file mode 100644
index 0000000..3ca62c1
--- /dev/null
+++ b/src/views/EnterpriseManage/components/BankConfigureView.vue
@@ -0,0 +1,101 @@
+<template>
+  <LoadingLayout :loading="isLoading">
+    <ProForm :model="form" ref="dialogForm" label-width="120px">
+      <ProFormItemV2 label="寮�鎴锋�昏:" prop="bank">
+        <ProFormText v-model.trim="form.bank" placeholder="璇疯緭鍏ュ紑鎴锋�昏" :maxlength="40" />
+      </ProFormItemV2>
+      <ProFormItemV2 label="寮�鎴锋敮琛�:" prop="bankBranch">
+        <ProFormText v-model.trim="form.bankBranch" 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="signStatus">
+        {{ EnumEnterpriseWalletSignStatusText[form.signStatus] }}
+        <el-button
+          style="margin-left: 10px"
+          type="primary"
+          link
+          @click="refetch({ type: 'inactive' })"
+          >鏍¢獙</el-button
+        >
+      </ProFormItemV2>
+    </ProForm>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import { FormInstance } from 'element-plus';
+import { ProForm, ProFormItemV2, ProFormText, LoadingLayout } from '@bole-core/components';
+import * as enterpriseWalletServices from '@/services/api/enterpriseWallet';
+import { EnumEnterpriseWalletSignStatusText } from '@/constants';
+import { BoleRegExp } from '@bole-core/core';
+import { useQuery } from '@tanstack/vue-query';
+
+defineOptions({
+  name: 'BankConfigureView',
+});
+
+type Props = {
+  id: string;
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+
+const dialogForm = ref<FormInstance>();
+
+const form = reactive({
+  bank: '',
+  bankBranch: '',
+  bankAccount: '',
+  signStatus: '' as any as EnumEnterpriseWalletSignStatus,
+});
+
+const { isLoading, refetch } = useQuery({
+  queryKey: [
+    'enterpriseWalletServices/getEnterpriseWallet',
+    props.id,
+    EnumEnterpriseWalletAccess.PingAnPay,
+  ],
+  queryFn: async () => {
+    return await enterpriseWalletServices.getEnterpriseWallet({
+      enterpriseId: props.id,
+      access: EnumEnterpriseWalletAccess.PingAnPay,
+    });
+  },
+  onSuccess(data) {
+    form.bank = data.bank;
+    form.bankBranch = data.bankBranch;
+    form.bankAccount = data.identity;
+    form.signStatus = data.signStatus;
+  },
+});
+
+async function openEnterpriseWallet() {
+  try {
+    if (!dialogForm.value) return;
+    const valid = await dialogForm.value.validate();
+    if (!valid) return;
+    let params: API.OpenEnterpriseWalletCommand = {
+      access: EnumEnterpriseWalletAccess.PingAnPay,
+      enterpriseId: props.id,
+      bank: form.bank,
+      bankBranch: form.bankBranch,
+      identity: form.bankAccount,
+    };
+    let res = await enterpriseWalletServices.openEnterpriseWallet(params);
+    return res;
+  } catch (error) {}
+}
+
+defineExpose({
+  onConfirm: openEnterpriseWallet,
+});
+</script>
diff --git a/src/views/EnterpriseManage/components/ConfigureDialog.vue b/src/views/EnterpriseManage/components/ConfigureDialog.vue
index 4a8e7f9..e96bea7 100644
--- a/src/views/EnterpriseManage/components/ConfigureDialog.vue
+++ b/src/views/EnterpriseManage/components/ConfigureDialog.vue
@@ -1,167 +1,25 @@
 <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="openEnterpriseWallet"
-              >鑾峰彇绛剧害閾炬帴</el-button
-            >
-          </div>
-        </ProFormItemV2>
-        <ProFormItemV2
-          label="鏀粯瀹濆鍚�:"
-          prop="name"
-          :checkRules="[{ message: '璇疯緭鍏ユ敮浠樺疂濮撳悕' }]"
-        >
-          <ProFormText v-model.trim="form.name" placeholder="璇疯緭鍏ユ敮浠樺疂濮撳悕" />
-        </ProFormItemV2>
-        <ProFormItemV2
-          label="鍟嗘埛ID:"
-          prop="alipayMerchantId"
-          :checkRules="[{ message: '璇疯緭鍏ュ晢鎴稩D' }]"
-        >
-          <ProFormText v-model.trim="form.alipayMerchantId" placeholder="璇疯緭鍏ュ晢鎴稩D" disabled />
-        </ProFormItemV2>
-        <ProFormItemV2 label="涓氬姟鍦烘櫙:" prop="scene" :checkRules="[{ message: '璇烽�夋嫨涓氬姟鍦烘櫙' }]">
-          <ProFormSelect
-            v-model="form.scene"
-            :valueEnum="EnumEnterpriseWalletExpandindirectOrderSceneText"
-            placeholder="璇烽�夋嫨涓氬姟鍦烘櫙"
-          >
-          </ProFormSelect>
-        </ProFormItemV2>
-        <ProFormItemV2
-          label="鍦烘櫙鎻忚堪:"
-          prop="sceneDirections"
-          :checkRules="[{ message: '璇疯緭鍏ュ満鏅弿杩�' }]"
-        >
-          <ProFormText
-            v-model.trim="form.sceneDirections"
-            placeholder="璋�/閫氳繃浠�涔堝獟浠嬶紙APP/web/灏忕▼搴�)/涓昏涓鸿皝鎻愪緵浠�涔堟湇鍔�/鐢ㄤ簬鍦ㄤ粈涔堝満鏅粰浠�涔堜汉缇よ浆璐�"
-          />
-        </ProFormItemV2>
-        <ProFormItemV2
-          label="杞处鍦烘櫙鎴浘:"
-          prop="sceneFiles"
-          :check-rules="[{ type: 'upload', message: '璇蜂笂浼犺浆璐﹀満鏅埅鍥�' }]"
-        >
-          <ProFormUpload
-            v-model:file-url="form.sceneFiles"
-            :limit="5"
-            :limitFileSize="10"
-            accept="png,jpg,jpeg,pdf"
-          ></ProFormUpload>
-        </ProFormItemV2>
-        <ProFormItemV2
-          label="璧勮川鏂囦欢:"
-          prop="sceneQualificationFiles"
-          :check-rules="[{ type: 'upload', message: '璇蜂笂浼犺祫璐ㄦ枃浠�' }]"
-        >
-          <ProFormUpload
-            v-model:file-url="form.sceneQualificationFiles"
-            :limit="5"
-            :limitFileSize="10"
-            accept="png,jpg,jpeg,pdf"
-          ></ProFormUpload>
-        </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.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>
@@ -169,39 +27,15 @@
       </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,
-  UploadUserFile,
-  ProFormImageUpload,
-  ProFormUpload,
-} from '@bole-core/components';
-import { BoleRegExp } from '@bole-core/core';
-import {
-  EnterpriseConfigureType,
-  EnterpriseConfigureTypeText,
-  ChargeTypeEnum,
-  EnumElectronSignAccessText,
-  EnumSmsAccessText,
-  EnumElectronSignAccess,
-  EnumEnterpriseWalletSignStatusText,
-  EnumEnterpriseWalletExpandindirectOrderStatusText,
-  EnumEnterpriseWalletExpandindirectOrderSceneText,
-} 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';
 
 defineOptions({
   name: 'ConfigureDialog',
@@ -209,27 +43,7 @@
 
 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;
-
-  name: string;
-  scene: EnumEnterpriseWalletExpandindirectOrderScene;
-  sceneDirections: string;
-  /**杞处鍦烘櫙鎴浘 */
-  sceneFiles: UploadUserFile[];
-  /**鍟嗘埛琛屼笟璧勮川鍥剧墖鎴栧崗璁枃鏈� */
-  sceneQualificationFiles: UploadUserFile[];
 };
 
 const form = defineModel<Form>('form');
@@ -240,90 +54,46 @@
   (e: 'onCancel'): void;
 }>();
 
-const dialogForm = ref<FormInstance>();
-
-const { enabledElectronSignSettings } = useEnabledElectronSignSettings({
-  all: true,
-});
-
-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) {}
-}
-
-async function getEnterpriseWalletExpandindirectOrder() {
-  try {
-    let res = await enterpriseWalletServices.getEnterpriseWalletExpandindirectOrder({
-      enterpriseId: form.value.id,
-    });
-    if (res) {
-      form.value.expandindirectOrderStatus = res.orderStatus;
-    }
-  } catch (error) {}
-}
+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'
+);
 
 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?.();
+  }
+  if (res) {
+    emit('onConfirm');
+  }
 }
 </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>
diff --git a/src/views/EnterpriseManage/components/ElectronicConfigureView.vue b/src/views/EnterpriseManage/components/ElectronicConfigureView.vue
new file mode 100644
index 0000000..1597a93
--- /dev/null
+++ b/src/views/EnterpriseManage/components/ElectronicConfigureView.vue
@@ -0,0 +1,98 @@
+<template>
+  <LoadingLayout :loading="isLoading">
+    <ProForm :model="form" ref="dialogForm" label-width="120px">
+      <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>
+    </ProForm>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import { FormInstance } from 'element-plus';
+import { ProForm, ProFormItemV2, ProFormSwitch, LoadingLayout } from '@bole-core/components';
+import * as enterpriseServices from '@/services/api/enterprise';
+import { useQuery } from '@tanstack/vue-query';
+import { useEnabledElectronSignSettings } from '@/hooks';
+
+defineOptions({
+  name: 'ElectronicConfigureView',
+});
+
+type Props = {
+  id: string;
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+
+const dialogForm = ref<FormInstance>();
+
+const { enabledElectronSignSettings, invalidateQueries } = useEnabledElectronSignSettings({
+  all: true,
+});
+
+const form = reactive({
+  electronSignAccesses: [] as EnumElectronSignAccess[],
+});
+
+const EnumElectronSignAccessList = computed(() =>
+  Object.values(EnumElectronSignAccess)
+    .filter(Number)
+    .map((x) => Number(x))
+);
+
+const { isLoading } = useQuery({
+  queryKey: ['enterpriseServices/getEnterpriseElectronSignSetting', props.id],
+  queryFn: async () => {
+    return await enterpriseServices.getEnterpriseElectronSignSetting({
+      id: props.id,
+    });
+  },
+  onSuccess(data) {
+    form.electronSignAccesses = EnumElectronSignAccessList.value.map((value) =>
+      data.electronSignAccesses.includes(value) ? value : null
+    );
+  },
+});
+
+async function createOrEditFlexEnterpriseSignSetting() {
+  try {
+    if (!dialogForm.value) return;
+    const valid = await dialogForm.value.validate();
+    if (!valid) return;
+    let params: API.SetEnterpriseElectronSignSettingCommand = {
+      id: props.id,
+      electronSignAccesses: form.electronSignAccesses.filter(Boolean),
+    };
+    let res = await enterpriseServices.setEnterpriseElectronSignSetting(params);
+    invalidateQueries();
+    return res;
+  } catch (error) {}
+}
+
+defineExpose({
+  onConfirm: createOrEditFlexEnterpriseSignSetting,
+});
+</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;
+}
+</style>
diff --git a/src/views/EnterpriseManage/components/ShortMessageConfigureView.vue b/src/views/EnterpriseManage/components/ShortMessageConfigureView.vue
new file mode 100644
index 0000000..2284d2e
--- /dev/null
+++ b/src/views/EnterpriseManage/components/ShortMessageConfigureView.vue
@@ -0,0 +1,98 @@
+<template>
+  <LoadingLayout :loading="isLoading">
+    <ProForm :model="form" ref="dialogForm" label-width="120px">
+      <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>
+    </ProForm>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import { FormInstance } from 'element-plus';
+import {
+  ProForm,
+  ProFormItemV2,
+  ProFormSelect,
+  LoadingLayout,
+  ProFormInputNumber,
+} from '@bole-core/components';
+import * as enterpriseServices from '@/services/api/enterprise';
+import { useQuery } from '@tanstack/vue-query';
+import { EnumSmsAccessText } from '@/constants';
+
+defineOptions({
+  name: 'ShortMessageConfigureView',
+});
+
+type Props = {
+  id: string;
+};
+
+const props = withDefaults(defineProps<Props>(), {});
+
+const dialogForm = ref<FormInstance>();
+
+const form = reactive({
+  smsAccess: '' as any as EnumSmsAccess,
+  smsCost: 0,
+});
+
+const { isLoading } = useQuery({
+  queryKey: ['enterpriseServices/getEnterpriseSmsSetting', props.id],
+  queryFn: async () => {
+    return await enterpriseServices.getEnterpriseSmsSetting({
+      id: props.id,
+    });
+  },
+  onSuccess(data) {
+    form.smsAccess = data.smsAccess;
+    form.smsCost = data.smsCost;
+  },
+});
+
+async function createOrEditFlexEnterpriseMessageSetting() {
+  try {
+    if (!dialogForm.value) return;
+    const valid = await dialogForm.value.validate();
+    if (!valid) return;
+    let params: API.SetEnterpriseSmsSettingCommand = {
+      id: props.id,
+      smsAccess: form.smsAccess,
+      smsCost: form.smsCost,
+    };
+    let res = await enterpriseServices.setEnterpriseSmsSetting(params);
+    return res;
+  } catch (error) {}
+}
+
+defineExpose({
+  onConfirm: createOrEditFlexEnterpriseMessageSetting,
+});
+</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;
+}
+</style>

--
Gitblit v1.9.1