Forráskód Böngészése

调整业务逻辑,修改传参字段

sgc 3 hete
szülő
commit
4d814219c4

+ 4 - 0
src/api/modules/lawyer.ts

@@ -133,3 +133,7 @@ export const exportLawFirm = (params?: any) => {
 export const exportLawFirmReconciliation = (params?: any) => {
   return http.get(url + `/lawyer/firm/reconciliation/export`, params, { responseType: "blob" });
 };
+//////////////////////////// 律所 查询 收款账号的接口 ////////////////////////////
+export const getSelectList = (params?: any) => {
+  return http.get(url + `/lawyer/firm/getList`, params);
+};

+ 57 - 24
src/views/lawyerManagement/lawyer/components/LawyerDialog.vue

@@ -37,12 +37,34 @@
           <el-switch v-model="form.status" :active-value="1" :inactive-value="0" />
         </el-form-item>
         <el-form-item label="所属律所" prop="lawFirmId">
-          <el-select v-model="form.lawFirmId" placeholder="请选择所属律所" filterable>
+          <el-select
+            v-model="form.lawFirmId"
+            placeholder="请选择所属律所"
+            remote
+            filterable
+            reserve-keyword
+            :remote-method="handleFirmRemote"
+            :loading="props.lawFirmLoading"
+            @visible-change="handleFirmDropdown"
+          >
             <el-option v-for="item in lawFirmOptions" :key="item.value" :label="item.label" :value="item.value" />
           </el-select>
         </el-form-item>
         <el-form-item label="收款账号" prop="paymentNum">
-          <el-input v-model="form.paymentNum" placeholder="请选择所属律所后自动带出" disabled />
+          <el-select
+            v-model="form.paymentNum"
+            placeholder="请选择所属律所后选择收款账号"
+            :disabled="paymentOptions.length === 0"
+            filterable
+            clearable
+          >
+            <el-option
+              v-for="item in paymentOptions"
+              :key="item.id ?? item.paymentAccount"
+              :label="item.paymentAccount"
+              :value="item.paymentAccount"
+            />
+          </el-select>
         </el-form-item>
       </el-form>
     </div>
@@ -64,7 +86,13 @@ interface DialogOptions {
 }
 
 const props = defineProps<{
-  lawFirmOptions: { label: string; value: string | number; paymentAccount?: string }[];
+  lawFirmOptions: {
+    label: string;
+    value: string | number;
+    paymentList?: { id?: string | number; paymentAccount: string }[];
+  }[];
+  lawFirmLoading?: boolean;
+  fetchLawFirms?: (keyword?: string) => Promise<void>;
   sceneOptions: any[];
   professionalOptions: { label: string | number; value: string | number }[];
 }>();
@@ -99,7 +127,7 @@ const rules = reactive({
   practiceStartDate: [{ required: true, message: "请输入从业时间", trigger: "blur" }],
   // expertiseAreaInfo: [{ required: true, message: "请输入专业领域", trigger: "blur" }],
   firstLevelScenario: [{ required: true, message: "请选择法律场景", trigger: "change" }],
-  paymentNum: [{ required: true, message: "请选择所属律所获取收款账号", trigger: "change" }],
+  paymentNum: [{ required: true, message: "请选择收款账号", trigger: "change" }],
   lawFirmId: [{ required: true, message: "请选择所属律所", trigger: "change" }]
 });
 
@@ -119,44 +147,49 @@ const resetForm = () => {
 
 const sceneTreeProps = { value: "id", label: "name", children: "children" };
 
+const paymentOptions = computed(() => {
+  const target = props.lawFirmOptions.find(option => option.value === form.lawFirmId);
+  return target?.paymentList || [];
+});
+
+const initializingFirm = ref(false);
+
 const open = (payload: DialogOptions) => {
   resetForm();
   options.value = payload;
+  initializingFirm.value = true;
   if (payload.row) {
     Object.assign(form, payload.row);
     if (payload.row.firmId && !payload.row.lawFirmId) {
       form.lawFirmId = payload.row.firmId;
     }
   }
+  props.fetchLawFirms?.(payload.row?.firmName || "");
   visible.value = true;
-  nextTick(() => formRef.value?.clearValidate());
-};
-
-const syncPaymentAccount = () => {
-  if (!form.lawFirmId) {
-    form.paymentNum = "";
-    formRef.value?.validateField("paymentNum").catch(() => {});
-    return;
-  }
-  const target = props.lawFirmOptions.find(option => option.value === form.lawFirmId);
-  form.paymentNum = (target?.paymentAccount || "").trim();
-  formRef.value?.validateField("paymentNum").catch(() => {});
+  nextTick(() => {
+    formRef.value?.clearValidate();
+    initializingFirm.value = false;
+  });
 };
 
 watch(
   () => form.lawFirmId,
   () => {
-    syncPaymentAccount();
+    if (initializingFirm.value) return;
+    form.paymentNum = "";
+    formRef.value?.validateField("paymentNum").catch(() => {});
   }
 );
 
-watch(
-  () => props.lawFirmOptions,
-  () => {
-    if (form.lawFirmId) syncPaymentAccount();
-  },
-  { deep: true }
-);
+const handleFirmRemote = (keyword = "") => {
+  props.fetchLawFirms?.(keyword.trim());
+};
+
+const handleFirmDropdown = (visible: boolean) => {
+  if (visible && !props.lawFirmOptions.length) {
+    props.fetchLawFirms?.("");
+  }
+};
 
 const emits = defineEmits<{
   success: [];

+ 17 - 6
src/views/lawyerManagement/lawyer/index.vue

@@ -12,6 +12,8 @@
     <LawyerDialog
       ref="lawyerDialogRef"
       :law-firm-options="lawFirmOptions"
+      :law-firm-loading="lawFirmLoading"
+      :fetch-law-firms="fetchLawFirmOptions"
       :scene-options="sceneOptions"
       :professional-options="professionalOptions"
       @success="refreshTable"
@@ -29,7 +31,7 @@ import {
   addLawyerUser,
   deleteLawyerUser,
   editLawyerUser,
-  getLawFirmPage,
+  getSelectList,
   getScenePage,
   getExpertiseAreaPage
 } from "@/api/modules/lawyer";
@@ -39,7 +41,10 @@ import { useUserStore } from "@/stores/modules/user";
 
 const proTable = ref<ProTableInstance>();
 const lawyerDialogRef = ref<InstanceType<typeof LawyerDialog>>();
-const lawFirmOptions = ref<{ label: string; value: string | number; paymentAccount?: string }[]>([]);
+const lawFirmOptions = ref<
+  { label: string; value: string | number; paymentList?: { id?: string | number; paymentAccount: string }[] }[]
+>([]);
+const lawFirmLoading = ref(false);
 const sceneOptions = ref<any[]>([]);
 const professionalOptions = ref<{ label: string; value: string | number }[]>([]);
 
@@ -164,18 +169,24 @@ const handleDelete = (row: any) => {
     .catch(() => {});
 };
 
-const fetchLawFirmOptions = async () => {
+const fetchLawFirmOptions = async (keyword = "") => {
+  lawFirmLoading.value = true;
   try {
-    const res: any = await getLawFirmPage({ page: 1, size: 999 });
-    const listSource = res.data.records || [];
+    const res: any = await getSelectList({ firmName: keyword });
+    const listSource = res?.data || [];
     lawFirmOptions.value = listSource.map((item: any) => ({
       label: item.firmName,
       value: item.id,
-      paymentAccount: item.paymentAccount
+      paymentList: (item.paymentList || []).map((payment: any) => ({
+        ...payment,
+        paymentAccount: payment.paymentAccount || ""
+      }))
     }));
   } catch (error) {
     console.error("获取律所列表失败", error);
     lawFirmOptions.value = [];
+  } finally {
+    lawFirmLoading.value = false;
   }
 };