From db42d47f5692ef64e5436c5a6d29dcb537b44596 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期一, 26 一月 2026 16:36:13 +0800
Subject: [PATCH] 浪潮对接单点登录:mis调整

---
 src/views/financialManagement/loanManagement/Modal.vue |  222 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 222 insertions(+), 0 deletions(-)

diff --git a/src/views/financialManagement/loanManagement/Modal.vue b/src/views/financialManagement/loanManagement/Modal.vue
new file mode 100644
index 0000000..73b2cc3
--- /dev/null
+++ b/src/views/financialManagement/loanManagement/Modal.vue
@@ -0,0 +1,222 @@
+<template>
+  <FormDialog
+    v-model="dialogVisible"
+    :title="dialogTitle"
+    :operationType="operationType"
+    width="60%"
+    @confirm="sendForm"
+    @close="close"
+    @cancel="close"
+  >
+    <el-form
+      ref="formRef"
+      :model="form"
+      :rules="formRules"
+      label-width="120px"
+    >
+      <el-form-item label="鍊熸浜哄鍚�" prop="borrowerName">
+        <el-input v-model="form.borrowerName" placeholder="璇疯緭鍏ュ�熸浜哄鍚�" />
+      </el-form-item>
+      <el-form-item label="鍊熸閲戦锛堝厓锛�" prop="borrowAmount">
+        <el-input-number
+          :step="0.01"
+          :min="0"
+          :precision="2"
+          style="width: 100%"
+          v-model="form.borrowAmount"
+          placeholder="璇疯緭鍏ュ�熸閲戦"
+        />
+      </el-form-item>
+      <el-form-item label="鍊熸鍒╃巼锛�%锛�" prop="interestRate">
+        <el-input-number
+          :step="0.01"
+          :min="0"
+          :precision="2"
+          style="width: 100%"
+          v-model="form.interestRate"
+          placeholder="璇疯緭鍏ュ�熸鍒╃巼锛屽锛�5.85"
+        />
+      </el-form-item>
+      <el-form-item label="鍊熸鏃ユ湡" prop="borrowDate">
+        <el-date-picker
+          style="width: 100%"
+          v-model="form.borrowDate"
+          format="YYYY-MM-DD"
+          value-format="YYYY-MM-DD"
+          type="date"
+          placeholder="璇烽�夋嫨鍊熸鏃ユ湡"
+          clearable
+        />
+      </el-form-item>
+      <!-- 瀹為檯杩樻鏃ユ湡锛氫粎鈥滆繕娆锯�濇椂鍙~ -->
+      <el-form-item
+        v-if="operationType === 'repay'"
+        label="瀹為檯杩樻鏃ユ湡"
+        prop="repayDate"
+      >
+        <el-date-picker
+          style="width: 100%"
+          v-model="form.repayDate"
+          format="YYYY-MM-DD"
+          value-format="YYYY-MM-DD"
+          type="date"
+          placeholder="璇烽�夋嫨瀹為檯杩樻鏃ユ湡锛堣繕娆惧悗濉啓锛�"
+          clearable
+        />
+      </el-form-item>
+      <el-form-item label="澶囨敞" prop="remark">
+        <el-input
+          v-model="form.remark"
+          type="textarea"
+          :rows="3"
+          placeholder="璇疯緭鍏ュ娉紙鍊熸璇存槑锛�"
+        />
+      </el-form-item>
+    </el-form>
+  </FormDialog>
+</template>
+
+<script setup>
+import { add, update } from "@/api/financialManagement/loanManagement";
+import useFormData from "@/hooks/useFormData";
+import FormDialog from "@/components/Dialog/FormDialog.vue";
+import { ElMessage } from "element-plus";
+import { ref } from "vue";
+
+defineOptions({
+  name: "鍊熸鏂板缂栬緫",
+});
+
+const emits = defineEmits(["success"]);
+
+const formRef = ref(null);
+const dialogVisible = ref(false);
+const operationType = ref("add"); // add | edit
+const id = ref(undefined);
+const submitting = ref(false);
+
+const dialogTitle = (type) => {
+  if (type === "edit") return "缂栬緫鍊熸";
+  if (type === "repay") return "杩樻";
+  return "鏂板鍊熸";
+};
+
+const formRules = {
+  borrowerName: [{ required: true, trigger: "blur", message: "璇疯緭鍏ュ�熸浜哄鍚�" }],
+  borrowAmount: [{ required: true, trigger: "blur", message: "璇疯緭鍏ュ�熸閲戦" }],
+  interestRate: [{ required: true, trigger: "blur", message: "璇疯緭鍏ュ�熸鍒╃巼" }],
+  borrowDate: [{ required: true, trigger: "change", message: "璇烽�夋嫨鍊熸鏃ユ湡" }],
+  repayDate: [
+    {
+      validator: (_rule, value, callback) => {
+        if (operationType.value === "repay" && !value) {
+          callback(new Error("璇烽�夋嫨瀹為檯杩樻鏃ユ湡"));
+          return;
+        }
+        callback();
+      },
+      trigger: "change",
+    },
+  ],
+};
+
+const { form, resetForm } = useFormData({
+  borrowerName: undefined, // 鍊熸浜哄鍚�
+  borrowAmount: undefined, // 鍊熸閲戦锛堝厓锛�
+  interestRate: undefined, // 鍊熸鍒╃巼锛堝锛�5.85 浠h〃5.85%锛�
+  borrowDate: undefined, // 鍊熸鏃ユ湡
+  repayDate: undefined, // 瀹為檯杩樻鏃ユ湡锛堣繕娆惧悗濉厖锛�
+  remark: undefined, // 澶囨敞锛堝�熸璇存槑锛�
+});
+
+const sendForm = () => {
+  if (submitting.value) return;
+  formRef.value?.validate(async (valid) => {
+    if (valid) {
+      submitting.value = true;
+      try {
+        const isRepay = operationType.value === "repay";
+        // 杩樻锛氫笉灞曠ず status锛屼絾鎻愪氦鏃跺己鍒朵紶 status=2锛岃蛋鏇存柊鎺ュ彛
+        const payload = isRepay
+          ? { id: id.value, ...form, status: 2 }
+          : id.value
+            ? { id: id.value, ...form }
+            : form;
+
+        const { code } = isRepay
+          ? await update(payload)
+          : id.value
+            ? await update(payload)
+            : await add(payload);
+        if (code == 200) {
+          emits("success");
+          ElMessage({ message: "鎿嶄綔鎴愬姛", type: "success" });
+          close();
+        }
+      } finally {
+        submitting.value = false;
+      }
+    }
+  });
+};
+
+const close = () => {
+  resetForm();
+  formRef.value?.clearValidate();
+  id.value = undefined;
+  dialogVisible.value = false;
+};
+
+// 缂栬緫锛氱洿鎺ョ敤鍒楄〃琛屾暟鎹洖濉紙閬垮厤渚濊禆璇︽儏鎺ュ彛锛�
+const loadForm = async (row) => {
+  const rowId = row?.id;
+  operationType.value = "edit";
+  id.value = rowId;
+  dialogVisible.value = true;
+  if (rowId) {
+    form.borrowerName = row.borrowerName;
+    form.borrowAmount = row.borrowAmount;
+    form.interestRate = row.interestRate;
+    form.borrowDate = row.borrowDate;
+    form.repayDate = row.repayDate;
+    form.remark = row.remark;
+  } else {
+    resetForm();
+    formRef.value?.clearValidate();
+  }
+};
+
+// 杩樻锛氭墦寮�寮圭獥锛屼粎濉啓瀹為檯杩樻鏃ユ湡锛屾彁浜ゆ椂寮哄埗 status=2
+const repay = async (row) => {
+  const rowId = row?.id;
+  operationType.value = "repay";
+  id.value = rowId;
+  dialogVisible.value = true;
+  if (rowId) {
+    // 涓轰簡璧� update 鎺ュ彛鏇寸ǔ濡ワ紝甯︿笂鍘熸湁鏁版嵁锛涘彧璁╃敤鎴烽�� repayDate
+    form.borrowerName = row.borrowerName;
+    form.borrowAmount = row.borrowAmount;
+    form.interestRate = row.interestRate;
+    form.borrowDate = row.borrowDate;
+    form.remark = row.remark;
+    form.repayDate = undefined;
+  } else {
+    resetForm();
+    formRef.value?.clearValidate();
+  }
+};
+
+const openModal = () => {
+  operationType.value = "add";
+  id.value = undefined;
+  resetForm();
+  formRef.value?.clearValidate();
+  dialogVisible.value = true;
+};
+
+defineExpose({
+  openModal,
+  loadForm,
+  repay,
+});
+</script>

--
Gitblit v1.9.3