ZN
2026-03-25 dd630fede0cc46500fe898c75464e3e04ce82b0f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<template>
  <view class="sales-account">
    <PageHeader :title="pageTitle" @back="goBack" />
    <view class="search-section">
      <up-form :model="form" :rules="rules" ref="formRef">
        <up-form-item label="借款人姓名" prop="borrowerName">
          <up-input v-model="form.borrowerName" placeholder="请输入" />
        </up-form-item>
        <up-form-item label="借款金额(元)" prop="borrowAmount">
          <up-input type="number" v-model="form.borrowAmount" placeholder="请输入" />
        </up-form-item>
        <up-form-item label="借款利率(%)" prop="interestRate">
          <up-input type="number" v-model="form.interestRate" placeholder="例如 5.85" />
        </up-form-item>
        <up-form-item label="借款日期" prop="borrowDate">
          <uni-datetime-picker type="date" v-model="form.borrowDate" />
        </up-form-item>
        <up-form-item v-if="operationType==='repay'" label="实际还款日期" prop="repayDate">
          <uni-datetime-picker type="date" v-model="form.repayDate" />
        </up-form-item>
        <up-form-item label="备注" prop="remark">
          <up-textarea v-model="form.remark" autoHeight />
        </up-form-item>
      </up-form>
      <view class="actions">
        <u-button type="primary" @click="submitForm">保存</u-button>
      </view>
    </view>
  </view>
</template>
 
<script setup>
import { ref, reactive, computed } from "vue";
import { onLoad } from "@dcloudio/uni-app";
import { add, update } from "@/api/financialManagement/loanManagement";
 
const operationType = ref("add");
const id = ref(undefined);
 
const formRef = ref();
const form = reactive({
  borrowerName: "",
  borrowAmount: undefined,
  interestRate: undefined,
  borrowDate: undefined,
  repayDate: undefined,
  remark: "",
});
 
const rules = {
  borrowerName: [{ required: true, message: "请输入", trigger: "blur" }],
  borrowAmount: [{ required: true, message: "请输入", trigger: "blur" }],
  interestRate: [{ required: true, message: "请输入", trigger: "blur" }],
  borrowDate: [{ required: true, message: "请选择", trigger: "change" }],
  repayDate: [{ validator: (_r, v, cb) => { if (operationType.value==='repay' && !v) return cb(new Error('请选择')); cb(); }, trigger: "change" }],
};
 
const pageTitle = computed(() => operationType.value==='repay' ? "还款" : operationType.value==='edit' ? "编辑借款" : "新增借款");
 
const submitForm = () => {
  formRef.value?.validate(async (valid) => {
    if (!valid) return;
    const payload = operationType.value==='repay' ? { ...form, status: 2 } : { ...form };
    const res = operationType.value==='add' ? await add(payload) : await update({ id: id.value, ...payload });
    if (res?.code === 200) {
      uni.navigateBack();
    }
  });
};
 
const goBack = () => {
  uni.navigateBack();
};
 
onLoad((query) => {
  operationType.value = query?.type || "add";
  if (query?.id) {
    id.value = query.id;
    // 通过导航参数携带的字段回填由 index 页决定,这里仅保留最简逻辑
  }
});
</script>
 
<style scoped lang="scss">
@import "@/styles/sales-common.scss";
.actions { margin-top: 16px; }
</style>