|
|
@@ -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: [];
|